diff --git a/configs/milvus.yaml b/configs/milvus.yaml index a2cdfdad06..ee71415031 100644 --- a/configs/milvus.yaml +++ b/configs/milvus.yaml @@ -96,6 +96,10 @@ minio: # Log level for aws sdk log. # Supported level: off, fatal, error, warn, info, debug, trace logLevel: error + # Cloud data center region + region: "" + # Cloud whether use virtual host bucket mode + useVirtualHost: false # Milvus supports three MQ: rocksmq(based on RockDB), Pulsar and Kafka, which should be reserved in config what you use. # There is a note about enabling priority if we config multiple mq in this file diff --git a/go.mod b/go.mod index 85bf62ecd3..9b7c3f33d7 100644 --- a/go.mod +++ b/go.mod @@ -25,10 +25,10 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/jarcoal/httpmock v1.0.8 github.com/jinzhu/now v1.1.5 // indirect - github.com/klauspost/compress v1.14.2 + github.com/klauspost/compress v1.16.5 github.com/lingdor/stackerror v0.0.0-20191119040541-976d8885ed76 github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d - github.com/minio/minio-go/v7 v7.0.17 + github.com/minio/minio-go/v7 v7.0.56 github.com/opentracing/opentracing-go v1.2.0 github.com/panjf2000/ants/v2 v2.7.2 github.com/pkg/errors v0.9.1 @@ -81,7 +81,7 @@ require ( github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-units v0.4.0 // indirect - github.com/dustin/go-humanize v1.0.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c // indirect github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect @@ -109,7 +109,6 @@ require ( github.com/jonboulle/clockwork v0.2.2 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/asmfmt v1.3.1 // indirect - github.com/klauspost/cpuid v1.3.1 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/linkedin/goavro/v2 v2.11.1 // indirect @@ -120,9 +119,8 @@ require ( github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect - github.com/minio/md5-simd v1.1.0 // indirect - github.com/minio/sha256-simd v0.1.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/minio/md5-simd v1.1.2 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -135,9 +133,9 @@ require ( github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.26.0 // indirect github.com/prometheus/procfs v0.6.0 // indirect - github.com/rs/xid v1.2.1 // indirect + github.com/rs/xid v1.5.0 // indirect github.com/samber/lo v1.27.0 - github.com/sirupsen/logrus v1.8.1 // indirect + github.com/sirupsen/logrus v1.9.2 // indirect github.com/soheilhy/cmux v0.1.5 github.com/spf13/afero v1.6.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -175,7 +173,7 @@ require ( gonum.org/v1/gonum v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 // indirect - gopkg.in/ini.v1 v1.62.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.2.0 // indirect diff --git a/go.sum b/go.sum index bff7d09aed..8983f0feb7 100644 --- a/go.sum +++ b/go.sum @@ -206,8 +206,9 @@ github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/ github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v0.0.0-20180829124132-7f401d37b68a/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= @@ -397,14 +398,12 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211008130755-947d60d73cc0/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -486,7 +485,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/qthttptest v0.1.1/go.mod h1:aTlAv8TYaflIiTDIQYzxnl1QdPjAg8Q8qJMErpKy6A4= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= @@ -509,13 +507,11 @@ github.com/klauspost/asmfmt v1.3.1/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.2 h1:S0OHlFk/Gbon/yauFJ4FfJJF5V0fc5HbBTJazi28pRw= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= -github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= 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= @@ -588,15 +584,14 @@ github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpsp github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= -github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= -github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= -github.com/minio/minio-go/v7 v7.0.17 h1:5SiS3pqiQDbNhmXMxtqn2HzAInbN5cbHT7ip9F0F07E= -github.com/minio/minio-go/v7 v7.0.17/go.mod h1:SyQ1IFeJuaa+eV5yEDxW7hYE1s5VVq5sgImDe27R+zg= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= +github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= +github.com/minio/minio-go/v7 v7.0.56 h1:pkZplIEHu8vinjkmhsexcXpWth2tjVLphrTZx6fBVZY= +github.com/minio/minio-go/v7 v7.0.56/go.mod h1:NUDy4A4oXPq1l2yK6LTSvCEzAMeIcoz9lcj5dbzSrRE= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= @@ -708,8 +703,9 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -732,12 +728,11 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= +github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0= github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= @@ -919,7 +914,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -1137,11 +1131,11 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= @@ -1384,9 +1378,9 @@ gopkg.in/httprequest.v1 v1.2.1/go.mod h1:x2Otw96yda5+8+6ZeWwHIJTFkEHWP/qP8pJOzqE gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= diff --git a/internal/core/src/common/type_c.h b/internal/core/src/common/type_c.h index f22bfb2426..69e6de5400 100644 --- a/internal/core/src/common/type_c.h +++ b/internal/core/src/common/type_c.h @@ -85,8 +85,10 @@ typedef struct CStorageConfig { const char* storage_type; const char* iam_endpoint; const char* log_level; + const char* region; bool useSSL; bool useIAM; + bool useVirtualHost; } CStorageConfig; #ifdef __cplusplus diff --git a/internal/core/src/indexbuilder/index_c.cpp b/internal/core/src/indexbuilder/index_c.cpp index af41e7c0c0..dbe2dfcb40 100644 --- a/internal/core/src/indexbuilder/index_c.cpp +++ b/internal/core/src/indexbuilder/index_c.cpp @@ -266,6 +266,8 @@ NewBuildIndexInfo(CBuildIndexInfo* c_build_index_info, CStorageConfig c_storage_ storage_config.iam_endpoint = std::string(c_storage_config.iam_endpoint); storage_config.useSSL = c_storage_config.useSSL; storage_config.useIAM = c_storage_config.useIAM; + storage_config.region = c_storage_config.region; + storage_config.useVirtualHost = c_storage_config.useVirtualHost; *c_build_index_info = build_index_info.release(); auto status = CStatus(); diff --git a/internal/core/src/storage/MinioChunkManager.cpp b/internal/core/src/storage/MinioChunkManager.cpp index ea4ea79ee4..667d20dc52 100644 --- a/internal/core/src/storage/MinioChunkManager.cpp +++ b/internal/core/src/storage/MinioChunkManager.cpp @@ -161,8 +161,8 @@ MinioChunkManager::BuildS3Client(const StorageConfig& storage_config, const Aws: AssertInfo(!aws_credentials.GetAWSSecretKey().empty(), "if use iam, secret key should not be empty"); AssertInfo(!aws_credentials.GetSessionToken().empty(), "if use iam, token should not be empty"); - client_ = std::make_shared(provider, config, - Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false); + client_ = std::make_shared( + provider, config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, storage_config.useVirtualHost); } else { BuildAccessKeyClient(storage_config, config); } @@ -177,7 +177,7 @@ MinioChunkManager::BuildAccessKeyClient(const StorageConfig& storage_config, client_ = std::make_shared( Aws::Auth::AWSCredentials(ConvertToAwsString(storage_config.access_key_id), ConvertToAwsString(storage_config.access_key_value)), - config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false); + config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, storage_config.useVirtualHost); } void @@ -186,7 +186,7 @@ MinioChunkManager::BuildGoogleCloudClient(const StorageConfig& storage_config, if (storage_config.useIAM) { // Using S3 client instead of google client because of compatible protocol client_ = std::make_shared(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, - false); + storage_config.useVirtualHost); } else { BuildAccessKeyClient(storage_config, config); } @@ -203,7 +203,8 @@ MinioChunkManager::BuildAliyunCloudClient(const StorageConfig& storage_config, AssertInfo(!aliyun_credentials.GetAWSSecretKey().empty(), "if use iam, secret key should not be empty"); AssertInfo(!aliyun_credentials.GetSessionToken().empty(), "if use iam, token should not be empty"); client_ = std::make_shared(aliyun_provider, config, - Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, true); + Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, + storage_config.useVirtualHost); } else { BuildAccessKeyClient(storage_config, config); } @@ -236,6 +237,10 @@ MinioChunkManager::MinioChunkManager(const StorageConfig& storage_config) config.verifySSL = false; } + if (!storage_config.region.empty()) { + config.region = ConvertToAwsString(storage_config.region); + } + if (storageType == RemoteStorageType::S3) { BuildS3Client(storage_config, config); } else if (storageType == RemoteStorageType::ALIYUN_CLOUD) { @@ -257,8 +262,8 @@ MinioChunkManager::MinioChunkManager(const StorageConfig& storage_config) } MinioChunkManager::~MinioChunkManager() { - ShutdownSDKAPI(); client_.reset(); + ShutdownSDKAPI(); } uint64_t diff --git a/internal/core/src/storage/Types.h b/internal/core/src/storage/Types.h index 3b6b6c00c2..fe0c7df0b2 100644 --- a/internal/core/src/storage/Types.h +++ b/internal/core/src/storage/Types.h @@ -88,8 +88,10 @@ struct StorageConfig { std::string storage_type = "minio"; std::string iam_endpoint = ""; std::string log_level = "error"; + std::string region = ""; bool useSSL = false; bool useIAM = false; + bool useVirtualHost = false; bool operator==(const StorageConfig& other) const { @@ -97,7 +99,9 @@ struct StorageConfig { access_key_id.compare(other.access_key_id) == 0 && access_key_value.compare(other.access_key_value) == 0 && remote_root_path.compare(other.remote_root_path) == 0 && storage_type.compare(other.storage_type) == 0 && - iam_endpoint.compare(other.iam_endpoint) == 0 && useSSL == other.useSSL && useIAM == other.useIAM; + iam_endpoint.compare(other.iam_endpoint) == 0 && useSSL == other.useSSL && useIAM == other.useIAM && + log_level.compare(other.log_level) && region.compare(other.region) == 0 && + useVirtualHost == other.useVirtualHost; } }; diff --git a/internal/core/src/storage/storage_c.cpp b/internal/core/src/storage/storage_c.cpp index 11b9ad26c7..56ca91a0a4 100644 --- a/internal/core/src/storage/storage_c.cpp +++ b/internal/core/src/storage/storage_c.cpp @@ -55,6 +55,8 @@ InitRemoteChunkManagerSingleton(CStorageConfig c_storage_config) { storage_config.log_level = std::string(c_storage_config.log_level); storage_config.useSSL = c_storage_config.useSSL; storage_config.useIAM = c_storage_config.useIAM; + storage_config.useVirtualHost = c_storage_config.useVirtualHost; + storage_config.region = c_storage_config.region; milvus::storage::RemoteChunkManagerFactory::GetInstance().Init(storage_config); return milvus::SuccessCStatus(); diff --git a/internal/core/unittest/test_minio_chunk_manager.cpp b/internal/core/unittest/test_minio_chunk_manager.cpp index e76a4d8be1..e240d49f25 100644 --- a/internal/core/unittest/test_minio_chunk_manager.cpp +++ b/internal/core/unittest/test_minio_chunk_manager.cpp @@ -30,11 +30,13 @@ class MinioChunkManagerTest : public testing::Test { virtual void SetUp() { - chunk_manager_ = std::make_unique(get_default_storage_config()); + configs_ = get_default_storage_config(); + chunk_manager_ = std::make_unique(configs_); } protected: MinioChunkManagerPtr chunk_manager_; + StorageConfig configs_; }; StorageConfig @@ -48,8 +50,8 @@ get_google_cloud_storage_config() { auto iamEndPoint = ""; auto bucketName = "gcp-zilliz-infra-test"; - return StorageConfig{endpoint, bucketName, accessKey, accessValue, rootPath, - "minio", iamEndPoint, "error", useSSL, useIam}; + return StorageConfig{endpoint, bucketName, accessKey, accessValue, rootPath, "minio", + iamEndPoint, "error", "", useSSL, useIam}; } class GoogleChunkManagerTest : public testing::Test { @@ -95,7 +97,7 @@ TEST_F(MinioChunkManagerTest, BucketNegtive) { } TEST_F(MinioChunkManagerTest, ObjectExist) { - string testBucketName = "test-objexist"; + string testBucketName = configs_.bucket_name; string objPath = "1/3"; chunk_manager_->SetBucketName(testBucketName); if (!chunk_manager_->BucketExists(testBucketName)) { @@ -108,15 +110,16 @@ TEST_F(MinioChunkManagerTest, ObjectExist) { } TEST_F(MinioChunkManagerTest, WritePositive) { - string testBucketName = "test-write"; + string testBucketName = configs_.bucket_name; chunk_manager_->SetBucketName(testBucketName); EXPECT_EQ(chunk_manager_->GetBucketName(), testBucketName); - if (!chunk_manager_->BucketExists(testBucketName)) { - chunk_manager_->CreateBucket(testBucketName); - } + // if (!chunk_manager_->BucketExists(testBucketName)) { + // chunk_manager_->CreateBucket(testBucketName); + // } + auto has_bucket = chunk_manager_->BucketExists(testBucketName); uint8_t data[5] = {0x17, 0x32, 0x45, 0x34, 0x23}; - string path = "1/3/5"; + string path = "1"; chunk_manager_->Write(path, data, sizeof(data)); bool exist = chunk_manager_->Exist(path); @@ -141,7 +144,7 @@ TEST_F(MinioChunkManagerTest, WritePositive) { } TEST_F(MinioChunkManagerTest, ReadPositive) { - string testBucketName = "test-read"; + string testBucketName = configs_.bucket_name; chunk_manager_->SetBucketName(testBucketName); EXPECT_EQ(chunk_manager_->GetBucketName(), testBucketName); diff --git a/internal/core/unittest/test_utils/indexbuilder_test_utils.h b/internal/core/unittest/test_utils/indexbuilder_test_utils.h index 56d4c5cc39..47e9e8704d 100644 --- a/internal/core/unittest/test_utils/indexbuilder_test_utils.h +++ b/internal/core/unittest/test_utils/indexbuilder_test_utils.h @@ -95,9 +95,11 @@ get_default_storage_config() { auto iamEndPoint = minioConfig["iamEndpoint"].as(); auto logLevel = minioConfig["logLevel"].as(); auto bucketName = minioConfig["bucketName"].as(); + auto useVirHost = minioConfig["useVirtualHost"].as(); + auto region = minioConfig["region"].as(); - return StorageConfig{endpoint, bucketName, accessKey, accessValue, rootPath, - "minio", iamEndPoint, logLevel, useSSL, useIam}; + return StorageConfig{endpoint, bucketName, accessKey, accessValue, rootPath, "minio", + iamEndPoint, logLevel, region, useSSL, useIam, useVirHost}; } void @@ -109,6 +111,7 @@ delete_cstorage_config(CStorageConfig config) { delete[] config.remote_root_path; delete[] config.storage_type; delete[] config.iam_endpoint; + delete[] config.region; } class TestConfigWrapper { diff --git a/internal/datacoord/server_test.go b/internal/datacoord/server_test.go index ebe1a5547d..e9b21cab97 100644 --- a/internal/datacoord/server_test.go +++ b/internal/datacoord/server_test.go @@ -4558,7 +4558,7 @@ func Test_newChunkManagerFactory(t *testing.T) { storageCli, err := server.newChunkManagerFactory() assert.Nil(t, storageCli) assert.Error(t, err) - assert.Contains(t, err.Error(), "too many colons in address") + assert.Contains(t, err.Error(), "invalid port") }) t.Run("local storage init", func(t *testing.T) { @@ -4592,7 +4592,7 @@ func Test_initGarbageCollection(t *testing.T) { storageCli, err := server.newChunkManagerFactory() assert.Nil(t, storageCli) assert.Error(t, err) - assert.Contains(t, err.Error(), "too many colons in address") + assert.Contains(t, err.Error(), "invalid port") }) } diff --git a/internal/indexcoord/index_builder.go b/internal/indexcoord/index_builder.go index ad43ce5b61..a220336723 100644 --- a/internal/indexcoord/index_builder.go +++ b/internal/indexcoord/index_builder.go @@ -290,6 +290,8 @@ func (ib *indexBuilder) process(buildID UniqueID) bool { UseIAM: Params.MinioCfg.UseIAM, IAMEndpoint: Params.MinioCfg.IAMEndpoint, StorageType: Params.CommonCfg.StorageType, + Region: Params.MinioCfg.Region, + UseVirtualHost: Params.MinioCfg.UseVirtualHost, } } req := &indexpb.CreateJobRequest{ diff --git a/internal/proto/index_coord.proto b/internal/proto/index_coord.proto index efd7b41b6c..410a1c0077 100644 --- a/internal/proto/index_coord.proto +++ b/internal/proto/index_coord.proto @@ -208,6 +208,8 @@ message StorageConfig { bool useIAM = 7; string IAMEndpoint = 8; string storage_type = 9; + bool use_virtual_host = 10; + string region = 11; } message CreateJobRequest { diff --git a/internal/proto/indexpb/index_coord.pb.go b/internal/proto/indexpb/index_coord.pb.go index 2630b57735..4460c2b70d 100644 --- a/internal/proto/indexpb/index_coord.pb.go +++ b/internal/proto/indexpb/index_coord.pb.go @@ -1397,6 +1397,8 @@ type StorageConfig struct { UseIAM bool `protobuf:"varint,7,opt,name=useIAM,proto3" json:"useIAM,omitempty"` IAMEndpoint string `protobuf:"bytes,8,opt,name=IAMEndpoint,proto3" json:"IAMEndpoint,omitempty"` StorageType string `protobuf:"bytes,9,opt,name=storage_type,json=storageType,proto3" json:"storage_type,omitempty"` + UseVirtualHost bool `protobuf:"varint,10,opt,name=use_virtual_host,json=useVirtualHost,proto3" json:"use_virtual_host,omitempty"` + Region string `protobuf:"bytes,11,opt,name=region,proto3" json:"region,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1490,6 +1492,20 @@ func (m *StorageConfig) GetStorageType() string { return "" } +func (m *StorageConfig) GetUseVirtualHost() bool { + if m != nil { + return m.UseVirtualHost + } + return false +} + +func (m *StorageConfig) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + type CreateJobRequest struct { ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"` IndexFilePrefix string `protobuf:"bytes,2,opt,name=index_file_prefix,json=indexFilePrefix,proto3" json:"index_file_prefix,omitempty"` @@ -2158,150 +2174,153 @@ func init() { func init() { proto.RegisterFile("index_coord.proto", fileDescriptor_f9e019eb3fda53c2) } var fileDescriptor_f9e019eb3fda53c2 = []byte{ - // 2282 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x8f, 0x1b, 0x49, - 0x15, 0x4f, 0xbb, 0x3d, 0x33, 0xee, 0xd7, 0xf6, 0xfc, 0xa9, 0xcc, 0x82, 0xe3, 0x24, 0x64, 0xd2, - 0xd9, 0x24, 0x03, 0x22, 0x93, 0x30, 0xcb, 0xa2, 0x05, 0x01, 0xd2, 0x64, 0x66, 0x93, 0x38, 0xd9, - 0x44, 0x43, 0x3b, 0x5a, 0x89, 0x15, 0xc2, 0xb4, 0xdd, 0xe5, 0x99, 0xda, 0x69, 0x77, 0x39, 0x5d, - 0xd5, 0x49, 0x26, 0x48, 0x08, 0x0e, 0x7b, 0x00, 0x21, 0x21, 0x10, 0x12, 0x5f, 0x80, 0xd3, 0xf2, - 0x0d, 0xb8, 0x70, 0xe1, 0xc8, 0x05, 0xee, 0x5c, 0xf8, 0x12, 0x5c, 0x51, 0xfd, 0xe9, 0x76, 0x77, - 0xbb, 0x3d, 0x76, 0x66, 0x06, 0x21, 0xb1, 0x37, 0xd7, 0xab, 0x57, 0x7f, 0xfa, 0xbd, 0xdf, 0x7b, - 0xbf, 0xf7, 0xca, 0xb0, 0x46, 0x42, 0x1f, 0xbf, 0xee, 0xf6, 0x29, 0x8d, 0xfc, 0xad, 0x51, 0x44, - 0x39, 0x45, 0x68, 0x48, 0x82, 0x97, 0x31, 0x53, 0xa3, 0x2d, 0x39, 0xdf, 0xaa, 0xf7, 0xe9, 0x70, - 0x48, 0x43, 0x25, 0x6b, 0xd5, 0x59, 0xff, 0x10, 0x0f, 0x3d, 0x3d, 0x5a, 0x26, 0x21, 0xc7, 0x51, - 0xe8, 0x05, 0xc9, 0x6c, 0x76, 0xbd, 0xf3, 0xcf, 0x2a, 0x58, 0x6d, 0xb1, 0x47, 0x3b, 0x1c, 0x50, - 0xe4, 0x40, 0xbd, 0x4f, 0x83, 0x00, 0xf7, 0x39, 0xa1, 0x61, 0x7b, 0xaf, 0x69, 0x6c, 0x18, 0x9b, - 0xa6, 0x9b, 0x93, 0xa1, 0x26, 0x2c, 0x0d, 0x08, 0x0e, 0xfc, 0xf6, 0x5e, 0xb3, 0x22, 0xa7, 0x93, - 0x21, 0xba, 0x0a, 0xa0, 0xae, 0x1b, 0x7a, 0x43, 0xdc, 0x34, 0x37, 0x8c, 0x4d, 0xcb, 0xb5, 0xa4, - 0xe4, 0x99, 0x37, 0xc4, 0x62, 0xa1, 0x1c, 0xb4, 0xf7, 0x9a, 0x55, 0xb5, 0x50, 0x0f, 0xd1, 0x7d, - 0xb0, 0xf9, 0xf1, 0x08, 0x77, 0x47, 0x5e, 0xe4, 0x0d, 0x59, 0x73, 0x61, 0xc3, 0xdc, 0xb4, 0xb7, - 0xaf, 0x6f, 0xe5, 0x3e, 0x54, 0x7f, 0xe1, 0x13, 0x7c, 0xfc, 0xb1, 0x17, 0xc4, 0x78, 0xdf, 0x23, - 0x91, 0x0b, 0x62, 0xd5, 0xbe, 0x5c, 0x84, 0xf6, 0xa0, 0xae, 0x0e, 0xd7, 0x9b, 0x2c, 0xce, 0xbb, - 0x89, 0x2d, 0x97, 0xe9, 0x5d, 0xae, 0xeb, 0x5d, 0xb0, 0xdf, 0x8d, 0xe8, 0x2b, 0xd6, 0x5c, 0x92, - 0x17, 0xb5, 0xb5, 0xcc, 0xa5, 0xaf, 0x98, 0xf8, 0x4a, 0x4e, 0xb9, 0x17, 0x28, 0x85, 0x9a, 0x54, - 0xb0, 0xa4, 0x44, 0x4e, 0xbf, 0x0f, 0x0b, 0x8c, 0x7b, 0x1c, 0x37, 0xad, 0x0d, 0x63, 0x73, 0x79, - 0xfb, 0x5a, 0xe9, 0x05, 0xa4, 0xc5, 0x3b, 0x42, 0xcd, 0x55, 0xda, 0xe8, 0x7d, 0xf8, 0xb2, 0xba, - 0xbe, 0x1c, 0x76, 0x07, 0x1e, 0x09, 0xba, 0x11, 0xf6, 0x18, 0x0d, 0x9b, 0x20, 0x0d, 0xb9, 0x4e, - 0xd2, 0x35, 0x0f, 0x3c, 0x12, 0xb8, 0x72, 0x0e, 0x39, 0xd0, 0x20, 0xac, 0xeb, 0xc5, 0x9c, 0x76, - 0xe5, 0x7c, 0xd3, 0xde, 0x30, 0x36, 0x6b, 0xae, 0x4d, 0xd8, 0x4e, 0xcc, 0xa9, 0x3c, 0x06, 0x3d, - 0x85, 0xb5, 0x98, 0xe1, 0xa8, 0x9b, 0x33, 0x4f, 0x7d, 0x5e, 0xf3, 0xac, 0x88, 0xb5, 0xed, 0x8c, - 0x89, 0xbe, 0x0e, 0x68, 0x84, 0x43, 0x9f, 0x84, 0x07, 0x7a, 0x47, 0x69, 0x87, 0x86, 0xb4, 0xc3, - 0xaa, 0x9e, 0x91, 0xfa, 0xc2, 0x1c, 0xce, 0x67, 0x06, 0xc0, 0x03, 0x89, 0x0f, 0x79, 0x97, 0xef, - 0x26, 0x10, 0x21, 0xe1, 0x80, 0x4a, 0x78, 0xd9, 0xdb, 0x57, 0xb7, 0x26, 0x11, 0xbd, 0x95, 0x62, - 0x52, 0x23, 0x48, 0xc2, 0xb3, 0x09, 0x4b, 0x3e, 0x0e, 0x30, 0xc7, 0xbe, 0x84, 0x5e, 0xcd, 0x4d, - 0x86, 0xe8, 0x1a, 0xd8, 0xfd, 0x08, 0x0b, 0xcb, 0x71, 0xa2, 0xb1, 0x57, 0x75, 0x41, 0x89, 0x9e, - 0x93, 0x21, 0x76, 0x3e, 0xab, 0x42, 0xbd, 0x83, 0x0f, 0x86, 0x38, 0xe4, 0xea, 0x26, 0xf3, 0x40, - 0x7d, 0x03, 0xec, 0x91, 0x17, 0x71, 0xa2, 0x55, 0x14, 0xdc, 0xb3, 0x22, 0x74, 0x05, 0x2c, 0xa6, - 0x77, 0xdd, 0x93, 0xa7, 0x9a, 0xee, 0x58, 0x80, 0x2e, 0x41, 0x2d, 0x8c, 0x87, 0xca, 0x40, 0x1a, - 0xf2, 0x61, 0x3c, 0x94, 0x30, 0xc9, 0x04, 0xc3, 0x42, 0x3e, 0x18, 0x9a, 0xb0, 0xd4, 0x8b, 0x89, - 0x8c, 0xaf, 0x45, 0x35, 0xa3, 0x87, 0xe8, 0x4b, 0xb0, 0x18, 0x52, 0x1f, 0xb7, 0xf7, 0x34, 0x2c, - 0xf5, 0x08, 0xdd, 0x80, 0x86, 0x32, 0xea, 0x4b, 0x1c, 0x31, 0x42, 0x43, 0x0d, 0x4a, 0x85, 0xe4, - 0x8f, 0x95, 0xec, 0xb4, 0xb8, 0xbc, 0x06, 0xf6, 0x24, 0x16, 0x61, 0x30, 0x46, 0xe0, 0x2d, 0x58, - 0x51, 0x87, 0x0f, 0x48, 0x80, 0xbb, 0x47, 0xf8, 0x98, 0x35, 0xed, 0x0d, 0x73, 0xd3, 0x72, 0xd5, - 0x9d, 0x1e, 0x90, 0x00, 0x3f, 0xc1, 0xc7, 0x2c, 0xeb, 0xbb, 0xfa, 0x89, 0xbe, 0x6b, 0x14, 0x7d, - 0x87, 0x6e, 0xc2, 0x32, 0xc3, 0x11, 0xf1, 0x02, 0xf2, 0x06, 0x77, 0x19, 0x79, 0x83, 0x9b, 0xcb, - 0x52, 0xa7, 0x91, 0x4a, 0x3b, 0xe4, 0x0d, 0x16, 0x66, 0x78, 0x15, 0x11, 0x8e, 0xbb, 0x87, 0x5e, - 0xe8, 0xd3, 0xc1, 0xa0, 0xb9, 0x22, 0xcf, 0xa9, 0x4b, 0xe1, 0x23, 0x25, 0x73, 0xfe, 0x60, 0xc0, - 0x45, 0x17, 0x1f, 0x10, 0xc6, 0x71, 0xf4, 0x8c, 0xfa, 0xd8, 0xc5, 0x2f, 0x62, 0xcc, 0x38, 0xba, - 0x07, 0xd5, 0x9e, 0xc7, 0xb0, 0x86, 0xe4, 0x95, 0x52, 0xeb, 0x3c, 0x65, 0x07, 0xf7, 0x3d, 0x86, - 0x5d, 0xa9, 0x89, 0xbe, 0x05, 0x4b, 0x9e, 0xef, 0x47, 0x98, 0x31, 0x09, 0x8c, 0x69, 0x8b, 0x76, - 0x94, 0x8e, 0x9b, 0x28, 0x67, 0xbc, 0x68, 0x66, 0xbd, 0xe8, 0xfc, 0xc6, 0x80, 0xf5, 0xfc, 0xcd, - 0xd8, 0x88, 0x86, 0x0c, 0xa3, 0xf7, 0x60, 0x51, 0xf8, 0x22, 0x66, 0xfa, 0x72, 0x97, 0x4b, 0xcf, - 0xe9, 0x48, 0x15, 0x57, 0xab, 0x8a, 0x94, 0x4a, 0x42, 0xc2, 0x93, 0x70, 0x57, 0x37, 0xbc, 0x5e, - 0x8c, 0x34, 0x4d, 0x0c, 0xed, 0x90, 0x70, 0x15, 0xdd, 0x2e, 0x90, 0xf4, 0xb7, 0xf3, 0x43, 0x58, - 0x7f, 0x88, 0x79, 0x06, 0x13, 0xda, 0x56, 0xf3, 0x84, 0x4e, 0x9e, 0x0b, 0x2a, 0x05, 0x2e, 0x70, - 0xfe, 0x68, 0xc0, 0x3b, 0x85, 0xbd, 0xcf, 0xf2, 0xb5, 0x29, 0xb8, 0x2b, 0x67, 0x01, 0xb7, 0x59, - 0x04, 0xb7, 0xf3, 0x73, 0x03, 0x2e, 0x3f, 0xc4, 0x3c, 0x9b, 0x38, 0xce, 0xd9, 0x12, 0xe8, 0x2b, - 0x00, 0x69, 0xc2, 0x60, 0x4d, 0x73, 0xc3, 0xdc, 0x34, 0xdd, 0x8c, 0xc4, 0xf9, 0xa5, 0x01, 0x6b, - 0x13, 0xe7, 0xe7, 0xf3, 0x8e, 0x51, 0xcc, 0x3b, 0xff, 0x2d, 0x73, 0xfc, 0xce, 0x80, 0x2b, 0xe5, - 0xe6, 0x38, 0x8b, 0xf3, 0xbe, 0xa7, 0x16, 0x61, 0x81, 0x52, 0x41, 0x4a, 0x37, 0xcb, 0xf8, 0x60, - 0xf2, 0x4c, 0xbd, 0xc8, 0xf9, 0xbb, 0x09, 0x68, 0x57, 0x26, 0x0b, 0xc5, 0x3a, 0x6f, 0xe1, 0x9a, - 0x53, 0x97, 0x32, 0x85, 0x82, 0xa5, 0x7a, 0x1e, 0x05, 0xcb, 0xc2, 0xa9, 0x0a, 0x96, 0x2b, 0x60, - 0x89, 0xac, 0xc9, 0xb8, 0x37, 0x1c, 0x49, 0xbe, 0xa8, 0xba, 0x63, 0xc1, 0x64, 0x79, 0xb0, 0x34, - 0x67, 0x79, 0x50, 0x3b, 0x75, 0x79, 0xb0, 0x0b, 0x0d, 0x69, 0xc4, 0x3d, 0x8f, 0x7b, 0xcf, 0x8f, - 0x47, 0x09, 0xdf, 0x14, 0x48, 0x5e, 0x57, 0xa8, 0x89, 0x92, 0x9b, 0x5f, 0xe3, 0xbc, 0x86, 0x8b, - 0x49, 0x76, 0x90, 0x35, 0xc0, 0x5b, 0xf8, 0x34, 0x1f, 0x4f, 0x95, 0x62, 0x3c, 0xcd, 0xf0, 0xac, - 0xf3, 0xef, 0x0a, 0xac, 0xb5, 0x13, 0xe2, 0xda, 0xf7, 0xf8, 0xa1, 0x2c, 0x3c, 0x4e, 0x0e, 0xb7, - 0xe9, 0x30, 0xca, 0xb0, 0xbc, 0x39, 0x95, 0xe5, 0xab, 0x79, 0x96, 0xcf, 0x5f, 0x70, 0xa1, 0x08, - 0xbd, 0xf3, 0xa9, 0x73, 0x37, 0x61, 0x35, 0xc3, 0xda, 0x23, 0x8f, 0x1f, 0x8a, 0x5a, 0x57, 0xd0, - 0xf6, 0x32, 0xc9, 0x7e, 0x3d, 0x43, 0xb7, 0x61, 0x25, 0xa5, 0x59, 0x5f, 0xb1, 0x6f, 0x4d, 0xc2, - 0x6c, 0xcc, 0xc9, 0x7e, 0x42, 0xbf, 0xf9, 0x2a, 0xc4, 0x2a, 0xa9, 0x42, 0xb2, 0x15, 0x11, 0xe4, - 0x2a, 0x22, 0xe7, 0xcf, 0x06, 0xd8, 0x69, 0x94, 0xcf, 0xd9, 0x8b, 0xe4, 0xfc, 0x52, 0x29, 0xfa, - 0xe5, 0x3a, 0xd4, 0x71, 0xe8, 0xf5, 0x02, 0xac, 0xc1, 0x6f, 0x2a, 0xf0, 0x2b, 0x99, 0x02, 0xff, - 0x03, 0xb0, 0xc7, 0xf5, 0x68, 0x12, 0xc8, 0x37, 0xa7, 0x16, 0xa4, 0x59, 0x50, 0xb8, 0x90, 0x16, - 0xa6, 0xcc, 0xf9, 0x55, 0x65, 0xcc, 0x95, 0x0a, 0xb1, 0x67, 0xc9, 0x88, 0x3f, 0x82, 0xba, 0xfe, - 0x0a, 0x55, 0x27, 0xab, 0xbc, 0xf8, 0xed, 0xb2, 0x6b, 0x95, 0x1d, 0xba, 0x95, 0x31, 0xe3, 0x87, - 0x21, 0x8f, 0x8e, 0x5d, 0x9b, 0x8d, 0x25, 0xad, 0x2e, 0xac, 0x16, 0x15, 0xd0, 0x2a, 0x98, 0x47, - 0xf8, 0x58, 0xdb, 0x58, 0xfc, 0x14, 0x1c, 0xf2, 0x52, 0x60, 0x47, 0x97, 0x0e, 0xd7, 0x4e, 0x4c, - 0xca, 0x03, 0xea, 0x2a, 0xed, 0xef, 0x54, 0x3e, 0x30, 0x9c, 0xdf, 0x1b, 0xb0, 0xba, 0x17, 0xd1, - 0xd1, 0x5b, 0xe7, 0x63, 0x07, 0xea, 0x99, 0xe2, 0x3a, 0x89, 0xde, 0x9c, 0x6c, 0x56, 0x66, 0xbe, - 0x04, 0x35, 0x3f, 0xa2, 0xa3, 0xae, 0x17, 0x04, 0x32, 0xb0, 0x44, 0x9d, 0x19, 0xd1, 0xd1, 0x4e, - 0x10, 0x38, 0xaf, 0x60, 0x7d, 0x0f, 0xb3, 0x7e, 0x44, 0x7a, 0x6f, 0xcf, 0x14, 0x33, 0x48, 0x3c, - 0x97, 0x85, 0xcd, 0x42, 0x16, 0x76, 0x7e, 0x6d, 0xc0, 0x3b, 0x85, 0x93, 0xcf, 0x82, 0x8e, 0xef, - 0xe7, 0x31, 0xab, 0xc0, 0x31, 0xa3, 0x89, 0xca, 0x62, 0xd5, 0x93, 0x24, 0x2e, 0xe7, 0xee, 0x8b, - 0x9c, 0xb3, 0x1f, 0xd1, 0x03, 0x59, 0xa2, 0x9e, 0x5f, 0x79, 0xf7, 0x57, 0x03, 0xae, 0x4e, 0x39, - 0xe3, 0x2c, 0x5f, 0x5e, 0xec, 0xce, 0x2b, 0xb3, 0xba, 0x73, 0xb3, 0xd8, 0x9d, 0x97, 0x37, 0xaf, - 0xd5, 0x29, 0xcd, 0xeb, 0x9f, 0x2a, 0xd0, 0xe8, 0x70, 0x1a, 0x79, 0x07, 0x78, 0x97, 0x86, 0x03, - 0x72, 0x20, 0xd2, 0x76, 0x52, 0xf4, 0x1b, 0xf2, 0xa3, 0xd3, 0xb2, 0xfe, 0x3a, 0xd4, 0xbd, 0x7e, - 0x1f, 0x33, 0x26, 0x7a, 0x20, 0x9d, 0x8d, 0x2c, 0xd7, 0x56, 0xb2, 0x27, 0x42, 0x84, 0xbe, 0x06, - 0x6b, 0x0c, 0xf7, 0x23, 0xcc, 0xbb, 0x63, 0x4d, 0x8d, 0xe0, 0x15, 0x35, 0xb1, 0x93, 0x68, 0x8b, - 0x2e, 0x21, 0x66, 0xb8, 0xd3, 0xf9, 0x48, 0xa3, 0x58, 0x8f, 0x44, 0x8d, 0xd6, 0x8b, 0xfb, 0x47, - 0x98, 0x67, 0xe9, 0x01, 0x94, 0x48, 0x42, 0xf1, 0x32, 0x58, 0x11, 0xa5, 0x5c, 0xe6, 0x74, 0x59, - 0x10, 0x58, 0x6e, 0x4d, 0x08, 0x44, 0xda, 0xd2, 0xbb, 0xb6, 0x77, 0x9e, 0xea, 0x42, 0x40, 0x8f, - 0x44, 0xa3, 0xdb, 0xde, 0x79, 0xfa, 0x61, 0xe8, 0x8f, 0x28, 0x09, 0xb9, 0x4c, 0xf0, 0x96, 0x9b, - 0x15, 0x89, 0xcf, 0x63, 0xca, 0x12, 0x5d, 0x9e, 0xb0, 0xba, 0xe5, 0xda, 0x5a, 0x26, 0x49, 0xfb, - 0x5f, 0x26, 0xac, 0xaa, 0x42, 0xec, 0x31, 0xed, 0x25, 0x60, 0xba, 0x02, 0x56, 0x3f, 0x88, 0x45, - 0x4f, 0xa3, 0x91, 0x64, 0xb9, 0x63, 0x81, 0xb0, 0x48, 0x96, 0x86, 0x22, 0x3c, 0x20, 0xaf, 0xb5, - 0xe5, 0x56, 0xc6, 0x3c, 0x24, 0xc5, 0x59, 0xc6, 0x34, 0x27, 0x18, 0xd3, 0xf7, 0xb8, 0xa7, 0x69, - 0xac, 0x2a, 0x69, 0xcc, 0x12, 0x12, 0xc5, 0x60, 0x13, 0xc4, 0xb4, 0x50, 0x42, 0x4c, 0x19, 0xa6, - 0x5e, 0xcc, 0x33, 0x75, 0x1e, 0xea, 0x4b, 0xc5, 0xd0, 0x7f, 0x04, 0xcb, 0x89, 0x61, 0xfa, 0x12, - 0x23, 0xd2, 0x7a, 0x25, 0xbd, 0x96, 0x4c, 0x98, 0x59, 0x30, 0xb9, 0x0d, 0x96, 0xc3, 0x56, 0x91, - 0xd9, 0xad, 0x53, 0x31, 0x7b, 0xa1, 0x34, 0x85, 0xd3, 0x94, 0xa6, 0x59, 0x96, 0xb6, 0xf3, 0x2c, - 0xfd, 0x11, 0xac, 0xfe, 0x20, 0xc6, 0xd1, 0xf1, 0x63, 0xda, 0x63, 0xf3, 0xf9, 0xb8, 0x05, 0x35, - 0xed, 0xa8, 0x24, 0xa1, 0xa7, 0x63, 0xe7, 0x1f, 0x06, 0x34, 0x64, 0xb8, 0x3d, 0xf7, 0xd8, 0x51, - 0xf2, 0xc4, 0x93, 0x78, 0xd9, 0xc8, 0x7b, 0xf9, 0x94, 0x4d, 0x4d, 0xc9, 0xfb, 0x84, 0x59, 0xf6, - 0x3e, 0x51, 0x52, 0xe7, 0x54, 0x4b, 0xeb, 0x9c, 0x42, 0x97, 0xb4, 0x30, 0xd1, 0x25, 0x7d, 0x6e, - 0xc0, 0x5a, 0xc6, 0x46, 0x67, 0x49, 0x78, 0x39, 0xcb, 0x56, 0x8a, 0x96, 0xbd, 0x9f, 0x27, 0x02, - 0xb3, 0xcc, 0xd5, 0x19, 0x22, 0x48, 0x6c, 0x9c, 0x23, 0x83, 0x27, 0xb0, 0x22, 0xa8, 0xfa, 0x7c, - 0xdc, 0xf9, 0x37, 0x03, 0x96, 0x1e, 0xd3, 0x9e, 0x74, 0x64, 0x16, 0x43, 0x46, 0xfe, 0xed, 0x6b, - 0x15, 0x4c, 0x9f, 0x0c, 0x75, 0xf6, 0x16, 0x3f, 0x45, 0x8c, 0x31, 0xee, 0x45, 0x7c, 0xfc, 0x7a, - 0x27, 0x0a, 0x39, 0x21, 0x91, 0x0f, 0x40, 0x97, 0xa0, 0x86, 0x43, 0x5f, 0x4d, 0xea, 0x6a, 0x19, - 0x87, 0xbe, 0x9c, 0x3a, 0x9f, 0x2e, 0x6a, 0x1d, 0x16, 0x46, 0x74, 0xfc, 0xe2, 0xa6, 0x06, 0xce, - 0x3a, 0xa0, 0x87, 0x98, 0x3f, 0xa6, 0x3d, 0xe1, 0x95, 0xc4, 0x3c, 0xce, 0x5f, 0x2a, 0xb2, 0x39, - 0x19, 0x8b, 0xcf, 0xe2, 0x60, 0x07, 0x1a, 0x8a, 0xae, 0x3e, 0xa5, 0xbd, 0x6e, 0x18, 0x27, 0x46, - 0xb1, 0xa5, 0xf0, 0x31, 0xed, 0x3d, 0x8b, 0x87, 0xe8, 0x0e, 0x5c, 0x24, 0x61, 0x77, 0xa4, 0x19, - 0x34, 0xd5, 0x54, 0x56, 0x5a, 0x25, 0x61, 0xc2, 0xad, 0x5a, 0xfd, 0x16, 0xac, 0xe0, 0xf0, 0x45, - 0x8c, 0x63, 0x9c, 0xaa, 0x2a, 0x9b, 0x35, 0xb4, 0x58, 0xeb, 0x09, 0xa6, 0xf4, 0xd8, 0x51, 0x97, - 0x05, 0x94, 0x33, 0x9d, 0x13, 0x2d, 0x21, 0xe9, 0x08, 0x01, 0xfa, 0x00, 0x2c, 0xb1, 0x5c, 0x41, - 0x4b, 0x35, 0x19, 0x97, 0xcb, 0xa0, 0xa5, 0xfd, 0xed, 0xd6, 0x3e, 0x55, 0x3f, 0x98, 0x08, 0x10, - 0x5d, 0x76, 0xfb, 0x84, 0x1d, 0x69, 0xa6, 0x01, 0x25, 0xda, 0x23, 0xec, 0xc8, 0xf9, 0x31, 0x5c, - 0xca, 0xbe, 0xfd, 0x10, 0xc6, 0x49, 0xff, 0x3c, 0xab, 0x8f, 0xdf, 0x1a, 0xd0, 0x2a, 0x3b, 0xe0, - 0x7f, 0x58, 0x74, 0x6d, 0xff, 0xc2, 0x06, 0x90, 0x33, 0xbb, 0x94, 0x46, 0x3e, 0x0a, 0x24, 0xb4, - 0x76, 0xe9, 0x70, 0x44, 0x43, 0x1c, 0x72, 0x99, 0xb1, 0x18, 0xda, 0xca, 0xef, 0xa7, 0x07, 0x93, - 0x8a, 0xda, 0x56, 0xad, 0x77, 0x4b, 0xf5, 0x0b, 0xca, 0xce, 0x05, 0xf4, 0x42, 0x36, 0x27, 0x63, - 0x53, 0xec, 0x1e, 0x7a, 0x61, 0x88, 0x03, 0xb4, 0x3d, 0xe5, 0x3d, 0xb0, 0x4c, 0x39, 0x39, 0xf3, - 0x46, 0xe9, 0x99, 0x1d, 0x1e, 0x91, 0xf0, 0x20, 0x31, 0xb1, 0x73, 0x01, 0x3d, 0x07, 0x3b, 0xf3, - 0x28, 0x83, 0x6e, 0x95, 0x59, 0x6a, 0xf2, 0xd5, 0xa6, 0x75, 0x92, 0x2f, 0x9c, 0x0b, 0x68, 0x00, - 0x8d, 0xdc, 0xab, 0x21, 0xda, 0x3c, 0xa9, 0x27, 0xca, 0x3e, 0xd5, 0xb5, 0xbe, 0x3a, 0x87, 0x66, - 0x7a, 0xfb, 0x9f, 0x2a, 0x83, 0x4d, 0x3c, 0xbb, 0xdd, 0x9d, 0xb2, 0xc9, 0xb4, 0x07, 0xc2, 0xd6, - 0xbd, 0xf9, 0x17, 0xa4, 0x87, 0xfb, 0xe3, 0x8f, 0x54, 0x01, 0x75, 0x7b, 0x76, 0xe3, 0xa7, 0x4e, - 0xdb, 0x9c, 0xb7, 0x43, 0x74, 0x2e, 0xa0, 0x7d, 0xb0, 0xd2, 0x1e, 0x0d, 0xbd, 0x5b, 0xb6, 0xb0, - 0xd8, 0xc2, 0xcd, 0xe1, 0x9c, 0x5c, 0x97, 0x53, 0xee, 0x9c, 0xb2, 0x16, 0xac, 0xdc, 0x39, 0xa5, - 0x2d, 0x93, 0x73, 0x01, 0xc5, 0x32, 0x76, 0x0a, 0xd1, 0x8d, 0xee, 0xcc, 0xf2, 0x6f, 0x2e, 0xcd, - 0xb4, 0xb6, 0xe6, 0x55, 0x4f, 0x8f, 0xfd, 0xd9, 0xf8, 0xc5, 0x3a, 0xd7, 0xd2, 0xa0, 0x7b, 0x27, - 0x6d, 0x55, 0xd6, 0x61, 0xb5, 0xbe, 0xf1, 0x16, 0x2b, 0x32, 0x98, 0x44, 0x9d, 0x43, 0xfa, 0x4a, - 0x15, 0x8b, 0x71, 0xe4, 0x89, 0x5c, 0x58, 0x72, 0xb8, 0x0e, 0xe1, 0x49, 0xd5, 0xa9, 0x87, 0x9f, - 0xb0, 0x22, 0x3d, 0xbc, 0x0b, 0xf0, 0x10, 0xf3, 0xa7, 0x98, 0x47, 0xc2, 0xd6, 0xb7, 0xa6, 0xe5, - 0x29, 0xad, 0x90, 0x1c, 0x75, 0x7b, 0xa6, 0x5e, 0x7a, 0x40, 0x0f, 0xec, 0xdd, 0x43, 0xdc, 0x3f, - 0x7a, 0x84, 0xbd, 0x80, 0x1f, 0xa2, 0xf2, 0x95, 0x19, 0x8d, 0x29, 0x90, 0x2f, 0x53, 0x4c, 0xce, - 0xd8, 0xfe, 0x7c, 0x51, 0xff, 0xd7, 0xfd, 0x8c, 0xfa, 0xf8, 0xff, 0x3f, 0x05, 0xef, 0x83, 0x95, - 0xb6, 0x63, 0xe5, 0x11, 0x5e, 0xec, 0xd6, 0x66, 0x45, 0xf8, 0x27, 0x60, 0xa5, 0x85, 0x6d, 0xf9, - 0x8e, 0xc5, 0xde, 0xa0, 0x75, 0x73, 0x86, 0x56, 0x7a, 0xdb, 0x67, 0x50, 0x4b, 0x0a, 0x51, 0x74, - 0x63, 0x5a, 0x3a, 0xca, 0xee, 0x3c, 0xe3, 0xae, 0x3f, 0x01, 0x3b, 0x53, 0xa5, 0x95, 0x13, 0xd0, - 0x64, 0x75, 0xd7, 0xba, 0x3d, 0x53, 0xef, 0x8b, 0x11, 0x90, 0xf7, 0xbf, 0xf9, 0xc9, 0xf6, 0x01, - 0xe1, 0x87, 0x71, 0x4f, 0x58, 0xf6, 0xae, 0xd2, 0xbc, 0x43, 0xa8, 0xfe, 0x75, 0x37, 0xb9, 0xe5, - 0x5d, 0xb9, 0xd3, 0x5d, 0x69, 0xa7, 0x51, 0xaf, 0xb7, 0x28, 0x87, 0xef, 0xfd, 0x27, 0x00, 0x00, - 0xff, 0xff, 0x91, 0xcd, 0x0b, 0xf2, 0xb8, 0x22, 0x00, 0x00, + // 2322 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0xcf, 0x6f, 0x1c, 0x49, + 0xf5, 0x4f, 0x4f, 0xfb, 0xc7, 0xf4, 0xeb, 0x19, 0xff, 0xa8, 0x78, 0xbf, 0xdf, 0xc9, 0x24, 0x21, + 0x4e, 0x67, 0x93, 0x18, 0x44, 0x9c, 0xe0, 0x65, 0xd1, 0x82, 0x00, 0xc9, 0xb1, 0x37, 0xc9, 0x24, + 0x9b, 0xc8, 0xb4, 0xa3, 0x48, 0xac, 0x10, 0x4d, 0xcf, 0x74, 0x8d, 0x5d, 0xeb, 0x9e, 0xae, 0x49, + 0x57, 0x75, 0x12, 0x07, 0x09, 0xc1, 0x61, 0x0f, 0x20, 0x24, 0x04, 0x42, 0xe2, 0x1f, 0xe0, 0xb4, + 0x7f, 0x02, 0x17, 0x2e, 0x1c, 0xb9, 0xc0, 0x9d, 0x0b, 0x77, 0xce, 0x5c, 0x51, 0xfd, 0xe8, 0x9e, + 0xee, 0x9e, 0x1e, 0xcf, 0xc4, 0x36, 0x42, 0x82, 0xdb, 0xd4, 0xab, 0x57, 0x3f, 0xfa, 0xbd, 0xcf, + 0x7b, 0x9f, 0xf7, 0x6a, 0x60, 0x95, 0x44, 0x01, 0x7e, 0xe3, 0xf5, 0x28, 0x8d, 0x83, 0xcd, 0x61, + 0x4c, 0x39, 0x45, 0x68, 0x40, 0xc2, 0x57, 0x09, 0x53, 0xa3, 0x4d, 0x39, 0xdf, 0x6e, 0xf4, 0xe8, + 0x60, 0x40, 0x23, 0x25, 0x6b, 0x37, 0x58, 0xef, 0x10, 0x0f, 0x7c, 0x3d, 0x5a, 0x22, 0x11, 0xc7, + 0x71, 0xe4, 0x87, 0xe9, 0x6c, 0x7e, 0xbd, 0xf3, 0xb7, 0x39, 0xb0, 0x3a, 0x62, 0x8f, 0x4e, 0xd4, + 0xa7, 0xc8, 0x81, 0x46, 0x8f, 0x86, 0x21, 0xee, 0x71, 0x42, 0xa3, 0xce, 0x6e, 0xcb, 0x58, 0x37, + 0x36, 0x4c, 0xb7, 0x20, 0x43, 0x2d, 0x58, 0xec, 0x13, 0x1c, 0x06, 0x9d, 0xdd, 0x56, 0x4d, 0x4e, + 0xa7, 0x43, 0x74, 0x15, 0x40, 0x5d, 0x37, 0xf2, 0x07, 0xb8, 0x65, 0xae, 0x1b, 0x1b, 0x96, 0x6b, + 0x49, 0xc9, 0x33, 0x7f, 0x80, 0xc5, 0x42, 0x39, 0xe8, 0xec, 0xb6, 0xe6, 0xd4, 0x42, 0x3d, 0x44, + 0xf7, 0xc1, 0xe6, 0xc7, 0x43, 0xec, 0x0d, 0xfd, 0xd8, 0x1f, 0xb0, 0xd6, 0xfc, 0xba, 0xb9, 0x61, + 0x6f, 0x5d, 0xdf, 0x2c, 0x7c, 0xa8, 0xfe, 0xc2, 0x27, 0xf8, 0xf8, 0x85, 0x1f, 0x26, 0x78, 0xcf, + 0x27, 0xb1, 0x0b, 0x62, 0xd5, 0x9e, 0x5c, 0x84, 0x76, 0xa1, 0xa1, 0x0e, 0xd7, 0x9b, 0x2c, 0xcc, + 0xba, 0x89, 0x2d, 0x97, 0xe9, 0x5d, 0xae, 0xeb, 0x5d, 0x70, 0xe0, 0xc5, 0xf4, 0x35, 0x6b, 0x2d, + 0xca, 0x8b, 0xda, 0x5a, 0xe6, 0xd2, 0xd7, 0x4c, 0x7c, 0x25, 0xa7, 0xdc, 0x0f, 0x95, 0x42, 0x5d, + 0x2a, 0x58, 0x52, 0x22, 0xa7, 0x3f, 0x84, 0x79, 0xc6, 0x7d, 0x8e, 0x5b, 0xd6, 0xba, 0xb1, 0xb1, + 0xb4, 0x75, 0xad, 0xf2, 0x02, 0xd2, 0xe2, 0xfb, 0x42, 0xcd, 0x55, 0xda, 0xe8, 0x43, 0xf8, 0x7f, + 0x75, 0x7d, 0x39, 0xf4, 0xfa, 0x3e, 0x09, 0xbd, 0x18, 0xfb, 0x8c, 0x46, 0x2d, 0x90, 0x86, 0x5c, + 0x23, 0xd9, 0x9a, 0x07, 0x3e, 0x09, 0x5d, 0x39, 0x87, 0x1c, 0x68, 0x12, 0xe6, 0xf9, 0x09, 0xa7, + 0x9e, 0x9c, 0x6f, 0xd9, 0xeb, 0xc6, 0x46, 0xdd, 0xb5, 0x09, 0xdb, 0x4e, 0x38, 0x95, 0xc7, 0xa0, + 0xa7, 0xb0, 0x9a, 0x30, 0x1c, 0x7b, 0x05, 0xf3, 0x34, 0x66, 0x35, 0xcf, 0xb2, 0x58, 0xdb, 0xc9, + 0x99, 0xe8, 0xab, 0x80, 0x86, 0x38, 0x0a, 0x48, 0x74, 0xa0, 0x77, 0x94, 0x76, 0x68, 0x4a, 0x3b, + 0xac, 0xe8, 0x19, 0xa9, 0x2f, 0xcc, 0xe1, 0x7c, 0x6e, 0x00, 0x3c, 0x90, 0xf8, 0x90, 0x77, 0xf9, + 0x76, 0x0a, 0x11, 0x12, 0xf5, 0xa9, 0x84, 0x97, 0xbd, 0x75, 0x75, 0x73, 0x1c, 0xd1, 0x9b, 0x19, + 0x26, 0x35, 0x82, 0x24, 0x3c, 0x5b, 0xb0, 0x18, 0xe0, 0x10, 0x73, 0x1c, 0x48, 0xe8, 0xd5, 0xdd, + 0x74, 0x88, 0xae, 0x81, 0xdd, 0x8b, 0xb1, 0xb0, 0x1c, 0x27, 0x1a, 0x7b, 0x73, 0x2e, 0x28, 0xd1, + 0x73, 0x32, 0xc0, 0xce, 0xe7, 0x73, 0xd0, 0xd8, 0xc7, 0x07, 0x03, 0x1c, 0x71, 0x75, 0x93, 0x59, + 0xa0, 0xbe, 0x0e, 0xf6, 0xd0, 0x8f, 0x39, 0xd1, 0x2a, 0x0a, 0xee, 0x79, 0x11, 0xba, 0x02, 0x16, + 0xd3, 0xbb, 0xee, 0xca, 0x53, 0x4d, 0x77, 0x24, 0x40, 0x97, 0xa0, 0x1e, 0x25, 0x03, 0x65, 0x20, + 0x0d, 0xf9, 0x28, 0x19, 0x48, 0x98, 0xe4, 0x82, 0x61, 0xbe, 0x18, 0x0c, 0x2d, 0x58, 0xec, 0x26, + 0x44, 0xc6, 0xd7, 0x82, 0x9a, 0xd1, 0x43, 0xf4, 0x7f, 0xb0, 0x10, 0xd1, 0x00, 0x77, 0x76, 0x35, + 0x2c, 0xf5, 0x08, 0xdd, 0x80, 0xa6, 0x32, 0xea, 0x2b, 0x1c, 0x33, 0x42, 0x23, 0x0d, 0x4a, 0x85, + 0xe4, 0x17, 0x4a, 0x76, 0x5a, 0x5c, 0x5e, 0x03, 0x7b, 0x1c, 0x8b, 0xd0, 0x1f, 0x21, 0xf0, 0x16, + 0x2c, 0xab, 0xc3, 0xfb, 0x24, 0xc4, 0xde, 0x11, 0x3e, 0x66, 0x2d, 0x7b, 0xdd, 0xdc, 0xb0, 0x5c, + 0x75, 0xa7, 0x07, 0x24, 0xc4, 0x4f, 0xf0, 0x31, 0xcb, 0xfb, 0xae, 0x71, 0xa2, 0xef, 0x9a, 0x65, + 0xdf, 0xa1, 0x9b, 0xb0, 0xc4, 0x70, 0x4c, 0xfc, 0x90, 0xbc, 0xc5, 0x1e, 0x23, 0x6f, 0x71, 0x6b, + 0x49, 0xea, 0x34, 0x33, 0xe9, 0x3e, 0x79, 0x8b, 0x85, 0x19, 0x5e, 0xc7, 0x84, 0x63, 0xef, 0xd0, + 0x8f, 0x02, 0xda, 0xef, 0xb7, 0x96, 0xe5, 0x39, 0x0d, 0x29, 0x7c, 0xa4, 0x64, 0xce, 0xef, 0x0c, + 0xb8, 0xe8, 0xe2, 0x03, 0xc2, 0x38, 0x8e, 0x9f, 0xd1, 0x00, 0xbb, 0xf8, 0x65, 0x82, 0x19, 0x47, + 0xf7, 0x60, 0xae, 0xeb, 0x33, 0xac, 0x21, 0x79, 0xa5, 0xd2, 0x3a, 0x4f, 0xd9, 0xc1, 0x7d, 0x9f, + 0x61, 0x57, 0x6a, 0xa2, 0x6f, 0xc0, 0xa2, 0x1f, 0x04, 0x31, 0x66, 0x4c, 0x02, 0x63, 0xd2, 0xa2, + 0x6d, 0xa5, 0xe3, 0xa6, 0xca, 0x39, 0x2f, 0x9a, 0x79, 0x2f, 0x3a, 0xbf, 0x32, 0x60, 0xad, 0x78, + 0x33, 0x36, 0xa4, 0x11, 0xc3, 0xe8, 0x03, 0x58, 0x10, 0xbe, 0x48, 0x98, 0xbe, 0xdc, 0xe5, 0xca, + 0x73, 0xf6, 0xa5, 0x8a, 0xab, 0x55, 0x45, 0x4a, 0x25, 0x11, 0xe1, 0x69, 0xb8, 0xab, 0x1b, 0x5e, + 0x2f, 0x47, 0x9a, 0x26, 0x86, 0x4e, 0x44, 0xb8, 0x8a, 0x6e, 0x17, 0x48, 0xf6, 0xdb, 0xf9, 0x3e, + 0xac, 0x3d, 0xc4, 0x3c, 0x87, 0x09, 0x6d, 0xab, 0x59, 0x42, 0xa7, 0xc8, 0x05, 0xb5, 0x12, 0x17, + 0x38, 0xbf, 0x37, 0xe0, 0xbd, 0xd2, 0xde, 0x67, 0xf9, 0xda, 0x0c, 0xdc, 0xb5, 0xb3, 0x80, 0xdb, + 0x2c, 0x83, 0xdb, 0xf9, 0xa9, 0x01, 0x97, 0x1f, 0x62, 0x9e, 0x4f, 0x1c, 0xe7, 0x6c, 0x09, 0xf4, + 0x25, 0x80, 0x2c, 0x61, 0xb0, 0x96, 0xb9, 0x6e, 0x6e, 0x98, 0x6e, 0x4e, 0xe2, 0xfc, 0xdc, 0x80, + 0xd5, 0xb1, 0xf3, 0x8b, 0x79, 0xc7, 0x28, 0xe7, 0x9d, 0x7f, 0x97, 0x39, 0x7e, 0x63, 0xc0, 0x95, + 0x6a, 0x73, 0x9c, 0xc5, 0x79, 0xdf, 0x51, 0x8b, 0xb0, 0x40, 0xa9, 0x20, 0xa5, 0x9b, 0x55, 0x7c, + 0x30, 0x7e, 0xa6, 0x5e, 0xe4, 0xfc, 0xc5, 0x04, 0xb4, 0x23, 0x93, 0x85, 0x62, 0x9d, 0x77, 0x70, + 0xcd, 0xa9, 0x4b, 0x99, 0x52, 0xc1, 0x32, 0x77, 0x1e, 0x05, 0xcb, 0xfc, 0xa9, 0x0a, 0x96, 0x2b, + 0x60, 0x89, 0xac, 0xc9, 0xb8, 0x3f, 0x18, 0x4a, 0xbe, 0x98, 0x73, 0x47, 0x82, 0xf1, 0xf2, 0x60, + 0x71, 0xc6, 0xf2, 0xa0, 0x7e, 0xea, 0xf2, 0x60, 0x07, 0x9a, 0xd2, 0x88, 0xbb, 0x3e, 0xf7, 0x9f, + 0x1f, 0x0f, 0x53, 0xbe, 0x29, 0x91, 0xbc, 0xae, 0x50, 0x53, 0x25, 0xb7, 0xb8, 0xc6, 0x79, 0x03, + 0x17, 0xd3, 0xec, 0x20, 0x6b, 0x80, 0x77, 0xf0, 0x69, 0x31, 0x9e, 0x6a, 0xe5, 0x78, 0x9a, 0xe2, + 0x59, 0xe7, 0x9f, 0x35, 0x58, 0xed, 0xa4, 0xc4, 0xb5, 0xe7, 0xf3, 0x43, 0x59, 0x78, 0x9c, 0x1c, + 0x6e, 0x93, 0x61, 0x94, 0x63, 0x79, 0x73, 0x22, 0xcb, 0xcf, 0x15, 0x59, 0xbe, 0x78, 0xc1, 0xf9, + 0x32, 0xf4, 0xce, 0xa7, 0xce, 0xdd, 0x80, 0x95, 0x1c, 0x6b, 0x0f, 0x7d, 0x7e, 0x28, 0x6a, 0x5d, + 0x41, 0xdb, 0x4b, 0x24, 0xff, 0xf5, 0x0c, 0xdd, 0x86, 0xe5, 0x8c, 0x66, 0x03, 0xc5, 0xbe, 0x75, + 0x09, 0xb3, 0x11, 0x27, 0x07, 0x29, 0xfd, 0x16, 0xab, 0x10, 0xab, 0xa2, 0x0a, 0xc9, 0x57, 0x44, + 0x50, 0xa8, 0x88, 0x9c, 0x3f, 0x18, 0x60, 0x67, 0x51, 0x3e, 0x63, 0x2f, 0x52, 0xf0, 0x4b, 0xad, + 0xec, 0x97, 0xeb, 0xd0, 0xc0, 0x91, 0xdf, 0x0d, 0xb1, 0x06, 0xbf, 0xa9, 0xc0, 0xaf, 0x64, 0x0a, + 0xfc, 0x0f, 0xc0, 0x1e, 0xd5, 0xa3, 0x69, 0x20, 0xdf, 0x9c, 0x58, 0x90, 0xe6, 0x41, 0xe1, 0x42, + 0x56, 0x98, 0x32, 0xe7, 0x17, 0xb5, 0x11, 0x57, 0x2a, 0xc4, 0x9e, 0x25, 0x23, 0xfe, 0x00, 0x1a, + 0xfa, 0x2b, 0x54, 0x9d, 0xac, 0xf2, 0xe2, 0x37, 0xab, 0xae, 0x55, 0x75, 0xe8, 0x66, 0xce, 0x8c, + 0x1f, 0x47, 0x3c, 0x3e, 0x76, 0x6d, 0x36, 0x92, 0xb4, 0x3d, 0x58, 0x29, 0x2b, 0xa0, 0x15, 0x30, + 0x8f, 0xf0, 0xb1, 0xb6, 0xb1, 0xf8, 0x29, 0x38, 0xe4, 0x95, 0xc0, 0x8e, 0x2e, 0x1d, 0xae, 0x9d, + 0x98, 0x94, 0xfb, 0xd4, 0x55, 0xda, 0xdf, 0xaa, 0x7d, 0x64, 0x38, 0xbf, 0x35, 0x60, 0x65, 0x37, + 0xa6, 0xc3, 0x77, 0xce, 0xc7, 0x0e, 0x34, 0x72, 0xc5, 0x75, 0x1a, 0xbd, 0x05, 0xd9, 0xb4, 0xcc, + 0x7c, 0x09, 0xea, 0x41, 0x4c, 0x87, 0x9e, 0x1f, 0x86, 0x32, 0xb0, 0x44, 0x9d, 0x19, 0xd3, 0xe1, + 0x76, 0x18, 0x3a, 0xaf, 0x61, 0x6d, 0x17, 0xb3, 0x5e, 0x4c, 0xba, 0xef, 0xce, 0x14, 0x53, 0x48, + 0xbc, 0x90, 0x85, 0xcd, 0x52, 0x16, 0x76, 0x7e, 0x69, 0xc0, 0x7b, 0xa5, 0x93, 0xcf, 0x82, 0x8e, + 0xef, 0x16, 0x31, 0xab, 0xc0, 0x31, 0xa5, 0x89, 0xca, 0x63, 0xd5, 0x97, 0x24, 0x2e, 0xe7, 0xee, + 0x8b, 0x9c, 0xb3, 0x17, 0xd3, 0x03, 0x59, 0xa2, 0x9e, 0x5f, 0x79, 0xf7, 0x27, 0x03, 0xae, 0x4e, + 0x38, 0xe3, 0x2c, 0x5f, 0x5e, 0xee, 0xce, 0x6b, 0xd3, 0xba, 0x73, 0xb3, 0xdc, 0x9d, 0x57, 0x37, + 0xaf, 0x73, 0x13, 0x9a, 0xd7, 0x7f, 0xd4, 0xa0, 0xb9, 0xcf, 0x69, 0xec, 0x1f, 0xe0, 0x1d, 0x1a, + 0xf5, 0xc9, 0x81, 0x48, 0xdb, 0x69, 0xd1, 0x6f, 0xc8, 0x8f, 0xce, 0xca, 0xfa, 0xeb, 0xd0, 0xf0, + 0x7b, 0x3d, 0xcc, 0x98, 0xe8, 0x81, 0x74, 0x36, 0xb2, 0x5c, 0x5b, 0xc9, 0x9e, 0x08, 0x11, 0xfa, + 0x0a, 0xac, 0x32, 0xdc, 0x8b, 0x31, 0xf7, 0x46, 0x9a, 0x1a, 0xc1, 0xcb, 0x6a, 0x62, 0x3b, 0xd5, + 0x16, 0x5d, 0x42, 0xc2, 0xf0, 0xfe, 0xfe, 0x27, 0x1a, 0xc5, 0x7a, 0x24, 0x6a, 0xb4, 0x6e, 0xd2, + 0x3b, 0xc2, 0x3c, 0x4f, 0x0f, 0xa0, 0x44, 0x12, 0x8a, 0x97, 0xc1, 0x8a, 0x29, 0xe5, 0x32, 0xa7, + 0xcb, 0x82, 0xc0, 0x72, 0xeb, 0x42, 0x20, 0xd2, 0x96, 0xde, 0xb5, 0xb3, 0xfd, 0x54, 0x17, 0x02, + 0x7a, 0x24, 0x1a, 0xdd, 0xce, 0xf6, 0xd3, 0x8f, 0xa3, 0x60, 0x48, 0x49, 0xc4, 0x65, 0x82, 0xb7, + 0xdc, 0xbc, 0x48, 0x7c, 0x1e, 0x53, 0x96, 0xf0, 0x78, 0xca, 0xea, 0x96, 0x6b, 0x6b, 0x99, 0x20, + 0x6d, 0xc1, 0x29, 0x09, 0xc3, 0xde, 0x2b, 0x12, 0xf3, 0xc4, 0x0f, 0xbd, 0x43, 0xca, 0xb8, 0xcc, + 0xf1, 0x75, 0x77, 0x29, 0x61, 0xf8, 0x85, 0x12, 0x3f, 0xa2, 0x8c, 0x8b, 0x6b, 0xc4, 0xf8, 0x40, + 0x70, 0x84, 0x2d, 0xb7, 0xd1, 0x23, 0xe7, 0xef, 0x26, 0xac, 0xa8, 0x52, 0xee, 0x31, 0xed, 0xa6, + 0x70, 0xbc, 0x02, 0x56, 0x2f, 0x4c, 0x44, 0x57, 0xa4, 0xb1, 0x68, 0xb9, 0x23, 0x81, 0xb0, 0x69, + 0x9e, 0xc8, 0x62, 0xdc, 0x27, 0x6f, 0xb4, 0xed, 0x97, 0x47, 0x4c, 0x26, 0xc5, 0x79, 0xce, 0x35, + 0xc7, 0x38, 0x37, 0xf0, 0xb9, 0xaf, 0x89, 0x70, 0x4e, 0x12, 0xa1, 0x25, 0x24, 0x8a, 0x03, 0xc7, + 0xa8, 0x6d, 0xbe, 0x82, 0xda, 0x72, 0x5c, 0xbf, 0x50, 0xe4, 0xfa, 0x62, 0xb0, 0x2c, 0x96, 0x93, + 0xc7, 0x23, 0x58, 0x4a, 0x4d, 0xdb, 0x93, 0x28, 0x93, 0xf6, 0xaf, 0xe8, 0xd6, 0x64, 0xca, 0xcd, + 0xc3, 0xd1, 0x6d, 0xb2, 0x02, 0x3a, 0xcb, 0xb5, 0x81, 0x75, 0xaa, 0xda, 0xa0, 0x54, 0xdc, 0xc2, + 0x69, 0x8a, 0xdb, 0x3c, 0xcf, 0xdb, 0x45, 0x9e, 0xff, 0x04, 0x56, 0xbe, 0x97, 0xe0, 0xf8, 0xf8, + 0x31, 0xed, 0xb2, 0xd9, 0x7c, 0xdc, 0x86, 0xba, 0x76, 0x54, 0x4a, 0x09, 0xd9, 0xd8, 0xf9, 0xab, + 0x01, 0x4d, 0x19, 0xb0, 0xcf, 0x7d, 0x76, 0x94, 0x3e, 0x12, 0xa5, 0x5e, 0x36, 0x8a, 0x5e, 0x3e, + 0x65, 0x5b, 0x54, 0xf1, 0xc2, 0x61, 0x56, 0xbd, 0x70, 0x54, 0x54, 0x4a, 0x73, 0x95, 0x95, 0x52, + 0xa9, 0xcf, 0x9a, 0x1f, 0xeb, 0xb3, 0xbe, 0x30, 0x60, 0x35, 0x67, 0xa3, 0xb3, 0xa4, 0xcc, 0x82, + 0x65, 0x6b, 0x65, 0xcb, 0xde, 0x2f, 0x52, 0x89, 0x59, 0xe5, 0xea, 0x1c, 0x95, 0xa4, 0x36, 0x2e, + 0xd0, 0xc9, 0x13, 0x58, 0x16, 0x64, 0x7f, 0x3e, 0xee, 0xfc, 0xb3, 0x01, 0x8b, 0x8f, 0x69, 0x57, + 0x3a, 0x32, 0x8f, 0x21, 0xa3, 0xf8, 0x7a, 0xb6, 0x02, 0x66, 0x40, 0x06, 0x3a, 0xff, 0x8b, 0x9f, + 0x22, 0xc6, 0x18, 0xf7, 0x63, 0x3e, 0x7a, 0xff, 0x13, 0xa5, 0xa0, 0x90, 0xc8, 0x27, 0xa4, 0x4b, + 0x50, 0xc7, 0x51, 0xa0, 0x26, 0x75, 0xbd, 0x8d, 0xa3, 0x40, 0x4e, 0x9d, 0x4f, 0x1f, 0xb6, 0x06, + 0xf3, 0x43, 0x3a, 0x7a, 0xb3, 0x53, 0x03, 0x67, 0x0d, 0xd0, 0x43, 0xcc, 0x1f, 0xd3, 0xae, 0xf0, + 0x4a, 0x6a, 0x1e, 0xe7, 0x8f, 0x35, 0xd9, 0xde, 0x8c, 0xc4, 0x67, 0x71, 0xb0, 0x03, 0x4d, 0x45, + 0x78, 0x9f, 0xd1, 0xae, 0x17, 0x25, 0xa9, 0x51, 0x6c, 0x29, 0x7c, 0x4c, 0xbb, 0xcf, 0x92, 0x01, + 0xba, 0x03, 0x17, 0x49, 0xe4, 0x0d, 0x35, 0x07, 0x67, 0x9a, 0xca, 0x4a, 0x2b, 0x24, 0x4a, 0xd9, + 0x59, 0xab, 0xdf, 0x82, 0x65, 0x1c, 0xbd, 0x4c, 0x70, 0x82, 0x33, 0x55, 0x65, 0xb3, 0xa6, 0x16, + 0x6b, 0x3d, 0xc1, 0xb5, 0x3e, 0x3b, 0xf2, 0x58, 0x48, 0x39, 0xd3, 0x39, 0xd1, 0x12, 0x92, 0x7d, + 0x21, 0x40, 0x1f, 0x81, 0x25, 0x96, 0x2b, 0x68, 0xa9, 0x36, 0xe5, 0x72, 0x15, 0xb4, 0xb4, 0xbf, + 0xdd, 0xfa, 0x67, 0xea, 0x07, 0x13, 0x01, 0xa2, 0x0b, 0xf7, 0x80, 0xb0, 0x23, 0xcd, 0x55, 0xa0, + 0x44, 0xbb, 0x84, 0x1d, 0x39, 0x3f, 0x84, 0x4b, 0xf9, 0xd7, 0x23, 0xc2, 0x38, 0xe9, 0x9d, 0x67, + 0xfd, 0xf2, 0x6b, 0x03, 0xda, 0x55, 0x07, 0xfc, 0x07, 0xcb, 0xb6, 0xad, 0x9f, 0xd9, 0x00, 0x72, + 0x66, 0x87, 0xd2, 0x38, 0x40, 0xa1, 0x84, 0xd6, 0x0e, 0x1d, 0x0c, 0x69, 0x84, 0x23, 0x2e, 0x33, + 0x16, 0x43, 0x9b, 0xc5, 0xfd, 0xf4, 0x60, 0x5c, 0x51, 0xdb, 0xaa, 0xfd, 0x7e, 0xa5, 0x7e, 0x49, + 0xd9, 0xb9, 0x80, 0x5e, 0xca, 0xf6, 0x66, 0x64, 0x8a, 0x9d, 0x43, 0x3f, 0x8a, 0x70, 0x88, 0xb6, + 0x26, 0xbc, 0x28, 0x56, 0x29, 0xa7, 0x67, 0xde, 0xa8, 0x3c, 0x73, 0x9f, 0xc7, 0x24, 0x3a, 0x48, + 0x4d, 0xec, 0x5c, 0x40, 0xcf, 0xc1, 0xce, 0x3d, 0xeb, 0xa0, 0x5b, 0x55, 0x96, 0x1a, 0x7f, 0xf7, + 0x69, 0x9f, 0xe4, 0x0b, 0xe7, 0x02, 0xea, 0x43, 0xb3, 0xf0, 0xee, 0x88, 0x36, 0x4e, 0xea, 0xaa, + 0xf2, 0x8f, 0x7d, 0xed, 0x2f, 0xcf, 0xa0, 0x99, 0xdd, 0xfe, 0xc7, 0xca, 0x60, 0x63, 0x0f, 0x77, + 0x77, 0x27, 0x6c, 0x32, 0xe9, 0x89, 0xb1, 0x7d, 0x6f, 0xf6, 0x05, 0xd9, 0xe1, 0xc1, 0xe8, 0x23, + 0x55, 0x40, 0xdd, 0x9e, 0xde, 0x3a, 0xaa, 0xd3, 0x36, 0x66, 0xed, 0x31, 0x9d, 0x0b, 0x68, 0x0f, + 0xac, 0xac, 0xcb, 0x43, 0xef, 0x57, 0x2d, 0x2c, 0x37, 0x81, 0x33, 0x38, 0xa7, 0xd0, 0x27, 0x55, + 0x3b, 0xa7, 0xaa, 0x89, 0xab, 0x76, 0x4e, 0x65, 0xd3, 0xe5, 0x5c, 0x40, 0x89, 0x8c, 0x9d, 0x52, + 0x74, 0xa3, 0x3b, 0xd3, 0xfc, 0x5b, 0x48, 0x33, 0xed, 0xcd, 0x59, 0xd5, 0xb3, 0x63, 0x7f, 0x32, + 0x7a, 0xf3, 0x2e, 0x34, 0x45, 0xe8, 0xde, 0x49, 0x5b, 0x55, 0xf5, 0x68, 0xed, 0xaf, 0xbd, 0xc3, + 0x8a, 0x1c, 0x26, 0xd1, 0xfe, 0x21, 0x7d, 0xad, 0x8a, 0xc5, 0x24, 0xf6, 0x45, 0x2e, 0xac, 0x38, + 0x5c, 0x87, 0xf0, 0xb8, 0xea, 0xc4, 0xc3, 0x4f, 0x58, 0x91, 0x1d, 0xee, 0x01, 0x3c, 0xc4, 0xfc, + 0x29, 0xe6, 0xb1, 0xb0, 0xf5, 0xad, 0x49, 0x79, 0x4a, 0x2b, 0xa4, 0x47, 0xdd, 0x9e, 0xaa, 0x97, + 0x1d, 0xd0, 0x05, 0x7b, 0xe7, 0x10, 0xf7, 0x8e, 0x1e, 0x61, 0x3f, 0xe4, 0x87, 0xa8, 0x7a, 0x65, + 0x4e, 0x63, 0x02, 0xe4, 0xab, 0x14, 0xd3, 0x33, 0xb6, 0xbe, 0x58, 0xd0, 0xff, 0x96, 0x3f, 0xa3, + 0x01, 0xfe, 0xef, 0x4f, 0xc1, 0x7b, 0x60, 0x65, 0xed, 0x58, 0x75, 0x84, 0x97, 0xbb, 0xb5, 0x69, + 0x11, 0xfe, 0x29, 0x58, 0x59, 0x61, 0x5b, 0xbd, 0x63, 0xb9, 0x37, 0x68, 0xdf, 0x9c, 0xa2, 0x95, + 0xdd, 0xf6, 0x19, 0xd4, 0xd3, 0x42, 0x14, 0xdd, 0x98, 0x94, 0x8e, 0xf2, 0x3b, 0x4f, 0xb9, 0xeb, + 0x8f, 0xc0, 0xce, 0x55, 0x69, 0xd5, 0x04, 0x34, 0x5e, 0xdd, 0xb5, 0x6f, 0x4f, 0xd5, 0xfb, 0xdf, + 0x08, 0xc8, 0xfb, 0x5f, 0xff, 0x74, 0xeb, 0x80, 0xf0, 0xc3, 0xa4, 0x2b, 0x2c, 0x7b, 0x57, 0x69, + 0xde, 0x21, 0x54, 0xff, 0xba, 0x9b, 0xde, 0xf2, 0xae, 0xdc, 0xe9, 0xae, 0xb4, 0xd3, 0xb0, 0xdb, + 0x5d, 0x90, 0xc3, 0x0f, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x2b, 0x24, 0xbb, 0xfa, 0x22, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/internal/querynode/mock_test.go b/internal/querynode/mock_test.go index 5144179f7a..0bf6fc538a 100644 --- a/internal/querynode/mock_test.go +++ b/internal/querynode/mock_test.go @@ -437,8 +437,10 @@ func genStorageConfig() *indexpb.StorageConfig { BucketName: Params.MinioCfg.BucketName, RootPath: Params.MinioCfg.RootPath, IAMEndpoint: Params.MinioCfg.IAMEndpoint, + Region: Params.MinioCfg.Region, UseSSL: Params.MinioCfg.UseSSL, UseIAM: Params.MinioCfg.UseIAM, + UseVirtualHost: Params.MinioCfg.UseVirtualHost, StorageType: Params.CommonCfg.StorageType, } } diff --git a/internal/storage/factory.go b/internal/storage/factory.go index ceedeed10c..a144af3f61 100644 --- a/internal/storage/factory.go +++ b/internal/storage/factory.go @@ -26,6 +26,8 @@ func NewChunkManagerFactoryWithParam(params *paramtable.ComponentParam) *ChunkMa UseIAM(params.MinioCfg.UseIAM), CloudProvider(params.MinioCfg.CloudProvider), IAMEndpoint(params.MinioCfg.IAMEndpoint), + UseVirtualHost(params.MinioCfg.UseVirtualHost), + Region(params.MinioCfg.Region), CreateBucket(true)) } diff --git a/internal/storage/minio_chunk_manager.go b/internal/storage/minio_chunk_manager.go index 02d4961533..40de78e95c 100644 --- a/internal/storage/minio_chunk_manager.go +++ b/internal/storage/minio_chunk_manager.go @@ -71,10 +71,12 @@ func newMinioChunkManagerWithConfig(ctx context.Context, c *config) (*MinioChunk var newMinioFn = minio.New var bucketLookupType = minio.BucketLookupAuto + if c.useVirtualHost { + bucketLookupType = minio.BucketLookupDNS + } + switch c.cloudProvider { case paramtable.CloudProviderAliyun: - // auto doesn't work for aliyun, so we set to dns deliberately - bucketLookupType = minio.BucketLookupDNS if c.useIAM { newMinioFn = aliyun.NewMinioClient } else { @@ -96,6 +98,7 @@ func newMinioChunkManagerWithConfig(ctx context.Context, c *config) (*MinioChunk BucketLookup: bucketLookupType, Creds: creds, Secure: c.useSSL, + Region: c.region, } minIOClient, err := newMinioFn(c.address, minioOpts) // options nil or invalid formatted endpoint, don't need to retry diff --git a/internal/storage/minio_chunk_manager_test.go b/internal/storage/minio_chunk_manager_test.go index 44dca970df..7dfab50c21 100644 --- a/internal/storage/minio_chunk_manager_test.go +++ b/internal/storage/minio_chunk_manager_test.go @@ -50,6 +50,8 @@ func newMinIOChunkManager(ctx context.Context, bucketName string, rootPath strin CloudProvider("aws"), IAMEndpoint(""), CreateBucket(true), + UseVirtualHost(false), + Region(""), ) return client, err } diff --git a/internal/storage/options.go b/internal/storage/options.go index 8852dd2a9e..83fe9f8848 100644 --- a/internal/storage/options.go +++ b/internal/storage/options.go @@ -12,6 +12,8 @@ type config struct { useIAM bool cloudProvider string iamEndpoint string + useVirtualHost bool + region string } func newDefaultConfig() *config { @@ -79,3 +81,15 @@ func IAMEndpoint(iamEndpoint string) Option { c.iamEndpoint = iamEndpoint } } + +func UseVirtualHost(useVirtualHost bool) Option { + return func(c *config) { + c.useVirtualHost = useVirtualHost + } +} + +func Region(region string) Option { + return func(c *config) { + c.region = region + } +} diff --git a/internal/util/compressor/compressor_test.go b/internal/util/compressor/compressor_test.go index 6eeae0ca74..20f2615a92 100644 --- a/internal/util/compressor/compressor_test.go +++ b/internal/util/compressor/compressor_test.go @@ -120,9 +120,6 @@ func TestGlobalMethods(t *testing.T) { // Incorrect option err = ZstdCompress(strings.NewReader(data), compressed, zstd.WithWindowSize(3)) assert.Error(t, err) - - err = ZstdDecompress(compressed, origin, zstd.WithDecoderConcurrency(0)) - assert.Error(t, err) } func TestCurrencyGlobalMethods(t *testing.T) { diff --git a/internal/util/indexcgowrapper/build_index_info.go b/internal/util/indexcgowrapper/build_index_info.go index 64575a8ec3..c93197200d 100644 --- a/internal/util/indexcgowrapper/build_index_info.go +++ b/internal/util/indexcgowrapper/build_index_info.go @@ -52,6 +52,7 @@ func NewBuildIndexInfo(config *indexpb.StorageConfig) (*BuildIndexInfo, error) { cRootPath := C.CString(config.RootPath) cStorageType := C.CString(storageType) cIamEndPoint := C.CString(config.IAMEndpoint) + cRegion := C.CString(config.Region) defer C.free(unsafe.Pointer(cAddress)) defer C.free(unsafe.Pointer(cBucketName)) defer C.free(unsafe.Pointer(cAccessKey)) @@ -59,6 +60,7 @@ func NewBuildIndexInfo(config *indexpb.StorageConfig) (*BuildIndexInfo, error) { defer C.free(unsafe.Pointer(cRootPath)) defer C.free(unsafe.Pointer(cStorageType)) defer C.free(unsafe.Pointer(cIamEndPoint)) + defer C.free(unsafe.Pointer(cRegion)) storageConfig := C.CStorageConfig{ address: cAddress, bucket_name: cBucketName, @@ -69,6 +71,8 @@ func NewBuildIndexInfo(config *indexpb.StorageConfig) (*BuildIndexInfo, error) { iam_endpoint: cIamEndPoint, useSSL: C.bool(config.UseSSL), useIAM: C.bool(config.UseIAM), + region: cRegion, + useVirtualHost: C.bool(config.UseVirtualHost), } status := C.NewBuildIndexInfo(&cBuildIndexInfo, storageConfig) diff --git a/internal/util/initcore/init_storage_config.go b/internal/util/initcore/init_storage_config.go index ec0d8e0e4c..edb5b1f76f 100644 --- a/internal/util/initcore/init_storage_config.go +++ b/internal/util/initcore/init_storage_config.go @@ -50,6 +50,7 @@ func InitRemoteChunkManager(params *paramtable.ComponentParam) error { cStorageType := C.CString(params.CommonCfg.StorageType) cIamEndPoint := C.CString(params.MinioCfg.IAMEndpoint) cLogLevel := C.CString(params.MinioCfg.LogLevel) + cRegion := C.CString(params.MinioCfg.Region) defer C.free(unsafe.Pointer(cAddress)) defer C.free(unsafe.Pointer(cBucketName)) defer C.free(unsafe.Pointer(cAccessKey)) @@ -58,6 +59,7 @@ func InitRemoteChunkManager(params *paramtable.ComponentParam) error { defer C.free(unsafe.Pointer(cStorageType)) defer C.free(unsafe.Pointer(cIamEndPoint)) defer C.free(unsafe.Pointer(cLogLevel)) + defer C.free(unsafe.Pointer(cRegion)) storageConfig := C.CStorageConfig{ address: cAddress, bucket_name: cBucketName, @@ -69,6 +71,8 @@ func InitRemoteChunkManager(params *paramtable.ComponentParam) error { useSSL: C.bool(params.MinioCfg.UseSSL), useIAM: C.bool(params.MinioCfg.UseIAM), log_level: cLogLevel, + region: cRegion, + useVirtualHost: C.bool(params.MinioCfg.UseVirtualHost), } status := C.InitRemoteChunkManagerSingleton(storageConfig) diff --git a/internal/util/paramtable/base_table.go b/internal/util/paramtable/base_table.go index d02ab8db66..e5c2fd6607 100644 --- a/internal/util/paramtable/base_table.go +++ b/internal/util/paramtable/base_table.go @@ -42,12 +42,14 @@ const ( DefaultMinioUseSSL = "false" DefaultMinioBucketName = "a-bucket" DefaultMinioUseIAM = "false" + DefaultMinioUseVirtualHost = "false" DefaultMinioCloudProvider = "aws" DefaultMinioIAMEndpoint = "" DefaultEtcdEndpoints = "localhost:2379" DefaultInsertBufferSize = "16777216" DefaultEnvPrefix = "milvus" DefaultMinioLogLevel = "error" + DefaultMinioRegion = "" DefaultLogFormat = "text" DefaultLogLevelForBase = "debug" diff --git a/internal/util/paramtable/service_param.go b/internal/util/paramtable/service_param.go index e2ddf3c090..a81acc11c3 100644 --- a/internal/util/paramtable/service_param.go +++ b/internal/util/paramtable/service_param.go @@ -486,6 +486,8 @@ type MinioConfig struct { CloudProvider string IAMEndpoint string LogLevel string + Region string + UseVirtualHost bool } func (p *MinioConfig) init(base *BaseTable) { @@ -501,6 +503,8 @@ func (p *MinioConfig) init(base *BaseTable) { p.initCloudProvider() p.initIAMEndpoint() p.initLogLevel() + p.initUseVirtualHost() + p.initRegion() } func (p *MinioConfig) initAddress() { @@ -566,6 +570,15 @@ func (p *MinioConfig) initUseIAM() { } } +func (p *MinioConfig) initUseVirtualHost() { + useVirHost := p.Base.LoadWithDefault("minio.useVirtualHost", DefaultMinioUseVirtualHost) + var err error + p.UseVirtualHost, err = strconv.ParseBool(useVirHost) + if err != nil { + panic("parse bool useVirtualHost:" + err.Error()) + } +} + // CloudProvider supported const ( CloudProviderAWS = "aws" @@ -593,3 +606,7 @@ func (p *MinioConfig) initIAMEndpoint() { func (p *MinioConfig) initLogLevel() { p.LogLevel = p.Base.LoadWithDefault("minio.logLevel", DefaultMinioLogLevel) } + +func (p *MinioConfig) initRegion() { + p.Region = p.Base.LoadWithDefault("minio.region", DefaultMinioRegion) +}