From 5d8bee481f78a9c950095eb0249f6fddae62e1d5 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Tue, 7 Apr 2026 22:00:06 +0530 Subject: [PATCH 1/5] feat: update grpc and go --- proto/go.mod | 20 ++++++++++-------- proto/go.sum | 60 ++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 53 insertions(+), 27 deletions(-) diff --git a/proto/go.mod b/proto/go.mod index 3cf367bb..ff79495b 100644 --- a/proto/go.mod +++ b/proto/go.mod @@ -1,18 +1,20 @@ module github.com/openfga/api/proto -go 1.23.0 +go 1.25.0 + +toolchain go1.26.1 require ( - github.com/envoyproxy/protoc-gen-validate v1.0.4 + github.com/envoyproxy/protoc-gen-validate v1.3.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 - google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 - google.golang.org/grpc v1.64.1 - google.golang.org/protobuf v1.34.1 + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 + google.golang.org/grpc v1.79.3 + google.golang.org/protobuf v1.36.10 ) require ( - golang.org/x/net v0.38.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/text v0.32.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect ) diff --git a/proto/go.sum b/proto/go.sum index 4a0095ac..978e255c 100644 --- a/proto/go.sum +++ b/proto/go.sum @@ -1,20 +1,44 @@ -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= +github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= -google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= From 3d0ed33b33d684e09563e49ebb9ce5ad76b16e3c Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Tue, 7 Apr 2026 22:15:50 +0530 Subject: [PATCH 2/5] fix: address comment --- proto/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/go.mod b/proto/go.mod index ff79495b..1908b8a1 100644 --- a/proto/go.mod +++ b/proto/go.mod @@ -1,6 +1,6 @@ module github.com/openfga/api/proto -go 1.25.0 +go 1.25 toolchain go1.26.1 From 2802a299ce5e521d3a33a95b1cdf720e4ae37956 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Tue, 7 Apr 2026 22:35:36 +0530 Subject: [PATCH 3/5] fix: address coderabbit comment --- buf.gen.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buf.gen.yaml b/buf.gen.yaml index d35618e9..3901375e 100755 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -18,7 +18,7 @@ plugins: out: proto/ opt: - paths=source_relative - - plugin: buf.build/bufbuild/validate-go:v1.0.4 + - plugin: buf.build/bufbuild/validate-go:v1.3.0 out: proto/ opt: - paths=source_relative From 6fd0652a2159fabedca369fc8acef1725901b216 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Tue, 7 Apr 2026 23:08:46 +0530 Subject: [PATCH 4/5] fix: Regenerate .pb.validate.go files to reflect updated protoc-gen-validate v1.3.0 output --- .../authzen/v1/authzen_service.pb.validate.go | 42 ++++---- proto/openfga/v1/authzmodel.pb.validate.go | 38 +++---- proto/openfga/v1/errors_ignore.pb.validate.go | 16 +-- proto/openfga/v1/openfga.pb.validate.go | 42 ++++---- .../openfga/v1/openfga_service.pb.validate.go | 98 +++++++++---------- 5 files changed, 118 insertions(+), 118 deletions(-) diff --git a/proto/authzen/v1/authzen_service.pb.validate.go b/proto/authzen/v1/authzen_service.pb.validate.go index 55591154..3d3919d5 100644 --- a/proto/authzen/v1/authzen_service.pb.validate.go +++ b/proto/authzen/v1/authzen_service.pb.validate.go @@ -235,7 +235,7 @@ type EvaluationRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -471,7 +471,7 @@ type EvaluationsItemRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationsItemRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -626,7 +626,7 @@ type SubjectMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m SubjectMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -778,7 +778,7 @@ type SubjectFilterMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m SubjectFilterMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -934,7 +934,7 @@ type ResourceMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ResourceMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1086,7 +1086,7 @@ type ResourceFilterMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ResourceFilterMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1230,7 +1230,7 @@ type ActionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ActionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1367,7 +1367,7 @@ type EvaluationResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1675,7 +1675,7 @@ type EvaluationsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1813,7 +1813,7 @@ type EvaluationsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1926,7 +1926,7 @@ type EvaluationsOptionsMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m EvaluationsOptionsMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2046,7 +2046,7 @@ type PageRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m PageRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2153,7 +2153,7 @@ type PageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m PageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2446,7 +2446,7 @@ type SubjectSearchRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m SubjectSearchRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2617,7 +2617,7 @@ type SubjectSearchResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m SubjectSearchResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2912,7 +2912,7 @@ type ResourceSearchRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ResourceSearchRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3083,7 +3083,7 @@ type ResourceSearchResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ResourceSearchResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3338,7 +3338,7 @@ type ActionSearchRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ActionSearchRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3509,7 +3509,7 @@ type ActionSearchResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ActionSearchResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3622,7 +3622,7 @@ type GetConfigurationRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m GetConfigurationRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3742,7 +3742,7 @@ type GetConfigurationResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m GetConfigurationResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } diff --git a/proto/openfga/v1/authzmodel.pb.validate.go b/proto/openfga/v1/authzmodel.pb.validate.go index 32afcf5a..701c0612 100644 --- a/proto/openfga/v1/authzmodel.pb.validate.go +++ b/proto/openfga/v1/authzmodel.pb.validate.go @@ -193,7 +193,7 @@ type AuthorizationModelMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m AuthorizationModelMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -396,7 +396,7 @@ type TypeDefinitionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TypeDefinitionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -579,7 +579,7 @@ type RelationMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m RelationMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -715,7 +715,7 @@ type RelationTypeInfoMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m RelationTypeInfoMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -904,7 +904,7 @@ type MetadataMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m MetadataMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1020,7 +1020,7 @@ type SourceInfoMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m SourceInfoMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1200,7 +1200,7 @@ type RelationMetadataMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m RelationMetadataMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1401,7 +1401,7 @@ type RelationReferenceMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m RelationReferenceMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1508,7 +1508,7 @@ type WildcardMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WildcardMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1641,7 +1641,7 @@ type UsersetsMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetsMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1820,7 +1820,7 @@ type DifferenceMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m DifferenceMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2169,7 +2169,7 @@ type UsersetMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2269,7 +2269,7 @@ type DirectUsersetMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m DirectUsersetMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2391,7 +2391,7 @@ type ObjectRelationMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ObjectRelationMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2502,7 +2502,7 @@ type ComputedUsersetMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ComputedUsersetMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2682,7 +2682,7 @@ type TupleToUsersetMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleToUsersetMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2898,7 +2898,7 @@ type ConditionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ConditionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3046,7 +3046,7 @@ type ConditionMetadataMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ConditionMetadataMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3206,7 +3206,7 @@ type ConditionParamTypeRefMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ConditionParamTypeRefMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } diff --git a/proto/openfga/v1/errors_ignore.pb.validate.go b/proto/openfga/v1/errors_ignore.pb.validate.go index 6382d5c7..ad495afe 100644 --- a/proto/openfga/v1/errors_ignore.pb.validate.go +++ b/proto/openfga/v1/errors_ignore.pb.validate.go @@ -75,7 +75,7 @@ type ValidationErrorMessageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ValidationErrorMessageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -182,7 +182,7 @@ type UnauthenticatedResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UnauthenticatedResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -290,7 +290,7 @@ type UnprocessableContentMessageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UnprocessableContentMessageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -397,7 +397,7 @@ type InternalErrorMessageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m InternalErrorMessageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -504,7 +504,7 @@ type PathUnknownErrorMessageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m PathUnknownErrorMessageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -611,7 +611,7 @@ type AbortedMessageResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m AbortedMessageResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -713,7 +713,7 @@ type ErrorMessageRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ErrorMessageRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -819,7 +819,7 @@ type ForbiddenResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ForbiddenResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } diff --git a/proto/openfga/v1/openfga.pb.validate.go b/proto/openfga/v1/openfga.pb.validate.go index 3ee949a4..74b57632 100644 --- a/proto/openfga/v1/openfga.pb.validate.go +++ b/proto/openfga/v1/openfga.pb.validate.go @@ -91,7 +91,7 @@ type ObjectMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ObjectMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -321,7 +321,7 @@ type UserMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UserMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -457,7 +457,7 @@ type UsersetUserMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetUserMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -603,7 +603,7 @@ type RelationshipConditionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m RelationshipConditionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -748,7 +748,7 @@ type TupleKeyWithoutConditionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleKeyWithoutConditionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -865,7 +865,7 @@ type TypedWildcardMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TypedWildcardMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1036,7 +1036,7 @@ type TupleKeyMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleKeyMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1207,7 +1207,7 @@ type TupleMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1351,7 +1351,7 @@ type TupleKeysMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleKeysMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1496,7 +1496,7 @@ type ContextualTupleKeysMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ContextualTupleKeysMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1626,7 +1626,7 @@ type UsersetTreeMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTreeMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1805,7 +1805,7 @@ type TupleChangeMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m TupleChangeMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1990,7 +1990,7 @@ type StoreMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m StoreMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2116,7 +2116,7 @@ type UserTypeFilterMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UserTypeFilterMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2348,7 +2348,7 @@ type UsersetTree_LeafMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_LeafMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2482,7 +2482,7 @@ type UsersetTree_NodesMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_NodesMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2584,7 +2584,7 @@ type UsersetTree_UsersMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_UsersMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2686,7 +2686,7 @@ type UsersetTree_ComputedMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_ComputedMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2822,7 +2822,7 @@ type UsersetTree_TupleToUsersetMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_TupleToUsersetMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3004,7 +3004,7 @@ type UsersetTree_DifferenceMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_DifferenceMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3277,7 +3277,7 @@ type UsersetTree_NodeMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UsersetTree_NodeMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } diff --git a/proto/openfga/v1/openfga_service.pb.validate.go b/proto/openfga/v1/openfga_service.pb.validate.go index 4618b031..afaf2e5e 100644 --- a/proto/openfga/v1/openfga_service.pb.validate.go +++ b/proto/openfga/v1/openfga_service.pb.validate.go @@ -199,7 +199,7 @@ type ListObjectsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListObjectsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -309,7 +309,7 @@ type ListObjectsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListObjectsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -618,7 +618,7 @@ type ListUsersRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListUsersRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -758,7 +758,7 @@ type ListUsersResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListUsersResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -988,7 +988,7 @@ type StreamedListObjectsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m StreamedListObjectsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1100,7 +1100,7 @@ type StreamedListObjectsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m StreamedListObjectsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1290,7 +1290,7 @@ type ReadRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1450,7 +1450,7 @@ type ReadRequestTupleKeyMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadRequestTupleKeyMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1613,7 +1613,7 @@ type ReadResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1762,7 +1762,7 @@ type WriteRequestWritesMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteRequestWritesMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -1911,7 +1911,7 @@ type WriteRequestDeletesMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteRequestDeletesMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2096,7 +2096,7 @@ type WriteRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2200,7 +2200,7 @@ type WriteResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2436,7 +2436,7 @@ type CheckRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CheckRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2573,7 +2573,7 @@ type CheckRequestTupleKeyMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CheckRequestTupleKeyMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2685,7 +2685,7 @@ type CheckResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CheckResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -2867,7 +2867,7 @@ type BatchCheckRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m BatchCheckRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3082,7 +3082,7 @@ type BatchCheckItemMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m BatchCheckItemMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3230,7 +3230,7 @@ type BatchCheckResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m BatchCheckResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3390,7 +3390,7 @@ type BatchCheckSingleResultMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m BatchCheckSingleResultMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3522,7 +3522,7 @@ type CheckErrorMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CheckErrorMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3728,7 +3728,7 @@ type ExpandRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ExpandRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3862,7 +3862,7 @@ type ExpandRequestTupleKeyMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ExpandRequestTupleKeyMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -3997,7 +3997,7 @@ type ExpandResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ExpandResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4119,7 +4119,7 @@ type ReadAuthorizationModelRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAuthorizationModelRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4255,7 +4255,7 @@ type ReadAuthorizationModelResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAuthorizationModelResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4491,7 +4491,7 @@ type WriteAuthorizationModelRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteAuthorizationModelRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4615,7 +4615,7 @@ type WriteAuthorizationModelResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteAuthorizationModelResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4768,7 +4768,7 @@ type ReadAuthorizationModelsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAuthorizationModelsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -4931,7 +4931,7 @@ type ReadAuthorizationModelsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAuthorizationModelsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5103,7 +5103,7 @@ type WriteAssertionsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteAssertionsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5209,7 +5209,7 @@ type WriteAssertionsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m WriteAssertionsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5333,7 +5333,7 @@ type ReadAssertionsRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAssertionsRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5484,7 +5484,7 @@ type ReadAssertionsResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadAssertionsResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5681,7 +5681,7 @@ type ReadChangesRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadChangesRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5845,7 +5845,7 @@ type ReadChangesResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ReadChangesResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -5960,7 +5960,7 @@ type CreateStoreRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CreateStoreRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6126,7 +6126,7 @@ type CreateStoreResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m CreateStoreResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6250,7 +6250,7 @@ type UpdateStoreRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UpdateStoreRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6418,7 +6418,7 @@ type UpdateStoreResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m UpdateStoreResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6531,7 +6531,7 @@ type DeleteStoreRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m DeleteStoreRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6635,7 +6635,7 @@ type DeleteStoreResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m DeleteStoreResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6748,7 +6748,7 @@ type GetStoreRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m GetStoreRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -6941,7 +6941,7 @@ type GetStoreResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m GetStoreResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -7093,7 +7093,7 @@ type ListStoresRequestMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListStoresRequestMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -7255,7 +7255,7 @@ type ListStoresResponseMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m ListStoresResponseMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -7392,7 +7392,7 @@ type AssertionTupleKeyMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m AssertionTupleKeyMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -7615,7 +7615,7 @@ type AssertionMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m AssertionMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } @@ -7748,7 +7748,7 @@ type AssertionsMultiError []error // Error returns a concatenation of all the error messages it wraps. func (m AssertionsMultiError) Error() string { - var msgs []string + msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) } From 18aa6f180b1636055bdc09468f1cac097a114e30 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Thu, 18 Jun 2026 12:54:58 +0530 Subject: [PATCH 5/5] chore: update deps to latest and regenerate proto code Bump grpc v1.81.1, protobuf v1.36.11, grpc-gateway v2.29.0, protoc-gen-validate v1.3.3, genproto api/rpc to latest, and toolchain go1.26.4. Align buf.gen.yaml plugin versions and regenerate all generated code. --- buf.gen.yaml | 10 +- buf.lock | 12 +- docs/openapiv2/apidocs.swagger.json | 823 +-- proto/authzen/v1/authzen_service.pb.go | 2197 ++----- proto/authzen/v1/authzen_service.pb.gw.go | 445 +- proto/authzen/v1/authzen_service_grpc.pb.go | 55 +- proto/go.mod | 22 +- proto/go.sum | 60 +- proto/openfga/v1/authzmodel.pb.go | 1078 +--- proto/openfga/v1/errors_ignore.pb.go | 606 +- proto/openfga/v1/openapi.pb.go | 118 +- proto/openfga/v1/openfga.pb.go | 1090 +--- proto/openfga/v1/openfga_service.pb.go | 5440 +++++------------ proto/openfga/v1/openfga_service.pb.gw.go | 1266 ++-- .../v1/openfga_service_consistency.pb.go | 46 +- proto/openfga/v1/openfga_service_grpc.pb.go | 164 +- 16 files changed, 4068 insertions(+), 9364 deletions(-) diff --git a/buf.gen.yaml b/buf.gen.yaml index 3901375e..7c60dc1b 100755 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -10,24 +10,24 @@ managed: - buf.build/envoyproxy/protoc-gen-validate - buf.build/grpc-ecosystem/grpc-gateway plugins: - - plugin: buf.build/protocolbuffers/go:v1.34.0 + - plugin: buf.build/protocolbuffers/go:v1.36.11 out: proto/ opt: - paths=source_relative - - plugin: buf.build/grpc/go:v1.3.0 + - plugin: buf.build/grpc/go:v1.6.2 out: proto/ opt: - paths=source_relative - - plugin: buf.build/bufbuild/validate-go:v1.3.0 + - plugin: buf.build/bufbuild/validate-go:v1.3.3 out: proto/ opt: - paths=source_relative - - plugin: buf.build/grpc-ecosystem/gateway:v2.19.1 + - plugin: buf.build/grpc-ecosystem/gateway:v2.29.0 out: proto/ opt: - paths=source_relative - logtostderr=true - - plugin: buf.build/grpc-ecosystem/openapiv2:v2.16.0 + - plugin: buf.build/grpc-ecosystem/openapiv2:v2.29.0 out: docs/openapiv2 opt: - openapi_naming_strategy=simple diff --git a/buf.lock b/buf.lock index 6775435c..4a8484f5 100644 --- a/buf.lock +++ b/buf.lock @@ -4,15 +4,15 @@ deps: - remote: buf.build owner: envoyproxy repository: protoc-gen-validate - commit: ea113bc841fa448ab34bf3f9fa6cef0f - digest: shake256:8f3653779e824957a4fe3d18cdb73531f7f7ed1393848082dfe1f90026fd187da9534e759b5833f4e5487be0d34cfa7d4ff149af9a2694863773387d61d09fce + commit: daf171c6cdb54629b5f51e345a79e4dd + digest: shake256:4ae167d7eed10da5f83a3f5df8c670d249170f11b1f2fd19afda06be2cff4d47dcc95e9e4a15151ecc8ce2d3d3614caf9a04d3ad82fb768a3870dedfa9455f36 - remote: buf.build owner: googleapis repository: googleapis - commit: 2011a25076274e6b974567fbf6697481 - digest: shake256:7149cf5e9955c692d381e557830555d4e93f205a0f1b8e2dfdae46d029369aa3fc1980e35df0d310f7cc3b622f93e19ad276769a283a967dd3065ddfd3a40e13 + commit: c17df5b2beca46928cc87d5656bd5343 + digest: shake256:c62ecead9b13485a02893cd678a6c81e40879bf00ea509bbc6fd8f1b2cc33eccf6a85c259b08d1e0f052f693cbfc7dfda236e9665b1d6869b8e1132a794a61e2 - remote: buf.build owner: grpc-ecosystem repository: grpc-gateway - commit: b661eb9bddab46c7bdbad4c73161bb11 - digest: shake256:67b115260e12cb2d6c5d5ce8dbbf3a095c86f0e52b84f9dbd16dec9433b218f8694bc9aadb1d45eb6fd52f5a7029977d460e2d58afb3208ab6c680e7b21c80e4 + commit: 4836b6d552304e1bbe47e66a523f0daa + digest: shake256:9747ec8da8c45fe6e0c9860f5495897b28c77b985c2c65a75a54c22f2f1f168039f06925aca6cd8d856a723b60eb80d510d6db1f7d0f3bd27f8d91a8a8c6182c diff --git a/docs/openapiv2/apidocs.swagger.json b/docs/openapiv2/apidocs.swagger.json index 1135c50d..5f3237a7 100644 --- a/docs/openapiv2/apidocs.swagger.json +++ b/docs/openapiv2/apidocs.swagger.json @@ -449,26 +449,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/Subject" - }, - "resource": { - "$ref": "#/definitions/Resource" - }, - "action": { - "$ref": "#/definitions/Action" - }, - "context": { - "type": "object" - } - }, - "required": [ - "subject", - "resource", - "action" - ] + "$ref": "#/definitions/EvaluationBody" } } ], @@ -544,33 +525,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/Subject" - }, - "action": { - "$ref": "#/definitions/Action" - }, - "resource": { - "$ref": "#/definitions/Resource" - }, - "context": { - "type": "object" - }, - "evaluations": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/EvaluationsItemRequest" - }, - "description": "Optional. If omitted or empty, behaves like a single Access Evaluation request." - }, - "options": { - "$ref": "#/definitions/EvaluationsOptions", - "title": "Options for batch evaluation semantics" - } - } + "$ref": "#/definitions/EvaluationsBody" } } ], @@ -646,26 +601,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/Subject" - }, - "resource": { - "$ref": "#/definitions/Resource" - }, - "context": { - "type": "object" - }, - "page": { - "$ref": "#/definitions/PageRequest" - } - }, - "title": "ActionSearch request", - "required": [ - "subject", - "resource" - ] + "$ref": "#/definitions/ActionSearchBody" } } ], @@ -741,31 +677,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/Subject" - }, - "action": { - "$ref": "#/definitions/Action" - }, - "resource": { - "$ref": "#/definitions/ResourceFilter", - "title": "Filter by resource type" - }, - "context": { - "type": "object" - }, - "page": { - "$ref": "#/definitions/PageRequest" - } - }, - "title": "ResourceSearch request", - "required": [ - "subject", - "action", - "resource" - ] + "$ref": "#/definitions/ResourceSearchBody" } } ], @@ -841,31 +753,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "resource": { - "$ref": "#/definitions/Resource" - }, - "action": { - "$ref": "#/definitions/Action" - }, - "subject": { - "$ref": "#/definitions/SubjectFilter", - "description": "REQUIRED by AuthZEN Subject Search. Subject `id` may be provided but is ignored." - }, - "context": { - "type": "object" - }, - "page": { - "$ref": "#/definitions/PageRequest" - } - }, - "title": "SubjectSearch request", - "required": [ - "resource", - "action", - "subject" - ] + "$ref": "#/definitions/SubjectSearchBody" } } ], @@ -1016,20 +904,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "assertions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Assertion" - }, - "maxItems": 100 - } - }, - "required": [ - "assertions" - ] + "$ref": "#/definitions/WriteAssertionsBody" } } ], @@ -1184,30 +1059,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "type_definitions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/TypeDefinition" - }, - "minItems": 1 - }, - "schema_version": { - "type": "string" - }, - "conditions": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Condition" - } - } - }, - "required": [ - "type_definitions", - "schema_version" - ] + "$ref": "#/definitions/WriteAuthorizationModelBody" } } ], @@ -1357,27 +1209,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "checks": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/BatchCheckItem" - }, - "minItems": 1 - }, - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference" - } - }, - "required": [ - "checks" - ] + "$ref": "#/definitions/BatchCheckBody" } } ], @@ -1548,36 +1380,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "tuple_key": { - "$ref": "#/definitions/CheckRequestTupleKey" - }, - "contextual_tuples": { - "$ref": "#/definitions/ContextualTupleKeys" - }, - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "trace": { - "type": "boolean", - "example": false, - "description": "Defaults to false. Making it true has performance implications.", - "readOnly": true - }, - "context": { - "type": "object", - "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - } - }, - "required": [ - "tuple_key" - ] + "$ref": "#/definitions/CheckBody" } } ], @@ -1653,26 +1456,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "tuple_key": { - "$ref": "#/definitions/ExpandRequestTupleKey" - }, - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - }, - "contextual_tuples": { - "$ref": "#/definitions/ContextualTupleKeys" - } - }, - "required": [ - "tuple_key" - ] + "$ref": "#/definitions/ExpandBody" } } ], @@ -1748,43 +1532,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "type": { - "type": "string", - "example": "document" - }, - "relation": { - "type": "string", - "example": "reader" - }, - "user": { - "type": "string", - "example": "user:anne", - "maxLength": 512, - "minLength": 1 - }, - "contextual_tuples": { - "$ref": "#/definitions/ContextualTupleKeys" - }, - "context": { - "type": "object", - "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - } - }, - "required": [ - "type", - "relation", - "user" - ] + "$ref": "#/definitions/ListObjectsBody" } } ], @@ -1860,61 +1608,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "object": { - "$ref": "#/definitions/Object", - "example": "document:example" - }, - "relation": { - "type": "string", - "example": "reader" - }, - "user_filters": { - "type": "array", - "example": [ - { - "type": "user" - }, - { - "type": "group", - "relation": "member" - } - ], - "items": { - "type": "object", - "$ref": "#/definitions/UserTypeFilter" - }, - "description": "The type of results returned. Only accepts exactly one value.", - "maxItems": 1, - "minItems": 1 - }, - "contextual_tuples": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/TupleKey" - }, - "maxItems": 100 - }, - "context": { - "type": "object", - "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - } - }, - "required": [ - "object", - "relation", - "user_filters" - ] + "$ref": "#/definitions/ListUsersBody" } } ], @@ -1990,27 +1684,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "tuple_key": { - "$ref": "#/definitions/ReadRequestTupleKey" - }, - "page_size": { - "type": "integer", - "format": "int32", - "example": 50, - "maximum": 100, - "minimum": 1 - }, - "continuation_token": { - "type": "string", - "example": "eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==" - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - } - } + "$ref": "#/definitions/ReadBody" } } ], @@ -2095,43 +1769,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - }, - "type": { - "type": "string", - "example": "document" - }, - "relation": { - "type": "string", - "example": "reader" - }, - "user": { - "type": "string", - "example": "user:anne", - "maxLength": 512, - "minLength": 1 - }, - "contextual_tuples": { - "$ref": "#/definitions/ContextualTupleKeys" - }, - "context": { - "type": "object", - "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." - }, - "consistency": { - "$ref": "#/definitions/ConsistencyPreference", - "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." - } - }, - "required": [ - "type", - "relation", - "user" - ] + "$ref": "#/definitions/StreamedListObjectsBody" } } ], @@ -2207,19 +1845,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "writes": { - "$ref": "#/definitions/WriteRequestWrites" - }, - "deletes": { - "$ref": "#/definitions/WriteRequestDeletes" - }, - "authorization_model_id": { - "type": "string", - "example": "01G5JAVJ41T49E9TT3SKVS7X1J" - } - } + "$ref": "#/definitions/WriteBody" } } ], @@ -2260,6 +1886,28 @@ "name" ] }, + "ActionSearchBody": { + "type": "object", + "properties": { + "subject": { + "$ref": "#/definitions/Subject" + }, + "resource": { + "$ref": "#/definitions/Resource" + }, + "context": { + "type": "object" + }, + "page": { + "$ref": "#/definitions/PageRequest" + } + }, + "title": "ActionSearch request", + "required": [ + "subject", + "resource" + ] + }, "ActionSearchResponse": { "type": "object", "properties": { @@ -2431,6 +2079,29 @@ "type_definitions" ] }, + "BatchCheckBody": { + "type": "object", + "properties": { + "checks": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/BatchCheckItem" + }, + "minItems": 1 + }, + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference" + } + }, + "required": [ + "checks" + ] + }, "BatchCheckItem": { "type": "object", "properties": { @@ -2485,6 +2156,38 @@ } } }, + "CheckBody": { + "type": "object", + "properties": { + "tuple_key": { + "$ref": "#/definitions/CheckRequestTupleKey" + }, + "contextual_tuples": { + "$ref": "#/definitions/ContextualTupleKeys" + }, + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "trace": { + "type": "boolean", + "example": false, + "description": "Defaults to false. Making it true has performance implications.", + "readOnly": true + }, + "context": { + "type": "object", + "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + } + }, + "required": [ + "tuple_key" + ] + }, "CheckError": { "type": "object", "properties": { @@ -2732,6 +2435,28 @@ ], "default": "no_error" }, + "EvaluationBody": { + "type": "object", + "properties": { + "subject": { + "$ref": "#/definitions/Subject" + }, + "resource": { + "$ref": "#/definitions/Resource" + }, + "action": { + "$ref": "#/definitions/Action" + }, + "context": { + "type": "object" + } + }, + "required": [ + "subject", + "resource", + "action" + ] + }, "EvaluationResponse": { "type": "object", "properties": { @@ -2743,6 +2468,35 @@ } } }, + "EvaluationsBody": { + "type": "object", + "properties": { + "subject": { + "$ref": "#/definitions/Subject" + }, + "action": { + "$ref": "#/definitions/Action" + }, + "resource": { + "$ref": "#/definitions/Resource" + }, + "context": { + "type": "object" + }, + "evaluations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EvaluationsItemRequest" + }, + "description": "Optional. If omitted or empty, behaves like a single Access Evaluation request." + }, + "options": { + "$ref": "#/definitions/EvaluationsOptions", + "title": "Options for batch evaluation semantics" + } + } + }, "EvaluationsItemRequest": { "type": "object", "properties": { @@ -2793,6 +2547,28 @@ "description": "- execute_all: Execute all evaluations (default behavior)\n - deny_on_first_deny: Stop on first deny decision\n - permit_on_first_permit: Stop on first permit decision", "title": "Enum for evaluation semantics" }, + "ExpandBody": { + "type": "object", + "properties": { + "tuple_key": { + "$ref": "#/definitions/ExpandRequestTupleKey" + }, + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + }, + "contextual_tuples": { + "$ref": "#/definitions/ContextualTupleKeys" + } + }, + "required": [ + "tuple_key" + ] + }, "ExpandRequestTupleKey": { "type": "object", "properties": { @@ -2956,6 +2732,45 @@ }, "description": "A leaf node contains either\n- a set of users (which may be individual users, or usersets\n referencing other relations)\n- a computed node, which is the result of a computed userset\n value in the authorization model\n- a tupleToUserset nodes, containing the result of expanding\n a tupleToUserset value in a authorization model." }, + "ListObjectsBody": { + "type": "object", + "properties": { + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "type": { + "type": "string", + "example": "document" + }, + "relation": { + "type": "string", + "example": "reader" + }, + "user": { + "type": "string", + "example": "user:anne", + "maxLength": 512, + "minLength": 1 + }, + "contextual_tuples": { + "$ref": "#/definitions/ContextualTupleKeys" + }, + "context": { + "type": "object", + "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + } + }, + "required": [ + "type", + "relation", + "user" + ] + }, "ListObjectsResponse": { "type": "object", "properties": { @@ -2995,6 +2810,63 @@ "continuation_token" ] }, + "ListUsersBody": { + "type": "object", + "properties": { + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "object": { + "$ref": "#/definitions/Object", + "example": "document:example" + }, + "relation": { + "type": "string", + "example": "reader" + }, + "user_filters": { + "type": "array", + "example": [ + { + "type": "user" + }, + { + "type": "group", + "relation": "member" + } + ], + "items": { + "type": "object", + "$ref": "#/definitions/UserTypeFilter" + }, + "description": "The type of results returned. Only accepts exactly one value.", + "maxItems": 1, + "minItems": 1 + }, + "contextual_tuples": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TupleKey" + }, + "maxItems": 100 + }, + "context": { + "type": "object", + "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + } + }, + "required": [ + "object", + "relation", + "user_filters" + ] + }, "ListUsersResponse": { "type": "object", "properties": { @@ -3209,6 +3081,29 @@ "authorization_models" ] }, + "ReadBody": { + "type": "object", + "properties": { + "tuple_key": { + "$ref": "#/definitions/ReadRequestTupleKey" + }, + "page_size": { + "type": "integer", + "format": "int32", + "example": 50, + "maximum": 100, + "minimum": 1 + }, + "continuation_token": { + "type": "string", + "example": "eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==" + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + } + } + }, "ReadChangesResponse": { "type": "object", "properties": { @@ -3370,6 +3265,33 @@ "type" ] }, + "ResourceSearchBody": { + "type": "object", + "properties": { + "subject": { + "$ref": "#/definitions/Subject" + }, + "action": { + "$ref": "#/definitions/Action" + }, + "resource": { + "$ref": "#/definitions/ResourceFilter", + "title": "Filter by resource type" + }, + "context": { + "type": "object" + }, + "page": { + "$ref": "#/definitions/PageRequest" + } + }, + "title": "ResourceSearch request", + "required": [ + "subject", + "action", + "resource" + ] + }, "ResourceSearchResponse": { "type": "object", "properties": { @@ -3442,6 +3364,45 @@ "updated_at" ] }, + "StreamedListObjectsBody": { + "type": "object", + "properties": { + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + }, + "type": { + "type": "string", + "example": "document" + }, + "relation": { + "type": "string", + "example": "reader" + }, + "user": { + "type": "string", + "example": "user:anne", + "maxLength": 512, + "minLength": 1 + }, + "contextual_tuples": { + "$ref": "#/definitions/ContextualTupleKeys" + }, + "context": { + "type": "object", + "description": "Additional request context that will be used to evaluate any ABAC conditions encountered\nin the query evaluation." + }, + "consistency": { + "$ref": "#/definitions/ConsistencyPreference", + "description": "Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY." + } + }, + "required": [ + "type", + "relation", + "user" + ] + }, "StreamedListObjectsResponse": { "type": "object", "properties": { @@ -3495,6 +3456,33 @@ "type" ] }, + "SubjectSearchBody": { + "type": "object", + "properties": { + "resource": { + "$ref": "#/definitions/Resource" + }, + "action": { + "$ref": "#/definitions/Action" + }, + "subject": { + "$ref": "#/definitions/SubjectFilter", + "description": "REQUIRED by AuthZEN Subject Search. Subject `id` may be provided but is ignored." + }, + "context": { + "type": "object" + }, + "page": { + "$ref": "#/definitions/PageRequest" + } + }, + "title": "SubjectSearch request", + "required": [ + "resource", + "action", + "subject" + ] + }, "SubjectSearchResponse": { "type": "object", "properties": { @@ -3887,9 +3875,51 @@ "Wildcard": { "type": "object" }, + "WriteAssertionsBody": { + "type": "object", + "properties": { + "assertions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Assertion" + }, + "maxItems": 100 + } + }, + "required": [ + "assertions" + ] + }, "WriteAssertionsResponse": { "type": "object" }, + "WriteAuthorizationModelBody": { + "type": "object", + "properties": { + "type_definitions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TypeDefinition" + }, + "minItems": 1 + }, + "schema_version": { + "type": "string" + }, + "conditions": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Condition" + } + } + }, + "required": [ + "type_definitions", + "schema_version" + ] + }, "WriteAuthorizationModelResponse": { "type": "object", "properties": { @@ -3902,6 +3932,21 @@ "authorization_model_id" ] }, + "WriteBody": { + "type": "object", + "properties": { + "writes": { + "$ref": "#/definitions/WriteRequestWrites" + }, + "deletes": { + "$ref": "#/definitions/WriteRequestDeletes" + }, + "authorization_model_id": { + "type": "string", + "example": "01G5JAVJ41T49E9TT3SKVS7X1J" + } + } + }, "WriteRequestDeletes": { "type": "object", "properties": { diff --git a/proto/authzen/v1/authzen_service.pb.go b/proto/authzen/v1/authzen_service.pb.go index 98d18123..59a3a60d 100644 --- a/proto/authzen/v1/authzen_service.pb.go +++ b/proto/authzen/v1/authzen_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: authzen/v1/authzen_service.proto @@ -15,6 +15,7 @@ import ( structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -78,24 +79,21 @@ func (EvaluationsSemantic) EnumDescriptor() ([]byte, []int) { } type EvaluationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` + Action *Action `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` + Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` - Action *Action `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` - Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EvaluationRequest) Reset() { *x = EvaluationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationRequest) String() string { @@ -106,7 +104,7 @@ func (*EvaluationRequest) ProtoMessage() {} func (x *EvaluationRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -157,23 +155,20 @@ func (x *EvaluationRequest) GetContext() *structpb.Struct { } type EvaluationsItemRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Subject *Subject `protobuf:"bytes,1,opt,name=subject,proto3,oneof" json:"subject,omitempty"` + Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3,oneof" json:"resource,omitempty"` + Action *Action `protobuf:"bytes,3,opt,name=action,proto3,oneof" json:"action,omitempty"` + Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3,oneof" json:"context,omitempty"` unknownFields protoimpl.UnknownFields - - Subject *Subject `protobuf:"bytes,1,opt,name=subject,proto3,oneof" json:"subject,omitempty"` - Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3,oneof" json:"resource,omitempty"` - Action *Action `protobuf:"bytes,3,opt,name=action,proto3,oneof" json:"action,omitempty"` - Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3,oneof" json:"context,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EvaluationsItemRequest) Reset() { *x = EvaluationsItemRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationsItemRequest) String() string { @@ -184,7 +179,7 @@ func (*EvaluationsItemRequest) ProtoMessage() {} func (x *EvaluationsItemRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -228,22 +223,19 @@ func (x *EvaluationsItemRequest) GetContext() *structpb.Struct { } type Subject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Subject) Reset() { *x = Subject{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Subject) String() string { @@ -254,7 +246,7 @@ func (*Subject) ProtoMessage() {} func (x *Subject) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -292,23 +284,20 @@ func (x *Subject) GetProperties() *structpb.Struct { // SubjectFilter is used for search operations where only type is required type SubjectFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Optional subject id. If present in Subject Search, it is ignored per AuthZEN spec. - Id *string `protobuf:"bytes,2,opt,name=id,proto3,oneof" json:"id,omitempty"` - Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + Id *string `protobuf:"bytes,2,opt,name=id,proto3,oneof" json:"id,omitempty"` + Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubjectFilter) Reset() { *x = SubjectFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubjectFilter) String() string { @@ -319,7 +308,7 @@ func (*SubjectFilter) ProtoMessage() {} func (x *SubjectFilter) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -356,22 +345,19 @@ func (x *SubjectFilter) GetProperties() *structpb.Struct { } type Resource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Resource) Reset() { *x = Resource{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Resource) String() string { @@ -382,7 +368,7 @@ func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -420,23 +406,20 @@ func (x *Resource) GetProperties() *structpb.Struct { // ResourceFilter is used for search operations where only type is required type ResourceFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Optional resource id. If present in Resource Search, it is ignored per AuthZEN spec. - Id *string `protobuf:"bytes,2,opt,name=id,proto3,oneof" json:"id,omitempty"` - Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + Id *string `protobuf:"bytes,2,opt,name=id,proto3,oneof" json:"id,omitempty"` + Properties *structpb.Struct `protobuf:"bytes,3,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceFilter) Reset() { *x = ResourceFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ResourceFilter) String() string { @@ -447,7 +430,7 @@ func (*ResourceFilter) ProtoMessage() {} func (x *ResourceFilter) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -484,21 +467,18 @@ func (x *ResourceFilter) GetProperties() *structpb.Struct { } type Action struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Properties *structpb.Struct `protobuf:"bytes,2,opt,name=properties,proto3,oneof" json:"properties,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Properties *structpb.Struct `protobuf:"bytes,2,opt,name=properties,proto3,oneof" json:"properties,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Action) Reset() { *x = Action{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Action) String() string { @@ -509,7 +489,7 @@ func (*Action) ProtoMessage() {} func (x *Action) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -539,21 +519,18 @@ func (x *Action) GetProperties() *structpb.Struct { } type EvaluationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Decision bool `protobuf:"varint,1,opt,name=decision,proto3" json:"decision,omitempty"` + Context *structpb.Struct `protobuf:"bytes,2,opt,name=context,proto3,oneof" json:"context,omitempty"` unknownFields protoimpl.UnknownFields - - Decision bool `protobuf:"varint,1,opt,name=decision,proto3" json:"decision,omitempty"` - Context *structpb.Struct `protobuf:"bytes,2,opt,name=context,proto3,oneof" json:"context,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EvaluationResponse) Reset() { *x = EvaluationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationResponse) String() string { @@ -564,7 +541,7 @@ func (*EvaluationResponse) ProtoMessage() {} func (x *EvaluationResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -594,28 +571,25 @@ func (x *EvaluationResponse) GetContext() *structpb.Struct { } type EvaluationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3,oneof" json:"subject,omitempty"` - Action *Action `protobuf:"bytes,3,opt,name=action,proto3,oneof" json:"action,omitempty"` - Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3,oneof" json:"resource,omitempty"` - Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3,oneof" json:"subject,omitempty"` + Action *Action `protobuf:"bytes,3,opt,name=action,proto3,oneof" json:"action,omitempty"` + Resource *Resource `protobuf:"bytes,4,opt,name=resource,proto3,oneof" json:"resource,omitempty"` + Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` // Optional. If omitted or empty, behaves like a single Access Evaluation request. Evaluations []*EvaluationsItemRequest `protobuf:"bytes,6,rep,name=evaluations,proto3" json:"evaluations,omitempty"` // Options for batch evaluation semantics - Options *EvaluationsOptions `protobuf:"bytes,7,opt,name=options,proto3" json:"options,omitempty"` + Options *EvaluationsOptions `protobuf:"bytes,7,opt,name=options,proto3" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EvaluationsRequest) Reset() { *x = EvaluationsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationsRequest) String() string { @@ -626,7 +600,7 @@ func (*EvaluationsRequest) ProtoMessage() {} func (x *EvaluationsRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -691,20 +665,17 @@ func (x *EvaluationsRequest) GetOptions() *EvaluationsOptions { } type EvaluationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Evaluations []*EvaluationResponse `protobuf:"bytes,1,rep,name=evaluations,proto3" json:"evaluations,omitempty"` unknownFields protoimpl.UnknownFields - - Evaluations []*EvaluationResponse `protobuf:"bytes,1,rep,name=evaluations,proto3" json:"evaluations,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EvaluationsResponse) Reset() { *x = EvaluationsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationsResponse) String() string { @@ -715,7 +686,7 @@ func (*EvaluationsResponse) ProtoMessage() {} func (x *EvaluationsResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -739,21 +710,18 @@ func (x *EvaluationsResponse) GetEvaluations() []*EvaluationResponse { // Options for batch evaluations type EvaluationsOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Controls how batch evaluations are processed EvaluationsSemantic EvaluationsSemantic `protobuf:"varint,1,opt,name=evaluations_semantic,proto3,enum=authzen.v1.EvaluationsSemantic" json:"evaluations_semantic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EvaluationsOptions) Reset() { *x = EvaluationsOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EvaluationsOptions) String() string { @@ -764,7 +732,7 @@ func (*EvaluationsOptions) ProtoMessage() {} func (x *EvaluationsOptions) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -788,23 +756,20 @@ func (x *EvaluationsOptions) GetEvaluationsSemantic() EvaluationsSemantic { // Pagination request parameters for search operations type PageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Continuation token from previous response Token *string `protobuf:"bytes,1,opt,name=token,proto3,oneof" json:"token,omitempty"` // Maximum number of results to return (default: 50, max: 1000) - Limit *uint32 `protobuf:"varint,2,opt,name=limit,proto3,oneof" json:"limit,omitempty"` + Limit *uint32 `protobuf:"varint,2,opt,name=limit,proto3,oneof" json:"limit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PageRequest) Reset() { *x = PageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PageRequest) String() string { @@ -815,7 +780,7 @@ func (*PageRequest) ProtoMessage() {} func (x *PageRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -846,25 +811,22 @@ func (x *PageRequest) GetLimit() uint32 { // Pagination response parameters type PageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Token to retrieve next page (empty if no more results) NextToken string `protobuf:"bytes,1,opt,name=next_token,proto3" json:"next_token,omitempty"` // Number of results in this page Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` // Total number of results (if known, otherwise 0) - Total *uint32 `protobuf:"varint,3,opt,name=total,proto3,oneof" json:"total,omitempty"` + Total *uint32 `protobuf:"varint,3,opt,name=total,proto3,oneof" json:"total,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PageResponse) Reset() { *x = PageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PageResponse) String() string { @@ -875,7 +837,7 @@ func (*PageResponse) ProtoMessage() {} func (x *PageResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -913,26 +875,23 @@ func (x *PageResponse) GetTotal() uint32 { // SubjectSearch request type SubjectSearchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` - Action *Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` + Action *Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` // REQUIRED by AuthZEN Subject Search. Subject `id` may be provided but is ignored. - Subject *SubjectFilter `protobuf:"bytes,4,opt,name=subject,proto3" json:"subject,omitempty"` - Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` - Page *PageRequest `protobuf:"bytes,6,opt,name=page,proto3" json:"page,omitempty"` + Subject *SubjectFilter `protobuf:"bytes,4,opt,name=subject,proto3" json:"subject,omitempty"` + Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` + Page *PageRequest `protobuf:"bytes,6,opt,name=page,proto3" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubjectSearchRequest) Reset() { *x = SubjectSearchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubjectSearchRequest) String() string { @@ -943,7 +902,7 @@ func (*SubjectSearchRequest) ProtoMessage() {} func (x *SubjectSearchRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1001,22 +960,19 @@ func (x *SubjectSearchRequest) GetPage() *PageRequest { } type SubjectSearchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Results []*Subject `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Results []*Subject `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` // Optional per AuthZEN spec - omit if pagination not supported - Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubjectSearchResponse) Reset() { *x = SubjectSearchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubjectSearchResponse) String() string { @@ -1027,7 +983,7 @@ func (*SubjectSearchResponse) ProtoMessage() {} func (x *SubjectSearchResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1058,26 +1014,23 @@ func (x *SubjectSearchResponse) GetPage() *PageResponse { // ResourceSearch request type ResourceSearchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - Action *Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Action *Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` // Filter by resource type - Resource *ResourceFilter `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` - Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` - Page *PageRequest `protobuf:"bytes,6,opt,name=page,proto3" json:"page,omitempty"` + Resource *ResourceFilter `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + Context *structpb.Struct `protobuf:"bytes,5,opt,name=context,proto3,oneof" json:"context,omitempty"` + Page *PageRequest `protobuf:"bytes,6,opt,name=page,proto3" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceSearchRequest) Reset() { *x = ResourceSearchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ResourceSearchRequest) String() string { @@ -1088,7 +1041,7 @@ func (*ResourceSearchRequest) ProtoMessage() {} func (x *ResourceSearchRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1146,22 +1099,19 @@ func (x *ResourceSearchRequest) GetPage() *PageRequest { } type ResourceSearchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Results []*Resource `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Results []*Resource `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` // Optional per AuthZEN spec - omit if pagination not supported - Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResourceSearchResponse) Reset() { *x = ResourceSearchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ResourceSearchResponse) String() string { @@ -1172,7 +1122,7 @@ func (*ResourceSearchResponse) ProtoMessage() {} func (x *ResourceSearchResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1203,24 +1153,21 @@ func (x *ResourceSearchResponse) GetPage() *PageResponse { // ActionSearch request type ActionSearchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` + Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3,oneof" json:"context,omitempty"` + Page *PageRequest `protobuf:"bytes,5,opt,name=page,proto3" json:"page,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Subject *Subject `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` - Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3,oneof" json:"context,omitempty"` - Page *PageRequest `protobuf:"bytes,5,opt,name=page,proto3" json:"page,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ActionSearchRequest) Reset() { *x = ActionSearchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ActionSearchRequest) String() string { @@ -1231,7 +1178,7 @@ func (*ActionSearchRequest) ProtoMessage() {} func (x *ActionSearchRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1282,22 +1229,19 @@ func (x *ActionSearchRequest) GetPage() *PageRequest { } type ActionSearchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Results []*Action `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Results []*Action `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` // Optional per AuthZEN spec - omit if pagination not supported - Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + Page *PageResponse `protobuf:"bytes,2,opt,name=page,proto3,oneof" json:"page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ActionSearchResponse) Reset() { *x = ActionSearchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ActionSearchResponse) String() string { @@ -1308,7 +1252,7 @@ func (*ActionSearchResponse) ProtoMessage() {} func (x *ActionSearchResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1339,22 +1283,19 @@ func (x *ActionSearchResponse) GetPage() *PageResponse { // GetConfiguration request type GetConfigurationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The store ID for which to retrieve configuration. // Following the AuthZEN spec's multi-tenant pattern, each store has its own discovery endpoint. - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetConfigurationRequest) Reset() { *x = GetConfigurationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetConfigurationRequest) String() string { @@ -1365,7 +1306,7 @@ func (*GetConfigurationRequest) ProtoMessage() {} func (x *GetConfigurationRequest) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1389,10 +1330,7 @@ func (x *GetConfigurationRequest) GetStoreId() string { // GetConfiguration response - PDP metadata per AuthZEN spec type GetConfigurationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // REQUIRED. The PDP identifier URL (HTTPS, no query or fragment). PolicyDecisionPoint string `protobuf:"bytes,1,opt,name=policy_decision_point,proto3" json:"policy_decision_point,omitempty"` // REQUIRED. The access evaluation endpoint URL. @@ -1409,15 +1347,15 @@ type GetConfigurationResponse struct { Capabilities []string `protobuf:"bytes,7,rep,name=capabilities,proto3" json:"capabilities,omitempty"` // OPTIONAL. Signed metadata JWT per AuthZEN metadata specification. SignedMetadata *string `protobuf:"bytes,8,opt,name=signed_metadata,proto3,oneof" json:"signed_metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetConfigurationResponse) Reset() { *x = GetConfigurationResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authzen_v1_authzen_service_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_authzen_v1_authzen_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetConfigurationResponse) String() string { @@ -1428,7 +1366,7 @@ func (*GetConfigurationResponse) ProtoMessage() {} func (x *GetConfigurationResponse) ProtoReflect() protoreflect.Message { mi := &file_authzen_v1_authzen_service_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1501,1016 +1439,466 @@ func (x *GetConfigurationResponse) GetSignedMetadata() string { var File_authzen_v1_authzen_service_proto protoreflect.FileDescriptor -var file_authzen_v1_authzen_service_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x7a, 0x65, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x02, 0x0a, 0x11, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, - 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, - 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x5f, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x3d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x9c, 0x02, 0x0a, - 0x16, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, - 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x48, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x02, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x03, 0x52, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x07, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, 0x41, 0x08, 0x4a, 0x06, 0x22, 0x75, 0x73, 0x65, - 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x29, 0x92, 0x41, 0x08, 0x4a, 0x06, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x18, 0x72, 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, - 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, - 0x0a, 0x0b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xb6, 0x01, - 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x3c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, - 0x41, 0x08, 0x4a, 0x06, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, - 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, - 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x88, - 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, - 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, - 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0b, 0x4a, 0x09, 0x22, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, - 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, - 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x48, 0x00, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x88, 0x01, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x22, 0xbb, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x01, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x42, - 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x97, - 0x01, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x63, - 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, - 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, - 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x74, 0x0a, 0x12, 0x45, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x88, - 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x82, - 0x04, 0x0a, 0x12, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, - 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, - 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, - 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, - 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, - 0x32, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x02, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x03, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x44, 0x0a, 0x0b, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0b, 0x65, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x22, 0x57, 0x0a, 0x13, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x65, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x0b, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x73, 0x0a, 0x12, - 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x14, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x14, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x22, 0x61, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x2a, - 0x03, 0x18, 0xe8, 0x07, 0x48, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x22, 0x69, 0x0a, 0x0c, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, - 0x8a, 0x03, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x82, 0x01, 0x0a, - 0x15, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x04, 0x70, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x70, 0x61, 0x67, - 0x65, 0x22, 0x8b, 0x03, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x08, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x5f, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x36, - 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x84, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x22, 0xca, 0x02, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, - 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x2b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, - 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, - 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0b, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xe0, 0x41, 0x02, - 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, - 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, - 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, - 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, - 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x22, 0x8f, 0x04, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x15, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x15, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x1a, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x1b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x01, 0x52, 0x1b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x3d, 0x0a, 0x17, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x17, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, - 0x3f, 0x0a, 0x18, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x18, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x3b, 0x0a, 0x16, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x16, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, - 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x01, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x5a, - 0x0a, 0x13, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x6d, - 0x61, 0x6e, 0x74, 0x69, 0x63, 0x12, 0x0f, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x6f, - 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6e, 0x79, 0x10, 0x01, 0x12, 0x1a, - 0x0a, 0x16, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x02, 0x32, 0x99, 0x52, 0x0a, 0x0e, 0x41, - 0x75, 0x74, 0x68, 0x5a, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xab, 0x16, - 0x0a, 0x0a, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdd, 0x15, 0x92, 0x41, - 0xa7, 0x15, 0x12, 0x4d, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x5d, 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x1a, 0xc9, 0x14, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x73, - 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x5a, 0x45, 0x4e, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x23, 0x23, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x0a, 0x2d, 0x20, 0x2a, 0x2a, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0x2a, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x61, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x29, 0x0a, 0x2d, 0x20, 0x2a, 0x2a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x2a, 0x3a, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, - 0x69, 0x6e, 0x67, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x28, 0x6d, - 0x61, 0x70, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x29, 0x0a, 0x2d, 0x20, - 0x2a, 0x2a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2a, 0x2a, 0x3a, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x0a, 0x0a, 0x45, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x60, 0x74, - 0x79, 0x70, 0x65, 0x60, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x69, 0x64, 0x60, 0x20, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x60, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x41, - 0x42, 0x41, 0x43, 0x20, 0x28, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x42, - 0x61, 0x73, 0x65, 0x64, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x0a, 0x54, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x60, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x60, - 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x28, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x29, - 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x44, 0x20, - 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x41, 0x42, 0x41, 0x43, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x6e, - 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, - 0x73, 0x3a, 0x0a, 0x2d, 0x20, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x70, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x20, 0x60, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x3e, 0x60, 0x0a, 0x2d, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x20, 0x60, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x3e, 0x60, 0x0a, 0x2d, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x20, 0x60, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x3c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x3e, 0x60, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, - 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x42, 0x61, 0x73, 0x69, - 0x63, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x20, 0x41, 0x6e, 0x6e, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, - 0x64, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x0a, 0x60, 0x60, - 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, - 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, - 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, - 0x0a, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, - 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, - 0x23, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x41, 0x42, 0x41, 0x43, 0x0a, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3a, 0x0a, 0x60, - 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x2c, 0x20, 0x22, 0x63, - 0x6c, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x3a, - 0x20, 0x33, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, - 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x22, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x63, 0x6c, - 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x32, 0x7d, 0x0a, 0x20, 0x20, 0x7d, - 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x0a, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6e, - 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, - 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x62, 0x6f, 0x62, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x34, - 0x2d, 0x30, 0x31, 0x2d, 0x31, 0x35, 0x54, 0x31, 0x34, 0x3a, 0x33, 0x30, 0x3a, 0x30, 0x30, 0x5a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, - 0x31, 0x30, 0x30, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x73, 0x5f, 0x76, 0x70, - 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, - 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, - 0x50, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2d, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x2d, 0x49, 0x64, 0x60, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3a, 0x0a, - 0x60, 0x60, 0x60, 0x0a, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2d, 0x49, 0x64, 0x3a, - 0x20, 0x30, 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, 0x45, 0x43, 0x4e, 0x56, - 0x41, 0x48, 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x0a, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x2d, - 0x32, 0x30, 0x32, 0x34, 0x22, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x0a, 0x45, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, - 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xc7, 0x11, 0x0a, 0x0b, - 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf6, 0x10, 0x92, - 0x41, 0xbf, 0x10, 0x12, 0x51, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x5d, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0xdc, 0x0f, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x45, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x73, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x2c, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, 0x70, 0x65, 0x72, 0x20, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x0a, 0x0a, 0x23, 0x23, - 0x20, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x65, 0x6d, 0x61, - 0x6e, 0x74, 0x69, 0x63, 0x73, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x60, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, - 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x60, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x3a, 0x0a, 0x2d, 0x20, 0x60, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x60, 0x20, 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x29, - 0x3a, 0x20, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x0a, 0x2d, 0x20, 0x60, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x64, 0x65, 0x6e, 0x79, 0x60, 0x3a, 0x20, 0x53, 0x74, 0x6f, 0x70, 0x20, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x20, 0x64, 0x65, 0x6e, 0x79, 0x20, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x0a, - 0x2d, 0x20, 0x60, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x60, 0x3a, 0x20, 0x53, 0x74, 0x6f, 0x70, - 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x20, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x60, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, - 0x64, 0x65, 0x6e, 0x79, 0x60, 0x20, 0x6f, 0x72, 0x20, 0x60, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, - 0x5f, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, - 0x60, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x66, 0x65, 0x77, 0x65, - 0x72, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x2d, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, - 0x20, 0x6d, 0x65, 0x74, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x54, 0x6f, 0x20, 0x70, 0x69, 0x6e, 0x20, 0x65, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, - 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2d, 0x49, 0x64, 0x60, 0x20, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, - 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, 0x23, - 0x23, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x20, 0x65, 0x76, - 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, - 0x66, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x65, 0x72, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, - 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x7d, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x22, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, - 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, - 0x0a, 0x53, 0x74, 0x6f, 0x70, 0x20, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x28, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, - 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x6f, 0x61, 0x64, - 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, - 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x22, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, - 0x74, 0x69, 0x63, 0x22, 0x3a, 0x20, 0x22, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x5f, 0x6f, 0x6e, - 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x22, 0x0a, 0x20, - 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x4f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, - 0x20, 0x70, 0x65, 0x72, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x0a, 0x60, 0x60, 0x60, - 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, - 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, - 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x31, 0x22, 0x7d, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x32, - 0x22, 0x7d, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x31, 0x22, 0x7d, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x0a, 0x7d, - 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x0b, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb1, 0x0a, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xda, 0x09, 0x92, - 0x41, 0xa0, 0x09, 0x12, 0x3c, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x5d, 0x20, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x1a, 0xd0, 0x08, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, - 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x73, - 0x77, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x22, 0x57, 0x68, 0x6f, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3f, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x57, 0x68, 0x6f, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3f, 0x22, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x0a, - 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, 0x23, 0x23, - 0x20, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, - 0x77, 0x68, 0x6f, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x20, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x6f, 0x61, 0x64, - 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, - 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, - 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, - 0x62, 0x6f, 0x62, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x63, 0x68, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x22, 0x7d, 0x0a, 0x20, 0x20, 0x5d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x33, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, - 0x23, 0x23, 0x20, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x0a, 0x60, - 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x22, 0x3a, 0x20, 0x31, 0x30, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, - 0x23, 0x23, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x60, - 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x65, 0x79, 0x4a, 0x73, 0x59, 0x58, 0x4e, 0x30, 0x58, 0x32, - 0x6c, 0x6b, 0x49, 0x6a, 0x6f, 0x69, 0x4d, 0x54, 0x41, 0x77, 0x49, 0x6e, 0x30, 0x3d, 0x22, 0x2c, - 0x20, 0x22, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3a, 0x20, 0x31, 0x30, 0x7d, 0x0a, 0x7d, 0x0a, - 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x0d, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x2f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x84, 0x0b, 0x0a, 0x0e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xaa, 0x0a, 0x92, 0x41, 0xef, 0x09, 0x12, 0x3b, 0x5b, 0x45, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, 0x20, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, - 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x1a, 0x9f, 0x09, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x63, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, - 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x73, - 0x77, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x22, 0x57, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x41, 0x6e, 0x6e, 0x65, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x3f, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x57, 0x68, 0x61, 0x74, 0x20, 0x66, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x42, 0x6f, 0x62, 0x20, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x3f, 0x22, 0x0a, 0x0a, 0x54, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x73, - 0x65, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, - 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, - 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x6f, - 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x2d, - 0x32, 0x30, 0x32, 0x34, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, - 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x65, 0x61, 0x6d, 0x2d, 0x72, 0x6f, 0x73, - 0x74, 0x65, 0x72, 0x22, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, - 0x67, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x33, - 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x60, - 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x62, 0x6f, - 0x62, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x67, - 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3a, 0x20, 0x32, 0x35, - 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x41, 0x42, 0x41, 0x43, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, - 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x34, 0x2d, 0x30, 0x31, 0x2d, 0x31, 0x35, - 0x54, 0x31, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3a, 0x20, 0x22, - 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x31, 0x30, 0x30, 0x22, 0x0a, 0x20, - 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, - 0x01, 0x2a, 0x22, 0x2c, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x86, 0x0a, 0x0a, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb2, 0x09, 0x92, 0x41, 0xf9, 0x08, 0x12, 0x45, 0x5b, 0x45, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, 0x20, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x65, 0x72, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0xa1, 0x08, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x5d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x65, 0x72, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, - 0x6e, 0x73, 0x77, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x22, 0x57, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x41, 0x6e, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3f, 0x22, 0x20, 0x6f, - 0x72, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, - 0x69, 0x63, 0x20, 0x55, 0x49, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x77, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, - 0x23, 0x23, 0x20, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, - 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, - 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x7d, 0x0a, - 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3a, 0x0a, - 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x22, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x63, 0x61, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x63, 0x61, 0x6e, 0x5f, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x22, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, - 0x70, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, - 0x20, 0x33, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x41, 0x42, 0x41, 0x43, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2d, - 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x62, 0x6f, 0x62, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, - 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x6c, 0x79, 0x2d, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, - 0x69, 0x61, 0x6c, 0x73, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x34, - 0x2d, 0x30, 0x31, 0x2d, 0x31, 0x35, 0x54, 0x31, 0x34, 0x3a, 0x33, 0x30, 0x3a, 0x30, 0x30, 0x5a, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, - 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x66, 0x69, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, - 0x23, 0x20, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, - 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, - 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, - 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x7d, - 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x22, 0x2c, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x61, 0x67, 0x65, 0x22, - 0x3a, 0x20, 0x7b, 0x22, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3a, 0x20, 0x35, 0x30, 0x7d, 0x0a, - 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x0c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xca, 0x0a, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x09, 0x92, 0x41, 0xb1, 0x09, - 0x12, 0x3d, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, - 0x20, 0x47, 0x65, 0x74, 0x20, 0x41, 0x75, 0x74, 0x68, 0x5a, 0x45, 0x4e, 0x20, 0x50, 0x44, 0x50, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, - 0xdd, 0x08, 0x5b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5d, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x20, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x28, 0x50, 0x44, 0x50, 0x29, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, - 0x75, 0x74, 0x68, 0x5a, 0x45, 0x4e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x44, 0x50, 0x20, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x5a, 0x45, 0x4e, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x27, 0x73, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x2c, 0x20, 0x4f, 0x70, 0x65, 0x6e, - 0x46, 0x47, 0x41, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x20, 0x70, - 0x65, 0x72, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x20, 0x60, - 0x2f, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x7a, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x60, 0x2e, 0x20, - 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x55, - 0x52, 0x4c, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, 0x33, 0x4e, 0x44, 0x45, 0x4b, 0x54, 0x53, 0x56, 0x34, - 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, 0x47, 0x35, 0x46, 0x41, 0x56, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x22, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, - 0x33, 0x4e, 0x44, 0x45, 0x4b, 0x54, 0x53, 0x56, 0x34, 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, - 0x47, 0x35, 0x46, 0x41, 0x56, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, 0x33, - 0x4e, 0x44, 0x45, 0x4b, 0x54, 0x53, 0x56, 0x34, 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, 0x47, - 0x35, 0x46, 0x41, 0x56, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, 0x33, 0x4e, 0x44, 0x45, 0x4b, - 0x54, 0x53, 0x56, 0x34, 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, 0x47, 0x35, 0x46, 0x41, 0x56, - 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x2f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, 0x33, 0x4e, 0x44, 0x45, 0x4b, - 0x54, 0x53, 0x56, 0x34, 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, 0x47, 0x35, 0x46, 0x41, 0x56, - 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x30, 0x31, 0x41, 0x52, 0x5a, 0x33, 0x4e, 0x44, 0x45, 0x4b, 0x54, - 0x53, 0x56, 0x34, 0x52, 0x52, 0x46, 0x46, 0x51, 0x36, 0x39, 0x47, 0x35, 0x46, 0x41, 0x56, 0x2f, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, - 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x2e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x42, 0xa1, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x41, 0x75, 0x74, 0x68, 0x7a, - 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x65, - 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x41, 0x75, 0x74, 0x68, - 0x7a, 0x65, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, - 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x41, - 0x75, 0x74, 0x68, 0x7a, 0x65, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_authzen_v1_authzen_service_proto_rawDesc = "" + + "\n" + + " authzen/v1/authzen_service.proto\x12\n" + + "authzen.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"\xf5\x02\n" + + "\x11EvaluationRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12:\n" + + "\asubject\x18\x02 \x01(\v2\x13.authzen.v1.SubjectB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\asubject\x12=\n" + + "\bresource\x18\x03 \x01(\v2\x14.authzen.v1.ResourceB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bresource\x127\n" + + "\x06action\x18\x04 \x01(\v2\x12.authzen.v1.ActionB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x06action\x126\n" + + "\acontext\x18\x05 \x01(\v2\x17.google.protobuf.StructH\x00R\acontext\x88\x01\x01B\n" + + "\n" + + "\b_context\"\x9c\x02\n" + + "\x16EvaluationsItemRequest\x122\n" + + "\asubject\x18\x01 \x01(\v2\x13.authzen.v1.SubjectH\x00R\asubject\x88\x01\x01\x125\n" + + "\bresource\x18\x02 \x01(\v2\x14.authzen.v1.ResourceH\x01R\bresource\x88\x01\x01\x12/\n" + + "\x06action\x18\x03 \x01(\v2\x12.authzen.v1.ActionH\x02R\x06action\x88\x01\x01\x126\n" + + "\acontext\x18\x04 \x01(\v2\x17.google.protobuf.StructH\x03R\acontext\x88\x01\x01B\n" + + "\n" + + "\b_subjectB\v\n" + + "\t_resourceB\t\n" + + "\a_actionB\n" + + "\n" + + "\b_context\"\xcf\x01\n" + + "\aSubject\x12<\n" + + "\x04type\x18\x01 \x01(\tB(\x92A\bJ\x06\"user\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04type\x129\n" + + "\x02id\x18\x02 \x01(\tB)\x92A\bJ\x06\"anne\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,500}$\xd0\x01\x00R\x02id\x12<\n" + + "\n" + + "properties\x18\x03 \x01(\v2\x17.google.protobuf.StructH\x00R\n" + + "properties\x88\x01\x01B\r\n" + + "\v_properties\"\xb6\x01\n" + + "\rSubjectFilter\x12<\n" + + "\x04type\x18\x01 \x01(\tB(\x92A\bJ\x06\"user\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04type\x12\x13\n" + + "\x02id\x18\x02 \x01(\tH\x00R\x02id\x88\x01\x01\x12<\n" + + "\n" + + "properties\x18\x03 \x01(\v2\x17.google.protobuf.StructH\x01R\n" + + "properties\x88\x01\x01B\x05\n" + + "\x03_idB\r\n" + + "\v_properties\"\xd7\x01\n" + + "\bResource\x12@\n" + + "\x04type\x18\x01 \x01(\tB,\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04type\x12<\n" + + "\x02id\x18\x02 \x01(\tB,\x92A\vJ\t\"roadmap\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,256}$\xd0\x01\x00R\x02id\x12<\n" + + "\n" + + "properties\x18\x03 \x01(\v2\x17.google.protobuf.StructH\x00R\n" + + "properties\x88\x01\x01B\r\n" + + "\v_properties\"\xbb\x01\n" + + "\x0eResourceFilter\x12@\n" + + "\x04type\x18\x01 \x01(\tB,\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04type\x12\x13\n" + + "\x02id\x18\x02 \x01(\tH\x00R\x02id\x88\x01\x01\x12<\n" + + "\n" + + "properties\x18\x03 \x01(\v2\x17.google.protobuf.StructH\x01R\n" + + "properties\x88\x01\x01B\x05\n" + + "\x03_idB\r\n" + + "\v_properties\"\x97\x01\n" + + "\x06Action\x12@\n" + + "\x04name\x18\x01 \x01(\tB,\x92A\fJ\n" + + "\"can_read\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04name\x12<\n" + + "\n" + + "properties\x18\x02 \x01(\v2\x17.google.protobuf.StructH\x00R\n" + + "properties\x88\x01\x01B\r\n" + + "\v_properties\"t\n" + + "\x12EvaluationResponse\x12\x1a\n" + + "\bdecision\x18\x01 \x01(\bR\bdecision\x126\n" + + "\acontext\x18\x02 \x01(\v2\x17.google.protobuf.StructH\x00R\acontext\x88\x01\x01B\n" + + "\n" + + "\b_context\"\x82\x04\n" + + "\x12EvaluationsRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x122\n" + + "\asubject\x18\x02 \x01(\v2\x13.authzen.v1.SubjectH\x00R\asubject\x88\x01\x01\x12/\n" + + "\x06action\x18\x03 \x01(\v2\x12.authzen.v1.ActionH\x01R\x06action\x88\x01\x01\x125\n" + + "\bresource\x18\x04 \x01(\v2\x14.authzen.v1.ResourceH\x02R\bresource\x88\x01\x01\x126\n" + + "\acontext\x18\x05 \x01(\v2\x17.google.protobuf.StructH\x03R\acontext\x88\x01\x01\x12D\n" + + "\vevaluations\x18\x06 \x03(\v2\".authzen.v1.EvaluationsItemRequestR\vevaluations\x128\n" + + "\aoptions\x18\a \x01(\v2\x1e.authzen.v1.EvaluationsOptionsR\aoptionsB\n" + + "\n" + + "\b_subjectB\t\n" + + "\a_actionB\v\n" + + "\t_resourceB\n" + + "\n" + + "\b_context\"W\n" + + "\x13EvaluationsResponse\x12@\n" + + "\vevaluations\x18\x01 \x03(\v2\x1e.authzen.v1.EvaluationResponseR\vevaluations\"s\n" + + "\x12EvaluationsOptions\x12]\n" + + "\x14evaluations_semantic\x18\x01 \x01(\x0e2\x1f.authzen.v1.EvaluationsSemanticB\b\xfaB\x05\x82\x01\x02\x10\x01R\x14evaluations_semantic\"a\n" + + "\vPageRequest\x12\x19\n" + + "\x05token\x18\x01 \x01(\tH\x00R\x05token\x88\x01\x01\x12#\n" + + "\x05limit\x18\x02 \x01(\rB\b\xfaB\x05*\x03\x18\xe8\aH\x01R\x05limit\x88\x01\x01B\b\n" + + "\x06_tokenB\b\n" + + "\x06_limit\"i\n" + + "\fPageResponse\x12\x1e\n" + + "\n" + + "next_token\x18\x01 \x01(\tR\n" + + "next_token\x12\x14\n" + + "\x05count\x18\x02 \x01(\rR\x05count\x12\x19\n" + + "\x05total\x18\x03 \x01(\rH\x00R\x05total\x88\x01\x01B\b\n" + + "\x06_total\"\x8a\x03\n" + + "\x14SubjectSearchRequest\x12G\n" + + "\bstore_id\x18\x01 \x01(\tB+\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12=\n" + + "\bresource\x18\x02 \x01(\v2\x14.authzen.v1.ResourceB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bresource\x127\n" + + "\x06action\x18\x03 \x01(\v2\x12.authzen.v1.ActionB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x06action\x12@\n" + + "\asubject\x18\x04 \x01(\v2\x19.authzen.v1.SubjectFilterB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\asubject\x126\n" + + "\acontext\x18\x05 \x01(\v2\x17.google.protobuf.StructH\x00R\acontext\x88\x01\x01\x12+\n" + + "\x04page\x18\x06 \x01(\v2\x17.authzen.v1.PageRequestR\x04pageB\n" + + "\n" + + "\b_context\"\x82\x01\n" + + "\x15SubjectSearchResponse\x12-\n" + + "\aresults\x18\x01 \x03(\v2\x13.authzen.v1.SubjectR\aresults\x121\n" + + "\x04page\x18\x02 \x01(\v2\x18.authzen.v1.PageResponseH\x00R\x04page\x88\x01\x01B\a\n" + + "\x05_page\"\x8b\x03\n" + + "\x15ResourceSearchRequest\x12G\n" + + "\bstore_id\x18\x01 \x01(\tB+\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12:\n" + + "\asubject\x18\x02 \x01(\v2\x13.authzen.v1.SubjectB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\asubject\x127\n" + + "\x06action\x18\x03 \x01(\v2\x12.authzen.v1.ActionB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x06action\x12C\n" + + "\bresource\x18\x04 \x01(\v2\x1a.authzen.v1.ResourceFilterB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bresource\x126\n" + + "\acontext\x18\x05 \x01(\v2\x17.google.protobuf.StructH\x00R\acontext\x88\x01\x01\x12+\n" + + "\x04page\x18\x06 \x01(\v2\x17.authzen.v1.PageRequestR\x04pageB\n" + + "\n" + + "\b_context\"\x84\x01\n" + + "\x16ResourceSearchResponse\x12.\n" + + "\aresults\x18\x01 \x03(\v2\x14.authzen.v1.ResourceR\aresults\x121\n" + + "\x04page\x18\x02 \x01(\v2\x18.authzen.v1.PageResponseH\x00R\x04page\x88\x01\x01B\a\n" + + "\x05_page\"\xca\x02\n" + + "\x13ActionSearchRequest\x12G\n" + + "\bstore_id\x18\x01 \x01(\tB+\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12:\n" + + "\asubject\x18\x02 \x01(\v2\x13.authzen.v1.SubjectB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\asubject\x12=\n" + + "\bresource\x18\x03 \x01(\v2\x14.authzen.v1.ResourceB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bresource\x126\n" + + "\acontext\x18\x04 \x01(\v2\x17.google.protobuf.StructH\x00R\acontext\x88\x01\x01\x12+\n" + + "\x04page\x18\x05 \x01(\v2\x17.authzen.v1.PageRequestR\x04pageB\n" + + "\n" + + "\b_context\"\x80\x01\n" + + "\x14ActionSearchResponse\x12,\n" + + "\aresults\x18\x01 \x03(\v2\x12.authzen.v1.ActionR\aresults\x121\n" + + "\x04page\x18\x02 \x01(\v2\x18.authzen.v1.PageResponseH\x00R\x04page\x88\x01\x01B\a\n" + + "\x05_page\"\x83\x01\n" + + "\x17GetConfigurationRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\"\x8f\x04\n" + + "\x18GetConfigurationResponse\x129\n" + + "\x15policy_decision_point\x18\x01 \x01(\tB\x03\xe0A\x02R\x15policy_decision_point\x12C\n" + + "\x1aaccess_evaluation_endpoint\x18\x02 \x01(\tB\x03\xe0A\x02R\x1aaccess_evaluation_endpoint\x12E\n" + + "\x1baccess_evaluations_endpoint\x18\x03 \x01(\tB\x03\xe0A\x01R\x1baccess_evaluations_endpoint\x12=\n" + + "\x17search_subject_endpoint\x18\x04 \x01(\tB\x03\xe0A\x01R\x17search_subject_endpoint\x12?\n" + + "\x18search_resource_endpoint\x18\x05 \x01(\tB\x03\xe0A\x01R\x18search_resource_endpoint\x12;\n" + + "\x16search_action_endpoint\x18\x06 \x01(\tB\x03\xe0A\x01R\x16search_action_endpoint\x12'\n" + + "\fcapabilities\x18\a \x03(\tB\x03\xe0A\x01R\fcapabilities\x122\n" + + "\x0fsigned_metadata\x18\b \x01(\tB\x03\xe0A\x01H\x00R\x0fsigned_metadata\x88\x01\x01B\x12\n" + + "\x10_signed_metadata*Z\n" + + "\x13EvaluationsSemantic\x12\x0f\n" + + "\vexecute_all\x10\x00\x12\x16\n" + + "\x12deny_on_first_deny\x10\x01\x12\x1a\n" + + "\x16permit_on_first_permit\x10\x022\x99R\n" + + "\x0eAuthZenService\x12\xab\x16\n" + + "\n" + + "Evaluation\x12\x1d.authzen.v1.EvaluationRequest\x1a\x1e.authzen.v1.EvaluationResponse\"\xdd\x15\x92A\xa7\x15\x12M[Experimental] Evaluate whether a subject can perform an action on a resource\x1a\xc9\x14[Experimental] The Evaluation API determines whether a subject is authorized to perform an action on a resource. This endpoint implements the AuthZEN Access Evaluation API specification.\n" + + "\n" + + "## Request Structure\n" + + "The request requires three components:\n" + + "- **subject**: The entity requesting access (e.g., a user or service)\n" + + "- **action**: The operation being performed (maps to a relation in the authorization model)\n" + + "- **resource**: The object being accessed\n" + + "\n" + + "Each component has a `type` and `id` field, and may include optional `properties` for ABAC (Attribute-Based Access Control) conditions.\n" + + "\n" + + "## Response\n" + + "The response contains a `decision` field (boolean) indicating whether access is permitted, and an optional `context` object with additional information such as the evaluation ID or error details.\n" + + "\n" + + "## ABAC Support\n" + + "Properties on subject, action, and resource are automatically merged into the evaluation context with prefixes:\n" + + "- Subject properties: `subject_`\n" + + "- Resource properties: `resource_`\n" + + "- Action properties: `action_`\n" + + "\n" + + "These merged properties can be used in conditions defined in your authorization model.\n" + + "\n" + + "## Examples\n" + + "### Basic authorization check\n" + + "Check if user Anne can read a document:\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"roadmap\"}\n" + + "}\n" + + "```\n" + + "Response when authorized:\n" + + "```json\n" + + "{\n" + + " \"decision\": true\n" + + "}\n" + + "```\n" + + "### Using properties for ABAC\n" + + "Check access with subject and resource attributes:\n" + + "```json\n" + + "{\n" + + " \"subject\": {\n" + + " \"type\": \"user\",\n" + + " \"id\": \"anne\",\n" + + " \"properties\": {\"department\": \"engineering\", \"clearance_level\": 3}\n" + + " },\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"resource\": {\n" + + " \"type\": \"document\",\n" + + " \"id\": \"secret-project\",\n" + + " \"properties\": {\"classification\": \"confidential\", \"required_clearance\": 2}\n" + + " }\n" + + "}\n" + + "```\n" + + "### Using request context\n" + + "Provide additional context for time-based or environmental conditions:\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"bob\"},\n" + + " \"action\": {\"name\": \"can_access\"},\n" + + " \"resource\": {\"type\": \"system\", \"id\": \"production\"},\n" + + " \"context\": {\n" + + " \"current_time\": \"2024-01-15T14:30:00Z\",\n" + + " \"ip_address\": \"192.168.1.100\",\n" + + " \"is_vpn_connected\": true\n" + + " }\n" + + "}\n" + + "```\n" + + "### Specifying authorization model\n" + + "Pin the evaluation to a specific authorization model version using the `Openfga-Authorization-Model-Id` header:\n" + + "```\n" + + "POST /stores/{store_id}/access/v1/evaluation\n" + + "Openfga-Authorization-Model-Id: 01G50QVV17PECNVAHX1GG4Y5NC\n" + + "\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"action\": {\"name\": \"can_write\"},\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"budget-2024\"}\n" + + "}\n" + + "```\n" + + "*\n" + + "Evaluation\x82\xd3\xe4\x93\x02,:\x01*\"'/stores/{store_id}/access/v1/evaluation\x12\xc7\x11\n" + + "\vEvaluations\x12\x1e.authzen.v1.EvaluationsRequest\x1a\x1f.authzen.v1.EvaluationsResponse\"\xf6\x10\x92A\xbf\x10\x12Q[Experimental] Check whether one or more users are authorized to access resources\x1a\xdc\x0f[Experimental] The Evaluations API allows batch authorization checks in a single request. It supports request-level defaults for subject, action, resource, and context that can be overridden per evaluation item.\n" + + "\n" + + "## Evaluation Semantics\n" + + "The `options.evaluations_semantic` field controls how evaluations are processed:\n" + + "- `execute_all` (default): Execute all evaluations and return all results\n" + + "- `deny_on_first_deny`: Stop processing on first deny decision\n" + + "- `permit_on_first_permit`: Stop processing on first permit decision\n" + + "\n" + + "When using `deny_on_first_deny` or `permit_on_first_permit`, the response may include fewer items than the request because processing short-circuits when the condition is met.\n" + + "\n" + + "## Authorization Model Selection\n" + + "To pin evaluations to a specific authorization model version, send the `Openfga-Authorization-Model-Id` header. If the header is not provided, the latest model is used.\n" + + "\n" + + "## Examples\n" + + "### Basic batch evaluation\n" + + "Check if a user can perform multiple actions on a document:\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"roadmap\"},\n" + + " \"evaluations\": [\n" + + " {\"action\": {\"name\": \"can_read\"}},\n" + + " {\"action\": {\"name\": \"can_write\"}},\n" + + " {\"action\": {\"name\": \"can_delete\"}}\n" + + " ]\n" + + "}\n" + + "```\n" + + "### Using evaluation semantics\n" + + "Stop on first permitted action (useful for finding any valid permission):\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"roadmap\"},\n" + + " \"evaluations\": [\n" + + " {\"action\": {\"name\": \"can_read\"}},\n" + + " {\"action\": {\"name\": \"can_write\"}}\n" + + " ],\n" + + " \"options\": {\n" + + " \"evaluations_semantic\": \"permit_on_first_permit\"\n" + + " }\n" + + "}\n" + + "```\n" + + "### Overriding defaults per evaluation\n" + + "Check permissions across multiple resources:\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"evaluations\": [\n" + + " {\"resource\": {\"type\": \"document\", \"id\": \"doc1\"}},\n" + + " {\"resource\": {\"type\": \"document\", \"id\": \"doc2\"}},\n" + + " {\"resource\": {\"type\": \"folder\", \"id\": \"folder1\"}}\n" + + " ]\n" + + "}\n" + + "```\n" + + "*\vEvaluations\x82\xd3\xe4\x93\x02-:\x01*\"(/stores/{store_id}/access/v1/evaluations\x12\xb1\n" + + "\n" + + "\rSubjectSearch\x12 .authzen.v1.SubjectSearchRequest\x1a!.authzen.v1.SubjectSearchResponse\"\xda\t\x92A\xa0\t\x12<[Experimental] Search for subjects with access to a resource\x1a\xd0\b[Experimental] The SubjectSearch API returns all subjects that have a specific action (relation) on a given resource. This is useful for answering questions like \"Who can read this document?\" or \"Who can administer this folder?\"\n" + + "\n" + + "Results can be filtered by subject type and support pagination for large result sets.\n" + + "\n" + + "## Examples\n" + + "### Find all users who can read a document\n" + + "```json\n" + + "{\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"roadmap\"},\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"subject\": {\"type\": \"user\"}\n" + + "}\n" + + "```\n" + + "Response:\n" + + "```json\n" + + "{\n" + + " \"results\": [\n" + + " {\"type\": \"user\", \"id\": \"anne\"},\n" + + " {\"type\": \"user\", \"id\": \"bob\"},\n" + + " {\"type\": \"user\", \"id\": \"charlie\"}\n" + + " ],\n" + + " \"page\": {\"count\": 3}\n" + + "}\n" + + "```\n" + + "### Paginated search with limit\n" + + "```json\n" + + "{\n" + + " \"resource\": {\"type\": \"folder\", \"id\": \"engineering\"},\n" + + " \"action\": {\"name\": \"can_view\"},\n" + + " \"subject\": {\"type\": \"user\"},\n" + + " \"page\": {\"limit\": 10}\n" + + "}\n" + + "```\n" + + "### Continue from previous page\n" + + "```json\n" + + "{\n" + + " \"resource\": {\"type\": \"folder\", \"id\": \"engineering\"},\n" + + " \"action\": {\"name\": \"can_view\"},\n" + + " \"subject\": {\"type\": \"user\"},\n" + + " \"page\": {\"token\": \"eyJsYXN0X2lkIjoiMTAwIn0=\", \"limit\": 10}\n" + + "}\n" + + "```\n" + + "*\rSubjectSearch\x82\xd3\xe4\x93\x020:\x01*\"+/stores/{store_id}/access/v1/search/subject\x12\x84\v\n" + + "\x0eResourceSearch\x12!.authzen.v1.ResourceSearchRequest\x1a\".authzen.v1.ResourceSearchResponse\"\xaa\n" + + "\x92A\xef\t\x12;[Experimental] Search for resources a subject has access to\x1a\x9f\t[Experimental] The ResourceSearch API returns all resources of a given type that a subject has a specific action (relation) on. This is useful for answering questions like \"What documents can Anne read?\" or \"What folders can Bob administer?\"\n" + + "\n" + + "The resource type filter is required. Results support pagination for large result sets.\n" + + "\n" + + "## Examples\n" + + "### Find all documents a user can read\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"resource\": {\"type\": \"document\"}\n" + + "}\n" + + "```\n" + + "Response:\n" + + "```json\n" + + "{\n" + + " \"results\": [\n" + + " {\"type\": \"document\", \"id\": \"roadmap\"},\n" + + " {\"type\": \"document\", \"id\": \"budget-2024\"},\n" + + " {\"type\": \"document\", \"id\": \"team-roster\"}\n" + + " ],\n" + + " \"page\": {\"count\": 3}\n" + + "}\n" + + "```\n" + + "### Find folders a user can administer with pagination\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"bob\"},\n" + + " \"action\": {\"name\": \"can_admin\"},\n" + + " \"resource\": {\"type\": \"folder\"},\n" + + " \"page\": {\"limit\": 25}\n" + + "}\n" + + "```\n" + + "### Search with ABAC context\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"action\": {\"name\": \"can_read\"},\n" + + " \"resource\": {\"type\": \"document\"},\n" + + " \"context\": {\n" + + " \"current_time\": \"2024-01-15T10:00:00Z\",\n" + + " \"ip_address\": \"192.168.1.100\"\n" + + " }\n" + + "}\n" + + "```\n" + + "*\x0eResourceSearch\x82\xd3\xe4\x93\x021:\x01*\",/stores/{store_id}/access/v1/search/resource\x12\x86\n" + + "\n" + + "\fActionSearch\x12\x1f.authzen.v1.ActionSearchRequest\x1a .authzen.v1.ActionSearchResponse\"\xb2\t\x92A\xf9\b\x12E[Experimental] Search for actions a subject can perform on a resource\x1a\xa1\b[Experimental] The ActionSearch API returns all actions (relations) that a subject can perform on a specific resource. This is useful for answering questions like \"What can Anne do with this document?\" or building dynamic UIs that show only the actions a user is permitted to perform.\n" + + "\n" + + "## Examples\n" + + "### Find all actions a user can perform on a document\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"anne\"},\n" + + " \"resource\": {\"type\": \"document\", \"id\": \"roadmap\"}\n" + + "}\n" + + "```\n" + + "Response:\n" + + "```json\n" + + "{\n" + + " \"results\": [\n" + + " {\"name\": \"can_read\"},\n" + + " {\"name\": \"can_write\"},\n" + + " {\"name\": \"can_share\"}\n" + + " ],\n" + + " \"page\": {\"count\": 3}\n" + + "}\n" + + "```\n" + + "### Search with ABAC context for time-based permissions\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"bob\"},\n" + + " \"resource\": {\"type\": \"report\", \"id\": \"quarterly-financials\"},\n" + + " \"context\": {\n" + + " \"current_time\": \"2024-01-15T14:30:00Z\",\n" + + " \"user_department\": \"finance\"\n" + + " }\n" + + "}\n" + + "```\n" + + "### Paginated action search\n" + + "```json\n" + + "{\n" + + " \"subject\": {\"type\": \"user\", \"id\": \"admin\"},\n" + + " \"resource\": {\"type\": \"system\", \"id\": \"production\"},\n" + + " \"page\": {\"limit\": 50}\n" + + "}\n" + + "```\n" + + "*\fActionSearch\x82\xd3\xe4\x93\x02/:\x01*\"*/stores/{store_id}/access/v1/search/action\x12\xca\n" + + "\n" + + "\x10GetConfiguration\x12#.authzen.v1.GetConfigurationRequest\x1a$.authzen.v1.GetConfigurationResponse\"\xea\t\x92A\xb1\t\x12=[Experimental] Get AuthZEN PDP configuration and capabilities\x1a\xdd\b[Experimental] The GetConfiguration API returns metadata about the Policy Decision Point (PDP) including its name, version, supported endpoints, and capabilities. This endpoint follows the AuthZEN specification for PDP discovery.\n" + + "\n" + + "Following the AuthZEN spec's multi-tenant pattern, OpenFGA provides a per-store discovery endpoint at `/.well-known/authzen-configuration/{store_id}`. This returns absolute endpoint URLs specific to that store.\n" + + "\n" + + "## Example Response\n" + + "```json\n" + + "{\n" + + " \"policy_decision_point\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV\",\n" + + " \"access_evaluation_endpoint\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV/access/v1/evaluation\",\n" + + " \"access_evaluations_endpoint\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV/access/v1/evaluations\",\n" + + " \"search_subject_endpoint\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV/access/v1/search/subject\",\n" + + " \"search_resource_endpoint\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV/access/v1/search/resource\",\n" + + " \"search_action_endpoint\": \"https://example.com/stores/01ARZ3NDEKTSV4RRFFQ69G5FAV/access/v1/search/action\"\n" + + "}\n" + + "```\n" + + "*\x10GetConfiguration\x82\xd3\xe4\x93\x02/\x12-/.well-known/authzen-configuration/{store_id}B\xa1\x01\n" + + "\x0ecom.authzen.v1B\x13AuthzenServiceProtoP\x01Z1github.com/openfga/api/proto/authzen/v1;authzenv1\xa2\x02\x03AXX\xaa\x02\n" + + "Authzen.V1\xca\x02\n" + + "Authzen\\V1\xe2\x02\x16Authzen\\V1\\GPBMetadata\xea\x02\vAuthzen::V1b\x06proto3" var ( file_authzen_v1_authzen_service_proto_rawDescOnce sync.Once - file_authzen_v1_authzen_service_proto_rawDescData = file_authzen_v1_authzen_service_proto_rawDesc + file_authzen_v1_authzen_service_proto_rawDescData []byte ) func file_authzen_v1_authzen_service_proto_rawDescGZIP() []byte { file_authzen_v1_authzen_service_proto_rawDescOnce.Do(func() { - file_authzen_v1_authzen_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_authzen_v1_authzen_service_proto_rawDescData) + file_authzen_v1_authzen_service_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_authzen_v1_authzen_service_proto_rawDesc), len(file_authzen_v1_authzen_service_proto_rawDesc))) }) return file_authzen_v1_authzen_service_proto_rawDescData } var file_authzen_v1_authzen_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_authzen_v1_authzen_service_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_authzen_v1_authzen_service_proto_goTypes = []interface{}{ +var file_authzen_v1_authzen_service_proto_goTypes = []any{ (EvaluationsSemantic)(0), // 0: authzen.v1.EvaluationsSemantic (*EvaluationRequest)(nil), // 1: authzen.v1.EvaluationRequest (*EvaluationsItemRequest)(nil), // 2: authzen.v1.EvaluationsItemRequest @@ -2602,283 +1990,29 @@ func file_authzen_v1_authzen_service_proto_init() { if File_authzen_v1_authzen_service_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_authzen_v1_authzen_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationsItemRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Action); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EvaluationsOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectSearchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectSearchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceSearchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceSearchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionSearchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionSearchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConfigurationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authzen_v1_authzen_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConfigurationResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_authzen_v1_authzen_service_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[7].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[11].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[13].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[14].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[15].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[17].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[18].OneofWrappers = []interface{}{} - file_authzen_v1_authzen_service_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_authzen_v1_authzen_service_proto_msgTypes[0].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[1].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[2].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[3].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[4].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[5].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[6].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[7].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[8].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[11].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[12].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[13].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[14].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[15].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[16].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[17].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[18].OneofWrappers = []any{} + file_authzen_v1_authzen_service_proto_msgTypes[20].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_authzen_v1_authzen_service_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_authzen_v1_authzen_service_proto_rawDesc), len(file_authzen_v1_authzen_service_proto_rawDesc)), NumEnums: 1, NumMessages: 21, NumExtensions: 0, @@ -2890,7 +2024,6 @@ func file_authzen_v1_authzen_service_proto_init() { MessageInfos: file_authzen_v1_authzen_service_proto_msgTypes, }.Build() File_authzen_v1_authzen_service_proto = out.File - file_authzen_v1_authzen_service_proto_rawDesc = nil file_authzen_v1_authzen_service_proto_goTypes = nil file_authzen_v1_authzen_service_proto_depIdxs = nil } diff --git a/proto/authzen/v1/authzen_service.pb.gw.go b/proto/authzen/v1/authzen_service.pb.gw.go index c28d3a0e..3c26c98d 100644 --- a/proto/authzen/v1/authzen_service.pb.gw.go +++ b/proto/authzen/v1/authzen_service.pb.gw.go @@ -10,6 +10,7 @@ package authzenv1 import ( "context" + "errors" "io" "net/http" @@ -24,380 +25,293 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_AuthZenService_Evaluation_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq EvaluationRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq EvaluationRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Evaluation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_Evaluation_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq EvaluationRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq EvaluationRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Evaluation(ctx, &protoReq) return msg, metadata, err - } func request_AuthZenService_Evaluations_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq EvaluationsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq EvaluationsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Evaluations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_Evaluations_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq EvaluationsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq EvaluationsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Evaluations(ctx, &protoReq) return msg, metadata, err - } func request_AuthZenService_SubjectSearch_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SubjectSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq SubjectSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.SubjectSearch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_SubjectSearch_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SubjectSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq SubjectSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.SubjectSearch(ctx, &protoReq) return msg, metadata, err - } func request_AuthZenService_ResourceSearch_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ResourceSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ResourceSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.ResourceSearch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_ResourceSearch_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ResourceSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ResourceSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.ResourceSearch(ctx, &protoReq) return msg, metadata, err - } func request_AuthZenService_ActionSearch_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ActionSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ActionSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.ActionSearch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_ActionSearch_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ActionSearchRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ActionSearchRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.ActionSearch(ctx, &protoReq) return msg, metadata, err - } func request_AuthZenService_GetConfiguration_0(ctx context.Context, marshaler runtime.Marshaler, client AuthZenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetConfigurationRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetConfigurationRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.GetConfiguration(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_AuthZenService_GetConfiguration_0(ctx context.Context, marshaler runtime.Marshaler, server AuthZenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetConfigurationRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetConfigurationRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.GetConfiguration(ctx, &protoReq) return msg, metadata, err - } // RegisterAuthZenServiceHandlerServer registers the http handlers for service AuthZenService to "mux". // UnaryRPC :call AuthZenServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthZenServiceHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthZenServiceServer) error { - - mux.Handle("POST", pattern_AuthZenService_Evaluation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_Evaluation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluation", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluation")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluation", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluation")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -409,20 +323,15 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_Evaluation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_Evaluations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_Evaluations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluations", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluations")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluations", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -434,20 +343,15 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_Evaluations_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_SubjectSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_SubjectSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/SubjectSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/subject")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/SubjectSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/subject")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -459,20 +363,15 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_SubjectSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_ResourceSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_ResourceSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/ResourceSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/resource")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/ResourceSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/resource")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -484,20 +383,15 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_ResourceSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_ActionSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_ActionSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/ActionSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/action")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/ActionSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/action")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -509,20 +403,15 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_ActionSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_AuthZenService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_AuthZenService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/GetConfiguration", runtime.WithHTTPPathPattern("/.well-known/authzen-configuration/{store_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/authzen.v1.AuthZenService/GetConfiguration", runtime.WithHTTPPathPattern("/.well-known/authzen-configuration/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -534,9 +423,7 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_GetConfiguration_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -545,25 +432,24 @@ func RegisterAuthZenServiceHandlerServer(ctx context.Context, mux *runtime.Serve // RegisterAuthZenServiceHandlerFromEndpoint is same as RegisterAuthZenServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterAuthZenServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.DialContext(ctx, endpoint, opts...) + conn, err := grpc.NewClient(endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) } }() }() - return RegisterAuthZenServiceHandler(ctx, mux, conn) } @@ -577,16 +463,13 @@ func RegisterAuthZenServiceHandler(ctx context.Context, mux *runtime.ServeMux, c // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthZenServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthZenServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "AuthZenServiceClient" to call the correct interceptors. +// "AuthZenServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthZenServiceClient) error { - - mux.Handle("POST", pattern_AuthZenService_Evaluation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_Evaluation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluation", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluation")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluation", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluation")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -597,18 +480,13 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_Evaluation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_Evaluations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_Evaluations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluations", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluations")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/Evaluations", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/evaluations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -619,18 +497,13 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_Evaluations_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_SubjectSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_SubjectSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/SubjectSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/subject")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/SubjectSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/subject")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -641,18 +514,13 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_SubjectSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_ResourceSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_ResourceSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/ResourceSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/resource")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/ResourceSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/resource")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -663,18 +531,13 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_ResourceSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_AuthZenService_ActionSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_AuthZenService_ActionSearch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/ActionSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/action")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/ActionSearch", runtime.WithHTTPPathPattern("/stores/{store_id}/access/v1/search/action")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -685,18 +548,13 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_ActionSearch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_AuthZenService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_AuthZenService_GetConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/GetConfiguration", runtime.WithHTTPPathPattern("/.well-known/authzen-configuration/{store_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/authzen.v1.AuthZenService/GetConfiguration", runtime.WithHTTPPathPattern("/.well-known/authzen-configuration/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -707,38 +565,25 @@ func RegisterAuthZenServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_AuthZenService_GetConfiguration_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_AuthZenService_Evaluation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4}, []string{"stores", "store_id", "access", "v1", "evaluation"}, "")) - - pattern_AuthZenService_Evaluations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4}, []string{"stores", "store_id", "access", "v1", "evaluations"}, "")) - - pattern_AuthZenService_SubjectSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "subject"}, "")) - - pattern_AuthZenService_ResourceSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "resource"}, "")) - - pattern_AuthZenService_ActionSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "action"}, "")) - + pattern_AuthZenService_Evaluation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4}, []string{"stores", "store_id", "access", "v1", "evaluation"}, "")) + pattern_AuthZenService_Evaluations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4}, []string{"stores", "store_id", "access", "v1", "evaluations"}, "")) + pattern_AuthZenService_SubjectSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "subject"}, "")) + pattern_AuthZenService_ResourceSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "resource"}, "")) + pattern_AuthZenService_ActionSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"stores", "store_id", "access", "v1", "search", "action"}, "")) pattern_AuthZenService_GetConfiguration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{".well-known", "authzen-configuration", "store_id"}, "")) ) var ( - forward_AuthZenService_Evaluation_0 = runtime.ForwardResponseMessage - - forward_AuthZenService_Evaluations_0 = runtime.ForwardResponseMessage - - forward_AuthZenService_SubjectSearch_0 = runtime.ForwardResponseMessage - - forward_AuthZenService_ResourceSearch_0 = runtime.ForwardResponseMessage - - forward_AuthZenService_ActionSearch_0 = runtime.ForwardResponseMessage - + forward_AuthZenService_Evaluation_0 = runtime.ForwardResponseMessage + forward_AuthZenService_Evaluations_0 = runtime.ForwardResponseMessage + forward_AuthZenService_SubjectSearch_0 = runtime.ForwardResponseMessage + forward_AuthZenService_ResourceSearch_0 = runtime.ForwardResponseMessage + forward_AuthZenService_ActionSearch_0 = runtime.ForwardResponseMessage forward_AuthZenService_GetConfiguration_0 = runtime.ForwardResponseMessage ) diff --git a/proto/authzen/v1/authzen_service_grpc.pb.go b/proto/authzen/v1/authzen_service_grpc.pb.go index 865c8572..7ddd7571 100644 --- a/proto/authzen/v1/authzen_service_grpc.pb.go +++ b/proto/authzen/v1/authzen_service_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.6.2 // - protoc (unknown) // source: authzen/v1/authzen_service.proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( AuthZenService_Evaluation_FullMethodName = "/authzen.v1.AuthZenService/Evaluation" @@ -52,8 +52,9 @@ func NewAuthZenServiceClient(cc grpc.ClientConnInterface) AuthZenServiceClient { } func (c *authZenServiceClient) Evaluation(ctx context.Context, in *EvaluationRequest, opts ...grpc.CallOption) (*EvaluationResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EvaluationResponse) - err := c.cc.Invoke(ctx, AuthZenService_Evaluation_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_Evaluation_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -61,8 +62,9 @@ func (c *authZenServiceClient) Evaluation(ctx context.Context, in *EvaluationReq } func (c *authZenServiceClient) Evaluations(ctx context.Context, in *EvaluationsRequest, opts ...grpc.CallOption) (*EvaluationsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EvaluationsResponse) - err := c.cc.Invoke(ctx, AuthZenService_Evaluations_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_Evaluations_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -70,8 +72,9 @@ func (c *authZenServiceClient) Evaluations(ctx context.Context, in *EvaluationsR } func (c *authZenServiceClient) SubjectSearch(ctx context.Context, in *SubjectSearchRequest, opts ...grpc.CallOption) (*SubjectSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SubjectSearchResponse) - err := c.cc.Invoke(ctx, AuthZenService_SubjectSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_SubjectSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -79,8 +82,9 @@ func (c *authZenServiceClient) SubjectSearch(ctx context.Context, in *SubjectSea } func (c *authZenServiceClient) ResourceSearch(ctx context.Context, in *ResourceSearchRequest, opts ...grpc.CallOption) (*ResourceSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResourceSearchResponse) - err := c.cc.Invoke(ctx, AuthZenService_ResourceSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_ResourceSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -88,8 +92,9 @@ func (c *authZenServiceClient) ResourceSearch(ctx context.Context, in *ResourceS } func (c *authZenServiceClient) ActionSearch(ctx context.Context, in *ActionSearchRequest, opts ...grpc.CallOption) (*ActionSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ActionSearchResponse) - err := c.cc.Invoke(ctx, AuthZenService_ActionSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_ActionSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -97,8 +102,9 @@ func (c *authZenServiceClient) ActionSearch(ctx context.Context, in *ActionSearc } func (c *authZenServiceClient) GetConfiguration(ctx context.Context, in *GetConfigurationRequest, opts ...grpc.CallOption) (*GetConfigurationResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetConfigurationResponse) - err := c.cc.Invoke(ctx, AuthZenService_GetConfiguration_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, AuthZenService_GetConfiguration_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -107,7 +113,7 @@ func (c *authZenServiceClient) GetConfiguration(ctx context.Context, in *GetConf // AuthZenServiceServer is the server API for AuthZenService service. // All implementations must embed UnimplementedAuthZenServiceServer -// for forward compatibility +// for forward compatibility. type AuthZenServiceServer interface { Evaluation(context.Context, *EvaluationRequest) (*EvaluationResponse, error) Evaluations(context.Context, *EvaluationsRequest) (*EvaluationsResponse, error) @@ -122,29 +128,33 @@ type AuthZenServiceServer interface { mustEmbedUnimplementedAuthZenServiceServer() } -// UnimplementedAuthZenServiceServer must be embedded to have forward compatible implementations. -type UnimplementedAuthZenServiceServer struct { -} +// UnimplementedAuthZenServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAuthZenServiceServer struct{} func (UnimplementedAuthZenServiceServer) Evaluation(context.Context, *EvaluationRequest) (*EvaluationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Evaluation not implemented") + return nil, status.Error(codes.Unimplemented, "method Evaluation not implemented") } func (UnimplementedAuthZenServiceServer) Evaluations(context.Context, *EvaluationsRequest) (*EvaluationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Evaluations not implemented") + return nil, status.Error(codes.Unimplemented, "method Evaluations not implemented") } func (UnimplementedAuthZenServiceServer) SubjectSearch(context.Context, *SubjectSearchRequest) (*SubjectSearchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SubjectSearch not implemented") + return nil, status.Error(codes.Unimplemented, "method SubjectSearch not implemented") } func (UnimplementedAuthZenServiceServer) ResourceSearch(context.Context, *ResourceSearchRequest) (*ResourceSearchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResourceSearch not implemented") + return nil, status.Error(codes.Unimplemented, "method ResourceSearch not implemented") } func (UnimplementedAuthZenServiceServer) ActionSearch(context.Context, *ActionSearchRequest) (*ActionSearchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ActionSearch not implemented") + return nil, status.Error(codes.Unimplemented, "method ActionSearch not implemented") } func (UnimplementedAuthZenServiceServer) GetConfiguration(context.Context, *GetConfigurationRequest) (*GetConfigurationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetConfiguration not implemented") + return nil, status.Error(codes.Unimplemented, "method GetConfiguration not implemented") } func (UnimplementedAuthZenServiceServer) mustEmbedUnimplementedAuthZenServiceServer() {} +func (UnimplementedAuthZenServiceServer) testEmbeddedByValue() {} // UnsafeAuthZenServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AuthZenServiceServer will @@ -154,6 +164,13 @@ type UnsafeAuthZenServiceServer interface { } func RegisterAuthZenServiceServer(s grpc.ServiceRegistrar, srv AuthZenServiceServer) { + // If the following call panics, it indicates UnimplementedAuthZenServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AuthZenService_ServiceDesc, srv) } diff --git a/proto/go.mod b/proto/go.mod index 1908b8a1..6ab88836 100644 --- a/proto/go.mod +++ b/proto/go.mod @@ -1,20 +1,20 @@ module github.com/openfga/api/proto -go 1.25 +go 1.25.0 -toolchain go1.26.1 +toolchain go1.26.4 require ( - github.com/envoyproxy/protoc-gen-validate v1.3.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 - google.golang.org/grpc v1.79.3 - google.golang.org/protobuf v1.36.10 + github.com/envoyproxy/protoc-gen-validate v1.3.3 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 + google.golang.org/genproto/googleapis/api v0.0.0-20260615183401-62b3387ff324 + google.golang.org/grpc v1.81.1 + google.golang.org/protobuf v1.36.11 ) require ( - golang.org/x/net v0.48.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260615183401-62b3387ff324 // indirect ) diff --git a/proto/go.sum b/proto/go.sum index 978e255c..bfeebc7a 100644 --- a/proto/go.sum +++ b/proto/go.sum @@ -1,7 +1,7 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -12,33 +12,33 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/genproto/googleapis/api v0.0.0-20260615183401-62b3387ff324 h1:g0RAkxK/smSu/iRwC/KIX1mwUoVJtk2OjbgaeS4DmUM= +google.golang.org/genproto/googleapis/api v0.0.0-20260615183401-62b3387ff324/go.mod h1:Z4WJ5pJOYWFWcHEQUelD5QaZDknIQkpIL/+fyJOT9+A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260615183401-62b3387ff324 h1:9HZDLIdYBJXAnaFOr9WHrKVycfpY+75s9HGadC0305A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260615183401-62b3387ff324/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/proto/openfga/v1/authzmodel.pb.go b/proto/openfga/v1/authzmodel.pb.go index 388a7b6b..363fe530 100644 --- a/proto/openfga/v1/authzmodel.pb.go +++ b/proto/openfga/v1/authzmodel.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/authzmodel.proto @@ -14,6 +14,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -100,23 +101,20 @@ func (ConditionParamTypeRef_TypeName) EnumDescriptor() ([]byte, []int) { } type AuthorizationModel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - SchemaVersion string `protobuf:"bytes,2,opt,name=schema_version,proto3" json:"schema_version,omitempty"` - TypeDefinitions []*TypeDefinition `protobuf:"bytes,3,rep,name=type_definitions,proto3" json:"type_definitions,omitempty"` - Conditions map[string]*Condition `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + SchemaVersion string `protobuf:"bytes,2,opt,name=schema_version,proto3" json:"schema_version,omitempty"` + TypeDefinitions []*TypeDefinition `protobuf:"bytes,3,rep,name=type_definitions,proto3" json:"type_definitions,omitempty"` + Conditions map[string]*Condition `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AuthorizationModel) Reset() { *x = AuthorizationModel{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AuthorizationModel) String() string { @@ -127,7 +125,7 @@ func (*AuthorizationModel) ProtoMessage() {} func (x *AuthorizationModel) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -171,25 +169,22 @@ func (x *AuthorizationModel) GetConditions() map[string]*Condition { } type TypeDefinition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Relations map[string]*Userset `protobuf:"bytes,2,rep,name=relations,proto3" json:"relations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Relations map[string]*Userset `protobuf:"bytes,2,rep,name=relations,proto3" json:"relations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // A map whose keys are the name of the relation and whose value is the Metadata for that relation. // It also holds information around the module name and source file if this model was constructed // from a modular model. - Metadata *Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + Metadata *Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TypeDefinition) Reset() { *x = TypeDefinition{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TypeDefinition) String() string { @@ -200,7 +195,7 @@ func (*TypeDefinition) ProtoMessage() {} func (x *TypeDefinition) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -237,22 +232,19 @@ func (x *TypeDefinition) GetMetadata() *Metadata { } type Relation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Rewrite *Userset `protobuf:"bytes,2,opt,name=rewrite,proto3" json:"rewrite,omitempty"` + TypeInfo *RelationTypeInfo `protobuf:"bytes,3,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Rewrite *Userset `protobuf:"bytes,2,opt,name=rewrite,proto3" json:"rewrite,omitempty"` - TypeInfo *RelationTypeInfo `protobuf:"bytes,3,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Relation) Reset() { *x = Relation{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Relation) String() string { @@ -263,7 +255,7 @@ func (*Relation) ProtoMessage() {} func (x *Relation) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -300,20 +292,17 @@ func (x *Relation) GetTypeInfo() *RelationTypeInfo { } type RelationTypeInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DirectlyRelatedUserTypes []*RelationReference `protobuf:"bytes,1,rep,name=directly_related_user_types,proto3" json:"directly_related_user_types,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DirectlyRelatedUserTypes []*RelationReference `protobuf:"bytes,1,rep,name=directly_related_user_types,proto3" json:"directly_related_user_types,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RelationTypeInfo) Reset() { *x = RelationTypeInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RelationTypeInfo) String() string { @@ -324,7 +313,7 @@ func (*RelationTypeInfo) ProtoMessage() {} func (x *RelationTypeInfo) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -347,22 +336,19 @@ func (x *RelationTypeInfo) GetDirectlyRelatedUserTypes() []*RelationReference { } type Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Relations map[string]*RelationMetadata `protobuf:"bytes,1,rep,name=relations,proto3" json:"relations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + SourceInfo *SourceInfo `protobuf:"bytes,3,opt,name=source_info,proto3" json:"source_info,omitempty"` unknownFields protoimpl.UnknownFields - - Relations map[string]*RelationMetadata `protobuf:"bytes,1,rep,name=relations,proto3" json:"relations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` - SourceInfo *SourceInfo `protobuf:"bytes,3,opt,name=source_info,proto3" json:"source_info,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Metadata) Reset() { *x = Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Metadata) String() string { @@ -373,7 +359,7 @@ func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -410,20 +396,17 @@ func (x *Metadata) GetSourceInfo() *SourceInfo { } type SourceInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + File string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` unknownFields protoimpl.UnknownFields - - File string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SourceInfo) Reset() { *x = SourceInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SourceInfo) String() string { @@ -434,7 +417,7 @@ func (*SourceInfo) ProtoMessage() {} func (x *SourceInfo) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -457,22 +440,19 @@ func (x *SourceInfo) GetFile() string { } type RelationMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DirectlyRelatedUserTypes []*RelationReference `protobuf:"bytes,1,rep,name=directly_related_user_types,proto3" json:"directly_related_user_types,omitempty"` - Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` - SourceInfo *SourceInfo `protobuf:"bytes,3,opt,name=source_info,proto3" json:"source_info,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DirectlyRelatedUserTypes []*RelationReference `protobuf:"bytes,1,rep,name=directly_related_user_types,proto3" json:"directly_related_user_types,omitempty"` + Module string `protobuf:"bytes,2,opt,name=module,proto3" json:"module,omitempty"` + SourceInfo *SourceInfo `protobuf:"bytes,3,opt,name=source_info,proto3" json:"source_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RelationMetadata) Reset() { *x = RelationMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RelationMetadata) String() string { @@ -483,7 +463,7 @@ func (*RelationMetadata) ProtoMessage() {} func (x *RelationMetadata) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -521,27 +501,24 @@ func (x *RelationMetadata) GetSourceInfo() *SourceInfo { // RelationReference represents a relation of a particular object type (e.g. 'document#viewer'). type RelationReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - // Types that are assignable to RelationOrWildcard: + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + // Types that are valid to be assigned to RelationOrWildcard: // // *RelationReference_Relation // *RelationReference_Wildcard RelationOrWildcard isRelationReference_RelationOrWildcard `protobuf_oneof:"relation_or_wildcard"` // The name of a condition that is enforced over the allowed relation. - Condition string `protobuf:"bytes,4,opt,name=condition,proto3" json:"condition,omitempty"` + Condition string `protobuf:"bytes,4,opt,name=condition,proto3" json:"condition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RelationReference) Reset() { *x = RelationReference{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RelationReference) String() string { @@ -552,7 +529,7 @@ func (*RelationReference) ProtoMessage() {} func (x *RelationReference) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -574,23 +551,27 @@ func (x *RelationReference) GetType() string { return "" } -func (m *RelationReference) GetRelationOrWildcard() isRelationReference_RelationOrWildcard { - if m != nil { - return m.RelationOrWildcard +func (x *RelationReference) GetRelationOrWildcard() isRelationReference_RelationOrWildcard { + if x != nil { + return x.RelationOrWildcard } return nil } func (x *RelationReference) GetRelation() string { - if x, ok := x.GetRelationOrWildcard().(*RelationReference_Relation); ok { - return x.Relation + if x != nil { + if x, ok := x.RelationOrWildcard.(*RelationReference_Relation); ok { + return x.Relation + } } return "" } func (x *RelationReference) GetWildcard() *Wildcard { - if x, ok := x.GetRelationOrWildcard().(*RelationReference_Wildcard); ok { - return x.Wildcard + if x != nil { + if x, ok := x.RelationOrWildcard.(*RelationReference_Wildcard); ok { + return x.Wildcard + } } return nil } @@ -619,18 +600,16 @@ func (*RelationReference_Relation) isRelationReference_RelationOrWildcard() {} func (*RelationReference_Wildcard) isRelationReference_RelationOrWildcard() {} type Wildcard struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Wildcard) Reset() { *x = Wildcard{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Wildcard) String() string { @@ -641,7 +620,7 @@ func (*Wildcard) ProtoMessage() {} func (x *Wildcard) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -657,20 +636,17 @@ func (*Wildcard) Descriptor() ([]byte, []int) { } type Usersets struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Child []*Userset `protobuf:"bytes,1,rep,name=child,proto3" json:"child,omitempty"` unknownFields protoimpl.UnknownFields - - Child []*Userset `protobuf:"bytes,1,rep,name=child,proto3" json:"child,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Usersets) Reset() { *x = Usersets{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Usersets) String() string { @@ -681,7 +657,7 @@ func (*Usersets) ProtoMessage() {} func (x *Usersets) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -704,21 +680,18 @@ func (x *Usersets) GetChild() []*Userset { } type Difference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Base *Userset `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` + Subtract *Userset `protobuf:"bytes,2,opt,name=subtract,proto3" json:"subtract,omitempty"` unknownFields protoimpl.UnknownFields - - Base *Userset `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` - Subtract *Userset `protobuf:"bytes,2,opt,name=subtract,proto3" json:"subtract,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Difference) Reset() { *x = Difference{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Difference) String() string { @@ -729,7 +702,7 @@ func (*Difference) ProtoMessage() {} func (x *Difference) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -759,11 +732,8 @@ func (x *Difference) GetSubtract() *Userset { } type Userset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Userset: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Userset: // // *Userset_This // *Userset_ComputedUserset @@ -771,16 +741,16 @@ type Userset struct { // *Userset_Union // *Userset_Intersection // *Userset_Difference - Userset isUserset_Userset `protobuf_oneof:"userset"` + Userset isUserset_Userset `protobuf_oneof:"userset"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Userset) Reset() { *x = Userset{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Userset) String() string { @@ -791,7 +761,7 @@ func (*Userset) ProtoMessage() {} func (x *Userset) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -806,51 +776,63 @@ func (*Userset) Descriptor() ([]byte, []int) { return file_openfga_v1_authzmodel_proto_rawDescGZIP(), []int{11} } -func (m *Userset) GetUserset() isUserset_Userset { - if m != nil { - return m.Userset +func (x *Userset) GetUserset() isUserset_Userset { + if x != nil { + return x.Userset } return nil } func (x *Userset) GetThis() *DirectUserset { - if x, ok := x.GetUserset().(*Userset_This); ok { - return x.This + if x != nil { + if x, ok := x.Userset.(*Userset_This); ok { + return x.This + } } return nil } func (x *Userset) GetComputedUserset() *ObjectRelation { - if x, ok := x.GetUserset().(*Userset_ComputedUserset); ok { - return x.ComputedUserset + if x != nil { + if x, ok := x.Userset.(*Userset_ComputedUserset); ok { + return x.ComputedUserset + } } return nil } func (x *Userset) GetTupleToUserset() *TupleToUserset { - if x, ok := x.GetUserset().(*Userset_TupleToUserset); ok { - return x.TupleToUserset + if x != nil { + if x, ok := x.Userset.(*Userset_TupleToUserset); ok { + return x.TupleToUserset + } } return nil } func (x *Userset) GetUnion() *Usersets { - if x, ok := x.GetUserset().(*Userset_Union); ok { - return x.Union + if x != nil { + if x, ok := x.Userset.(*Userset_Union); ok { + return x.Union + } } return nil } func (x *Userset) GetIntersection() *Usersets { - if x, ok := x.GetUserset().(*Userset_Intersection); ok { - return x.Intersection + if x != nil { + if x, ok := x.Userset.(*Userset_Intersection); ok { + return x.Intersection + } } return nil } func (x *Userset) GetDifference() *Difference { - if x, ok := x.GetUserset().(*Userset_Difference); ok { - return x.Difference + if x != nil { + if x, ok := x.Userset.(*Userset_Difference); ok { + return x.Difference + } } return nil } @@ -898,18 +880,16 @@ func (*Userset_Difference) isUserset_Userset() {} // A DirectUserset is a sentinel message for referencing // the direct members specified by an object/relation mapping. type DirectUserset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DirectUserset) Reset() { *x = DirectUserset{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DirectUserset) String() string { @@ -920,7 +900,7 @@ func (*DirectUserset) ProtoMessage() {} func (x *DirectUserset) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -936,21 +916,18 @@ func (*DirectUserset) Descriptor() ([]byte, []int) { } type ObjectRelation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` unknownFields protoimpl.UnknownFields - - Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ObjectRelation) Reset() { *x = ObjectRelation{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ObjectRelation) String() string { @@ -961,7 +938,7 @@ func (*ObjectRelation) ProtoMessage() {} func (x *ObjectRelation) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -991,20 +968,17 @@ func (x *ObjectRelation) GetRelation() string { } type ComputedUserset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ComputedUserset) Reset() { *x = ComputedUserset{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ComputedUserset) String() string { @@ -1015,7 +989,7 @@ func (*ComputedUserset) ProtoMessage() {} func (x *ComputedUserset) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1038,22 +1012,19 @@ func (x *ComputedUserset) GetRelation() string { } type TupleToUserset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The target object/relation Tupleset *ObjectRelation `protobuf:"bytes,1,opt,name=tupleset,proto3" json:"tupleset,omitempty"` ComputedUserset *ObjectRelation `protobuf:"bytes,2,opt,name=computed_userset,json=computedUserset,proto3" json:"computed_userset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *TupleToUserset) Reset() { *x = TupleToUserset{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TupleToUserset) String() string { @@ -1064,7 +1035,7 @@ func (*TupleToUserset) ProtoMessage() {} func (x *TupleToUserset) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1094,26 +1065,23 @@ func (x *TupleToUserset) GetComputedUserset() *ObjectRelation { } type Condition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // A unique name for the condition Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // A Google CEL expression, expressed as a string. Expression string `protobuf:"bytes,2,opt,name=expression,proto3" json:"expression,omitempty"` // A map of parameter names to the parameter's defined type reference. - Parameters map[string]*ConditionParamTypeRef `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Metadata *ConditionMetadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + Parameters map[string]*ConditionParamTypeRef `protobuf:"bytes,3,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Metadata *ConditionMetadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Condition) Reset() { *x = Condition{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Condition) String() string { @@ -1124,7 +1092,7 @@ func (*Condition) ProtoMessage() {} func (x *Condition) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1168,21 +1136,18 @@ func (x *Condition) GetMetadata() *ConditionMetadata { } type ConditionMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + SourceInfo *SourceInfo `protobuf:"bytes,2,opt,name=source_info,proto3" json:"source_info,omitempty"` unknownFields protoimpl.UnknownFields - - Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` - SourceInfo *SourceInfo `protobuf:"bytes,2,opt,name=source_info,proto3" json:"source_info,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConditionMetadata) Reset() { *x = ConditionMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConditionMetadata) String() string { @@ -1193,7 +1158,7 @@ func (*ConditionMetadata) ProtoMessage() {} func (x *ConditionMetadata) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1223,21 +1188,18 @@ func (x *ConditionMetadata) GetSourceInfo() *SourceInfo { } type ConditionParamTypeRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TypeName ConditionParamTypeRef_TypeName `protobuf:"varint,1,opt,name=type_name,proto3,enum=openfga.v1.ConditionParamTypeRef_TypeName" json:"type_name,omitempty"` + GenericTypes []*ConditionParamTypeRef `protobuf:"bytes,2,rep,name=generic_types,proto3" json:"generic_types,omitempty"` unknownFields protoimpl.UnknownFields - - TypeName ConditionParamTypeRef_TypeName `protobuf:"varint,1,opt,name=type_name,proto3,enum=openfga.v1.ConditionParamTypeRef_TypeName" json:"type_name,omitempty"` - GenericTypes []*ConditionParamTypeRef `protobuf:"bytes,2,rep,name=generic_types,proto3" json:"generic_types,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConditionParamTypeRef) Reset() { *x = ConditionParamTypeRef{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_authzmodel_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_authzmodel_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConditionParamTypeRef) String() string { @@ -1248,7 +1210,7 @@ func (*ConditionParamTypeRef) ProtoMessage() {} func (x *ConditionParamTypeRef) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_authzmodel_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1279,314 +1241,133 @@ func (x *ConditionParamTypeRef) GetGenericTypes() []*ConditionParamTypeRef { var File_openfga_v1_authzmodel_proto protoreflect.FileDescriptor -var file_openfga_v1_authzmodel_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x7a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, - 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x06, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x5f, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4f, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, - 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, - 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x28, 0x72, - 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x0d, 0x5e, - 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x2e, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x24, 0xd0, 0x01, 0x00, 0x52, - 0x0e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x8f, 0x03, 0x0a, 0x10, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xc6, 0x02, 0x92, 0x41, 0xbf, 0x02, 0x4a, 0xbc, 0x02, - 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, - 0x7d, 0x2c, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x75, 0x6e, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3a, 0x5b, 0x7b, - 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x7d, 0x2c, 0x7b, 0x22, 0x63, 0x6f, 0x6d, - 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x7b, 0x22, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x22, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x7d, 0x7d, - 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x74, - 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x7d, 0x7d, 0x2c, 0x22, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x3a, 0x7b, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x3a, 0x7b, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x3a, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x7d, 0x5d, 0x7d, 0x2c, 0x22, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x22, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, - 0x79, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x7d, 0x5d, 0x7d, 0x7d, 0x7d, 0x7d, 0x5d, 0xe0, 0x41, 0x02, 0x52, - 0x10, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x71, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x21, 0xfa, 0x42, 0x1e, 0x9a, 0x01, 0x1b, 0x10, 0x19, 0x22, - 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, - 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x54, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbd, 0x03, 0x0a, 0x0e, 0x54, - 0x79, 0x70, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0x92, 0x41, 0x0c, - 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x18, 0x72, 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, - 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0xe2, 0x01, 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, - 0x98, 0x01, 0x92, 0x41, 0x79, 0x4a, 0x77, 0x7b, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, - 0x3a, 0x7b, 0x22, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x7b, 0x22, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x7d, 0x2c, - 0x7b, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x7b, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x22, 0x22, 0x2c, - 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x22, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x22, 0x7d, 0x7d, 0x5d, 0x7d, 0x7d, 0x2c, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x22, 0x3a, 0x7b, 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x7d, 0x7d, 0xfa, 0x42, - 0x19, 0x9a, 0x01, 0x16, 0x22, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, - 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x51, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb1, 0x01, 0x0a, 0x08, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, - 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, - 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x42, 0x0b, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x73, - 0x0a, 0x10, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x5f, 0x0a, 0x1b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x1b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, - 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x22, 0x97, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, - 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x1a, 0x5a, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, - 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x04, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xfa, 0x42, 0x25, 0x72, 0x23, - 0x32, 0x1e, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x5c, 0x2d, - 0x5c, 0x2f, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x5c, 0x2e, 0x66, 0x67, 0x61, 0x24, - 0xd0, 0x01, 0x01, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xe1, 0x01, 0x0a, 0x10, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5f, - 0x0a, 0x1b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x1b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x32, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, - 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xa0, 0x02, - 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2a, 0x92, 0x41, 0x09, 0x4a, 0x07, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, - 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x22, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, - 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, - 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x77, 0x69, - 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, - 0x72, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x12, 0x38, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, - 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x16, 0x0a, 0x14, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x72, 0x5f, 0x77, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, - 0x22, 0x0a, 0x0a, 0x08, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x22, 0x3a, 0x0a, 0x08, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x08, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x65, 0x74, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x22, 0xfa, 0x02, 0x0a, 0x07, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x68, 0x69, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, - 0x48, 0x00, 0x52, 0x04, 0x74, 0x68, 0x69, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x12, 0x46, 0x0a, 0x10, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x54, 0x6f, - 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x05, 0x75, 0x6e, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x65, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, - 0x00, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, 0x57, 0x0a, 0x0e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x06, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x28, 0x80, 0x02, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, - 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x28, 0x32, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, - 0x65, 0x72, 0x73, 0x65, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x28, 0x32, 0xd0, 0x01, 0x00, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xa9, 0x01, 0x0a, 0x0e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x65, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6d, - 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, 0xf2, 0x02, 0x0a, - 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, - 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, - 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0e, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x28, 0x80, 0x04, 0xd0, 0x01, - 0x00, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, - 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x1e, 0xfa, 0x42, 0x1b, 0x9a, 0x01, 0x18, - 0x10, 0x19, 0x22, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, - 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, - 0x60, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x65, 0x66, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x81, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, - 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, - 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xd4, 0x03, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x66, 0x12, - 0x55, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x65, 0x66, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x0b, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x79, 0x70, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, - 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x66, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x05, 0x52, 0x0d, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x08, 0x54, 0x79, - 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, - 0x41, 0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x41, - 0x4e, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, - 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x11, - 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x10, - 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x55, - 0x49, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, - 0x4d, 0x45, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, - 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x4d, 0x41, 0x50, 0x10, 0x09, 0x12, - 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, - 0x5f, 0x49, 0x50, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x0b, 0x42, 0x9d, 0x01, 0x0a, - 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, - 0x0f, 0x41, 0x75, 0x74, 0x68, 0x7a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, - 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_authzmodel_proto_rawDesc = "" + + "\n" + + "\x1bopenfga/v1/authzmodel.proto\x12\n" + + "openfga.v1\x1a\x1fgoogle/api/field_behavior.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"\x94\x06\n" + + "\x12AuthorizationModel\x12_\n" + + "\x02id\x18\x01 \x01(\tBO\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x00R\x02id\x12B\n" + + "\x0eschema_version\x18\x02 \x01(\tB\x1a\xe0A\x02\xfaB\x14r\x122\r^[1-9].[1-9]$\xd0\x01\x00R\x0eschema_version\x12\x8f\x03\n" + + "\x10type_definitions\x18\x03 \x03(\v2\x1a.openfga.v1.TypeDefinitionB\xc6\x02\x92A\xbf\x02J\xbc\x02[{\"type\": \"user\"}, {\"type\":\"document\",\"relations\":{\"reader\":{\"union\":{\"child\":[{\"this\":{}},{\"computedUserset\":{\"object\":\"\",\"relation\":\"writer\"}}]}},\"writer\":{\"this\":{}}},\"metadata\":{\"relations\":{\"reader\":{\"directly_related_user_types\":[{\"type\":\"user\"}]},\"writer\":{\"directly_related_user_types\":[{\"type\":\"user\"}]}}}}]\xe0A\x02R\x10type_definitions\x12q\n" + + "\n" + + "conditions\x18\x04 \x03(\v2..openfga.v1.AuthorizationModel.ConditionsEntryB!\xfaB\x1e\x9a\x01\x1b\x10\x19\"\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\n" + + "conditions\x1aT\n" + + "\x0fConditionsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.openfga.v1.ConditionR\x05value:\x028\x01\"\xbd\x03\n" + + "\x0eTypeDefinition\x12A\n" + + "\x04type\x18\x01 \x01(\tB-\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\x12\xe2\x01\n" + + "\trelations\x18\x02 \x03(\v2).openfga.v1.TypeDefinition.RelationsEntryB\x98\x01\x92AyJw{\"reader\":{\"union\":{\"child\":[{\"this\":{}},{\"computedUserset\":{\"object\":\"\",\"relation\":\"writer\"}}]}},\"writer\":{\"this\":{}}}\xfaB\x19\x9a\x01\x16\"\x14r\x122\x10^[^:#@\\s]{1,50}$R\trelations\x120\n" + + "\bmetadata\x18\x03 \x01(\v2\x14.openfga.v1.MetadataR\bmetadata\x1aQ\n" + + "\x0eRelationsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12)\n" + + "\x05value\x18\x02 \x01(\v2\x13.openfga.v1.UsersetR\x05value:\x028\x01\"\xb1\x01\n" + + "\bRelation\x12.\n" + + "\x04name\x18\x01 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04name\x12:\n" + + "\arewrite\x18\x02 \x01(\v2\x13.openfga.v1.UsersetB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\arewrite\x129\n" + + "\ttype_info\x18\x03 \x01(\v2\x1c.openfga.v1.RelationTypeInfoR\btypeInfo\"s\n" + + "\x10RelationTypeInfo\x12_\n" + + "\x1bdirectly_related_user_types\x18\x01 \x03(\v2\x1d.openfga.v1.RelationReferenceR\x1bdirectly_related_user_types\"\x97\x02\n" + + "\bMetadata\x12A\n" + + "\trelations\x18\x01 \x03(\v2#.openfga.v1.Metadata.RelationsEntryR\trelations\x122\n" + + "\x06module\x18\x02 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\x06module\x128\n" + + "\vsource_info\x18\x03 \x01(\v2\x16.openfga.v1.SourceInfoR\vsource_info\x1aZ\n" + + "\x0eRelationsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x122\n" + + "\x05value\x18\x02 \x01(\v2\x1c.openfga.v1.RelationMetadataR\x05value:\x028\x01\"J\n" + + "\n" + + "SourceInfo\x12<\n" + + "\x04file\x18\x01 \x01(\tB(\xfaB%r#2\x1e^[a-zA-Z0-9_\\-\\/]{1,100}\\.fga$\xd0\x01\x01R\x04file\"\xe1\x01\n" + + "\x10RelationMetadata\x12_\n" + + "\x1bdirectly_related_user_types\x18\x01 \x03(\v2\x1d.openfga.v1.RelationReferenceR\x1bdirectly_related_user_types\x122\n" + + "\x06module\x18\x02 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\x06module\x128\n" + + "\vsource_info\x18\x03 \x01(\v2\x16.openfga.v1.SourceInfoR\vsource_info\"\xa0\x02\n" + + "\x11RelationReference\x12>\n" + + "\x04type\x18\x01 \x01(\tB*\x92A\tJ\a\"group\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\x12E\n" + + "\brelation\x18\x02 \x01(\tB'\x92A\n" + + "J\b\"member\"\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01H\x00R\brelation\x122\n" + + "\bwildcard\x18\x03 \x01(\v2\x14.openfga.v1.WildcardH\x00R\bwildcard\x128\n" + + "\tcondition\x18\x04 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\tconditionB\x16\n" + + "\x14relation_or_wildcard\"\n" + + "\n" + + "\bWildcard\":\n" + + "\bUsersets\x12.\n" + + "\x05child\x18\x01 \x03(\v2\x13.openfga.v1.UsersetB\x03\xe0A\x02R\x05child\"\x80\x01\n" + + "\n" + + "Difference\x124\n" + + "\x04base\x18\x01 \x01(\v2\x13.openfga.v1.UsersetB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x04base\x12<\n" + + "\bsubtract\x18\x02 \x01(\v2\x13.openfga.v1.UsersetB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bsubtract\"\xfa\x02\n" + + "\aUserset\x12/\n" + + "\x04this\x18\x01 \x01(\v2\x19.openfga.v1.DirectUsersetH\x00R\x04this\x12G\n" + + "\x10computed_userset\x18\x02 \x01(\v2\x1a.openfga.v1.ObjectRelationH\x00R\x0fcomputedUserset\x12F\n" + + "\x10tuple_to_userset\x18\x03 \x01(\v2\x1a.openfga.v1.TupleToUsersetH\x00R\x0etupleToUserset\x12,\n" + + "\x05union\x18\x04 \x01(\v2\x14.openfga.v1.UsersetsH\x00R\x05union\x12:\n" + + "\fintersection\x18\x05 \x01(\v2\x14.openfga.v1.UsersetsH\x00R\fintersection\x128\n" + + "\n" + + "difference\x18\x06 \x01(\v2\x16.openfga.v1.DifferenceH\x00R\n" + + "differenceB\t\n" + + "\auserset\"\x0f\n" + + "\rDirectUserset\"W\n" + + "\x0eObjectRelation\x12 \n" + + "\x06object\x18\x01 \x01(\tB\b\xfaB\x05r\x03(\x80\x02R\x06object\x12#\n" + + "\brelation\x18\x02 \x01(\tB\a\xfaB\x04r\x02(2R\brelation\"<\n" + + "\x0fComputedUserset\x12)\n" + + "\brelation\x18\x01 \x01(\tB\r\xe0A\x02\xfaB\ar\x05(2\xd0\x01\x00R\brelation\"\xa9\x01\n" + + "\x0eTupleToUserset\x12C\n" + + "\btupleset\x18\x01 \x01(\v2\x1a.openfga.v1.ObjectRelationB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\btupleset\x12R\n" + + "\x10computed_userset\x18\x02 \x01(\v2\x1a.openfga.v1.ObjectRelationB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x0fcomputedUserset\"\xf2\x02\n" + + "\tCondition\x121\n" + + "\x04name\x18\x01 \x01(\tB\x1d\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x00R\x04name\x12.\n" + + "\n" + + "expression\x18\x02 \x01(\tB\x0e\xe0A\x02\xfaB\br\x06(\x80\x04\xd0\x01\x00R\n" + + "expression\x12e\n" + + "\n" + + "parameters\x18\x03 \x03(\v2%.openfga.v1.Condition.ParametersEntryB\x1e\xfaB\x1b\x9a\x01\x18\x10\x19\"\x14r\x122\x10^[^:#@\\s]{1,50}$R\n" + + "parameters\x129\n" + + "\bmetadata\x18\x04 \x01(\v2\x1d.openfga.v1.ConditionMetadataR\bmetadata\x1a`\n" + + "\x0fParametersEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x127\n" + + "\x05value\x18\x02 \x01(\v2!.openfga.v1.ConditionParamTypeRefR\x05value:\x028\x01\"\x81\x01\n" + + "\x11ConditionMetadata\x122\n" + + "\x06module\x18\x01 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\x06module\x128\n" + + "\vsource_info\x18\x02 \x01(\v2\x16.openfga.v1.SourceInfoR\vsource_info\"\xd4\x03\n" + + "\x15ConditionParamTypeRef\x12U\n" + + "\ttype_name\x18\x01 \x01(\x0e2*.openfga.v1.ConditionParamTypeRef.TypeNameB\v\xe0A\x02\xfaB\x05\x82\x01\x02\x10\x01R\ttype_name\x12Q\n" + + "\rgeneric_types\x18\x02 \x03(\v2!.openfga.v1.ConditionParamTypeRefB\b\xfaB\x05\x92\x01\x02\x10\x05R\rgeneric_types\"\x90\x02\n" + + "\bTypeName\x12\x19\n" + + "\x15TYPE_NAME_UNSPECIFIED\x10\x00\x12\x11\n" + + "\rTYPE_NAME_ANY\x10\x01\x12\x12\n" + + "\x0eTYPE_NAME_BOOL\x10\x02\x12\x14\n" + + "\x10TYPE_NAME_STRING\x10\x03\x12\x11\n" + + "\rTYPE_NAME_INT\x10\x04\x12\x12\n" + + "\x0eTYPE_NAME_UINT\x10\x05\x12\x14\n" + + "\x10TYPE_NAME_DOUBLE\x10\x06\x12\x16\n" + + "\x12TYPE_NAME_DURATION\x10\a\x12\x17\n" + + "\x13TYPE_NAME_TIMESTAMP\x10\b\x12\x11\n" + + "\rTYPE_NAME_MAP\x10\t\x12\x12\n" + + "\x0eTYPE_NAME_LIST\x10\n" + + "\x12\x17\n" + + "\x13TYPE_NAME_IPADDRESS\x10\vB\x9d\x01\n" + + "\x0ecom.openfga.v1B\x0fAuthzmodelProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" var ( file_openfga_v1_authzmodel_proto_rawDescOnce sync.Once - file_openfga_v1_authzmodel_proto_rawDescData = file_openfga_v1_authzmodel_proto_rawDesc + file_openfga_v1_authzmodel_proto_rawDescData []byte ) func file_openfga_v1_authzmodel_proto_rawDescGZIP() []byte { file_openfga_v1_authzmodel_proto_rawDescOnce.Do(func() { - file_openfga_v1_authzmodel_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_authzmodel_proto_rawDescData) + file_openfga_v1_authzmodel_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_openfga_v1_authzmodel_proto_rawDesc), len(file_openfga_v1_authzmodel_proto_rawDesc))) }) return file_openfga_v1_authzmodel_proto_rawDescData } var file_openfga_v1_authzmodel_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_openfga_v1_authzmodel_proto_msgTypes = make([]protoimpl.MessageInfo, 23) -var file_openfga_v1_authzmodel_proto_goTypes = []interface{}{ +var file_openfga_v1_authzmodel_proto_goTypes = []any{ (ConditionParamTypeRef_TypeName)(0), // 0: openfga.v1.ConditionParamTypeRef.TypeName (*AuthorizationModel)(nil), // 1: openfga.v1.AuthorizationModel (*TypeDefinition)(nil), // 2: openfga.v1.TypeDefinition @@ -1657,241 +1438,11 @@ func file_openfga_v1_authzmodel_proto_init() { if File_openfga_v1_authzmodel_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_openfga_v1_authzmodel_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthorizationModel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TypeDefinition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Relation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RelationTypeInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RelationMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RelationReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Wildcard); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Usersets); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Difference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Userset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DirectUserset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObjectRelation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComputedUserset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TupleToUserset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Condition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConditionMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_authzmodel_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConditionParamTypeRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_openfga_v1_authzmodel_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_openfga_v1_authzmodel_proto_msgTypes[7].OneofWrappers = []any{ (*RelationReference_Relation)(nil), (*RelationReference_Wildcard)(nil), } - file_openfga_v1_authzmodel_proto_msgTypes[11].OneofWrappers = []interface{}{ + file_openfga_v1_authzmodel_proto_msgTypes[11].OneofWrappers = []any{ (*Userset_This)(nil), (*Userset_ComputedUserset)(nil), (*Userset_TupleToUserset)(nil), @@ -1903,7 +1454,7 @@ func file_openfga_v1_authzmodel_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_authzmodel_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_authzmodel_proto_rawDesc), len(file_openfga_v1_authzmodel_proto_rawDesc)), NumEnums: 1, NumMessages: 23, NumExtensions: 0, @@ -1915,7 +1466,6 @@ func file_openfga_v1_authzmodel_proto_init() { MessageInfos: file_openfga_v1_authzmodel_proto_msgTypes, }.Build() File_openfga_v1_authzmodel_proto = out.File - file_openfga_v1_authzmodel_proto_rawDesc = nil file_openfga_v1_authzmodel_proto_goTypes = nil file_openfga_v1_authzmodel_proto_depIdxs = nil } diff --git a/proto/openfga/v1/errors_ignore.pb.go b/proto/openfga/v1/errors_ignore.pb.go index c1e0d399..f9731e13 100644 --- a/proto/openfga/v1/errors_ignore.pb.go +++ b/proto/openfga/v1/errors_ignore.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/errors_ignore.proto @@ -12,6 +12,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -447,21 +448,18 @@ func (NotFoundErrorCode) EnumDescriptor() ([]byte, []int) { } type ValidationErrorMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.ErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.ErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ValidationErrorMessageResponse) Reset() { *x = ValidationErrorMessageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValidationErrorMessageResponse) String() string { @@ -472,7 +470,7 @@ func (*ValidationErrorMessageResponse) ProtoMessage() {} func (x *ValidationErrorMessageResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -502,21 +500,18 @@ func (x *ValidationErrorMessageResponse) GetMessage() string { } type UnauthenticatedResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.ErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.ErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnauthenticatedResponse) Reset() { *x = UnauthenticatedResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnauthenticatedResponse) String() string { @@ -527,7 +522,7 @@ func (*UnauthenticatedResponse) ProtoMessage() {} func (x *UnauthenticatedResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -557,21 +552,18 @@ func (x *UnauthenticatedResponse) GetMessage() string { } type UnprocessableContentMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code UnprocessableContentErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.UnprocessableContentErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code UnprocessableContentErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.UnprocessableContentErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UnprocessableContentMessageResponse) Reset() { *x = UnprocessableContentMessageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnprocessableContentMessageResponse) String() string { @@ -582,7 +574,7 @@ func (*UnprocessableContentMessageResponse) ProtoMessage() {} func (x *UnprocessableContentMessageResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -612,21 +604,18 @@ func (x *UnprocessableContentMessageResponse) GetMessage() string { } type InternalErrorMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code InternalErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.InternalErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code InternalErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.InternalErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InternalErrorMessageResponse) Reset() { *x = InternalErrorMessageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InternalErrorMessageResponse) String() string { @@ -637,7 +626,7 @@ func (*InternalErrorMessageResponse) ProtoMessage() {} func (x *InternalErrorMessageResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -667,21 +656,18 @@ func (x *InternalErrorMessageResponse) GetMessage() string { } type PathUnknownErrorMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code NotFoundErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.NotFoundErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code NotFoundErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.NotFoundErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PathUnknownErrorMessageResponse) Reset() { *x = PathUnknownErrorMessageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PathUnknownErrorMessageResponse) String() string { @@ -692,7 +678,7 @@ func (*PathUnknownErrorMessageResponse) ProtoMessage() {} func (x *PathUnknownErrorMessageResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -722,21 +708,18 @@ func (x *PathUnknownErrorMessageResponse) GetMessage() string { } type AbortedMessageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AbortedMessageResponse) Reset() { *x = AbortedMessageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AbortedMessageResponse) String() string { @@ -747,7 +730,7 @@ func (*AbortedMessageResponse) ProtoMessage() {} func (x *AbortedMessageResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -777,18 +760,16 @@ func (x *AbortedMessageResponse) GetMessage() string { } type ErrorMessageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ErrorMessageRequest) Reset() { *x = ErrorMessageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ErrorMessageRequest) String() string { @@ -799,7 +780,7 @@ func (*ErrorMessageRequest) ProtoMessage() {} func (x *ErrorMessageRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -815,21 +796,18 @@ func (*ErrorMessageRequest) Descriptor() ([]byte, []int) { } type ForbiddenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code AuthErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.AuthErrorCode" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Code AuthErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=openfga.v1.AuthErrorCode" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ForbiddenResponse) Reset() { *x = ForbiddenResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_errors_ignore_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_errors_ignore_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ForbiddenResponse) String() string { @@ -840,7 +818,7 @@ func (*ForbiddenResponse) ProtoMessage() {} func (x *ForbiddenResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_errors_ignore_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -871,262 +849,131 @@ func (x *ForbiddenResponse) GetMessage() string { var File_openfga_v1_errors_ignore_proto protoreflect.FileDescriptor -var file_openfga_v1_errors_ignore_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x73, 0x5f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xad, 0x01, 0x0a, - 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x3a, 0x46, 0x92, 0x41, 0x43, 0x32, 0x41, 0x7b, 0x22, 0x63, 0x6f, 0x64, - 0x65, 0x22, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x3a, 0x22, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7d, 0x22, 0x9c, 0x01, 0x0a, - 0x17, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x3c, 0x92, - 0x41, 0x39, 0x32, 0x37, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x22, 0x75, 0x6e, 0x61, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x2c, 0x20, 0x22, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x22, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0x7d, 0x22, 0xe1, 0x01, 0x0a, 0x23, - 0x55, 0x6e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x61, 0x92, 0x41, - 0x5e, 0x32, 0x5c, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x22, 0x74, 0x68, 0x72, 0x6f, - 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, - 0x22, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7d, 0x22, - 0xae, 0x01, 0x0a, 0x1c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x31, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x41, 0x92, - 0x41, 0x3e, 0x32, 0x3c, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x22, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2c, 0x20, 0x22, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x22, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7d, - 0x22, 0xb4, 0x01, 0x0a, 0x1f, 0x50, 0x61, 0x74, 0x68, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x3a, 0x44, 0x92, 0x41, 0x41, 0x32, 0x3f, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, - 0x22, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, - 0x22, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x7d, 0x22, 0x7c, 0x0a, 0x16, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, - 0x34, 0x92, 0x41, 0x31, 0x32, 0x2f, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x22, 0x31, - 0x30, 0x22, 0x2c, 0x20, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x22, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x22, 0x7d, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xba, 0x01, 0x0a, - 0x11, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, - 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, 0x5c, 0x92, 0x41, 0x59, - 0x32, 0x57, 0x7b, 0x22, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x22, 0x66, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x64, 0x65, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x3a, 0x22, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x2a, 0x85, 0x02, 0x0a, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x6e, - 0x6f, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x20, - 0x0a, 0x1b, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x10, 0xe9, 0x07, - 0x12, 0x21, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, - 0x10, 0xea, 0x07, 0x12, 0x1f, 0x0a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x66, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x10, 0xeb, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x10, 0xec, 0x07, 0x12, 0x25, 0x0a, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x5f, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xed, 0x07, - 0x12, 0x19, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x72, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x10, 0xf2, 0x07, 0x12, 0x14, 0x0a, 0x0f, 0x75, - 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x10, 0xdc, - 0x0b, 0x12, 0x0e, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x10, 0xc0, - 0x0c, 0x2a, 0xa3, 0x0c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x0c, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x15, 0x0a, - 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x10, 0xd0, 0x0f, 0x12, 0x22, 0x0a, 0x1d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0xd1, 0x0f, 0x12, 0x2f, 0x0a, 0x2a, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x10, 0xd2, 0x0f, 0x12, 0x18, 0x0a, 0x13, 0x69, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x10, 0xd3, 0x0f, 0x12, 0x31, 0x0a, 0x2c, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x5f, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x10, 0xd4, 0x0f, 0x12, 0x30, 0x0a, 0x2b, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0xd5, 0x0f, 0x12, 0x35, 0x0a, 0x30, 0x63, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, - 0x6f, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0xd6, 0x0f, 0x12, - 0x1f, 0x0a, 0x1a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xd7, 0x0f, - 0x12, 0x16, 0x0a, 0x11, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x10, 0xd8, 0x0f, 0x12, 0x18, 0x0a, 0x13, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x10, - 0xd9, 0x0f, 0x12, 0x19, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x65, 0x78, - 0x70, 0x61, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x10, 0xda, 0x0f, 0x12, 0x19, 0x0a, - 0x14, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x73, 0x65, 0x74, 0x10, 0xdb, 0x0f, 0x12, 0x1a, 0x0a, 0x15, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x10, 0xdc, 0x0f, 0x12, 0x26, 0x0a, 0x21, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x75, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x10, 0xe1, 0x0f, 0x12, 0x2d, 0x0a, 0x28, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x6e, - 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0xe2, 0x0f, 0x12, 0x29, 0x0a, 0x24, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, - 0x75, 0x6e, 0x64, 0x10, 0xe4, 0x0f, 0x12, 0x13, 0x0a, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, - 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0xe5, 0x0f, 0x12, 0x17, 0x0a, 0x12, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x10, 0xe6, 0x0f, 0x12, 0x1e, 0x0a, 0x19, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x10, 0xe7, 0x0f, 0x12, 0x11, 0x0a, 0x0c, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x10, 0xe9, 0x0f, 0x12, 0x12, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x10, 0xeb, 0x0f, 0x12, 0x15, 0x0a, 0x10, 0x75, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, - 0xec, 0x0f, 0x12, 0x1c, 0x0a, 0x17, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x69, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x10, 0xee, 0x0f, - 0x12, 0x1e, 0x0a, 0x19, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, - 0x6f, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x79, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x10, 0xf1, 0x0f, - 0x12, 0x10, 0x0a, 0x0b, 0x69, 0x64, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x10, - 0xf2, 0x0f, 0x12, 0x24, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x6f, 0x6f, - 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x10, 0xf4, 0x0f, 0x12, 0x22, 0x0a, 0x1d, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x10, 0xf5, 0x0f, 0x12, 0x29, 0x0a, 0x24, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x6d, - 0x61, 0x6e, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x66, 0x65, 0x77, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x10, 0xf6, 0x0f, 0x12, 0x16, 0x0a, 0x11, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0xf7, 0x0f, 0x12, - 0x18, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x10, 0xf8, 0x0f, 0x12, 0x22, 0x0a, 0x1d, 0x64, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x10, 0xf9, 0x0f, 0x12, 0x20, 0x0a, - 0x1b, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x10, 0xfa, 0x0f, 0x12, - 0x14, 0x0a, 0x0f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x6c, 0x6f, - 0x6e, 0x67, 0x10, 0xfb, 0x0f, 0x12, 0x16, 0x0a, 0x11, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x10, 0xfc, 0x0f, 0x12, 0x23, 0x0a, - 0x1e, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x66, 0x65, 0x77, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x10, - 0xfd, 0x0f, 0x12, 0x18, 0x0a, 0x13, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x10, 0xfe, 0x0f, 0x12, 0x19, 0x0a, 0x14, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x10, 0xff, 0x0f, 0x12, 0x1c, 0x0a, 0x17, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x66, 0x65, 0x77, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x10, 0x80, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x6f, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x10, 0x81, 0x10, 0x12, 0x1e, - 0x0a, 0x19, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x69, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x10, 0x82, 0x10, 0x12, 0x1b, - 0x0a, 0x16, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x10, 0x83, 0x10, 0x12, 0x32, 0x0a, 0x2d, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x5f, 0x6d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x84, 0x10, 0x12, - 0x1a, 0x0a, 0x15, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x85, 0x10, 0x12, 0x1d, 0x0a, 0x18, 0x69, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x10, 0x86, 0x10, 0x12, 0x1f, 0x0a, 0x1a, 0x64, 0x75, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x10, 0x87, 0x10, 0x12, 0x20, 0x0a, 0x1b, 0x69, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x10, 0x88, 0x10, 0x12, 0x1f, 0x0a, - 0x1a, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x89, 0x10, 0x12, 0x0e, - 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8a, 0x10, 0x12, 0x17, - 0x0a, 0x12, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x10, 0x8b, 0x10, 0x2a, 0x5a, 0x0a, 0x1d, 0x55, 0x6e, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x6e, 0x6f, 0x5f, 0x74, - 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, - 0x6f, 0x64, 0x65, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x17, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x10, 0xac, 0x1b, 0x2a, 0xe2, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x6e, 0x6f, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, - 0x12, 0x13, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x10, 0xa0, 0x1f, 0x12, 0x16, 0x0a, 0x11, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x10, 0xa4, 0x1f, 0x12, 0x13, 0x0a, - 0x0e, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x10, - 0xa5, 0x1f, 0x12, 0x17, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x65, - 0x78, 0x68, 0x61, 0x75, 0x73, 0x74, 0x65, 0x64, 0x10, 0xa6, 0x1f, 0x12, 0x18, 0x0a, 0x13, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x10, 0xa7, 0x1f, 0x12, 0x0c, 0x0a, 0x07, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x10, 0xa8, 0x1f, 0x12, 0x11, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x10, 0xa9, 0x1f, 0x12, 0x10, 0x0a, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xaa, 0x1f, 0x12, 0x0e, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, - 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x10, 0xab, 0x1f, 0x2a, 0x71, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, - 0x12, 0x6e, 0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x10, 0x88, 0x27, 0x12, 0x17, - 0x0a, 0x12, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x8a, 0x27, 0x12, 0x12, 0x0a, 0x0d, 0x75, 0x6e, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x10, 0x8c, 0x27, 0x42, 0x9f, 0x01, 0x0a, 0x0e, - 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x11, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_errors_ignore_proto_rawDesc = "" + + "\n" + + "\x1eopenfga/v1/errors_ignore.proto\x12\n" + + "openfga.v1\x1a.protoc-gen-openapiv2/options/annotations.proto\"\xad\x01\n" + + "\x1eValidationErrorMessageResponse\x12)\n" + + "\x04code\x18\x01 \x01(\x0e2\x15.openfga.v1.ErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:F\x92AC2A{\"code\":\"validation_error\", \"message\":\"Generic validation error\"}\"\x9c\x01\n" + + "\x17UnauthenticatedResponse\x12)\n" + + "\x04code\x18\x01 \x01(\x0e2\x15.openfga.v1.ErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:<\x92A927{\"code\":\"unauthenticated\", \"message\":\"unauthenticated\"}\"\xe1\x01\n" + + "#UnprocessableContentMessageResponse\x12=\n" + + "\x04code\x18\x01 \x01(\x0e2).openfga.v1.UnprocessableContentErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:a\x92A^2\\{\"code\":\"throttled_timeout_error\", \"message\":\"timeout due to throttling on complex request\"}\"\xae\x01\n" + + "\x1cInternalErrorMessageResponse\x121\n" + + "\x04code\x18\x01 \x01(\x0e2\x1d.openfga.v1.InternalErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:A\x92A>2<{\"code\":\"internal_error\", \"message\":\"Internal Server Error\"}\"\xb4\x01\n" + + "\x1fPathUnknownErrorMessageResponse\x121\n" + + "\x04code\x18\x01 \x01(\x0e2\x1d.openfga.v1.NotFoundErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:D\x92AA2?{\"code\":\"undefined_endpoint\", \"message\":\"Endpoint not enabled\"}\"|\n" + + "\x16AbortedMessageResponse\x12\x12\n" + + "\x04code\x18\x01 \x01(\tR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:4\x92A12/{\"code\":\"10\", \"message\":\"transaction conflict\"}\"\x15\n" + + "\x13ErrorMessageRequest\"\xba\x01\n" + + "\x11ForbiddenResponse\x12-\n" + + "\x04code\x18\x01 \x01(\x0e2\x19.openfga.v1.AuthErrorCodeR\x04code\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage:\\\x92AY2W{\"code\":\"forbidden\", \"message\":\"the principal is not authorized to perform the action\"}*\x85\x02\n" + + "\rAuthErrorCode\x12\x11\n" + + "\rno_auth_error\x10\x00\x12 \n" + + "\x1bauth_failed_invalid_subject\x10\xe9\a\x12!\n" + + "\x1cauth_failed_invalid_audience\x10\xea\a\x12\x1f\n" + + "\x1aauth_failed_invalid_issuer\x10\xeb\a\x12\x13\n" + + "\x0einvalid_claims\x10\xec\a\x12%\n" + + " auth_failed_invalid_bearer_token\x10\xed\a\x12\x19\n" + + "\x14bearer_token_missing\x10\xf2\a\x12\x14\n" + + "\x0funauthenticated\x10\xdc\v\x12\x0e\n" + + "\tforbidden\x10\xc0\f*\xa3\f\n" + + "\tErrorCode\x12\f\n" + + "\bno_error\x10\x00\x12\x15\n" + + "\x10validation_error\x10\xd0\x0f\x12\"\n" + + "\x1dauthorization_model_not_found\x10\xd1\x0f\x12/\n" + + "*authorization_model_resolution_too_complex\x10\xd2\x0f\x12\x18\n" + + "\x13invalid_write_input\x10\xd3\x0f\x121\n" + + ",cannot_allow_duplicate_tuples_in_one_request\x10\xd4\x0f\x120\n" + + "+cannot_allow_duplicate_types_in_one_request\x10\xd5\x0f\x125\n" + + "0cannot_allow_multiple_references_to_one_relation\x10\xd6\x0f\x12\x1f\n" + + "\x1ainvalid_continuation_token\x10\xd7\x0f\x12\x16\n" + + "\x11invalid_tuple_set\x10\xd8\x0f\x12\x18\n" + + "\x13invalid_check_input\x10\xd9\x0f\x12\x19\n" + + "\x14invalid_expand_input\x10\xda\x0f\x12\x19\n" + + "\x14unsupported_user_set\x10\xdb\x0f\x12\x1a\n" + + "\x15invalid_object_format\x10\xdc\x0f\x12&\n" + + "!write_failed_due_to_invalid_input\x10\xe1\x0f\x12-\n" + + "(authorization_model_assertions_not_found\x10\xe2\x0f\x12)\n" + + "$latest_authorization_model_not_found\x10\xe4\x0f\x12\x13\n" + + "\x0etype_not_found\x10\xe5\x0f\x12\x17\n" + + "\x12relation_not_found\x10\xe6\x0f\x12\x1e\n" + + "\x19empty_relation_definition\x10\xe7\x0f\x12\x11\n" + + "\finvalid_user\x10\xe9\x0f\x12\x12\n" + + "\rinvalid_tuple\x10\xeb\x0f\x12\x15\n" + + "\x10unknown_relation\x10\xec\x0f\x12\x1c\n" + + "\x17store_id_invalid_length\x10\xee\x0f\x12\x1e\n" + + "\x19assertions_too_many_items\x10\xf1\x0f\x12\x10\n" + + "\vid_too_long\x10\xf2\x0f\x12$\n" + + "\x1fauthorization_model_id_too_long\x10\xf4\x0f\x12\"\n" + + "\x1dtuple_key_value_not_specified\x10\xf5\x0f\x12)\n" + + "$tuple_keys_too_many_or_too_few_items\x10\xf6\x0f\x12\x16\n" + + "\x11page_size_invalid\x10\xf7\x0f\x12\x18\n" + + "\x13param_missing_value\x10\xf8\x0f\x12\"\n" + + "\x1ddifference_base_missing_value\x10\xf9\x0f\x12 \n" + + "\x1bsubtract_base_missing_value\x10\xfa\x0f\x12\x14\n" + + "\x0fobject_too_long\x10\xfb\x0f\x12\x16\n" + + "\x11relation_too_long\x10\xfc\x0f\x12#\n" + + "\x1etype_definitions_too_few_items\x10\xfd\x0f\x12\x18\n" + + "\x13type_invalid_length\x10\xfe\x0f\x12\x19\n" + + "\x14type_invalid_pattern\x10\xff\x0f\x12\x1c\n" + + "\x17relations_too_few_items\x10\x80\x10\x12\x17\n" + + "\x12relations_too_long\x10\x81\x10\x12\x1e\n" + + "\x19relations_invalid_pattern\x10\x82\x10\x12\x1b\n" + + "\x16object_invalid_pattern\x10\x83\x10\x122\n" + + "-query_string_type_continuation_token_mismatch\x10\x84\x10\x12\x1a\n" + + "\x15exceeded_entity_limit\x10\x85\x10\x12\x1d\n" + + "\x18invalid_contextual_tuple\x10\x86\x10\x12\x1f\n" + + "\x1aduplicate_contextual_tuple\x10\x87\x10\x12 \n" + + "\x1binvalid_authorization_model\x10\x88\x10\x12\x1f\n" + + "\x1aunsupported_schema_version\x10\x89\x10\x12\x0e\n" + + "\tcancelled\x10\x8a\x10\x12\x17\n" + + "\x12invalid_start_time\x10\x8b\x10*Z\n" + + "\x1dUnprocessableContentErrorCode\x12\x1b\n" + + "\x17no_throttled_error_code\x10\x00\x12\x1c\n" + + "\x17throttled_timeout_error\x10\xac\x1b*\xe2\x01\n" + + "\x11InternalErrorCode\x12\x15\n" + + "\x11no_internal_error\x10\x00\x12\x13\n" + + "\x0einternal_error\x10\xa0\x1f\x12\x16\n" + + "\x11deadline_exceeded\x10\xa4\x1f\x12\x13\n" + + "\x0ealready_exists\x10\xa5\x1f\x12\x17\n" + + "\x12resource_exhausted\x10\xa6\x1f\x12\x18\n" + + "\x13failed_precondition\x10\xa7\x1f\x12\f\n" + + "\aaborted\x10\xa8\x1f\x12\x11\n" + + "\fout_of_range\x10\xa9\x1f\x12\x10\n" + + "\vunavailable\x10\xaa\x1f\x12\x0e\n" + + "\tdata_loss\x10\xab\x1f*q\n" + + "\x11NotFoundErrorCode\x12\x16\n" + + "\x12no_not_found_error\x10\x00\x12\x17\n" + + "\x12undefined_endpoint\x10\x88'\x12\x17\n" + + "\x12store_id_not_found\x10\x8a'\x12\x12\n" + + "\runimplemented\x10\x8c'B\x9f\x01\n" + + "\x0ecom.openfga.v1B\x11ErrorsIgnoreProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" var ( file_openfga_v1_errors_ignore_proto_rawDescOnce sync.Once - file_openfga_v1_errors_ignore_proto_rawDescData = file_openfga_v1_errors_ignore_proto_rawDesc + file_openfga_v1_errors_ignore_proto_rawDescData []byte ) func file_openfga_v1_errors_ignore_proto_rawDescGZIP() []byte { file_openfga_v1_errors_ignore_proto_rawDescOnce.Do(func() { - file_openfga_v1_errors_ignore_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_errors_ignore_proto_rawDescData) + file_openfga_v1_errors_ignore_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_openfga_v1_errors_ignore_proto_rawDesc), len(file_openfga_v1_errors_ignore_proto_rawDesc))) }) return file_openfga_v1_errors_ignore_proto_rawDescData } var file_openfga_v1_errors_ignore_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_openfga_v1_errors_ignore_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_openfga_v1_errors_ignore_proto_goTypes = []interface{}{ +var file_openfga_v1_errors_ignore_proto_goTypes = []any{ (AuthErrorCode)(0), // 0: openfga.v1.AuthErrorCode (ErrorCode)(0), // 1: openfga.v1.ErrorCode (UnprocessableContentErrorCode)(0), // 2: openfga.v1.UnprocessableContentErrorCode @@ -1160,109 +1007,11 @@ func file_openfga_v1_errors_ignore_proto_init() { if File_openfga_v1_errors_ignore_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_openfga_v1_errors_ignore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidationErrorMessageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnauthenticatedResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnprocessableContentMessageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InternalErrorMessageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PathUnknownErrorMessageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AbortedMessageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorMessageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_errors_ignore_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ForbiddenResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_errors_ignore_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_errors_ignore_proto_rawDesc), len(file_openfga_v1_errors_ignore_proto_rawDesc)), NumEnums: 5, NumMessages: 8, NumExtensions: 0, @@ -1274,7 +1023,6 @@ func file_openfga_v1_errors_ignore_proto_init() { MessageInfos: file_openfga_v1_errors_ignore_proto_msgTypes, }.Build() File_openfga_v1_errors_ignore_proto = out.File - file_openfga_v1_errors_ignore_proto_rawDesc = nil file_openfga_v1_errors_ignore_proto_goTypes = nil file_openfga_v1_errors_ignore_proto_depIdxs = nil } diff --git a/proto/openfga/v1/openapi.pb.go b/proto/openfga/v1/openapi.pb.go index d6496ef6..8fdc1d01 100644 --- a/proto/openfga/v1/openapi.pb.go +++ b/proto/openfga/v1/openapi.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/openapi.proto @@ -11,6 +11,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -22,85 +23,41 @@ const ( var File_openfga_v1_openapi_proto protoreflect.FileDescriptor -var file_openfga_v1_openapi_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, - 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0xc3, 0x08, 0x92, 0x41, 0xa5, 0x07, 0x12, 0x80, 0x02, - 0x0a, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x12, 0x75, 0x41, 0x20, 0x68, 0x69, 0x67, - 0x68, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x66, 0x6c, 0x65, 0x78, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x5a, 0x61, 0x6e, 0x7a, 0x69, 0x62, 0x61, 0x72, 0x2e, - 0x22, 0x35, 0x0a, 0x07, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x12, 0x13, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x64, 0x65, 0x76, - 0x1a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x40, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x64, 0x65, 0x76, 0x2a, 0x42, 0x0a, 0x0a, 0x41, 0x70, 0x61, 0x63, 0x68, - 0x65, 0x2d, 0x32, 0x2e, 0x30, 0x12, 0x34, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, - 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x32, 0x03, 0x31, 0x2e, 0x78, - 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x5d, 0x0a, 0x03, 0x34, 0x30, 0x30, 0x12, 0x56, - 0x0a, 0x24, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x20, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x12, 0x2e, 0x0a, 0x2c, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x44, 0x0a, 0x03, 0x34, 0x30, 0x31, 0x12, 0x3d, 0x0a, - 0x12, 0x4e, 0x6f, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x12, 0x27, 0x0a, 0x25, 0x1a, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x36, 0x0a, 0x03, - 0x34, 0x30, 0x33, 0x12, 0x2f, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, - 0x2e, 0x12, 0x21, 0x0a, 0x1f, 0x1a, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x5f, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x58, 0x0a, 0x25, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x64, 0x75, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x70, - 0x61, 0x74, 0x68, 0x2e, 0x12, 0x2f, 0x0a, 0x2d, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x60, 0x0a, 0x03, 0x34, 0x30, 0x39, 0x12, 0x59, 0x0a, 0x2f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x20, 0x64, 0x75, 0x65, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x2e, 0x12, - 0x26, 0x0a, 0x24, 0x1a, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x74, 0x0a, 0x03, 0x34, 0x32, 0x32, 0x12, 0x6d, - 0x0a, 0x36, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x64, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x63, 0x65, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x72, - 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x12, 0x33, 0x0a, 0x31, 0x1a, 0x2f, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x63, 0x0a, - 0x03, 0x35, 0x30, 0x30, 0x12, 0x5c, 0x0a, 0x2c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x2e, 0x12, 0x2c, 0x0a, 0x2a, 0x1a, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x42, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, - 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_openapi_proto_rawDesc = "" + + "\n" + + "\x18openfga/v1/openapi.proto\x12\n" + + "openfga.v1\x1a.protoc-gen-openapiv2/options/annotations.protoB\xc3\b\x92A\xa5\a\x12\x80\x02\n" + + "\aOpenFGA\x12uA high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar.\"5\n" + + "\aOpenFGA\x12\x13https://openfga.dev\x1a\x15community@openfga.dev*B\n" + + "\n" + + "Apache-2.0\x124https://github.com/openfga/openfga/blob/main/LICENSE2\x031.x*\x01\x022\x10application/json:\x10application/jsonR]\n" + + "\x03400\x12V\n" + + "$Request failed due to invalid input.\x12.\n" + + ",\x1a*.openfga.v1.ValidationErrorMessageResponseRD\n" + + "\x03401\x12=\n" + + "\x12Not authenticated.\x12'\n" + + "%\x1a#.openfga.v1.UnauthenticatedResponseR6\n" + + "\x03403\x12/\n" + + "\n" + + "Forbidden.\x12!\n" + + "\x1f\x1a\x1d.openfga.v1.ForbiddenResponseR_\n" + + "\x03404\x12X\n" + + "%Request failed due to incorrect path.\x12/\n" + + "-\x1a+.openfga.v1.PathUnknownErrorMessageResponseR`\n" + + "\x03409\x12Y\n" + + "/Request was aborted due a transaction conflict.\x12&\n" + + "$\x1a\".openfga.v1.AbortedMessageResponseRt\n" + + "\x03422\x12m\n" + + "6Request timed out due to excessive request throttling.\x123\n" + + "1\x1a/.openfga.v1.UnprocessableContentMessageResponseRc\n" + + "\x03500\x12\\\n" + + ",Request failed due to internal server error.\x12,\n" + + "*\x1a(.openfga.v1.InternalErrorMessageResponse\n" + + "\x0ecom.openfga.v1B\fOpenapiProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" -var file_openfga_v1_openapi_proto_goTypes = []interface{}{} +var file_openfga_v1_openapi_proto_goTypes = []any{} var file_openfga_v1_openapi_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type @@ -118,7 +75,7 @@ func file_openfga_v1_openapi_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_openapi_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_openapi_proto_rawDesc), len(file_openfga_v1_openapi_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -128,7 +85,6 @@ func file_openfga_v1_openapi_proto_init() { DependencyIndexes: file_openfga_v1_openapi_proto_depIdxs, }.Build() File_openfga_v1_openapi_proto = out.File - file_openfga_v1_openapi_proto_rawDesc = nil file_openfga_v1_openapi_proto_goTypes = nil file_openfga_v1_openapi_proto_depIdxs = nil } diff --git a/proto/openfga/v1/openfga.pb.go b/proto/openfga/v1/openfga.pb.go index 74fc0d12..a664aee8 100644 --- a/proto/openfga/v1/openfga.pb.go +++ b/proto/openfga/v1/openfga.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/openfga.proto @@ -16,6 +16,7 @@ import ( timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -78,21 +79,18 @@ func (TupleOperation) EnumDescriptor() ([]byte, []int) { // // See https://openfga.dev/docs/concepts#what-is-an-object type Object struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Object) Reset() { *x = Object{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Object) String() string { @@ -103,7 +101,7 @@ func (*Object) ProtoMessage() {} func (x *Object) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -141,25 +139,22 @@ func (x *Object) GetId() string { // // See https://openfga.dev/docs/concepts#what-is-a-user type User struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to User: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to User: // // *User_Object // *User_Userset // *User_Wildcard - User isUser_User `protobuf_oneof:"user"` + User isUser_User `protobuf_oneof:"user"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *User) Reset() { *x = User{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *User) String() string { @@ -170,7 +165,7 @@ func (*User) ProtoMessage() {} func (x *User) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -185,30 +180,36 @@ func (*User) Descriptor() ([]byte, []int) { return file_openfga_v1_openfga_proto_rawDescGZIP(), []int{1} } -func (m *User) GetUser() isUser_User { - if m != nil { - return m.User +func (x *User) GetUser() isUser_User { + if x != nil { + return x.User } return nil } func (x *User) GetObject() *Object { - if x, ok := x.GetUser().(*User_Object); ok { - return x.Object + if x != nil { + if x, ok := x.User.(*User_Object); ok { + return x.Object + } } return nil } func (x *User) GetUserset() *UsersetUser { - if x, ok := x.GetUser().(*User_Userset); ok { - return x.Userset + if x != nil { + if x, ok := x.User.(*User_Userset); ok { + return x.Userset + } } return nil } func (x *User) GetWildcard() *TypedWildcard { - if x, ok := x.GetUser().(*User_Wildcard); ok { - return x.Wildcard + if x != nil { + if x, ok := x.User.(*User_Wildcard); ok { + return x.Wildcard + } } return nil } @@ -243,22 +244,19 @@ func (*User_Wildcard) isUser_User() {} // // See: https://openfga.dev/docs/modeling/building-blocks/usersets#what-is-a-userset type UsersetUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Relation string `protobuf:"bytes,3,opt,name=relation,proto3" json:"relation,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Relation string `protobuf:"bytes,3,opt,name=relation,proto3" json:"relation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetUser) Reset() { *x = UsersetUser{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetUser) String() string { @@ -269,7 +267,7 @@ func (*UsersetUser) ProtoMessage() {} func (x *UsersetUser) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -306,25 +304,22 @@ func (x *UsersetUser) GetRelation() string { } type RelationshipCondition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // A reference (by name) of the relationship condition defined in the authorization model. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Additional context/data to persist along with the condition. // The keys must match the parameters defined by the condition, and the value types must // match the parameter type definitions. - Context *structpb.Struct `protobuf:"bytes,2,opt,name=context,proto3" json:"context,omitempty"` + Context *structpb.Struct `protobuf:"bytes,2,opt,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RelationshipCondition) Reset() { *x = RelationshipCondition{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RelationshipCondition) String() string { @@ -335,7 +330,7 @@ func (*RelationshipCondition) ProtoMessage() {} func (x *RelationshipCondition) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -365,22 +360,19 @@ func (x *RelationshipCondition) GetContext() *structpb.Struct { } type TupleKeyWithoutCondition struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TupleKeyWithoutCondition) Reset() { *x = TupleKeyWithoutCondition{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TupleKeyWithoutCondition) String() string { @@ -391,7 +383,7 @@ func (*TupleKeyWithoutCondition) ProtoMessage() {} func (x *TupleKeyWithoutCondition) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -435,20 +427,17 @@ func (x *TupleKeyWithoutCondition) GetObject() string { // // See https://openfga.dev/docs/concepts#what-is-type-bound-public-access type TypedWildcard struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TypedWildcard) Reset() { *x = TypedWildcard{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TypedWildcard) String() string { @@ -459,7 +448,7 @@ func (*TypedWildcard) ProtoMessage() {} func (x *TypedWildcard) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -482,23 +471,20 @@ func (x *TypedWildcard) GetType() string { } type TupleKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + Condition *RelationshipCondition `protobuf:"bytes,4,opt,name=condition,proto3" json:"condition,omitempty"` unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` - Condition *RelationshipCondition `protobuf:"bytes,4,opt,name=condition,proto3" json:"condition,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TupleKey) Reset() { *x = TupleKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TupleKey) String() string { @@ -509,7 +495,7 @@ func (*TupleKey) ProtoMessage() {} func (x *TupleKey) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -553,21 +539,18 @@ func (x *TupleKey) GetCondition() *RelationshipCondition { } type Tuple struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *TupleKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Key *TupleKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Tuple) Reset() { *x = Tuple{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Tuple) String() string { @@ -578,7 +561,7 @@ func (*Tuple) ProtoMessage() {} func (x *Tuple) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -608,20 +591,17 @@ func (x *Tuple) GetTimestamp() *timestamppb.Timestamp { } type TupleKeys struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` unknownFields protoimpl.UnknownFields - - TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TupleKeys) Reset() { *x = TupleKeys{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TupleKeys) String() string { @@ -632,7 +612,7 @@ func (*TupleKeys) ProtoMessage() {} func (x *TupleKeys) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -655,20 +635,17 @@ func (x *TupleKeys) GetTupleKeys() []*TupleKey { } type ContextualTupleKeys struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` unknownFields protoimpl.UnknownFields - - TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ContextualTupleKeys) Reset() { *x = ContextualTupleKeys{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContextualTupleKeys) String() string { @@ -679,7 +656,7 @@ func (*ContextualTupleKeys) ProtoMessage() {} func (x *ContextualTupleKeys) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -703,20 +680,17 @@ func (x *ContextualTupleKeys) GetTupleKeys() []*TupleKey { // A UsersetTree contains the result of an Expansion. type UsersetTree struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Root *UsersetTree_Node `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"` unknownFields protoimpl.UnknownFields - - Root *UsersetTree_Node `protobuf:"bytes,1,opt,name=root,proto3" json:"root,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree) Reset() { *x = UsersetTree{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree) String() string { @@ -727,7 +701,7 @@ func (*UsersetTree) ProtoMessage() {} func (x *UsersetTree) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -750,22 +724,19 @@ func (x *UsersetTree) GetRoot() *UsersetTree_Node { } type TupleChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TupleKey *TupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` + Operation TupleOperation `protobuf:"varint,2,opt,name=operation,proto3,enum=openfga.v1.TupleOperation" json:"operation,omitempty"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - TupleKey *TupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` - Operation TupleOperation `protobuf:"varint,2,opt,name=operation,proto3,enum=openfga.v1.TupleOperation" json:"operation,omitempty"` - Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TupleChange) Reset() { *x = TupleChange{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TupleChange) String() string { @@ -776,7 +747,7 @@ func (*TupleChange) ProtoMessage() {} func (x *TupleChange) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -813,24 +784,21 @@ func (x *TupleChange) GetTimestamp() *timestamppb.Timestamp { } type Store struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` + DeletedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=deleted_at,proto3" json:"deleted_at,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` - DeletedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=deleted_at,proto3" json:"deleted_at,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Store) Reset() { *x = Store{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Store) String() string { @@ -841,7 +809,7 @@ func (*Store) ProtoMessage() {} func (x *Store) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -892,21 +860,18 @@ func (x *Store) GetDeletedAt() *timestamppb.Timestamp { } type UserTypeFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UserTypeFilter) Reset() { *x = UserTypeFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UserTypeFilter) String() string { @@ -917,7 +882,7 @@ func (*UserTypeFilter) ProtoMessage() {} func (x *UserTypeFilter) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -954,25 +919,22 @@ func (x *UserTypeFilter) GetRelation() string { // - a tupleToUserset nodes, containing the result of expanding // a tupleToUserset value in a authorization model. type UsersetTree_Leaf struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Value: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Value: // // *UsersetTree_Leaf_Users // *UsersetTree_Leaf_Computed // *UsersetTree_Leaf_TupleToUserset - Value isUsersetTree_Leaf_Value `protobuf_oneof:"value"` + Value isUsersetTree_Leaf_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Leaf) Reset() { *x = UsersetTree_Leaf{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Leaf) String() string { @@ -983,7 +945,7 @@ func (*UsersetTree_Leaf) ProtoMessage() {} func (x *UsersetTree_Leaf) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -998,30 +960,36 @@ func (*UsersetTree_Leaf) Descriptor() ([]byte, []int) { return file_openfga_v1_openfga_proto_rawDescGZIP(), []int{10, 0} } -func (m *UsersetTree_Leaf) GetValue() isUsersetTree_Leaf_Value { - if m != nil { - return m.Value +func (x *UsersetTree_Leaf) GetValue() isUsersetTree_Leaf_Value { + if x != nil { + return x.Value } return nil } func (x *UsersetTree_Leaf) GetUsers() *UsersetTree_Users { - if x, ok := x.GetValue().(*UsersetTree_Leaf_Users); ok { - return x.Users + if x != nil { + if x, ok := x.Value.(*UsersetTree_Leaf_Users); ok { + return x.Users + } } return nil } func (x *UsersetTree_Leaf) GetComputed() *UsersetTree_Computed { - if x, ok := x.GetValue().(*UsersetTree_Leaf_Computed); ok { - return x.Computed + if x != nil { + if x, ok := x.Value.(*UsersetTree_Leaf_Computed); ok { + return x.Computed + } } return nil } func (x *UsersetTree_Leaf) GetTupleToUserset() *UsersetTree_TupleToUserset { - if x, ok := x.GetValue().(*UsersetTree_Leaf_TupleToUserset); ok { - return x.TupleToUserset + if x != nil { + if x, ok := x.Value.(*UsersetTree_Leaf_TupleToUserset); ok { + return x.TupleToUserset + } } return nil } @@ -1049,20 +1017,17 @@ func (*UsersetTree_Leaf_Computed) isUsersetTree_Leaf_Value() {} func (*UsersetTree_Leaf_TupleToUserset) isUsersetTree_Leaf_Value() {} type UsersetTree_Nodes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Nodes []*UsersetTree_Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` unknownFields protoimpl.UnknownFields - - Nodes []*UsersetTree_Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Nodes) Reset() { *x = UsersetTree_Nodes{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Nodes) String() string { @@ -1073,7 +1038,7 @@ func (*UsersetTree_Nodes) ProtoMessage() {} func (x *UsersetTree_Nodes) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1096,20 +1061,17 @@ func (x *UsersetTree_Nodes) GetNodes() []*UsersetTree_Node { } type UsersetTree_Users struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Users []string `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` unknownFields protoimpl.UnknownFields - - Users []string `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Users) Reset() { *x = UsersetTree_Users{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Users) String() string { @@ -1120,7 +1082,7 @@ func (*UsersetTree_Users) ProtoMessage() {} func (x *UsersetTree_Users) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1143,20 +1105,17 @@ func (x *UsersetTree_Users) GetUsers() []string { } type UsersetTree_Computed struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Userset string `protobuf:"bytes,1,opt,name=userset,proto3" json:"userset,omitempty"` unknownFields protoimpl.UnknownFields - - Userset string `protobuf:"bytes,1,opt,name=userset,proto3" json:"userset,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Computed) Reset() { *x = UsersetTree_Computed{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Computed) String() string { @@ -1167,7 +1126,7 @@ func (*UsersetTree_Computed) ProtoMessage() {} func (x *UsersetTree_Computed) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1190,21 +1149,18 @@ func (x *UsersetTree_Computed) GetUserset() string { } type UsersetTree_TupleToUserset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tupleset string `protobuf:"bytes,1,opt,name=tupleset,proto3" json:"tupleset,omitempty"` + Computed []*UsersetTree_Computed `protobuf:"bytes,2,rep,name=computed,proto3" json:"computed,omitempty"` unknownFields protoimpl.UnknownFields - - Tupleset string `protobuf:"bytes,1,opt,name=tupleset,proto3" json:"tupleset,omitempty"` - Computed []*UsersetTree_Computed `protobuf:"bytes,2,rep,name=computed,proto3" json:"computed,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree_TupleToUserset) Reset() { *x = UsersetTree_TupleToUserset{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_TupleToUserset) String() string { @@ -1215,7 +1171,7 @@ func (*UsersetTree_TupleToUserset) ProtoMessage() {} func (x *UsersetTree_TupleToUserset) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1245,21 +1201,18 @@ func (x *UsersetTree_TupleToUserset) GetComputed() []*UsersetTree_Computed { } type UsersetTree_Difference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Base *UsersetTree_Node `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` + Subtract *UsersetTree_Node `protobuf:"bytes,2,opt,name=subtract,proto3" json:"subtract,omitempty"` unknownFields protoimpl.UnknownFields - - Base *UsersetTree_Node `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` - Subtract *UsersetTree_Node `protobuf:"bytes,2,opt,name=subtract,proto3" json:"subtract,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Difference) Reset() { *x = UsersetTree_Difference{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Difference) String() string { @@ -1270,7 +1223,7 @@ func (*UsersetTree_Difference) ProtoMessage() {} func (x *UsersetTree_Difference) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1300,27 +1253,24 @@ func (x *UsersetTree_Difference) GetSubtract() *UsersetTree_Node { } type UsersetTree_Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are assignable to Value: + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Types that are valid to be assigned to Value: // // *UsersetTree_Node_Leaf // *UsersetTree_Node_Difference // *UsersetTree_Node_Union // *UsersetTree_Node_Intersection - Value isUsersetTree_Node_Value `protobuf_oneof:"value"` + Value isUsersetTree_Node_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UsersetTree_Node) Reset() { *x = UsersetTree_Node{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UsersetTree_Node) String() string { @@ -1331,7 +1281,7 @@ func (*UsersetTree_Node) ProtoMessage() {} func (x *UsersetTree_Node) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1353,37 +1303,45 @@ func (x *UsersetTree_Node) GetName() string { return "" } -func (m *UsersetTree_Node) GetValue() isUsersetTree_Node_Value { - if m != nil { - return m.Value +func (x *UsersetTree_Node) GetValue() isUsersetTree_Node_Value { + if x != nil { + return x.Value } return nil } func (x *UsersetTree_Node) GetLeaf() *UsersetTree_Leaf { - if x, ok := x.GetValue().(*UsersetTree_Node_Leaf); ok { - return x.Leaf + if x != nil { + if x, ok := x.Value.(*UsersetTree_Node_Leaf); ok { + return x.Leaf + } } return nil } func (x *UsersetTree_Node) GetDifference() *UsersetTree_Difference { - if x, ok := x.GetValue().(*UsersetTree_Node_Difference); ok { - return x.Difference + if x != nil { + if x, ok := x.Value.(*UsersetTree_Node_Difference); ok { + return x.Difference + } } return nil } func (x *UsersetTree_Node) GetUnion() *UsersetTree_Nodes { - if x, ok := x.GetValue().(*UsersetTree_Node_Union); ok { - return x.Union + if x != nil { + if x, ok := x.Value.(*UsersetTree_Node_Union); ok { + return x.Union + } } return nil } func (x *UsersetTree_Node) GetIntersection() *UsersetTree_Nodes { - if x, ok := x.GetValue().(*UsersetTree_Node_Intersection); ok { - return x.Intersection + if x != nil { + if x, ok := x.Value.(*UsersetTree_Node_Intersection); ok { + return x.Intersection + } } return nil } @@ -1418,254 +1376,121 @@ func (*UsersetTree_Node_Intersection) isUsersetTree_Node_Value() {} var File_openfga_v1_openfga_proto protoreflect.FileDescriptor -var file_openfga_v1_openfga_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, - 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x9e, 0x01, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, - 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, - 0x35, 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x51, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x41, 0x92, 0x41, 0x28, 0x4a, 0x26, - 0x22, 0x30, 0x62, 0x63, 0x64, 0x66, 0x36, 0x66, 0x61, 0x2d, 0x61, 0x36, 0x61, 0x61, 0x2d, 0x34, - 0x37, 0x33, 0x30, 0x2d, 0x61, 0x38, 0x65, 0x62, 0x2d, 0x39, 0x63, 0x66, 0x31, 0x37, 0x32, 0x66, - 0x66, 0x31, 0x36, 0x64, 0x39, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x10, 0x72, 0x0e, 0x32, 0x09, - 0x5b, 0x5e, 0x23, 0x3a, 0x5c, 0x73, 0x5d, 0x2b, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x02, 0x69, 0x64, - 0x22, 0xaa, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x06, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, - 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x12, 0x37, 0x0a, 0x08, - 0x77, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x64, 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, 0x69, 0x6c, - 0x64, 0x63, 0x61, 0x72, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0xc7, 0x01, - 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x3e, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x09, - 0x4a, 0x07, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, - 0x16, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, - 0x35, 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x07, 0x4a, 0x05, - 0x22, 0x66, 0x67, 0x61, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x10, 0x72, 0x0e, 0x32, 0x09, 0x5b, - 0x5e, 0x23, 0x3a, 0x5c, 0x73, 0x5d, 0x2b, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x46, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, - 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8f, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x43, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x2f, 0x92, 0x41, 0x11, 0x4a, 0x0c, 0x22, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x31, 0x22, 0x78, 0x80, 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x0e, 0x5e, - 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x00, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0xeb, 0x01, 0x0a, 0x18, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x10, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, - 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0x92, 0x41, - 0x0c, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xe0, 0x41, 0x02, - 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, - 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x39, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x22, 0x78, 0x80, 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x0e, 0x5e, 0x5b, - 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, - 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x52, 0x0a, 0x0d, 0x54, 0x79, 0x70, 0x65, 0x64, - 0x57, 0x69, 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x65, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, 0x16, 0x32, - 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, - 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x08, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0x92, 0x41, 0x10, 0x4a, 0x0b, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x08, 0x72, 0x06, 0x28, 0x80, 0x04, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x48, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0c, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, - 0x78, 0x32, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, - 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x06, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x39, 0x92, 0x41, 0x1b, 0x4a, 0x16, - 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, - 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x78, 0x80, 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, - 0x13, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, - 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3f, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7b, 0x0a, - 0x05, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x54, 0x0a, 0x09, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x22, 0x5e, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa0, 0x01, 0x64, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, - 0x01, 0x02, 0x10, 0x64, 0x52, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x22, 0xe9, 0x07, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, - 0x12, 0x30, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x72, 0x6f, - 0x6f, 0x74, 0x1a, 0xda, 0x01, 0x0a, 0x04, 0x4c, 0x65, 0x61, 0x66, 0x12, 0x35, 0x0a, 0x05, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, - 0x72, 0x65, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x05, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x64, 0x12, 0x52, 0x0a, 0x10, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x65, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x54, 0x6f, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x40, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, - 0x73, 0x1a, 0x22, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x1a, 0x31, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x64, 0x12, 0x25, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x00, 0x52, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x1a, 0x7c, 0x0a, 0x0e, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x08, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xd0, 0x01, 0x00, 0x52, 0x08, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x65, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x1a, 0x92, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, - 0x62, 0x61, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x1a, 0x9e, 0x02, 0x0a, 0x04, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, - 0x04, 0x6c, 0x65, 0x61, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, - 0x54, 0x72, 0x65, 0x65, 0x2e, 0x4c, 0x65, 0x61, 0x66, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x65, 0x61, - 0x66, 0x12, 0x44, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x44, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x43, - 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x2e, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd4, 0x01, 0x0a, - 0x0b, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x09, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, - 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, - 0x70, 0x6c, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x22, 0x83, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0xd0, 0x01, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3a, 0x0a, - 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x0e, 0x55, 0x73, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x09, 0x4a, - 0x07, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x18, 0x72, 0x16, - 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, - 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, - 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xfa, 0x42, 0x17, - 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, - 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2a, 0x47, 0x0a, 0x0e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x5f, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x00, 0x12, 0x1a, - 0x0a, 0x16, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x42, 0x9a, 0x01, 0x0a, 0x0e, 0x63, - 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x4f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_openfga_proto_rawDesc = "" + + "\n" + + "\x18openfga/v1/openfga.proto\x12\n" + + "openfga.v1\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"\x9e\x01\n" + + "\x06Object\x12A\n" + + "\x04type\x18\x01 \x01(\tB-\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\x12Q\n" + + "\x02id\x18\x02 \x01(\tBA\x92A(J&\"0bcdf6fa-a6aa-4730-a8eb-9cf172ff16d9\"\xe0A\x02\xfaB\x10r\x0e2\t[^#:\\s]+$\xd0\x01\x00R\x02id\"\xaa\x01\n" + + "\x04User\x12,\n" + + "\x06object\x18\x01 \x01(\v2\x12.openfga.v1.ObjectH\x00R\x06object\x123\n" + + "\auserset\x18\x02 \x01(\v2\x17.openfga.v1.UsersetUserH\x00R\auserset\x127\n" + + "\bwildcard\x18\x03 \x01(\v2\x19.openfga.v1.TypedWildcardH\x00R\bwildcardB\x06\n" + + "\x04user\"\xc7\x01\n" + + "\vUsersetUser\x12>\n" + + "\x04type\x18\x01 \x01(\tB*\x92A\tJ\a\"group\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\x120\n" + + "\x02id\x18\x02 \x01(\tB \x92A\aJ\x05\"fga\"\xe0A\x02\xfaB\x10r\x0e2\t[^#:\\s]+$\xd0\x01\x00R\x02id\x12F\n" + + "\brelation\x18\x03 \x01(\tB*\x92A\n" + + "J\b\"member\"\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation\"\x8f\x01\n" + + "\x15RelationshipCondition\x12C\n" + + "\x04name\x18\x01 \x01(\tB/\x92A\x11J\f\"condition1\"x\x80\x02\xe0A\x02\xfaB\x15r\x132\x0e^[^\\s]{2,256}$\xd0\x01\x00R\x04name\x121\n" + + "\acontext\x18\x02 \x01(\v2\x17.google.protobuf.StructR\acontext\"\xeb\x01\n" + + "\x18TupleKeyWithoutCondition\x122\n" + + "\x04user\x18\x01 \x01(\tB\x1e\x92A\x10J\v\"user:anne\"x\x80\x04\xe0A\x02\xfaB\x05r\x03(\x80\x04R\x04user\x12H\n" + + "\brelation\x18\x02 \x01(\tB,\x92A\fJ\b\"reader\"x2\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation\x12Q\n" + + "\x06object\x18\x03 \x01(\tB9\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xe0A\x02\xfaB\x15r\x132\x0e^[^\\s]{2,256}$\xd0\x01\x01R\x06object\"R\n" + + "\rTypedWildcard\x12A\n" + + "\x04type\x18\x01 \x01(\tB-\x92A\fJ\n" + + "\"employee\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\"\x9f\x02\n" + + "\bTupleKey\x125\n" + + "\x04user\x18\x01 \x01(\tB!\x92A\x10J\v\"user:anne\"x\x80\x04\xe0A\x02\xfaB\br\x06(\x80\x04\xd0\x01\x00R\x04user\x12H\n" + + "\brelation\x18\x02 \x01(\tB,\x92A\fJ\b\"reader\"x2\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation\x12Q\n" + + "\x06object\x18\x03 \x01(\tB9\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xe0A\x02\xfaB\x15r\x132\x0e^[^\\s]{2,256}$\xd0\x01\x01R\x06object\x12?\n" + + "\tcondition\x18\x04 \x01(\v2!.openfga.v1.RelationshipConditionR\tcondition\"{\n" + + "\x05Tuple\x123\n" + + "\x03key\x18\x01 \x01(\v2\x14.openfga.v1.TupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x03key\x12=\n" + + "\ttimestamp\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\ttimestamp\"T\n" + + "\tTupleKeys\x12G\n" + + "\n" + + "tuple_keys\x18\x01 \x03(\v2\x14.openfga.v1.TupleKeyB\x11\x92A\x03\xa8\x01\x01\xe0A\x02\xfaB\x05\x92\x01\x02\b\x01R\n" + + "tuple_keys\"^\n" + + "\x13ContextualTupleKeys\x12G\n" + + "\n" + + "tuple_keys\x18\x01 \x03(\v2\x14.openfga.v1.TupleKeyB\x11\x92A\x03\xa0\x01d\xe0A\x02\xfaB\x05\x92\x01\x02\x10dR\n" + + "tuple_keys\"\xe9\a\n" + + "\vUsersetTree\x120\n" + + "\x04root\x18\x01 \x01(\v2\x1c.openfga.v1.UsersetTree.NodeR\x04root\x1a\xda\x01\n" + + "\x04Leaf\x125\n" + + "\x05users\x18\x01 \x01(\v2\x1d.openfga.v1.UsersetTree.UsersH\x00R\x05users\x12>\n" + + "\bcomputed\x18\x02 \x01(\v2 .openfga.v1.UsersetTree.ComputedH\x00R\bcomputed\x12R\n" + + "\x10tuple_to_userset\x18\x03 \x01(\v2&.openfga.v1.UsersetTree.TupleToUsersetH\x00R\x0etupleToUsersetB\a\n" + + "\x05value\x1a@\n" + + "\x05Nodes\x127\n" + + "\x05nodes\x18\x01 \x03(\v2\x1c.openfga.v1.UsersetTree.NodeB\x03\xe0A\x02R\x05nodes\x1a\"\n" + + "\x05Users\x12\x19\n" + + "\x05users\x18\x01 \x03(\tB\x03\xe0A\x02R\x05users\x1a1\n" + + "\bComputed\x12%\n" + + "\auserset\x18\x01 \x01(\tB\v\xe0A\x02\xfaB\x05r\x03\xd0\x01\x00R\auserset\x1a|\n" + + "\x0eTupleToUserset\x12'\n" + + "\btupleset\x18\x01 \x01(\tB\v\xe0A\x02\xfaB\x05r\x03\xd0\x01\x00R\btupleset\x12A\n" + + "\bcomputed\x18\x02 \x03(\v2 .openfga.v1.UsersetTree.ComputedB\x03\xe0A\x02R\bcomputed\x1a\x92\x01\n" + + "\n" + + "Difference\x12=\n" + + "\x04base\x18\x01 \x01(\v2\x1c.openfga.v1.UsersetTree.NodeB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x04base\x12E\n" + + "\bsubtract\x18\x02 \x01(\v2\x1c.openfga.v1.UsersetTree.NodeB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\bsubtract\x1a\x9e\x02\n" + + "\x04Node\x12\x17\n" + + "\x04name\x18\x01 \x01(\tB\x03\xe0A\x02R\x04name\x122\n" + + "\x04leaf\x18\x02 \x01(\v2\x1c.openfga.v1.UsersetTree.LeafH\x00R\x04leaf\x12D\n" + + "\n" + + "difference\x18\x05 \x01(\v2\".openfga.v1.UsersetTree.DifferenceH\x00R\n" + + "difference\x125\n" + + "\x05union\x18\x06 \x01(\v2\x1d.openfga.v1.UsersetTree.NodesH\x00R\x05union\x12C\n" + + "\fintersection\x18\a \x01(\v2\x1d.openfga.v1.UsersetTree.NodesH\x00R\fintersectionB\a\n" + + "\x05value\"\xd4\x01\n" + + "\vTupleChange\x12?\n" + + "\ttuple_key\x18\x01 \x01(\v2\x14.openfga.v1.TupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\ttuple_key\x12E\n" + + "\toperation\x18\x02 \x01(\x0e2\x1a.openfga.v1.TupleOperationB\v\xe0A\x02\xfaB\x05\x82\x01\x02\x10\x01R\toperation\x12=\n" + + "\ttimestamp\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\ttimestamp\"\x83\x02\n" + + "\x05Store\x12\x1b\n" + + "\x02id\x18\x01 \x01(\tB\v\xe0A\x02\xfaB\x05r\x03\xd0\x01\x00R\x02id\x12\x1f\n" + + "\x04name\x18\x02 \x01(\tB\v\xe0A\x02\xfaB\x05r\x03\xd0\x01\x00R\x04name\x12?\n" + + "\n" + + "created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "created_at\x12?\n" + + "\n" + + "updated_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "updated_at\x12:\n" + + "\n" + + "deleted_at\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\n" + + "deleted_at\"\x95\x01\n" + + "\x0eUserTypeFilter\x12>\n" + + "\x04type\x18\x01 \x01(\tB*\x92A\tJ\a\"group\"\xe0A\x02\xfaB\x18r\x162\x11^[^:#@\\s]{1,254}$\xd0\x01\x00R\x04type\x12C\n" + + "\brelation\x18\x02 \x01(\tB'\x92A\n" + + "J\b\"member\"\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation*G\n" + + "\x0eTupleOperation\x12\x19\n" + + "\x15TUPLE_OPERATION_WRITE\x10\x00\x12\x1a\n" + + "\x16TUPLE_OPERATION_DELETE\x10\x01B\x9a\x01\n" + + "\x0ecom.openfga.v1B\fOpenfgaProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" var ( file_openfga_v1_openfga_proto_rawDescOnce sync.Once - file_openfga_v1_openfga_proto_rawDescData = file_openfga_v1_openfga_proto_rawDesc + file_openfga_v1_openfga_proto_rawDescData []byte ) func file_openfga_v1_openfga_proto_rawDescGZIP() []byte { file_openfga_v1_openfga_proto_rawDescOnce.Do(func() { - file_openfga_v1_openfga_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_openfga_proto_rawDescData) + file_openfga_v1_openfga_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_proto_rawDesc), len(file_openfga_v1_openfga_proto_rawDesc))) }) return file_openfga_v1_openfga_proto_rawDescData } var file_openfga_v1_openfga_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_openfga_v1_openfga_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_openfga_v1_openfga_proto_goTypes = []interface{}{ +var file_openfga_v1_openfga_proto_goTypes = []any{ (TupleOperation)(0), // 0: openfga.v1.TupleOperation (*Object)(nil), // 1: openfga.v1.Object (*User)(nil), // 2: openfga.v1.User @@ -1731,271 +1556,17 @@ func file_openfga_v1_openfga_proto_init() { if File_openfga_v1_openfga_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_openfga_v1_openfga_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*User); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetUser); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RelationshipCondition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TupleKeyWithoutCondition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TypedWildcard); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TupleKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tuple); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TupleKeys); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContextualTupleKeys); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TupleChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Store); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserTypeFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Leaf); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Nodes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Users); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Computed); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_TupleToUserset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Difference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsersetTree_Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_openfga_v1_openfga_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_openfga_v1_openfga_proto_msgTypes[1].OneofWrappers = []any{ (*User_Object)(nil), (*User_Userset)(nil), (*User_Wildcard)(nil), } - file_openfga_v1_openfga_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_openfga_v1_openfga_proto_msgTypes[14].OneofWrappers = []any{ (*UsersetTree_Leaf_Users)(nil), (*UsersetTree_Leaf_Computed)(nil), (*UsersetTree_Leaf_TupleToUserset)(nil), } - file_openfga_v1_openfga_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_openfga_v1_openfga_proto_msgTypes[20].OneofWrappers = []any{ (*UsersetTree_Node_Leaf)(nil), (*UsersetTree_Node_Difference)(nil), (*UsersetTree_Node_Union)(nil), @@ -2005,7 +1576,7 @@ func file_openfga_v1_openfga_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_openfga_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_proto_rawDesc), len(file_openfga_v1_openfga_proto_rawDesc)), NumEnums: 1, NumMessages: 21, NumExtensions: 0, @@ -2017,7 +1588,6 @@ func file_openfga_v1_openfga_proto_init() { MessageInfos: file_openfga_v1_openfga_proto_msgTypes, }.Build() File_openfga_v1_openfga_proto = out.File - file_openfga_v1_openfga_proto_rawDesc = nil file_openfga_v1_openfga_proto_goTypes = nil file_openfga_v1_openfga_proto_depIdxs = nil } diff --git a/proto/openfga/v1/openfga_service.pb.go b/proto/openfga/v1/openfga_service.pb.go index 6959d748..d91bd64c 100644 --- a/proto/openfga/v1/openfga_service.pb.go +++ b/proto/openfga/v1/openfga_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/openfga_service.proto @@ -18,6 +18,7 @@ import ( wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -28,30 +29,27 @@ const ( ) type ListObjectsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` - User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` - ContextualTuples *ContextualTupleKeys `protobuf:"bytes,6,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + ContextualTuples *ContextualTupleKeys `protobuf:"bytes,6,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` // Additional request context that will be used to evaluate any ABAC conditions encountered // in the query evaluation. Context *structpb.Struct `protobuf:"bytes,7,opt,name=context,proto3" json:"context,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. - Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListObjectsRequest) Reset() { *x = ListObjectsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListObjectsRequest) String() string { @@ -62,7 +60,7 @@ func (*ListObjectsRequest) ProtoMessage() {} func (x *ListObjectsRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -134,20 +132,17 @@ func (x *ListObjectsRequest) GetConsistency() ConsistencyPreference { } type ListObjectsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Objects []string `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` unknownFields protoimpl.UnknownFields - - Objects []string `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListObjectsResponse) Reset() { *x = ListObjectsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListObjectsResponse) String() string { @@ -158,7 +153,7 @@ func (*ListObjectsResponse) ProtoMessage() {} func (x *ListObjectsResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -181,30 +176,27 @@ func (x *ListObjectsResponse) GetObjects() []string { } type ListUsersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Object *Object `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` - Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` - UserFilters []*UserTypeFilter `protobuf:"bytes,5,rep,name=user_filters,proto3" json:"user_filters,omitempty"` - ContextualTuples []*TupleKey `protobuf:"bytes,6,rep,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Object *Object `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` + UserFilters []*UserTypeFilter `protobuf:"bytes,5,rep,name=user_filters,proto3" json:"user_filters,omitempty"` + ContextualTuples []*TupleKey `protobuf:"bytes,6,rep,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` // Additional request context that will be used to evaluate any ABAC conditions encountered // in the query evaluation. Context *structpb.Struct `protobuf:"bytes,7,opt,name=context,proto3" json:"context,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. - Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListUsersRequest) Reset() { *x = ListUsersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListUsersRequest) String() string { @@ -215,7 +207,7 @@ func (*ListUsersRequest) ProtoMessage() {} func (x *ListUsersRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -287,20 +279,17 @@ func (x *ListUsersRequest) GetConsistency() ConsistencyPreference { } type ListUsersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` unknownFields protoimpl.UnknownFields - - Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ListUsersResponse) Reset() { *x = ListUsersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListUsersResponse) String() string { @@ -311,7 +300,7 @@ func (*ListUsersResponse) ProtoMessage() {} func (x *ListUsersResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -334,30 +323,27 @@ func (x *ListUsersResponse) GetUsers() []*User { } type StreamedListObjectsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` - User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` - ContextualTuples *ContextualTupleKeys `protobuf:"bytes,6,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + Relation string `protobuf:"bytes,4,opt,name=relation,proto3" json:"relation,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + ContextualTuples *ContextualTupleKeys `protobuf:"bytes,6,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` // Additional request context that will be used to evaluate any ABAC conditions encountered // in the query evaluation. Context *structpb.Struct `protobuf:"bytes,7,opt,name=context,proto3" json:"context,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. - Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,8,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StreamedListObjectsRequest) Reset() { *x = StreamedListObjectsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamedListObjectsRequest) String() string { @@ -368,7 +354,7 @@ func (*StreamedListObjectsRequest) ProtoMessage() {} func (x *StreamedListObjectsRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -441,20 +427,17 @@ func (x *StreamedListObjectsRequest) GetConsistency() ConsistencyPreference { // The response for a StreamedListObjects RPC. type StreamedListObjectsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` unknownFields protoimpl.UnknownFields - - Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StreamedListObjectsResponse) Reset() { *x = StreamedListObjectsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamedListObjectsResponse) String() string { @@ -465,7 +448,7 @@ func (*StreamedListObjectsResponse) ProtoMessage() {} func (x *StreamedListObjectsResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -488,25 +471,22 @@ func (x *StreamedListObjectsResponse) GetObject() string { } type ReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` TupleKey *ReadRequestTupleKey `protobuf:"bytes,2,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` PageSize *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=page_size,proto3" json:"page_size,omitempty"` ContinuationToken string `protobuf:"bytes,4,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. - Consistency ConsistencyPreference `protobuf:"varint,5,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,5,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadRequest) Reset() { *x = ReadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadRequest) String() string { @@ -517,7 +497,7 @@ func (*ReadRequest) ProtoMessage() {} func (x *ReadRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -568,22 +548,19 @@ func (x *ReadRequest) GetConsistency() ConsistencyPreference { } type ReadRequestTupleKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReadRequestTupleKey) Reset() { *x = ReadRequestTupleKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadRequestTupleKey) String() string { @@ -594,7 +571,7 @@ func (*ReadRequestTupleKey) ProtoMessage() {} func (x *ReadRequestTupleKey) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -631,21 +608,18 @@ func (x *ReadRequestTupleKey) GetObject() string { } type ReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tuples []*Tuple `protobuf:"bytes,1,rep,name=tuples,proto3" json:"tuples,omitempty"` - ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Tuples []*Tuple `protobuf:"bytes,1,rep,name=tuples,proto3" json:"tuples,omitempty"` + ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadResponse) Reset() { *x = ReadResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadResponse) String() string { @@ -656,7 +630,7 @@ func (*ReadResponse) ProtoMessage() {} func (x *ReadResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -686,21 +660,18 @@ func (x *ReadResponse) GetContinuationToken() string { } type WriteRequestWrites struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` + OnDuplicate string `protobuf:"bytes,2,opt,name=on_duplicate,proto3" json:"on_duplicate,omitempty"` unknownFields protoimpl.UnknownFields - - TupleKeys []*TupleKey `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` - OnDuplicate string `protobuf:"bytes,2,opt,name=on_duplicate,proto3" json:"on_duplicate,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WriteRequestWrites) Reset() { *x = WriteRequestWrites{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteRequestWrites) String() string { @@ -711,7 +682,7 @@ func (*WriteRequestWrites) ProtoMessage() {} func (x *WriteRequestWrites) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -741,21 +712,18 @@ func (x *WriteRequestWrites) GetOnDuplicate() string { } type WriteRequestDeletes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TupleKeys []*TupleKeyWithoutCondition `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` + OnMissing string `protobuf:"bytes,2,opt,name=on_missing,proto3" json:"on_missing,omitempty"` unknownFields protoimpl.UnknownFields - - TupleKeys []*TupleKeyWithoutCondition `protobuf:"bytes,1,rep,name=tuple_keys,proto3" json:"tuple_keys,omitempty"` - OnMissing string `protobuf:"bytes,2,opt,name=on_missing,proto3" json:"on_missing,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WriteRequestDeletes) Reset() { *x = WriteRequestDeletes{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteRequestDeletes) String() string { @@ -766,7 +734,7 @@ func (*WriteRequestDeletes) ProtoMessage() {} func (x *WriteRequestDeletes) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -796,23 +764,20 @@ func (x *WriteRequestDeletes) GetOnMissing() string { } type WriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Writes *WriteRequestWrites `protobuf:"bytes,2,opt,name=writes,proto3" json:"writes,omitempty"` - Deletes *WriteRequestDeletes `protobuf:"bytes,3,opt,name=deletes,proto3" json:"deletes,omitempty"` - AuthorizationModelId string `protobuf:"bytes,4,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Writes *WriteRequestWrites `protobuf:"bytes,2,opt,name=writes,proto3" json:"writes,omitempty"` + Deletes *WriteRequestDeletes `protobuf:"bytes,3,opt,name=deletes,proto3" json:"deletes,omitempty"` + AuthorizationModelId string `protobuf:"bytes,4,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteRequest) Reset() { *x = WriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteRequest) String() string { @@ -823,7 +788,7 @@ func (*WriteRequest) ProtoMessage() {} func (x *WriteRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -867,18 +832,16 @@ func (x *WriteRequest) GetAuthorizationModelId() string { } type WriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteResponse) Reset() { *x = WriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteResponse) String() string { @@ -889,7 +852,7 @@ func (*WriteResponse) ProtoMessage() {} func (x *WriteResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -905,30 +868,27 @@ func (*WriteResponse) Descriptor() ([]byte, []int) { } type CheckRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - TupleKey *CheckRequestTupleKey `protobuf:"bytes,2,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` - ContextualTuples *ContextualTupleKeys `protobuf:"bytes,3,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` - AuthorizationModelId string `protobuf:"bytes,4,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + TupleKey *CheckRequestTupleKey `protobuf:"bytes,2,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` + ContextualTuples *ContextualTupleKeys `protobuf:"bytes,3,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + AuthorizationModelId string `protobuf:"bytes,4,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` // Defaults to false. Making it true has performance implications. Trace bool `protobuf:"varint,5,opt,name=trace,proto3" json:"trace,omitempty"` // Additional request context that will be used to evaluate any ABAC conditions encountered // in the query evaluation. Context *structpb.Struct `protobuf:"bytes,6,opt,name=context,proto3" json:"context,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. - Consistency ConsistencyPreference `protobuf:"varint,7,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,7,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CheckRequest) Reset() { *x = CheckRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CheckRequest) String() string { @@ -939,7 +899,7 @@ func (*CheckRequest) ProtoMessage() {} func (x *CheckRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1004,22 +964,19 @@ func (x *CheckRequest) GetConsistency() ConsistencyPreference { } type CheckRequestTupleKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` unknownFields protoimpl.UnknownFields - - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,3,opt,name=object,proto3" json:"object,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CheckRequestTupleKey) Reset() { *x = CheckRequestTupleKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CheckRequestTupleKey) String() string { @@ -1030,7 +987,7 @@ func (*CheckRequestTupleKey) ProtoMessage() {} func (x *CheckRequestTupleKey) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1067,22 +1024,19 @@ func (x *CheckRequestTupleKey) GetObject() string { } type CheckResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` // For internal use only. - Resolution string `protobuf:"bytes,2,opt,name=resolution,proto3" json:"resolution,omitempty"` + Resolution string `protobuf:"bytes,2,opt,name=resolution,proto3" json:"resolution,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CheckResponse) Reset() { *x = CheckResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CheckResponse) String() string { @@ -1093,7 +1047,7 @@ func (*CheckResponse) ProtoMessage() {} func (x *CheckResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1123,23 +1077,20 @@ func (x *CheckResponse) GetResolution() string { } type BatchCheckRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Checks []*BatchCheckItem `protobuf:"bytes,2,rep,name=checks,proto3" json:"checks,omitempty"` - AuthorizationModelId string `protobuf:"bytes,3,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Consistency ConsistencyPreference `protobuf:"varint,4,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Checks []*BatchCheckItem `protobuf:"bytes,2,rep,name=checks,proto3" json:"checks,omitempty"` + AuthorizationModelId string `protobuf:"bytes,3,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Consistency ConsistencyPreference `protobuf:"varint,4,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchCheckRequest) Reset() { *x = BatchCheckRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BatchCheckRequest) String() string { @@ -1150,7 +1101,7 @@ func (*BatchCheckRequest) ProtoMessage() {} func (x *BatchCheckRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1194,23 +1145,20 @@ func (x *BatchCheckRequest) GetConsistency() ConsistencyPreference { } type BatchCheckItem struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TupleKey *CheckRequestTupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` - ContextualTuples *ContextualTupleKeys `protobuf:"bytes,2,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` - Context *structpb.Struct `protobuf:"bytes,3,opt,name=context,proto3" json:"context,omitempty"` - CorrelationId string `protobuf:"bytes,4,opt,name=correlation_id,proto3" json:"correlation_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TupleKey *CheckRequestTupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` + ContextualTuples *ContextualTupleKeys `protobuf:"bytes,2,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + Context *structpb.Struct `protobuf:"bytes,3,opt,name=context,proto3" json:"context,omitempty"` + CorrelationId string `protobuf:"bytes,4,opt,name=correlation_id,proto3" json:"correlation_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchCheckItem) Reset() { *x = BatchCheckItem{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BatchCheckItem) String() string { @@ -1221,7 +1169,7 @@ func (*BatchCheckItem) ProtoMessage() {} func (x *BatchCheckItem) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1265,20 +1213,17 @@ func (x *BatchCheckItem) GetCorrelationId() string { } type BatchCheckResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Result map[string]*BatchCheckSingleResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` unknownFields protoimpl.UnknownFields - - Result map[string]*BatchCheckSingleResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + sizeCache protoimpl.SizeCache } func (x *BatchCheckResponse) Reset() { *x = BatchCheckResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BatchCheckResponse) String() string { @@ -1289,7 +1234,7 @@ func (*BatchCheckResponse) ProtoMessage() {} func (x *BatchCheckResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1312,24 +1257,21 @@ func (x *BatchCheckResponse) GetResult() map[string]*BatchCheckSingleResult { } type BatchCheckSingleResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to CheckResult: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to CheckResult: // // *BatchCheckSingleResult_Allowed // *BatchCheckSingleResult_Error - CheckResult isBatchCheckSingleResult_CheckResult `protobuf_oneof:"check_result"` + CheckResult isBatchCheckSingleResult_CheckResult `protobuf_oneof:"check_result"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BatchCheckSingleResult) Reset() { *x = BatchCheckSingleResult{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BatchCheckSingleResult) String() string { @@ -1340,7 +1282,7 @@ func (*BatchCheckSingleResult) ProtoMessage() {} func (x *BatchCheckSingleResult) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1355,23 +1297,27 @@ func (*BatchCheckSingleResult) Descriptor() ([]byte, []int) { return file_openfga_v1_openfga_service_proto_rawDescGZIP(), []int{19} } -func (m *BatchCheckSingleResult) GetCheckResult() isBatchCheckSingleResult_CheckResult { - if m != nil { - return m.CheckResult +func (x *BatchCheckSingleResult) GetCheckResult() isBatchCheckSingleResult_CheckResult { + if x != nil { + return x.CheckResult } return nil } func (x *BatchCheckSingleResult) GetAllowed() bool { - if x, ok := x.GetCheckResult().(*BatchCheckSingleResult_Allowed); ok { - return x.Allowed + if x != nil { + if x, ok := x.CheckResult.(*BatchCheckSingleResult_Allowed); ok { + return x.Allowed + } } return false } func (x *BatchCheckSingleResult) GetError() *CheckError { - if x, ok := x.GetCheckResult().(*BatchCheckSingleResult_Error); ok { - return x.Error + if x != nil { + if x, ok := x.CheckResult.(*BatchCheckSingleResult_Error); ok { + return x.Error + } } return nil } @@ -1393,25 +1339,22 @@ func (*BatchCheckSingleResult_Allowed) isBatchCheckSingleResult_CheckResult() {} func (*BatchCheckSingleResult_Error) isBatchCheckSingleResult_CheckResult() {} type CheckError struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Code: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Code: // // *CheckError_InputError // *CheckError_InternalError - Code isCheckError_Code `protobuf_oneof:"code"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Code isCheckError_Code `protobuf_oneof:"code"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CheckError) Reset() { *x = CheckError{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CheckError) String() string { @@ -1422,7 +1365,7 @@ func (*CheckError) ProtoMessage() {} func (x *CheckError) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1437,23 +1380,27 @@ func (*CheckError) Descriptor() ([]byte, []int) { return file_openfga_v1_openfga_service_proto_rawDescGZIP(), []int{20} } -func (m *CheckError) GetCode() isCheckError_Code { - if m != nil { - return m.Code +func (x *CheckError) GetCode() isCheckError_Code { + if x != nil { + return x.Code } return nil } func (x *CheckError) GetInputError() ErrorCode { - if x, ok := x.GetCode().(*CheckError_InputError); ok { - return x.InputError + if x != nil { + if x, ok := x.Code.(*CheckError_InputError); ok { + return x.InputError + } } return ErrorCode_no_error } func (x *CheckError) GetInternalError() InternalErrorCode { - if x, ok := x.GetCode().(*CheckError_InternalError); ok { - return x.InternalError + if x != nil { + if x, ok := x.Code.(*CheckError_InternalError); ok { + return x.InternalError + } } return InternalErrorCode_no_internal_error } @@ -1482,25 +1429,22 @@ func (*CheckError_InputError) isCheckError_Code() {} func (*CheckError_InternalError) isCheckError_Code() {} type ExpandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` TupleKey *ExpandRequestTupleKey `protobuf:"bytes,2,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` AuthorizationModelId string `protobuf:"bytes,3,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` // Controls the consistency preference for this request. Default value is UNSPECIFIED, which will have the same behavior as MINIMIZE_LATENCY. Consistency ConsistencyPreference `protobuf:"varint,4,opt,name=consistency,proto3,enum=openfga.v1.ConsistencyPreference" json:"consistency,omitempty"` ContextualTuples *ContextualTupleKeys `protobuf:"bytes,5,opt,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExpandRequest) Reset() { *x = ExpandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExpandRequest) String() string { @@ -1511,7 +1455,7 @@ func (*ExpandRequest) ProtoMessage() {} func (x *ExpandRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1562,21 +1506,18 @@ func (x *ExpandRequest) GetContextualTuples() *ContextualTupleKeys { } type ExpandRequestTupleKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` + Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` unknownFields protoimpl.UnknownFields - - Relation string `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"` - Object string `protobuf:"bytes,2,opt,name=object,proto3" json:"object,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExpandRequestTupleKey) Reset() { *x = ExpandRequestTupleKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExpandRequestTupleKey) String() string { @@ -1587,7 +1528,7 @@ func (*ExpandRequestTupleKey) ProtoMessage() {} func (x *ExpandRequestTupleKey) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1617,20 +1558,17 @@ func (x *ExpandRequestTupleKey) GetObject() string { } type ExpandResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Tree *UsersetTree `protobuf:"bytes,1,opt,name=tree,proto3" json:"tree,omitempty"` unknownFields protoimpl.UnknownFields - - Tree *UsersetTree `protobuf:"bytes,1,opt,name=tree,proto3" json:"tree,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExpandResponse) Reset() { *x = ExpandResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExpandResponse) String() string { @@ -1641,7 +1579,7 @@ func (*ExpandResponse) ProtoMessage() {} func (x *ExpandResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1664,21 +1602,18 @@ func (x *ExpandResponse) GetTree() *UsersetTree { } type ReadAuthorizationModelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReadAuthorizationModelRequest) Reset() { *x = ReadAuthorizationModelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAuthorizationModelRequest) String() string { @@ -1689,7 +1624,7 @@ func (*ReadAuthorizationModelRequest) ProtoMessage() {} func (x *ReadAuthorizationModelRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1719,20 +1654,17 @@ func (x *ReadAuthorizationModelRequest) GetId() string { } type ReadAuthorizationModelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AuthorizationModel *AuthorizationModel `protobuf:"bytes,1,opt,name=authorization_model,proto3" json:"authorization_model,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AuthorizationModel *AuthorizationModel `protobuf:"bytes,1,opt,name=authorization_model,proto3" json:"authorization_model,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadAuthorizationModelResponse) Reset() { *x = ReadAuthorizationModelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAuthorizationModelResponse) String() string { @@ -1743,7 +1675,7 @@ func (*ReadAuthorizationModelResponse) ProtoMessage() {} func (x *ReadAuthorizationModelResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1766,23 +1698,20 @@ func (x *ReadAuthorizationModelResponse) GetAuthorizationModel() *AuthorizationM } type WriteAuthorizationModelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - TypeDefinitions []*TypeDefinition `protobuf:"bytes,2,rep,name=type_definitions,proto3" json:"type_definitions,omitempty"` - SchemaVersion string `protobuf:"bytes,3,opt,name=schema_version,proto3" json:"schema_version,omitempty"` - Conditions map[string]*Condition `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + TypeDefinitions []*TypeDefinition `protobuf:"bytes,2,rep,name=type_definitions,proto3" json:"type_definitions,omitempty"` + SchemaVersion string `protobuf:"bytes,3,opt,name=schema_version,proto3" json:"schema_version,omitempty"` + Conditions map[string]*Condition `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteAuthorizationModelRequest) Reset() { *x = WriteAuthorizationModelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteAuthorizationModelRequest) String() string { @@ -1793,7 +1722,7 @@ func (*WriteAuthorizationModelRequest) ProtoMessage() {} func (x *WriteAuthorizationModelRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1837,20 +1766,17 @@ func (x *WriteAuthorizationModelRequest) GetConditions() map[string]*Condition { } type WriteAuthorizationModelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AuthorizationModelId string `protobuf:"bytes,1,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AuthorizationModelId string `protobuf:"bytes,1,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteAuthorizationModelResponse) Reset() { *x = WriteAuthorizationModelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteAuthorizationModelResponse) String() string { @@ -1861,7 +1787,7 @@ func (*WriteAuthorizationModelResponse) ProtoMessage() {} func (x *WriteAuthorizationModelResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1884,22 +1810,19 @@ func (x *WriteAuthorizationModelResponse) GetAuthorizationModelId() string { } type ReadAuthorizationModelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` PageSize *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=page_size,proto3" json:"page_size,omitempty"` ContinuationToken string `protobuf:"bytes,3,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadAuthorizationModelsRequest) Reset() { *x = ReadAuthorizationModelsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAuthorizationModelsRequest) String() string { @@ -1910,7 +1833,7 @@ func (*ReadAuthorizationModelsRequest) ProtoMessage() {} func (x *ReadAuthorizationModelsRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1947,21 +1870,18 @@ func (x *ReadAuthorizationModelsRequest) GetContinuationToken() string { } type ReadAuthorizationModelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AuthorizationModels []*AuthorizationModel `protobuf:"bytes,1,rep,name=authorization_models,proto3" json:"authorization_models,omitempty"` - ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AuthorizationModels []*AuthorizationModel `protobuf:"bytes,1,rep,name=authorization_models,proto3" json:"authorization_models,omitempty"` + ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadAuthorizationModelsResponse) Reset() { *x = ReadAuthorizationModelsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAuthorizationModelsResponse) String() string { @@ -1972,7 +1892,7 @@ func (*ReadAuthorizationModelsResponse) ProtoMessage() {} func (x *ReadAuthorizationModelsResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2002,22 +1922,19 @@ func (x *ReadAuthorizationModelsResponse) GetContinuationToken() string { } type WriteAssertionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Assertions []*Assertion `protobuf:"bytes,3,rep,name=assertions,proto3" json:"assertions,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Assertions []*Assertion `protobuf:"bytes,3,rep,name=assertions,proto3" json:"assertions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteAssertionsRequest) Reset() { *x = WriteAssertionsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteAssertionsRequest) String() string { @@ -2028,7 +1945,7 @@ func (*WriteAssertionsRequest) ProtoMessage() {} func (x *WriteAssertionsRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2065,18 +1982,16 @@ func (x *WriteAssertionsRequest) GetAssertions() []*Assertion { } type WriteAssertionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteAssertionsResponse) Reset() { *x = WriteAssertionsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WriteAssertionsResponse) String() string { @@ -2087,7 +2002,7 @@ func (*WriteAssertionsResponse) ProtoMessage() {} func (x *WriteAssertionsResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2103,21 +2018,18 @@ func (*WriteAssertionsResponse) Descriptor() ([]byte, []int) { } type ReadAssertionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + AuthorizationModelId string `protobuf:"bytes,2,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadAssertionsRequest) Reset() { *x = ReadAssertionsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAssertionsRequest) String() string { @@ -2128,7 +2040,7 @@ func (*ReadAssertionsRequest) ProtoMessage() {} func (x *ReadAssertionsRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2158,21 +2070,18 @@ func (x *ReadAssertionsRequest) GetAuthorizationModelId() string { } type ReadAssertionsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AuthorizationModelId string `protobuf:"bytes,1,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` - Assertions []*Assertion `protobuf:"bytes,2,rep,name=assertions,proto3" json:"assertions,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AuthorizationModelId string `protobuf:"bytes,1,opt,name=authorization_model_id,proto3" json:"authorization_model_id,omitempty"` + Assertions []*Assertion `protobuf:"bytes,2,rep,name=assertions,proto3" json:"assertions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadAssertionsResponse) Reset() { *x = ReadAssertionsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadAssertionsResponse) String() string { @@ -2183,7 +2092,7 @@ func (*ReadAssertionsResponse) ProtoMessage() {} func (x *ReadAssertionsResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2213,24 +2122,21 @@ func (x *ReadAssertionsResponse) GetAssertions() []*Assertion { } type ReadChangesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` PageSize *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=page_size,proto3" json:"page_size,omitempty"` ContinuationToken string `protobuf:"bytes,4,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` StartTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_time,proto3" json:"start_time,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadChangesRequest) Reset() { *x = ReadChangesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadChangesRequest) String() string { @@ -2241,7 +2147,7 @@ func (*ReadChangesRequest) ProtoMessage() {} func (x *ReadChangesRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2292,21 +2198,18 @@ func (x *ReadChangesRequest) GetStartTime() *timestamppb.Timestamp { } type ReadChangesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Changes []*TupleChange `protobuf:"bytes,1,rep,name=changes,proto3" json:"changes,omitempty"` - ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Changes []*TupleChange `protobuf:"bytes,1,rep,name=changes,proto3" json:"changes,omitempty"` + ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReadChangesResponse) Reset() { *x = ReadChangesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReadChangesResponse) String() string { @@ -2317,7 +2220,7 @@ func (*ReadChangesResponse) ProtoMessage() {} func (x *ReadChangesResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2347,20 +2250,17 @@ func (x *ReadChangesResponse) GetContinuationToken() string { } type CreateStoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateStoreRequest) Reset() { *x = CreateStoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateStoreRequest) String() string { @@ -2371,7 +2271,7 @@ func (*CreateStoreRequest) ProtoMessage() {} func (x *CreateStoreRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2394,23 +2294,20 @@ func (x *CreateStoreRequest) GetName() string { } type CreateStoreResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CreateStoreResponse) Reset() { *x = CreateStoreResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CreateStoreResponse) String() string { @@ -2421,7 +2318,7 @@ func (*CreateStoreResponse) ProtoMessage() {} func (x *CreateStoreResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2465,21 +2362,18 @@ func (x *CreateStoreResponse) GetUpdatedAt() *timestamppb.Timestamp { } type UpdateStoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateStoreRequest) Reset() { *x = UpdateStoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateStoreRequest) String() string { @@ -2490,7 +2384,7 @@ func (*UpdateStoreRequest) ProtoMessage() {} func (x *UpdateStoreRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2520,23 +2414,20 @@ func (x *UpdateStoreRequest) GetName() string { } type UpdateStoreResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UpdateStoreResponse) Reset() { *x = UpdateStoreResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UpdateStoreResponse) String() string { @@ -2547,7 +2438,7 @@ func (*UpdateStoreResponse) ProtoMessage() {} func (x *UpdateStoreResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2591,20 +2482,17 @@ func (x *UpdateStoreResponse) GetUpdatedAt() *timestamppb.Timestamp { } type DeleteStoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeleteStoreRequest) Reset() { *x = DeleteStoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteStoreRequest) String() string { @@ -2615,7 +2503,7 @@ func (*DeleteStoreRequest) ProtoMessage() {} func (x *DeleteStoreRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2638,18 +2526,16 @@ func (x *DeleteStoreRequest) GetStoreId() string { } type DeleteStoreResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteStoreResponse) Reset() { *x = DeleteStoreResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteStoreResponse) String() string { @@ -2660,7 +2546,7 @@ func (*DeleteStoreResponse) ProtoMessage() {} func (x *DeleteStoreResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2676,20 +2562,17 @@ func (*DeleteStoreResponse) Descriptor() ([]byte, []int) { } type GetStoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` unknownFields protoimpl.UnknownFields - - StoreId string `protobuf:"bytes,1,opt,name=store_id,proto3" json:"store_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetStoreRequest) Reset() { *x = GetStoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetStoreRequest) String() string { @@ -2700,7 +2583,7 @@ func (*GetStoreRequest) ProtoMessage() {} func (x *GetStoreRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2723,24 +2606,21 @@ func (x *GetStoreRequest) GetStoreId() string { } type GetStoreResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` + DeletedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=deleted_at,proto3" json:"deleted_at,omitempty"` unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_at,proto3" json:"updated_at,omitempty"` - DeletedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=deleted_at,proto3" json:"deleted_at,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetStoreResponse) Reset() { *x = GetStoreResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetStoreResponse) String() string { @@ -2751,7 +2631,7 @@ func (*GetStoreResponse) ProtoMessage() {} func (x *GetStoreResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2802,22 +2682,19 @@ func (x *GetStoreResponse) GetDeletedAt() *timestamppb.Timestamp { } type ListStoresRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` PageSize *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=page_size,proto3" json:"page_size,omitempty"` ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListStoresRequest) Reset() { *x = ListStoresRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListStoresRequest) String() string { @@ -2828,7 +2705,7 @@ func (*ListStoresRequest) ProtoMessage() {} func (x *ListStoresRequest) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2865,21 +2742,18 @@ func (x *ListStoresRequest) GetName() string { } type ListStoresResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Stores []*Store `protobuf:"bytes,1,rep,name=stores,proto3" json:"stores,omitempty"` - ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Stores []*Store `protobuf:"bytes,1,rep,name=stores,proto3" json:"stores,omitempty"` + ContinuationToken string `protobuf:"bytes,2,opt,name=continuation_token,proto3" json:"continuation_token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListStoresResponse) Reset() { *x = ListStoresResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListStoresResponse) String() string { @@ -2890,7 +2764,7 @@ func (*ListStoresResponse) ProtoMessage() {} func (x *ListStoresResponse) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2920,22 +2794,19 @@ func (x *ListStoresResponse) GetContinuationToken() string { } type AssertionTupleKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` + User string `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields - - Object string `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` - Relation string `protobuf:"bytes,2,opt,name=relation,proto3" json:"relation,omitempty"` - User string `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AssertionTupleKey) Reset() { *x = AssertionTupleKey{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AssertionTupleKey) String() string { @@ -2946,7 +2817,7 @@ func (*AssertionTupleKey) ProtoMessage() {} func (x *AssertionTupleKey) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2983,25 +2854,22 @@ func (x *AssertionTupleKey) GetUser() string { } type Assertion struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TupleKey *AssertionTupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` - Expectation bool `protobuf:"varint,2,opt,name=expectation,proto3" json:"expectation,omitempty"` - ContextualTuples []*TupleKey `protobuf:"bytes,3,rep,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TupleKey *AssertionTupleKey `protobuf:"bytes,1,opt,name=tuple_key,proto3" json:"tuple_key,omitempty"` + Expectation bool `protobuf:"varint,2,opt,name=expectation,proto3" json:"expectation,omitempty"` + ContextualTuples []*TupleKey `protobuf:"bytes,3,rep,name=contextual_tuples,proto3" json:"contextual_tuples,omitempty"` // Additional request context that will be used to evaluate any ABAC conditions encountered // in the query evaluation. - Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3" json:"context,omitempty"` + Context *structpb.Struct `protobuf:"bytes,4,opt,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Assertion) Reset() { *x = Assertion{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Assertion) String() string { @@ -3012,7 +2880,7 @@ func (*Assertion) ProtoMessage() {} func (x *Assertion) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3056,20 +2924,17 @@ func (x *Assertion) GetContext() *structpb.Struct { } type Assertions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Assertions []*Assertion `protobuf:"bytes,1,rep,name=assertions,proto3" json:"assertions,omitempty"` unknownFields protoimpl.UnknownFields - - Assertions []*Assertion `protobuf:"bytes,1,rep,name=assertions,proto3" json:"assertions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Assertions) Reset() { *x = Assertions{} - if protoimpl.UnsafeEnabled { - mi := &file_openfga_v1_openfga_service_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_openfga_v1_openfga_service_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Assertions) String() string { @@ -3080,7 +2945,7 @@ func (*Assertions) ProtoMessage() {} func (x *Assertions) ProtoReflect() protoreflect.Message { mi := &file_openfga_v1_openfga_service_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3104,2894 +2969,938 @@ func (x *Assertions) GetAssertions() []*Assertion { var File_openfga_v1_openfga_service_proto protoreflect.FileDescriptor -var file_openfga_v1_openfga_service_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x7a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x5f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, - 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x2c, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x05, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, - 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, - 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, - 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, - 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, - 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, - 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, - 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, - 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, - 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, 0x4a, - 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, - 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, - 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, - 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, - 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, - 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x20, - 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x61, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x30, 0x92, 0x41, 0x2a, 0x4a, 0x28, 0x5b, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0x2c, 0x22, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x22, 0x5d, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0xc2, - 0x06, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, - 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, - 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, - 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, - 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, - 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, - 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, - 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, - 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, - 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x22, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x22, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xd4, 0x01, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x93, 0x01, 0x92, 0x41, 0x82, 0x01, - 0x32, 0x3d, 0x54, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, - 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x4a, - 0x3b, 0x5b, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x7d, 0x2c, 0x20, 0x7b, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x22, 0x2c, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x7d, 0x5d, 0xa0, 0x01, 0x01, 0xa8, - 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, - 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, - 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0e, - 0x92, 0x41, 0x03, 0xa0, 0x01, 0x64, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x64, 0x52, 0x11, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x06, 0x92, 0x41, 0x00, 0xe0, 0x41, - 0x02, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x99, 0x05, 0x0a, 0x1a, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x49, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, - 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xfa, 0x42, 0x25, 0x72, - 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, - 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, - 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, - 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x2a, 0x92, 0x41, 0x0c, 0x4a, 0x0a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5b, - 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x0a, 0x4a, 0x08, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, - 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, - 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x13, 0x4a, 0x0b, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0x80, 0x01, 0x01, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x20, 0x01, 0x28, 0x80, 0x04, 0x52, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, - 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x22, 0x51, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x14, 0x4a, 0x12, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, 0x64, 0x6d, 0x61, 0x70, 0x22, 0xe0, 0x41, 0x02, 0x52, - 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xa2, 0x04, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, - 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x12, 0x5d, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x22, 0x92, 0x41, 0x16, 0x4a, 0x02, 0x35, 0x30, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x59, 0x40, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0xfa, 0x42, 0x06, 0x1a, 0x04, - 0x18, 0x64, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, - 0xbb, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8a, 0x01, 0x92, - 0x41, 0x64, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, - 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, - 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, - 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, - 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, - 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, - 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, 0x28, 0x80, 0x28, 0x32, 0x19, - 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, - 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x4d, 0x0a, - 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xfd, 0x01, 0x0a, - 0x13, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x3b, 0x92, 0x41, 0x10, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, - 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x28, 0x80, 0x04, 0x32, - 0x1b, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x31, 0x31, 0x7d, 0x3a, 0x5b, - 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x31, 0x31, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x0c, 0x4a, 0x08, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, 0x5e, - 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0xd0, - 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0x92, 0x41, - 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, - 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x78, 0x80, 0x02, 0xfa, 0x42, 0x15, 0x72, - 0x13, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, - 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xc3, 0x02, 0x0a, - 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, - 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x82, 0x02, - 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xd1, 0x01, 0x92, 0x41, 0xa7, - 0x01, 0x32, 0x41, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, - 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, - 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, - 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, - 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, - 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, - 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, - 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x20, 0x72, 0x1e, - 0x28, 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x22, 0x83, 0x03, 0x0a, 0x12, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, - 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x12, 0xa3, 0x02, 0x0a, 0x0c, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xfe, 0x01, 0x92, 0x41, 0xf7, 0x01, - 0x32, 0xd2, 0x01, 0x4f, 0x6e, 0x20, 0x27, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x27, 0x20, 0x28, 0x20, - 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x29, - 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, - 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x2e, - 0x20, 0x4f, 0x6e, 0x20, 0x27, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x6e, 0x6f, - 0x2d, 0x6f, 0x70, 0x73, 0x20, 0x28, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6f, - 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x3a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4a, 0x08, 0x22, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0xf2, 0x02, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xf2, 0x02, - 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x6f, 0x6e, 0x5f, 0x64, - 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0xd0, 0x02, 0x0a, 0x13, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, - 0x12, 0x57, 0x0a, 0x0a, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa8, - 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x12, 0xdf, 0x01, 0x0a, 0x0a, 0x6f, 0x6e, - 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xbe, - 0x01, 0x92, 0x41, 0xb7, 0x01, 0x32, 0x92, 0x01, 0x4f, 0x6e, 0x20, 0x27, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x27, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x20, 0x4f, 0x6e, 0x20, 0x27, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x27, 0x2c, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x2d, 0x6f, 0x70, 0x73, 0x2e, 0x3a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x4a, 0x08, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0xf2, 0x02, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0xf2, 0x02, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0xe0, 0x41, 0x01, 0x52, - 0x0a, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0xf2, 0x02, 0x0a, 0x0c, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, - 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, - 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, - 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, - 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, - 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x52, 0x06, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x12, 0x39, - 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, - 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, - 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, - 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, - 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, - 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xc1, 0x04, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, - 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, - 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, - 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, - 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x09, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, - 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, - 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, - 0x22, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x0c, - 0x92, 0x41, 0x09, 0x40, 0x01, 0x4a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x05, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xee, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x3f, - 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x92, 0x41, - 0x10, 0x4a, 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, - 0x04, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x12, 0x72, 0x10, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, - 0x5d, 0x7b, 0x32, 0x2c, 0x35, 0x31, 0x32, 0x7d, 0x24, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x45, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x29, 0x92, 0x41, 0x0c, 0x4a, 0x08, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, - 0x78, 0x32, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, - 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, - 0x65, 0x74, 0x22, 0x78, 0x80, 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x12, 0x72, 0x10, 0x32, 0x0e, - 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0x52, 0x06, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x54, 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x09, 0x92, 0x41, 0x06, 0x4a, 0x04, 0x74, - 0x72, 0x75, 0x65, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x03, 0x0a, - 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, - 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, - 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, - 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, - 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x06, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa8, 0x01, 0x01, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, - 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, - 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, 0x26, 0x32, 0x21, 0x5e, 0x5b, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0xd0, - 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xbe, 0x03, 0x0a, 0x0e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x4b, 0x0a, 0x09, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0xdc, 0x01, 0x0a, 0x0e, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0x92, 0x41, 0x96, 0x01, 0x32, 0x6c, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6c, 0x65, 0x74, - 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, - 0x72, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0xe2, 0x89, 0xa4, 0x20, 0x33, 0x36, 0x20, 0x63, 0x68, - 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4a, 0x26, 0x22, 0x31, 0x63, 0x64, 0x39, - 0x33, 0x64, 0x38, 0x63, 0x2d, 0x38, 0x65, 0x34, 0x35, 0x2d, 0x34, 0x33, 0x63, 0x36, 0x2d, 0x39, - 0x61, 0x31, 0x35, 0x2d, 0x63, 0x62, 0x62, 0x33, 0x63, 0x37, 0x66, 0x33, 0x39, 0x34, 0x62, 0x63, - 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x13, 0x72, 0x11, 0x32, 0x0f, 0x5e, 0x5b, 0x5c, 0x77, 0x5c, - 0x64, 0x2d, 0x5d, 0x7b, 0x31, 0x2c, 0x33, 0x36, 0x7d, 0x24, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x22, 0xe6, 0x02, 0x0a, 0x12, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0xf0, 0x01, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0xab, - 0x01, 0x92, 0x41, 0xa7, 0x01, 0x32, 0x4e, 0x6d, 0x61, 0x70, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4a, 0x55, 0x7b, 0x22, 0x31, 0x63, 0x64, 0x39, 0x33, 0x64, 0x38, - 0x63, 0x2d, 0x38, 0x65, 0x34, 0x35, 0x2d, 0x34, 0x33, 0x63, 0x36, 0x2d, 0x39, 0x61, 0x31, 0x35, - 0x2d, 0x63, 0x62, 0x62, 0x33, 0x63, 0x37, 0x66, 0x33, 0x39, 0x34, 0x62, 0x63, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x20, 0x22, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x7d, 0x7d, 0x7d, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x5d, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x74, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, - 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, - 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0e, 0x0a, 0x0c, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x43, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xec, - 0x03, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, - 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, - 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, - 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, - 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, - 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x09, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, - 0x42, 0x0b, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, - 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xfa, 0x42, 0x28, 0x72, - 0x26, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, - 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4d, - 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, - 0x6c, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0xb4, 0x01, - 0x0a, 0x15, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, - 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0x92, 0x41, 0x0c, 0x4a, 0x08, - 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x17, - 0x72, 0x15, 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, - 0x35, 0x30, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x51, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x39, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x78, 0x80, - 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x15, 0x72, 0x13, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, - 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x06, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3d, 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x72, 0x65, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x54, 0x72, 0x65, 0x65, 0x52, 0x04, 0x74, - 0x72, 0x65, 0x65, 0x22, 0xe7, 0x01, 0x0a, 0x1d, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, - 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, - 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, - 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, - 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, - 0x5c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, - 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, - 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, - 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x02, 0x69, 0x64, 0x22, 0x72, 0x0a, - 0x1e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x50, 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x13, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x22, 0xfb, 0x03, 0x0a, 0x1e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, - 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, - 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, - 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, - 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x59, - 0x0a, 0x10, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x11, 0x92, 0x41, 0x03, 0xa8, 0x01, 0x01, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x10, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1a, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, 0x52, 0x03, 0x31, 0x2e, 0x30, - 0x52, 0x03, 0x31, 0x2e, 0x31, 0x52, 0x03, 0x31, 0x2e, 0x32, 0xd0, 0x01, 0x00, 0x52, 0x0e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x7a, 0x0a, - 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x1e, 0xfa, - 0x42, 0x1b, 0x9a, 0x01, 0x18, 0x10, 0x19, 0x22, 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x5e, - 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, 0x7d, 0x24, 0x52, 0x0a, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x54, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xa8, 0x01, 0x0a, 0x1f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, - 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, - 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, - 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, - 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, - 0x7d, 0x24, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x22, 0x95, 0x03, 0x0a, 0x1e, 0x52, - 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, - 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, - 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, - 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, - 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, - 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x4b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x10, 0x92, 0x41, 0x04, 0x4a, 0x02, 0x35, 0x30, - 0xfa, 0x42, 0x06, 0x1a, 0x04, 0x18, 0x64, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x8a, 0x01, 0x92, 0x41, 0x64, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, - 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, - 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, - 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, - 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, - 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, - 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, - 0x28, 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x22, 0xfc, 0x02, 0x0a, 0x1f, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, - 0xff, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xce, 0x01, 0x92, - 0x41, 0xa7, 0x01, 0x32, 0x41, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, - 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, - 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, - 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, - 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, - 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, - 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, 0x28, - 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, - 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0xd5, 0x02, 0x0a, 0x16, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, - 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, - 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, - 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, - 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, - 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, - 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, - 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, - 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, - 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x12, 0x4a, 0x0a, - 0x0a, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x13, 0x92, 0x41, 0x03, 0xa0, 0x01, 0x64, - 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x0a, 0x61, - 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x88, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, - 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, - 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, - 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, - 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, - 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, - 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, 0x02, 0xfa, - 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x22, - 0xd6, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x16, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, - 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, - 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0xe0, 0x41, - 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, - 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x16, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x12, 0x35, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x73, - 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf7, 0x05, 0x0a, 0x12, 0x52, 0x65, 0x61, - 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, - 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, - 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, - 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xfa, 0x42, 0x17, 0x72, 0x15, 0x32, 0x10, - 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x32, 0x35, 0x34, 0x7d, 0x24, - 0xd0, 0x01, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x92, 0x41, 0x04, 0x4a, 0x02, - 0x35, 0x30, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x8a, 0x01, 0x92, 0x41, 0x64, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, - 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, - 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, - 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, - 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, - 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, - 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, - 0x28, 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, - 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0xbd, 0x02, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x80, 0x02, 0x92, 0x41, 0xf4, 0x01, 0x32, 0xd7, 0x01, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x20, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x2e, 0x0a, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, - 0x20, 0x38, 0x36, 0x30, 0x31, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x20, - 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x32, 0x30, 0x32, 0x32, 0x2d, 0x30, 0x31, 0x2d, 0x30, - 0x31, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x29, 0x0a, 0x49, 0x66, 0x20, - 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x4a, 0x18, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, - 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x5a, 0xfa, 0x42, - 0x05, 0xb2, 0x01, 0x02, 0x38, 0x01, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x22, 0xd3, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x12, 0x83, 0x02, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0xd2, 0x01, 0x92, 0x41, 0xab, 0x01, 0x32, 0x45, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2e, 0x4a, 0x62, 0x22, - 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, - 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, - 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, - 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, - 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, - 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, - 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, 0x28, 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, - 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, - 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x67, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3d, 0x92, 0x41, - 0x11, 0x4a, 0x0f, 0x22, 0x6d, 0x79, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x23, 0x72, 0x21, 0x32, 0x1f, 0x5e, 0x5b, 0x61, 0x2d, - 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x73, 0x5c, 0x2e, 0x5c, 0x2d, 0x5c, 0x2f, 0x5e, - 0x5f, 0x26, 0x40, 0x5d, 0x7b, 0x33, 0x2c, 0x36, 0x34, 0x7d, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, - 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, - 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0xd5, 0x01, 0x0a, 0x12, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, - 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, - 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, - 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, - 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, - 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x55, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x41, 0x92, 0x41, 0x15, 0x4a, 0x13, - 0x22, 0x6d, 0x79, 0x2d, 0x6e, 0x65, 0x77, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x23, 0x72, 0x21, 0x32, 0x1f, 0x5e, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x73, 0x5c, 0x2e, 0x5c, 0x2d, 0x5c, 0x2f, - 0x5e, 0x5f, 0x26, 0x40, 0x5d, 0x7b, 0x33, 0x2c, 0x36, 0x34, 0x7d, 0x24, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, - 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, - 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x7e, 0x0a, 0x12, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, - 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, - 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, 0x72, 0x23, 0x32, 0x21, - 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, - 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x36, 0x7d, - 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x7b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, - 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, - 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x25, - 0x72, 0x23, 0x32, 0x21, 0x5e, 0x5b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4a, 0x4b, - 0x4d, 0x4e, 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x32, 0x36, 0x7d, 0x24, 0x52, 0x08, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x22, - 0x9f, 0x02, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x24, 0x92, 0x41, 0x1e, 0x4a, 0x1c, 0x22, 0x30, 0x31, 0x59, 0x43, 0x50, 0x34, 0x36, 0x4a, - 0x4b, 0x59, 0x4d, 0x38, 0x46, 0x4a, 0x43, 0x51, 0x33, 0x37, 0x4e, 0x4d, 0x42, 0x59, 0x48, 0x45, - 0x35, 0x58, 0x22, 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x22, 0xbf, 0x04, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x1a, 0x04, 0x18, 0x64, - 0x28, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0xbb, 0x01, - 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8a, 0x01, 0x92, 0x41, 0x64, - 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, - 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, - 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, - 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, - 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, - 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, - 0x51, 0x3d, 0x3d, 0x22, 0xfa, 0x42, 0x20, 0x72, 0x1e, 0x28, 0x80, 0x28, 0x32, 0x19, 0x5e, 0x24, - 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x2b, - 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0xa5, 0x02, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x90, 0x02, 0x92, 0x41, 0xe0, - 0x01, 0x32, 0xcc, 0x01, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x3b, 0x20, 0x73, 0x75, 0x62, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x72, 0x65, 0x67, 0x65, 0x78, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, - 0x4a, 0x0f, 0x22, 0x6d, 0x79, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0xe0, 0x41, 0x01, 0xfa, 0x42, 0x26, 0x72, 0x24, 0x32, 0x1f, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, - 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x73, 0x5c, 0x2e, 0x5c, 0x2d, 0x5c, 0x2f, 0x5e, 0x5f, - 0x26, 0x40, 0x5d, 0x7b, 0x33, 0x2c, 0x36, 0x34, 0x7d, 0x24, 0xd0, 0x01, 0x01, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0xc9, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x82, 0x02, 0x0a, 0x12, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xd1, 0x01, 0x92, 0x41, 0xa7, 0x01, 0x32, 0x41, - 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x2e, 0x4a, 0x62, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, - 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, - 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, - 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, - 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, - 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, - 0x66, 0x51, 0x3d, 0x3d, 0x22, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x20, 0x72, 0x1e, 0x28, 0x80, 0x28, - 0x32, 0x19, 0x5e, 0x24, 0x7c, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, - 0x2d, 0x5f, 0x5d, 0x2b, 0x3d, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x24, 0x52, 0x12, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, - 0xeb, 0x01, 0x0a, 0x11, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0x92, 0x41, 0x1b, 0x4a, 0x16, 0x22, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, - 0x74, 0x22, 0x78, 0x80, 0x02, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x12, 0x72, 0x10, 0x32, 0x0e, 0x5e, - 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, 0x32, 0x2c, 0x32, 0x35, 0x36, 0x7d, 0x24, 0x52, 0x06, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x45, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x0c, 0x4a, 0x08, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x78, 0x32, 0xe0, 0x41, 0x02, 0xfa, 0x42, 0x14, 0x72, 0x12, - 0x32, 0x10, 0x5e, 0x5b, 0x5e, 0x3a, 0x23, 0x40, 0x5c, 0x73, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x30, - 0x7d, 0x24, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x92, 0x41, 0x10, 0x4a, - 0x0b, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x78, 0x80, 0x04, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x12, 0x72, 0x10, 0x32, 0x0e, 0x5e, 0x5b, 0x5e, 0x5c, 0x73, 0x5d, 0x7b, - 0x32, 0x2c, 0x35, 0x31, 0x32, 0x7d, 0x24, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x9d, 0x02, - 0x0a, 0x09, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x09, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0b, 0xe0, - 0x41, 0x02, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x0b, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x11, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0e, 0x92, - 0x41, 0x03, 0xa0, 0x01, 0x14, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x10, 0x14, 0x52, 0x11, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x18, 0x92, 0x41, 0x15, 0x4a, - 0x13, 0x7b, 0x22, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, - 0x31, 0x30, 0x30, 0x7d, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x48, 0x0a, - 0x0a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x61, - 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x61, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xee, 0xf0, 0x01, 0x0a, 0x0e, 0x4f, 0x70, 0x65, - 0x6e, 0x46, 0x47, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xd0, 0x1d, 0x0a, 0x04, - 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x1d, 0x92, 0x41, 0xee, 0x1c, 0x0a, 0x13, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x54, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x12, 0x57, 0x47, 0x65, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x72, - 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0xf7, 0x1b, 0x54, - 0x68, 0x65, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x20, 0x61, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x20, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x65, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x20, 0x0a, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x60, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x60, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x61, - 0x74, 0x69, 0x73, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x20, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x0a, 0x31, - 0x2e, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x60, 0x20, 0x69, 0x73, - 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x74, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x32, 0x2e, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, - 0x65, 0x79, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x60, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x61, - 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x66, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x60, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x28, 0x65, 0x2e, - 0x67, 0x2e, 0x2c, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x60, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x6e, - 0x6c, 0x79, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x3a, - 0x60, 0x29, 0x2e, 0x0a, 0x33, 0x2e, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x60, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x60, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x75, - 0x73, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x2c, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x61, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x28, - 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x60, 0x29, 0x2e, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x0a, 0x54, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x60, 0x20, 0x68, 0x61, 0x73, 0x20, 0x60, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x60, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x61, - 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, - 0x6f, 0x66, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x22, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, - 0x62, 0x6f, 0x62, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, - 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, - 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, - 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, - 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6b, - 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, - 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x31, 0x30, 0x2d, 0x30, - 0x36, 0x54, 0x31, 0x35, 0x3a, 0x33, 0x32, 0x3a, 0x31, 0x31, 0x2e, 0x31, 0x32, 0x38, 0x5a, 0x22, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, - 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, - 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, - 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, - 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, - 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, - 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x60, 0x75, 0x73, - 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x60, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x60, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x31, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, - 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, - 0x75, 0x6e, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x54, 0x6f, 0x20, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x60, 0x72, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2c, 0x20, 0x63, - 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, - 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, - 0x60, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, - 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6b, 0x65, 0x79, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, - 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, - 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x54, 0x31, 0x35, - 0x3a, 0x33, 0x32, 0x3a, 0x31, 0x31, 0x2e, 0x31, 0x32, 0x38, 0x5a, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x65, 0x79, 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, - 0x54, 0x56, 0x46, 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, - 0x68, 0x64, 0x58, 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, - 0x69, 0x63, 0x32, 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, - 0x33, 0x4d, 0x57, 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, - 0x4d, 0x64, 0x54, 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, - 0x3d, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, - 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, - 0x68, 0x61, 0x73, 0x20, 0x31, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x28, - 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x60, 0x29, 0x2e, 0x20, 0x20, 0x4e, 0x6f, - 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x60, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x73, 0x60, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x60, 0x72, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x60, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x60, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, - 0x73, 0x65, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x73, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x54, - 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x61, 0x6e, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, - 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2c, 0x20, 0x63, 0x61, - 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, - 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, - 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, - 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x31, 0x30, - 0x2d, 0x30, 0x35, 0x54, 0x31, 0x33, 0x3a, 0x34, 0x32, 0x3a, 0x31, 0x32, 0x2e, 0x33, 0x35, 0x36, - 0x5a, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x54, 0x31, 0x35, 0x3a, 0x33, 0x32, 0x3a, - 0x31, 0x31, 0x2e, 0x31, 0x32, 0x38, 0x5a, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x65, 0x79, 0x4a, - 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, 0x39, - 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, 0x52, - 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, 0x73, - 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, 0x5a, - 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, 0x64, - 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0x0a, 0x7d, - 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x68, 0x61, 0x73, 0x20, - 0x31, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x28, 0x60, 0x75, 0x73, 0x65, - 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x60, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31, 0x20, 0x60, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x60, 0x20, 0x28, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, - 0x6e, 0x65, 0x60, 0x29, 0x2e, 0x0a, 0x2a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x12, 0xcc, - 0x12, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x12, - 0x92, 0x41, 0xe6, 0x11, 0x0a, 0x13, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x20, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x41, 0x64, 0x64, 0x20, 0x6f, - 0x72, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0xa2, - 0x11, 0x54, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, - 0x61, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x4f, 0x70, 0x65, - 0x6e, 0x46, 0x47, 0x41, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x0a, 0x49, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x60, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x73, 0x60, 0x20, 0x61, 0x64, 0x64, 0x73, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x73, 0x60, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, - 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x60, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x2e, - 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3a, 0x20, 0x69, 0x66, 0x2c, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x6f, 0x6e, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x64, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, - 0x69, 0x73, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x6f, - 0x72, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x2e, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x61, 0x6c, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x74, - 0x20, 0x60, 0x22, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, - 0x3a, 0x20, 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x60, 0x20, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x60, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x20, 0x60, 0x22, 0x6f, - 0x6e, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x69, 0x67, 0x6e, - 0x6f, 0x72, 0x65, 0x22, 0x60, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x73, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x49, - 0x66, 0x20, 0x61, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x69, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x69, 0x67, 0x6e, 0x6f, - 0x72, 0x65, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x69, 0x64, 0x65, 0x6d, - 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, - 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, - 0x73, 0x75, 0x62, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x2c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, - 0x73, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x6f, 0x6d, - 0x69, 0x63, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x40, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, - 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x60, 0x2c, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x2e, 0x0a, - 0x41, 0x6e, 0x20, 0x60, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x6d, 0x61, 0x79, 0x20, - 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x69, 0x74, 0x20, - 0x69, 0x73, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x29, 0x20, 0x69, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x0a, 0x23, 0x23, - 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x41, 0x64, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, - 0x73, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x64, 0x64, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, - 0x6e, 0x6e, 0x65, 0x60, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x60, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x72, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2c, 0x20, 0x63, - 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, - 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, - 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x6e, - 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, - 0x31, 0x37, 0x50, 0x45, 0x43, 0x4e, 0x56, 0x41, 0x48, 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, - 0x4e, 0x43, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x73, 0x0a, 0x54, 0x6f, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x60, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x60, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x60, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, - 0x74, 0x60, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x41, - 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, - 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, - 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x20, - 0x22, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, - 0x60, 0x60, 0x0a, 0x2a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, - 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xda, 0x2a, - 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9b, 0x2a, 0x92, - 0x41, 0xf4, 0x29, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x36, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x1a, 0x9c, 0x29, 0x54, 0x68, 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x41, 0x50, - 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x60, 0x75, 0x73, 0x65, - 0x72, 0x60, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, - 0x61, 0x6e, 0x6e, 0x65, 0x60, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x65, 0x74, 0x20, 0x28, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x29, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x3a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x23, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x60, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2d, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x2a, 0x60, 0x2e, 0x0a, 0x54, 0x6f, 0x20, 0x61, - 0x72, 0x72, 0x69, 0x76, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x75, 0x73, 0x65, 0x73, 0x3a, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, - 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, - 0x20, 0x62, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, - 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, - 0x79, 0x20, 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x40, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x60, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, - 0x65, 0x74, 0x60, 0x29, 0x2e, 0x0a, 0x41, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x60, 0x2c, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x60, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, - 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, - 0x61, 0x6e, 0x20, 0x60, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, - 0x73, 0x65, 0x72, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x60, 0x20, - 0x69, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x61, - 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x59, - 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x60, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, - 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x42, - 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x20, 0x41, 0x50, 0x49, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x79, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x48, 0x49, - 0x47, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x43, 0x59, - 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x60, - 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x69, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, - 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x69, 0x66, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, - 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x0a, - 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, - 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x60, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x60, 0x2e, - 0x0a, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x7b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x3a, - 0x20, 0x74, 0x72, 0x75, 0x65, 0x7d, 0x60, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, 0x63, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x2e, 0x20, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, - 0x20, 0x69, 0x66, 0x20, 0x60, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x75, 0x73, 0x65, 0x72, 0x3a, - 0x61, 0x6e, 0x6e, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, - 0x65, 0x74, 0x29, 0x60, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x60, 0x7b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x3a, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x7d, 0x60, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x60, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x28, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, - 0x65, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x29, 0x60, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, - 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x49, 0x6e, 0x20, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x60, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x60, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, - 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x3a, 0x20, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x6c, - 0x6f, 0x74, 0x3a, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x22, - 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x20, 0x41, 0x50, 0x49, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x64, 0x79, - 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, - 0x6e, 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, - 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x3a, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x5f, 0x68, 0x6f, - 0x75, 0x72, 0x73, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, - 0x45, 0x43, 0x4e, 0x56, 0x41, 0x48, 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x22, - 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x0a, 0x53, 0x6f, 0x6d, - 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x6c, - 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x74, 0x72, 0x75, - 0x65, 0x60, 0x2c, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x46, 0x6f, 0x72, - 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, - 0x60, 0x60, 0x60, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, - 0x20, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x31, 0x2e, 0x31, 0x0a, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x5d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x23, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, - 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, - 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x60, 0x7b, 0x20, 0x22, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x7d, 0x60, 0x2e, 0x20, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x65, 0x6c, 0x66, - 0x2d, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x72, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x60, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x60, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, - 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2e, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, 0x41, 0x20, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, - 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, - 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, 0x60, 0x60, 0x60, 0x70, 0x79, 0x74, 0x68, 0x6f, - 0x6e, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, 0x20, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x20, 0x31, 0x2e, 0x31, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x0a, 0x74, - 0x79, 0x70, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x5d, 0x0a, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x3a, 0x20, 0x5b, 0x75, - 0x73, 0x65, 0x72, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x23, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5d, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x0a, 0x60, - 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x66, 0x69, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x23, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, - 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x20, - 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, - 0x61, 0x6e, 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x66, 0x69, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x66, - 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x23, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, - 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, - 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, - 0x6e, 0x65, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, - 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x60, 0x7b, 0x20, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x20, 0x7d, 0x60, 0x2c, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x65, 0x74, 0x20, 0x60, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x66, 0x69, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x23, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x60, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x72, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, - 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x23, 0x23, 0x23, 0x20, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x0a, 0x42, 0x79, 0x20, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x20, 0x41, 0x50, 0x49, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, - 0x65, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x59, - 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x68, - 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x69, 0x67, 0x68, - 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, - 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x20, 0x43, 0x61, 0x72, 0x65, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, - 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, - 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x0a, 0x60, 0x60, - 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, - 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x66, 0x69, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x23, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, - 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x48, 0x49, 0x47, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, - 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, - 0x2a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, - 0x22, 0x18, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x13, 0x0a, 0x0a, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbd, 0x12, 0x92, 0x41, 0x90, 0x12, 0x0a, - 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x51, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x35, 0x53, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x20, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0xb4, 0x11, 0x54, - 0x68, 0x65, 0x20, 0x60, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x20, - 0x41, 0x50, 0x49, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6e, 0x65, - 0x61, 0x72, 0x6c, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x74, 0x6f, 0x20, 0x60, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x2c, 0x20, 0x62, 0x75, 0x74, - 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x60, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x20, 0x69, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x41, - 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x60, 0x63, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x69, 0x73, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x62, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x49, 0x44, 0x20, 0x69, - 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x33, 0x36, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x60, 0x63, 0x6f, 0x72, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x69, 0x73, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, - 0x64, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, - 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x2e, 0x20, 0x57, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x55, 0x55, 0x49, 0x44, 0x20, 0x6f, 0x72, - 0x20, 0x55, 0x4c, 0x49, 0x44, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x63, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x60, 0x2c, 0x20, 0x62, - 0x75, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, - 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6e, 0x65, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x20, 0x61, 0x73, 0x20, 0x69, - 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3a, 0x20, 0x60, 0x5e, - 0x5b, 0x5c, 0x77, 0x5c, 0x64, 0x2d, 0x5d, 0x7b, 0x31, 0x2c, 0x33, 0x36, 0x7d, 0x24, 0x60, 0x0a, - 0x0a, 0x4e, 0x4f, 0x54, 0x45, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, - 0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, - 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x76, - 0x69, 0x61, 0x20, 0x74, 0x68, 0x65, 0x20, 0x5b, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, - 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, - 0x41, 0x54, 0x43, 0x48, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5d, 0x28, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x64, 0x65, 0x76, 0x2f, - 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x66, - 0x67, 0x61, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x23, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x43, 0x48, 0x45, - 0x43, 0x4b, 0x53, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x42, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x43, 0x48, - 0x45, 0x43, 0x4b, 0x29, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x60, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, - 0x44, 0x4b, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x44, 0x4b, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x73, 0x70, 0x6c, 0x69, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x20, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x6f, 0x77, - 0x20, 0x60, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2c, 0x20, 0x73, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x60, 0x2e, 0x0a, 0x0a, - 0x23, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x23, 0x23, 0x23, - 0x23, 0x20, 0x41, 0x20, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, - 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x61, 0x6e, 0x6e, 0x65, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x2e, 0x2e, 0x2e, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3a, 0x20, - 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x4a, - 0x41, 0x38, 0x50, 0x4d, 0x33, 0x51, 0x4d, 0x37, 0x56, 0x42, 0x50, 0x47, 0x42, 0x38, 0x4b, 0x4d, - 0x50, 0x4b, 0x38, 0x53, 0x42, 0x44, 0x35, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, - 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, - 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, - 0x62, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, - 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x2e, 0x2e, 0x2e, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x3a, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, - 0x31, 0x4a, 0x41, 0x38, 0x50, 0x4d, 0x4d, 0x36, 0x41, 0x39, 0x30, 0x4e, 0x56, 0x35, 0x45, 0x54, - 0x30, 0x46, 0x32, 0x38, 0x43, 0x59, 0x53, 0x5a, 0x51, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x0a, 0x42, 0x65, - 0x6c, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x27, 0x73, 0x20, 0x6b, 0x65, 0x79, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, - 0x64, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x30, 0x31, 0x4a, 0x41, 0x38, 0x50, 0x4d, 0x4d, 0x36, - 0x41, 0x39, 0x30, 0x4e, 0x56, 0x35, 0x45, 0x54, 0x30, 0x46, 0x32, 0x38, 0x43, 0x59, 0x53, 0x5a, - 0x51, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, - 0x7b, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x7d, 0x20, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x30, 0x31, - 0x4a, 0x41, 0x38, 0x50, 0x4d, 0x33, 0x51, 0x4d, 0x37, 0x56, 0x42, 0x50, 0x47, 0x42, 0x38, 0x4b, - 0x4d, 0x50, 0x4b, 0x38, 0x53, 0x42, 0x44, 0x35, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x2c, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x7b, 0x22, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x3a, 0x20, 0x22, 0x22, 0x7d, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, - 0x60, 0x60, 0x0a, 0x2a, 0x0a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xda, 0x1e, 0x0a, 0x06, 0x45, 0x78, 0x70, - 0x61, 0x6e, 0x64, 0x12, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x98, 0x1e, 0x92, 0x41, 0xf0, - 0x1d, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, - 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x8e, 0x01, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x74, 0x72, - 0x65, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, - 0x20, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20, - 0x20, 0x55, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x62, 0x75, - 0x67, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x1a, 0xbe, 0x1c, 0x54, 0x68, 0x65, 0x20, 0x45, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, - 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x2f, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, - 0x61, 0x64, 0x60, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x62, 0x6f, 0x74, 0x68, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x42, - 0x6f, 0x64, 0x79, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x60, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x2e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x60, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x2e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0a, 0x41, 0x20, 0x60, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, - 0x6f, 0x6e, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x60, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x60, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x60, - 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x74, 0x72, 0x65, - 0x65, 0x20, 0x77, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x73, 0x2e, 0x20, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x0a, 0x54, 0x6f, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x60, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2c, 0x20, 0x75, - 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x50, - 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x64, - 0x79, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, - 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, 0x45, 0x43, 0x4e, 0x56, 0x41, 0x48, 0x58, - 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, - 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x27, 0x73, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x65, 0x74, 0x20, 0x74, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x72, 0x65, - 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, - 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x72, 0x65, 0x65, 0x22, 0x3a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3a, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, - 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6c, 0x65, 0x61, 0x66, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x5b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x72, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6c, 0x65, 0x61, 0x66, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, - 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, - 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x65, 0x20, - 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, - 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x60, - 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, - 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x2e, 0x0a, 0x23, 0x23, - 0x23, 0x20, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, - 0x20, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x0a, 0x47, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, 0x60, 0x60, 0x60, 0x70, 0x79, 0x74, 0x68, - 0x6f, 0x6e, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x20, 0x31, 0x2e, 0x31, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x5d, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x5b, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x3a, 0x20, 0x5b, - 0x75, 0x73, 0x65, 0x72, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x5b, 0x75, 0x73, 0x65, 0x72, 0x5d, 0x20, 0x6f, 0x72, - 0x20, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x60, 0x60, - 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x5b, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, - 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x20, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, - 0x31, 0x22, 0x0a, 0x7d, 0x5d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x0a, 0x54, 0x6f, 0x20, 0x65, 0x78, - 0x70, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x60, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x73, 0x60, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, - 0x31, 0x60, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x31, 0x60, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x60, - 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x31, 0x60, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x0a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x66, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x31, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x3a, 0x0a, 0x60, 0x60, 0x60, - 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x72, 0x65, 0x65, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x31, 0x23, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x6e, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x31, 0x23, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6c, 0x65, 0x61, 0x66, 0x22, 0x3a, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x31, 0x23, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6c, 0x65, 0x61, 0x66, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x31, 0x23, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x65, 0x74, 0x22, - 0x3a, 0x20, 0x22, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x31, 0x23, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, - 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x73, 0x20, - 0x75, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x60, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x31, - 0x60, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x53, 0x6f, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x73, 0x60, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x66, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x3a, 0x31, 0x60, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x66, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3a, 0x31, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x22, 0x0a, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x74, 0x72, 0x65, 0x65, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x66, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x3a, 0x31, 0x23, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x6c, 0x65, 0x61, 0x66, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, - 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x62, 0x6f, 0x62, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x2a, 0x06, 0x45, 0x78, 0x70, 0x61, 0x6e, - 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x12, 0x82, 0x0b, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x12, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, - 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x0a, 0x92, 0x41, 0xda, - 0x09, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x1a, 0xec, 0x08, 0x54, 0x68, 0x65, 0x20, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x27, 0x73, 0x20, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2c, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0a, 0x41, 0x73, - 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x27, 0x73, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x74, 0x77, 0x69, 0x63, - 0x65, 0x2e, 0x20, 0x54, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x20, 0x47, 0x45, 0x54, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x61, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, - 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x20, - 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, - 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, - 0x45, 0x43, 0x4e, 0x56, 0x41, 0x48, 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x22, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, - 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x47, 0x34, - 0x5a, 0x57, 0x38, 0x46, 0x34, 0x41, 0x30, 0x37, 0x41, 0x4b, 0x51, 0x38, 0x52, 0x48, 0x53, 0x56, - 0x47, 0x39, 0x52, 0x57, 0x30, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x3a, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x5d, 0x2c, 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x65, 0x79, - 0x4a, 0x77, 0x61, 0x79, 0x49, 0x36, 0x49, 0x6b, 0x78, 0x42, 0x56, 0x45, 0x56, 0x54, 0x56, 0x46, - 0x39, 0x4f, 0x55, 0x30, 0x4e, 0x50, 0x54, 0x6b, 0x5a, 0x4a, 0x52, 0x31, 0x39, 0x68, 0x64, 0x58, - 0x52, 0x6f, 0x4d, 0x48, 0x4e, 0x30, 0x62, 0x33, 0x4a, 0x6c, 0x49, 0x69, 0x77, 0x69, 0x63, 0x32, - 0x73, 0x69, 0x4f, 0x69, 0x49, 0x78, 0x65, 0x6d, 0x31, 0x71, 0x62, 0x58, 0x46, 0x33, 0x4d, 0x57, - 0x5a, 0x4c, 0x5a, 0x45, 0x78, 0x54, 0x63, 0x55, 0x6f, 0x79, 0x4e, 0x30, 0x31, 0x4d, 0x64, 0x54, - 0x64, 0x71, 0x54, 0x6a, 0x68, 0x30, 0x63, 0x57, 0x67, 0x69, 0x66, 0x51, 0x3d, 0x3d, 0x22, 0x0a, - 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, - 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x60, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, - 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x30, 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, 0x45, 0x43, 0x4e, 0x56, - 0x41, 0x48, 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x22, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x2e, 0x2e, 0x2e, 0x5d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x31, 0x47, 0x34, 0x5a, 0x57, 0x38, 0x46, - 0x34, 0x41, 0x30, 0x37, 0x41, 0x4b, 0x51, 0x38, 0x52, 0x48, 0x53, 0x56, 0x47, 0x39, 0x52, 0x57, - 0x30, 0x34, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x20, 0x5b, - 0x2e, 0x2e, 0x2e, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x5d, 0x2c, - 0x0a, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x0a, 0x7d, 0x0a, 0x60, 0x60, - 0x60, 0x0a, 0x2a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x12, 0x27, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x84, 0x0b, 0x0a, 0x16, 0x52, - 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x0a, 0x92, - 0x41, 0xda, 0x09, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x35, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x1a, 0xf2, 0x08, 0x54, 0x68, 0x65, 0x20, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x41, 0x50, - 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x20, 0x62, 0x79, 0x20, 0x69, 0x74, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, - 0x0a, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0a, 0x54, 0x6f, 0x20, - 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x49, 0x44, 0x20, 0x60, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, - 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, - 0x37, 0x58, 0x31, 0x4a, 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x45, - 0x54, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x20, 0x41, 0x50, 0x49, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, - 0x31, 0x54, 0x34, 0x39, 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, - 0x4a, 0x60, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x69, 0x64, 0x60, 0x20, 0x70, - 0x61, 0x74, 0x68, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x3a, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x22, 0x30, 0x31, 0x47, 0x35, 0x4a, 0x41, 0x56, 0x4a, 0x34, 0x31, 0x54, 0x34, 0x39, - 0x45, 0x39, 0x54, 0x54, 0x33, 0x53, 0x4b, 0x56, 0x53, 0x37, 0x58, 0x31, 0x4a, 0x22, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, - 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x6e, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3a, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x65, - 0x74, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, - 0x7d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x76, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x32, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, - 0x28, 0x60, 0x75, 0x73, 0x65, 0x72, 0x60, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x60, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x60, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x60, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x68, 0x61, 0x73, - 0x20, 0x32, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x60, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x60, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x60, 0x29, 0x2e, 0x2a, 0x16, 0x52, 0x65, 0x61, 0x64, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0xf9, 0x0a, 0x0a, 0x17, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2a, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x0a, 0x92, 0x41, 0xce, 0x09, 0x0a, 0x14, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x64, - 0x65, 0x6c, 0x73, 0x12, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, - 0x77, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x1a, 0xa8, 0x08, 0x54, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x64, 0x64, - 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x45, 0x61, 0x63, 0x68, 0x20, 0x69, 0x74, 0x65, 0x6d, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x60, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, - 0x60, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x60, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x27, 0x73, 0x20, 0x49, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x60, 0x69, 0x64, 0x60, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x0a, 0x0a, 0x23, 0x23, 0x20, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x64, 0x64, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, - 0x60, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x60, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x6f, 0x64, 0x79, 0x3a, 0x20, 0x0a, 0x60, 0x60, 0x60, 0x6a, 0x73, 0x6f, 0x6e, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x75, 0x73, 0x65, 0x72, 0x22, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x22, 0x3a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3a, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x65, 0x74, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x3a, 0x22, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x3a, 0x22, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x22, 0x3a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x74, 0x68, 0x69, 0x73, 0x22, 0x3a, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x5d, 0x0a, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, 0x4f, 0x70, 0x65, 0x6e, - 0x46, 0x47, 0x41, 0x27, 0x73, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x0a, 0x60, - 0x60, 0x60, 0x0a, 0x7b, 0x22, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, - 0x31, 0x47, 0x35, 0x30, 0x51, 0x56, 0x56, 0x31, 0x37, 0x50, 0x45, 0x43, 0x4e, 0x56, 0x41, 0x48, - 0x58, 0x31, 0x47, 0x47, 0x34, 0x59, 0x35, 0x4e, 0x43, 0x22, 0x7d, 0x0a, 0x60, 0x60, 0x60, 0x0a, - 0x2a, 0x17, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4a, 0x50, 0x0a, 0x03, 0x32, 0x30, 0x31, - 0x12, 0x49, 0x0a, 0x16, 0x41, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x12, 0x2f, 0x0a, 0x2d, 0x1a, 0x2b, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, - 0x64, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0xef, 0x04, - 0x0a, 0x0f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x04, 0x92, 0x41, 0xcd, - 0x03, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x1a, 0xb2, - 0x02, 0x54, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x75, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x69, - 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, - 0x73, 0x2e, 0x20, 0x41, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x61, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x41, 0x50, 0x49, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x77, 0x69, 0x6c, - 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x6f, 0x72, - 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x2a, 0x0f, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x4a, 0x48, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x41, 0x0a, 0x16, 0x41, - 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x12, 0x27, 0x0a, 0x25, 0x1a, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xd3, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x21, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf9, 0x01, 0x92, 0x41, 0xb7, 0x01, - 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x52, 0x65, - 0x61, 0x64, 0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x1a, 0x6a, 0x54, 0x68, 0x65, - 0x20, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x41, 0x50, 0x49, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x2c, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x20, 0x69, 0x64, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x2a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xe3, 0x07, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x92, 0x07, 0x92, 0x41, 0xec, 0x06, 0x0a, 0x13, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x54, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x12, 0x26, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x1a, 0x9f, 0x06, 0x54, 0x68, 0x65, - 0x20, 0x52, 0x65, 0x61, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x41, 0x50, 0x49, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x28, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x63, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x6e, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, - 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2e, 0x20, 0x49, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, - 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x65, - 0x77, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x68, 0x61, 0x64, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, - 0x6f, 0x72, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x74, 0x79, 0x70, 0x65, 0x60, 0x20, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x67, - 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x57, - 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x2c, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, - 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x4e, 0x4f, 0x54, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, - 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x2e, 0x0a, 0x2a, 0x0b, 0x52, 0x65, - 0x61, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, - 0x1a, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0xbb, 0x02, 0x0a, 0x0b, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xea, 0x01, 0x92, - 0x41, 0xd4, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x67, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x4f, 0x70, 0x65, - 0x6e, 0x46, 0x47, 0x41, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x74, 0x75, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x2a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x4a, 0x44, 0x0a, 0x03, 0x32, 0x30, 0x31, 0x12, 0x3d, 0x0a, 0x16, 0x41, 0x20, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x12, 0x23, 0x0a, 0x21, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x3a, 0x01, 0x2a, - 0x22, 0x07, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x8e, 0x02, 0x0a, 0x0b, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbd, 0x01, 0x92, 0x41, 0x87, - 0x01, 0x0a, 0x06, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x2a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x4a, 0x44, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3d, 0x0a, 0x16, 0x41, 0x20, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x12, 0x23, 0x0a, 0x21, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, - 0x55, 0x4e, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x32, 0x12, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, - 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd2, 0x02, 0x0a, 0x0b, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x81, 0x02, 0x92, 0x41, - 0xe3, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x76, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x47, 0x41, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x6c, 0x69, - 0x6b, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x2e, 0x2a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4a, - 0x44, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x3d, 0x0a, 0x16, 0x41, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x12, 0x23, 0x0a, 0x21, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x2a, 0x12, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xaf, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x92, 0x41, 0x4b, 0x0a, 0x06, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0b, 0x47, 0x65, 0x74, 0x20, 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x1a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x4f, 0x70, - 0x65, 0x6e, 0x46, 0x47, 0x41, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x62, 0x79, 0x20, 0x69, - 0x74, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2a, 0x08, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xa9, 0x02, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x1d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xdb, 0x01, 0x92, 0x41, 0xc8, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x1a, - 0xa0, 0x01, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x70, - 0x65, 0x6e, 0x46, 0x47, 0x41, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2e, 0x0a, - 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x2e, 0x0a, 0x2a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0xf1, 0x04, - 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x86, 0x04, 0x92, 0x41, 0xcf, 0x03, 0x0a, 0x14, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x46, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, - 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x1a, 0xd9, 0x02, 0x54, 0x68, - 0x65, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x76, 0x65, - 0x72, 0x79, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x77, 0x6f, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3a, 0x20, 0x0a, 0x31, 0x2e, - 0x20, 0x49, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2c, 0x20, - 0x69, 0x74, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x2e, 0x20, 0x0a, 0x32, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, - 0x49, 0x53, 0x54, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x5f, 0x44, 0x45, 0x41, 0x44, - 0x4c, 0x49, 0x4e, 0x45, 0x2e, 0x20, 0x0a, 0x2a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, - 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x65, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x30, - 0x01, 0x12, 0xdd, 0x11, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x8c, 0x11, 0x92, 0x41, 0xde, 0x10, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x44, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x1a, 0xf2, 0x0f, 0x54, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x2e, 0x0a, 0x20, 0x54, 0x6f, 0x20, 0x61, 0x72, 0x72, 0x69, 0x76, 0x65, 0x20, 0x61, 0x74, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, - 0x50, 0x49, 0x20, 0x75, 0x73, 0x65, 0x73, 0x3a, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, - 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x2c, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, - 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x62, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, - 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x73, - 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, - 0x61, 0x73, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, - 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x40, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, - 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x60, 0x3b, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, - 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, - 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, - 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, - 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x29, 0x2e, 0x0a, 0x41, 0x6e, - 0x20, 0x60, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x49, - 0x44, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x20, - 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x60, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x75, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x73, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x60, 0x2e, 0x0a, 0x59, - 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x60, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x76, 0x61, 0x6c, - 0x75, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, - 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x65, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x42, - 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x20, 0x41, 0x50, 0x49, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, - 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x79, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x48, 0x49, - 0x47, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x43, 0x59, - 0x60, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x60, - 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x69, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, - 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x67, - 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x69, 0x66, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, - 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x0a, - 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, - 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x22, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, - 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x60, - 0x3c, 0x74, 0x79, 0x70, 0x65, 0x3e, 0x3a, 0x3c, 0x69, 0x64, 0x3e, 0x60, 0x20, 0x28, 0x65, 0x2e, - 0x67, 0x2e, 0x20, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x72, 0x6f, 0x61, - 0x64, 0x6d, 0x61, 0x70, 0x22, 0x29, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, - 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x5f, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, 0x4e, 0x45, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x70, 0x65, - 0x72, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x4f, 0x50, - 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, - 0x54, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x2c, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x65, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x68, 0x69, 0x74, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x2a, 0x0b, 0x4c, 0x69, 0x73, 0x74, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, - 0x22, 0x1f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0xe5, 0x11, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, - 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9a, 0x11, 0x92, - 0x41, 0xee, 0x10, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, - 0x70, 0x20, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x5d, 0x4c, 0x69, 0x73, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x1a, 0xeb, 0x0f, 0x54, 0x68, 0x65, 0x20, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x20, 0x54, 0x6f, 0x20, 0x61, 0x72, 0x72, 0x69, - 0x76, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x75, 0x73, 0x65, 0x73, 0x3a, 0x20, 0x61, 0x6e, - 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, - 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x72, 0x69, 0x74, 0x65, 0x20, - 0x41, 0x50, 0x49, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, - 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x74, 0x75, 0x70, 0x6c, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x62, 0x79, - 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x28, - 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, - 0x65, 0x77, 0x65, 0x72, 0x40, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, - 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x23, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x60, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, - 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x3a, 0x32, 0x30, 0x32, 0x31, 0x2d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x60, - 0x29, 0x2e, 0x0a, 0x41, 0x6e, 0x20, 0x60, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x60, 0x20, 0x6d, - 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x20, 0x49, 0x66, 0x20, - 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x20, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x20, 0x49, 0x44, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, - 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x69, - 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x65, 0x72, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x60, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, - 0x73, 0x60, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, - 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x60, 0x2e, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x60, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, - 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x65, 0x20, 0x65, - 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, - 0x6c, 0x79, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x22, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2c, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x65, 0x74, 0x73, 0x20, 0x0a, 0x6f, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2d, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x49, - 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x2d, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, - 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x28, 0x65, 0x2e, 0x67, - 0x2e, 0x20, 0x60, 0x75, 0x73, 0x65, 0x72, 0x3a, 0x2a, 0x60, 0x29, 0x2c, 0x20, 0x69, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3b, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, - 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x64, 0x0a, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, - 0x69, 0x64, 0x75, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, - 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x41, - 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, - 0x61, 0x67, 0x20, 0x4f, 0x50, 0x45, 0x4e, 0x46, 0x47, 0x41, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, - 0x55, 0x53, 0x45, 0x52, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, - 0x53, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x65, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, - 0x68, 0x69, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, - 0x74, 0x77, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x64, 0x69, - 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x2a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x2f, 0x7b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, - 0x69, 0x73, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x73, 0x42, 0xa1, 0x01, 0x0a, 0x0e, 0x63, 0x6f, - 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x4f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, 0x58, 0xaa, 0x02, 0x0a, 0x4f, - 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_openfga_service_proto_rawDesc = "" + + "\n" + + " openfga/v1/openfga_service.proto\x12\n" + + "openfga.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/api/visibility.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1bopenfga/v1/authzmodel.proto\x1a\x1eopenfga/v1/errors_ignore.proto\x1a\x18openfga/v1/openfga.proto\x1a,openfga/v1/openfga_service_consistency.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"\x91\x05\n" + + "\x12ListObjectsRequest\x12e\n" + + "\bstore_id\x18\x01 \x01(\tBI\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12>\n" + + "\x04type\x18\x03 \x01(\tB*\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x15r\x132\x11^[^:#@\\s]{1,254}$R\x04type\x12C\n" + + "\brelation\x18\x04 \x01(\tB'\x92A\n" + + "J\b\"reader\"\xe0A\x02\xfaB\x14r\x122\x10^[^:#@\\s]{1,50}$R\brelation\x127\n" + + "\x04user\x18\x05 \x01(\tB#\x92A\x13J\v\"user:anne\"x\x80\x04\x80\x01\x01\xe0A\x02\xfaB\ar\x05 \x01(\x80\x04R\x04user\x12M\n" + + "\x11contextual_tuples\x18\x06 \x01(\v2\x1f.openfga.v1.ContextualTupleKeysR\x11contextual_tuples\x121\n" + + "\acontext\x18\a \x01(\v2\x17.google.protobuf.StructR\acontext\x12M\n" + + "\vconsistency\x18\b \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"a\n" + + "\x13ListObjectsResponse\x12J\n" + + "\aobjects\x18\x01 \x03(\tB0\x92A*J([\"document:roadmap\",\"document:planning\"]\xe0A\x02R\aobjects\"\xc2\x06\n" + + "\x10ListUsersRequest\x12e\n" + + "\bstore_id\x18\x01 \x01(\tBI\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12N\n" + + "\x06object\x18\x03 \x01(\v2\x12.openfga.v1.ObjectB\"\x92A\x14J\x12\"document:example\"\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\x06object\x12C\n" + + "\brelation\x18\x04 \x01(\tB'\x92A\n" + + "J\b\"reader\"\xe0A\x02\xfaB\x14r\x122\x10^[^:#@\\s]{1,50}$R\brelation\x12\xd4\x01\n" + + "\fuser_filters\x18\x05 \x03(\v2\x1a.openfga.v1.UserTypeFilterB\x93\x01\x92A\x82\x012=The type of results returned. Only accepts exactly one value.J;[{\"type\": \"user\"}, {\"type\": \"group\", \"relation\": \"member\"}]\xa0\x01\x01\xa8\x01\x01\xe0A\x02\xfaB\a\x92\x01\x04\b\x01\x10\x01R\fuser_filters\x12R\n" + + "\x11contextual_tuples\x18\x06 \x03(\v2\x14.openfga.v1.TupleKeyB\x0e\x92A\x03\xa0\x01d\xfaB\x05\x92\x01\x02\x10dR\x11contextual_tuples\x121\n" + + "\acontext\x18\a \x01(\v2\x17.google.protobuf.StructR\acontext\x12M\n" + + "\vconsistency\x18\b \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"C\n" + + "\x11ListUsersResponse\x12.\n" + + "\x05users\x18\x01 \x03(\v2\x10.openfga.v1.UserB\x06\x92A\x00\xe0A\x02R\x05users\"\x99\x05\n" + + "\x1aStreamedListObjectsRequest\x12e\n" + + "\bstore_id\x18\x01 \x01(\tBI\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12>\n" + + "\x04type\x18\x03 \x01(\tB*\x92A\fJ\n" + + "\"document\"\xe0A\x02\xfaB\x15r\x132\x11^[^:#@\\s]{1,254}$R\x04type\x12C\n" + + "\brelation\x18\x04 \x01(\tB'\x92A\n" + + "J\b\"reader\"\xe0A\x02\xfaB\x14r\x122\x10^[^:#@\\s]{1,50}$R\brelation\x127\n" + + "\x04user\x18\x05 \x01(\tB#\x92A\x13J\v\"user:anne\"x\x80\x04\x80\x01\x01\xe0A\x02\xfaB\ar\x05 \x01(\x80\x04R\x04user\x12M\n" + + "\x11contextual_tuples\x18\x06 \x01(\v2\x1f.openfga.v1.ContextualTupleKeysR\x11contextual_tuples\x121\n" + + "\acontext\x18\a \x01(\v2\x17.google.protobuf.StructR\acontext\x12M\n" + + "\vconsistency\x18\b \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"Q\n" + + "\x1bStreamedListObjectsResponse\x122\n" + + "\x06object\x18\x01 \x01(\tB\x1a\x92A\x14J\x12\"document:roadmap\"\xe0A\x02R\x06object\"\xa2\x04\n" + + "\vReadRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12=\n" + + "\ttuple_key\x18\x02 \x01(\v2\x1f.openfga.v1.ReadRequestTupleKeyR\ttuple_key\x12]\n" + + "\tpage_size\x18\x03 \x01(\v2\x1b.google.protobuf.Int32ValueB\"\x92A\x16J\x0250Y\x00\x00\x00\x00\x00\x00Y@i\x00\x00\x00\x00\x00\x00\xf0?\xfaB\x06\x1a\x04\x18d(\x01R\tpage_size\x12\xbb\x01\n" + + "\x12continuation_token\x18\x04 \x01(\tB\x8a\x01\x92AdJb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\x12M\n" + + "\vconsistency\x18\x05 \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"\xfd\x01\n" + + "\x13ReadRequestTupleKey\x12O\n" + + "\x04user\x18\x01 \x01(\tB;\x92A\x10J\v\"user:anne\"x\x80\x04\xfaB%r#(\x80\x042\x1b^[^\\s]{1,511}:[^\\s]{1,511}$\xd0\x01\x01R\x04user\x12E\n" + + "\brelation\x18\x02 \x01(\tB)\x92A\fJ\b\"reader\"x2\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation\x12N\n" + + "\x06object\x18\x03 \x01(\tB6\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xfaB\x15r\x132\x0e^[^\\s]{2,256}$\xd0\x01\x01R\x06object\"\xc3\x02\n" + + "\fReadResponse\x12.\n" + + "\x06tuples\x18\x01 \x03(\v2\x11.openfga.v1.TupleB\x03\xe0A\x02R\x06tuples\x12\x82\x02\n" + + "\x12continuation_token\x18\x02 \x01(\tB\xd1\x01\x92A\xa7\x012AThe continuation token will be empty if there are no more tuples.Jb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xe0A\x02\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\"\x83\x03\n" + + "\x12WriteRequestWrites\x12G\n" + + "\n" + + "tuple_keys\x18\x01 \x03(\v2\x14.openfga.v1.TupleKeyB\x11\x92A\x03\xa8\x01\x01\xe0A\x02\xfaB\x05\x92\x01\x02\b\x01R\n" + + "tuple_keys\x12\xa3\x02\n" + + "\fon_duplicate\x18\x02 \x01(\tB\xfe\x01\x92A\xf7\x012\xd2\x01On 'error' ( or unspecified ), the API returns an error if an identical tuple already exists. On 'ignore', identical writes are treated as no-ops (matching on user, relation, object, and RelationshipCondition).:\x05errorJ\b\"ignore\"\xf2\x02\x05error\xf2\x02\x06ignore\xe0A\x01R\fon_duplicate\"\xd0\x02\n" + + "\x13WriteRequestDeletes\x12W\n" + + "\n" + + "tuple_keys\x18\x01 \x03(\v2$.openfga.v1.TupleKeyWithoutConditionB\x11\x92A\x03\xa8\x01\x01\xe0A\x02\xfaB\x05\x92\x01\x02\b\x01R\n" + + "tuple_keys\x12\xdf\x01\n" + + "\n" + + "on_missing\x18\x02 \x01(\tB\xbe\x01\x92A\xb7\x012\x92\x01On 'error', the API returns an error when deleting a tuple that does not exist. On 'ignore', deletes of non-existent tuples are treated as no-ops.:\x05errorJ\b\"ignore\"\xf2\x02\x05error\xf2\x02\x06ignore\xe0A\x01R\n" + + "on_missing\"\xf2\x02\n" + + "\fWriteRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x126\n" + + "\x06writes\x18\x02 \x01(\v2\x1e.openfga.v1.WriteRequestWritesR\x06writes\x129\n" + + "\adeletes\x18\x03 \x01(\v2\x1f.openfga.v1.WriteRequestDeletesR\adeletes\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x04 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\"\x0f\n" + + "\rWriteResponse\"\xc1\x04\n" + + "\fCheckRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12K\n" + + "\ttuple_key\x18\x02 \x01(\v2 .openfga.v1.CheckRequestTupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\ttuple_key\x12M\n" + + "\x11contextual_tuples\x18\x03 \x01(\v2\x1f.openfga.v1.ContextualTupleKeysR\x11contextual_tuples\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x04 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12\"\n" + + "\x05trace\x18\x05 \x01(\bB\f\x92A\t@\x01J\x05falseR\x05trace\x121\n" + + "\acontext\x18\x06 \x01(\v2\x17.google.protobuf.StructR\acontext\x12M\n" + + "\vconsistency\x18\a \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"\xee\x01\n" + + "\x14CheckRequestTupleKey\x12?\n" + + "\x04user\x18\x01 \x01(\tB+\x92A\x10J\v\"user:anne\"x\x80\x04\xe0A\x02\xfaB\x12r\x102\x0e^[^\\s]{2,512}$R\x04user\x12E\n" + + "\brelation\x18\x02 \x01(\tB)\x92A\fJ\b\"reader\"x2\xe0A\x02\xfaB\x14r\x122\x10^[^:#@\\s]{1,50}$R\brelation\x12N\n" + + "\x06object\x18\x03 \x01(\tB6\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xe0A\x02\xfaB\x12r\x102\x0e^[^\\s]{2,256}$R\x06object\"T\n" + + "\rCheckResponse\x12#\n" + + "\aallowed\x18\x01 \x01(\bB\t\x92A\x06J\x04trueR\aallowed\x12\x1e\n" + + "\n" + + "resolution\x18\x02 \x01(\tR\n" + + "resolution\"\x9a\x03\n" + + "\x11BatchCheckRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12E\n" + + "\x06checks\x18\x02 \x03(\v2\x1a.openfga.v1.BatchCheckItemB\x11\x92A\x03\xa8\x01\x01\xe0A\x02\xfaB\x05\x92\x01\x02\b\x01R\x06checks\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x03 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12M\n" + + "\vconsistency\x18\x04 \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\"\xbe\x03\n" + + "\x0eBatchCheckItem\x12K\n" + + "\ttuple_key\x18\x01 \x01(\v2 .openfga.v1.CheckRequestTupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\ttuple_key\x12M\n" + + "\x11contextual_tuples\x18\x02 \x01(\v2\x1f.openfga.v1.ContextualTupleKeysR\x11contextual_tuples\x121\n" + + "\acontext\x18\x03 \x01(\v2\x17.google.protobuf.StructR\acontext\x12\xdc\x01\n" + + "\x0ecorrelation_id\x18\x04 \x01(\tB\xb3\x01\x92A\x96\x012lcorrelation_id must be a string containing only letters, numbers, or hyphens, with length ≤ 36 characters.J&\"1cd93d8c-8e45-43c6-9a15-cbb3c7f394bc\"\xe0A\x02\xfaB\x13r\x112\x0f^[\\w\\d-]{1,36}$R\x0ecorrelation_id\"\xe6\x02\n" + + "\x12BatchCheckResponse\x12\xf0\x01\n" + + "\x06result\x18\x01 \x03(\v2*.openfga.v1.BatchCheckResponse.ResultEntryB\xab\x01\x92A\xa7\x012Nmap keys are the correlation_id values from the BatchCheckItems in the requestJU{\"1cd93d8c-8e45-43c6-9a15-cbb3c7f394bc\": {\"allowed\": true, \"error\": {\"message\": \"\"}}}R\x06result\x1a]\n" + + "\vResultEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x128\n" + + "\x05value\x18\x02 \x01(\v2\".openfga.v1.BatchCheckSingleResultR\x05value:\x028\x01\"t\n" + + "\x16BatchCheckSingleResult\x12\x1a\n" + + "\aallowed\x18\x01 \x01(\bH\x00R\aallowed\x12.\n" + + "\x05error\x18\x02 \x01(\v2\x16.openfga.v1.CheckErrorH\x00R\x05errorB\x0e\n" + + "\fcheck_result\"\xb2\x01\n" + + "\n" + + "CheckError\x129\n" + + "\vinput_error\x18\x01 \x01(\x0e2\x15.openfga.v1.ErrorCodeH\x00R\vinput_error\x12G\n" + + "\x0einternal_error\x18\x02 \x01(\x0e2\x1d.openfga.v1.InternalErrorCodeH\x00R\x0einternal_error\x12\x18\n" + + "\amessage\x18\x03 \x01(\tR\amessageB\x06\n" + + "\x04code\"\xec\x03\n" + + "\rExpandRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12L\n" + + "\ttuple_key\x18\x02 \x01(\v2!.openfga.v1.ExpandRequestTupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\ttuple_key\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x03 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xfaB(r&2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$\xd0\x01\x01R\x16authorization_model_id\x12M\n" + + "\vconsistency\x18\x04 \x01(\x0e2!.openfga.v1.ConsistencyPreferenceB\b\xfaB\x05\x82\x01\x02\x10\x01R\vconsistency\x12M\n" + + "\x11contextual_tuples\x18\x05 \x01(\v2\x1f.openfga.v1.ContextualTupleKeysR\x11contextual_tuples\"\xb4\x01\n" + + "\x15ExpandRequestTupleKey\x12H\n" + + "\brelation\x18\x01 \x01(\tB,\x92A\fJ\b\"reader\"x2\xe0A\x02\xfaB\x17r\x152\x10^[^:#@\\s]{1,50}$\xd0\x01\x01R\brelation\x12Q\n" + + "\x06object\x18\x02 \x01(\tB9\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xe0A\x02\xfaB\x15r\x132\x0e^[^\\s]{2,256}$\xd0\x01\x01R\x06object\"=\n" + + "\x0eExpandResponse\x12+\n" + + "\x04tree\x18\x01 \x01(\v2\x17.openfga.v1.UsersetTreeR\x04tree\"\xe7\x01\n" + + "\x1dReadAuthorizationModelRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\\\n" + + "\x02id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\x02id\"r\n" + + "\x1eReadAuthorizationModelResponse\x12P\n" + + "\x13authorization_model\x18\x01 \x01(\v2\x1e.openfga.v1.AuthorizationModelR\x13authorization_model\"\xfb\x03\n" + + "\x1eWriteAuthorizationModelRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12Y\n" + + "\x10type_definitions\x18\x02 \x03(\v2\x1a.openfga.v1.TypeDefinitionB\x11\x92A\x03\xa8\x01\x01\xe0A\x02\xfaB\x05\x92\x01\x02\b\x01R\x10type_definitions\x12B\n" + + "\x0eschema_version\x18\x03 \x01(\tB\x1a\xe0A\x02\xfaB\x14r\x12R\x031.0R\x031.1R\x031.2\xd0\x01\x00R\x0eschema_version\x12z\n" + + "\n" + + "conditions\x18\x04 \x03(\v2:.openfga.v1.WriteAuthorizationModelRequest.ConditionsEntryB\x1e\xfaB\x1b\x9a\x01\x18\x10\x19\"\x14r\x122\x10^[^:#@\\s]{1,50}$R\n" + + "conditions\x1aT\n" + + "\x0fConditionsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12+\n" + + "\x05value\x18\x02 \x01(\v2\x15.openfga.v1.ConditionR\x05value:\x028\x01\"\xa8\x01\n" + + "\x1fWriteAuthorizationModelResponse\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\x16authorization_model_id\"\x95\x03\n" + + "\x1eReadAuthorizationModelsRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12K\n" + + "\tpage_size\x18\x02 \x01(\v2\x1b.google.protobuf.Int32ValueB\x10\x92A\x04J\x0250\xfaB\x06\x1a\x04\x18d(\x01R\tpage_size\x12\xbb\x01\n" + + "\x12continuation_token\x18\x03 \x01(\tB\x8a\x01\x92AdJb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\"\xfc\x02\n" + + "\x1fReadAuthorizationModelsResponse\x12W\n" + + "\x14authorization_models\x18\x01 \x03(\v2\x1e.openfga.v1.AuthorizationModelB\x03\xe0A\x02R\x14authorization_models\x12\xff\x01\n" + + "\x12continuation_token\x18\x02 \x01(\tB\xce\x01\x92A\xa7\x012AThe continuation token will be empty if there are no more models.Jb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\"\xd5\x02\n" + + "\x16WriteAssertionsRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\x16authorization_model_id\x12J\n" + + "\n" + + "assertions\x18\x03 \x03(\v2\x15.openfga.v1.AssertionB\x13\x92A\x03\xa0\x01d\xe0A\x02\xfaB\a\x92\x01\x04\b\x00\x10dR\n" + + "assertions\"\x19\n" + + "\x17WriteAssertionsResponse\"\x88\x02\n" + + "\x15ReadAssertionsRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x02 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\x16authorization_model_id\"\xd6\x01\n" + + "\x16ReadAssertionsResponse\x12\x84\x01\n" + + "\x16authorization_model_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01G5JAVJ41T49E9TT3SKVS7X1J\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\x16authorization_model_id\x125\n" + + "\n" + + "assertions\x18\x02 \x03(\v2\x15.openfga.v1.AssertionR\n" + + "assertions\"\xf7\x05\n" + + "\x12ReadChangesRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12.\n" + + "\x04type\x18\x02 \x01(\tB\x1a\xfaB\x17r\x152\x10^[^:#\\s]{1,254}$\xd0\x01\x01R\x04type\x12I\n" + + "\tpage_size\x18\x03 \x01(\v2\x1b.google.protobuf.Int32ValueB\x0e\x92A\x04J\x0250\xfaB\x04\x1a\x02(\x01R\tpage_size\x12\xbb\x01\n" + + "\x12continuation_token\x18\x04 \x01(\tB\x8a\x01\x92AdJb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\x12\xbd\x02\n" + + "\n" + + "start_time\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampB\x80\x02\x92A\xf4\x012\xd7\x01Start date and time of changes to read.\n" + + "Format: ISO 8601 timestamp (e.g., 2022-01-01T00:00:00Z)\n" + + "If a continuation_token is provided along side start_time, the continuation_token will take precedence over start_time.J\x182021-01-01T00:00:00.000Z\xfaB\x05\xb2\x01\x028\x01R\n" + + "start_time\"\xd3\x02\n" + + "\x13ReadChangesResponse\x126\n" + + "\achanges\x18\x01 \x03(\v2\x17.openfga.v1.TupleChangeB\x03\xe0A\x02R\achanges\x12\x83\x02\n" + + "\x12continuation_token\x18\x02 \x01(\tB\xd2\x01\x92A\xab\x012EThe continuation token will be identical if there are no new changes.Jb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\"g\n" + + "\x12CreateStoreRequest\x12Q\n" + + "\x04name\x18\x01 \x01(\tB=\x92A\x11J\x0f\"my-store-name\"\xe0A\x02\xfaB#r!2\x1f^[a-zA-Z0-9\\s\\.\\-\\/^_&@]{3,64}$R\x04name\"\xe6\x01\n" + + "\x13CreateStoreResponse\x124\n" + + "\x02id\x18\x01 \x01(\tB$\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02R\x02id\x12\x17\n" + + "\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12?\n" + + "\n" + + "created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "created_at\x12?\n" + + "\n" + + "updated_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "updated_at\"\xd5\x01\n" + + "\x12UpdateStoreRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\x12U\n" + + "\x04name\x18\x02 \x01(\tBA\x92A\x15J\x13\"my-new-store-name\"\xe0A\x02\xfaB#r!2\x1f^[a-zA-Z0-9\\s\\.\\-\\/^_&@]{3,64}$R\x04name\"\xe6\x01\n" + + "\x13UpdateStoreResponse\x124\n" + + "\x02id\x18\x01 \x01(\tB$\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02R\x02id\x12\x17\n" + + "\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12?\n" + + "\n" + + "created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "created_at\x12?\n" + + "\n" + + "updated_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "updated_at\"~\n" + + "\x12DeleteStoreRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\"\x15\n" + + "\x13DeleteStoreResponse\"{\n" + + "\x0fGetStoreRequest\x12h\n" + + "\bstore_id\x18\x01 \x01(\tBL\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02\xfaB%r#2!^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26}$R\bstore_id\"\x9f\x02\n" + + "\x10GetStoreResponse\x124\n" + + "\x02id\x18\x01 \x01(\tB$\x92A\x1eJ\x1c\"01YCP46JKYM8FJCQ37NMBYHE5X\"\xe0A\x02R\x02id\x12\x17\n" + + "\x04name\x18\x02 \x01(\tB\x03\xe0A\x02R\x04name\x12?\n" + + "\n" + + "created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "created_at\x12?\n" + + "\n" + + "updated_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x02R\n" + + "updated_at\x12:\n" + + "\n" + + "deleted_at\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\n" + + "deleted_at\"\xbf\x04\n" + + "\x11ListStoresRequest\x12D\n" + + "\tpage_size\x18\x01 \x01(\v2\x1b.google.protobuf.Int32ValueB\t\xfaB\x06\x1a\x04\x18d(\x01R\tpage_size\x12\xbb\x01\n" + + "\x12continuation_token\x18\x02 \x01(\tB\x8a\x01\x92AdJb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\x12\xa5\x02\n" + + "\x04name\x18\x03 \x01(\tB\x90\x02\x92A\xe0\x012\xcc\x01The name parameter instructs the API to only include results that match that name.Multiple results may be returned. Only exact matches will be returned; substring matches and regexes will not be evaluatedJ\x0f\"my-store-name\"\xe0A\x01\xfaB&r$2\x1f^[a-zA-Z0-9\\s\\.\\-\\/^_&@]{3,64}$\xd0\x01\x01R\x04name\"\xc9\x02\n" + + "\x12ListStoresResponse\x12.\n" + + "\x06stores\x18\x01 \x03(\v2\x11.openfga.v1.StoreB\x03\xe0A\x02R\x06stores\x12\x82\x02\n" + + "\x12continuation_token\x18\x02 \x01(\tB\xd1\x01\x92A\xa7\x012AThe continuation token will be empty if there are no more stores.Jb\"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\xe0A\x02\xfaB r\x1e(\x80(2\x19^$|^[A-Za-z0-9-_]+={0,2}$R\x12continuation_token\"\xeb\x01\n" + + "\x11AssertionTupleKey\x12N\n" + + "\x06object\x18\x01 \x01(\tB6\x92A\x1bJ\x16\"document:2021-budget\"x\x80\x02\xe0A\x02\xfaB\x12r\x102\x0e^[^\\s]{2,256}$R\x06object\x12E\n" + + "\brelation\x18\x02 \x01(\tB)\x92A\fJ\b\"reader\"x2\xe0A\x02\xfaB\x14r\x122\x10^[^:#@\\s]{1,50}$R\brelation\x12?\n" + + "\x04user\x18\x03 \x01(\tB+\x92A\x10J\v\"user:anne\"x\x80\x04\xe0A\x02\xfaB\x12r\x102\x0e^[^\\s]{2,512}$R\x04user\"\x9d\x02\n" + + "\tAssertion\x12H\n" + + "\ttuple_key\x18\x01 \x01(\v2\x1d.openfga.v1.AssertionTupleKeyB\v\xe0A\x02\xfaB\x05\x8a\x01\x02\x10\x01R\ttuple_key\x12%\n" + + "\vexpectation\x18\x02 \x01(\bB\x03\xe0A\x02R\vexpectation\x12R\n" + + "\x11contextual_tuples\x18\x03 \x03(\v2\x14.openfga.v1.TupleKeyB\x0e\x92A\x03\xa0\x01\x14\xfaB\x05\x92\x01\x02\x10\x14R\x11contextual_tuples\x12K\n" + + "\acontext\x18\x04 \x01(\v2\x17.google.protobuf.StructB\x18\x92A\x15J\x13{\"view_count\": 100}R\acontext\"H\n" + + "\n" + + "Assertions\x12:\n" + + "\n" + + "assertions\x18\x01 \x03(\v2\x15.openfga.v1.AssertionB\x03\xe0A\x02R\n" + + "assertions2\xee\xf0\x01\n" + + "\x0eOpenFGAService\x12\xd0\x1d\n" + + "\x04Read\x12\x17.openfga.v1.ReadRequest\x1a\x18.openfga.v1.ReadResponse\"\x94\x1d\x92A\xee\x1c\n" + + "\x13Relationship Tuples\x12WGet tuples from the store that matches a query, without following userset rewrite rules\x1a\xf7\x1bThe Read API will return the tuples for a certain store that match a query filter specified in the body of the request. \n" + + "The API doesn't guarantee order by any field. \n" + + "It is different from the `/stores/{store_id}/expand` API in that it only returns relationship tuples that are stored in the system and satisfy the query. \n" + + "In the body:\n" + + "1. `tuple_key` is optional. If not specified, it will return all tuples in the store.\n" + + "2. `tuple_key.object` is mandatory if `tuple_key` is specified. It can be a full object (e.g., `type:object_id`) or type only (e.g., `type:`).\n" + + "3. `tuple_key.user` is mandatory if tuple_key is specified in the case the `tuple_key.object` is a type only. If tuple_key.user is specified, it needs to be a full object (e.g., `type:user_id`).\n" + + "## Examples\n" + + "### Query for all objects in a type definition\n" + + "To query for all objects that `user:bob` has `reader` relationship in the `document` type definition, call read API with body of\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:\"\n" + + " }\n" + + "}\n" + + "```\n" + + "The API will return tuples and a continuation token, something like\n" + + "```json\n" + + "{\n" + + " \"tuples\": [\n" + + " {\n" + + " \"key\": {\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"timestamp\": \"2021-10-06T15:32:11.128Z\"\n" + + " }\n" + + " ],\n" + + " \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\n" + + "}\n" + + "```\n" + + "This means that `user:bob` has a `reader` relationship with 1 document `document:2021-budget`. Note that this API, unlike the List Objects API, does not evaluate the tuples in the store.\n" + + "The continuation token will be empty if there are no more tuples to query.\n" + + "### Query for all stored relationship tuples that have a particular relation and object\n" + + "To query for all users that have `reader` relationship with `document:2021-budget`, call read API with body of \n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:2021-budget\",\n" + + " \"relation\": \"reader\"\n" + + " }\n" + + "}\n" + + "```\n" + + "The API will return something like \n" + + "```json\n" + + "{\n" + + " \"tuples\": [\n" + + " {\n" + + " \"key\": {\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"timestamp\": \"2021-10-06T15:32:11.128Z\"\n" + + " }\n" + + " ],\n" + + " \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\n" + + "}\n" + + "```\n" + + "This means that `document:2021-budget` has 1 `reader` (`user:bob`). Note that, even if the model said that all `writers` are also `readers`, the API will not return writers such as `user:anne` because it only returns tuples and does not evaluate them.\n" + + "### Query for all users with all relationships for a particular document\n" + + "To query for all users that have any relationship with `document:2021-budget`, call read API with body of \n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:2021-budget\"\n" + + " }\n" + + "}\n" + + "```\n" + + "The API will return something like \n" + + "```json\n" + + "{\n" + + " \"tuples\": [\n" + + " {\n" + + " \"key\": {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"writer\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"timestamp\": \"2021-10-05T13:42:12.356Z\"\n" + + " },\n" + + " {\n" + + " \"key\": {\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"timestamp\": \"2021-10-06T15:32:11.128Z\"\n" + + " }\n" + + " ],\n" + + " \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\n" + + "}\n" + + "```\n" + + "This means that `document:2021-budget` has 1 `reader` (`user:bob`) and 1 `writer` (`user:anne`).\n" + + "*\x04Read\x82\xd3\xe4\x93\x02\x1c:\x01*\"\x17/stores/{store_id}/read\x12\xcc\x12\n" + + "\x05Write\x12\x18.openfga.v1.WriteRequest\x1a\x19.openfga.v1.WriteResponse\"\x8d\x12\x92A\xe6\x11\n" + + "\x13Relationship Tuples\x12#Add or delete tuples from the store\x1a\xa2\x11The Write API will transactionally update the tuples for a certain store. Tuples and type definitions allow OpenFGA to determine whether a relationship exists between an object and an user.\n" + + "In the body, `writes` adds new tuples and `deletes` removes existing tuples. When deleting a tuple, any `condition` specified with it is ignored.\n" + + "The API is not idempotent by default: if, later on, you try to add the same tuple key (even if the `condition` is different), or if you try to delete a non-existing tuple, it will throw an error.\n" + + "To allow writes when an identical tuple already exists in the database, set `\"on_duplicate\": \"ignore\"` on the `writes` object.\n" + + "To allow deletes when a tuple was already removed from the database, set `\"on_missing\": \"ignore\"` on the `deletes` object.\n" + + "If a Write request contains both idempotent (ignore) and non-idempotent (error) operations, the most restrictive action (error) will take precedence. If a condition fails for a sub-request with an error flag, the entire transaction will be rolled back. This gives developers explicit control over the atomicity of the requests.\n" + + "The API will not allow you to write tuples such as `document:2021-budget#viewer@document:2021-budget#viewer`, because they are implicit.\n" + + "An `authorization_model_id` may be specified in the body. If it is, it will be used to assert that each written tuple (not deleted) is valid for the model specified. If it is not specified, the latest authorization model ID will be used.\n" + + "## Example\n" + + "### Adding relationships\n" + + "To add `user:anne` as a `writer` for `document:2021-budget`, call write API with the following \n" + + "```json\n" + + "{\n" + + " \"writes\": {\n" + + " \"tuple_keys\": [\n" + + " {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"writer\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " }\n" + + " ],\n" + + " \"on_duplicate\": \"ignore\"\n" + + " },\n" + + " \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"\n" + + "}\n" + + "```\n" + + "### Removing relationships\n" + + "To remove `user:bob` as a `reader` for `document:2021-budget`, call write API with the following \n" + + "```json\n" + + "{\n" + + " \"deletes\": {\n" + + " \"tuple_keys\": [\n" + + " {\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " }\n" + + " ],\n" + + " \"on_missing\": \"ignore\"\n" + + " }\n" + + "}\n" + + "```\n" + + "*\x05Write\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/stores/{store_id}/write\x12\xda*\n" + + "\x05Check\x12\x18.openfga.v1.CheckRequest\x1a\x19.openfga.v1.CheckResponse\"\x9b*\x92A\xf4)\n" + + "\x14Relationship Queries\x126Check whether a user is authorized to access an object\x1a\x9c)The Check API returns whether a given user has a relationship with a given object in a given store.\n" + + "The `user` field of the request can be a specific target, such as `user:anne`, or a userset (set of users) such as `group:marketing#member` or a type-bound public access `user:*`.\n" + + "To arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory (such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\n" + + "A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. Each of these tuples may have an associated `condition`.\n" + + "You may also provide an `authorization_model_id` in the body. This will be used to assert that the input `tuple_key` is valid for the model specified. If not specified, the assertion will be made against the latest authorization model ID. It is strongly recommended to specify authorization model id for better performance.\n" + + "You may also provide a `context` object that will be used to evaluate the conditioned tuples in the system. It is strongly recommended to provide a value for all the input parameters of all the conditions, to ensure that all tuples be evaluated correctly.\n" + + "By default, the Check API caches results for a short time to optimize performance. You may specify a value of `HIGHER_CONSISTENCY` for the optional `consistency` parameter in the body to inform the server that higher conisistency is preferred at the expense of increased latency. Consideration should be given to the increased latency if requesting higher consistency.\n" + + "The response will return whether the relationship exists in the field `allowed`.\n" + + "\n" + + "Some exceptions apply, but in general, if a Check API responds with `{allowed: true}`, then you can expect the equivalent ListObjects query to return the object, and viceversa. \n" + + "For example, if `Check(user:anne, reader, document:2021-budget)` responds with `{allowed: true}`, then `ListObjects(user:anne, reader, document)` may include `document:2021-budget` in the response.\n" + + "## Examples\n" + + "### Querying with contextual tuples\n" + + "In order to check if user `user:anne` of type `user` has a `reader` relationship with object `document:2021-budget` given the following contextual tuple\n" + + "```json\n" + + "{\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"member\",\n" + + " \"object\": \"time_slot:office_hours\"\n" + + "}\n" + + "```\n" + + "the Check API can be used with the following request body:\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"contextual_tuples\": {\n" + + " \"tuple_keys\": [\n" + + " {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"member\",\n" + + " \"object\": \"time_slot:office_hours\"\n" + + " }\n" + + " ]\n" + + " },\n" + + " \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"\n" + + "}\n" + + "```\n" + + "### Querying usersets\n" + + "Some Checks will always return `true`, even without any tuples. For example, for the following authorization model\n" + + "```python\n" + + "model\n" + + " schema 1.1\n" + + "type user\n" + + "type document\n" + + " relations\n" + + " define reader: [user]\n" + + "```\n" + + "the following query\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"user\": \"document:2021-budget#reader\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " }\n" + + "}\n" + + "```\n" + + "will always return `{ \"allowed\": true }`. This is because usersets are self-defining: the userset `document:2021-budget#reader` will always have the `reader` relation with `document:2021-budget`.\n" + + "### Querying usersets with difference in the model\n" + + "A Check for a userset can yield results that must be treated carefully if the model involves difference. For example, for the following authorization model\n" + + "```python\n" + + "model\n" + + " schema 1.1\n" + + "type user\n" + + "type group\n" + + " relations\n" + + " define member: [user]\n" + + "type document\n" + + " relations\n" + + " define blocked: [user]\n" + + " define reader: [group#member] but not blocked\n" + + "```\n" + + "the following query\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"user\": \"group:finance#member\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"contextual_tuples\": {\n" + + " \"tuple_keys\": [\n" + + " {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"member\",\n" + + " \"object\": \"group:finance\"\n" + + " },\n" + + " {\n" + + " \"user\": \"group:finance#member\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " {\n" + + " \"user\": \"user:anne\",\n" + + " \"relation\": \"blocked\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " }\n" + + " ]\n" + + " },\n" + + "}\n" + + "```\n" + + "will return `{ \"allowed\": true }`, even though a specific user of the userset `group:finance#member` does not have the `reader` relationship with the given object.\n" + + "### Requesting higher consistency\n" + + "By default, the Check API caches results for a short time to optimize performance. You may request higher consistency to inform the server that higher consistency should be preferred at the expense of increased latency. Care should be taken when requesting higher consistency due to the increased latency.\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"user\": \"group:finance#member\",\n" + + " \"relation\": \"reader\",\n" + + " \"object\": \"document:2021-budget\"\n" + + " },\n" + + " \"consistency\": \"HIGHER_CONSISTENCY\"\n" + + "}\n" + + "```\n" + + "*\x05Check\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/stores/{store_id}/check\x12\x8b\x13\n" + + "\n" + + "BatchCheck\x12\x1d.openfga.v1.BatchCheckRequest\x1a\x1e.openfga.v1.BatchCheckResponse\"\xbd\x12\x92A\x90\x12\n" + + "\x14Relationship Queries\x125Send a list of `check` operations in a single request\x1a\xb4\x11The `BatchCheck` API functions nearly identically to `Check`, but instead of checking a single user-object relationship BatchCheck accepts a list of relationships to check and returns a map containing `BatchCheckItem` response for each check it received.\n" + + "\n" + + "An associated `correlation_id` is required for each check in the batch. This ID is used to correlate a check to the appropriate response. It is a string consisting of only alphanumeric characters or hyphens with a maximum length of 36 characters. This `correlation_id` is used to map the result of each check to the item which was checked, so it must be unique for each item in the batch. We recommend using a UUID or ULID as the `correlation_id`, but you can use whatever unique identifier you need as long as it matches this regex pattern: `^[\\w\\d-]{1,36}$`\n" + + "\n" + + "NOTE: The maximum number of checks that can be passed in the `BatchCheck` API is configurable via the [OPENFGA_MAX_CHECKS_PER_BATCH_CHECK](https://openfga.dev/docs/getting-started/setup-openfga/configuration#OPENFGA_MAX_CHECKS_PER_BATCH_CHECK) environment variable. If `BatchCheck` is called using the SDK, the SDK can split the batch check requests for you.\n" + + "\n" + + "For more details on how `Check` functions, see the docs for `/check`.\n" + + "\n" + + "### Examples\n" + + "#### A BatchCheckRequest\n" + + "```json\n" + + "{\n" + + " \"checks\": [\n" + + " {\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:2021-budget\"\n" + + " \"relation\": \"reader\",\n" + + " \"user\": \"user:anne\",\n" + + " },\n" + + " \"contextual_tuples\": {...}\n" + + " \"context\": {}\n" + + " \"correlation_id\": \"01JA8PM3QM7VBPGB8KMPK8SBD5\"\n" + + " },\n" + + " {\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:2021-budget\"\n" + + " \"relation\": \"reader\",\n" + + " \"user\": \"user:bob\",\n" + + " },\n" + + " \"contextual_tuples\": {...}\n" + + " \"context\": {}\n" + + " \"correlation_id\": \"01JA8PMM6A90NV5ET0F28CYSZQ\"\n" + + " }\n" + + " ]\n" + + "}\n" + + "```\n" + + "\n" + + "Below is a possible response to the above request. Note that the result map's keys are the `correlation_id` values from the checked items in the request:\n" + + "```json\n" + + "{\n" + + " \"result\": {\n" + + " \"01JA8PMM6A90NV5ET0F28CYSZQ\": {\n" + + " \"allowed\": false, \n" + + " \"error\": {\"message\": \"\"} \n" + + " },\n" + + " \"01JA8PM3QM7VBPGB8KMPK8SBD5\": {\n" + + " \"allowed\": true, \n" + + " \"error\": {\"message\": \"\"} \n" + + " }\n" + + "}\n" + + "```\n" + + "*\n" + + "BatchCheck\x82\xd3\xe4\x93\x02#:\x01*\"\x1e/stores/{store_id}/batch-check\x12\xda\x1e\n" + + "\x06Expand\x12\x19.openfga.v1.ExpandRequest\x1a\x1a.openfga.v1.ExpandResponse\"\x98\x1e\x92A\xf0\x1d\n" + + "\x14Relationship Queries\x12\x8e\x01Expand all relationships in userset tree format, and following userset rewrite rules. Useful to reason about and debug a certain relationship\x1a\xbe\x1cThe Expand API will return all users and usersets that have certain relationship with an object in a certain store.\n" + + "This is different from the `/stores/{store_id}/read` API in that both users and computed usersets are returned.\n" + + "Body parameters `tuple_key.object` and `tuple_key.relation` are all required.\n" + + "A `contextual_tuples` object may also be included in the body of the request. This object contains one field `tuple_keys`, which is an array of tuple keys. Each of these tuples may have an associated `condition`.\n" + + "The response will return a tree whose leaves are the specific users and usersets. Union, intersection and difference operator are located in the intermediate nodes.\n" + + "\n" + + "## Example\n" + + "To expand all users that have the `reader` relationship with object `document:2021-budget`, use the Expand API with the following request body\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:2021-budget\",\n" + + " \"relation\": \"reader\"\n" + + " },\n" + + " \"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"\n" + + "}\n" + + "```\n" + + "OpenFGA's response will be a userset tree of the users and usersets that have read access to the document.\n" + + "```json\n" + + "{\n" + + " \"tree\":{\n" + + " \"root\":{\n" + + " \"type\":\"document:2021-budget#reader\",\n" + + " \"union\":{\n" + + " \"nodes\":[\n" + + " {\n" + + " \"type\":\"document:2021-budget#reader\",\n" + + " \"leaf\":{\n" + + " \"users\":{\n" + + " \"users\":[\n" + + " \"user:bob\"\n" + + " ]\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"type\":\"document:2021-budget#reader\",\n" + + " \"leaf\":{\n" + + " \"computed\":{\n" + + " \"userset\":\"document:2021-budget#writer\"\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + "}\n" + + "```\n" + + "The caller can then call expand API for the `writer` relationship for the `document:2021-budget`.\n" + + "### Expand Request with Contextual Tuples\n" + + "\n" + + "Given the model\n" + + "```python\n" + + "model\n" + + " schema 1.1\n" + + "\n" + + "type user\n" + + "\n" + + "type folder\n" + + " relations\n" + + " define owner: [user]\n" + + "\n" + + "type document\n" + + " relations\n" + + " define parent: [folder]\n" + + " define viewer: [user] or writer\n" + + " define writer: [user] or owner from parent\n" + + "```\n" + + "and the initial tuples\n" + + "```json\n" + + "[{\n" + + " \"user\": \"user:bob\",\n" + + " \"relation\": \"owner\",\n" + + " \"object\": \"folder:1\"\n" + + "}]\n" + + "```\n" + + "\n" + + "To expand all `writers` of `document:1` when `document:1` is put in `folder:1`, the first call could be\n" + + "\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"object\": \"document:1\",\n" + + " \"relation\": \"writer\"\n" + + " },\n" + + " \"contextual_tuples\": {\n" + + " \"tuple_keys\": [\n" + + " {\n" + + " \"user\": \"folder:1\",\n" + + " \"relation\": \"parent\",\n" + + " \"object\": \"document:1\"\n" + + " }\n" + + " ]\n" + + " }\n" + + "}\n" + + "```\n" + + "this returns:\n" + + "```json\n" + + "{\n" + + " \"tree\": {\n" + + " \"root\": {\n" + + " \"name\": \"document:1#writer\",\n" + + " \"union\": {\n" + + " \"nodes\": [\n" + + " {\n" + + " \"name\": \"document:1#writer\",\n" + + " \"leaf\": {\n" + + " \"users\": {\n" + + " \"users\": []\n" + + " }\n" + + " }\n" + + " },\n" + + " {\n" + + " \"name\": \"document:1#writer\",\n" + + " \"leaf\": {\n" + + " \"tupleToUserset\": {\n" + + " \"tupleset\": \"document:1#parent\",\n" + + " \"computed\": [\n" + + " {\n" + + " \"userset\": \"folder:1#owner\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + "}\n" + + "```\n" + + "This tells us that the `owner` of `folder:1` may also be a writer. So our next call could be to find the `owners` of `folder:1`\n" + + "```json\n" + + "{\n" + + " \"tuple_key\": {\n" + + " \"object\": \"folder:1\",\n" + + " \"relation\": \"owner\"\n" + + " }\n" + + "}\n" + + "```\n" + + "which gives\n" + + "```json\n" + + "{\n" + + " \"tree\": {\n" + + " \"root\": {\n" + + " \"name\": \"folder:1#owner\",\n" + + " \"leaf\": {\n" + + " \"users\": {\n" + + " \"users\": [\n" + + " \"user:bob\"\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}\n" + + "```\n" + + "*\x06Expand\x82\xd3\xe4\x93\x02\x1e:\x01*\"\x19/stores/{store_id}/expand\x12\x82\v\n" + + "\x17ReadAuthorizationModels\x12*.openfga.v1.ReadAuthorizationModelsRequest\x1a+.openfga.v1.ReadAuthorizationModelsResponse\"\x8d\n" + + "\x92A\xda\t\n" + + "\x14Authorization Models\x12:Return all the authorization models for a particular store\x1a\xec\bThe ReadAuthorizationModels API will return all the authorization models for a certain store.\n" + + "OpenFGA's response will contain an array of all authorization models, sorted in descending order of creation.\n" + + "\n" + + "## Example\n" + + "Assume that a store's authorization model has been configured twice. To get all the authorization models that have been created in this store, call GET authorization-models. The API will return a response that looks like:\n" + + "```json\n" + + "{\n" + + " \"authorization_models\": [\n" + + " {\n" + + " \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\",\n" + + " \"type_definitions\": [...]\n" + + " },\n" + + " {\n" + + " \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\",\n" + + " \"type_definitions\": [...]\n" + + " },\n" + + " ],\n" + + " \"continuation_token\": \"eyJwayI6IkxBVEVTVF9OU0NPTkZJR19hdXRoMHN0b3JlIiwic2siOiIxem1qbXF3MWZLZExTcUoyN01MdTdqTjh0cWgifQ==\"\n" + + "}\n" + + "```\n" + + "If there are no more authorization models available, the `continuation_token` field will be empty\n" + + "```json\n" + + "{\n" + + " \"authorization_models\": [\n" + + " {\n" + + " \"id\": \"01G50QVV17PECNVAHX1GG4Y5NC\",\n" + + " \"type_definitions\": [...]\n" + + " },\n" + + " {\n" + + " \"id\": \"01G4ZW8F4A07AKQ8RHSVG9RW04\",\n" + + " \"type_definitions\": [...]\n" + + " },\n" + + " ],\n" + + " \"continuation_token\": \"\"\n" + + "}\n" + + "```\n" + + "*\x17ReadAuthorizationModels\x82\xd3\xe4\x93\x02)\x12'/stores/{store_id}/authorization-models\x12\x84\v\n" + + "\x16ReadAuthorizationModel\x12).openfga.v1.ReadAuthorizationModelRequest\x1a*.openfga.v1.ReadAuthorizationModelResponse\"\x92\n" + + "\x92A\xda\t\n" + + "\x14Authorization Models\x125Return a particular version of an authorization model\x1a\xf2\bThe ReadAuthorizationModel API returns an authorization model by its identifier.\n" + + "The response will return the authorization model for the particular version.\n" + + "\n" + + "## Example\n" + + "To retrieve the authorization model with ID `01G5JAVJ41T49E9TT3SKVS7X1J` for the store, call the GET authorization-models by ID API with `01G5JAVJ41T49E9TT3SKVS7X1J` as the `id` path parameter. The API will return:\n" + + "```json\n" + + "{\n" + + " \"authorization_model\":{\n" + + " \"id\":\"01G5JAVJ41T49E9TT3SKVS7X1J\",\n" + + " \"type_definitions\":[\n" + + " {\n" + + " \"type\":\"user\"\n" + + " },\n" + + " {\n" + + " \"type\":\"document\",\n" + + " \"relations\":{\n" + + " \"reader\":{\n" + + " \"union\":{\n" + + " \"child\":[\n" + + " {\n" + + " \"this\":{}\n" + + " },\n" + + " {\n" + + " \"computedUserset\":{\n" + + " \"object\":\"\",\n" + + " \"relation\":\"writer\"\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"writer\":{\n" + + " \"this\":{}\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + "}\n" + + "```\n" + + "In the above example, there are 2 types (`user` and `document`). The `document` type has 2 relations (`writer` and `reader`).*\x16ReadAuthorizationModel\x82\xd3\xe4\x93\x02.\x12,/stores/{store_id}/authorization-models/{id}\x12\xf9\n" + + "\n" + + "\x17WriteAuthorizationModel\x12*.openfga.v1.WriteAuthorizationModelRequest\x1a+.openfga.v1.WriteAuthorizationModelResponse\"\x84\n" + + "\x92A\xce\t\n" + + "\x14Authorization Models\x12 Create a new authorization model\x1a\xa8\bThe WriteAuthorizationModel API will add a new authorization model to a store.\n" + + "Each item in the `type_definitions` array is a type definition as specified in the field `type_definition`.\n" + + "The response will return the authorization model's ID in the `id` field.\n" + + "\n" + + "## Example\n" + + "To add an authorization model with `user` and `document` type definitions, call POST authorization-models API with the body: \n" + + "```json\n" + + "{\n" + + " \"type_definitions\":[\n" + + " {\n" + + " \"type\":\"user\"\n" + + " },\n" + + " {\n" + + " \"type\":\"document\",\n" + + " \"relations\":{\n" + + " \"reader\":{\n" + + " \"union\":{\n" + + " \"child\":[\n" + + " {\n" + + " \"this\":{}\n" + + " },\n" + + " {\n" + + " \"computedUserset\":{\n" + + " \"object\":\"\",\n" + + " \"relation\":\"writer\"\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"writer\":{\n" + + " \"this\":{}\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + "}\n" + + "```\n" + + "OpenFGA's response will include the version id for this authorization model, which will look like \n" + + "```\n" + + "{\"authorization_model_id\": \"01G50QVV17PECNVAHX1GG4Y5NC\"}\n" + + "```\n" + + "*\x17WriteAuthorizationModelJP\n" + + "\x03201\x12I\n" + + "\x16A successful response.\x12/\n" + + "-\x1a+.openfga.v1.WriteAuthorizationModelResponse\x82\xd3\xe4\x93\x02,:\x01*\"'/stores/{store_id}/authorization-models\x12\xef\x04\n" + + "\x0fWriteAssertions\x12\".openfga.v1.WriteAssertionsRequest\x1a#.openfga.v1.WriteAssertionsResponse\"\x92\x04\x92A\xcd\x03\n" + + "\n" + + "Assertions\x12/Upsert assertions for an authorization model ID\x1a\xb2\x02The WriteAssertions API will upsert new assertions for an authorization model id, or overwrite the existing ones. An assertion is an object that contains a tuple key, the expectation of whether a call to the Check API of that tuple key will return true or false, and optionally a list of contextual tuples.*\x0fWriteAssertionsJH\n" + + "\x03204\x12A\n" + + "\x16A successful response.\x12'\n" + + "%\x1a#.openfga.v1.WriteAssertionsResponse\x82\xd3\xe4\x93\x02;:\x01*\x1a6/stores/{store_id}/assertions/{authorization_model_id}\x12\xd3\x02\n" + + "\x0eReadAssertions\x12!.openfga.v1.ReadAssertionsRequest\x1a\".openfga.v1.ReadAssertionsResponse\"\xf9\x01\x92A\xb7\x01\n" + + "\n" + + "Assertions\x12-Read assertions for an authorization model ID\x1ajThe ReadAssertions API will return, for a given authorization model id, all the assertions stored for it. *\x0eReadAssertions\x82\xd3\xe4\x93\x028\x126/stores/{store_id}/assertions/{authorization_model_id}\x12\xe3\a\n" + + "\vReadChanges\x12\x1e.openfga.v1.ReadChangesRequest\x1a\x1f.openfga.v1.ReadChangesResponse\"\x92\a\x92A\xec\x06\n" + + "\x13Relationship Tuples\x12&Return a list of all the tuple changes\x1a\x9f\x06The ReadChanges API will return a paginated list of tuple changes (additions and deletions) that occurred in a given store, sorted by ascending time. The response will include a continuation token that is used to get the next set of changes. If there are no changes after the provided continuation token, the same token will be returned in order for it to be used when new changes are recorded. If the store never had any tuples added or removed, this token will be empty.\n" + + "You can use the `type` parameter to only get the list of tuple changes that affect objects of that type.\n" + + "When reading a write tuple change, if it was conditioned, the condition will be returned.\n" + + "When reading a delete tuple change, the condition will NOT be returned regardless of whether it was originally conditioned or not.\n" + + "*\vReadChanges\x82\xd3\xe4\x93\x02\x1c\x12\x1a/stores/{store_id}/changes\x12\xbb\x02\n" + + "\vCreateStore\x12\x1e.openfga.v1.CreateStoreRequest\x1a\x1f.openfga.v1.CreateStoreResponse\"\xea\x01\x92A\xd4\x01\n" + + "\x06Stores\x12\x0eCreate a store\x1agCreate a unique OpenFGA store which will be used to store authorization models and relationship tuples.*\vCreateStoreJD\n" + + "\x03201\x12=\n" + + "\x16A successful response.\x12#\n" + + "!\x1a\x1f.openfga.v1.CreateStoreResponse\x82\xd3\xe4\x93\x02\f:\x01*\"\a/stores\x12\x8e\x02\n" + + "\vUpdateStore\x12\x1e.openfga.v1.UpdateStoreRequest\x1a\x1f.openfga.v1.UpdateStoreResponse\"\xbd\x01\x92A\x87\x01\n" + + "\x06Stores\x12\x0eUpdate a store\x1a\x1aUpdates an existing store.*\vUpdateStoreJD\n" + + "\x03200\x12=\n" + + "\x16A successful response.\x12#\n" + + "!\x1a\x1f.openfga.v1.UpdateStoreResponse\xfa\xd2\xe4\x93\x02\x0f\x12\rUNIMPLEMENTED\x82\xd3\xe4\x93\x02\x17:\x01*2\x12/stores/{store_id}\x12\xd2\x02\n" + + "\vDeleteStore\x12\x1e.openfga.v1.DeleteStoreRequest\x1a\x1f.openfga.v1.DeleteStoreResponse\"\x81\x02\x92A\xe3\x01\n" + + "\x06Stores\x12\x0eDelete a store\x1avDelete an OpenFGA store. This does not delete the data associated with the store, like tuples or authorization models.*\vDeleteStoreJD\n" + + "\x03204\x12=\n" + + "\x16A successful response.\x12#\n" + + "!\x1a\x1f.openfga.v1.DeleteStoreResponse\x82\xd3\xe4\x93\x02\x14*\x12/stores/{store_id}\x12\xaf\x01\n" + + "\bGetStore\x12\x1b.openfga.v1.GetStoreRequest\x1a\x1c.openfga.v1.GetStoreResponse\"h\x92AK\n" + + "\x06Stores\x12\vGet a store\x1a*Returns an OpenFGA store by its identifier*\bGetStore\x82\xd3\xe4\x93\x02\x14\x12\x12/stores/{store_id}\x12\xa9\x02\n" + + "\n" + + "ListStores\x12\x1d.openfga.v1.ListStoresRequest\x1a\x1e.openfga.v1.ListStoresResponse\"\xdb\x01\x92A\xc8\x01\n" + + "\x06Stores\x12\x0fList all stores\x1a\xa0\x01Returns a paginated list of OpenFGA stores and a continuation token to get additional stores.\n" + + "The continuation token will be empty if there are no more stores.\n" + + "*\n" + + "ListStores\x82\xd3\xe4\x93\x02\t\x12\a/stores\x12\xf1\x04\n" + + "\x13StreamedListObjects\x12&.openfga.v1.StreamedListObjectsRequest\x1a'.openfga.v1.StreamedListObjectsResponse\"\x86\x04\x92A\xcf\x03\n" + + "\x14Relationship Queries\x12FStream all objects of the given type that the user has a relation with\x1a\xd9\x02The Streamed ListObjects API is very similar to the the ListObjects API, with two differences: \n" + + "1. Instead of collecting all objects before returning a response, it streams them to the client as they are collected. \n" + + "2. The number of results returned is only limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE. \n" + + "*\x13StreamedListObjects\x82\xd3\xe4\x93\x02-:\x01*\"(/stores/{store_id}/streamed-list-objects0\x01\x12\xdd\x11\n" + + "\vListObjects\x12\x1e.openfga.v1.ListObjectsRequest\x1a\x1f.openfga.v1.ListObjectsResponse\"\x8c\x11\x92A\xde\x10\n" + + "\x14Relationship Queries\x12DList all objects of the given type that the user has a relation with\x1a\xf2\x0fThe ListObjects API returns a list of all the objects of the given type that the user has a relation with.\n" + + " To arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory (such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\n" + + "An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance.\n" + + "You may also specify `contextual_tuples` that will be treated as regular tuples. Each of these tuples may have an associated `condition`.\n" + + "You may also provide a `context` object that will be used to evaluate the conditioned tuples in the system. It is strongly recommended to provide a value for all the input parameters of all the conditions, to ensure that all tuples be evaluated correctly.\n" + + "By default, the Check API caches results for a short time to optimize performance. You may specify a value of `HIGHER_CONSISTENCY` for the optional `consistency` parameter in the body to inform the server that higher conisistency is preferred at the expense of increased latency. Consideration should be given to the increased latency if requesting higher consistency.\n" + + "The response will contain the related objects in an array in the \"objects\" field of the response and they will be strings in the object format `:` (e.g. \"document:roadmap\").\n" + + "The number of objects in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_OBJECTS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_OBJECTS_MAX_RESULTS, whichever is hit first.\n" + + "The objects given will not be sorted, and therefore two identical calls can give a given different set of objects.*\vListObjects\x82\xd3\xe4\x93\x02$:\x01*\"\x1f/stores/{store_id}/list-objects\x12\xe5\x11\n" + + "\tListUsers\x12\x1c.openfga.v1.ListUsersRequest\x1a\x1d.openfga.v1.ListUsersResponse\"\x9a\x11\x92A\xee\x10\n" + + "\x14Relationship Queries\x12]List the users matching the provided filter who have a certain relation to a particular type.\x1a\xeb\x0fThe ListUsers API returns a list of all the users of a specific type that have a relation to a given object.\n" + + " To arrive at a result, the API uses: an authorization model, explicit tuples written through the Write API, contextual tuples present in the request, and implicit tuples that exist by virtue of applying set theory (such as `document:2021-budget#viewer@document:2021-budget#viewer`; the set of users who are viewers of `document:2021-budget` are the set of users who are the viewers of `document:2021-budget`).\n" + + "An `authorization_model_id` may be specified in the body. If it is not specified, the latest authorization model ID will be used. It is strongly recommended to specify authorization model id for better performance.\n" + + "You may also specify `contextual_tuples` that will be treated as regular tuples. Each of these tuples may have an associated `condition`.\n" + + "You may also provide a `context` object that will be used to evaluate the conditioned tuples in the system. It is strongly recommended to provide a value for all the input parameters of all the conditions, to ensure that all tuples be evaluated correctly.\n" + + "The response will contain the related users in an array in the \"users\" field of the response. These results may include specific objects, usersets \n" + + "or type-bound public access. Each of these types of results is encoded in its own type and not represented as a string.In cases where a type-bound public access result is returned (e.g. `user:*`), it cannot be inferred that all subjects\n" + + "of that type have a relation to the object; it is possible that negations exist and checks should still be queried\n" + + "on individual subjects to ensure access to that document.The number of users in the response array will be limited by the execution timeout specified in the flag OPENFGA_LIST_USERS_DEADLINE and by the upper bound specified in the flag OPENFGA_LIST_USERS_MAX_RESULTS, whichever is hit first.\n" + + "The returned users will not be sorted, and therefore two identical calls may yield different sets of users.*\tListUsers\x82\xd3\xe4\x93\x02\":\x01*\"\x1d/stores/{store_id}/list-usersB\xa1\x01\n" + + "\x0ecom.openfga.v1B\x13OpenfgaServiceProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" var ( file_openfga_v1_openfga_service_proto_rawDescOnce sync.Once - file_openfga_v1_openfga_service_proto_rawDescData = file_openfga_v1_openfga_service_proto_rawDesc + file_openfga_v1_openfga_service_proto_rawDescData []byte ) func file_openfga_v1_openfga_service_proto_rawDescGZIP() []byte { file_openfga_v1_openfga_service_proto_rawDescOnce.Do(func() { - file_openfga_v1_openfga_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_openfga_service_proto_rawDescData) + file_openfga_v1_openfga_service_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_service_proto_rawDesc), len(file_openfga_v1_openfga_service_proto_rawDesc))) }) return file_openfga_v1_openfga_service_proto_rawDescData } var file_openfga_v1_openfga_service_proto_msgTypes = make([]protoimpl.MessageInfo, 51) -var file_openfga_v1_openfga_service_proto_goTypes = []interface{}{ +var file_openfga_v1_openfga_service_proto_goTypes = []any{ (*ListObjectsRequest)(nil), // 0: openfga.v1.ListObjectsRequest (*ListObjectsResponse)(nil), // 1: openfga.v1.ListObjectsResponse (*ListUsersRequest)(nil), // 2: openfga.v1.ListUsersRequest @@ -6180,601 +4089,11 @@ func file_openfga_v1_openfga_service_proto_init() { file_openfga_v1_errors_ignore_proto_init() file_openfga_v1_openfga_proto_init() file_openfga_v1_openfga_service_consistency_proto_init() - if !protoimpl.UnsafeEnabled { - file_openfga_v1_openfga_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListObjectsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListObjectsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUsersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUsersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamedListObjectsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamedListObjectsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadRequestTupleKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteRequestWrites); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteRequestDeletes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckRequestTupleKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchCheckRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchCheckItem); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchCheckResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchCheckSingleResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExpandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExpandRequestTupleKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExpandResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAuthorizationModelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAuthorizationModelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteAuthorizationModelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteAuthorizationModelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAuthorizationModelsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAuthorizationModelsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteAssertionsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WriteAssertionsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAssertionsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadAssertionsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadChangesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadChangesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateStoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateStoreResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateStoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateStoreResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteStoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteStoreResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetStoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetStoreResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListStoresRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListStoresResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AssertionTupleKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Assertion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openfga_v1_openfga_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Assertions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_openfga_v1_openfga_service_proto_msgTypes[19].OneofWrappers = []interface{}{ + file_openfga_v1_openfga_service_proto_msgTypes[19].OneofWrappers = []any{ (*BatchCheckSingleResult_Allowed)(nil), (*BatchCheckSingleResult_Error)(nil), } - file_openfga_v1_openfga_service_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_openfga_v1_openfga_service_proto_msgTypes[20].OneofWrappers = []any{ (*CheckError_InputError)(nil), (*CheckError_InternalError)(nil), } @@ -6782,7 +4101,7 @@ func file_openfga_v1_openfga_service_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_openfga_service_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_service_proto_rawDesc), len(file_openfga_v1_openfga_service_proto_rawDesc)), NumEnums: 0, NumMessages: 51, NumExtensions: 0, @@ -6793,7 +4112,6 @@ func file_openfga_v1_openfga_service_proto_init() { MessageInfos: file_openfga_v1_openfga_service_proto_msgTypes, }.Build() File_openfga_v1_openfga_service_proto = out.File - file_openfga_v1_openfga_service_proto_rawDesc = nil file_openfga_v1_openfga_service_proto_goTypes = nil file_openfga_v1_openfga_service_proto_depIdxs = nil } diff --git a/proto/openfga/v1/openfga_service.pb.gw.go b/proto/openfga/v1/openfga_service.pb.gw.go index 0dd533c1..effc3a05 100644 --- a/proto/openfga/v1/openfga_service.pb.gw.go +++ b/proto/openfga/v1/openfga_service.pb.gw.go @@ -10,6 +10,7 @@ package openfgav1 import ( "context" + "errors" "io" "net/http" @@ -24,988 +25,768 @@ import ( ) // Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) func request_OpenFGAService_Read_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ReadRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Read(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_Read_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ReadRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Read(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_Write_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Write(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_Write_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Write(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_Check_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CheckRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq CheckRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Check(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_Check_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CheckRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq CheckRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Check(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_BatchCheck_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BatchCheckRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq BatchCheckRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.BatchCheck(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_BatchCheck_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BatchCheckRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq BatchCheckRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.BatchCheck(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_Expand_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExpandRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ExpandRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.Expand(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_Expand_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExpandRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ExpandRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.Expand(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_OpenFGAService_ReadAuthorizationModels_0 = &utilities.DoubleArray{Encoding: map[string]int{"store_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_OpenFGAService_ReadAuthorizationModels_0 = &utilities.DoubleArray{Encoding: map[string]int{"store_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_OpenFGAService_ReadAuthorizationModels_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAuthorizationModelsRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAuthorizationModelsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ReadAuthorizationModels_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ReadAuthorizationModels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ReadAuthorizationModels_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAuthorizationModelsRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAuthorizationModelsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ReadAuthorizationModels_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ReadAuthorizationModels(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_ReadAuthorizationModel_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAuthorizationModelRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAuthorizationModelRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") } - protoReq.Id, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - msg, err := client.ReadAuthorizationModel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ReadAuthorizationModel_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAuthorizationModelRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAuthorizationModelRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") } - protoReq.Id, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - msg, err := server.ReadAuthorizationModel(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_WriteAuthorizationModel_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteAuthorizationModelRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteAuthorizationModelRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.WriteAuthorizationModel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_WriteAuthorizationModel_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteAuthorizationModelRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteAuthorizationModelRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.WriteAuthorizationModel(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_WriteAssertions_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteAssertionsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteAssertionsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["authorization_model_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "authorization_model_id") } - protoReq.AuthorizationModelId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "authorization_model_id", err) } - msg, err := client.WriteAssertions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_WriteAssertions_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq WriteAssertionsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq WriteAssertionsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["authorization_model_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "authorization_model_id") } - protoReq.AuthorizationModelId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "authorization_model_id", err) } - msg, err := server.WriteAssertions(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_ReadAssertions_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAssertionsRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAssertionsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["authorization_model_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "authorization_model_id") } - protoReq.AuthorizationModelId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "authorization_model_id", err) } - msg, err := client.ReadAssertions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ReadAssertions_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadAssertionsRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadAssertionsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - val, ok = pathParams["authorization_model_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "authorization_model_id") } - protoReq.AuthorizationModelId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "authorization_model_id", err) } - msg, err := server.ReadAssertions(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_OpenFGAService_ReadChanges_0 = &utilities.DoubleArray{Encoding: map[string]int{"store_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) +var filter_OpenFGAService_ReadChanges_0 = &utilities.DoubleArray{Encoding: map[string]int{"store_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} func request_OpenFGAService_ReadChanges_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadChangesRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadChangesRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ReadChanges_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ReadChanges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ReadChanges_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ReadChangesRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq ReadChangesRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ReadChanges_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ReadChanges(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_CreateStore_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateStoreRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateStoreRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } msg, err := client.CreateStore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_CreateStore_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateStoreRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + var ( + protoReq CreateStoreRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.CreateStore(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_UpdateStore_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateStoreRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq UpdateStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.UpdateStore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_UpdateStore_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateStoreRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq UpdateStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.UpdateStore(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_DeleteStore_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteStoreRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.DeleteStore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_DeleteStore_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteStoreRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq DeleteStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.DeleteStore(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_GetStore_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetStoreRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.GetStore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_GetStore_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetStoreRequest - var metadata runtime.ServerMetadata - var ( - val string - ok bool - err error - _ = err + protoReq GetStoreRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.GetStore(ctx, &protoReq) return msg, metadata, err - } -var ( - filter_OpenFGAService_ListStores_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) +var filter_OpenFGAService_ListStores_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} func request_OpenFGAService_ListStores_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListStoresRequest - var metadata runtime.ServerMetadata - + var ( + protoReq ListStoresRequest + metadata runtime.ServerMetadata + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ListStores_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ListStores(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ListStores_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListStoresRequest - var metadata runtime.ServerMetadata - + var ( + protoReq ListStoresRequest + metadata runtime.ServerMetadata + ) if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_OpenFGAService_ListStores_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ListStores(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_StreamedListObjects_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (OpenFGAService_StreamedListObjectsClient, runtime.ServerMetadata, error) { - var protoReq StreamedListObjectsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq StreamedListObjectsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - stream, err := client.StreamedListObjects(ctx, &protoReq) if err != nil { return nil, metadata, err @@ -1016,144 +797,111 @@ func request_OpenFGAService_StreamedListObjects_0(ctx context.Context, marshaler } metadata.HeaderMD = header return stream, metadata, nil - } func request_OpenFGAService_ListObjects_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListObjectsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ListObjectsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.ListObjects(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ListObjects_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListObjectsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ListObjectsRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.ListObjects(ctx, &protoReq) return msg, metadata, err - } func request_OpenFGAService_ListUsers_0(ctx context.Context, marshaler runtime.Marshaler, client OpenFGAServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ListUsersRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := client.ListUsers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err - } func local_request_OpenFGAService_ListUsers_0(ctx context.Context, marshaler runtime.Marshaler, server OpenFGAServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListUsersRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( - val string - ok bool - err error - _ = err + protoReq ListUsersRequest + metadata runtime.ServerMetadata + err error ) - - val, ok = pathParams["store_id"] + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["store_id"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "store_id") } - protoReq.StoreId, err = runtime.String(val) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "store_id", err) } - msg, err := server.ListUsers(ctx, &protoReq) return msg, metadata, err - } // RegisterOpenFGAServiceHandlerServer registers the http handlers for service OpenFGAService to "mux". // UnaryRPC :call OpenFGAServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterOpenFGAServiceHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server OpenFGAServiceServer) error { - - mux.Handle("POST", pattern_OpenFGAService_Read_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Read_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Read", runtime.WithHTTPPathPattern("/stores/{store_id}/read")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Read", runtime.WithHTTPPathPattern("/stores/{store_id}/read")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1165,20 +913,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Read_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Write_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Write_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Write", runtime.WithHTTPPathPattern("/stores/{store_id}/write")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Write", runtime.WithHTTPPathPattern("/stores/{store_id}/write")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1190,20 +933,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Write_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Check", runtime.WithHTTPPathPattern("/stores/{store_id}/check")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Check", runtime.WithHTTPPathPattern("/stores/{store_id}/check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1215,20 +953,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Check_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_BatchCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_BatchCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/BatchCheck", runtime.WithHTTPPathPattern("/stores/{store_id}/batch-check")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/BatchCheck", runtime.WithHTTPPathPattern("/stores/{store_id}/batch-check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1240,20 +973,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_BatchCheck_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Expand", runtime.WithHTTPPathPattern("/stores/{store_id}/expand")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Expand", runtime.WithHTTPPathPattern("/stores/{store_id}/expand")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1265,20 +993,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Expand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAuthorizationModels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAuthorizationModels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModels", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModels", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1290,20 +1013,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAuthorizationModels_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models/{id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1315,20 +1033,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAuthorizationModel_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_WriteAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_WriteAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1340,20 +1053,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_WriteAuthorizationModel_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("PUT", pattern_OpenFGAService_WriteAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPut, pattern_OpenFGAService_WriteAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1365,20 +1073,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_WriteAssertions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1390,20 +1093,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAssertions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadChanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadChanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadChanges", runtime.WithHTTPPathPattern("/stores/{store_id}/changes")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadChanges", runtime.WithHTTPPathPattern("/stores/{store_id}/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1415,20 +1113,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadChanges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_CreateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_CreateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/CreateStore", runtime.WithHTTPPathPattern("/stores")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/CreateStore", runtime.WithHTTPPathPattern("/stores")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1440,20 +1133,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_CreateStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("PATCH", pattern_OpenFGAService_UpdateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPatch, pattern_OpenFGAService_UpdateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/UpdateStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/UpdateStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1465,20 +1153,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_UpdateStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_OpenFGAService_DeleteStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_OpenFGAService_DeleteStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/DeleteStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/DeleteStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1490,20 +1173,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_DeleteStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_GetStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_GetStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/GetStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/GetStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1515,20 +1193,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_GetStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ListStores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ListStores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListStores", runtime.WithHTTPPathPattern("/stores")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListStores", runtime.WithHTTPPathPattern("/stores")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1540,27 +1213,22 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListStores_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - mux.Handle("POST", pattern_OpenFGAService_StreamedListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_StreamedListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return }) - - mux.Handle("POST", pattern_OpenFGAService_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/list-objects")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/list-objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1572,20 +1240,15 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_ListUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_ListUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListUsers", runtime.WithHTTPPathPattern("/stores/{store_id}/list-users")) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListUsers", runtime.WithHTTPPathPattern("/stores/{store_id}/list-users")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1597,9 +1260,7 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) return nil @@ -1608,25 +1269,24 @@ func RegisterOpenFGAServiceHandlerServer(ctx context.Context, mux *runtime.Serve // RegisterOpenFGAServiceHandlerFromEndpoint is same as RegisterOpenFGAServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterOpenFGAServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.DialContext(ctx, endpoint, opts...) + conn, err := grpc.NewClient(endpoint, opts...) if err != nil { return err } defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) } }() }() - return RegisterOpenFGAServiceHandler(ctx, mux, conn) } @@ -1640,16 +1300,13 @@ func RegisterOpenFGAServiceHandler(ctx context.Context, mux *runtime.ServeMux, c // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "OpenFGAServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "OpenFGAServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "OpenFGAServiceClient" to call the correct interceptors. +// "OpenFGAServiceClient" to call the correct interceptors. This client ignores the HTTP middlewares. func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client OpenFGAServiceClient) error { - - mux.Handle("POST", pattern_OpenFGAService_Read_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Read_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Read", runtime.WithHTTPPathPattern("/stores/{store_id}/read")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Read", runtime.WithHTTPPathPattern("/stores/{store_id}/read")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1660,18 +1317,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Read_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Write_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Write_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Write", runtime.WithHTTPPathPattern("/stores/{store_id}/write")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Write", runtime.WithHTTPPathPattern("/stores/{store_id}/write")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1682,18 +1334,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Write_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Check", runtime.WithHTTPPathPattern("/stores/{store_id}/check")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Check", runtime.WithHTTPPathPattern("/stores/{store_id}/check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1704,18 +1351,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Check_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_BatchCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_BatchCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/BatchCheck", runtime.WithHTTPPathPattern("/stores/{store_id}/batch-check")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/BatchCheck", runtime.WithHTTPPathPattern("/stores/{store_id}/batch-check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1726,18 +1368,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_BatchCheck_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Expand", runtime.WithHTTPPathPattern("/stores/{store_id}/expand")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/Expand", runtime.WithHTTPPathPattern("/stores/{store_id}/expand")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1748,18 +1385,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_Expand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAuthorizationModels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAuthorizationModels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModels", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModels", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1770,18 +1402,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAuthorizationModels_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models/{id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1792,18 +1419,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAuthorizationModel_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_WriteAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_WriteAuthorizationModel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAuthorizationModel", runtime.WithHTTPPathPattern("/stores/{store_id}/authorization-models")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1814,18 +1436,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_WriteAuthorizationModel_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("PUT", pattern_OpenFGAService_WriteAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPut, pattern_OpenFGAService_WriteAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/WriteAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1836,18 +1453,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_WriteAssertions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadAssertions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadAssertions", runtime.WithHTTPPathPattern("/stores/{store_id}/assertions/{authorization_model_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1858,18 +1470,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadAssertions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ReadChanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ReadChanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadChanges", runtime.WithHTTPPathPattern("/stores/{store_id}/changes")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ReadChanges", runtime.WithHTTPPathPattern("/stores/{store_id}/changes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1880,18 +1487,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ReadChanges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_CreateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_CreateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/CreateStore", runtime.WithHTTPPathPattern("/stores")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/CreateStore", runtime.WithHTTPPathPattern("/stores")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1902,18 +1504,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_CreateStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("PATCH", pattern_OpenFGAService_UpdateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPatch, pattern_OpenFGAService_UpdateStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/UpdateStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/UpdateStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1924,18 +1521,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_UpdateStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("DELETE", pattern_OpenFGAService_DeleteStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodDelete, pattern_OpenFGAService_DeleteStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/DeleteStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/DeleteStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1946,18 +1538,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_DeleteStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_GetStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_GetStore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/GetStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/GetStore", runtime.WithHTTPPathPattern("/stores/{store_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1968,18 +1555,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_GetStore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("GET", pattern_OpenFGAService_ListStores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodGet, pattern_OpenFGAService_ListStores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListStores", runtime.WithHTTPPathPattern("/stores")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListStores", runtime.WithHTTPPathPattern("/stores")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1990,18 +1572,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListStores_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_StreamedListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_StreamedListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/StreamedListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/streamed-list-objects")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/StreamedListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/streamed-list-objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2012,18 +1589,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_StreamedListObjects_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/list-objects")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListObjects", runtime.WithHTTPPathPattern("/stores/{store_id}/list-objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2034,18 +1606,13 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - - mux.Handle("POST", pattern_OpenFGAService_ListUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle(http.MethodPost, pattern_OpenFGAService_ListUsers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListUsers", runtime.WithHTTPPathPattern("/stores/{store_id}/list-users")) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/openfga.v1.OpenFGAService/ListUsers", runtime.WithHTTPPathPattern("/stores/{store_id}/list-users")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2056,90 +1623,51 @@ func RegisterOpenFGAServiceHandlerClient(ctx context.Context, mux *runtime.Serve runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_OpenFGAService_ListUsers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - }) - return nil } var ( - pattern_OpenFGAService_Read_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "read"}, "")) - - pattern_OpenFGAService_Write_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "write"}, "")) - - pattern_OpenFGAService_Check_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "check"}, "")) - - pattern_OpenFGAService_BatchCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "batch-check"}, "")) - - pattern_OpenFGAService_Expand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "expand"}, "")) - + pattern_OpenFGAService_Read_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "read"}, "")) + pattern_OpenFGAService_Write_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "write"}, "")) + pattern_OpenFGAService_Check_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "check"}, "")) + pattern_OpenFGAService_BatchCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "batch-check"}, "")) + pattern_OpenFGAService_Expand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "expand"}, "")) pattern_OpenFGAService_ReadAuthorizationModels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "authorization-models"}, "")) - - pattern_OpenFGAService_ReadAuthorizationModel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "authorization-models", "id"}, "")) - + pattern_OpenFGAService_ReadAuthorizationModel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "authorization-models", "id"}, "")) pattern_OpenFGAService_WriteAuthorizationModel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "authorization-models"}, "")) - - pattern_OpenFGAService_WriteAssertions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "assertions", "authorization_model_id"}, "")) - - pattern_OpenFGAService_ReadAssertions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "assertions", "authorization_model_id"}, "")) - - pattern_OpenFGAService_ReadChanges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "changes"}, "")) - - pattern_OpenFGAService_CreateStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"stores"}, "")) - - pattern_OpenFGAService_UpdateStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) - - pattern_OpenFGAService_DeleteStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) - - pattern_OpenFGAService_GetStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) - - pattern_OpenFGAService_ListStores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"stores"}, "")) - - pattern_OpenFGAService_StreamedListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "streamed-list-objects"}, "")) - - pattern_OpenFGAService_ListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "list-objects"}, "")) - - pattern_OpenFGAService_ListUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "list-users"}, "")) + pattern_OpenFGAService_WriteAssertions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "assertions", "authorization_model_id"}, "")) + pattern_OpenFGAService_ReadAssertions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"stores", "store_id", "assertions", "authorization_model_id"}, "")) + pattern_OpenFGAService_ReadChanges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "changes"}, "")) + pattern_OpenFGAService_CreateStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"stores"}, "")) + pattern_OpenFGAService_UpdateStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) + pattern_OpenFGAService_DeleteStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) + pattern_OpenFGAService_GetStore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"stores", "store_id"}, "")) + pattern_OpenFGAService_ListStores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"stores"}, "")) + pattern_OpenFGAService_StreamedListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "streamed-list-objects"}, "")) + pattern_OpenFGAService_ListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "list-objects"}, "")) + pattern_OpenFGAService_ListUsers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"stores", "store_id", "list-users"}, "")) ) var ( - forward_OpenFGAService_Read_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_Write_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_Check_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_BatchCheck_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_Expand_0 = runtime.ForwardResponseMessage - + forward_OpenFGAService_Read_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_Write_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_Check_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_BatchCheck_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_Expand_0 = runtime.ForwardResponseMessage forward_OpenFGAService_ReadAuthorizationModels_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_ReadAuthorizationModel_0 = runtime.ForwardResponseMessage - + forward_OpenFGAService_ReadAuthorizationModel_0 = runtime.ForwardResponseMessage forward_OpenFGAService_WriteAuthorizationModel_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_WriteAssertions_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_ReadAssertions_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_ReadChanges_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_CreateStore_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_UpdateStore_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_DeleteStore_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_GetStore_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_ListStores_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_StreamedListObjects_0 = runtime.ForwardResponseStream - - forward_OpenFGAService_ListObjects_0 = runtime.ForwardResponseMessage - - forward_OpenFGAService_ListUsers_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_WriteAssertions_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_ReadAssertions_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_ReadChanges_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_CreateStore_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_UpdateStore_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_DeleteStore_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_GetStore_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_ListStores_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_StreamedListObjects_0 = runtime.ForwardResponseStream + forward_OpenFGAService_ListObjects_0 = runtime.ForwardResponseMessage + forward_OpenFGAService_ListUsers_0 = runtime.ForwardResponseMessage ) diff --git a/proto/openfga/v1/openfga_service_consistency.pb.go b/proto/openfga/v1/openfga_service_consistency.pb.go index 5979204c..569a0f05 100644 --- a/proto/openfga/v1/openfga_service_consistency.pb.go +++ b/proto/openfga/v1/openfga_service_consistency.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.36.11 // protoc (unknown) // source: openfga/v1/openfga_service_consistency.proto @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -75,44 +76,32 @@ func (ConsistencyPreference) EnumDescriptor() ([]byte, []int) { var File_openfga_v1_openfga_service_consistency_proto protoreflect.FileDescriptor -var file_openfga_v1_openfga_service_consistency_proto_rawDesc = []byte{ - 0x0a, 0x2c, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x66, 0x67, 0x61, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, - 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x2a, 0x57, 0x0a, 0x15, 0x43, 0x6f, - 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x49, 0x5a, 0x45, - 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x64, 0x12, 0x17, 0x0a, 0x12, 0x48, 0x49, - 0x47, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x43, 0x59, - 0x10, 0xc8, 0x01, 0x42, 0xac, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, - 0x66, 0x67, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2f, 0x76, - 0x31, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x58, - 0x58, 0xaa, 0x02, 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x2e, 0x56, 0x31, 0xca, 0x02, - 0x0a, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x16, 0x4f, 0x70, - 0x65, 0x6e, 0x66, 0x67, 0x61, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x4f, 0x70, 0x65, 0x6e, 0x66, 0x67, 0x61, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_openfga_v1_openfga_service_consistency_proto_rawDesc = "" + + "\n" + + ",openfga/v1/openfga_service_consistency.proto\x12\n" + + "openfga.v1*W\n" + + "\x15ConsistencyPreference\x12\x0f\n" + + "\vUNSPECIFIED\x10\x00\x12\x14\n" + + "\x10MINIMIZE_LATENCY\x10d\x12\x17\n" + + "\x12HIGHER_CONSISTENCY\x10\xc8\x01B\xac\x01\n" + + "\x0ecom.openfga.v1B\x1eOpenfgaServiceConsistencyProtoP\x01Z1github.com/openfga/api/proto/openfga/v1;openfgav1\xa2\x02\x03OXX\xaa\x02\n" + + "Openfga.V1\xca\x02\n" + + "Openfga\\V1\xe2\x02\x16Openfga\\V1\\GPBMetadata\xea\x02\vOpenfga::V1b\x06proto3" var ( file_openfga_v1_openfga_service_consistency_proto_rawDescOnce sync.Once - file_openfga_v1_openfga_service_consistency_proto_rawDescData = file_openfga_v1_openfga_service_consistency_proto_rawDesc + file_openfga_v1_openfga_service_consistency_proto_rawDescData []byte ) func file_openfga_v1_openfga_service_consistency_proto_rawDescGZIP() []byte { file_openfga_v1_openfga_service_consistency_proto_rawDescOnce.Do(func() { - file_openfga_v1_openfga_service_consistency_proto_rawDescData = protoimpl.X.CompressGZIP(file_openfga_v1_openfga_service_consistency_proto_rawDescData) + file_openfga_v1_openfga_service_consistency_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_service_consistency_proto_rawDesc), len(file_openfga_v1_openfga_service_consistency_proto_rawDesc))) }) return file_openfga_v1_openfga_service_consistency_proto_rawDescData } var file_openfga_v1_openfga_service_consistency_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_openfga_v1_openfga_service_consistency_proto_goTypes = []interface{}{ +var file_openfga_v1_openfga_service_consistency_proto_goTypes = []any{ (ConsistencyPreference)(0), // 0: openfga.v1.ConsistencyPreference } var file_openfga_v1_openfga_service_consistency_proto_depIdxs = []int32{ @@ -132,7 +121,7 @@ func file_openfga_v1_openfga_service_consistency_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openfga_v1_openfga_service_consistency_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_openfga_v1_openfga_service_consistency_proto_rawDesc), len(file_openfga_v1_openfga_service_consistency_proto_rawDesc)), NumEnums: 1, NumMessages: 0, NumExtensions: 0, @@ -143,7 +132,6 @@ func file_openfga_v1_openfga_service_consistency_proto_init() { EnumInfos: file_openfga_v1_openfga_service_consistency_proto_enumTypes, }.Build() File_openfga_v1_openfga_service_consistency_proto = out.File - file_openfga_v1_openfga_service_consistency_proto_rawDesc = nil file_openfga_v1_openfga_service_consistency_proto_goTypes = nil file_openfga_v1_openfga_service_consistency_proto_depIdxs = nil } diff --git a/proto/openfga/v1/openfga_service_grpc.pb.go b/proto/openfga/v1/openfga_service_grpc.pb.go index a15c7ad1..99bf8179 100644 --- a/proto/openfga/v1/openfga_service_grpc.pb.go +++ b/proto/openfga/v1/openfga_service_grpc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.6.2 // - protoc (unknown) // source: openfga/v1/openfga_service.proto @@ -15,8 +15,8 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( OpenFGAService_Read_FullMethodName = "/openfga.v1.OpenFGAService/Read" @@ -60,7 +60,7 @@ type OpenFGAServiceClient interface { DeleteStore(ctx context.Context, in *DeleteStoreRequest, opts ...grpc.CallOption) (*DeleteStoreResponse, error) GetStore(ctx context.Context, in *GetStoreRequest, opts ...grpc.CallOption) (*GetStoreResponse, error) ListStores(ctx context.Context, in *ListStoresRequest, opts ...grpc.CallOption) (*ListStoresResponse, error) - StreamedListObjects(ctx context.Context, in *StreamedListObjectsRequest, opts ...grpc.CallOption) (OpenFGAService_StreamedListObjectsClient, error) + StreamedListObjects(ctx context.Context, in *StreamedListObjectsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StreamedListObjectsResponse], error) ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error) ListUsers(ctx context.Context, in *ListUsersRequest, opts ...grpc.CallOption) (*ListUsersResponse, error) } @@ -74,8 +74,9 @@ func NewOpenFGAServiceClient(cc grpc.ClientConnInterface) OpenFGAServiceClient { } func (c *openFGAServiceClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ReadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ReadResponse) - err := c.cc.Invoke(ctx, OpenFGAService_Read_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_Read_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -83,8 +84,9 @@ func (c *openFGAServiceClient) Read(ctx context.Context, in *ReadRequest, opts . } func (c *openFGAServiceClient) Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(WriteResponse) - err := c.cc.Invoke(ctx, OpenFGAService_Write_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_Write_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -92,8 +94,9 @@ func (c *openFGAServiceClient) Write(ctx context.Context, in *WriteRequest, opts } func (c *openFGAServiceClient) Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CheckResponse) - err := c.cc.Invoke(ctx, OpenFGAService_Check_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_Check_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -101,8 +104,9 @@ func (c *openFGAServiceClient) Check(ctx context.Context, in *CheckRequest, opts } func (c *openFGAServiceClient) BatchCheck(ctx context.Context, in *BatchCheckRequest, opts ...grpc.CallOption) (*BatchCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(BatchCheckResponse) - err := c.cc.Invoke(ctx, OpenFGAService_BatchCheck_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_BatchCheck_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -110,8 +114,9 @@ func (c *openFGAServiceClient) BatchCheck(ctx context.Context, in *BatchCheckReq } func (c *openFGAServiceClient) Expand(ctx context.Context, in *ExpandRequest, opts ...grpc.CallOption) (*ExpandResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ExpandResponse) - err := c.cc.Invoke(ctx, OpenFGAService_Expand_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_Expand_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -119,8 +124,9 @@ func (c *openFGAServiceClient) Expand(ctx context.Context, in *ExpandRequest, op } func (c *openFGAServiceClient) ReadAuthorizationModels(ctx context.Context, in *ReadAuthorizationModelsRequest, opts ...grpc.CallOption) (*ReadAuthorizationModelsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ReadAuthorizationModelsResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ReadAuthorizationModels_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ReadAuthorizationModels_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -128,8 +134,9 @@ func (c *openFGAServiceClient) ReadAuthorizationModels(ctx context.Context, in * } func (c *openFGAServiceClient) ReadAuthorizationModel(ctx context.Context, in *ReadAuthorizationModelRequest, opts ...grpc.CallOption) (*ReadAuthorizationModelResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ReadAuthorizationModelResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ReadAuthorizationModel_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ReadAuthorizationModel_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -137,8 +144,9 @@ func (c *openFGAServiceClient) ReadAuthorizationModel(ctx context.Context, in *R } func (c *openFGAServiceClient) WriteAuthorizationModel(ctx context.Context, in *WriteAuthorizationModelRequest, opts ...grpc.CallOption) (*WriteAuthorizationModelResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(WriteAuthorizationModelResponse) - err := c.cc.Invoke(ctx, OpenFGAService_WriteAuthorizationModel_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_WriteAuthorizationModel_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -146,8 +154,9 @@ func (c *openFGAServiceClient) WriteAuthorizationModel(ctx context.Context, in * } func (c *openFGAServiceClient) WriteAssertions(ctx context.Context, in *WriteAssertionsRequest, opts ...grpc.CallOption) (*WriteAssertionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(WriteAssertionsResponse) - err := c.cc.Invoke(ctx, OpenFGAService_WriteAssertions_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_WriteAssertions_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -155,8 +164,9 @@ func (c *openFGAServiceClient) WriteAssertions(ctx context.Context, in *WriteAss } func (c *openFGAServiceClient) ReadAssertions(ctx context.Context, in *ReadAssertionsRequest, opts ...grpc.CallOption) (*ReadAssertionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ReadAssertionsResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ReadAssertions_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ReadAssertions_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -164,8 +174,9 @@ func (c *openFGAServiceClient) ReadAssertions(ctx context.Context, in *ReadAsser } func (c *openFGAServiceClient) ReadChanges(ctx context.Context, in *ReadChangesRequest, opts ...grpc.CallOption) (*ReadChangesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ReadChangesResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ReadChanges_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ReadChanges_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -173,8 +184,9 @@ func (c *openFGAServiceClient) ReadChanges(ctx context.Context, in *ReadChangesR } func (c *openFGAServiceClient) CreateStore(ctx context.Context, in *CreateStoreRequest, opts ...grpc.CallOption) (*CreateStoreResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateStoreResponse) - err := c.cc.Invoke(ctx, OpenFGAService_CreateStore_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_CreateStore_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -182,8 +194,9 @@ func (c *openFGAServiceClient) CreateStore(ctx context.Context, in *CreateStoreR } func (c *openFGAServiceClient) UpdateStore(ctx context.Context, in *UpdateStoreRequest, opts ...grpc.CallOption) (*UpdateStoreResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateStoreResponse) - err := c.cc.Invoke(ctx, OpenFGAService_UpdateStore_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_UpdateStore_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -191,8 +204,9 @@ func (c *openFGAServiceClient) UpdateStore(ctx context.Context, in *UpdateStoreR } func (c *openFGAServiceClient) DeleteStore(ctx context.Context, in *DeleteStoreRequest, opts ...grpc.CallOption) (*DeleteStoreResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeleteStoreResponse) - err := c.cc.Invoke(ctx, OpenFGAService_DeleteStore_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_DeleteStore_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -200,8 +214,9 @@ func (c *openFGAServiceClient) DeleteStore(ctx context.Context, in *DeleteStoreR } func (c *openFGAServiceClient) GetStore(ctx context.Context, in *GetStoreRequest, opts ...grpc.CallOption) (*GetStoreResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetStoreResponse) - err := c.cc.Invoke(ctx, OpenFGAService_GetStore_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_GetStore_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -209,20 +224,22 @@ func (c *openFGAServiceClient) GetStore(ctx context.Context, in *GetStoreRequest } func (c *openFGAServiceClient) ListStores(ctx context.Context, in *ListStoresRequest, opts ...grpc.CallOption) (*ListStoresResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListStoresResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ListStores_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ListStores_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *openFGAServiceClient) StreamedListObjects(ctx context.Context, in *StreamedListObjectsRequest, opts ...grpc.CallOption) (OpenFGAService_StreamedListObjectsClient, error) { - stream, err := c.cc.NewStream(ctx, &OpenFGAService_ServiceDesc.Streams[0], OpenFGAService_StreamedListObjects_FullMethodName, opts...) +func (c *openFGAServiceClient) StreamedListObjects(ctx context.Context, in *StreamedListObjectsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StreamedListObjectsResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &OpenFGAService_ServiceDesc.Streams[0], OpenFGAService_StreamedListObjects_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &openFGAServiceStreamedListObjectsClient{stream} + x := &grpc.GenericClientStream[StreamedListObjectsRequest, StreamedListObjectsResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -232,26 +249,13 @@ func (c *openFGAServiceClient) StreamedListObjects(ctx context.Context, in *Stre return x, nil } -type OpenFGAService_StreamedListObjectsClient interface { - Recv() (*StreamedListObjectsResponse, error) - grpc.ClientStream -} - -type openFGAServiceStreamedListObjectsClient struct { - grpc.ClientStream -} - -func (x *openFGAServiceStreamedListObjectsClient) Recv() (*StreamedListObjectsResponse, error) { - m := new(StreamedListObjectsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type OpenFGAService_StreamedListObjectsClient = grpc.ServerStreamingClient[StreamedListObjectsResponse] func (c *openFGAServiceClient) ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListObjectsResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ListObjects_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ListObjects_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -259,8 +263,9 @@ func (c *openFGAServiceClient) ListObjects(ctx context.Context, in *ListObjectsR } func (c *openFGAServiceClient) ListUsers(ctx context.Context, in *ListUsersRequest, opts ...grpc.CallOption) (*ListUsersResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListUsersResponse) - err := c.cc.Invoke(ctx, OpenFGAService_ListUsers_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, OpenFGAService_ListUsers_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -269,7 +274,7 @@ func (c *openFGAServiceClient) ListUsers(ctx context.Context, in *ListUsersReque // OpenFGAServiceServer is the server API for OpenFGAService service. // All implementations must embed UnimplementedOpenFGAServiceServer -// for forward compatibility +// for forward compatibility. type OpenFGAServiceServer interface { Read(context.Context, *ReadRequest) (*ReadResponse, error) Write(context.Context, *WriteRequest) (*WriteResponse, error) @@ -287,74 +292,78 @@ type OpenFGAServiceServer interface { DeleteStore(context.Context, *DeleteStoreRequest) (*DeleteStoreResponse, error) GetStore(context.Context, *GetStoreRequest) (*GetStoreResponse, error) ListStores(context.Context, *ListStoresRequest) (*ListStoresResponse, error) - StreamedListObjects(*StreamedListObjectsRequest, OpenFGAService_StreamedListObjectsServer) error + StreamedListObjects(*StreamedListObjectsRequest, grpc.ServerStreamingServer[StreamedListObjectsResponse]) error ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error) ListUsers(context.Context, *ListUsersRequest) (*ListUsersResponse, error) mustEmbedUnimplementedOpenFGAServiceServer() } -// UnimplementedOpenFGAServiceServer must be embedded to have forward compatible implementations. -type UnimplementedOpenFGAServiceServer struct { -} +// UnimplementedOpenFGAServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedOpenFGAServiceServer struct{} func (UnimplementedOpenFGAServiceServer) Read(context.Context, *ReadRequest) (*ReadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Read not implemented") + return nil, status.Error(codes.Unimplemented, "method Read not implemented") } func (UnimplementedOpenFGAServiceServer) Write(context.Context, *WriteRequest) (*WriteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Write not implemented") + return nil, status.Error(codes.Unimplemented, "method Write not implemented") } func (UnimplementedOpenFGAServiceServer) Check(context.Context, *CheckRequest) (*CheckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") + return nil, status.Error(codes.Unimplemented, "method Check not implemented") } func (UnimplementedOpenFGAServiceServer) BatchCheck(context.Context, *BatchCheckRequest) (*BatchCheckResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchCheck not implemented") + return nil, status.Error(codes.Unimplemented, "method BatchCheck not implemented") } func (UnimplementedOpenFGAServiceServer) Expand(context.Context, *ExpandRequest) (*ExpandResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Expand not implemented") + return nil, status.Error(codes.Unimplemented, "method Expand not implemented") } func (UnimplementedOpenFGAServiceServer) ReadAuthorizationModels(context.Context, *ReadAuthorizationModelsRequest) (*ReadAuthorizationModelsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReadAuthorizationModels not implemented") + return nil, status.Error(codes.Unimplemented, "method ReadAuthorizationModels not implemented") } func (UnimplementedOpenFGAServiceServer) ReadAuthorizationModel(context.Context, *ReadAuthorizationModelRequest) (*ReadAuthorizationModelResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReadAuthorizationModel not implemented") + return nil, status.Error(codes.Unimplemented, "method ReadAuthorizationModel not implemented") } func (UnimplementedOpenFGAServiceServer) WriteAuthorizationModel(context.Context, *WriteAuthorizationModelRequest) (*WriteAuthorizationModelResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WriteAuthorizationModel not implemented") + return nil, status.Error(codes.Unimplemented, "method WriteAuthorizationModel not implemented") } func (UnimplementedOpenFGAServiceServer) WriteAssertions(context.Context, *WriteAssertionsRequest) (*WriteAssertionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method WriteAssertions not implemented") + return nil, status.Error(codes.Unimplemented, "method WriteAssertions not implemented") } func (UnimplementedOpenFGAServiceServer) ReadAssertions(context.Context, *ReadAssertionsRequest) (*ReadAssertionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReadAssertions not implemented") + return nil, status.Error(codes.Unimplemented, "method ReadAssertions not implemented") } func (UnimplementedOpenFGAServiceServer) ReadChanges(context.Context, *ReadChangesRequest) (*ReadChangesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReadChanges not implemented") + return nil, status.Error(codes.Unimplemented, "method ReadChanges not implemented") } func (UnimplementedOpenFGAServiceServer) CreateStore(context.Context, *CreateStoreRequest) (*CreateStoreResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateStore not implemented") + return nil, status.Error(codes.Unimplemented, "method CreateStore not implemented") } func (UnimplementedOpenFGAServiceServer) UpdateStore(context.Context, *UpdateStoreRequest) (*UpdateStoreResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateStore not implemented") + return nil, status.Error(codes.Unimplemented, "method UpdateStore not implemented") } func (UnimplementedOpenFGAServiceServer) DeleteStore(context.Context, *DeleteStoreRequest) (*DeleteStoreResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteStore not implemented") + return nil, status.Error(codes.Unimplemented, "method DeleteStore not implemented") } func (UnimplementedOpenFGAServiceServer) GetStore(context.Context, *GetStoreRequest) (*GetStoreResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetStore not implemented") + return nil, status.Error(codes.Unimplemented, "method GetStore not implemented") } func (UnimplementedOpenFGAServiceServer) ListStores(context.Context, *ListStoresRequest) (*ListStoresResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListStores not implemented") + return nil, status.Error(codes.Unimplemented, "method ListStores not implemented") } -func (UnimplementedOpenFGAServiceServer) StreamedListObjects(*StreamedListObjectsRequest, OpenFGAService_StreamedListObjectsServer) error { - return status.Errorf(codes.Unimplemented, "method StreamedListObjects not implemented") +func (UnimplementedOpenFGAServiceServer) StreamedListObjects(*StreamedListObjectsRequest, grpc.ServerStreamingServer[StreamedListObjectsResponse]) error { + return status.Error(codes.Unimplemented, "method StreamedListObjects not implemented") } func (UnimplementedOpenFGAServiceServer) ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListObjects not implemented") + return nil, status.Error(codes.Unimplemented, "method ListObjects not implemented") } func (UnimplementedOpenFGAServiceServer) ListUsers(context.Context, *ListUsersRequest) (*ListUsersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListUsers not implemented") + return nil, status.Error(codes.Unimplemented, "method ListUsers not implemented") } func (UnimplementedOpenFGAServiceServer) mustEmbedUnimplementedOpenFGAServiceServer() {} +func (UnimplementedOpenFGAServiceServer) testEmbeddedByValue() {} // UnsafeOpenFGAServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to OpenFGAServiceServer will @@ -364,6 +373,13 @@ type UnsafeOpenFGAServiceServer interface { } func RegisterOpenFGAServiceServer(s grpc.ServiceRegistrar, srv OpenFGAServiceServer) { + // If the following call panics, it indicates UnimplementedOpenFGAServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&OpenFGAService_ServiceDesc, srv) } @@ -660,21 +676,11 @@ func _OpenFGAService_StreamedListObjects_Handler(srv interface{}, stream grpc.Se if err := stream.RecvMsg(m); err != nil { return err } - return srv.(OpenFGAServiceServer).StreamedListObjects(m, &openFGAServiceStreamedListObjectsServer{stream}) -} - -type OpenFGAService_StreamedListObjectsServer interface { - Send(*StreamedListObjectsResponse) error - grpc.ServerStream + return srv.(OpenFGAServiceServer).StreamedListObjects(m, &grpc.GenericServerStream[StreamedListObjectsRequest, StreamedListObjectsResponse]{ServerStream: stream}) } -type openFGAServiceStreamedListObjectsServer struct { - grpc.ServerStream -} - -func (x *openFGAServiceStreamedListObjectsServer) Send(m *StreamedListObjectsResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type OpenFGAService_StreamedListObjectsServer = grpc.ServerStreamingServer[StreamedListObjectsResponse] func _OpenFGAService_ListObjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListObjectsRequest)