diff --git a/api/client/client.go b/api/client/client.go index a91d74c91b365..5580a916cf437 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -1423,6 +1423,9 @@ func (c *Client) GetOIDCConnector(ctx context.Context, name string, withSecrets if err != nil { return nil, trail.FromGRPC(err) } + // An old server would send RedirectURL instead of RedirectURLs + // DELETE IN 11.0.0 + resp.CheckSetRedirectURL() return resp, nil } @@ -1435,6 +1438,9 @@ func (c *Client) GetOIDCConnectors(ctx context.Context, withSecrets bool) ([]typ } oidcConnectors := make([]types.OIDCConnector, len(resp.OIDCConnectors)) for i, oidcConnector := range resp.OIDCConnectors { + // An old server would send RedirectURL instead of RedirectURLs + // DELETE IN 11.0.0 + oidcConnector.CheckSetRedirectURL() oidcConnectors[i] = oidcConnector } return oidcConnectors, nil @@ -1446,6 +1452,9 @@ func (c *Client) UpsertOIDCConnector(ctx context.Context, oidcConnector types.OI if !ok { return trace.BadParameter("invalid type %T", oidcConnector) } + // An old server would expect RedirectURL instead of RedirectURLs + // DELETE IN 11.0.0 + connector.CheckSetRedirectURL() _, err := c.grpc.UpsertOIDCConnector(ctx, connector, c.callOpts...) return trail.FromGRPC(err) } diff --git a/api/client/client_test.go b/api/client/client_test.go index e6efd6384453d..e3e337095065b 100644 --- a/api/client/client_test.go +++ b/api/client/client_test.go @@ -24,6 +24,7 @@ import ( "testing" "time" + "github.com/golang/protobuf/ptypes/empty" "github.com/google/go-cmp/cmp" "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/defaults" @@ -45,8 +46,8 @@ type mockServer struct { func newMockServer() *mockServer { m := &mockServer{ - grpc.NewServer(), - &proto.UnimplementedAuthServiceServer{}, + grpc: grpc.NewServer(), + UnimplementedAuthServiceServer: &proto.UnimplementedAuthServiceServer{}, } proto.RegisterAuthServiceServer(m.grpc, m) return m @@ -615,3 +616,101 @@ func TestGetResources(t *testing.T) { }) } } + +type mockOIDCConnectorServer struct { + *mockServer + connectors map[string]*types.OIDCConnectorV3 +} + +func newMockOIDCConnectorServer() *mockOIDCConnectorServer { + m := &mockOIDCConnectorServer{ + &mockServer{ + grpc: grpc.NewServer(), + UnimplementedAuthServiceServer: &proto.UnimplementedAuthServiceServer{}, + }, + make(map[string]*types.OIDCConnectorV3), + } + proto.RegisterAuthServiceServer(m.grpc, m) + return m +} + +func startMockOIDCConnectorServer(t *testing.T) string { + l, err := net.Listen("tcp", "") + require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, l.Close()) }) + go newMockOIDCConnectorServer().grpc.Serve(l) + return l.Addr().String() +} + +func (m *mockOIDCConnectorServer) GetOIDCConnector(ctx context.Context, req *types.ResourceWithSecretsRequest) (*types.OIDCConnectorV3, error) { + conn, ok := m.connectors[req.Name] + if !ok { + return nil, trace.NotFound("not found") + } + return conn, nil +} + +func (m *mockOIDCConnectorServer) GetOIDCConnectors(ctx context.Context, req *types.ResourcesWithSecretsRequest) (*types.OIDCConnectorV3List, error) { + var connectors []*types.OIDCConnectorV3 + for _, conn := range m.connectors { + connectors = append(connectors, conn) + } + return &types.OIDCConnectorV3List{ + OIDCConnectors: connectors, + }, nil +} + +func (m *mockOIDCConnectorServer) UpsertOIDCConnector(ctx context.Context, oidcConnector *types.OIDCConnectorV3) (*empty.Empty, error) { + m.connectors[oidcConnector.Metadata.Name] = oidcConnector + return &empty.Empty{}, nil +} + +// Test that client will perform properly with an old server +// DELETE IN 11.0.0 +func TestSetOIDCRedirectURLBackwardsCompatibility(t *testing.T) { + ctx := context.Background() + addr := startMockOIDCConnectorServer(t) + + // Create client + clt, err := New(ctx, Config{ + Addrs: []string{addr}, + Credentials: []Credentials{ + &mockInsecureTLSCredentials{}, // TODO(Joerger) replace insecure credentials + }, + DialOpts: []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), // TODO(Joerger) remove insecure dial option + }, + }) + require.NoError(t, err) + + conn := &types.OIDCConnectorV3{ + Metadata: types.Metadata{ + Name: "one", + }, + } + + // Upsert should set "RedirectURL" on the provided connector if empty + conn.Spec.RedirectURLs = []string{"one.example.com"} + conn.Spec.RedirectURL = "" + err = clt.UpsertOIDCConnector(ctx, conn) + require.NoError(t, err) + require.Equal(t, 1, len(conn.GetRedirectURLs())) + require.Equal(t, conn.GetRedirectURLs()[0], conn.Spec.RedirectURL) + + // GetOIDCConnector should set "RedirectURLs" on the received connector if empty + conn.Spec.RedirectURLs = []string{} + conn.Spec.RedirectURL = "one.example.com" + connResp, err := clt.GetOIDCConnector(ctx, conn.GetName(), false) + require.NoError(t, err) + require.Equal(t, 1, len(connResp.GetRedirectURLs())) + require.Equal(t, connResp.GetRedirectURLs()[0], "one.example.com") + + // GetOIDCConnectors should set "RedirectURLs" on the received connectors if empty + conn.Spec.RedirectURLs = []string{} + conn.Spec.RedirectURL = "one.example.com" + connectorsResp, err := clt.GetOIDCConnectors(ctx, false) + require.NoError(t, err) + require.Equal(t, 1, len(connectorsResp)) + require.Equal(t, 1, len(connectorsResp[0].GetRedirectURLs())) + require.Equal(t, "one.example.com", connectorsResp[0].GetRedirectURLs()[0]) +} diff --git a/api/types/oidc.go b/api/types/oidc.go index 3f53863361bf4..0d8b0de314dd9 100644 --- a/api/types/oidc.go +++ b/api/types/oidc.go @@ -17,6 +17,7 @@ limitations under the License. package types import ( + "net/url" "time" "github.com/gravitational/teleport/api/constants" @@ -37,10 +38,8 @@ type OIDCConnector interface { // ClientSecret is used to authenticate our client and should not // be visible to end user GetClientSecret() string - // RedirectURL - Identity provider will use this URL to redirect - // client's browser back to it after successful authentication - // Should match the URL on Provider's side - GetRedirectURL() string + // GetRedirectURLs returns list of redirect URLs. + GetRedirectURLs() []string // GetACR returns the Authentication Context Class Reference (ACR) value. GetACR() string // GetProvider returns the identity provider. @@ -62,8 +61,8 @@ type OIDCConnector interface { SetClientID(string) // SetIssuerURL sets the endpoint of the provider SetIssuerURL(string) - // SetRedirectURL sets RedirectURL - SetRedirectURL(string) + // SetRedirectURLs sets the list of redirectURLs + SetRedirectURLs([]string) // SetPrompt sets OIDC prompt value SetPrompt(string) // GetPrompt returns OIDC prompt value, @@ -226,9 +225,9 @@ func (o *OIDCConnectorV3) SetIssuerURL(issuerURL string) { o.Spec.IssuerURL = issuerURL } -// SetRedirectURL sets client secret to some value -func (o *OIDCConnectorV3) SetRedirectURL(redirectURL string) { - o.Spec.RedirectURL = redirectURL +// SetRedirectURLs sets the list of redirectURLs +func (o *OIDCConnectorV3) SetRedirectURLs(redirectURLs []string) { + o.Spec.RedirectURLs = redirectURLs } // SetACR sets the Authentication Context Class Reference (ACR) value. @@ -277,11 +276,9 @@ func (o *OIDCConnectorV3) GetClientSecret() string { return o.Spec.ClientSecret } -// GetRedirectURL - Identity provider will use this URL to redirect -// client's browser back to it after successful authentication -// Should match the URL on Provider's side -func (o *OIDCConnectorV3) GetRedirectURL() string { - return o.Spec.RedirectURL +// GetRedirectURLs returns a list of the connector's redirect URLs. +func (o *OIDCConnectorV3) GetRedirectURLs() []string { + return o.Spec.RedirectURLs } // GetACR returns the Authentication Context Class Reference (ACR) value. @@ -359,16 +356,68 @@ func (o *OIDCConnectorV3) CheckAndSetDefaults() error { if name := o.Metadata.Name; utils.SliceContainsStr(constants.SystemConnectors, name) { return trace.BadParameter("ID: invalid connector name, %v is a reserved name", name) } + if o.Spec.ClientID == "" { return trace.BadParameter("ClientID: missing client id") } - // make sure claim mappings have either roles or a role template + if len(o.GetClaimsToRoles()) == 0 { + return trace.BadParameter("claims_to_roles is empty, authorization with connector would never assign any roles") + } for _, v := range o.Spec.ClaimsToRoles { if len(v.Roles) == 0 { return trace.BadParameter("add roles in claims_to_roles") } } + if _, err := url.Parse(o.GetIssuerURL()); err != nil { + return trace.BadParameter("bad IssuerURL '%v', err: %v", o.GetIssuerURL(), err) + } + + // DELETE IN 11.0.0 + o.CheckSetRedirectURL() + + if len(o.GetRedirectURLs()) == 0 { + return trace.BadParameter("RedirectURL: missing redirect_url") + } + for _, redirectURL := range o.GetRedirectURLs() { + if _, err := url.Parse(redirectURL); err != nil { + return trace.BadParameter("bad RedirectURL '%v', err: %v", redirectURL, err) + } + } + + if o.GetGoogleServiceAccountURI() != "" && o.GetGoogleServiceAccount() != "" { + return trace.BadParameter("one of either google_service_account_uri or google_service_account is supported, not both") + } + + if o.GetGoogleServiceAccountURI() != "" { + uri, err := utils.ParseSessionsURI(o.GetGoogleServiceAccountURI()) + if err != nil { + return trace.Wrap(err) + } + if uri.Scheme != "file" { + return trace.BadParameter("only file:// scheme is supported for google_service_account_uri") + } + if o.GetGoogleAdminEmail() == "" { + return trace.BadParameter("whenever google_service_account_uri is specified, google_admin_email should be set as well, read https://developers.google.com/identity/protools/OAuth2ServiceAccount#delegatingauthority for more details") + } + } + + if o.GetGoogleServiceAccount() != "" { + if o.GetGoogleAdminEmail() == "" { + return trace.BadParameter("whenever google_service_account is specified, google_admin_email should be set as well, read https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority for more details") + } + } + return nil } + +// RedirectURL must be checked/set when communicating with an old server or client. +// DELETE IN 11.0.0 +func (o *OIDCConnectorV3) CheckSetRedirectURL() { + if o.Spec.RedirectURL == "" && len(o.Spec.RedirectURLs) != 0 { + o.Spec.RedirectURL = o.Spec.RedirectURLs[0] + } else if len(o.Spec.RedirectURLs) == 0 && o.Spec.RedirectURL != "" { + o.Spec.RedirectURLs = []string{o.Spec.RedirectURL} + } +} diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 8a244c9d8dfc8..131629d622ca3 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -7370,7 +7370,9 @@ type OIDCConnectorSpecV3 struct { // RedirectURL is a URL that will redirect the client's browser // back to the identity provider after successful authentication. // This should match the URL on the Provider's side. - RedirectURL string `protobuf:"bytes,4,opt,name=RedirectURL,proto3" json:"redirect_url"` + // + // DELETE IN 11.0.0 in favor of RedirectURLs + RedirectURL string `protobuf:"bytes,4,opt,name=RedirectURL,proto3" json:"-"` // ACR is an Authentication Context Class Reference value. The meaning of the ACR // value is context-specific and varies for identity providers. ACR string `protobuf:"bytes,5,opt,name=ACR,proto3" json:"acr_values,omitempty"` @@ -7390,10 +7392,16 @@ type OIDCConnectorSpecV3 struct { // GoogleServiceAccount is a string containing google service account credentials. GoogleServiceAccount string `protobuf:"bytes,12,opt,name=GoogleServiceAccount,proto3" json:"google_service_account,omitempty"` // GoogleAdminEmail is the email of a google admin to impersonate. - GoogleAdminEmail string `protobuf:"bytes,13,opt,name=GoogleAdminEmail,proto3" json:"google_admin_email,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GoogleAdminEmail string `protobuf:"bytes,13,opt,name=GoogleAdminEmail,proto3" json:"google_admin_email,omitempty"` + // RedirectURLs is a list of callback URLs which the identity provider can use + // to redirect the client back to the Teleport Proxy to complete authentication. + // This list should match the URLs on the provider's side. The URL used for a + // given auth request will be chosen to match the requesting Proxy's public + // address. If there is no match, the first url in the list will be used. + RedirectURLs github_com_gravitational_teleport_api_types_wrappers.Strings `protobuf:"bytes,14,opt,name=RedirectURLs,proto3,customtype=github.com/gravitational/teleport/api/types/wrappers.Strings" json:"redirect_url"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *OIDCConnectorSpecV3) Reset() { *m = OIDCConnectorSpecV3{} } @@ -9500,810 +9508,812 @@ func init() { func init() { proto.RegisterFile("types.proto", fileDescriptor_d938547f84707355) } var fileDescriptor_d938547f84707355 = []byte{ - // 12841 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0xbd, 0x7f, 0x6c, 0x1c, 0x49, - 0x76, 0x18, 0xac, 0x9e, 0x19, 0x92, 0xc3, 0xc7, 0x21, 0x39, 0x2c, 0x52, 0x12, 0xa5, 0xd5, 0xee, - 0x68, 0x7b, 0x77, 0xb5, 0x5a, 0xed, 0xae, 0x74, 0xa2, 0x6e, 0x75, 0xde, 0xdb, 0x9f, 0x33, 0x24, - 0x25, 0x71, 0x45, 0x91, 0xdc, 0x1e, 0xfe, 0xb8, 0xf3, 0xdd, 0xb9, 0xdd, 0x9c, 0x2e, 0x92, 0xbd, - 0x9c, 0x99, 0x9e, 0xeb, 0xee, 0x91, 0x44, 0xfb, 0x33, 0x6c, 0xe3, 0xc3, 0x7d, 0x07, 0xc3, 0xf0, - 0x9d, 0xef, 0xc3, 0xf9, 0xb3, 0xfd, 0xc1, 0x81, 0x1d, 0x23, 0x4e, 0xe2, 0x04, 0x67, 0x04, 0x76, - 0x80, 0x24, 0x48, 0xe0, 0xc0, 0x40, 0x62, 0x1c, 0x82, 0x04, 0xf1, 0x7f, 0x81, 0x2f, 0x01, 0x13, - 0xdf, 0xf9, 0x2f, 0x02, 0x01, 0x02, 0xf8, 0x2f, 0x5f, 0x62, 0x20, 0xa8, 0x57, 0x55, 0xdd, 0x55, - 0x3d, 0x3d, 0xe4, 0x70, 0x57, 0x8b, 0x58, 0xfb, 0x17, 0x39, 0xaf, 0xde, 0x7b, 0x55, 0x5d, 0xf5, - 0xea, 0xd5, 0xab, 0x57, 0xaf, 0x5e, 0xc1, 0x58, 0x74, 0xd0, 0xa1, 0xe1, 0xf5, 0x4e, 0xe0, 0x47, - 0x3e, 0x19, 0xc2, 0x1f, 0x17, 0x67, 0x76, 0xfd, 0x5d, 0x1f, 0x21, 0x37, 0xd8, 0x7f, 0xbc, 0xf0, - 0x62, 0x65, 0xd7, 0xf7, 0x77, 0x9b, 0xf4, 0x06, 0xfe, 0xda, 0xee, 0xee, 0xdc, 0x88, 0xbc, 0x16, - 0x0d, 0x23, 0xa7, 0xd5, 0x11, 0x08, 0xf3, 0xbb, 0x5e, 0xb4, 0xd7, 0xdd, 0xbe, 0xde, 0xf0, 0x5b, - 0x37, 0x76, 0x03, 0xe7, 0xa1, 0x17, 0x39, 0x91, 0xe7, 0xb7, 0x9d, 0xe6, 0x8d, 0x88, 0x36, 0x69, - 0xc7, 0x0f, 0xa2, 0x1b, 0x4e, 0xc7, 0xbb, 0x81, 0x75, 0xdc, 0x78, 0x14, 0x38, 0x9d, 0x0e, 0x0d, - 0x92, 0x7f, 0x38, 0x13, 0xf3, 0xef, 0xe6, 0x61, 0xf4, 0x3e, 0xa5, 0x9d, 0x6a, 0xd3, 0x7b, 0x48, - 0xc9, 0x0b, 0x50, 0x58, 0x71, 0x5a, 0x74, 0xd6, 0xb8, 0x6c, 0x5c, 0x1d, 0xad, 0x4d, 0x1e, 0x1d, - 0x56, 0xc6, 0x42, 0x1a, 0x3c, 0xa4, 0x81, 0xdd, 0x76, 0x5a, 0xd4, 0xc2, 0x42, 0xf2, 0x2a, 0x8c, - 0xb2, 0xbf, 0x61, 0xc7, 0x69, 0xd0, 0xd9, 0x1c, 0x62, 0x8e, 0x1f, 0x1d, 0x56, 0x46, 0xdb, 0x12, - 0x68, 0x25, 0xe5, 0xe4, 0x0a, 0x8c, 0x2c, 0x53, 0x27, 0xa4, 0x4b, 0x0b, 0xb3, 0xf9, 0xcb, 0xc6, - 0xd5, 0x7c, 0xad, 0x74, 0x74, 0x58, 0x29, 0x36, 0x19, 0xc8, 0xf6, 0x5c, 0x4b, 0x16, 0x92, 0x25, - 0x18, 0x59, 0x7c, 0xdc, 0xf1, 0x02, 0x1a, 0xce, 0x16, 0x2e, 0x1b, 0x57, 0xc7, 0xe6, 0x2e, 0x5e, - 0xe7, 0xdf, 0x7f, 0x5d, 0x7e, 0xff, 0xf5, 0x75, 0xf9, 0xfd, 0xb5, 0xe9, 0xef, 0x1f, 0x56, 0xce, - 0x1c, 0x1d, 0x56, 0x46, 0x28, 0x27, 0xf9, 0xd5, 0xff, 0x5a, 0x31, 0x2c, 0x49, 0x4f, 0xde, 0x86, - 0xc2, 0xfa, 0x41, 0x87, 0xce, 0x8e, 0x5e, 0x36, 0xae, 0x4e, 0xcc, 0x3d, 0x77, 0x9d, 0xf7, 0x78, - 0xfc, 0x91, 0xc9, 0x7f, 0x0c, 0xab, 0x56, 0x3c, 0x3a, 0xac, 0x14, 0x18, 0x8a, 0x85, 0x54, 0xe4, - 0x75, 0x18, 0xbe, 0xe7, 0x87, 0xd1, 0xd2, 0xc2, 0x2c, 0xe0, 0xa7, 0x9d, 0x3d, 0x3a, 0xac, 0x4c, - 0xed, 0xf9, 0x61, 0x64, 0x7b, 0xee, 0x6b, 0x7e, 0xcb, 0x8b, 0x68, 0xab, 0x13, 0x1d, 0x58, 0x02, - 0xc9, 0xdc, 0x86, 0x71, 0x8d, 0x1f, 0x19, 0x83, 0x91, 0x8d, 0x95, 0xfb, 0x2b, 0xab, 0x5b, 0x2b, - 0xe5, 0x33, 0xa4, 0x08, 0x85, 0x95, 0xd5, 0x85, 0xc5, 0xb2, 0x41, 0x46, 0x20, 0x5f, 0x5d, 0x5b, - 0x2b, 0xe7, 0x48, 0x09, 0x8a, 0x0b, 0xd5, 0xf5, 0x6a, 0xad, 0x5a, 0x5f, 0x2c, 0xe7, 0xc9, 0x34, - 0x4c, 0x6e, 0x2d, 0xad, 0x2c, 0xac, 0x6e, 0xd5, 0xed, 0x85, 0xc5, 0xfa, 0xfd, 0xf5, 0xd5, 0xb5, - 0x72, 0x81, 0x4c, 0x00, 0xdc, 0xdf, 0xa8, 0x2d, 0x5a, 0x2b, 0x8b, 0xeb, 0x8b, 0xf5, 0xf2, 0x90, - 0xf9, 0xcd, 0x3c, 0x14, 0x1f, 0xd0, 0xc8, 0x71, 0x9d, 0xc8, 0x21, 0x97, 0xb4, 0x21, 0xc2, 0xd6, - 0x2b, 0x63, 0xf3, 0x42, 0xef, 0xd8, 0x0c, 0x1d, 0x1d, 0x56, 0x8c, 0xd7, 0xd5, 0x31, 0x79, 0x0b, - 0xc6, 0x16, 0x68, 0xd8, 0x08, 0xbc, 0x0e, 0x93, 0x17, 0x1c, 0x97, 0xd1, 0xda, 0x85, 0xa3, 0xc3, - 0xca, 0x59, 0x37, 0x01, 0x2b, 0xdf, 0xaa, 0x62, 0x93, 0x25, 0x18, 0x5e, 0x76, 0xb6, 0x69, 0x33, - 0x9c, 0x1d, 0xba, 0x9c, 0xbf, 0x3a, 0x36, 0xf7, 0x8c, 0xe8, 0x5f, 0xd9, 0xc0, 0xeb, 0xbc, 0x74, - 0xb1, 0x1d, 0x05, 0x07, 0xb5, 0x99, 0xa3, 0xc3, 0x4a, 0xb9, 0x89, 0x00, 0xb5, 0xef, 0x38, 0x0a, - 0xa9, 0x27, 0x63, 0x3e, 0x7c, 0xe2, 0x98, 0x3f, 0xfb, 0xfd, 0xc3, 0x8a, 0xc1, 0xc6, 0x42, 0x8c, - 0x79, 0xc2, 0x4f, 0x1f, 0xfd, 0xcb, 0x90, 0x5b, 0x5a, 0x98, 0x1d, 0x41, 0x59, 0x2b, 0x1f, 0x1d, - 0x56, 0x4a, 0xda, 0xb0, 0xe5, 0x96, 0x16, 0x2e, 0xbe, 0x09, 0x63, 0x4a, 0x1b, 0x49, 0x19, 0xf2, - 0xfb, 0xf4, 0x80, 0xf7, 0xa7, 0xc5, 0xfe, 0x25, 0x33, 0x30, 0xf4, 0xd0, 0x69, 0x76, 0x45, 0x07, - 0x5a, 0xfc, 0xc7, 0x17, 0x73, 0x3f, 0x61, 0x98, 0xff, 0x6f, 0x01, 0x8a, 0x96, 0xcf, 0xe7, 0x19, - 0x79, 0x05, 0x86, 0xea, 0x91, 0x13, 0xc9, 0xa1, 0x98, 0x3e, 0x3a, 0xac, 0x4c, 0x86, 0x0c, 0xa0, - 0xd4, 0xc7, 0x31, 0x18, 0xea, 0xda, 0x9e, 0x13, 0xca, 0x21, 0x41, 0xd4, 0x0e, 0x03, 0xa8, 0xa8, - 0x88, 0x41, 0xae, 0x40, 0xe1, 0x81, 0xef, 0x52, 0x31, 0x2a, 0xe4, 0xe8, 0xb0, 0x32, 0xd1, 0xf2, - 0x5d, 0x15, 0x11, 0xcb, 0xc9, 0x6b, 0x30, 0x3a, 0xdf, 0x0d, 0x02, 0xda, 0x66, 0xa2, 0x5a, 0x40, - 0xe4, 0x89, 0xa3, 0xc3, 0x0a, 0x34, 0x38, 0x90, 0x4d, 0xae, 0x04, 0x81, 0x75, 0x75, 0x3d, 0x72, - 0x82, 0x88, 0xba, 0xb3, 0x43, 0x03, 0x75, 0x35, 0x9b, 0x5e, 0x53, 0x21, 0x27, 0x49, 0x77, 0xb5, - 0xe0, 0x44, 0xee, 0xc1, 0xd8, 0xdd, 0xc0, 0x69, 0xd0, 0x35, 0x1a, 0x78, 0xbe, 0x8b, 0x63, 0x98, - 0xaf, 0x5d, 0x39, 0x3a, 0xac, 0x9c, 0xdb, 0x65, 0x60, 0xbb, 0x83, 0xf0, 0x84, 0xfa, 0xc7, 0x87, - 0x95, 0xe2, 0x42, 0x37, 0xc0, 0xde, 0xb3, 0x54, 0x52, 0xf2, 0xd3, 0x6c, 0x48, 0xc2, 0x08, 0xbb, - 0x96, 0xba, 0x38, 0x7a, 0xc7, 0x37, 0xd1, 0x14, 0x4d, 0x3c, 0xd7, 0x74, 0xc2, 0xc8, 0x0e, 0x38, - 0x5d, 0xaa, 0x9d, 0x2a, 0x4b, 0xb2, 0x0a, 0xc5, 0x7a, 0x63, 0x8f, 0xba, 0xdd, 0x26, 0x9d, 0x2d, - 0x22, 0xfb, 0xf3, 0x42, 0x70, 0xe5, 0x78, 0xca, 0xe2, 0xda, 0x45, 0xc1, 0x9b, 0x84, 0x02, 0xa2, - 0xf4, 0x7d, 0xcc, 0xe4, 0x8b, 0xc5, 0xdf, 0xf8, 0x9d, 0xca, 0x99, 0x5f, 0xf8, 0x2f, 0x97, 0xcf, - 0x98, 0xff, 0x2c, 0x07, 0xe5, 0x34, 0x13, 0xb2, 0x03, 0xe3, 0x1b, 0x1d, 0xd7, 0x89, 0xe8, 0x7c, - 0xd3, 0xa3, 0xed, 0x28, 0x44, 0x21, 0x39, 0xfe, 0x9b, 0x5e, 0x14, 0xf5, 0xce, 0x76, 0x91, 0xd0, - 0x6e, 0x70, 0xca, 0xd4, 0x57, 0xe9, 0x6c, 0x93, 0x7a, 0xea, 0xa8, 0xa7, 0x43, 0x94, 0xb0, 0xd3, - 0xd5, 0xc3, 0x35, 0x7c, 0x9f, 0x7a, 0x04, 0x5b, 0x21, 0x40, 0x6d, 0x77, 0xfb, 0x00, 0x25, 0x73, - 0x70, 0x01, 0x62, 0x24, 0x19, 0x02, 0xc4, 0xc0, 0xe6, 0x5f, 0x1a, 0x30, 0x61, 0xd1, 0xd0, 0xef, - 0x06, 0x0d, 0x7a, 0x8f, 0x3a, 0x2e, 0x0d, 0x98, 0xf8, 0xdf, 0xf7, 0xda, 0xae, 0x98, 0x53, 0x28, - 0xfe, 0xfb, 0x5e, 0x5b, 0x9d, 0xc2, 0x58, 0x4e, 0x3e, 0x07, 0x23, 0xf5, 0xee, 0x36, 0xa2, 0xf2, - 0x39, 0x75, 0x0e, 0x47, 0xac, 0xbb, 0x6d, 0xa7, 0xd0, 0x25, 0x1a, 0xb9, 0x01, 0x23, 0x9b, 0x34, - 0x08, 0x13, 0x8d, 0x87, 0x9a, 0xfd, 0x21, 0x07, 0xa9, 0x04, 0x02, 0x8b, 0xdc, 0x4d, 0xb4, 0xae, - 0x58, 0x93, 0x26, 0x53, 0xba, 0x2e, 0x11, 0x95, 0x96, 0x80, 0xa8, 0xa2, 0x22, 0xb1, 0xcc, 0xef, - 0xe4, 0xa0, 0xbc, 0xe0, 0x44, 0xce, 0xb6, 0x13, 0x8a, 0xfe, 0xdc, 0xbc, 0xc5, 0xf4, 0xb8, 0xf2, - 0xa1, 0xa8, 0xc7, 0x59, 0xcb, 0x3f, 0xf6, 0xe7, 0xbd, 0x94, 0xfe, 0xbc, 0x31, 0xb6, 0x40, 0x8a, - 0xcf, 0x4b, 0x3e, 0xea, 0x9d, 0x93, 0x3f, 0xaa, 0x2c, 0x3e, 0xaa, 0x28, 0x3f, 0x2a, 0xf9, 0x14, - 0xf2, 0x0e, 0x14, 0xea, 0x1d, 0xda, 0x10, 0x4a, 0x44, 0xea, 0x7e, 0xfd, 0xe3, 0x18, 0xc2, 0xe6, - 0xad, 0x5a, 0x49, 0xb0, 0x29, 0x84, 0x1d, 0xda, 0xb0, 0x90, 0x4c, 0x99, 0x34, 0xdf, 0x1d, 0x86, - 0x99, 0x2c, 0x32, 0xf2, 0x8e, 0xbe, 0x38, 0xf1, 0xee, 0x79, 0xa6, 0xef, 0xe2, 0x34, 0x6b, 0xe8, - 0xcb, 0xd3, 0x35, 0x28, 0xae, 0x31, 0x81, 0x6c, 0xf8, 0x4d, 0xd1, 0x73, 0x4c, 0x2b, 0x16, 0x3b, - 0x12, 0x66, 0x58, 0x71, 0x39, 0x79, 0x06, 0xf2, 0x1b, 0xd6, 0x92, 0xe8, 0xae, 0xd1, 0xa3, 0xc3, - 0x4a, 0xbe, 0x1b, 0x78, 0xb3, 0x86, 0xc5, 0xa0, 0xe4, 0x06, 0x0c, 0xcf, 0x57, 0xe7, 0x69, 0x10, - 0x61, 0x37, 0x95, 0x6a, 0xe7, 0x99, 0xb4, 0x34, 0x1c, 0xbb, 0x41, 0x83, 0x48, 0xab, 0x5e, 0xa0, - 0x91, 0x57, 0x21, 0x5f, 0xdd, 0xaa, 0x8b, 0x9e, 0x01, 0xd1, 0x33, 0xd5, 0xad, 0x7a, 0x6d, 0x5c, - 0x74, 0x44, 0xde, 0x79, 0x14, 0x32, 0xee, 0xd5, 0xad, 0xba, 0x3a, 0x5a, 0xc3, 0xc7, 0x8c, 0xd6, - 0x55, 0x28, 0x32, 0x3b, 0x83, 0x2d, 0xf0, 0xa8, 0x14, 0x47, 0xb9, 0xf9, 0xb4, 0x27, 0x60, 0x56, - 0x5c, 0x4a, 0x5e, 0x88, 0xcd, 0x96, 0x62, 0xc2, 0x4f, 0x98, 0x2d, 0xd2, 0x58, 0x21, 0x8f, 0x61, - 0x7c, 0xe1, 0xa0, 0xed, 0xb4, 0xbc, 0x86, 0x58, 0xc2, 0x47, 0x71, 0x09, 0xbf, 0x7e, 0xcc, 0x30, - 0x5e, 0xd7, 0x08, 0xf8, 0xaa, 0x2e, 0x95, 0xef, 0xac, 0xcb, 0xcb, 0xec, 0xf4, 0x0a, 0x3f, 0x6b, - 0x58, 0x7a, 0x45, 0x6c, 0x2e, 0x49, 0x15, 0x89, 0x76, 0x55, 0x22, 0x76, 0x12, 0x9c, 0xcc, 0xa5, - 0x40, 0x40, 0xd4, 0xb9, 0x14, 0x2f, 0xba, 0xef, 0x40, 0xfe, 0xee, 0xfc, 0xda, 0xec, 0x18, 0xf2, - 0x20, 0x82, 0xc7, 0xdd, 0xf9, 0xb5, 0xf9, 0xa6, 0xdf, 0x75, 0xeb, 0x1f, 0x2e, 0xd7, 0xce, 0x0b, - 0x36, 0xe3, 0xbb, 0x8d, 0x8e, 0xd6, 0x22, 0x46, 0x47, 0x16, 0xa1, 0x28, 0xbf, 0x72, 0xb6, 0x84, - 0x3c, 0xa6, 0x52, 0x1f, 0xbf, 0x79, 0x8b, 0xcf, 0x35, 0x57, 0xfc, 0x56, 0x5b, 0x21, 0x71, 0x2e, - 0x6e, 0x01, 0xe9, 0xed, 0x97, 0x0c, 0x4b, 0xe2, 0x55, 0xd5, 0x92, 0x18, 0x9b, 0x3b, 0x2b, 0xea, - 0x9a, 0xf7, 0x5b, 0x2d, 0xa7, 0xed, 0x22, 0xed, 0xe6, 0x9c, 0x6a, 0x60, 0x54, 0x61, 0x22, 0x69, - 0xc8, 0xb2, 0x17, 0x46, 0xe4, 0x06, 0x8c, 0x4a, 0x08, 0x5b, 0x44, 0xf2, 0x99, 0x4d, 0xb6, 0x12, - 0x1c, 0xf3, 0x4f, 0x73, 0x00, 0x49, 0xc9, 0x53, 0xaa, 0x67, 0xbe, 0xa0, 0xe9, 0x99, 0xb3, 0x69, - 0x01, 0xed, 0xab, 0x61, 0xc8, 0x7b, 0x30, 0xcc, 0x4c, 0xae, 0xae, 0x34, 0x29, 0xcf, 0xa7, 0x49, - 0xb1, 0x70, 0xf3, 0x56, 0x6d, 0x42, 0x10, 0x0f, 0x87, 0x08, 0xb1, 0x04, 0x99, 0xa2, 0xa2, 0xfe, - 0x70, 0x28, 0x19, 0x0c, 0xa1, 0x9c, 0xae, 0x2a, 0xda, 0xc5, 0x48, 0xe6, 0xa3, 0xd4, 0x2e, 0x8a, - 0x6e, 0xb9, 0xc0, 0x75, 0x0b, 0xef, 0xd4, 0x11, 0xa1, 0x5b, 0xd2, 0x9a, 0x85, 0x77, 0xe0, 0x89, - 0x9a, 0xa5, 0x93, 0x9e, 0xb6, 0x05, 0x14, 0x83, 0xab, 0x99, 0xbd, 0x92, 0x35, 0x61, 0x2f, 0x9f, - 0x34, 0x61, 0xd3, 0xd3, 0xf5, 0x56, 0x3f, 0x5d, 0x76, 0x56, 0xce, 0x2e, 0xe7, 0x91, 0x4a, 0x8e, - 0x3a, 0xed, 0x2d, 0x3e, 0x35, 0x87, 0xfb, 0x4e, 0xcd, 0xb3, 0x99, 0x53, 0x93, 0x4f, 0xcc, 0xb7, - 0x60, 0xa8, 0xfa, 0x33, 0xdd, 0x80, 0x0a, 0xdb, 0xaf, 0x24, 0xeb, 0x64, 0xb0, 0x78, 0x4e, 0x4f, - 0x3a, 0xec, 0xa7, 0x6a, 0x33, 0x63, 0x39, 0xab, 0x79, 0x7d, 0xb9, 0x2e, 0xec, 0x3a, 0x92, 0xea, - 0x96, 0xf5, 0x65, 0xa5, 0xd9, 0x91, 0xf6, 0xd5, 0x8c, 0x8a, 0xdc, 0x80, 0x5c, 0x75, 0x01, 0x37, - 0x8b, 0x63, 0x73, 0xa3, 0xb2, 0xda, 0x85, 0xda, 0x8c, 0x20, 0x29, 0x39, 0xda, 0xfe, 0xa1, 0xba, - 0x40, 0x6a, 0x30, 0xf4, 0xe0, 0xa0, 0xfe, 0xe1, 0xb2, 0x50, 0x64, 0xd3, 0x52, 0xae, 0x19, 0x6c, - 0x15, 0x57, 0xa1, 0x30, 0x69, 0x71, 0xeb, 0x20, 0xfc, 0x7a, 0x53, 0x6d, 0x31, 0xa2, 0x7d, 0x7a, - 0x0a, 0xe4, 0x9f, 0x18, 0x8a, 0xad, 0x21, 0x64, 0x9d, 0xed, 0x69, 0x85, 0xc4, 0x19, 0x89, 0xe5, - 0xd3, 0x23, 0x71, 0xb1, 0xbc, 0xbd, 0xc2, 0x47, 0x3f, 0xd7, 0x33, 0xfa, 0x63, 0xca, 0x4a, 0xc6, - 0xc7, 0x3c, 0xee, 0x8b, 0xfc, 0xc7, 0xee, 0x0b, 0xf3, 0x8f, 0x73, 0x58, 0x1f, 0x79, 0x0d, 0x86, - 0x2d, 0xba, 0x9b, 0x2c, 0xfa, 0xb8, 0x79, 0x0c, 0x10, 0xa2, 0x36, 0x92, 0xe3, 0xe0, 0x8a, 0x42, - 0xdd, 0x70, 0xcf, 0xdb, 0x89, 0x44, 0x4b, 0xe3, 0x15, 0x45, 0x80, 0x95, 0x15, 0x45, 0x40, 0xb4, - 0x15, 0x45, 0xc0, 0x98, 0xac, 0x5b, 0x0b, 0x75, 0xf1, 0x01, 0xf2, 0x6b, 0xad, 0x05, 0x45, 0x68, - 0x02, 0x57, 0x13, 0x1a, 0x6b, 0xa1, 0x4e, 0x6e, 0xc3, 0x68, 0xb5, 0xd1, 0xf0, 0xbb, 0xca, 0xee, - 0x6b, 0xf6, 0xe8, 0xb0, 0x32, 0xe3, 0x70, 0xa0, 0xee, 0x2b, 0x48, 0x50, 0x49, 0x1d, 0xc6, 0x16, - 0xd9, 0x96, 0xc5, 0x9b, 0x77, 0x1a, 0x7b, 0x54, 0x4c, 0x30, 0x29, 0xb1, 0x4a, 0x49, 0x6c, 0x42, - 0x9f, 0xa5, 0x08, 0x6c, 0x30, 0xa0, 0xba, 0x25, 0x57, 0x70, 0xcd, 0x5a, 0xd2, 0x15, 0xac, 0x61, - 0xf3, 0xcd, 0x6e, 0x18, 0xd1, 0x60, 0x69, 0x41, 0xf4, 0x23, 0x36, 0xac, 0xc1, 0x81, 0xa9, 0x86, - 0xc5, 0xa8, 0xe6, 0x7f, 0x36, 0xb0, 0x1b, 0xc8, 0x9b, 0x00, 0x4b, 0x6d, 0x66, 0xb6, 0x37, 0x68, - 0xcc, 0x00, 0x5d, 0x03, 0x9e, 0x80, 0xea, 0x1c, 0x14, 0x64, 0xbd, 0xea, 0xdc, 0xc0, 0x55, 0xb3, - 0x2a, 0xe5, 0x26, 0x40, 0x78, 0x89, 0x44, 0x95, 0x81, 0x80, 0xa6, 0xaa, 0x4c, 0x90, 0xc9, 0x15, - 0x18, 0x59, 0xaa, 0x3e, 0xa8, 0x76, 0xa3, 0x3d, 0x1c, 0x84, 0x22, 0x57, 0xc7, 0x9e, 0xd3, 0xb2, - 0x9d, 0x6e, 0xb4, 0x67, 0xc9, 0x42, 0xf3, 0xdf, 0xe5, 0xb4, 0x7e, 0x27, 0x16, 0x10, 0x8b, 0x76, - 0x9a, 0x5e, 0x03, 0x8d, 0x8a, 0xbb, 0x81, 0xdf, 0xed, 0xc4, 0x5f, 0x6b, 0x1e, 0x1d, 0x56, 0x9e, - 0x0b, 0x92, 0x52, 0x7b, 0x97, 0x15, 0xeb, 0x6d, 0xc8, 0xa0, 0x26, 0xef, 0x43, 0x69, 0x23, 0xa4, - 0x81, 0xf8, 0xc9, 0x36, 0x62, 0xf9, 0xab, 0xa3, 0xb5, 0x4b, 0xb8, 0xd1, 0x0a, 0x69, 0x10, 0xb3, - 0x51, 0x65, 0x49, 0xa3, 0x20, 0x2e, 0xcc, 0xae, 0x07, 0x4e, 0x3b, 0xf4, 0xa2, 0xc5, 0x76, 0x23, - 0x38, 0xc0, 0xe9, 0xb3, 0xd8, 0x76, 0xb6, 0x9b, 0xd4, 0xc5, 0x6e, 0x29, 0xd6, 0xae, 0x1e, 0x1d, - 0x56, 0x5e, 0x8c, 0x38, 0x8e, 0x4d, 0x63, 0x24, 0x9b, 0x72, 0x2c, 0x85, 0x73, 0x5f, 0x4e, 0xe4, - 0x3d, 0x28, 0x2d, 0xb6, 0xdd, 0x8e, 0xef, 0xb5, 0x23, 0x74, 0x93, 0x15, 0x62, 0x0b, 0xfb, 0x3c, - 0x15, 0x70, 0x9b, 0xc9, 0xa3, 0xda, 0x4c, 0x95, 0xc0, 0xfc, 0x05, 0x03, 0xc6, 0x14, 0xb5, 0xce, - 0xc6, 0x7d, 0x2d, 0xf0, 0x3f, 0xa2, 0x8d, 0x48, 0x17, 0xb9, 0x0e, 0x07, 0xa6, 0xc6, 0x3d, 0x46, - 0x4d, 0x89, 0x5a, 0xee, 0x14, 0xa2, 0x66, 0xde, 0x10, 0xab, 0x05, 0xdb, 0x2e, 0x2a, 0xde, 0x30, - 0xdc, 0x2e, 0x32, 0x73, 0x58, 0xdd, 0x2e, 0xb2, 0x72, 0xf3, 0xf7, 0x0d, 0xa6, 0xe5, 0xc9, 0x0d, - 0x80, 0xfb, 0xf4, 0x20, 0x72, 0xb6, 0xef, 0x78, 0x4d, 0xcd, 0xcb, 0xb9, 0x8f, 0x50, 0x7b, 0xc7, - 0x6b, 0x52, 0x4b, 0x41, 0x21, 0xb7, 0xa0, 0x78, 0x3f, 0xd8, 0x7e, 0x03, 0xd1, 0x73, 0xf1, 0x6a, - 0x3d, 0xbd, 0x1f, 0x6c, 0xbf, 0x81, 0xc8, 0xaa, 0x46, 0x91, 0x88, 0xc4, 0x84, 0xe1, 0x05, 0xbf, - 0xe5, 0x78, 0xd2, 0x42, 0x02, 0x66, 0x66, 0xb8, 0x08, 0xb1, 0x44, 0x09, 0xb3, 0x0f, 0xea, 0x6b, - 0x2b, 0xa2, 0xf3, 0xd1, 0x3e, 0x08, 0x3b, 0x6d, 0x8b, 0xc1, 0xcc, 0xef, 0x19, 0x30, 0xa6, 0x2c, - 0x5e, 0xe4, 0xf3, 0xc2, 0x23, 0x64, 0xa0, 0x3f, 0xf3, 0x5c, 0xef, 0xf2, 0xc6, 0x4a, 0xb9, 0x65, - 0xd7, 0xf2, 0x5d, 0x2a, 0xfc, 0x43, 0x89, 0xce, 0xcf, 0x0d, 0xa2, 0xf3, 0xdf, 0x04, 0xe0, 0x66, - 0x3f, 0x76, 0xa7, 0x32, 0x09, 0x15, 0xff, 0xaf, 0x3a, 0x18, 0x09, 0xb2, 0x69, 0x41, 0x49, 0xd5, - 0xf7, 0xa4, 0x06, 0xe3, 0x62, 0x97, 0x2b, 0xec, 0x44, 0xde, 0xcf, 0x38, 0x13, 0x04, 0xb7, 0xde, - 0x5d, 0xb7, 0x4e, 0x62, 0xfe, 0x62, 0x0e, 0x8a, 0x02, 0x32, 0xf7, 0x94, 0x9a, 0xb0, 0x6f, 0x68, - 0x26, 0xac, 0x5c, 0x19, 0x95, 0xbd, 0xd5, 0xdc, 0x09, 0x5b, 0xe4, 0x37, 0xa1, 0x24, 0xbb, 0x00, - 0x77, 0x02, 0xaf, 0xc0, 0x88, 0x74, 0xf2, 0xf0, 0x7d, 0xc0, 0xa4, 0xc6, 0x73, 0x73, 0xce, 0x92, - 0xe5, 0xe6, 0x77, 0x86, 0x24, 0x2d, 0xaf, 0x89, 0x75, 0x61, 0xd5, 0x75, 0x03, 0xb5, 0x0b, 0x1d, - 0xd7, 0x0d, 0x2c, 0x84, 0xb2, 0xc1, 0x5f, 0xeb, 0x6e, 0x37, 0xbd, 0x06, 0xe2, 0x28, 0x33, 0xb1, - 0x83, 0x50, 0x9b, 0xa1, 0xaa, 0x83, 0x9f, 0x20, 0x6b, 0x3b, 0xd4, 0xfc, 0xb1, 0x3b, 0xd4, 0x9f, - 0x82, 0xd1, 0xf9, 0x96, 0xab, 0x59, 0xb0, 0x66, 0x46, 0xa7, 0x5c, 0x8f, 0x91, 0xb8, 0xed, 0x7a, - 0x49, 0xf4, 0xd1, 0x4c, 0xa3, 0xe5, 0xf6, 0xda, 0xad, 0x09, 0x4b, 0x6d, 0x8b, 0x39, 0xf4, 0x49, - 0xb6, 0x98, 0xb7, 0x61, 0x74, 0x23, 0xa4, 0xeb, 0xdd, 0x76, 0x9b, 0x36, 0xd1, 0x9a, 0x2d, 0x72, - 0x7d, 0xd6, 0x0d, 0xa9, 0x1d, 0x21, 0x54, 0x6d, 0x40, 0x8c, 0xaa, 0x8a, 0xd5, 0xc8, 0x31, 0x62, - 0xf5, 0x79, 0x28, 0x54, 0x3b, 0x1d, 0xb9, 0xf7, 0x8e, 0xcd, 0xab, 0x4e, 0x07, 0x0d, 0x9e, 0x09, - 0xa7, 0xd3, 0xd1, 0x77, 0xd2, 0x88, 0x4d, 0x28, 0x90, 0xfb, 0xdd, 0x6d, 0x1a, 0xb4, 0x69, 0x44, - 0x43, 0xb1, 0x76, 0x86, 0xb3, 0x80, 0x3c, 0x66, 0xe5, 0x11, 0x47, 0x1a, 0x81, 0x6b, 0xf5, 0xfd, - 0xee, 0x36, 0xb5, 0xc5, 0x22, 0xac, 0xf6, 0x5d, 0x06, 0xc3, 0x8b, 0x75, 0x98, 0xd0, 0xfb, 0xff, - 0x09, 0xd8, 0xa4, 0x1f, 0x14, 0x8a, 0xc5, 0xf2, 0xa8, 0xf9, 0xcd, 0x1c, 0x8c, 0x55, 0x3b, 0x9d, - 0xa7, 0xdc, 0x01, 0xf6, 0x13, 0xda, 0xac, 0x3e, 0x97, 0x8c, 0xde, 0x29, 0x7c, 0x5f, 0x7f, 0x6d, - 0xc0, 0x64, 0x8a, 0x42, 0x6d, 0xbd, 0x31, 0xa0, 0x43, 0x28, 0x37, 0xa0, 0x43, 0x28, 0xdf, 0xdf, - 0x21, 0xa4, 0xce, 0x99, 0xc2, 0x27, 0x99, 0x33, 0x2f, 0x43, 0xbe, 0xda, 0xe9, 0x88, 0x5e, 0x29, - 0x25, 0xbd, 0xb2, 0x79, 0x8b, 0x2f, 0x6e, 0x4e, 0xa7, 0x63, 0x31, 0x0c, 0xf3, 0x75, 0x18, 0x45, - 0x30, 0x6a, 0xb4, 0xcb, 0x62, 0x2a, 0x70, 0x75, 0xa6, 0x91, 0x71, 0xb1, 0x37, 0xff, 0xa7, 0x01, - 0x43, 0xf8, 0xfb, 0x29, 0x15, 0x97, 0x39, 0x4d, 0x5c, 0xca, 0x8a, 0xb8, 0x0c, 0x22, 0x28, 0x7f, - 0x98, 0xc7, 0xde, 0x12, 0x22, 0x22, 0x5c, 0x0a, 0x46, 0x86, 0x4b, 0xe1, 0x13, 0x28, 0xf0, 0xfd, - 0xb4, 0x73, 0x21, 0x8f, 0x83, 0xf1, 0x42, 0xba, 0xa9, 0x4f, 0xc4, 0xaf, 0x70, 0x0f, 0xc8, 0x52, - 0x3b, 0xa4, 0x8d, 0x6e, 0x40, 0xeb, 0xfb, 0x5e, 0x67, 0x93, 0x06, 0xde, 0xce, 0x81, 0x30, 0xdd, - 0x51, 0xc7, 0x7a, 0xa2, 0xd4, 0x0e, 0xf7, 0xbd, 0x0e, 0x33, 0x13, 0xbc, 0x9d, 0x03, 0x2b, 0x83, - 0x86, 0xbc, 0x07, 0x23, 0x16, 0x7d, 0x14, 0x78, 0x91, 0xdc, 0x44, 0x4d, 0xc4, 0xbb, 0x3f, 0x84, - 0x72, 0x7b, 0x27, 0xe0, 0x3f, 0xd4, 0xf1, 0x17, 0xe5, 0x9f, 0xde, 0x0e, 0xfc, 0xbb, 0x43, 0x38, - 0x17, 0x4e, 0x38, 0xa8, 0x3d, 0xc6, 0x3f, 0xa4, 0x0f, 0x66, 0xfe, 0x34, 0x83, 0xb9, 0x09, 0x25, - 0xb6, 0xe9, 0x4f, 0x39, 0x8a, 0x2e, 0x25, 0x63, 0x79, 0x5d, 0x2d, 0x3e, 0xee, 0x8c, 0x56, 0xe3, - 0x43, 0xec, 0xb4, 0x90, 0xf0, 0xb3, 0xdf, 0x67, 0x15, 0xc6, 0x19, 0xe2, 0x11, 0xab, 0x8e, 0x06, - 0xef, 0xac, 0x53, 0x0b, 0xc6, 0xf0, 0x27, 0x13, 0x8c, 0x91, 0x8f, 0x23, 0x18, 0xe9, 0xd3, 0xf1, - 0xe2, 0x69, 0x4e, 0xc7, 0x2f, 0xbe, 0x07, 0x53, 0x3d, 0x3d, 0x7c, 0x9a, 0x13, 0xe6, 0x4f, 0x4f, - 0x2c, 0x7f, 0x2e, 0xee, 0x17, 0x32, 0x87, 0xfe, 0x02, 0x2f, 0xa0, 0x8d, 0x08, 0x55, 0xaf, 0xd0, - 0x96, 0x81, 0x80, 0xa5, 0xbc, 0x24, 0x08, 0x23, 0xef, 0xc2, 0x08, 0x3f, 0xa1, 0xe3, 0x1b, 0xdb, - 0xb1, 0xb9, 0x71, 0x51, 0x23, 0x87, 0x8a, 0x30, 0x09, 0x8e, 0xa1, 0xf6, 0xaa, 0x20, 0x32, 0xef, - 0xc2, 0xb0, 0x38, 0xe1, 0x3b, 0x7e, 0x5e, 0x54, 0x60, 0x68, 0x33, 0xe9, 0x19, 0x3c, 0x95, 0xe1, - 0x1f, 0x61, 0x71, 0xb8, 0xf9, 0xcb, 0x06, 0x4c, 0xe8, 0x5f, 0x49, 0xae, 0xc3, 0xb0, 0x38, 0x82, - 0x36, 0xf0, 0x08, 0x9a, 0x7d, 0xcd, 0x30, 0x3f, 0x7c, 0xd6, 0x8e, 0x9c, 0x05, 0x16, 0x53, 0xfd, - 0x82, 0x83, 0xd8, 0xa4, 0xa3, 0xea, 0x17, 0x42, 0x6a, 0xc9, 0x32, 0xb6, 0x8d, 0xb3, 0x68, 0xd8, - 0x6d, 0x46, 0xea, 0x36, 0x2e, 0x40, 0x88, 0x25, 0x4a, 0xcc, 0x43, 0x03, 0xa0, 0x5e, 0xbf, 0x77, - 0x9f, 0x1e, 0xac, 0x39, 0x5e, 0x80, 0x5b, 0x61, 0x9c, 0x8d, 0xf7, 0xc5, 0x68, 0x95, 0xc4, 0x56, - 0x98, 0xcf, 0xdc, 0x7d, 0x7a, 0xa0, 0x6d, 0x85, 0x25, 0x2a, 0x4e, 0xf9, 0xc0, 0x7b, 0xe8, 0x44, - 0x94, 0x11, 0xe6, 0x90, 0x90, 0x4f, 0x79, 0x0e, 0x4d, 0x51, 0x2a, 0xc8, 0xe4, 0x6b, 0x30, 0x91, - 0xfc, 0xc2, 0x0d, 0x7d, 0x1e, 0xf7, 0x89, 0x52, 0x22, 0xf4, 0xc2, 0xda, 0x73, 0x47, 0x87, 0x95, - 0x8b, 0x0a, 0xd7, 0xf4, 0x56, 0x3f, 0xc5, 0xcc, 0xfc, 0x5d, 0x03, 0x60, 0x7d, 0xb9, 0x2e, 0x3f, - 0xf0, 0x0a, 0x14, 0x62, 0x3f, 0x62, 0x89, 0xef, 0xb7, 0x53, 0x1b, 0x4a, 0x2c, 0x27, 0x2f, 0x40, - 0x3e, 0xf9, 0x92, 0xa9, 0xa3, 0xc3, 0xca, 0xb8, 0xfe, 0x05, 0xac, 0x94, 0xdc, 0x85, 0x91, 0x81, - 0xda, 0x8c, 0xd2, 0x99, 0xd1, 0x56, 0x49, 0x8d, 0xa3, 0xf0, 0xc1, 0xd6, 0xfa, 0x67, 0x77, 0x14, - 0xbe, 0x9d, 0x83, 0x49, 0xd6, 0xaf, 0xd5, 0x6e, 0xb4, 0xe7, 0x07, 0x5e, 0x74, 0xf0, 0xd4, 0xee, - 0x8a, 0xdf, 0xd6, 0x0c, 0xa2, 0x8b, 0x52, 0x6d, 0xa9, 0xdf, 0x36, 0xd0, 0xe6, 0xf8, 0x2f, 0x46, - 0x60, 0x3a, 0x83, 0x8a, 0xbc, 0x26, 0x82, 0xbf, 0x12, 0x3f, 0x14, 0x06, 0x77, 0xfd, 0xf8, 0xb0, - 0x52, 0x92, 0xe8, 0xeb, 0x49, 0xb0, 0xd7, 0x1c, 0x8c, 0x89, 0xad, 0xcf, 0x4a, 0x62, 0x51, 0x63, - 0xd4, 0x90, 0x74, 0x5a, 0xa2, 0x6a, 0x52, 0x91, 0x48, 0x15, 0x4a, 0xf3, 0x7b, 0xb4, 0xb1, 0xef, - 0xb5, 0x77, 0xef, 0xd3, 0x03, 0x6e, 0x2f, 0x95, 0x6a, 0xcf, 0xb2, 0x9d, 0x56, 0x43, 0xc0, 0xd9, - 0x90, 0xea, 0x9b, 0x38, 0x8d, 0x84, 0xbc, 0x0b, 0x63, 0x75, 0x6f, 0xb7, 0x2d, 0x39, 0x14, 0x90, - 0xc3, 0xa5, 0xa3, 0xc3, 0xca, 0xb9, 0x90, 0x83, 0x7b, 0x19, 0xa8, 0x04, 0xe4, 0x15, 0x18, 0xb2, - 0xfc, 0x26, 0xe5, 0xcb, 0xb0, 0x08, 0x27, 0x0a, 0x18, 0x40, 0x75, 0xae, 0x23, 0x06, 0xb9, 0x07, - 0x23, 0xec, 0x9f, 0x07, 0x4e, 0x67, 0x76, 0x18, 0xf5, 0x36, 0x89, 0x0d, 0x7c, 0x84, 0x76, 0xbc, - 0xf6, 0xae, 0x6a, 0xe3, 0x37, 0xa9, 0xdd, 0x72, 0x3a, 0xda, 0xba, 0xc8, 0x11, 0xc9, 0x26, 0x8c, - 0x25, 0x8a, 0x20, 0x9c, 0x1d, 0xd1, 0x8e, 0x22, 0x93, 0x92, 0xda, 0xf3, 0x82, 0xd9, 0xf9, 0xa8, - 0x19, 0xa2, 0x6c, 0x77, 0x18, 0xbe, 0xfe, 0x31, 0x0a, 0x23, 0x6d, 0x0f, 0x52, 0xec, 0xbf, 0x07, - 0x31, 0x4e, 0xdc, 0x83, 0xb8, 0x00, 0xa2, 0x93, 0xaa, 0xcd, 0x5d, 0x11, 0xfd, 0xf7, 0x4a, 0x7f, - 0x01, 0xbb, 0x9e, 0x20, 0xe3, 0x9c, 0xe4, 0xde, 0x2e, 0xd1, 0xff, 0x4e, 0x73, 0x57, 0xf3, 0x76, - 0xc5, 0xa8, 0xac, 0x1b, 0x12, 0x55, 0x23, 0x77, 0xe0, 0xb2, 0x1b, 0x92, 0x92, 0xa4, 0x1b, 0x3e, - 0x7a, 0x14, 0xf5, 0xeb, 0x06, 0x85, 0x11, 0x59, 0x01, 0xa8, 0x36, 0x22, 0xef, 0x21, 0x45, 0x91, - 0x18, 0xd3, 0x3a, 0x62, 0xbe, 0x7a, 0x9f, 0x1e, 0xd4, 0x69, 0x94, 0x9c, 0x0a, 0x38, 0x88, 0x9a, - 0x12, 0x13, 0x4b, 0xe1, 0x40, 0x3a, 0x70, 0xb6, 0xea, 0xba, 0x1e, 0x8f, 0x08, 0x5d, 0x0f, 0x98, - 0xfc, 0xba, 0xc8, 0xba, 0x94, 0xcd, 0xfa, 0x15, 0xc1, 0xfa, 0x79, 0x27, 0xa6, 0xb2, 0x23, 0x4e, - 0x96, 0xae, 0x26, 0x9b, 0xb1, 0xb9, 0x0a, 0x13, 0x7a, 0x97, 0xea, 0xb1, 0x90, 0x25, 0x28, 0x5a, - 0xf5, 0xaa, 0x5d, 0xbf, 0x57, 0xbd, 0x59, 0x36, 0x48, 0x19, 0x4a, 0xe2, 0xd7, 0x9c, 0x3d, 0xf7, - 0xc6, 0xed, 0x72, 0x4e, 0x83, 0xbc, 0x71, 0x73, 0xae, 0x9c, 0x37, 0xff, 0xd0, 0x80, 0xa2, 0x6c, - 0x1f, 0xb9, 0x0d, 0xf9, 0x7a, 0xfd, 0x5e, 0xea, 0x04, 0x3c, 0x59, 0x7a, 0xf9, 0x22, 0x13, 0x86, - 0x7b, 0xea, 0x22, 0x53, 0xaf, 0xdf, 0x63, 0x74, 0xeb, 0xcb, 0x75, 0x61, 0xb4, 0x64, 0x88, 0xeb, - 0x54, 0x9f, 0x63, 0xc1, 0xdb, 0x90, 0xff, 0x60, 0x6b, 0x5d, 0xec, 0x86, 0x32, 0xc6, 0x17, 0xe9, - 0x3e, 0x7a, 0xa4, 0x2e, 0x7d, 0x8c, 0xc0, 0xb4, 0x60, 0x4c, 0x99, 0x5a, 0xdc, 0x88, 0x68, 0xf9, - 0x71, 0x94, 0xa0, 0x30, 0x22, 0x18, 0xc4, 0x12, 0x25, 0xcc, 0xe6, 0x59, 0xf6, 0x1b, 0x4e, 0x53, - 0x58, 0x23, 0x68, 0xf3, 0x34, 0x19, 0xc0, 0xe2, 0x70, 0xf3, 0x4f, 0x0c, 0x28, 0xaf, 0x05, 0xfe, - 0x43, 0x8f, 0x69, 0xe0, 0x75, 0x7f, 0x9f, 0xb6, 0x37, 0x6f, 0x92, 0xd7, 0xa5, 0x12, 0xe0, 0x26, - 0xdc, 0x79, 0x46, 0x85, 0x4a, 0xe0, 0xc7, 0x87, 0x15, 0xa8, 0x1f, 0x84, 0x11, 0x6d, 0xb1, 0x72, - 0xa9, 0x08, 0x94, 0x60, 0xcb, 0xdc, 0xe0, 0x01, 0x5c, 0x27, 0x04, 0x5b, 0x56, 0x60, 0x08, 0x9b, - 0xa3, 0xc4, 0xd0, 0x0c, 0x45, 0x0c, 0x60, 0x71, 0xb8, 0xa2, 0xb0, 0xbf, 0x93, 0xeb, 0xf9, 0x86, - 0xb9, 0xcf, 0x54, 0x10, 0x94, 0xfe, 0x71, 0x03, 0x2d, 0x62, 0x5f, 0x86, 0x99, 0x74, 0x97, 0xa0, - 0x5f, 0xa4, 0x0a, 0x93, 0x3a, 0x5c, 0xba, 0x48, 0xce, 0x67, 0xd6, 0xb5, 0x39, 0x67, 0xa5, 0xf1, - 0xcd, 0x1f, 0x1a, 0x30, 0x8a, 0xff, 0x5a, 0xdd, 0x26, 0x65, 0x96, 0x4d, 0x75, 0xab, 0x2e, 0x8e, - 0x21, 0xd5, 0x53, 0x3d, 0xe7, 0x51, 0x68, 0x8b, 0x33, 0x4b, 0x4d, 0x8f, 0xc4, 0xc8, 0x82, 0x94, - 0x1f, 0xba, 0xca, 0x43, 0xad, 0x98, 0x94, 0x9f, 0xce, 0x86, 0x29, 0x52, 0x81, 0xcc, 0xc6, 0x8f, - 0xfd, 0xf2, 0x9b, 0xd2, 0x35, 0x8c, 0xe3, 0x87, 0x74, 0xbe, 0x76, 0x74, 0x22, 0xd1, 0xc8, 0xeb, - 0x30, 0xcc, 0xaa, 0xb6, 0xe4, 0xc1, 0x08, 0xee, 0x2a, 0xb0, 0x8d, 0x81, 0x76, 0x06, 0xcc, 0x91, - 0xcc, 0x7f, 0x9e, 0x4b, 0x77, 0xa0, 0xb0, 0x02, 0x4e, 0x39, 0x37, 0xde, 0x82, 0xa1, 0x6a, 0xb3, - 0xe9, 0x3f, 0x12, 0x5a, 0x42, 0xba, 0x69, 0xe2, 0xfe, 0xe3, 0x2b, 0xac, 0xc3, 0x50, 0xb4, 0xe0, - 0x03, 0x06, 0x20, 0xf3, 0x30, 0x5a, 0xdd, 0xaa, 0x2f, 0x2d, 0x2d, 0xac, 0xaf, 0x2f, 0x8b, 0x18, - 0xf7, 0x97, 0x64, 0xff, 0x78, 0x9e, 0x6b, 0x47, 0x51, 0xb3, 0x4f, 0x08, 0x6c, 0x42, 0x47, 0xde, - 0x01, 0xf8, 0xc0, 0xf7, 0xda, 0x0f, 0x68, 0xb4, 0xe7, 0xbb, 0xe2, 0xe3, 0x99, 0x49, 0x31, 0xf6, - 0x91, 0xef, 0xb5, 0xed, 0x16, 0x82, 0x59, 0xdb, 0x13, 0x24, 0x4b, 0xf9, 0x9f, 0xf5, 0x74, 0xcd, - 0x8f, 0xd0, 0x86, 0x19, 0x4a, 0x7a, 0x7a, 0xdb, 0x8f, 0xd2, 0xe7, 0x36, 0x12, 0xcd, 0xfc, 0x95, - 0x1c, 0x4c, 0xf0, 0x9d, 0x2a, 0x17, 0x98, 0xa7, 0x76, 0x32, 0xbe, 0xa5, 0x4d, 0xc6, 0x0b, 0x72, - 0x61, 0x50, 0x3e, 0x6d, 0xa0, 0xa9, 0xb8, 0x07, 0xa4, 0x97, 0x86, 0x58, 0xd2, 0x9f, 0x32, 0xc8, - 0x2c, 0xbc, 0x99, 0x44, 0x0c, 0x84, 0x48, 0x64, 0xa3, 0x2a, 0x0c, 0x2d, 0x8d, 0x87, 0xf9, 0xcb, - 0x39, 0x18, 0x57, 0xec, 0xc9, 0xa7, 0xb6, 0xe3, 0xbf, 0xa8, 0x75, 0xbc, 0x3c, 0x83, 0x50, 0xbe, - 0x6c, 0xa0, 0x7e, 0xef, 0xc2, 0x54, 0x0f, 0x49, 0xda, 0x2c, 0x37, 0x06, 0x31, 0xcb, 0x5f, 0xeb, - 0x8d, 0x3e, 0xe0, 0xf1, 0xf0, 0x71, 0xf4, 0x81, 0x1a, 0xee, 0xf0, 0xed, 0x1c, 0xcc, 0x88, 0x5f, - 0xd5, 0xae, 0xeb, 0x45, 0xf3, 0x7e, 0x7b, 0xc7, 0xdb, 0x7d, 0x6a, 0xc7, 0xa2, 0xaa, 0x8d, 0x45, - 0x45, 0x1f, 0x0b, 0xe5, 0x03, 0xfb, 0x0f, 0x89, 0xf9, 0xaf, 0x8a, 0x30, 0xdb, 0x8f, 0x80, 0x6d, - 0xfb, 0x95, 0x5d, 0x15, 0x6e, 0xfb, 0x53, 0x3b, 0x56, 0xbe, 0x9f, 0x4a, 0x42, 0x78, 0x72, 0x03, - 0x84, 0xf0, 0x2c, 0x43, 0x19, 0xab, 0xaa, 0xd3, 0x90, 0x75, 0x42, 0x98, 0x04, 0xe3, 0x5e, 0x3e, - 0x3a, 0xac, 0x5c, 0x72, 0x58, 0x99, 0x1d, 0x8a, 0x42, 0xbb, 0x1b, 0x78, 0x0a, 0x8f, 0x1e, 0x4a, - 0xf2, 0xbb, 0x06, 0x4c, 0x20, 0x70, 0xf1, 0x21, 0x6d, 0x47, 0xc8, 0xac, 0x20, 0x0e, 0x69, 0xe2, - 0x3b, 0x4f, 0xf5, 0x28, 0xf0, 0xda, 0xbb, 0xe8, 0x48, 0x0a, 0x6b, 0xdb, 0xac, 0x17, 0x7e, 0x70, - 0x58, 0x79, 0xfb, 0xe3, 0xdc, 0xa3, 0x12, 0xac, 0x42, 0xb6, 0x91, 0xe7, 0x0d, 0xa5, 0x58, 0x6d, - 0xaa, 0x99, 0xa9, 0x16, 0x91, 0x9f, 0x84, 0xf3, 0x3c, 0x0e, 0x63, 0xde, 0x6f, 0x47, 0x5e, 0xbb, - 0xeb, 0x77, 0xc3, 0x9a, 0xd3, 0xd8, 0xef, 0x76, 0x42, 0xe1, 0xec, 0xc4, 0x2f, 0x6f, 0xc4, 0x85, - 0xf6, 0x36, 0x2f, 0x55, 0x58, 0xf6, 0x63, 0x40, 0xee, 0xc1, 0x14, 0x2f, 0xaa, 0x76, 0x23, 0xbf, - 0xde, 0x70, 0x9a, 0x5e, 0x7b, 0x17, 0x7d, 0xa0, 0xc5, 0xda, 0x45, 0xb6, 0xb7, 0x74, 0xba, 0x91, - 0x6f, 0x87, 0x1c, 0xae, 0xf0, 0xeb, 0x25, 0x22, 0x4b, 0x30, 0x69, 0x51, 0xc7, 0x7d, 0xe0, 0x3c, - 0x9e, 0x77, 0x3a, 0x4e, 0xc3, 0x8b, 0x0e, 0x70, 0x67, 0x96, 0xaf, 0x55, 0x8e, 0x0e, 0x2b, 0xcf, - 0x04, 0xd4, 0x71, 0xed, 0x96, 0xf3, 0xd8, 0x6e, 0x88, 0x42, 0x85, 0x59, 0x9a, 0x2e, 0x66, 0xe5, - 0xb5, 0x63, 0x56, 0xa3, 0x69, 0x56, 0x5e, 0xbb, 0x3f, 0xab, 0x84, 0x4e, 0xb2, 0x5a, 0x77, 0x82, - 0x5d, 0x1a, 0x71, 0x27, 0x21, 0x5c, 0x36, 0xae, 0x1a, 0x0a, 0xab, 0x08, 0xcb, 0x6c, 0x74, 0x18, - 0xa6, 0x59, 0x29, 0x74, 0x4c, 0xf2, 0xb6, 0x02, 0x2f, 0xa2, 0xea, 0x17, 0x8e, 0x61, 0xb3, 0xb0, - 0xff, 0xd1, 0x4d, 0xda, 0xef, 0x13, 0x7b, 0x28, 0x13, 0x6e, 0xca, 0x47, 0x96, 0x7a, 0xb8, 0x65, - 0x7f, 0x65, 0x0f, 0x65, 0xcc, 0x4d, 0xfd, 0xce, 0x71, 0xfc, 0x4e, 0x85, 0x5b, 0x9f, 0x0f, 0xed, - 0xa1, 0x24, 0x2b, 0xac, 0xd3, 0x22, 0xda, 0x66, 0x12, 0x2d, 0x9c, 0xa4, 0x13, 0xd8, 0xb4, 0x17, - 0xc5, 0x9e, 0xba, 0x1c, 0xc8, 0x62, 0x3b, 0xc3, 0x65, 0x9a, 0x26, 0xfe, 0xa0, 0x50, 0x1c, 0x2a, - 0x0f, 0x5b, 0x65, 0x2e, 0xf2, 0x11, 0x13, 0x1c, 0xd4, 0xc5, 0xe6, 0x6f, 0xe6, 0xe0, 0x82, 0x54, - 0xc7, 0x34, 0x7a, 0xe4, 0x07, 0xfb, 0x5e, 0x7b, 0xf7, 0x29, 0xd7, 0xaa, 0x77, 0x34, 0xad, 0xfa, - 0x62, 0x6a, 0x85, 0x4b, 0x7d, 0xe5, 0x31, 0xaa, 0xf5, 0xcf, 0x87, 0xe0, 0xd9, 0x63, 0xa9, 0xc8, - 0x87, 0x6c, 0x15, 0xf4, 0x68, 0x3b, 0x5a, 0x72, 0x9b, 0x94, 0x6d, 0xc3, 0xfc, 0x6e, 0x24, 0x9c, - 0xd9, 0x2f, 0x1c, 0x1d, 0x56, 0xa6, 0xf9, 0x55, 0x20, 0xdb, 0x73, 0x9b, 0xd4, 0x8e, 0x78, 0xb1, - 0x36, 0x4c, 0xbd, 0xd4, 0x8c, 0x65, 0x7c, 0x31, 0x71, 0xa9, 0x1d, 0xd1, 0xe0, 0xa1, 0xc3, 0x6f, - 0x44, 0x08, 0x96, 0xfb, 0x94, 0x76, 0x6c, 0x87, 0x95, 0xda, 0x9e, 0x28, 0xd6, 0x59, 0xf6, 0x50, - 0x93, 0x3b, 0x0a, 0xcb, 0x79, 0xb6, 0x39, 0x78, 0xe0, 0x3c, 0x16, 0x16, 0x2f, 0xfa, 0x57, 0x15, - 0x96, 0x3c, 0x0a, 0xb2, 0xe5, 0x3c, 0xb6, 0x7a, 0x49, 0xc8, 0xd7, 0xe0, 0xac, 0x50, 0xdc, 0x4c, - 0x89, 0x05, 0x7e, 0x53, 0x7e, 0x71, 0x01, 0x79, 0xbd, 0x7c, 0x74, 0x58, 0x39, 0x2f, 0xd4, 0xbe, - 0xdd, 0xe0, 0x18, 0x99, 0x5f, 0x9d, 0xcd, 0x85, 0xac, 0xb3, 0x85, 0x2c, 0xd5, 0x1d, 0x0f, 0x68, - 0x18, 0x3a, 0xbb, 0xd2, 0x3a, 0xe6, 0x27, 0x4a, 0x4a, 0x67, 0xda, 0x2d, 0x5e, 0x6e, 0xf5, 0xa5, - 0x24, 0xf7, 0x60, 0x62, 0x8b, 0x6e, 0xab, 0xe3, 0x33, 0x1c, 0x4f, 0xf1, 0xf2, 0x23, 0xba, 0xdd, - 0x7f, 0x70, 0x52, 0x74, 0xc4, 0x83, 0xa9, 0xb5, 0xc0, 0x7f, 0x7c, 0xc0, 0xb6, 0x7a, 0xb4, 0x4d, - 0x03, 0x0c, 0xee, 0x1a, 0x41, 0x77, 0xd5, 0x6c, 0x62, 0x59, 0xea, 0xe5, 0xb5, 0xe7, 0x8f, 0x0e, - 0x2b, 0xcf, 0x76, 0x18, 0xd8, 0x6e, 0x0a, 0xb8, 0x9d, 0xba, 0x17, 0xd8, 0xcb, 0x95, 0xfc, 0x34, - 0x4c, 0x5a, 0x7e, 0x37, 0xf2, 0xda, 0xbb, 0xf5, 0x28, 0x70, 0x22, 0xba, 0xcb, 0x15, 0x79, 0x12, - 0x45, 0x96, 0x2a, 0xe5, 0x8e, 0xe9, 0x80, 0x03, 0xed, 0x50, 0x40, 0x35, 0x4d, 0xaa, 0x13, 0x98, - 0xbf, 0x9e, 0x83, 0x59, 0x31, 0x0c, 0x16, 0x6d, 0xf8, 0x81, 0xfb, 0xf4, 0x4f, 0xfb, 0x45, 0x6d, - 0xda, 0xbf, 0x10, 0xc7, 0x28, 0x65, 0x7d, 0xe4, 0x31, 0xb3, 0xfe, 0x0f, 0x0c, 0xb8, 0x74, 0x1c, - 0x11, 0xeb, 0x9d, 0x38, 0xae, 0x6f, 0xb4, 0x27, 0x7e, 0xaf, 0x03, 0xd3, 0x38, 0x9e, 0xe8, 0x38, - 0x0e, 0xef, 0xf9, 0x61, 0x84, 0xde, 0xbb, 0x9c, 0x16, 0x48, 0x50, 0xf3, 0xfd, 0x26, 0xea, 0xf9, - 0xda, 0x6b, 0x4c, 0x9d, 0xff, 0xe0, 0xb0, 0x02, 0x0c, 0xc4, 0x23, 0xf1, 0xd8, 0x9a, 0xcf, 0x25, - 0x06, 0xfd, 0xd2, 0xa1, 0x8d, 0xd1, 0x1f, 0xfb, 0xf4, 0x20, 0xb4, 0xb2, 0x58, 0xa3, 0x87, 0xa6, - 0xda, 0x8d, 0xf6, 0xd6, 0x02, 0xba, 0x43, 0x03, 0xda, 0x6e, 0xd0, 0xcf, 0x98, 0x87, 0x46, 0xff, - 0xb8, 0x81, 0xb6, 0x27, 0x7f, 0x35, 0x02, 0x33, 0x59, 0x64, 0xac, 0x5f, 0x14, 0x8b, 0x38, 0x7d, - 0x89, 0xfc, 0xff, 0x36, 0xa0, 0x54, 0xa7, 0x0d, 0xbf, 0xed, 0xde, 0x71, 0x1a, 0x91, 0x2f, 0x43, - 0x32, 0x6c, 0xae, 0xd9, 0x18, 0xdc, 0xde, 0xc1, 0x02, 0xcd, 0x33, 0xf0, 0xfe, 0x60, 0x86, 0x68, - 0xc3, 0xc7, 0x40, 0xd8, 0x88, 0xc9, 0x64, 0x52, 0x05, 0x9e, 0x6a, 0x68, 0x95, 0x92, 0x1a, 0x8c, - 0xcf, 0xfb, 0xed, 0x36, 0x65, 0x3f, 0x94, 0xb0, 0x4e, 0x0c, 0xc4, 0x6c, 0xc8, 0x82, 0xb4, 0x87, - 0x40, 0x27, 0x21, 0xb7, 0x20, 0xbf, 0x31, 0x77, 0x47, 0x8c, 0x81, 0x0c, 0x56, 0xdb, 0x98, 0xbb, - 0x83, 0x7b, 0x5d, 0x66, 0x3f, 0x8c, 0x77, 0xe7, 0x76, 0x54, 0x1f, 0xe8, 0xc6, 0xdc, 0x1d, 0xb2, - 0x0a, 0x53, 0x16, 0xfd, 0x7a, 0xd7, 0x0b, 0xa8, 0x98, 0x00, 0x0f, 0xee, 0x54, 0x71, 0x2c, 0x8a, - 0x5c, 0x8f, 0x05, 0xbc, 0x50, 0xda, 0xf6, 0x76, 0x6b, 0x47, 0xbd, 0x38, 0xd9, 0x4b, 0x4b, 0x7e, - 0x1e, 0xce, 0x2e, 0x78, 0xa1, 0x68, 0x33, 0x77, 0x3e, 0xba, 0x78, 0x0e, 0x39, 0xdc, 0x67, 0x3a, - 0x7c, 0x21, 0x73, 0x3a, 0x3c, 0xef, 0xc6, 0x4c, 0x6c, 0xee, 0xd9, 0x74, 0xd3, 0xf1, 0xb0, 0xd9, - 0xf5, 0x90, 0x8f, 0x60, 0x02, 0xbd, 0x3d, 0xe8, 0x8f, 0xc5, 0x78, 0xf3, 0x91, 0x3e, 0x35, 0x7f, - 0x2e, 0xb3, 0xe6, 0x8b, 0xe8, 0x3c, 0xb2, 0xd1, 0xab, 0x8b, 0xb1, 0xe9, 0xda, 0x1e, 0x41, 0xe3, - 0x4c, 0x3e, 0x80, 0x49, 0xb1, 0xe8, 0xac, 0xee, 0xac, 0xef, 0xd1, 0x05, 0xe7, 0x40, 0x04, 0x21, - 0xa0, 0xfd, 0x27, 0x56, 0x2a, 0xdb, 0xdf, 0xb1, 0xa3, 0x3d, 0x6a, 0xbb, 0x8e, 0xa6, 0x9e, 0x53, - 0x84, 0xe4, 0x67, 0x61, 0x6c, 0xd9, 0xc7, 0x83, 0x27, 0x54, 0x35, 0xa3, 0xc8, 0xe7, 0xcb, 0x78, - 0x71, 0x9a, 0x83, 0x53, 0x8b, 0xc8, 0x8f, 0x0f, 0x2b, 0x6f, 0x9d, 0x56, 0x0a, 0x95, 0x0a, 0x2c, - 0xb5, 0x36, 0x32, 0x0f, 0xc5, 0x2d, 0xba, 0xcd, 0xbe, 0x36, 0x7d, 0xe9, 0x4f, 0x82, 0xb9, 0xbe, - 0x78, 0x24, 0x7e, 0xa9, 0xa7, 0x3a, 0x12, 0x83, 0x04, 0x30, 0x85, 0xfd, 0xb3, 0xe6, 0x84, 0xe1, - 0x23, 0x3f, 0x70, 0x9b, 0x34, 0x94, 0xc7, 0x23, 0xbd, 0x9d, 0x3f, 0x97, 0xd9, 0xf9, 0x97, 0x78, - 0xe7, 0x77, 0x14, 0x0e, 0xaa, 0xb8, 0xf5, 0xb0, 0x37, 0xff, 0x85, 0x81, 0x52, 0x4f, 0xae, 0x61, - 0xf0, 0x59, 0x1c, 0xd5, 0x8e, 0xbb, 0x59, 0xa7, 0x93, 0xba, 0x0b, 0xc0, 0x51, 0xd8, 0xd6, 0xf7, - 0x8e, 0xd3, 0xa0, 0x91, 0xf4, 0x91, 0x22, 0xf2, 0x0e, 0x42, 0xd4, 0xad, 0x2f, 0xc7, 0x21, 0x5f, - 0x82, 0x99, 0x05, 0xfa, 0xd0, 0x6b, 0xd0, 0x6a, 0x14, 0xd1, 0x90, 0xf7, 0xf0, 0x7c, 0x95, 0x1f, - 0x26, 0x8e, 0xd6, 0x5e, 0x3c, 0x3a, 0xac, 0x5c, 0x76, 0xb1, 0xdc, 0x76, 0x12, 0x04, 0xbb, 0xe1, - 0xa8, 0xbc, 0x32, 0x39, 0x98, 0xff, 0xc3, 0x48, 0x7a, 0x9d, 0xbc, 0x0c, 0x05, 0x6b, 0x2d, 0x6e, - 0x3f, 0x3f, 0x27, 0x4c, 0x35, 0x1f, 0x11, 0xc8, 0x57, 0xe0, 0xac, 0xc2, 0x07, 0x7b, 0x84, 0xba, - 0xac, 0x41, 0xfc, 0x63, 0x5e, 0xc2, 0x83, 0x21, 0xa5, 0x25, 0x0e, 0xc7, 0x48, 0xb5, 0x28, 0x9b, - 0x07, 0xfb, 0x58, 0xa5, 0x60, 0x81, 0xb6, 0x3d, 0xce, 0x5b, 0xf9, 0x58, 0x95, 0xb7, 0x8b, 0x08, - 0xe9, 0x8f, 0xcd, 0xe2, 0xf0, 0x41, 0xa1, 0x58, 0x28, 0x0f, 0x99, 0x7f, 0x6d, 0x28, 0x59, 0x2f, - 0x9e, 0xd2, 0x15, 0xeb, 0xb6, 0xb6, 0x62, 0xcd, 0x08, 0xd2, 0xf8, 0xab, 0x58, 0x59, 0xa6, 0x95, - 0x31, 0x09, 0xe3, 0x1a, 0x12, 0x86, 0xd9, 0x6e, 0x84, 0x34, 0xe0, 0x3e, 0xc9, 0xcf, 0x56, 0x98, - 0x6d, 0xfc, 0x5d, 0x03, 0x45, 0x4f, 0xfe, 0x85, 0x01, 0x93, 0x29, 0x0a, 0xd6, 0x1b, 0x0c, 0xa4, - 0xf6, 0x46, 0x37, 0xa4, 0x81, 0x85, 0x50, 0x1e, 0x94, 0xb7, 0xac, 0x07, 0xe5, 0x35, 0x2d, 0x06, - 0x23, 0xef, 0xc3, 0xd0, 0x06, 0xee, 0x20, 0xf4, 0xb8, 0x8e, 0x98, 0x3f, 0x16, 0xf2, 0x19, 0xd6, - 0x65, 0xff, 0xaa, 0x0a, 0x02, 0xcb, 0x48, 0x1d, 0x46, 0xe6, 0x03, 0x8a, 0xf9, 0x2d, 0x0a, 0x83, - 0x1f, 0xc0, 0x35, 0x38, 0x49, 0xfa, 0x00, 0x4e, 0x70, 0x32, 0x7f, 0x2d, 0x07, 0x24, 0xf9, 0x46, - 0xda, 0x08, 0x68, 0x14, 0x3e, 0xb5, 0x83, 0xfe, 0x9e, 0x36, 0xe8, 0xcf, 0xf6, 0x0c, 0x3a, 0xff, - 0xbc, 0x81, 0xc6, 0xfe, 0x4f, 0x0c, 0x38, 0x97, 0x4d, 0x48, 0x5e, 0x80, 0xe1, 0xd5, 0xf5, 0x35, - 0x19, 0x1a, 0x24, 0x3e, 0xc5, 0xef, 0xa0, 0x65, 0x6c, 0x89, 0x22, 0xf2, 0x3a, 0x0c, 0x7f, 0x68, - 0xcd, 0xb3, 0x25, 0x53, 0xb9, 0x3d, 0xf3, 0xf5, 0xc0, 0x6e, 0xe8, 0x5b, 0x2e, 0x81, 0xa4, 0x8e, - 0x6d, 0xfe, 0x89, 0x8d, 0xed, 0xb7, 0x73, 0x30, 0x59, 0x6d, 0x34, 0x68, 0x18, 0x32, 0x83, 0x88, - 0x86, 0xd1, 0x53, 0x3b, 0xb0, 0xd9, 0x41, 0x3f, 0xda, 0xb7, 0x0d, 0x34, 0xaa, 0x7f, 0x6a, 0xc0, - 0x59, 0x49, 0xf5, 0xd0, 0xa3, 0x8f, 0xd6, 0xf7, 0x02, 0x1a, 0xee, 0xf9, 0x4d, 0x77, 0xd0, 0x7b, - 0x60, 0xb8, 0x4a, 0x7b, 0xcd, 0x88, 0x06, 0xaa, 0x83, 0x7a, 0x07, 0x21, 0xda, 0x2a, 0x8d, 0x10, - 0x72, 0x03, 0x46, 0xaa, 0x9d, 0x4e, 0xe0, 0x3f, 0xe4, 0xd3, 0x7e, 0x5c, 0x9c, 0x47, 0x72, 0x90, - 0x76, 0x7e, 0xc9, 0x41, 0xac, 0x19, 0x0b, 0xb4, 0xcd, 0x23, 0x9a, 0xc7, 0x79, 0x33, 0x5c, 0xda, - 0x56, 0x2d, 0x34, 0x2c, 0x37, 0xbf, 0x55, 0x80, 0x92, 0xfa, 0x21, 0xc4, 0x84, 0x61, 0x1e, 0x9e, - 0xa2, 0x86, 0x09, 0x38, 0x08, 0xb1, 0x44, 0x49, 0x12, 0xf5, 0x93, 0x3b, 0x31, 0xea, 0x67, 0x0b, - 0xc6, 0xd7, 0x02, 0xbf, 0xe3, 0x87, 0xd4, 0xe5, 0x29, 0x8a, 0xb8, 0xd6, 0x9a, 0x8e, 0x43, 0x61, - 0x79, 0x9f, 0xb3, 0x22, 0xbe, 0x1d, 0xe8, 0x08, 0x6c, 0x3b, 0x9d, 0xc0, 0x48, 0xe7, 0xc3, 0x1d, - 0xfc, 0x4e, 0x28, 0xae, 0x0b, 0xc4, 0x0e, 0x7e, 0x06, 0xd1, 0x1d, 0xfc, 0x0c, 0xa2, 0x4e, 0x8b, - 0xa1, 0x27, 0x35, 0x2d, 0xc8, 0xaf, 0x19, 0x30, 0x56, 0x6d, 0xb7, 0x45, 0xd4, 0x8f, 0xbc, 0xe7, - 0x7f, 0x36, 0x71, 0xf2, 0xf3, 0xb0, 0x50, 0xee, 0xe3, 0xff, 0xaa, 0xf0, 0xf1, 0xbf, 0xf5, 0xb1, - 0x7c, 0xfc, 0xeb, 0x81, 0xe3, 0x45, 0x21, 0x1e, 0xe6, 0x26, 0x15, 0xaa, 0xa1, 0xbf, 0x4a, 0x3b, - 0xc8, 0x5b, 0x50, 0x8e, 0xe5, 0x71, 0xa9, 0xed, 0xd2, 0xc7, 0x94, 0x07, 0x49, 0x8d, 0xf3, 0x1b, - 0x86, 0xda, 0xe1, 0x45, 0x1a, 0xd1, 0xfc, 0xb6, 0x01, 0xe7, 0x54, 0x81, 0xa8, 0x77, 0xb7, 0x5b, - 0x1e, 0x6e, 0x7f, 0xc8, 0x75, 0x18, 0x15, 0xe3, 0x15, 0x1b, 0x72, 0xbd, 0x79, 0xad, 0x12, 0x14, - 0xb2, 0xc8, 0x86, 0x88, 0xf1, 0x10, 0xbe, 0x82, 0xe9, 0xd4, 0x74, 0x63, 0x45, 0xb5, 0x59, 0xd1, - 0xd9, 0xe5, 0x00, 0x7f, 0xeb, 0x63, 0xc7, 0x20, 0xe6, 0xbb, 0x30, 0xa5, 0xb7, 0xb2, 0x4e, 0xf1, - 0x0a, 0x9a, 0xfc, 0x34, 0x23, 0xfb, 0xd3, 0x64, 0xb9, 0xb9, 0x05, 0xa4, 0x87, 0x3e, 0xc4, 0x83, - 0x2a, 0x1a, 0xc9, 0x83, 0x54, 0xe9, 0xee, 0xea, 0x41, 0x8c, 0x33, 0xbc, 0x8d, 0xa9, 0xdd, 0x8d, - 0xa4, 0xe6, 0x5f, 0x02, 0x4c, 0x67, 0xa8, 0x8e, 0x13, 0x96, 0xf6, 0x8a, 0x3e, 0x79, 0x46, 0xe3, - 0x88, 0x00, 0x39, 0x65, 0xde, 0x95, 0xd9, 0xbc, 0x8e, 0x99, 0x2a, 0xc7, 0xa5, 0xf8, 0xfa, 0x34, - 0x96, 0x77, 0x35, 0x68, 0x67, 0xe8, 0x89, 0x05, 0xed, 0xd4, 0x60, 0x5c, 0x7c, 0x95, 0x98, 0xca, - 0xc3, 0x89, 0x5b, 0x20, 0xe0, 0x05, 0x76, 0xcf, 0x94, 0xd6, 0x49, 0x38, 0x8f, 0xd0, 0x6f, 0x3e, - 0xa4, 0x82, 0xc7, 0x88, 0xca, 0x03, 0x0b, 0x32, 0x79, 0x28, 0x24, 0xe4, 0x1f, 0x1b, 0x40, 0x04, - 0x44, 0x9d, 0xcf, 0xc5, 0xe3, 0xe6, 0xb3, 0xfb, 0x64, 0xe6, 0xf3, 0xb3, 0xb2, 0x8d, 0xd9, 0xf3, - 0x3a, 0xa3, 0x59, 0xe4, 0x1f, 0x1a, 0x30, 0xc5, 0x23, 0x47, 0xd4, 0xc6, 0x8e, 0x1e, 0xd7, 0xd8, - 0xc6, 0x93, 0x69, 0xec, 0xa5, 0x10, 0xab, 0xed, 0xd3, 0xd6, 0xde, 0x46, 0x91, 0x9f, 0x04, 0x88, - 0x67, 0x94, 0x8c, 0x50, 0xbc, 0x94, 0xa1, 0x05, 0x62, 0xa4, 0xe4, 0x92, 0x65, 0x14, 0xd3, 0xa9, - 0x31, 0x3d, 0x09, 0x37, 0xf2, 0xf3, 0x30, 0xc3, 0xe6, 0x4b, 0x0c, 0x11, 0x71, 0x6e, 0xb3, 0x63, - 0x58, 0xcb, 0xe7, 0xfb, 0x2f, 0xed, 0xd7, 0xb3, 0xc8, 0xf8, 0x3d, 0x91, 0x24, 0xd1, 0x42, 0xd4, - 0x52, 0xb7, 0x7c, 0x59, 0x14, 0x18, 0xd0, 0x8a, 0xad, 0x0f, 0x67, 0x4b, 0x58, 0x67, 0xa6, 0x7e, - 0xbb, 0x20, 0xe7, 0x02, 0xd7, 0x6f, 0xa1, 0x7e, 0xd1, 0x03, 0x41, 0xe4, 0x43, 0x20, 0xf5, 0xee, - 0xee, 0x2e, 0x0d, 0x23, 0xea, 0x72, 0x18, 0x0d, 0xc2, 0xd9, 0x71, 0xd4, 0x0f, 0xe8, 0xa6, 0x0a, - 0x65, 0xa9, 0x1d, 0xc8, 0x62, 0x55, 0x48, 0x7a, 0x89, 0x09, 0x85, 0x19, 0xf1, 0xd1, 0x0c, 0x2a, - 0xd3, 0x14, 0x84, 0xb3, 0x13, 0x5a, 0x14, 0x61, 0x52, 0x52, 0x7b, 0x4e, 0xe6, 0xb1, 0x53, 0x72, - 0x1d, 0x68, 0xdb, 0xde, 0x2c, 0x76, 0x17, 0xb7, 0xe1, 0x42, 0xdf, 0xde, 0xcc, 0xb8, 0x2b, 0x72, - 0x43, 0xbf, 0x2b, 0x72, 0xa1, 0x9f, 0xd6, 0x0d, 0xd5, 0xfb, 0x22, 0xbf, 0x6d, 0xa4, 0xd4, 0xac, - 0xb0, 0x89, 0x78, 0x7e, 0xc5, 0x7e, 0xeb, 0x50, 0x0e, 0x93, 0x32, 0x70, 0x45, 0x9c, 0x4b, 0x6c, - 0x31, 0xa6, 0x88, 0x55, 0x45, 0x8e, 0x2a, 0xf9, 0x13, 0x6a, 0x5c, 0xf3, 0x9f, 0x1a, 0x40, 0x78, - 0x0b, 0xe7, 0x9d, 0x8e, 0xb3, 0xed, 0x35, 0xbd, 0xc8, 0xa3, 0x21, 0xb9, 0x0f, 0x65, 0xc1, 0xc2, - 0xd9, 0x6e, 0x52, 0x35, 0x0c, 0x4c, 0x9c, 0x13, 0xc7, 0x65, 0x76, 0xda, 0x7a, 0xea, 0x21, 0xec, - 0x23, 0x23, 0xb9, 0x4f, 0x20, 0x23, 0xe6, 0x8f, 0x0c, 0xb8, 0xd0, 0xdb, 0x6c, 0x51, 0x73, 0xdc, - 0x79, 0xc6, 0x09, 0x9d, 0x97, 0xf5, 0x95, 0x39, 0xf4, 0xb0, 0x3e, 0xb1, 0xaf, 0xcc, 0x27, 0x0e, - 0xdb, 0xd3, 0x7f, 0xe5, 0x23, 0x35, 0xa9, 0x07, 0x79, 0x3d, 0x2b, 0xa0, 0x87, 0xdf, 0xba, 0xe1, - 0x60, 0x3d, 0x96, 0x47, 0xee, 0x72, 0x72, 0x99, 0xbb, 0x1c, 0x79, 0x81, 0x28, 0x9f, 0x75, 0x81, - 0xc8, 0xfc, 0xa5, 0x1c, 0x94, 0xd6, 0x9a, 0xdd, 0x5d, 0xaf, 0xbd, 0xe0, 0x44, 0xce, 0x53, 0xbb, - 0x65, 0x7a, 0x53, 0xdb, 0x32, 0xc5, 0x11, 0x67, 0xf1, 0x87, 0x0d, 0x96, 0x64, 0xcf, 0x80, 0xc9, - 0x84, 0x84, 0xab, 0x87, 0x7b, 0x50, 0x60, 0x3f, 0x84, 0x05, 0x76, 0xb9, 0x87, 0x31, 0x62, 0x5d, - 0x8f, 0xff, 0x13, 0x9b, 0x18, 0x3d, 0xb5, 0x21, 0x72, 0xb8, 0xf8, 0x05, 0x9e, 0x99, 0xec, 0xf4, - 0x59, 0x54, 0xff, 0xc8, 0x80, 0x72, 0xfa, 0x4b, 0xc8, 0x7d, 0x18, 0x61, 0x9c, 0xbc, 0x38, 0xcb, - 0xd9, 0x8b, 0x7d, 0xbe, 0xf9, 0xba, 0x40, 0xe3, 0xcd, 0xc3, 0xce, 0xa7, 0x1c, 0x62, 0x49, 0x0e, - 0x17, 0x2d, 0x28, 0xa9, 0x58, 0x19, 0xad, 0x7b, 0x4d, 0xd7, 0x89, 0xe7, 0xb2, 0xfb, 0x41, 0x6d, - 0xf5, 0x6f, 0x69, 0xad, 0x16, 0xda, 0x70, 0xd0, 0x74, 0x95, 0x78, 0xe5, 0x8e, 0x4f, 0x07, 0x55, - 0xce, 0xa4, 0xd6, 0xd7, 0xaf, 0xdc, 0x71, 0x18, 0xdb, 0x6b, 0xf1, 0xfa, 0x84, 0x9c, 0xe1, 0x5e, - 0xab, 0x83, 0x10, 0xd5, 0x5e, 0xe7, 0x38, 0xe6, 0xdf, 0xc9, 0xc3, 0xb9, 0xa4, 0x79, 0x3c, 0x79, - 0xe7, 0x9a, 0x13, 0x38, 0xad, 0xf0, 0x84, 0x19, 0x70, 0xb5, 0xa7, 0x69, 0x78, 0xa5, 0x5c, 0x36, - 0x4d, 0x69, 0x90, 0x99, 0x6a, 0x10, 0x6e, 0x52, 0x79, 0x83, 0x64, 0x33, 0xc8, 0x7d, 0xc8, 0xd7, - 0x69, 0x24, 0x2e, 0x9e, 0x5e, 0xe9, 0xe9, 0x55, 0xb5, 0x5d, 0xd7, 0xeb, 0x34, 0xe2, 0x83, 0xc8, - 0x63, 0xf7, 0xa9, 0x16, 0x4b, 0xcf, 0xb6, 0x1b, 0x5b, 0x30, 0xbc, 0xf8, 0xb8, 0x43, 0x1b, 0x91, - 0xb8, 0x6f, 0xfa, 0xca, 0xf1, 0xfc, 0x38, 0xae, 0x72, 0xab, 0x95, 0x22, 0x40, 0xed, 0x2c, 0x8e, - 0x72, 0xf1, 0x36, 0x14, 0x65, 0xe5, 0xa7, 0xba, 0x9d, 0xf9, 0x26, 0x8c, 0x29, 0x95, 0x9c, 0x4a, - 0xe8, 0xff, 0xc6, 0x80, 0x61, 0xa6, 0x6d, 0x37, 0xdf, 0x78, 0x4a, 0x35, 0xd2, 0x2d, 0x4d, 0x23, - 0x4d, 0x29, 0xd7, 0x88, 0x70, 0x5e, 0xbe, 0x71, 0x82, 0x2e, 0x3a, 0x34, 0x00, 0x12, 0x64, 0x72, - 0x17, 0x46, 0x44, 0xbe, 0x18, 0x91, 0x19, 0x57, 0xbd, 0x97, 0x24, 0x33, 0x87, 0xc5, 0x56, 0x9c, - 0xdf, 0x49, 0x9b, 0xbd, 0x92, 0x9a, 0x2c, 0x24, 0xb1, 0xdb, 0xea, 0x45, 0x58, 0xc6, 0x66, 0xde, - 0x6f, 0xf3, 0x7b, 0x2a, 0x4a, 0x0e, 0xb2, 0x3e, 0x41, 0xdc, 0x55, 0xe1, 0xb8, 0xc9, 0x1f, 0xc7, - 0xe4, 0x9c, 0x60, 0x92, 0xed, 0xd3, 0xf9, 0xab, 0x12, 0xbf, 0xf9, 0x21, 0x1b, 0xf6, 0x0e, 0x94, - 0xee, 0xf8, 0xc1, 0x23, 0x27, 0x70, 0xab, 0xbb, 0x54, 0x44, 0xdd, 0x17, 0x31, 0x74, 0x7e, 0x7c, - 0x87, 0xc3, 0x6d, 0x87, 0x15, 0xfc, 0xf8, 0xb0, 0x52, 0xa8, 0xf9, 0x7e, 0xd3, 0xd2, 0xd0, 0xc9, - 0x2a, 0x8c, 0x3f, 0x70, 0x1e, 0x8b, 0x33, 0xd0, 0xf5, 0xf5, 0x65, 0x11, 0xbb, 0xf3, 0xca, 0xd1, - 0x61, 0xe5, 0x42, 0xcb, 0x79, 0x1c, 0x9f, 0x9d, 0xf6, 0x0f, 0x2f, 0xd7, 0xe9, 0x89, 0x07, 0x13, - 0x6b, 0x7e, 0x10, 0x89, 0x4a, 0x98, 0xcd, 0x9e, 0xef, 0x73, 0x8a, 0x76, 0x23, 0xf3, 0x14, 0xed, - 0x02, 0xdb, 0xa8, 0xd8, 0x3b, 0x31, 0xb9, 0x76, 0x5d, 0x51, 0x63, 0x4c, 0xde, 0x81, 0xa9, 0x79, - 0x1a, 0x44, 0xde, 0x8e, 0xd7, 0x70, 0x22, 0x7a, 0xc7, 0x0f, 0x5a, 0x4e, 0x24, 0x1c, 0x46, 0xe8, - 0x30, 0x68, 0x50, 0xce, 0xa9, 0xe5, 0x44, 0x56, 0x2f, 0x26, 0xf9, 0x4a, 0x56, 0x34, 0xd4, 0x10, - 0x7e, 0xfe, 0xeb, 0xcc, 0x1a, 0xc9, 0x88, 0x86, 0xea, 0xd3, 0x05, 0x19, 0x71, 0x51, 0xbb, 0xc7, - 0x1d, 0x25, 0x17, 0x6b, 0x37, 0xc5, 0xb1, 0xf6, 0xc9, 0x47, 0xc5, 0xf1, 0xb8, 0xf5, 0x39, 0x32, - 0x9e, 0x83, 0x7c, 0x6d, 0xed, 0x0e, 0xba, 0x80, 0xc4, 0xd1, 0x2d, 0x6d, 0xef, 0x39, 0xed, 0x06, - 0x1a, 0x51, 0x22, 0x1e, 0x44, 0x55, 0x78, 0xb5, 0xb5, 0x3b, 0xc4, 0x81, 0xe9, 0x35, 0x1a, 0xb4, - 0xbc, 0xe8, 0x4b, 0x37, 0x6f, 0x2a, 0x03, 0x55, 0xc4, 0xa6, 0xdd, 0x10, 0x4d, 0xab, 0x74, 0x10, - 0xc5, 0x7e, 0x7c, 0xf3, 0x66, 0xe6, 0x70, 0xc4, 0x0d, 0xcb, 0xe2, 0x45, 0x16, 0x61, 0xe2, 0x81, - 0xf3, 0x58, 0x1c, 0xf2, 0xc7, 0x7b, 0xd8, 0x3c, 0xde, 0x36, 0x40, 0xc1, 0x6a, 0x24, 0x45, 0xea, - 0x10, 0xeb, 0x44, 0xe4, 0x6d, 0x18, 0x4b, 0xc4, 0x2b, 0xc4, 0xe3, 0xdd, 0x3c, 0x0f, 0x33, 0x55, - 0x84, 0x53, 0xf3, 0x95, 0x29, 0xe8, 0x64, 0x23, 0x76, 0x41, 0x70, 0x4b, 0x18, 0x0f, 0x74, 0x47, - 0x6b, 0x37, 0x54, 0x17, 0x84, 0x83, 0x25, 0xda, 0x67, 0x4d, 0xc6, 0x7b, 0x03, 0x1e, 0x7d, 0x64, - 0xe9, 0x5c, 0x14, 0xcf, 0xc6, 0x5a, 0xe0, 0xb7, 0x3a, 0x11, 0x46, 0x61, 0xa6, 0x3c, 0x1b, 0x1d, - 0x2c, 0xc9, 0xf0, 0x6c, 0x70, 0x92, 0xec, 0xd8, 0x85, 0xf1, 0x4f, 0x10, 0xbb, 0x40, 0xa1, 0xb0, - 0xec, 0x37, 0xf6, 0x31, 0xec, 0x72, 0xb4, 0xf6, 0x21, 0xd3, 0x1f, 0x4d, 0xbf, 0xb1, 0xff, 0xe4, - 0xce, 0xdc, 0x91, 0x3d, 0x59, 0x61, 0xdf, 0xce, 0xc4, 0x4a, 0x54, 0x3d, 0x3b, 0xa9, 0x9d, 0x24, - 0x6a, 0x65, 0xdc, 0x50, 0xe1, 0x52, 0x28, 0x3f, 0xc4, 0xd2, 0xc9, 0x09, 0x85, 0xf2, 0x02, 0x0d, - 0xf7, 0x23, 0xbf, 0x33, 0xdf, 0xf4, 0x3a, 0xdb, 0xbe, 0x13, 0xb8, 0xb3, 0xe5, 0x3e, 0x0a, 0xe3, - 0xe5, 0x4c, 0x85, 0x31, 0xe5, 0x72, 0x7a, 0xbb, 0x21, 0x19, 0x58, 0x3d, 0x2c, 0xc9, 0x57, 0x60, - 0x82, 0xcd, 0x96, 0xc5, 0xc7, 0x11, 0x6d, 0x73, 0x51, 0x9a, 0xc2, 0xa5, 0x7e, 0x46, 0xb9, 0xb8, - 0x19, 0x17, 0x72, 0x21, 0x45, 0xed, 0x41, 0x63, 0x02, 0x55, 0x48, 0x75, 0x56, 0xc4, 0x85, 0xd9, - 0x07, 0xce, 0x63, 0x25, 0xcd, 0x91, 0x22, 0xf5, 0x04, 0x25, 0x16, 0x13, 0xea, 0x31, 0x89, 0xdd, - 0x8f, 0x91, 0xfa, 0x4c, 0x80, 0xbe, 0x9c, 0xc8, 0xcf, 0xc2, 0x79, 0xf1, 0x59, 0x0b, 0x98, 0x2b, - 0xc1, 0x0f, 0x0e, 0xea, 0x7b, 0x4e, 0xc0, 0x26, 0xee, 0xf4, 0xe9, 0x34, 0xac, 0xec, 0x30, 0x57, - 0xf2, 0xb1, 0x43, 0xce, 0xc8, 0xea, 0x57, 0x83, 0xf9, 0x93, 0xa9, 0x61, 0x27, 0x4b, 0x30, 0x22, - 0x70, 0xc5, 0xc2, 0xda, 0x5b, 0xfb, 0xb3, 0x99, 0xb5, 0x8f, 0x88, 0xda, 0x2d, 0x49, 0x6f, 0xfe, - 0xb1, 0x01, 0xe3, 0x5a, 0x8f, 0x92, 0xdb, 0x4a, 0xd4, 0x53, 0x12, 0xad, 0xa8, 0xe1, 0x64, 0x3e, - 0xaa, 0x71, 0x5b, 0x84, 0xba, 0xe5, 0xfa, 0xd3, 0x65, 0x26, 0xb1, 0x3b, 0x76, 0xab, 0x97, 0xe4, - 0x8a, 0x28, 0xf4, 0xc9, 0x15, 0xf1, 0xab, 0xe3, 0x30, 0xa1, 0xaf, 0xe1, 0xcc, 0xa8, 0x5e, 0xf6, - 0x77, 0xbd, 0xb6, 0xf4, 0x09, 0xf0, 0xec, 0x27, 0x08, 0xd1, 0x5e, 0xa8, 0x40, 0x08, 0x79, 0x09, - 0x20, 0x3e, 0x5d, 0x97, 0xdb, 0x7e, 0xf1, 0x9e, 0x86, 0x52, 0x40, 0x7e, 0x0a, 0x60, 0xc5, 0x77, - 0x69, 0x9c, 0x40, 0xe7, 0x18, 0x9f, 0xe0, 0xcb, 0xc2, 0x27, 0x28, 0xde, 0xc0, 0x38, 0x3a, 0xac, - 0x9c, 0x6d, 0xfb, 0x2e, 0xed, 0xcd, 0x9c, 0xa3, 0x70, 0x24, 0x5f, 0x84, 0x21, 0xab, 0xdb, 0xa4, - 0x32, 0x9f, 0xcb, 0x98, 0x9c, 0xd3, 0xdd, 0xa6, 0x92, 0x1b, 0x37, 0xe8, 0xa6, 0x8f, 0x82, 0x18, - 0x80, 0xbc, 0x07, 0xc0, 0xc4, 0x16, 0x93, 0x4c, 0xca, 0x0b, 0xe3, 0xe8, 0x22, 0x50, 0x24, 0x1e, - 0x53, 0x53, 0x6a, 0x95, 0x27, 0x24, 0x64, 0x15, 0x46, 0x84, 0x86, 0x14, 0x47, 0x2d, 0xcf, 0x65, - 0x39, 0xf9, 0x14, 0x33, 0x49, 0x24, 0x58, 0x41, 0xb0, 0xee, 0x77, 0xe3, 0x2e, 0x8e, 0xb7, 0x61, - 0x94, 0xb1, 0xdf, 0x08, 0xa9, 0xb8, 0x46, 0x3e, 0xca, 0xc3, 0x4e, 0x95, 0x06, 0x75, 0x43, 0xdd, - 0xc3, 0x90, 0x10, 0x90, 0xaf, 0x60, 0x4a, 0x24, 0xd1, 0xd5, 0xc7, 0xfa, 0x8a, 0xaf, 0xf4, 0x74, - 0xf5, 0x8c, 0xd3, 0xe9, 0x64, 0xe4, 0x90, 0x8b, 0xf9, 0x91, 0xdd, 0xf8, 0x6a, 0x56, 0x9c, 0x20, - 0xfd, 0x98, 0x0a, 0xae, 0xf5, 0x54, 0x30, 0x2b, 0x6f, 0x1b, 0xf5, 0x26, 0x42, 0xd2, 0xf8, 0x92, - 0x0e, 0x94, 0x13, 0x65, 0x22, 0xea, 0x82, 0xe3, 0xea, 0x7a, 0xbd, 0xa7, 0x2e, 0x75, 0x00, 0x7b, - 0xaa, 0xeb, 0xe1, 0x4e, 0xdc, 0x24, 0x99, 0xb5, 0xa8, 0x6f, 0xec, 0xb8, 0xfa, 0x5e, 0xea, 0xa9, - 0x6f, 0xda, 0xdd, 0xee, 0xad, 0x27, 0xc5, 0x93, 0xbc, 0x0d, 0xe3, 0x12, 0x82, 0xf3, 0x03, 0x7d, - 0xb4, 0x62, 0x0b, 0xe3, 0x6e, 0x63, 0xac, 0xa1, 0x9e, 0x05, 0x48, 0x45, 0x56, 0xa9, 0xb9, 0x74, - 0x8c, 0x6b, 0xd4, 0x69, 0xa9, 0xd0, 0x91, 0xc9, 0x97, 0x61, 0x6c, 0xa9, 0xc5, 0x3e, 0xc4, 0x6f, - 0x3b, 0x11, 0xc5, 0xf5, 0x36, 0xf1, 0x7b, 0x2b, 0x25, 0x8a, 0xa8, 0xf2, 0x74, 0xa3, 0x49, 0x91, - 0x6a, 0xaf, 0x28, 0x14, 0xac, 0xf3, 0xb8, 0x6b, 0x4b, 0xc8, 0x70, 0x28, 0x56, 0xd7, 0x67, 0x33, - 0x7c, 0xcf, 0x0a, 0x7b, 0x5c, 0xae, 0xb8, 0xc7, 0xcc, 0x16, 0x13, 0x42, 0xeb, 0x3c, 0x9d, 0x27, - 0x79, 0x07, 0xc6, 0xc4, 0x45, 0xd8, 0xaa, 0xb5, 0x12, 0xce, 0x96, 0xf1, 0xe3, 0x31, 0x85, 0x9f, - 0xbc, 0x33, 0x6b, 0x3b, 0x41, 0xea, 0x00, 0x32, 0xc1, 0x27, 0x5f, 0x82, 0x99, 0x2d, 0xaf, 0xed, - 0xfa, 0x8f, 0x42, 0xa1, 0xc0, 0x85, 0xa2, 0x9b, 0x4a, 0xc2, 0xac, 0x1e, 0xf1, 0x72, 0x5b, 0x2e, - 0x34, 0x3d, 0x8a, 0x2f, 0x93, 0x03, 0xf9, 0xb9, 0x1e, 0xce, 0x5c, 0x82, 0xc8, 0x71, 0x12, 0x34, - 0xd7, 0x23, 0x41, 0xbd, 0xd5, 0xa7, 0xc5, 0x29, 0xb3, 0x1a, 0xe2, 0x03, 0xd1, 0xcd, 0xaa, 0x0f, - 0x7c, 0xaf, 0x3d, 0x3b, 0xad, 0x3d, 0x3f, 0x14, 0x47, 0x5a, 0x23, 0xde, 0x9a, 0xdf, 0xf4, 0x1a, - 0x07, 0x32, 0x95, 0xaf, 0x6e, 0xb0, 0x7d, 0xe4, 0x6b, 0xfe, 0x93, 0x0c, 0xd6, 0xe4, 0xcb, 0x50, - 0x62, 0x7f, 0x63, 0xeb, 0x76, 0x46, 0x3b, 0xad, 0x54, 0x30, 0x45, 0x3d, 0x38, 0x46, 0x78, 0x53, - 0x37, 0xc3, 0xf0, 0xd5, 0x58, 0x99, 0x3f, 0x32, 0x60, 0x26, 0xab, 0xad, 0x27, 0xa4, 0x45, 0x32, - 0x53, 0x71, 0x0b, 0xe8, 0x7a, 0xe1, 0x71, 0x0b, 0x71, 0xb4, 0x42, 0x05, 0x86, 0xee, 0x7b, 0x6d, - 0x57, 0xc6, 0xd5, 0xe1, 0x72, 0xb8, 0xcf, 0x00, 0x16, 0x87, 0x33, 0x04, 0xbc, 0x83, 0x81, 0xeb, - 0xe5, 0x10, 0x47, 0xc0, 0x8b, 0x1a, 0x16, 0x87, 0x33, 0x04, 0xb6, 0xec, 0xca, 0x65, 0x02, 0x11, - 0xd8, 0x6a, 0x1c, 0x5a, 0x1c, 0x4e, 0xae, 0xc0, 0xc8, 0x6a, 0x7b, 0x99, 0x3a, 0x0f, 0xa9, 0x38, - 0x34, 0x44, 0x57, 0x91, 0xdf, 0xb6, 0x9b, 0x0c, 0x66, 0xc9, 0x42, 0xf3, 0xbb, 0x06, 0x4c, 0xf5, - 0x74, 0xd3, 0xc9, 0x99, 0x9f, 0x8e, 0x3f, 0xa1, 0x1d, 0xe4, 0xfb, 0x78, 0xf3, 0x0b, 0xd9, 0xcd, - 0x37, 0xff, 0xa0, 0x00, 0xe7, 0xfb, 0xac, 0x5a, 0x49, 0x74, 0x85, 0x71, 0x62, 0x74, 0xc5, 0x57, - 0xd9, 0x2a, 0xe1, 0x78, 0xad, 0x70, 0xdd, 0x4f, 0x5a, 0x9c, 0x1c, 0x44, 0x61, 0x99, 0x4c, 0xad, - 0x22, 0xd3, 0x80, 0x5c, 0x68, 0x20, 0x85, 0x1d, 0xf9, 0x3d, 0xfe, 0x78, 0x9d, 0x59, 0x4f, 0x7c, - 0x43, 0xfe, 0x6f, 0x49, 0x7c, 0x83, 0x7e, 0xaa, 0x58, 0x78, 0xa2, 0xa7, 0x8a, 0xd9, 0x07, 0x10, - 0x43, 0x9f, 0xe4, 0x28, 0x6e, 0x1e, 0xc6, 0xeb, 0xd4, 0x09, 0x1a, 0x7b, 0xd5, 0x90, 0x0f, 0xd2, - 0x30, 0x72, 0x43, 0x95, 0x1c, 0x62, 0x81, 0xed, 0x84, 0xbd, 0x63, 0xa1, 0xd1, 0x98, 0xff, 0x3e, - 0x15, 0x96, 0xf1, 0xb7, 0x51, 0x5e, 0x5e, 0x81, 0xa1, 0xad, 0x3d, 0x1a, 0x48, 0x23, 0x19, 0x1b, - 0xf2, 0x88, 0x01, 0xd4, 0x86, 0x20, 0x86, 0xf9, 0xb3, 0x50, 0x52, 0x2b, 0x43, 0x85, 0xc0, 0x7e, - 0x8b, 0x19, 0xc9, 0x15, 0x02, 0x03, 0x58, 0x1c, 0x7e, 0x62, 0x36, 0xb6, 0xa4, 0x17, 0xf2, 0x27, - 0xf5, 0x02, 0xab, 0x1c, 0xe5, 0x4d, 0xa9, 0x1c, 0x7f, 0xab, 0x95, 0x47, 0x0c, 0x60, 0x71, 0xf8, - 0x13, 0xad, 0xfc, 0xdf, 0x18, 0x50, 0xc0, 0x4c, 0x18, 0x6f, 0xc0, 0xa8, 0xf4, 0x67, 0xab, 0xd9, - 0x21, 0xa6, 0xa5, 0xbb, 0x3b, 0xd4, 0x83, 0x6a, 0x04, 0x90, 0x55, 0xb5, 0x49, 0x83, 0x6d, 0x2d, - 0xf6, 0xea, 0x21, 0x03, 0xa8, 0x55, 0x21, 0xc6, 0x29, 0xc6, 0x03, 0xe3, 0xcb, 0xc4, 0x76, 0x94, - 0xab, 0x2c, 0x1e, 0x5f, 0xd6, 0xb3, 0xf7, 0x94, 0x58, 0xe6, 0x6f, 0x18, 0x70, 0x36, 0xd3, 0x92, - 0x61, 0xb5, 0x72, 0x93, 0x49, 0x11, 0xc7, 0xb4, 0xbd, 0xc4, 0x31, 0x4e, 0x13, 0x47, 0x76, 0x0a, - 0xd9, 0x7a, 0x1e, 0x46, 0xe3, 0x1d, 0x26, 0x99, 0x91, 0x43, 0x87, 0x4e, 0x4f, 0xb9, 0x1d, 0xfb, - 0x1b, 0x03, 0x86, 0x59, 0x13, 0x9e, 0xda, 0x6b, 0x45, 0xd9, 0x2e, 0x70, 0xf6, 0x49, 0x03, 0x5d, - 0x26, 0xfa, 0xdd, 0x61, 0x80, 0x04, 0x99, 0x6c, 0xc3, 0xc4, 0xea, 0xd2, 0xc2, 0xfc, 0x92, 0x4b, - 0xdb, 0x11, 0x9e, 0x01, 0xa7, 0xd2, 0x4b, 0xb0, 0xad, 0x71, 0xd0, 0x76, 0x9a, 0x02, 0xe1, 0x20, - 0xd1, 0x0d, 0xbe, 0xe7, 0x36, 0x6c, 0x2f, 0xa6, 0x53, 0x4d, 0x4a, 0x9d, 0x23, 0xab, 0xa3, 0x5e, - 0x7d, 0xb0, 0xac, 0xd4, 0x91, 0x1b, 0xb0, 0x8e, 0xd0, 0x69, 0x35, 0xfb, 0xd4, 0xa1, 0x73, 0x24, - 0x7b, 0x50, 0xbe, 0x8b, 0xab, 0x8f, 0x52, 0x4b, 0xfe, 0xf8, 0x5a, 0x5e, 0x10, 0xb5, 0x3c, 0xc3, - 0x97, 0xad, 0xec, 0x7a, 0x7a, 0xb8, 0x26, 0x92, 0x5b, 0x38, 0x51, 0x72, 0xff, 0x1f, 0x03, 0x86, - 0xf9, 0xf2, 0x16, 0xbf, 0x21, 0x94, 0xb9, 0x80, 0x6e, 0x3d, 0x99, 0x05, 0xb4, 0x8c, 0x9a, 0x4b, - 0x73, 0x21, 0xf0, 0x32, 0xb2, 0x90, 0x7a, 0x90, 0x48, 0x9e, 0x73, 0xa0, 0x69, 0xcd, 0x4b, 0x92, - 0x68, 0x3c, 0xfe, 0x16, 0x91, 0xca, 0x85, 0x63, 0xa8, 0xcf, 0xa3, 0x8e, 0x7c, 0xc2, 0xe7, 0x51, - 0x97, 0x61, 0x54, 0x84, 0x97, 0xd5, 0x0e, 0xc4, 0x06, 0x5a, 0xba, 0x88, 0x62, 0xb8, 0x92, 0x75, - 0x9d, 0x83, 0xec, 0x6d, 0x2d, 0x67, 0x62, 0x8c, 0x48, 0x56, 0x61, 0x34, 0xb9, 0x13, 0x35, 0xaa, - 0x1d, 0x56, 0xc7, 0x70, 0x11, 0x7f, 0xcd, 0xaf, 0xdd, 0x66, 0x5e, 0x81, 0x4a, 0x78, 0x98, 0xdf, - 0x32, 0xa0, 0x9c, 0x96, 0x17, 0xf2, 0x36, 0x8c, 0xc5, 0xd7, 0xd2, 0xe2, 0xe8, 0x13, 0xf4, 0x36, - 0x27, 0xf7, 0xd8, 0xb4, 0x38, 0x14, 0x15, 0x9d, 0xcc, 0x41, 0x91, 0x4d, 0x3b, 0x25, 0x69, 0x36, - 0xea, 0x93, 0xae, 0x80, 0xa9, 0x87, 0xaf, 0x12, 0x4f, 0x99, 0xb5, 0xff, 0x31, 0x0f, 0x63, 0xca, - 0x60, 0x91, 0x57, 0xa0, 0xb8, 0x14, 0x2e, 0xfb, 0x8d, 0x7d, 0xea, 0x8a, 0x33, 0x1d, 0x7c, 0xfd, - 0xd6, 0x0b, 0xed, 0x26, 0x02, 0xad, 0xb8, 0x98, 0xd4, 0x60, 0x9c, 0xff, 0x27, 0xaf, 0x1f, 0xe7, - 0x12, 0x7f, 0x34, 0x47, 0x96, 0x17, 0x8f, 0xd5, 0xe5, 0x5d, 0x23, 0x21, 0x5f, 0x03, 0xe0, 0x00, - 0x36, 0xbe, 0x03, 0x44, 0x97, 0xcb, 0x09, 0x7c, 0x56, 0x54, 0x10, 0x79, 0xea, 0x17, 0xa2, 0x28, - 0x28, 0x0c, 0xf1, 0xe5, 0x4d, 0xbf, 0xb1, 0x3f, 0xf8, 0xdb, 0xbb, 0xc9, 0xcb, 0x9b, 0x7e, 0x63, - 0xdf, 0xce, 0x0e, 0x35, 0x54, 0x59, 0x92, 0x6f, 0x1b, 0x70, 0xd1, 0xa2, 0x0d, 0xff, 0x21, 0x0d, - 0x0e, 0xaa, 0x11, 0x62, 0xa9, 0x35, 0x9e, 0x1c, 0xd7, 0x78, 0x4b, 0xd4, 0xf8, 0x72, 0x20, 0xb8, - 0xe0, 0x9d, 0xa8, 0x56, 0x27, 0xb2, 0x8f, 0x69, 0xc2, 0x31, 0x55, 0x9a, 0x7f, 0x6e, 0x28, 0x53, - 0x80, 0xac, 0xc0, 0x68, 0x2c, 0x2c, 0xc2, 0x65, 0x1a, 0x5b, 0x66, 0x12, 0x6e, 0xd1, 0x9d, 0xda, - 0x33, 0xe2, 0xf8, 0x65, 0x3a, 0x16, 0x39, 0x6d, 0x46, 0x48, 0x20, 0x79, 0x1f, 0x0a, 0x38, 0x54, - 0x27, 0x67, 0x59, 0x93, 0x4b, 0x4d, 0x81, 0x8d, 0x11, 0xb6, 0x1a, 0x29, 0xc9, 0xe7, 0x44, 0x0c, - 0x50, 0x5e, 0xcb, 0x5f, 0xcc, 0x40, 0xac, 0x1d, 0xf1, 0x1a, 0x93, 0x44, 0xb7, 0x2a, 0xd2, 0xfa, - 0xff, 0xe5, 0xa0, 0x9c, 0x9e, 0x78, 0xe4, 0x3d, 0x28, 0xc9, 0xfb, 0x6d, 0xf7, 0x9c, 0x70, 0x4f, - 0xe4, 0x44, 0xc5, 0x5d, 0xab, 0xbc, 0x14, 0x67, 0xef, 0x39, 0x5a, 0xee, 0x3c, 0x8d, 0x80, 0x2d, - 0xc8, 0xeb, 0xe2, 0xd2, 0x84, 0x32, 0x81, 0x22, 0x3f, 0xea, 0xa4, 0x72, 0xa2, 0x4a, 0x34, 0xf2, - 0x06, 0xe4, 0xf9, 0xa5, 0x4f, 0x35, 0xa1, 0xd6, 0x83, 0x3b, 0x55, 0x7e, 0x67, 0x8d, 0x9f, 0xf8, - 0xeb, 0x47, 0x27, 0x0c, 0x9f, 0x2c, 0x2b, 0x57, 0x06, 0x87, 0xb5, 0xc4, 0x42, 0x12, 0x1c, 0x7f, - 0xdc, 0xc9, 0x77, 0x07, 0x3f, 0x28, 0x14, 0xf3, 0xe5, 0x82, 0xb8, 0x24, 0xf6, 0xfb, 0x79, 0x18, - 0x8d, 0xeb, 0x27, 0x04, 0xd0, 0xde, 0x10, 0x47, 0xf7, 0xf8, 0x3f, 0xb9, 0x00, 0x45, 0x69, 0x62, - 0x88, 0xe3, 0xfb, 0x91, 0x50, 0x98, 0x17, 0xb3, 0x20, 0x6d, 0x09, 0x6e, 0x5e, 0x58, 0xf2, 0x27, - 0xb9, 0x09, 0xb1, 0xa1, 0xd0, 0xcf, 0xa2, 0x28, 0xb0, 0x01, 0xb3, 0x62, 0x34, 0x32, 0x01, 0x39, - 0x8f, 0x07, 0xc4, 0x8f, 0x5a, 0x39, 0xcf, 0x25, 0xef, 0x41, 0xd1, 0x71, 0x5d, 0xea, 0xda, 0x4e, - 0x34, 0xc0, 0x3b, 0xc8, 0x45, 0xc6, 0x8d, 0x6b, 0x74, 0xa4, 0xaa, 0x46, 0xa4, 0x0a, 0xa3, 0xf8, - 0x0c, 0x6e, 0x37, 0x1c, 0xe8, 0xed, 0xdc, 0x84, 0x43, 0x91, 0x91, 0x6d, 0x84, 0xd4, 0x25, 0x2f, - 0x43, 0x81, 0x8d, 0xa6, 0x58, 0x0f, 0xe2, 0x34, 0x89, 0xab, 0xeb, 0x6b, 0xbc, 0xc3, 0xee, 0x9d, - 0xb1, 0x10, 0x81, 0xbc, 0x08, 0xf9, 0xee, 0xdc, 0x8e, 0xd0, 0xf4, 0xe5, 0xe4, 0x3e, 0x70, 0x8c, - 0xc6, 0x8a, 0xc9, 0x2d, 0x28, 0x3e, 0xd2, 0x6f, 0x7e, 0x9e, 0x4d, 0x0d, 0x63, 0x8c, 0x1f, 0x23, - 0xd6, 0x8a, 0x30, 0xcc, 0xef, 0x3c, 0x9a, 0xcf, 0x01, 0x24, 0x55, 0xf7, 0x46, 0x59, 0x98, 0x5f, - 0x83, 0xd1, 0xb8, 0x4a, 0xf2, 0x2c, 0xc0, 0x3e, 0x3d, 0xb0, 0xf7, 0x9c, 0xb6, 0x2b, 0xde, 0xf4, - 0x29, 0x59, 0xa3, 0xfb, 0xf4, 0xe0, 0x1e, 0x02, 0xc8, 0x79, 0x18, 0xe9, 0xb0, 0x51, 0x95, 0x19, - 0x7d, 0xad, 0xe1, 0x4e, 0x77, 0x9b, 0x49, 0xe8, 0x2c, 0x8c, 0xa0, 0xf3, 0x43, 0x4c, 0xb4, 0x71, - 0x4b, 0xfe, 0x34, 0x7f, 0x3b, 0x87, 0xb9, 0x1e, 0x94, 0x76, 0x92, 0x17, 0x60, 0xbc, 0x11, 0x50, - 0x5c, 0x8e, 0x1c, 0x66, 0x16, 0x89, 0x7a, 0x4a, 0x09, 0x70, 0xc9, 0x25, 0x57, 0x60, 0x32, 0x49, - 0x31, 0x6c, 0x37, 0xb6, 0xc5, 0xbd, 0xef, 0x92, 0x35, 0xde, 0x91, 0x39, 0x86, 0xe7, 0xb7, 0xf1, - 0x22, 0x47, 0x59, 0xbd, 0xef, 0x18, 0xc9, 0x74, 0xc1, 0xa3, 0xd6, 0xa4, 0x02, 0xc7, 0x83, 0x93, - 0x73, 0x30, 0xec, 0x38, 0xbb, 0x5d, 0x8f, 0x07, 0x95, 0x97, 0x2c, 0xf1, 0x8b, 0xbc, 0x0a, 0x53, - 0xa1, 0xb7, 0xdb, 0x76, 0xa2, 0x6e, 0x20, 0x92, 0x6d, 0xd0, 0x00, 0x45, 0x6a, 0xdc, 0x2a, 0xc7, - 0x05, 0xf3, 0x1c, 0x4e, 0x5e, 0x07, 0xa2, 0xd6, 0xe7, 0x6f, 0x7f, 0x44, 0x1b, 0x5c, 0xd4, 0x4a, - 0xd6, 0x94, 0x52, 0xb2, 0x8a, 0x05, 0xe4, 0x79, 0x28, 0x05, 0x34, 0x44, 0x93, 0x0c, 0xbb, 0x0d, - 0x53, 0x08, 0x59, 0x63, 0x12, 0x76, 0x9f, 0x1e, 0x98, 0x35, 0x98, 0xea, 0x99, 0x8f, 0xe4, 0x75, - 0x6e, 0xdd, 0x8b, 0xf5, 0xb9, 0xc4, 0x37, 0x33, 0xf8, 0xf4, 0x95, 0xfe, 0x72, 0x3a, 0x47, 0x32, - 0xdb, 0x50, 0x52, 0xf5, 0xeb, 0x09, 0x37, 0xea, 0xcf, 0x61, 0xd8, 0x29, 0x57, 0x3e, 0xc3, 0x47, - 0x87, 0x95, 0x9c, 0xe7, 0x62, 0xb0, 0xe9, 0x55, 0x28, 0x4a, 0x2b, 0x41, 0x7d, 0x7f, 0x46, 0x18, - 0x94, 0x07, 0x56, 0x5c, 0x6a, 0xbe, 0x0c, 0x23, 0x42, 0x85, 0x1e, 0xef, 0x88, 0x32, 0xbf, 0x91, - 0x83, 0x49, 0x8b, 0xb2, 0x09, 0x2e, 0x5e, 0x76, 0xf9, 0x8c, 0x25, 0x5b, 0xd6, 0xbe, 0xed, 0x98, - 0x04, 0x16, 0xdf, 0x33, 0x60, 0x3a, 0x03, 0xf7, 0x63, 0x65, 0x67, 0xbb, 0x0d, 0xa3, 0x0b, 0x9e, - 0xd3, 0xac, 0xba, 0x6e, 0x1c, 0x3e, 0x8b, 0xd6, 0xa0, 0xcb, 0xa6, 0x93, 0xc3, 0xa0, 0xea, 0x62, - 0x1a, 0xa3, 0x92, 0x6b, 0x42, 0x28, 0x92, 0xfc, 0x91, 0x32, 0x9d, 0x33, 0xf0, 0x36, 0x25, 0xc9, - 0x9c, 0xf1, 0x2e, 0x24, 0x07, 0x26, 0xa7, 0xb3, 0x4f, 0xed, 0xd0, 0x65, 0xdf, 0x85, 0x4c, 0x7f, - 0xde, 0x40, 0xdb, 0xce, 0x6f, 0xe5, 0xe0, 0x5c, 0x36, 0xe1, 0xc7, 0x4d, 0xb4, 0x87, 0xd9, 0x43, - 0x94, 0x8c, 0xd9, 0x98, 0x68, 0x8f, 0xa7, 0x1a, 0x41, 0xfc, 0x04, 0x81, 0xec, 0xc0, 0xf8, 0xb2, - 0x13, 0x46, 0xf7, 0xa8, 0x13, 0x44, 0xdb, 0xd4, 0x89, 0x06, 0xb0, 0x60, 0xe3, 0xf7, 0xc9, 0x71, - 0x51, 0xdb, 0x93, 0x94, 0xe9, 0xf7, 0xc9, 0x35, 0xb6, 0xb1, 0xa0, 0x14, 0x06, 0x10, 0x94, 0xaf, - 0xc3, 0x64, 0x9d, 0xb6, 0x9c, 0xce, 0x9e, 0x1f, 0x50, 0xe1, 0x3b, 0xbf, 0x0e, 0xe3, 0x31, 0x28, - 0x53, 0x5a, 0xf4, 0x62, 0x0d, 0x5f, 0xe9, 0x88, 0x44, 0x95, 0xe8, 0xc5, 0xe6, 0x6f, 0xe6, 0xe0, - 0x7c, 0xb5, 0x21, 0x0e, 0x1a, 0x44, 0x81, 0x3c, 0x0f, 0xfd, 0x94, 0xeb, 0x26, 0x37, 0x60, 0xf4, - 0x81, 0xf3, 0x78, 0x99, 0xe2, 0x0b, 0xc2, 0x3c, 0x5d, 0x13, 0x37, 0xbf, 0x9c, 0xc7, 0x76, 0xec, - 0xf6, 0xb2, 0x12, 0x1c, 0x75, 0xb3, 0x59, 0xf8, 0x84, 0x9b, 0x4d, 0x13, 0x86, 0xef, 0xf9, 0x4d, - 0x57, 0x2c, 0x4e, 0xe2, 0xdc, 0x62, 0x0f, 0x21, 0x96, 0x28, 0x31, 0x7f, 0x64, 0xc0, 0x44, 0xdc, - 0x62, 0x6c, 0xc2, 0xa7, 0xde, 0x25, 0x57, 0x60, 0x04, 0x2b, 0x8a, 0x5f, 0x47, 0xc2, 0x45, 0xa3, - 0xc9, 0x40, 0xb6, 0xe7, 0x5a, 0xb2, 0x50, 0xed, 0x89, 0xa1, 0x4f, 0xd6, 0x13, 0xe6, 0x3f, 0xc2, - 0x23, 0x11, 0xf5, 0x2b, 0xd9, 0x4a, 0xa4, 0x34, 0xc4, 0x18, 0xb0, 0x21, 0xb9, 0x27, 0x36, 0x24, - 0xf9, 0xbe, 0x43, 0xf2, 0xcd, 0x1c, 0x8c, 0xc5, 0x8d, 0xfd, 0x8c, 0x25, 0x11, 0x88, 0xbf, 0x6b, - 0xa0, 0x10, 0xfa, 0xba, 0xa2, 0x2b, 0x44, 0xa4, 0xfa, 0xfb, 0x30, 0x2c, 0x26, 0x93, 0x91, 0x3a, - 0x17, 0x4c, 0x8d, 0x6e, 0xf2, 0xc6, 0x34, 0x0e, 0x68, 0x68, 0x09, 0x3a, 0xbc, 0xa3, 0xb0, 0x45, - 0xb7, 0xc5, 0x09, 0xd9, 0x53, 0xbb, 0x46, 0x65, 0xdf, 0x51, 0x48, 0x3e, 0x6c, 0xa0, 0xd5, 0xe9, - 0xef, 0x15, 0xa0, 0x9c, 0x26, 0x39, 0x39, 0x4d, 0xc3, 0x5a, 0x77, 0x5b, 0x3c, 0xd0, 0x81, 0x69, - 0x1a, 0x3a, 0xdd, 0x6d, 0x8b, 0xc1, 0xc8, 0x15, 0x28, 0xac, 0x05, 0xde, 0x43, 0xfc, 0x6a, 0xf1, - 0x3e, 0x49, 0x27, 0xf0, 0x1e, 0xaa, 0xc1, 0xba, 0xac, 0x1c, 0x37, 0xb4, 0xcb, 0x75, 0xe5, 0x79, - 0x7f, 0xbe, 0xa1, 0x6d, 0x86, 0xe9, 0x7c, 0x40, 0x12, 0x8d, 0x2d, 0x95, 0x35, 0xea, 0x04, 0x22, - 0xa5, 0x80, 0x50, 0x67, 0xb8, 0x54, 0x6e, 0x23, 0x98, 0x27, 0xfb, 0xb5, 0x54, 0x24, 0xd2, 0x04, - 0xa2, 0xfc, 0x94, 0x13, 0xf8, 0xe4, 0x3d, 0x9e, 0x7c, 0x57, 0x6b, 0x46, 0x65, 0x6d, 0xab, 0xb3, - 0x39, 0x83, 0xef, 0x93, 0xf4, 0x11, 0xae, 0xc1, 0x28, 0xba, 0xbc, 0xd0, 0x91, 0x51, 0x3c, 0x91, - 0x99, 0x0c, 0x8c, 0x06, 0x8c, 0x27, 0xb0, 0x63, 0x77, 0x46, 0xc2, 0x84, 0xbc, 0x0b, 0x63, 0x6a, - 0x34, 0x2f, 0x8f, 0x39, 0xbd, 0xc4, 0xef, 0x8f, 0xf5, 0xc9, 0x9b, 0xa7, 0x12, 0x98, 0x9f, 0x53, - 0xa5, 0x44, 0x2c, 0xda, 0xc7, 0x4a, 0x89, 0xf9, 0xeb, 0x68, 0xc6, 0xb7, 0xfc, 0x88, 0x0a, 0xeb, - 0xe5, 0xa9, 0xd5, 0x63, 0x89, 0x0b, 0x79, 0x48, 0x8b, 0x69, 0xd1, 0xbe, 0xee, 0x14, 0x0f, 0xdb, - 0xff, 0x9e, 0x01, 0x67, 0x33, 0x69, 0xc9, 0x75, 0x80, 0xc4, 0x46, 0x14, 0xbd, 0xc4, 0xb3, 0x28, - 0xc7, 0x50, 0x4b, 0xc1, 0x20, 0x5f, 0x4d, 0x5b, 0x77, 0x27, 0x2f, 0x4e, 0xf2, 0xad, 0x91, 0x09, - 0xdd, 0xba, 0xcb, 0xb0, 0xe9, 0xcc, 0xef, 0xe5, 0x61, 0xaa, 0xe7, 0x8d, 0xca, 0x13, 0xa2, 0x08, - 0xf6, 0x53, 0x2f, 0xa0, 0xf1, 0xe3, 0x8e, 0x6b, 0xfd, 0x5e, 0xc8, 0xcc, 0x78, 0x0f, 0x0d, 0xdd, - 0x62, 0x22, 0x81, 0xf7, 0x09, 0xcf, 0xa2, 0x85, 0xd9, 0x6f, 0xe7, 0xbd, 0xda, 0xb7, 0xb6, 0x27, - 0xf0, 0x86, 0xde, 0xdf, 0xe2, 0x27, 0xc6, 0x7e, 0x3d, 0x07, 0xd3, 0x3d, 0xdf, 0xfc, 0xd4, 0xce, - 0xba, 0xf7, 0xb5, 0xd5, 0xed, 0xb9, 0x7e, 0x63, 0x3a, 0x90, 0x15, 0xf1, 0xdf, 0x0d, 0x38, 0xdf, - 0x87, 0x92, 0x1c, 0xa4, 0x85, 0x88, 0x5b, 0x15, 0x37, 0x8f, 0xaf, 0xf0, 0x89, 0x88, 0xd2, 0xa7, - 0x26, 0x09, 0xdf, 0xc8, 0x01, 0x6c, 0xd1, 0xed, 0xa7, 0x3b, 0x07, 0xd5, 0x17, 0x34, 0x01, 0x50, - 0x1c, 0x98, 0x83, 0xa7, 0xa0, 0x5a, 0x45, 0x47, 0xe2, 0xe0, 0x09, 0xa8, 0xe2, 0xf7, 0x54, 0x72, - 0xd9, 0xef, 0xa9, 0x98, 0xdb, 0x30, 0x73, 0x97, 0x46, 0xc9, 0x4a, 0x28, 0xf7, 0x90, 0xc7, 0xb3, - 0x7d, 0x0d, 0x46, 0x05, 0xbe, 0x9e, 0x1b, 0x5f, 0x86, 0xc4, 0x79, 0xae, 0x95, 0x20, 0x98, 0x14, - 0xce, 0x2f, 0xd0, 0x26, 0x8d, 0xe8, 0xa7, 0x5b, 0x4d, 0x1d, 0x08, 0xff, 0x14, 0xfe, 0xcc, 0xc6, - 0x40, 0x35, 0x9c, 0xd8, 0x3f, 0x9b, 0x70, 0x36, 0x6e, 0xfb, 0x93, 0xe4, 0x7b, 0x83, 0xd9, 0x12, - 0xe2, 0x42, 0x64, 0xc2, 0xf1, 0x18, 0x27, 0xe2, 0x63, 0xb8, 0x28, 0x09, 0xb6, 0xbc, 0xf8, 0x24, - 0x66, 0x20, 0x5a, 0xf2, 0x36, 0x8c, 0x29, 0x34, 0xe2, 0x5a, 0x37, 0x9e, 0x76, 0x3e, 0xf2, 0xa2, - 0x3d, 0x3b, 0xe4, 0x70, 0xf5, 0xb4, 0x53, 0x41, 0x37, 0xbf, 0x02, 0xcf, 0xc4, 0x71, 0x2b, 0x19, - 0x55, 0xa7, 0x98, 0x1b, 0xa7, 0x63, 0xbe, 0x92, 0x7c, 0xd6, 0x52, 0x3b, 0x8e, 0x80, 0x97, 0xbc, - 0x89, 0xfa, 0x59, 0xe2, 0x63, 0x2e, 0x29, 0xb9, 0xf9, 0xc4, 0x5a, 0x94, 0x00, 0xcc, 0xb7, 0x94, - 0xc6, 0x66, 0x30, 0xd4, 0x88, 0x8d, 0x34, 0xf1, 0x37, 0x72, 0x30, 0xb9, 0xba, 0xb4, 0x30, 0x1f, - 0xbb, 0x91, 0x3f, 0x63, 0x09, 0xb2, 0xb4, 0x6f, 0xeb, 0xaf, 0x6f, 0xcc, 0x0d, 0x98, 0x4e, 0x75, - 0x03, 0xbe, 0x22, 0xf4, 0x2e, 0x8f, 0x2f, 0x89, 0xc1, 0x72, 0x65, 0x39, 0x97, 0xc5, 0x7e, 0xf3, - 0x96, 0x95, 0xc2, 0x36, 0xbf, 0x37, 0x9c, 0xe2, 0x2b, 0x54, 0xd8, 0x6b, 0x30, 0xba, 0x14, 0x86, - 0x5d, 0x1a, 0x6c, 0x58, 0xcb, 0xaa, 0x8d, 0xe8, 0x21, 0xd0, 0xee, 0x06, 0x4d, 0x2b, 0x41, 0x20, - 0xaf, 0x40, 0x51, 0x5c, 0xc2, 0x93, 0x3a, 0x01, 0x8f, 0xcb, 0xe3, 0x3b, 0x7c, 0x56, 0x5c, 0x4c, - 0xde, 0x80, 0x12, 0xff, 0x9f, 0x4b, 0x9b, 0xe8, 0x70, 0xf4, 0x55, 0x09, 0x74, 0x2e, 0x9d, 0x96, - 0x86, 0xc6, 0x76, 0x66, 0xf2, 0x99, 0x52, 0xd6, 0xa2, 0x42, 0xb2, 0x33, 0x93, 0x2f, 0x9a, 0x62, - 0x9b, 0x54, 0x24, 0x72, 0x0d, 0xf2, 0xd5, 0x79, 0x4b, 0x4d, 0x07, 0xee, 0x34, 0x02, 0x9e, 0x4e, - 0x5f, 0x7b, 0x09, 0xac, 0x3a, 0x6f, 0x91, 0x39, 0x28, 0xe2, 0x4b, 0x2f, 0x2e, 0x0d, 0x44, 0xd4, - 0x2b, 0x4a, 0x4d, 0x47, 0xc0, 0xd4, 0x93, 0x47, 0x89, 0x47, 0x6e, 0xc0, 0xc8, 0x82, 0x17, 0x76, - 0x9a, 0xce, 0x81, 0xc8, 0x8c, 0x83, 0x87, 0x21, 0x2e, 0x07, 0xa9, 0x72, 0x26, 0xb0, 0xc8, 0x2b, - 0x30, 0x54, 0x6f, 0xf8, 0x1d, 0xb6, 0xdb, 0x8a, 0x43, 0x5b, 0x42, 0x06, 0xd0, 0xf2, 0x5e, 0x30, - 0x00, 0xde, 0x0b, 0xe7, 0xd7, 0xdb, 0x46, 0x95, 0x7b, 0xe1, 0xe9, 0x6b, 0x6d, 0x02, 0xa7, 0x37, - 0xf8, 0x10, 0x9e, 0x64, 0xf0, 0xe1, 0x36, 0x9c, 0xbf, 0x8b, 0xa6, 0x7e, 0x9d, 0x06, 0x98, 0x8c, - 0x94, 0xbf, 0x1a, 0xb5, 0x61, 0x2d, 0x89, 0x2b, 0x7d, 0x78, 0xc1, 0x8a, 0xef, 0x06, 0xec, 0x90, - 0xe3, 0xc8, 0x07, 0xa7, 0x52, 0x4f, 0x65, 0xf4, 0x63, 0x44, 0xbe, 0x04, 0x33, 0x59, 0x45, 0xe2, - 0x72, 0x1f, 0xc6, 0xb5, 0x67, 0x57, 0xa0, 0x06, 0x96, 0x67, 0x71, 0x20, 0xcb, 0x50, 0xe6, 0xf0, - 0xaa, 0xdb, 0xf2, 0xda, 0x8b, 0x2d, 0xc7, 0x6b, 0xe2, 0x55, 0x3f, 0x71, 0x5f, 0x53, 0x70, 0x75, - 0x58, 0xa1, 0x4d, 0x59, 0xa9, 0x16, 0x9d, 0x94, 0xa2, 0x44, 0x75, 0x54, 0xaf, 0x3e, 0x58, 0x4e, - 0xe6, 0xd4, 0x67, 0xeb, 0xdc, 0x48, 0xfb, 0xb6, 0x63, 0xce, 0x8d, 0x36, 0x60, 0x3a, 0xd5, 0x0d, - 0x52, 0x1d, 0x69, 0xe0, 0xb4, 0x3a, 0x4a, 0xd1, 0x58, 0x29, 0x6c, 0xf3, 0x3f, 0x0d, 0xa7, 0xf8, - 0x0a, 0x5f, 0x91, 0x09, 0xc3, 0x5c, 0xdb, 0xa8, 0xa9, 0xf3, 0xb8, 0x2e, 0xb2, 0x44, 0x09, 0xb9, - 0x00, 0xf9, 0x7a, 0x7d, 0x55, 0x4d, 0xec, 0x19, 0x86, 0xbe, 0xc5, 0x60, 0x6c, 0x84, 0xd0, 0x0d, - 0xa4, 0x5c, 0x31, 0x6b, 0xd0, 0x20, 0x12, 0xef, 0xd8, 0xbe, 0x94, 0xcc, 0xe3, 0x42, 0xd2, 0xdf, - 0x62, 0x1e, 0x27, 0xb3, 0x77, 0x1e, 0x66, 0xab, 0x61, 0x48, 0x83, 0x88, 0xbf, 0x46, 0x10, 0x76, - 0x5b, 0x34, 0x10, 0xb2, 0x26, 0x74, 0x0c, 0x7f, 0x05, 0xbf, 0x11, 0x5a, 0x7d, 0x11, 0xc9, 0x55, - 0x28, 0x56, 0xbb, 0xae, 0x47, 0xdb, 0x0d, 0x2d, 0xba, 0xde, 0x11, 0x30, 0x2b, 0x2e, 0x25, 0x1f, - 0xc2, 0x59, 0x41, 0x24, 0x15, 0x8e, 0xe8, 0x01, 0xae, 0x6b, 0xf8, 0x0e, 0x56, 0xcc, 0x05, 0xa9, - 0xa6, 0x6c, 0xd1, 0x25, 0xd9, 0x94, 0xa4, 0x0a, 0xe5, 0x45, 0x3c, 0x27, 0x95, 0xaf, 0x59, 0xfb, - 0x81, 0xc8, 0x3a, 0x8d, 0x9a, 0x8b, 0x9f, 0xa1, 0xda, 0x6e, 0x5c, 0x68, 0xf5, 0xa0, 0x93, 0xfb, - 0x30, 0x9d, 0x86, 0x31, 0x7d, 0x3c, 0x9a, 0xbc, 0x36, 0xd7, 0xc3, 0x05, 0x15, 0x73, 0x16, 0x15, - 0xd9, 0x86, 0xa9, 0x6a, 0x14, 0x05, 0xde, 0x76, 0x37, 0xa2, 0x29, 0xd5, 0x25, 0x1d, 0x8d, 0x71, - 0xb9, 0x54, 0x5f, 0xcf, 0x08, 0x61, 0x9c, 0x76, 0x62, 0xca, 0x58, 0x85, 0x59, 0xbd, 0xec, 0x88, - 0x1b, 0x3f, 0x58, 0x29, 0x1e, 0x75, 0x14, 0x57, 0xa2, 0xa4, 0x43, 0xb7, 0x1a, 0x1e, 0xb4, 0x5a, - 0x34, 0x0a, 0xf0, 0xe4, 0x1e, 0x1f, 0x7d, 0x34, 0x45, 0x0c, 0xd0, 0x45, 0xe5, 0x9d, 0x56, 0x7c, - 0xd8, 0x53, 0x0b, 0x8f, 0xd4, 0x78, 0x6a, 0xcb, 0x47, 0x69, 0xc0, 0xe5, 0xa3, 0x09, 0x53, 0x8b, - 0xed, 0x46, 0x70, 0x80, 0x77, 0x33, 0x65, 0xe3, 0xc6, 0x4f, 0x68, 0x9c, 0x7c, 0xd1, 0xe5, 0x92, - 0x23, 0x25, 0x2c, 0xab, 0x79, 0xbd, 0x8c, 0xcd, 0xff, 0x0b, 0xca, 0xe9, 0xbe, 0xfc, 0x84, 0xaf, - 0x74, 0x9f, 0x26, 0x34, 0x9b, 0x8d, 0x74, 0xfa, 0x5b, 0xc8, 0x0d, 0xed, 0x29, 0x66, 0x23, 0x49, - 0x1d, 0xa0, 0x3c, 0x9a, 0xac, 0x3d, 0xc0, 0x2c, 0xa7, 0x71, 0x2e, 0x6b, 0x1a, 0x9b, 0xbf, 0x94, - 0x83, 0x29, 0x1e, 0x4d, 0xfa, 0xf4, 0xdb, 0x8a, 0xef, 0x6a, 0xca, 0x59, 0xfa, 0x02, 0x53, 0x5f, - 0x77, 0x8c, 0xb5, 0xf8, 0x35, 0x38, 0xdb, 0xd3, 0x15, 0xa8, 0xa0, 0x17, 0x64, 0x1c, 0x6f, 0x8f, - 0x8a, 0x9e, 0xcd, 0xae, 0x64, 0xf3, 0x96, 0xd5, 0x43, 0x61, 0xfe, 0x83, 0x5c, 0x0f, 0x7f, 0x61, - 0x37, 0xaa, 0x96, 0xa0, 0x71, 0x3a, 0x4b, 0x30, 0xf7, 0xb1, 0x2c, 0xc1, 0xfc, 0x20, 0x96, 0xe0, - 0x87, 0x30, 0xbe, 0x4e, 0x1d, 0x66, 0xd1, 0x88, 0xeb, 0x72, 0x05, 0xed, 0x99, 0x64, 0x56, 0x26, - 0xf5, 0x4b, 0x7c, 0xd5, 0x36, 0x62, 0x04, 0x4c, 0xb5, 0xf0, 0xfb, 0x73, 0x96, 0xce, 0x41, 0x5d, - 0x34, 0x86, 0xfa, 0x2f, 0x1a, 0x66, 0x00, 0x63, 0xf5, 0xfa, 0xea, 0x96, 0x13, 0x30, 0x6d, 0x11, - 0x32, 0x93, 0x51, 0x86, 0x89, 0x1a, 0x89, 0xe2, 0xed, 0x8d, 0x0f, 0x95, 0x58, 0x4c, 0xb1, 0x48, - 0x62, 0x11, 0x52, 0xc1, 0x23, 0xe2, 0x04, 0x4c, 0x8b, 0x88, 0x13, 0x30, 0xf3, 0xef, 0x17, 0xa0, - 0xcc, 0x43, 0x1f, 0xd9, 0xbe, 0x57, 0xe4, 0x07, 0xea, 0x79, 0x27, 0xc2, 0x38, 0xfd, 0x3b, 0x11, - 0x1f, 0x23, 0xc6, 0x56, 0xb9, 0x8b, 0x9d, 0x1f, 0xe0, 0x2e, 0xf6, 0x9b, 0xda, 0x45, 0xe6, 0x42, - 0xf2, 0x10, 0xe9, 0x7e, 0x77, 0x9b, 0x1e, 0x7f, 0x85, 0xf9, 0xb6, 0x7a, 0xe3, 0x78, 0x28, 0x89, - 0x3e, 0x41, 0xca, 0x63, 0xee, 0x1a, 0xc7, 0x5a, 0x6c, 0xf8, 0x34, 0xf1, 0xe6, 0x23, 0xff, 0x47, - 0xe3, 0xcd, 0x17, 0x01, 0x94, 0xa4, 0x31, 0xc5, 0xe4, 0x3d, 0xd2, 0x93, 0x13, 0xc6, 0x28, 0x84, - 0xe6, 0xbf, 0x2d, 0xc3, 0x54, 0xbd, 0xbe, 0xba, 0xe0, 0x39, 0xbb, 0x6d, 0x3f, 0x8c, 0xbc, 0xc6, - 0x52, 0x7b, 0xc7, 0x67, 0x53, 0x78, 0x9d, 0x86, 0xd1, 0x9d, 0xa6, 0xff, 0x48, 0x8d, 0x7d, 0x8e, - 0x68, 0x18, 0xd9, 0x3b, 0x4d, 0xff, 0x91, 0x15, 0x17, 0xb3, 0x25, 0x62, 0x31, 0x08, 0xe2, 0xa7, - 0x4f, 0x70, 0x89, 0xa0, 0x0c, 0x60, 0x71, 0x38, 0x9b, 0x25, 0xf5, 0x2e, 0xcf, 0xfe, 0xc1, 0x33, - 0xcd, 0xe1, 0x2c, 0x09, 0x39, 0xc8, 0x92, 0x65, 0x84, 0xf6, 0x0a, 0xac, 0xd0, 0x9a, 0xe7, 0xb5, - 0xa8, 0xf5, 0xa4, 0x58, 0xbc, 0xa1, 0x87, 0x50, 0x1c, 0x5d, 0xbb, 0x83, 0x70, 0xd5, 0x78, 0xef, - 0x99, 0x03, 0x07, 0x70, 0x96, 0x19, 0x97, 0xa7, 0xb6, 0x39, 0xae, 0x09, 0x9d, 0x60, 0xe2, 0x7d, - 0x89, 0x0c, 0xc3, 0x43, 0x7d, 0x1e, 0x21, 0xb3, 0x06, 0xf2, 0x4b, 0x06, 0x3c, 0x9b, 0x59, 0x12, - 0xcf, 0xee, 0x31, 0xed, 0xe6, 0x80, 0xa2, 0x34, 0x30, 0x63, 0xca, 0xab, 0xfd, 0xaa, 0xb6, 0x33, - 0x54, 0xc1, 0xf1, 0x35, 0x91, 0x7f, 0x69, 0xc0, 0x79, 0x0d, 0x03, 0x53, 0x2d, 0xb6, 0x68, 0x3b, - 0x92, 0x0f, 0x87, 0xf7, 0x91, 0xeb, 0x8f, 0x9e, 0x8c, 0x5c, 0xbf, 0xa0, 0x7f, 0x0b, 0x4f, 0x47, - 0x8d, 0xd5, 0xab, 0x3b, 0xc5, 0x3e, 0x2d, 0x24, 0x3f, 0x0d, 0x53, 0x58, 0x24, 0xed, 0x1f, 0x26, - 0xb3, 0x68, 0x36, 0x95, 0x6a, 0x73, 0x3f, 0x38, 0xac, 0x8c, 0x6b, 0x05, 0x78, 0xad, 0x10, 0x6b, - 0x8b, 0xcd, 0x25, 0xaf, 0xbd, 0xe3, 0x6b, 0xa9, 0x55, 0xd3, 0xcc, 0xc8, 0xbf, 0x36, 0x60, 0x96, - 0x41, 0x79, 0x83, 0xef, 0x04, 0x7e, 0x2b, 0x2e, 0x0f, 0xc5, 0x8d, 0xf3, 0x3e, 0x1d, 0xd4, 0x7c, - 0x32, 0x1d, 0xf4, 0x12, 0x36, 0x99, 0xcf, 0x7e, 0x7b, 0x27, 0xf0, 0x5b, 0x49, 0xf3, 0xb5, 0x6c, - 0x25, 0xfd, 0x1a, 0x49, 0x7e, 0xd1, 0x80, 0x0b, 0xda, 0x36, 0x4a, 0xbd, 0x94, 0x37, 0x3b, 0xa9, - 0x39, 0x07, 0xd4, 0xa2, 0xda, 0x75, 0x21, 0xe9, 0x57, 0xb0, 0x05, 0xc9, 0xba, 0x80, 0x6d, 0xb1, - 0x5b, 0x1c, 0x4b, 0x69, 0x42, 0xff, 0x5a, 0x88, 0x07, 0x53, 0xe8, 0x58, 0xd2, 0xfc, 0x12, 0x33, - 0xfd, 0xfd, 0x12, 0x57, 0x44, 0xd5, 0xcf, 0xe1, 0xc5, 0xa7, 0xfe, 0xce, 0x89, 0x5e, 0xae, 0xe4, - 0xe7, 0xe0, 0x42, 0x0f, 0x30, 0x9e, 0x57, 0x67, 0xfb, 0xce, 0xab, 0x57, 0x8f, 0x0e, 0x2b, 0x2f, - 0x67, 0xd5, 0x96, 0x35, 0xa7, 0xfa, 0xd7, 0x40, 0xee, 0x03, 0x24, 0x85, 0xb3, 0xe7, 0x50, 0x14, - 0x5f, 0x15, 0x92, 0xa0, 0x94, 0x30, 0xfd, 0xac, 0xd4, 0xa6, 0x2e, 0x63, 0x09, 0x12, 0x59, 0x85, - 0x92, 0x72, 0xbd, 0xeb, 0x60, 0xf6, 0x3c, 0x67, 0xf7, 0x83, 0xc3, 0x8a, 0x06, 0x67, 0xbb, 0x3f, - 0xf5, 0x86, 0x98, 0xea, 0x6f, 0xd2, 0x10, 0xc9, 0x1f, 0x19, 0x30, 0xc3, 0x00, 0x89, 0xa0, 0x88, - 0x86, 0xce, 0x1e, 0x27, 0xc9, 0x7b, 0x4f, 0x46, 0x92, 0x9f, 0xc7, 0x36, 0xaa, 0x92, 0xdc, 0xf3, - 0xf1, 0x99, 0x8d, 0x43, 0x09, 0xd6, 0xfc, 0x92, 0x9a, 0x04, 0x5f, 0x18, 0x40, 0x82, 0x79, 0x57, - 0x9f, 0x2c, 0xc1, 0x7d, 0x6b, 0x21, 0xeb, 0x50, 0x12, 0x46, 0x2e, 0xef, 0xb0, 0xe7, 0xb4, 0x7b, - 0x23, 0x6a, 0x11, 0xdf, 0x8d, 0x8b, 0x7b, 0x6e, 0x3d, 0x5f, 0xa8, 0x71, 0x21, 0x6d, 0x98, 0xe6, - 0xbf, 0x75, 0x8b, 0xb4, 0xd2, 0xd7, 0x22, 0xbd, 0x2a, 0xbe, 0xe8, 0xb2, 0xe0, 0x9f, 0x32, 0x4c, - 0x95, 0x8a, 0xb2, 0x18, 0x13, 0x07, 0x26, 0x05, 0xd8, 0xdf, 0xa7, 0x5c, 0x5b, 0x5e, 0xd6, 0x62, - 0xa5, 0x52, 0xa5, 0x3c, 0x71, 0x8c, 0xac, 0x0b, 0x83, 0x52, 0x52, 0x2a, 0x33, 0xcd, 0xcf, 0xfc, - 0xa6, 0xd1, 0x53, 0x07, 0x79, 0x4d, 0x3c, 0x4d, 0xaf, 0x84, 0x7b, 0xa3, 0x03, 0x99, 0x73, 0xc4, - 0xa0, 0xef, 0x04, 0x81, 0xd9, 0x09, 0x6a, 0xe8, 0x5b, 0x5e, 0xa4, 0xfc, 0xe4, 0xa0, 0x24, 0x64, - 0xa5, 0x22, 0x1d, 0xa8, 0xf9, 0xc4, 0xde, 0x40, 0x07, 0xaa, 0x70, 0x9b, 0x9a, 0xbf, 0x98, 0xd3, - 0xc7, 0x8c, 0x5c, 0x55, 0x4c, 0x56, 0x25, 0xf8, 0x4e, 0x9a, 0xac, 0x8a, 0xa1, 0xfa, 0x7b, 0x06, - 0x4c, 0xaf, 0x06, 0xbb, 0x4e, 0xdb, 0xfb, 0x19, 0x1e, 0x9a, 0xef, 0x63, 0x3f, 0xc6, 0xc7, 0xa1, - 0x9f, 0xea, 0xd5, 0x7c, 0x5f, 0xa9, 0x98, 0x0d, 0x2d, 0x8e, 0xb1, 0x95, 0xd5, 0x1e, 0x3c, 0xc6, - 0xc2, 0x86, 0x29, 0x19, 0x12, 0x38, 0x3a, 0x87, 0x9b, 0xdf, 0xca, 0xc1, 0x98, 0x22, 0x3f, 0xe4, - 0xf3, 0x50, 0x52, 0xf9, 0xa8, 0x01, 0xc0, 0x6a, 0xb5, 0x96, 0x86, 0x85, 0x91, 0xfa, 0xd4, 0x69, - 0xa9, 0x7b, 0x6d, 0x56, 0x8b, 0x85, 0xd0, 0x53, 0x5a, 0xf5, 0xef, 0x65, 0x58, 0xf5, 0xa7, 0x4a, - 0x4f, 0xf4, 0x76, 0xaf, 0x6d, 0x3f, 0x78, 0x36, 0x21, 0xf3, 0x57, 0x72, 0x50, 0x5e, 0x0f, 0xba, - 0x61, 0x44, 0x5d, 0x19, 0xaf, 0xf0, 0xd9, 0x7a, 0xf3, 0x50, 0xff, 0xb8, 0x63, 0x22, 0xf2, 0x0a, - 0xbf, 0xf1, 0x3b, 0x95, 0x33, 0xe6, 0x97, 0x61, 0x26, 0xdd, 0x1d, 0xe8, 0x1b, 0xa8, 0xc2, 0xa4, - 0x0e, 0x4f, 0x5f, 0x56, 0x4e, 0x53, 0x59, 0x69, 0x7c, 0xf3, 0xcf, 0x72, 0x69, 0xde, 0xc2, 0x81, - 0xcb, 0x26, 0x38, 0x3e, 0x41, 0x2d, 0xef, 0x53, 0x8a, 0x9c, 0xbe, 0x08, 0xb2, 0x64, 0xd9, 0x69, - 0xae, 0xad, 0xc7, 0xc7, 0xb9, 0xf9, 0xec, 0xe3, 0x5c, 0x72, 0x1b, 0x4a, 0x18, 0xa2, 0x5e, 0x75, - 0xdd, 0x80, 0x6d, 0x40, 0x0a, 0x49, 0xfa, 0xde, 0x47, 0x74, 0xdb, 0xe6, 0xa1, 0xec, 0x8e, 0xeb, - 0x06, 0x96, 0x86, 0x47, 0xe6, 0x61, 0x46, 0xbb, 0x11, 0x21, 0xe9, 0x87, 0x12, 0x07, 0x55, 0x84, - 0x05, 0x9c, 0x38, 0x13, 0x19, 0x33, 0xd8, 0xfb, 0x4d, 0xb6, 0x83, 0xc0, 0x7d, 0xa5, 0x9e, 0xfa, - 0x54, 0x6a, 0x76, 0x19, 0x26, 0x45, 0x30, 0xed, 0x4f, 0xcb, 0xe9, 0x68, 0x99, 0xb4, 0x38, 0xa2, - 0xf9, 0x57, 0x06, 0x9b, 0x6b, 0x8d, 0xfd, 0xcf, 0xd8, 0x85, 0x7a, 0xf6, 0x49, 0xc7, 0x9c, 0x2f, - 0xfc, 0x07, 0x83, 0x5f, 0x89, 0x15, 0xe2, 0xf3, 0x26, 0x0c, 0xf3, 0x07, 0xaf, 0xc5, 0xe5, 0x4d, - 0x95, 0x0b, 0x2f, 0x48, 0x42, 0xe2, 0xf8, 0xb3, 0xd9, 0x96, 0x20, 0x50, 0x5d, 0x2e, 0xb9, 0x81, - 0x5c, 0x2e, 0xca, 0x7b, 0x1c, 0x83, 0xbd, 0xf3, 0x64, 0x9c, 0xfc, 0x1e, 0x87, 0xf9, 0xbf, 0x72, - 0xfc, 0x7b, 0x44, 0xa3, 0x06, 0xcd, 0x00, 0x7f, 0x05, 0x0a, 0x4c, 0x0e, 0xd4, 0x34, 0xfb, 0x4c, - 0x56, 0xb4, 0xa7, 0xfd, 0xfc, 0x26, 0xba, 0x62, 0x51, 0xd7, 0xaa, 0x39, 0x1c, 0x50, 0x1d, 0xab, - 0xf3, 0x06, 0x31, 0xf0, 0x15, 0x25, 0xdf, 0xa5, 0xea, 0x74, 0x68, 0xeb, 0x0f, 0x5e, 0x61, 0x39, - 0xb9, 0xad, 0x5c, 0xa5, 0x54, 0xcf, 0x50, 0x5b, 0x3b, 0x8e, 0xcd, 0xaf, 0xf0, 0xa9, 0xda, 0x36, - 0xb9, 0x75, 0xb9, 0x08, 0x13, 0x7a, 0x82, 0x27, 0x71, 0xce, 0x81, 0x49, 0x59, 0x52, 0xc9, 0xa1, - 0x54, 0x8f, 0xba, 0x4e, 0x44, 0x6a, 0x30, 0xae, 0x65, 0xf1, 0x51, 0x1f, 0x1f, 0xe1, 0x59, 0x43, - 0xed, 0xde, 0xf4, 0x73, 0x3a, 0x89, 0x12, 0xa3, 0xf3, 0x39, 0x28, 0x8b, 0x99, 0x19, 0xa7, 0xd3, - 0x40, 0x6f, 0xf2, 0xd2, 0x82, 0xa5, 0xce, 0xa6, 0x86, 0xe7, 0x06, 0x16, 0x42, 0xcd, 0xef, 0x1a, - 0x70, 0x41, 0x3c, 0xe4, 0x6d, 0xd1, 0x30, 0x0a, 0x3c, 0x9e, 0x9d, 0x03, 0xe5, 0xf1, 0xf3, 0xe4, - 0x6d, 0x99, 0x90, 0x58, 0x57, 0x90, 0xe9, 0x3a, 0x6a, 0xe3, 0x42, 0x28, 0x87, 0x30, 0x25, 0xb1, - 0x4c, 0x44, 0xfc, 0xa6, 0x48, 0x44, 0x9c, 0x3b, 0x9e, 0x38, 0x9e, 0x17, 0x2e, 0x6d, 0xcb, 0x04, - 0xc4, 0xdf, 0xc9, 0xc1, 0xd9, 0x8c, 0x66, 0x6d, 0x7e, 0xfe, 0x29, 0x55, 0x0e, 0x35, 0x4d, 0x39, - 0xc8, 0x4c, 0xf5, 0x7d, 0x3b, 0x3e, 0x53, 0x57, 0xfc, 0x96, 0x01, 0xe7, 0x75, 0xe9, 0x11, 0xc7, - 0x5f, 0x9b, 0xb7, 0xc8, 0x5b, 0x30, 0x7c, 0x8f, 0x3a, 0x2e, 0x95, 0xb7, 0xbe, 0xcf, 0xa6, 0x9e, - 0xe7, 0xe0, 0x85, 0x9c, 0xed, 0x9f, 0xf1, 0xa9, 0x7c, 0xc6, 0x12, 0x24, 0x64, 0x41, 0x34, 0x8e, - 0x9b, 0x80, 0xa6, 0x0c, 0x0e, 0xcb, 0xaa, 0xea, 0x18, 0x5f, 0xfc, 0xef, 0x19, 0xf0, 0xcc, 0x31, - 0x34, 0x6c, 0xe0, 0xd8, 0xd0, 0xab, 0x03, 0x87, 0x0b, 0x0b, 0x42, 0xc9, 0xbb, 0x30, 0xb9, 0x2e, - 0x4c, 0x48, 0x39, 0x1c, 0xca, 0xab, 0x66, 0xd2, 0xba, 0xb4, 0xe5, 0xb8, 0xa4, 0x91, 0x99, 0x01, - 0x7c, 0xcf, 0x0f, 0xa3, 0x76, 0x92, 0x61, 0x13, 0x0d, 0xe0, 0x3d, 0x01, 0xb3, 0xe2, 0x52, 0x66, - 0x16, 0xe8, 0xcd, 0x14, 0x11, 0xd8, 0x2f, 0xc0, 0x30, 0xc3, 0x89, 0x1d, 0xfa, 0x28, 0x07, 0xf8, - 0xcc, 0xb4, 0xe7, 0x5a, 0xa2, 0x28, 0x3e, 0x4a, 0xca, 0x65, 0x06, 0x4a, 0x7d, 0xcb, 0x80, 0xb2, - 0xce, 0xfb, 0x93, 0x0e, 0xcd, 0x3b, 0xda, 0xd0, 0x3c, 0x93, 0x3d, 0x34, 0xfd, 0xc7, 0xa4, 0x27, - 0xd9, 0xdd, 0x40, 0x63, 0x61, 0xc2, 0xf0, 0x82, 0xdf, 0x72, 0xbc, 0xb6, 0x9a, 0xa0, 0xcd, 0x45, - 0x88, 0x25, 0x4a, 0x94, 0xde, 0xca, 0xf7, 0xed, 0x2d, 0xf3, 0x57, 0x0b, 0x70, 0xc1, 0xa2, 0xbb, - 0x1e, 0x33, 0x90, 0x36, 0x42, 0xaf, 0xbd, 0xab, 0x85, 0xb1, 0x99, 0xa9, 0x0e, 0x17, 0x97, 0x77, - 0x18, 0x24, 0xee, 0xef, 0x57, 0xa0, 0xc8, 0xb4, 0xb4, 0xd2, 0xe7, 0xe8, 0xa4, 0xc5, 0x34, 0xa3, - 0x7c, 0x5c, 0x65, 0x31, 0xb9, 0x26, 0xd6, 0x10, 0xe5, 0x7a, 0x25, 0x5b, 0x43, 0x7e, 0x7c, 0x58, - 0x01, 0xfe, 0xac, 0x10, 0x2b, 0x15, 0xeb, 0x48, 0x6c, 0x54, 0x15, 0xfa, 0x18, 0x55, 0x0f, 0x60, - 0xa6, 0xea, 0x72, 0xfd, 0xe4, 0x34, 0xd7, 0x02, 0xaf, 0xdd, 0xf0, 0x3a, 0x4e, 0x53, 0x1a, 0xe5, - 0xe8, 0xaa, 0x77, 0xe2, 0x72, 0xbb, 0x13, 0x23, 0x58, 0x99, 0x64, 0xec, 0x33, 0x16, 0x56, 0xea, - 0x3c, 0x8b, 0x24, 0xf7, 0xbf, 0xe3, 0x67, 0xb8, 0xed, 0x90, 0xa7, 0x91, 0xb4, 0xe2, 0x62, 0x34, - 0xe7, 0xf0, 0x86, 0xf5, 0xfa, 0x72, 0xfd, 0xbe, 0xb8, 0xb1, 0x2c, 0x6f, 0x7f, 0xf0, 0x0b, 0xd9, - 0x51, 0x33, 0xc4, 0x23, 0x43, 0x0d, 0x2f, 0xa1, 0xab, 0xd7, 0xef, 0x31, 0xba, 0x62, 0x0f, 0x5d, - 0x18, 0xee, 0xa9, 0x74, 0x1c, 0x8f, 0xdc, 0x00, 0xe0, 0xf1, 0xf3, 0x28, 0x10, 0xa3, 0x89, 0xf1, - 0x17, 0x20, 0x94, 0x1b, 0x7f, 0x0a, 0x0a, 0x79, 0x1b, 0xa6, 0x17, 0xe7, 0xe7, 0xa4, 0xdf, 0x65, - 0xc1, 0x6f, 0x74, 0x5b, 0xb4, 0x1d, 0xe1, 0xd5, 0xf8, 0x12, 0x1f, 0x43, 0xda, 0x98, 0x63, 0x52, - 0x90, 0x85, 0x26, 0x2e, 0x24, 0xf3, 0x74, 0x16, 0xf3, 0xbe, 0x4b, 0xc3, 0xcd, 0x9b, 0x9f, 0xb1, - 0x0b, 0xc9, 0xca, 0xb7, 0xe1, 0x6c, 0xbb, 0x99, 0x39, 0x33, 0xff, 0x7f, 0xbc, 0x90, 0xdc, 0x83, - 0x4b, 0x7e, 0x02, 0x86, 0xf0, 0xa7, 0x58, 0x71, 0xa7, 0x33, 0xd8, 0x26, 0xab, 0x6d, 0x83, 0x27, - 0x04, 0x44, 0x02, 0xb2, 0x94, 0x3c, 0xda, 0x76, 0x8a, 0x6b, 0x75, 0x22, 0x27, 0x8e, 0xfe, 0x5a, - 0xa7, 0x0b, 0x25, 0xb5, 0x42, 0x26, 0x23, 0xf7, 0x9c, 0x70, 0x8f, 0xba, 0xf3, 0xf2, 0x8d, 0xff, - 0x12, 0x97, 0x91, 0x3d, 0x84, 0xe2, 0x4b, 0xa2, 0x96, 0x82, 0xc2, 0xb4, 0xc3, 0x52, 0xb8, 0x11, - 0x8a, 0xa6, 0x88, 0x5d, 0x90, 0x87, 0xbb, 0x57, 0xd7, 0x12, 0x45, 0xa8, 0x2d, 0xe5, 0x29, 0x4d, - 0xe0, 0x34, 0xf6, 0x69, 0xb0, 0x79, 0xf3, 0xd3, 0xd0, 0x96, 0x7a, 0x1d, 0xc7, 0x8c, 0xc9, 0x37, - 0x20, 0xce, 0x67, 0xa9, 0x21, 0x33, 0x1b, 0x31, 0x09, 0x06, 0x36, 0x12, 0x1b, 0x31, 0x09, 0x06, - 0x56, 0x6d, 0xc4, 0x18, 0x35, 0x7e, 0x51, 0x25, 0x77, 0xc2, 0x8b, 0x2a, 0x7d, 0x5e, 0x8f, 0x92, - 0xf7, 0xc8, 0x3e, 0x43, 0xef, 0xf5, 0x7d, 0x11, 0x4a, 0xd5, 0x28, 0x72, 0x1a, 0x7b, 0xd4, 0xc5, - 0x97, 0x7b, 0x94, 0x18, 0x44, 0x47, 0xc0, 0x55, 0x8f, 0xa2, 0x8a, 0xab, 0xbc, 0xd7, 0x39, 0x32, - 0xc0, 0x7b, 0x9d, 0x37, 0x60, 0x64, 0xa9, 0xfd, 0xd0, 0x63, 0x7d, 0x52, 0x4c, 0xf2, 0xd1, 0x79, - 0x1c, 0xa4, 0x3f, 0xf2, 0x88, 0x20, 0xf2, 0xa6, 0x62, 0x41, 0x8c, 0x26, 0xa6, 0x3c, 0xdf, 0x66, - 0xd9, 0xd2, 0x90, 0x50, 0x0f, 0x7f, 0x25, 0x3a, 0xb9, 0x0d, 0x23, 0x72, 0xf7, 0x0c, 0x89, 0xf9, - 0x2e, 0x28, 0x1d, 0x5e, 0xa2, 0xa5, 0xc0, 0x13, 0xbb, 0xe7, 0xb7, 0xf5, 0x2b, 0xeb, 0x63, 0x4a, - 0x2a, 0x28, 0xe5, 0xca, 0xba, 0x96, 0x0a, 0x4a, 0xb9, 0xbc, 0x1e, 0x6f, 0x86, 0x4a, 0x27, 0x6e, - 0x86, 0x36, 0xa1, 0xb4, 0xe6, 0x04, 0x91, 0xc7, 0x96, 0xa3, 0x76, 0xc4, 0x73, 0x11, 0x27, 0x7b, - 0x75, 0xa5, 0x28, 0x79, 0xc4, 0xad, 0xa3, 0xe0, 0xeb, 0xb9, 0x74, 0x12, 0x38, 0x59, 0xc9, 0xb8, - 0xd4, 0x24, 0x1e, 0x07, 0xc0, 0x83, 0x4b, 0x35, 0x13, 0x3d, 0x2f, 0x55, 0x4f, 0x38, 0x7a, 0xef, - 0x43, 0xdd, 0xe2, 0x63, 0x80, 0x7b, 0xc6, 0x49, 0x64, 0x83, 0x09, 0x0d, 0xd1, 0xae, 0x48, 0x6d, - 0x1c, 0x63, 0x44, 0xf2, 0x55, 0x28, 0xb1, 0xff, 0x31, 0x31, 0xab, 0x47, 0x79, 0xae, 0xe1, 0xe4, - 0x92, 0x8b, 0x3e, 0xa1, 0x79, 0xf6, 0xd6, 0x3a, 0x8d, 0xf8, 0x04, 0x46, 0xc6, 0x69, 0xc7, 0x8b, - 0xc6, 0x8d, 0xbc, 0x07, 0x25, 0x35, 0xb1, 0xf3, 0xec, 0x54, 0x12, 0x96, 0xe6, 0x0a, 0x78, 0x7a, - 0x94, 0x34, 0x02, 0xb6, 0x7e, 0x55, 0x3b, 0x1d, 0xa4, 0x25, 0x8a, 0xb4, 0x77, 0x3a, 0x69, 0x32, - 0x89, 0x46, 0xde, 0x87, 0x52, 0xb5, 0xd3, 0x49, 0x34, 0xce, 0xb4, 0xb2, 0x25, 0xec, 0x74, 0xec, - 0x4c, 0xad, 0xa3, 0x51, 0x30, 0xc1, 0x12, 0x06, 0x1f, 0xd6, 0x3b, 0x93, 0x08, 0x96, 0x4c, 0x57, - 0x9c, 0x16, 0x2c, 0x05, 0xdd, 0xfc, 0x91, 0x01, 0xe7, 0xfb, 0x74, 0xdb, 0xc0, 0x8f, 0x13, 0xdf, - 0x48, 0xd6, 0x60, 0xc5, 0x1d, 0x21, 0xd6, 0x60, 0xf5, 0xa3, 0xe5, 0x6a, 0x9c, 0x9d, 0x18, 0x39, - 0xff, 0xa9, 0x25, 0x46, 0x36, 0x0f, 0x0d, 0x18, 0x53, 0x84, 0xf9, 0x09, 0x3e, 0x06, 0x78, 0x45, - 0xbc, 0x10, 0x90, 0x4f, 0xf0, 0x5a, 0x29, 0xd7, 0x03, 0xbe, 0x08, 0xf0, 0x35, 0x80, 0x65, 0x27, - 0x8c, 0xaa, 0x8d, 0xc8, 0x7b, 0x48, 0x07, 0xd0, 0xdc, 0x49, 0x3a, 0x34, 0x07, 0xdf, 0x14, 0x61, - 0x64, 0x3d, 0xe9, 0xd0, 0x62, 0x86, 0xe6, 0x0a, 0x0c, 0xd7, 0xfd, 0x20, 0xaa, 0x1d, 0xf0, 0xe5, - 0x78, 0x81, 0x86, 0x0d, 0xd5, 0x29, 0xe9, 0xa1, 0x7b, 0xa2, 0x61, 0x89, 0x22, 0x66, 0x13, 0xdf, - 0xf1, 0x68, 0xd3, 0x55, 0x83, 0x1c, 0x76, 0x18, 0xc0, 0xe2, 0xf0, 0x6b, 0xef, 0xc1, 0xa4, 0x14, - 0xec, 0xf5, 0xe5, 0x3a, 0x7e, 0xc1, 0x24, 0x8c, 0x6d, 0x2e, 0x5a, 0x4b, 0x77, 0xbe, 0x6c, 0xdf, - 0xd9, 0x58, 0x5e, 0x2e, 0x9f, 0x21, 0xe3, 0x30, 0x2a, 0x00, 0xf3, 0xd5, 0xb2, 0x41, 0x4a, 0x50, - 0x5c, 0x5a, 0xa9, 0x2f, 0xce, 0x6f, 0x58, 0x8b, 0xe5, 0xdc, 0xb5, 0x97, 0x60, 0x22, 0x89, 0x72, - 0xc3, 0xf3, 0x90, 0x11, 0xc8, 0x5b, 0xd5, 0xad, 0xf2, 0x19, 0x02, 0x30, 0xbc, 0x76, 0x7f, 0xbe, - 0x7e, 0xf3, 0x66, 0xd9, 0xb8, 0xf6, 0x39, 0x98, 0x42, 0x47, 0xe5, 0x32, 0xdb, 0x37, 0xb4, 0x69, - 0x80, 0x35, 0x95, 0xa0, 0x58, 0xa7, 0x1d, 0x27, 0x70, 0x22, 0xca, 0xab, 0x79, 0xd0, 0x6d, 0x46, - 0x5e, 0xa7, 0x49, 0x1f, 0x97, 0x8d, 0x6b, 0x6f, 0xc2, 0xa4, 0xe5, 0x77, 0x23, 0xaf, 0xbd, 0x2b, - 0x5f, 0x53, 0x21, 0x67, 0x61, 0x6a, 0x63, 0xa5, 0xfa, 0xa0, 0xb6, 0x74, 0x77, 0x63, 0x75, 0xa3, - 0x6e, 0x3f, 0xa8, 0xae, 0xcf, 0xdf, 0x2b, 0x9f, 0x61, 0x0d, 0x7e, 0xb0, 0x5a, 0x5f, 0xb7, 0xad, - 0xc5, 0xf9, 0xc5, 0x95, 0xf5, 0xb2, 0x71, 0xed, 0x97, 0x0d, 0x98, 0xd0, 0x1f, 0xbe, 0x27, 0x97, - 0xe1, 0xd2, 0x46, 0x7d, 0xd1, 0xb2, 0xd7, 0x57, 0xef, 0x2f, 0xae, 0xd8, 0x1b, 0xf5, 0xea, 0xdd, - 0x45, 0x7b, 0x63, 0xa5, 0xbe, 0xb6, 0x38, 0xbf, 0x74, 0x67, 0x69, 0x71, 0xa1, 0x7c, 0x86, 0x54, - 0xe0, 0x19, 0x05, 0xc3, 0x5a, 0x9c, 0x5f, 0xdd, 0x5c, 0xb4, 0xec, 0xb5, 0x6a, 0xbd, 0xbe, 0xb5, - 0x6a, 0x2d, 0x94, 0x0d, 0x72, 0x11, 0xce, 0x65, 0x20, 0x3c, 0xb8, 0x53, 0x2d, 0xe7, 0x7a, 0xca, - 0x56, 0x16, 0xb7, 0xaa, 0xcb, 0x76, 0x6d, 0x75, 0xbd, 0x9c, 0xbf, 0xf6, 0x1e, 0x33, 0xbc, 0x92, - 0x27, 0x23, 0x49, 0x11, 0x0a, 0x2b, 0xab, 0x2b, 0x8b, 0xe5, 0x33, 0x64, 0x0c, 0x46, 0xd6, 0x16, - 0x57, 0x16, 0x96, 0x56, 0xee, 0xf2, 0x6e, 0xad, 0xae, 0xad, 0x59, 0xab, 0x9b, 0x8b, 0x0b, 0xe5, - 0x1c, 0xeb, 0xbb, 0x85, 0xc5, 0x15, 0xd6, 0xb2, 0xfc, 0x35, 0x93, 0xbf, 0x56, 0xa4, 0xbd, 0x44, - 0xc1, 0x7a, 0x6b, 0xf1, 0x4b, 0xeb, 0x8b, 0x2b, 0xf5, 0xa5, 0xd5, 0x95, 0xf2, 0x99, 0x6b, 0x97, - 0x52, 0x38, 0x72, 0x24, 0xea, 0xf5, 0x7b, 0xe5, 0x33, 0xd7, 0xbe, 0x0a, 0x25, 0xd5, 0xee, 0x20, - 0xe7, 0x61, 0x5a, 0xfd, 0xbd, 0x46, 0xdb, 0xae, 0xd7, 0xde, 0x2d, 0x9f, 0x49, 0x17, 0x58, 0xdd, - 0x76, 0x9b, 0x15, 0xe0, 0xc7, 0xab, 0x05, 0xeb, 0x34, 0x68, 0x79, 0x6d, 0x66, 0x52, 0x94, 0x73, - 0xb5, 0xf2, 0xf7, 0xff, 0xe2, 0xb9, 0x33, 0xdf, 0xff, 0xe1, 0x73, 0xc6, 0x9f, 0xfd, 0xf0, 0x39, - 0xe3, 0xbf, 0xfd, 0xf0, 0x39, 0x63, 0x7b, 0x18, 0x05, 0xfd, 0xd6, 0xff, 0x0e, 0x00, 0x00, 0xff, - 0xff, 0xd8, 0xa2, 0x1a, 0x21, 0x4d, 0xc8, 0x00, 0x00, + // 12869 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x6d, 0x6c, 0x1c, 0x49, + 0x76, 0x98, 0x7a, 0x66, 0x48, 0x0e, 0x1f, 0x87, 0xe4, 0xb0, 0x48, 0x49, 0x94, 0x56, 0xbb, 0xa3, + 0xeb, 0xdd, 0xd5, 0x6a, 0xb5, 0xbb, 0xd2, 0x89, 0xba, 0xd5, 0x79, 0x6f, 0x3f, 0x67, 0x48, 0x4a, + 0xe2, 0x8a, 0x22, 0xb9, 0x3d, 0xfc, 0xb8, 0xf3, 0xdd, 0xb9, 0xdd, 0x9c, 0x2e, 0x92, 0xbd, 0x9c, + 0x99, 0x9e, 0xeb, 0xee, 0x91, 0x44, 0x3b, 0x86, 0x6d, 0x04, 0x97, 0x83, 0x61, 0xf8, 0x3e, 0x82, + 0x73, 0x6c, 0x07, 0x0e, 0xec, 0x18, 0x71, 0x12, 0x27, 0xb0, 0x11, 0xd8, 0x09, 0x92, 0x20, 0x81, + 0x03, 0x03, 0x89, 0x71, 0x08, 0x12, 0xc4, 0xff, 0x02, 0x5f, 0x02, 0x26, 0xbe, 0xf3, 0x2f, 0x02, + 0x01, 0x02, 0xf8, 0x97, 0x2f, 0x31, 0x10, 0xd4, 0xab, 0xaa, 0xee, 0xaa, 0x9e, 0x1e, 0x72, 0xb8, + 0xab, 0x45, 0xac, 0xfd, 0x45, 0xce, 0xab, 0xf7, 0x5e, 0x55, 0x57, 0xbd, 0x7a, 0xf5, 0xea, 0xd5, + 0xab, 0x57, 0x30, 0x16, 0x1d, 0x74, 0x68, 0x78, 0xbd, 0x13, 0xf8, 0x91, 0x4f, 0x86, 0xf0, 0xc7, + 0xc5, 0x99, 0x5d, 0x7f, 0xd7, 0x47, 0xc8, 0x0d, 0xf6, 0x1f, 0x2f, 0xbc, 0x58, 0xd9, 0xf5, 0xfd, + 0xdd, 0x26, 0xbd, 0x81, 0xbf, 0xb6, 0xbb, 0x3b, 0x37, 0x22, 0xaf, 0x45, 0xc3, 0xc8, 0x69, 0x75, + 0x04, 0xc2, 0xfc, 0xae, 0x17, 0xed, 0x75, 0xb7, 0xaf, 0x37, 0xfc, 0xd6, 0x8d, 0xdd, 0xc0, 0x79, + 0xe8, 0x45, 0x4e, 0xe4, 0xf9, 0x6d, 0xa7, 0x79, 0x23, 0xa2, 0x4d, 0xda, 0xf1, 0x83, 0xe8, 0x86, + 0xd3, 0xf1, 0x6e, 0x60, 0x1d, 0x37, 0x1e, 0x05, 0x4e, 0xa7, 0x43, 0x83, 0xe4, 0x1f, 0xce, 0xc4, + 0xfc, 0xfb, 0x79, 0x18, 0xbd, 0x4f, 0x69, 0xa7, 0xda, 0xf4, 0x1e, 0x52, 0xf2, 0x3c, 0x14, 0x56, + 0x9c, 0x16, 0x9d, 0x35, 0x2e, 0x1b, 0x57, 0x47, 0x6b, 0x93, 0x47, 0x87, 0x95, 0xb1, 0x90, 0x06, + 0x0f, 0x69, 0x60, 0xb7, 0x9d, 0x16, 0xb5, 0xb0, 0x90, 0xbc, 0x02, 0xa3, 0xec, 0x6f, 0xd8, 0x71, + 0x1a, 0x74, 0x36, 0x87, 0x98, 0xe3, 0x47, 0x87, 0x95, 0xd1, 0xb6, 0x04, 0x5a, 0x49, 0x39, 0xb9, + 0x02, 0x23, 0xcb, 0xd4, 0x09, 0xe9, 0xd2, 0xc2, 0x6c, 0xfe, 0xb2, 0x71, 0x35, 0x5f, 0x2b, 0x1d, + 0x1d, 0x56, 0x8a, 0x4d, 0x06, 0xb2, 0x3d, 0xd7, 0x92, 0x85, 0x64, 0x09, 0x46, 0x16, 0x1f, 0x77, + 0xbc, 0x80, 0x86, 0xb3, 0x85, 0xcb, 0xc6, 0xd5, 0xb1, 0xb9, 0x8b, 0xd7, 0xf9, 0xf7, 0x5f, 0x97, + 0xdf, 0x7f, 0x7d, 0x5d, 0x7e, 0x7f, 0x6d, 0xfa, 0x7b, 0x87, 0x95, 0x33, 0x47, 0x87, 0x95, 0x11, + 0xca, 0x49, 0xbe, 0xfd, 0x3f, 0x2a, 0x86, 0x25, 0xe9, 0xc9, 0x5b, 0x50, 0x58, 0x3f, 0xe8, 0xd0, + 0xd9, 0xd1, 0xcb, 0xc6, 0xd5, 0x89, 0xb9, 0xe7, 0xae, 0xf3, 0x1e, 0x8f, 0x3f, 0x32, 0xf9, 0x8f, + 0x61, 0xd5, 0x8a, 0x47, 0x87, 0x95, 0x02, 0x43, 0xb1, 0x90, 0x8a, 0xbc, 0x06, 0xc3, 0xf7, 0xfc, + 0x30, 0x5a, 0x5a, 0x98, 0x05, 0xfc, 0xb4, 0xb3, 0x47, 0x87, 0x95, 0xa9, 0x3d, 0x3f, 0x8c, 0x6c, + 0xcf, 0x7d, 0xd5, 0x6f, 0x79, 0x11, 0x6d, 0x75, 0xa2, 0x03, 0x4b, 0x20, 0x99, 0xdb, 0x30, 0xae, + 0xf1, 0x23, 0x63, 0x30, 0xb2, 0xb1, 0x72, 0x7f, 0x65, 0x75, 0x6b, 0xa5, 0x7c, 0x86, 0x14, 0xa1, + 0xb0, 0xb2, 0xba, 0xb0, 0x58, 0x36, 0xc8, 0x08, 0xe4, 0xab, 0x6b, 0x6b, 0xe5, 0x1c, 0x29, 0x41, + 0x71, 0xa1, 0xba, 0x5e, 0xad, 0x55, 0xeb, 0x8b, 0xe5, 0x3c, 0x99, 0x86, 0xc9, 0xad, 0xa5, 0x95, + 0x85, 0xd5, 0xad, 0xba, 0xbd, 0xb0, 0x58, 0xbf, 0xbf, 0xbe, 0xba, 0x56, 0x2e, 0x90, 0x09, 0x80, + 0xfb, 0x1b, 0xb5, 0x45, 0x6b, 0x65, 0x71, 0x7d, 0xb1, 0x5e, 0x1e, 0x32, 0xbf, 0x91, 0x87, 0xe2, + 0x03, 0x1a, 0x39, 0xae, 0x13, 0x39, 0xe4, 0x92, 0x36, 0x44, 0xd8, 0x7a, 0x65, 0x6c, 0x9e, 0xef, + 0x1d, 0x9b, 0xa1, 0xa3, 0xc3, 0x8a, 0xf1, 0x9a, 0x3a, 0x26, 0x6f, 0xc2, 0xd8, 0x02, 0x0d, 0x1b, + 0x81, 0xd7, 0x61, 0xf2, 0x82, 0xe3, 0x32, 0x5a, 0xbb, 0x70, 0x74, 0x58, 0x39, 0xeb, 0x26, 0x60, + 0xe5, 0x5b, 0x55, 0x6c, 0xb2, 0x04, 0xc3, 0xcb, 0xce, 0x36, 0x6d, 0x86, 0xb3, 0x43, 0x97, 0xf3, + 0x57, 0xc7, 0xe6, 0x9e, 0x11, 0xfd, 0x2b, 0x1b, 0x78, 0x9d, 0x97, 0x2e, 0xb6, 0xa3, 0xe0, 0xa0, + 0x36, 0x73, 0x74, 0x58, 0x29, 0x37, 0x11, 0xa0, 0xf6, 0x1d, 0x47, 0x21, 0xf5, 0x64, 0xcc, 0x87, + 0x4f, 0x1c, 0xf3, 0x67, 0xbf, 0x77, 0x58, 0x31, 0xd8, 0x58, 0x88, 0x31, 0x4f, 0xf8, 0xe9, 0xa3, + 0x7f, 0x19, 0x72, 0x4b, 0x0b, 0xb3, 0x23, 0x28, 0x6b, 0xe5, 0xa3, 0xc3, 0x4a, 0x49, 0x1b, 0xb6, + 0xdc, 0xd2, 0xc2, 0xc5, 0x37, 0x60, 0x4c, 0x69, 0x23, 0x29, 0x43, 0x7e, 0x9f, 0x1e, 0xf0, 0xfe, + 0xb4, 0xd8, 0xbf, 0x64, 0x06, 0x86, 0x1e, 0x3a, 0xcd, 0xae, 0xe8, 0x40, 0x8b, 0xff, 0xf8, 0x42, + 0xee, 0xc7, 0x0c, 0xf3, 0x6f, 0x17, 0xa0, 0x68, 0xf9, 0x7c, 0x9e, 0x91, 0x97, 0x61, 0xa8, 0x1e, + 0x39, 0x91, 0x1c, 0x8a, 0xe9, 0xa3, 0xc3, 0xca, 0x64, 0xc8, 0x00, 0x4a, 0x7d, 0x1c, 0x83, 0xa1, + 0xae, 0xed, 0x39, 0xa1, 0x1c, 0x12, 0x44, 0xed, 0x30, 0x80, 0x8a, 0x8a, 0x18, 0xe4, 0x0a, 0x14, + 0x1e, 0xf8, 0x2e, 0x15, 0xa3, 0x42, 0x8e, 0x0e, 0x2b, 0x13, 0x2d, 0xdf, 0x55, 0x11, 0xb1, 0x9c, + 0xbc, 0x0a, 0xa3, 0xf3, 0xdd, 0x20, 0xa0, 0x6d, 0x26, 0xaa, 0x05, 0x44, 0x9e, 0x38, 0x3a, 0xac, + 0x40, 0x83, 0x03, 0xd9, 0xe4, 0x4a, 0x10, 0x58, 0x57, 0xd7, 0x23, 0x27, 0x88, 0xa8, 0x3b, 0x3b, + 0x34, 0x50, 0x57, 0xb3, 0xe9, 0x35, 0x15, 0x72, 0x92, 0x74, 0x57, 0x0b, 0x4e, 0xe4, 0x1e, 0x8c, + 0xdd, 0x0d, 0x9c, 0x06, 0x5d, 0xa3, 0x81, 0xe7, 0xbb, 0x38, 0x86, 0xf9, 0xda, 0x95, 0xa3, 0xc3, + 0xca, 0xb9, 0x5d, 0x06, 0xb6, 0x3b, 0x08, 0x4f, 0xa8, 0x7f, 0x74, 0x58, 0x29, 0x2e, 0x74, 0x03, + 0xec, 0x3d, 0x4b, 0x25, 0x25, 0x3f, 0xc9, 0x86, 0x24, 0x8c, 0xb0, 0x6b, 0xa9, 0x8b, 0xa3, 0x77, + 0x7c, 0x13, 0x4d, 0xd1, 0xc4, 0x73, 0x4d, 0x27, 0x8c, 0xec, 0x80, 0xd3, 0xa5, 0xda, 0xa9, 0xb2, + 0x24, 0xab, 0x50, 0xac, 0x37, 0xf6, 0xa8, 0xdb, 0x6d, 0xd2, 0xd9, 0x22, 0xb2, 0x3f, 0x2f, 0x04, + 0x57, 0x8e, 0xa7, 0x2c, 0xae, 0x5d, 0x14, 0xbc, 0x49, 0x28, 0x20, 0x4a, 0xdf, 0xc7, 0x4c, 0xbe, + 0x50, 0xfc, 0xd5, 0xdf, 0xac, 0x9c, 0xf9, 0xb9, 0xff, 0x7e, 0xf9, 0x8c, 0xf9, 0x2f, 0x73, 0x50, + 0x4e, 0x33, 0x21, 0x3b, 0x30, 0xbe, 0xd1, 0x71, 0x9d, 0x88, 0xce, 0x37, 0x3d, 0xda, 0x8e, 0x42, + 0x14, 0x92, 0xe3, 0xbf, 0xe9, 0x05, 0x51, 0xef, 0x6c, 0x17, 0x09, 0xed, 0x06, 0xa7, 0x4c, 0x7d, + 0x95, 0xce, 0x36, 0xa9, 0xa7, 0x8e, 0x7a, 0x3a, 0x44, 0x09, 0x3b, 0x5d, 0x3d, 0x5c, 0xc3, 0xf7, + 0xa9, 0x47, 0xb0, 0x15, 0x02, 0xd4, 0x76, 0xb7, 0x0f, 0x50, 0x32, 0x07, 0x17, 0x20, 0x46, 0x92, + 0x21, 0x40, 0x0c, 0x6c, 0xfe, 0xb9, 0x01, 0x13, 0x16, 0x0d, 0xfd, 0x6e, 0xd0, 0xa0, 0xf7, 0xa8, + 0xe3, 0xd2, 0x80, 0x89, 0xff, 0x7d, 0xaf, 0xed, 0x8a, 0x39, 0x85, 0xe2, 0xbf, 0xef, 0xb5, 0xd5, + 0x29, 0x8c, 0xe5, 0xe4, 0xb3, 0x30, 0x52, 0xef, 0x6e, 0x23, 0x2a, 0x9f, 0x53, 0xe7, 0x70, 0xc4, + 0xba, 0xdb, 0x76, 0x0a, 0x5d, 0xa2, 0x91, 0x1b, 0x30, 0xb2, 0x49, 0x83, 0x30, 0xd1, 0x78, 0xa8, + 0xd9, 0x1f, 0x72, 0x90, 0x4a, 0x20, 0xb0, 0xc8, 0xdd, 0x44, 0xeb, 0x8a, 0x35, 0x69, 0x32, 0xa5, + 0xeb, 0x12, 0x51, 0x69, 0x09, 0x88, 0x2a, 0x2a, 0x12, 0xcb, 0xfc, 0x4e, 0x0e, 0xca, 0x0b, 0x4e, + 0xe4, 0x6c, 0x3b, 0xa1, 0xe8, 0xcf, 0xcd, 0x5b, 0x4c, 0x8f, 0x2b, 0x1f, 0x8a, 0x7a, 0x9c, 0xb5, + 0xfc, 0x23, 0x7f, 0xde, 0x8b, 0xe9, 0xcf, 0x1b, 0x63, 0x0b, 0xa4, 0xf8, 0xbc, 0xe4, 0xa3, 0xde, + 0x3e, 0xf9, 0xa3, 0xca, 0xe2, 0xa3, 0x8a, 0xf2, 0xa3, 0x92, 0x4f, 0x21, 0x6f, 0x43, 0xa1, 0xde, + 0xa1, 0x0d, 0xa1, 0x44, 0xa4, 0xee, 0xd7, 0x3f, 0x8e, 0x21, 0x6c, 0xde, 0xaa, 0x95, 0x04, 0x9b, + 0x42, 0xd8, 0xa1, 0x0d, 0x0b, 0xc9, 0x94, 0x49, 0xf3, 0xdd, 0x61, 0x98, 0xc9, 0x22, 0x23, 0x6f, + 0xeb, 0x8b, 0x13, 0xef, 0x9e, 0x67, 0xfa, 0x2e, 0x4e, 0xb3, 0x86, 0xbe, 0x3c, 0x5d, 0x83, 0xe2, + 0x1a, 0x13, 0xc8, 0x86, 0xdf, 0x14, 0x3d, 0xc7, 0xb4, 0x62, 0xb1, 0x23, 0x61, 0x86, 0x15, 0x97, + 0x93, 0x67, 0x20, 0xbf, 0x61, 0x2d, 0x89, 0xee, 0x1a, 0x3d, 0x3a, 0xac, 0xe4, 0xbb, 0x81, 0x37, + 0x6b, 0x58, 0x0c, 0x4a, 0x6e, 0xc0, 0xf0, 0x7c, 0x75, 0x9e, 0x06, 0x11, 0x76, 0x53, 0xa9, 0x76, + 0x9e, 0x49, 0x4b, 0xc3, 0xb1, 0x1b, 0x34, 0x88, 0xb4, 0xea, 0x05, 0x1a, 0x79, 0x05, 0xf2, 0xd5, + 0xad, 0xba, 0xe8, 0x19, 0x10, 0x3d, 0x53, 0xdd, 0xaa, 0xd7, 0xc6, 0x45, 0x47, 0xe4, 0x9d, 0x47, + 0x21, 0xe3, 0x5e, 0xdd, 0xaa, 0xab, 0xa3, 0x35, 0x7c, 0xcc, 0x68, 0x5d, 0x85, 0x22, 0xb3, 0x33, + 0xd8, 0x02, 0x8f, 0x4a, 0x71, 0x94, 0x9b, 0x4f, 0x7b, 0x02, 0x66, 0xc5, 0xa5, 0xe4, 0xf9, 0xd8, + 0x6c, 0x29, 0x26, 0xfc, 0x84, 0xd9, 0x22, 0x8d, 0x15, 0xf2, 0x18, 0xc6, 0x17, 0x0e, 0xda, 0x4e, + 0xcb, 0x6b, 0x88, 0x25, 0x7c, 0x14, 0x97, 0xf0, 0xeb, 0xc7, 0x0c, 0xe3, 0x75, 0x8d, 0x80, 0xaf, + 0xea, 0x52, 0xf9, 0xce, 0xba, 0xbc, 0xcc, 0x4e, 0xaf, 0xf0, 0xb3, 0x86, 0xa5, 0x57, 0xc4, 0xe6, + 0x92, 0x54, 0x91, 0x68, 0x57, 0x25, 0x62, 0x27, 0xc1, 0xc9, 0x5c, 0x0a, 0x04, 0x44, 0x9d, 0x4b, + 0xf1, 0xa2, 0xfb, 0x36, 0xe4, 0xef, 0xce, 0xaf, 0xcd, 0x8e, 0x21, 0x0f, 0x22, 0x78, 0xdc, 0x9d, + 0x5f, 0x9b, 0x6f, 0xfa, 0x5d, 0xb7, 0xfe, 0xc1, 0x72, 0xed, 0xbc, 0x60, 0x33, 0xbe, 0xdb, 0xe8, + 0x68, 0x2d, 0x62, 0x74, 0x64, 0x11, 0x8a, 0xf2, 0x2b, 0x67, 0x4b, 0xc8, 0x63, 0x2a, 0xf5, 0xf1, + 0x9b, 0xb7, 0xf8, 0x5c, 0x73, 0xc5, 0x6f, 0xb5, 0x15, 0x12, 0xe7, 0xe2, 0x16, 0x90, 0xde, 0x7e, + 0xc9, 0xb0, 0x24, 0x5e, 0x51, 0x2d, 0x89, 0xb1, 0xb9, 0xb3, 0xa2, 0xae, 0x79, 0xbf, 0xd5, 0x72, + 0xda, 0x2e, 0xd2, 0x6e, 0xce, 0xa9, 0x06, 0x46, 0x15, 0x26, 0x92, 0x86, 0x2c, 0x7b, 0x61, 0x44, + 0x6e, 0xc0, 0xa8, 0x84, 0xb0, 0x45, 0x24, 0x9f, 0xd9, 0x64, 0x2b, 0xc1, 0x31, 0xff, 0x38, 0x07, + 0x90, 0x94, 0x3c, 0xa5, 0x7a, 0xe6, 0xf3, 0x9a, 0x9e, 0x39, 0x9b, 0x16, 0xd0, 0xbe, 0x1a, 0x86, + 0xbc, 0x0b, 0xc3, 0xcc, 0xe4, 0xea, 0x4a, 0x93, 0xf2, 0x7c, 0x9a, 0x14, 0x0b, 0x37, 0x6f, 0xd5, + 0x26, 0x04, 0xf1, 0x70, 0x88, 0x10, 0x4b, 0x90, 0x29, 0x2a, 0xea, 0xf7, 0x87, 0x92, 0xc1, 0x10, + 0xca, 0xe9, 0xaa, 0xa2, 0x5d, 0x8c, 0x64, 0x3e, 0x4a, 0xed, 0xa2, 0xe8, 0x96, 0x0b, 0x5c, 0xb7, + 0xf0, 0x4e, 0x1d, 0x11, 0xba, 0x25, 0xad, 0x59, 0x78, 0x07, 0x9e, 0xa8, 0x59, 0x3a, 0xe9, 0x69, + 0x5b, 0x40, 0x31, 0xb8, 0x9a, 0xd9, 0x2b, 0x59, 0x13, 0xf6, 0xf2, 0x49, 0x13, 0x36, 0x3d, 0x5d, + 0x6f, 0xf5, 0xd3, 0x65, 0x67, 0xe5, 0xec, 0x72, 0x1e, 0xa9, 0xe4, 0xa8, 0xd3, 0xde, 0xe4, 0x53, + 0x73, 0xb8, 0xef, 0xd4, 0x3c, 0x9b, 0x39, 0x35, 0xf9, 0xc4, 0x7c, 0x13, 0x86, 0xaa, 0x3f, 0xd5, + 0x0d, 0xa8, 0xb0, 0xfd, 0x4a, 0xb2, 0x4e, 0x06, 0x8b, 0xe7, 0xf4, 0xa4, 0xc3, 0x7e, 0xaa, 0x36, + 0x33, 0x96, 0xb3, 0x9a, 0xd7, 0x97, 0xeb, 0xc2, 0xae, 0x23, 0xa9, 0x6e, 0x59, 0x5f, 0x56, 0x9a, + 0x1d, 0x69, 0x5f, 0xcd, 0xa8, 0xc8, 0x0d, 0xc8, 0x55, 0x17, 0x70, 0xb3, 0x38, 0x36, 0x37, 0x2a, + 0xab, 0x5d, 0xa8, 0xcd, 0x08, 0x92, 0x92, 0xa3, 0xed, 0x1f, 0xaa, 0x0b, 0xa4, 0x06, 0x43, 0x0f, + 0x0e, 0xea, 0x1f, 0x2c, 0x0b, 0x45, 0x36, 0x2d, 0xe5, 0x9a, 0xc1, 0x56, 0x71, 0x15, 0x0a, 0x93, + 0x16, 0xb7, 0x0e, 0xc2, 0xaf, 0x35, 0xd5, 0x16, 0x23, 0xda, 0x27, 0xa7, 0x40, 0xfe, 0x99, 0xa1, + 0xd8, 0x1a, 0x42, 0xd6, 0xd9, 0x9e, 0x56, 0x48, 0x9c, 0x91, 0x58, 0x3e, 0x3d, 0x12, 0x17, 0xcb, + 0xdb, 0xcb, 0x7c, 0xf4, 0x73, 0x3d, 0xa3, 0x3f, 0xa6, 0xac, 0x64, 0x7c, 0xcc, 0xe3, 0xbe, 0xc8, + 0x7f, 0xe4, 0xbe, 0x30, 0xff, 0x30, 0x87, 0xf5, 0x91, 0x57, 0x61, 0xd8, 0xa2, 0xbb, 0xc9, 0xa2, + 0x8f, 0x9b, 0xc7, 0x00, 0x21, 0x6a, 0x23, 0x39, 0x0e, 0xae, 0x28, 0xd4, 0x0d, 0xf7, 0xbc, 0x9d, + 0x48, 0xb4, 0x34, 0x5e, 0x51, 0x04, 0x58, 0x59, 0x51, 0x04, 0x44, 0x5b, 0x51, 0x04, 0x8c, 0xc9, + 0xba, 0xb5, 0x50, 0x17, 0x1f, 0x20, 0xbf, 0xd6, 0x5a, 0x50, 0x84, 0x26, 0x70, 0x35, 0xa1, 0xb1, + 0x16, 0xea, 0xe4, 0x36, 0x8c, 0x56, 0x1b, 0x0d, 0xbf, 0xab, 0xec, 0xbe, 0x66, 0x8f, 0x0e, 0x2b, + 0x33, 0x0e, 0x07, 0xea, 0xbe, 0x82, 0x04, 0x95, 0xd4, 0x61, 0x6c, 0x91, 0x6d, 0x59, 0xbc, 0x79, + 0xa7, 0xb1, 0x47, 0xc5, 0x04, 0x93, 0x12, 0xab, 0x94, 0xc4, 0x26, 0xf4, 0x59, 0x8a, 0xc0, 0x06, + 0x03, 0xaa, 0x5b, 0x72, 0x05, 0xd7, 0xac, 0x25, 0x5d, 0xc1, 0x1a, 0x36, 0xdf, 0xec, 0x86, 0x11, + 0x0d, 0x96, 0x16, 0x44, 0x3f, 0x62, 0xc3, 0x1a, 0x1c, 0x98, 0x6a, 0x58, 0x8c, 0x6a, 0xfe, 0x37, + 0x03, 0xbb, 0x81, 0xbc, 0x01, 0xb0, 0xd4, 0x66, 0x66, 0x7b, 0x83, 0xc6, 0x0c, 0xd0, 0x35, 0xe0, + 0x09, 0xa8, 0xce, 0x41, 0x41, 0xd6, 0xab, 0xce, 0x0d, 0x5c, 0x35, 0xab, 0x52, 0x6e, 0x02, 0x84, + 0x97, 0x48, 0x54, 0x19, 0x08, 0x68, 0xaa, 0xca, 0x04, 0x99, 0x5c, 0x81, 0x91, 0xa5, 0xea, 0x83, + 0x6a, 0x37, 0xda, 0xc3, 0x41, 0x28, 0x72, 0x75, 0xec, 0x39, 0x2d, 0xdb, 0xe9, 0x46, 0x7b, 0x96, + 0x2c, 0x34, 0xff, 0x63, 0x4e, 0xeb, 0x77, 0x62, 0x01, 0xb1, 0x68, 0xa7, 0xe9, 0x35, 0xd0, 0xa8, + 0xb8, 0x1b, 0xf8, 0xdd, 0x4e, 0xfc, 0xb5, 0xe6, 0xd1, 0x61, 0xe5, 0xb9, 0x20, 0x29, 0xb5, 0x77, + 0x59, 0xb1, 0xde, 0x86, 0x0c, 0x6a, 0xf2, 0x1e, 0x94, 0x36, 0x42, 0x1a, 0x88, 0x9f, 0x6c, 0x23, + 0x96, 0xbf, 0x3a, 0x5a, 0xbb, 0x84, 0x1b, 0xad, 0x90, 0x06, 0x31, 0x1b, 0x55, 0x96, 0x34, 0x0a, + 0xe2, 0xc2, 0xec, 0x7a, 0xe0, 0xb4, 0x43, 0x2f, 0x5a, 0x6c, 0x37, 0x82, 0x03, 0x9c, 0x3e, 0x8b, + 0x6d, 0x67, 0xbb, 0x49, 0x5d, 0xec, 0x96, 0x62, 0xed, 0xea, 0xd1, 0x61, 0xe5, 0x85, 0x88, 0xe3, + 0xd8, 0x34, 0x46, 0xb2, 0x29, 0xc7, 0x52, 0x38, 0xf7, 0xe5, 0x44, 0xde, 0x85, 0xd2, 0x62, 0xdb, + 0xed, 0xf8, 0x5e, 0x3b, 0x42, 0x37, 0x59, 0x21, 0xb6, 0xb0, 0xcf, 0x53, 0x01, 0xb7, 0x99, 0x3c, + 0xaa, 0xcd, 0x54, 0x09, 0xcc, 0x9f, 0x33, 0x60, 0x4c, 0x51, 0xeb, 0x6c, 0xdc, 0xd7, 0x02, 0xff, + 0x43, 0xda, 0x88, 0x74, 0x91, 0xeb, 0x70, 0x60, 0x6a, 0xdc, 0x63, 0xd4, 0x94, 0xa8, 0xe5, 0x4e, + 0x21, 0x6a, 0xe6, 0x0d, 0xb1, 0x5a, 0xb0, 0xed, 0xa2, 0xe2, 0x0d, 0xc3, 0xed, 0x22, 0x33, 0x87, + 0xd5, 0xed, 0x22, 0x2b, 0x37, 0x7f, 0xc7, 0x60, 0x5a, 0x9e, 0xdc, 0x00, 0xb8, 0x4f, 0x0f, 0x22, + 0x67, 0xfb, 0x8e, 0xd7, 0xd4, 0xbc, 0x9c, 0xfb, 0x08, 0xb5, 0x77, 0xbc, 0x26, 0xb5, 0x14, 0x14, + 0x72, 0x0b, 0x8a, 0xf7, 0x83, 0xed, 0xd7, 0x11, 0x3d, 0x17, 0xaf, 0xd6, 0xd3, 0xfb, 0xc1, 0xf6, + 0xeb, 0x88, 0xac, 0x6a, 0x14, 0x89, 0x48, 0x4c, 0x18, 0x5e, 0xf0, 0x5b, 0x8e, 0x27, 0x2d, 0x24, + 0x60, 0x66, 0x86, 0x8b, 0x10, 0x4b, 0x94, 0x30, 0xfb, 0xa0, 0xbe, 0xb6, 0x22, 0x3a, 0x1f, 0xed, + 0x83, 0xb0, 0xd3, 0xb6, 0x18, 0xcc, 0xfc, 0x5d, 0x03, 0xc6, 0x94, 0xc5, 0x8b, 0x7c, 0x4e, 0x78, + 0x84, 0x0c, 0xf4, 0x67, 0x9e, 0xeb, 0x5d, 0xde, 0x58, 0x29, 0xb7, 0xec, 0x5a, 0xbe, 0x4b, 0x85, + 0x7f, 0x28, 0xd1, 0xf9, 0xb9, 0x41, 0x74, 0xfe, 0x1b, 0x00, 0xdc, 0xec, 0xc7, 0xee, 0x54, 0x26, + 0xa1, 0xe2, 0xff, 0x55, 0x07, 0x23, 0x41, 0x36, 0x2d, 0x28, 0xa9, 0xfa, 0x9e, 0xd4, 0x60, 0x5c, + 0xec, 0x72, 0x85, 0x9d, 0xc8, 0xfb, 0x19, 0x67, 0x82, 0xe0, 0xd6, 0xbb, 0xeb, 0xd6, 0x49, 0xcc, + 0x9f, 0xcf, 0x41, 0x51, 0x40, 0xe6, 0x9e, 0x52, 0x13, 0xf6, 0x75, 0xcd, 0x84, 0x95, 0x2b, 0xa3, + 0xb2, 0xb7, 0x9a, 0x3b, 0x61, 0x8b, 0xfc, 0x06, 0x94, 0x64, 0x17, 0xe0, 0x4e, 0xe0, 0x65, 0x18, + 0x91, 0x4e, 0x1e, 0xbe, 0x0f, 0x98, 0xd4, 0x78, 0x6e, 0xce, 0x59, 0xb2, 0xdc, 0xfc, 0xce, 0x90, + 0xa4, 0xe5, 0x35, 0xb1, 0x2e, 0xac, 0xba, 0x6e, 0xa0, 0x76, 0xa1, 0xe3, 0xba, 0x81, 0x85, 0x50, + 0x36, 0xf8, 0x6b, 0xdd, 0xed, 0xa6, 0xd7, 0x40, 0x1c, 0x65, 0x26, 0x76, 0x10, 0x6a, 0x33, 0x54, + 0x75, 0xf0, 0x13, 0x64, 0x6d, 0x87, 0x9a, 0x3f, 0x76, 0x87, 0xfa, 0x13, 0x30, 0x3a, 0xdf, 0x72, + 0x35, 0x0b, 0xd6, 0xcc, 0xe8, 0x94, 0xeb, 0x31, 0x12, 0xb7, 0x5d, 0x2f, 0x89, 0x3e, 0x9a, 0x69, + 0xb4, 0xdc, 0x5e, 0xbb, 0x35, 0x61, 0xa9, 0x6d, 0x31, 0x87, 0x3e, 0xce, 0x16, 0xf3, 0x36, 0x8c, + 0x6e, 0x84, 0x74, 0xbd, 0xdb, 0x6e, 0xd3, 0x26, 0x5a, 0xb3, 0x45, 0xae, 0xcf, 0xba, 0x21, 0xb5, + 0x23, 0x84, 0xaa, 0x0d, 0x88, 0x51, 0x55, 0xb1, 0x1a, 0x39, 0x46, 0xac, 0x3e, 0x07, 0x85, 0x6a, + 0xa7, 0x23, 0xf7, 0xde, 0xb1, 0x79, 0xd5, 0xe9, 0xa0, 0xc1, 0x33, 0xe1, 0x74, 0x3a, 0xfa, 0x4e, + 0x1a, 0xb1, 0x09, 0x05, 0x72, 0xbf, 0xbb, 0x4d, 0x83, 0x36, 0x8d, 0x68, 0x28, 0xd6, 0xce, 0x70, + 0x16, 0x90, 0xc7, 0xac, 0x3c, 0xe2, 0x48, 0x23, 0x70, 0xad, 0xbe, 0xdf, 0xdd, 0xa6, 0xb6, 0x58, + 0x84, 0xd5, 0xbe, 0xcb, 0x60, 0x78, 0xb1, 0x0e, 0x13, 0x7a, 0xff, 0x3f, 0x01, 0x9b, 0xf4, 0xfd, + 0x42, 0xb1, 0x58, 0x1e, 0x35, 0xbf, 0x91, 0x83, 0xb1, 0x6a, 0xa7, 0xf3, 0x94, 0x3b, 0xc0, 0x7e, + 0x4c, 0x9b, 0xd5, 0xe7, 0x92, 0xd1, 0x3b, 0x85, 0xef, 0xeb, 0x2f, 0x0d, 0x98, 0x4c, 0x51, 0xa8, + 0xad, 0x37, 0x06, 0x74, 0x08, 0xe5, 0x06, 0x74, 0x08, 0xe5, 0xfb, 0x3b, 0x84, 0xd4, 0x39, 0x53, + 0xf8, 0x38, 0x73, 0xe6, 0x25, 0xc8, 0x57, 0x3b, 0x1d, 0xd1, 0x2b, 0xa5, 0xa4, 0x57, 0x36, 0x6f, + 0xf1, 0xc5, 0xcd, 0xe9, 0x74, 0x2c, 0x86, 0x61, 0xbe, 0x06, 0xa3, 0x08, 0x46, 0x8d, 0x76, 0x59, + 0x4c, 0x05, 0xae, 0xce, 0x34, 0x32, 0x2e, 0xf6, 0xe6, 0xff, 0x31, 0x60, 0x08, 0x7f, 0x3f, 0xa5, + 0xe2, 0x32, 0xa7, 0x89, 0x4b, 0x59, 0x11, 0x97, 0x41, 0x04, 0xe5, 0xf7, 0xf3, 0xd8, 0x5b, 0x42, + 0x44, 0x84, 0x4b, 0xc1, 0xc8, 0x70, 0x29, 0x7c, 0x0c, 0x05, 0xbe, 0x9f, 0x76, 0x2e, 0xe4, 0x71, + 0x30, 0x9e, 0x4f, 0x37, 0xf5, 0x89, 0xf8, 0x15, 0xee, 0x01, 0x59, 0x6a, 0x87, 0xb4, 0xd1, 0x0d, + 0x68, 0x7d, 0xdf, 0xeb, 0x6c, 0xd2, 0xc0, 0xdb, 0x39, 0x10, 0xa6, 0x3b, 0xea, 0x58, 0x4f, 0x94, + 0xda, 0xe1, 0xbe, 0xd7, 0x61, 0x66, 0x82, 0xb7, 0x73, 0x60, 0x65, 0xd0, 0x90, 0x77, 0x61, 0xc4, + 0xa2, 0x8f, 0x02, 0x2f, 0x92, 0x9b, 0xa8, 0x89, 0x78, 0xf7, 0x87, 0x50, 0x6e, 0xef, 0x04, 0xfc, + 0x87, 0x3a, 0xfe, 0xa2, 0xfc, 0x93, 0xdb, 0x81, 0x7f, 0x77, 0x08, 0xe7, 0xc2, 0x09, 0x07, 0xb5, + 0xc7, 0xf8, 0x87, 0xf4, 0xc1, 0xcc, 0x9f, 0x66, 0x30, 0x37, 0xa1, 0xc4, 0x36, 0xfd, 0x29, 0x47, + 0xd1, 0xa5, 0x64, 0x2c, 0xaf, 0xab, 0xc5, 0xc7, 0x9d, 0xd1, 0x6a, 0x7c, 0x88, 0x9d, 0x16, 0x12, + 0x7e, 0xf6, 0xfb, 0xac, 0xc2, 0x38, 0x43, 0x3c, 0x62, 0xd5, 0xd1, 0xe0, 0x9d, 0x75, 0x6a, 0xc1, + 0x18, 0xfe, 0x78, 0x82, 0x31, 0xf2, 0x51, 0x04, 0x23, 0x7d, 0x3a, 0x5e, 0x3c, 0xcd, 0xe9, 0xf8, + 0xc5, 0x77, 0x61, 0xaa, 0xa7, 0x87, 0x4f, 0x73, 0xc2, 0xfc, 0xc9, 0x89, 0xe5, 0xcf, 0xc4, 0xfd, + 0x42, 0xe6, 0xd0, 0x5f, 0xe0, 0x05, 0xb4, 0x11, 0xa1, 0xea, 0x15, 0xda, 0x32, 0x10, 0xb0, 0x94, + 0x97, 0x04, 0x61, 0xe4, 0x1d, 0x18, 0xe1, 0x27, 0x74, 0x7c, 0x63, 0x3b, 0x36, 0x37, 0x2e, 0x6a, + 0xe4, 0x50, 0x11, 0x26, 0xc1, 0x31, 0xd4, 0x5e, 0x15, 0x44, 0xe6, 0x5d, 0x18, 0x16, 0x27, 0x7c, + 0xc7, 0xcf, 0x8b, 0x0a, 0x0c, 0x6d, 0x26, 0x3d, 0x83, 0xa7, 0x32, 0xfc, 0x23, 0x2c, 0x0e, 0x37, + 0x7f, 0xd1, 0x80, 0x09, 0xfd, 0x2b, 0xc9, 0x75, 0x18, 0x16, 0x47, 0xd0, 0x06, 0x1e, 0x41, 0xb3, + 0xaf, 0x19, 0xe6, 0x87, 0xcf, 0xda, 0x91, 0xb3, 0xc0, 0x62, 0xaa, 0x5f, 0x70, 0x10, 0x9b, 0x74, + 0x54, 0xfd, 0x42, 0x48, 0x2d, 0x59, 0xc6, 0xb6, 0x71, 0x16, 0x0d, 0xbb, 0xcd, 0x48, 0xdd, 0xc6, + 0x05, 0x08, 0xb1, 0x44, 0x89, 0x79, 0x68, 0x00, 0xd4, 0xeb, 0xf7, 0xee, 0xd3, 0x83, 0x35, 0xc7, + 0x0b, 0x70, 0x2b, 0x8c, 0xb3, 0xf1, 0xbe, 0x18, 0xad, 0x92, 0xd8, 0x0a, 0xf3, 0x99, 0xbb, 0x4f, + 0x0f, 0xb4, 0xad, 0xb0, 0x44, 0xc5, 0x29, 0x1f, 0x78, 0x0f, 0x9d, 0x88, 0x32, 0xc2, 0x1c, 0x12, + 0xf2, 0x29, 0xcf, 0xa1, 0x29, 0x4a, 0x05, 0x99, 0x7c, 0x15, 0x26, 0x92, 0x5f, 0xb8, 0xa1, 0xcf, + 0xe3, 0x3e, 0x51, 0x4a, 0x84, 0x5e, 0x58, 0x7b, 0xee, 0xe8, 0xb0, 0x72, 0x51, 0xe1, 0x9a, 0xde, + 0xea, 0xa7, 0x98, 0x99, 0xbf, 0x65, 0x00, 0xac, 0x2f, 0xd7, 0xe5, 0x07, 0x5e, 0x81, 0x42, 0xec, + 0x47, 0x2c, 0xf1, 0xfd, 0x76, 0x6a, 0x43, 0x89, 0xe5, 0xe4, 0x79, 0xc8, 0x27, 0x5f, 0x32, 0x75, + 0x74, 0x58, 0x19, 0xd7, 0xbf, 0x80, 0x95, 0x92, 0xbb, 0x30, 0x32, 0x50, 0x9b, 0x51, 0x3a, 0x33, + 0xda, 0x2a, 0xa9, 0x71, 0x14, 0xde, 0xdf, 0x5a, 0xff, 0xf4, 0x8e, 0xc2, 0xb7, 0x72, 0x30, 0xc9, + 0xfa, 0xb5, 0xda, 0x8d, 0xf6, 0xfc, 0xc0, 0x8b, 0x0e, 0x9e, 0xda, 0x5d, 0xf1, 0x5b, 0x9a, 0x41, + 0x74, 0x51, 0xaa, 0x2d, 0xf5, 0xdb, 0x06, 0xda, 0x1c, 0xff, 0xd9, 0x08, 0x4c, 0x67, 0x50, 0x91, + 0x57, 0x45, 0xf0, 0x57, 0xe2, 0x87, 0xc2, 0xe0, 0xae, 0x1f, 0x1d, 0x56, 0x4a, 0x12, 0x7d, 0x3d, + 0x09, 0xf6, 0x9a, 0x83, 0x31, 0xb1, 0xf5, 0x59, 0x49, 0x2c, 0x6a, 0x8c, 0x1a, 0x92, 0x4e, 0x4b, + 0x54, 0x4d, 0x2a, 0x12, 0xa9, 0x42, 0x69, 0x7e, 0x8f, 0x36, 0xf6, 0xbd, 0xf6, 0xee, 0x7d, 0x7a, + 0xc0, 0xed, 0xa5, 0x52, 0xed, 0x59, 0xb6, 0xd3, 0x6a, 0x08, 0x38, 0x1b, 0x52, 0x7d, 0x13, 0xa7, + 0x91, 0x90, 0x77, 0x60, 0xac, 0xee, 0xed, 0xb6, 0x25, 0x87, 0x02, 0x72, 0xb8, 0x74, 0x74, 0x58, + 0x39, 0x17, 0x72, 0x70, 0x2f, 0x03, 0x95, 0x80, 0xbc, 0x0c, 0x43, 0x96, 0xdf, 0xa4, 0x7c, 0x19, + 0x16, 0xe1, 0x44, 0x01, 0x03, 0xa8, 0xce, 0x75, 0xc4, 0x20, 0xf7, 0x60, 0x84, 0xfd, 0xf3, 0xc0, + 0xe9, 0xcc, 0x0e, 0xa3, 0xde, 0x26, 0xb1, 0x81, 0x8f, 0xd0, 0x8e, 0xd7, 0xde, 0x55, 0x6d, 0xfc, + 0x26, 0xb5, 0x5b, 0x4e, 0x47, 0x5b, 0x17, 0x39, 0x22, 0xd9, 0x84, 0xb1, 0x44, 0x11, 0x84, 0xb3, + 0x23, 0xda, 0x51, 0x64, 0x52, 0x52, 0xfb, 0x8c, 0x60, 0x76, 0x3e, 0x6a, 0x86, 0x28, 0xdb, 0x1d, + 0x86, 0xaf, 0x7f, 0x8c, 0xc2, 0x48, 0xdb, 0x83, 0x14, 0xfb, 0xef, 0x41, 0x8c, 0x13, 0xf7, 0x20, + 0x2e, 0x80, 0xe8, 0xa4, 0x6a, 0x73, 0x57, 0x44, 0xff, 0xbd, 0xdc, 0x5f, 0xc0, 0xae, 0x27, 0xc8, + 0x38, 0x27, 0xb9, 0xb7, 0x4b, 0xf4, 0xbf, 0xd3, 0xdc, 0xd5, 0xbc, 0x5d, 0x31, 0x2a, 0xeb, 0x86, + 0x44, 0xd5, 0xc8, 0x1d, 0xb8, 0xec, 0x86, 0xa4, 0x24, 0xe9, 0x86, 0x0f, 0x1f, 0x45, 0xfd, 0xba, + 0x41, 0x61, 0x44, 0x56, 0x00, 0xaa, 0x8d, 0xc8, 0x7b, 0x48, 0x51, 0x24, 0xc6, 0xb4, 0x8e, 0x98, + 0xaf, 0xde, 0xa7, 0x07, 0x75, 0x1a, 0x25, 0xa7, 0x02, 0x0e, 0xa2, 0xa6, 0xc4, 0xc4, 0x52, 0x38, + 0x90, 0x0e, 0x9c, 0xad, 0xba, 0xae, 0xc7, 0x23, 0x42, 0xd7, 0x03, 0x26, 0xbf, 0x2e, 0xb2, 0x2e, + 0x65, 0xb3, 0x7e, 0x59, 0xb0, 0xfe, 0x8c, 0x13, 0x53, 0xd9, 0x11, 0x27, 0x4b, 0x57, 0x93, 0xcd, + 0xd8, 0x5c, 0x85, 0x09, 0xbd, 0x4b, 0xf5, 0x58, 0xc8, 0x12, 0x14, 0xad, 0x7a, 0xd5, 0xae, 0xdf, + 0xab, 0xde, 0x2c, 0x1b, 0xa4, 0x0c, 0x25, 0xf1, 0x6b, 0xce, 0x9e, 0x7b, 0xfd, 0x76, 0x39, 0xa7, + 0x41, 0x5e, 0xbf, 0x39, 0x57, 0xce, 0x9b, 0xbf, 0x6f, 0x40, 0x51, 0xb6, 0x8f, 0xdc, 0x86, 0x7c, + 0xbd, 0x7e, 0x2f, 0x75, 0x02, 0x9e, 0x2c, 0xbd, 0x7c, 0x91, 0x09, 0xc3, 0x3d, 0x75, 0x91, 0xa9, + 0xd7, 0xef, 0x31, 0xba, 0xf5, 0xe5, 0xba, 0x30, 0x5a, 0x32, 0xc4, 0x75, 0xaa, 0xcf, 0xb1, 0xe0, + 0x6d, 0xc8, 0xbf, 0xbf, 0xb5, 0x2e, 0x76, 0x43, 0x19, 0xe3, 0x8b, 0x74, 0x1f, 0x3e, 0x52, 0x97, + 0x3e, 0x46, 0x60, 0x5a, 0x30, 0xa6, 0x4c, 0x2d, 0x6e, 0x44, 0xb4, 0xfc, 0x38, 0x4a, 0x50, 0x18, + 0x11, 0x0c, 0x62, 0x89, 0x12, 0x66, 0xf3, 0x2c, 0xfb, 0x0d, 0xa7, 0x29, 0xac, 0x11, 0xb4, 0x79, + 0x9a, 0x0c, 0x60, 0x71, 0xb8, 0xf9, 0x47, 0x06, 0x94, 0xd7, 0x02, 0xff, 0xa1, 0xc7, 0x34, 0xf0, + 0xba, 0xbf, 0x4f, 0xdb, 0x9b, 0x37, 0xc9, 0x6b, 0x52, 0x09, 0x70, 0x13, 0xee, 0x3c, 0xa3, 0x42, + 0x25, 0xf0, 0xa3, 0xc3, 0x0a, 0xd4, 0x0f, 0xc2, 0x88, 0xb6, 0x58, 0xb9, 0x54, 0x04, 0x4a, 0xb0, + 0x65, 0x6e, 0xf0, 0x00, 0xae, 0x13, 0x82, 0x2d, 0x2b, 0x30, 0x84, 0xcd, 0x51, 0x62, 0x68, 0x86, + 0x22, 0x06, 0xb0, 0x38, 0x5c, 0x51, 0xd8, 0xdf, 0xc9, 0xf5, 0x7c, 0xc3, 0xdc, 0xa7, 0x2a, 0x08, + 0x4a, 0xff, 0xb8, 0x81, 0x16, 0xb1, 0x2f, 0xc1, 0x4c, 0xba, 0x4b, 0xd0, 0x2f, 0x52, 0x85, 0x49, + 0x1d, 0x2e, 0x5d, 0x24, 0xe7, 0x33, 0xeb, 0xda, 0x9c, 0xb3, 0xd2, 0xf8, 0xe6, 0x0f, 0x0c, 0x18, + 0xc5, 0x7f, 0xad, 0x6e, 0x93, 0x32, 0xcb, 0xa6, 0xba, 0x55, 0x17, 0xc7, 0x90, 0xea, 0xa9, 0x9e, + 0xf3, 0x28, 0xb4, 0xc5, 0x99, 0xa5, 0xa6, 0x47, 0x62, 0x64, 0x41, 0xca, 0x0f, 0x5d, 0xe5, 0xa1, + 0x56, 0x4c, 0xca, 0x4f, 0x67, 0xc3, 0x14, 0xa9, 0x40, 0x66, 0xe3, 0xc7, 0x7e, 0xf9, 0x4d, 0xe9, + 0x1a, 0xc6, 0xf1, 0x43, 0x3a, 0x5f, 0x3b, 0x3a, 0x91, 0x68, 0xe4, 0x35, 0x18, 0x66, 0x55, 0x5b, + 0xf2, 0x60, 0x04, 0x77, 0x15, 0xd8, 0xc6, 0x40, 0x3b, 0x03, 0xe6, 0x48, 0xe6, 0xbf, 0xca, 0xa5, + 0x3b, 0x50, 0x58, 0x01, 0xa7, 0x9c, 0x1b, 0x6f, 0xc2, 0x50, 0xb5, 0xd9, 0xf4, 0x1f, 0x09, 0x2d, + 0x21, 0xdd, 0x34, 0x71, 0xff, 0xf1, 0x15, 0xd6, 0x61, 0x28, 0x5a, 0xf0, 0x01, 0x03, 0x90, 0x79, + 0x18, 0xad, 0x6e, 0xd5, 0x97, 0x96, 0x16, 0xd6, 0xd7, 0x97, 0x45, 0x8c, 0xfb, 0x8b, 0xb2, 0x7f, + 0x3c, 0xcf, 0xb5, 0xa3, 0xa8, 0xd9, 0x27, 0x04, 0x36, 0xa1, 0x23, 0x6f, 0x03, 0xbc, 0xef, 0x7b, + 0xed, 0x07, 0x34, 0xda, 0xf3, 0x5d, 0xf1, 0xf1, 0xcc, 0xa4, 0x18, 0xfb, 0xd0, 0xf7, 0xda, 0x76, + 0x0b, 0xc1, 0xac, 0xed, 0x09, 0x92, 0xa5, 0xfc, 0xcf, 0x7a, 0xba, 0xe6, 0x47, 0x68, 0xc3, 0x0c, + 0x25, 0x3d, 0xbd, 0xed, 0x47, 0xe9, 0x73, 0x1b, 0x89, 0x66, 0xfe, 0x52, 0x0e, 0x26, 0xf8, 0x4e, + 0x95, 0x0b, 0xcc, 0x53, 0x3b, 0x19, 0xdf, 0xd4, 0x26, 0xe3, 0x05, 0xb9, 0x30, 0x28, 0x9f, 0x36, + 0xd0, 0x54, 0xdc, 0x03, 0xd2, 0x4b, 0x43, 0x2c, 0xe9, 0x4f, 0x19, 0x64, 0x16, 0xde, 0x4c, 0x22, + 0x06, 0x42, 0x24, 0xb2, 0x51, 0x15, 0x86, 0x96, 0xc6, 0xc3, 0xfc, 0xc5, 0x1c, 0x8c, 0x2b, 0xf6, + 0xe4, 0x53, 0xdb, 0xf1, 0x5f, 0xd0, 0x3a, 0x5e, 0x9e, 0x41, 0x28, 0x5f, 0x36, 0x50, 0xbf, 0x77, + 0x61, 0xaa, 0x87, 0x24, 0x6d, 0x96, 0x1b, 0x83, 0x98, 0xe5, 0xaf, 0xf6, 0x46, 0x1f, 0xf0, 0x78, + 0xf8, 0x38, 0xfa, 0x40, 0x0d, 0x77, 0xf8, 0x56, 0x0e, 0x66, 0xc4, 0xaf, 0x6a, 0xd7, 0xf5, 0xa2, + 0x79, 0xbf, 0xbd, 0xe3, 0xed, 0x3e, 0xb5, 0x63, 0x51, 0xd5, 0xc6, 0xa2, 0xa2, 0x8f, 0x85, 0xf2, + 0x81, 0xfd, 0x87, 0xc4, 0xfc, 0xb7, 0x45, 0x98, 0xed, 0x47, 0xc0, 0xb6, 0xfd, 0xca, 0xae, 0x0a, + 0xb7, 0xfd, 0xa9, 0x1d, 0x2b, 0xdf, 0x4f, 0x25, 0x21, 0x3c, 0xb9, 0x01, 0x42, 0x78, 0x96, 0xa1, + 0x8c, 0x55, 0xd5, 0x69, 0xc8, 0x3a, 0x21, 0x4c, 0x82, 0x71, 0x2f, 0x1f, 0x1d, 0x56, 0x2e, 0x39, + 0xac, 0xcc, 0x0e, 0x45, 0xa1, 0xdd, 0x0d, 0x3c, 0x85, 0x47, 0x0f, 0x25, 0xf9, 0x2d, 0x03, 0x26, + 0x10, 0xb8, 0xf8, 0x90, 0xb6, 0x23, 0x64, 0x56, 0x10, 0x87, 0x34, 0xf1, 0x9d, 0xa7, 0x7a, 0x14, + 0x78, 0xed, 0x5d, 0x74, 0x24, 0x85, 0xb5, 0x6d, 0xd6, 0x0b, 0xdf, 0x3f, 0xac, 0xbc, 0xf5, 0x51, + 0xee, 0x51, 0x09, 0x56, 0x21, 0xdb, 0xc8, 0xf3, 0x86, 0x52, 0xac, 0x36, 0xd5, 0xcc, 0x54, 0x8b, + 0xc8, 0x8f, 0xc3, 0x79, 0x1e, 0x87, 0x31, 0xef, 0xb7, 0x23, 0xaf, 0xdd, 0xf5, 0xbb, 0x61, 0xcd, + 0x69, 0xec, 0x77, 0x3b, 0xa1, 0x70, 0x76, 0xe2, 0x97, 0x37, 0xe2, 0x42, 0x7b, 0x9b, 0x97, 0x2a, + 0x2c, 0xfb, 0x31, 0x20, 0xf7, 0x60, 0x8a, 0x17, 0x55, 0xbb, 0x91, 0x5f, 0x6f, 0x38, 0x4d, 0xaf, + 0xbd, 0x8b, 0x3e, 0xd0, 0x62, 0xed, 0x22, 0xdb, 0x5b, 0x3a, 0xdd, 0xc8, 0xb7, 0x43, 0x0e, 0x57, + 0xf8, 0xf5, 0x12, 0x91, 0x25, 0x98, 0xb4, 0xa8, 0xe3, 0x3e, 0x70, 0x1e, 0xcf, 0x3b, 0x1d, 0xa7, + 0xe1, 0x45, 0x07, 0xb8, 0x33, 0xcb, 0xd7, 0x2a, 0x47, 0x87, 0x95, 0x67, 0x02, 0xea, 0xb8, 0x76, + 0xcb, 0x79, 0x6c, 0x37, 0x44, 0xa1, 0xc2, 0x2c, 0x4d, 0x17, 0xb3, 0xf2, 0xda, 0x31, 0xab, 0xd1, + 0x34, 0x2b, 0xaf, 0xdd, 0x9f, 0x55, 0x42, 0x27, 0x59, 0xad, 0x3b, 0xc1, 0x2e, 0x8d, 0xb8, 0x93, + 0x10, 0x2e, 0x1b, 0x57, 0x0d, 0x85, 0x55, 0x84, 0x65, 0x36, 0x3a, 0x0c, 0xd3, 0xac, 0x14, 0x3a, + 0x26, 0x79, 0x5b, 0x81, 0x17, 0x51, 0xf5, 0x0b, 0xc7, 0xb0, 0x59, 0xd8, 0xff, 0xe8, 0x26, 0xed, + 0xf7, 0x89, 0x3d, 0x94, 0x09, 0x37, 0xe5, 0x23, 0x4b, 0x3d, 0xdc, 0xb2, 0xbf, 0xb2, 0x87, 0x32, + 0xe6, 0xa6, 0x7e, 0xe7, 0x38, 0x7e, 0xa7, 0xc2, 0xad, 0xcf, 0x87, 0xf6, 0x50, 0x92, 0x15, 0xd6, + 0x69, 0x11, 0x6d, 0x33, 0x89, 0x16, 0x4e, 0xd2, 0x09, 0x6c, 0xda, 0x0b, 0x62, 0x4f, 0x5d, 0x0e, + 0x64, 0xb1, 0x9d, 0xe1, 0x32, 0x4d, 0x13, 0xbf, 0x5f, 0x28, 0x0e, 0x95, 0x87, 0xad, 0x32, 0x17, + 0xf9, 0x88, 0x09, 0x0e, 0xea, 0x62, 0xf3, 0xd7, 0x72, 0x70, 0x41, 0xaa, 0x63, 0x1a, 0x3d, 0xf2, + 0x83, 0x7d, 0xaf, 0xbd, 0xfb, 0x94, 0x6b, 0xd5, 0x3b, 0x9a, 0x56, 0x7d, 0x21, 0xb5, 0xc2, 0xa5, + 0xbe, 0xf2, 0x18, 0xd5, 0xfa, 0xa7, 0x43, 0xf0, 0xec, 0xb1, 0x54, 0xe4, 0x03, 0xb6, 0x0a, 0x7a, + 0xb4, 0x1d, 0x2d, 0xb9, 0x4d, 0xca, 0xb6, 0x61, 0x7e, 0x37, 0x12, 0xce, 0xec, 0xe7, 0x8f, 0x0e, + 0x2b, 0xd3, 0xfc, 0x2a, 0x90, 0xed, 0xb9, 0x4d, 0x6a, 0x47, 0xbc, 0x58, 0x1b, 0xa6, 0x5e, 0x6a, + 0xc6, 0x32, 0xbe, 0x98, 0xb8, 0xd4, 0x8e, 0x68, 0xf0, 0xd0, 0xe1, 0x37, 0x22, 0x04, 0xcb, 0x7d, + 0x4a, 0x3b, 0xb6, 0xc3, 0x4a, 0x6d, 0x4f, 0x14, 0xeb, 0x2c, 0x7b, 0xa8, 0xc9, 0x1d, 0x85, 0xe5, + 0x3c, 0xdb, 0x1c, 0x3c, 0x70, 0x1e, 0x0b, 0x8b, 0x17, 0xfd, 0xab, 0x0a, 0x4b, 0x1e, 0x05, 0xd9, + 0x72, 0x1e, 0x5b, 0xbd, 0x24, 0xe4, 0xab, 0x70, 0x56, 0x28, 0x6e, 0xa6, 0xc4, 0x02, 0xbf, 0x29, + 0xbf, 0xb8, 0x80, 0xbc, 0x5e, 0x3a, 0x3a, 0xac, 0x9c, 0x17, 0x6a, 0xdf, 0x6e, 0x70, 0x8c, 0xcc, + 0xaf, 0xce, 0xe6, 0x42, 0xd6, 0xd9, 0x42, 0x96, 0xea, 0x8e, 0x07, 0x34, 0x0c, 0x9d, 0x5d, 0x69, + 0x1d, 0xf3, 0x13, 0x25, 0xa5, 0x33, 0xed, 0x16, 0x2f, 0xb7, 0xfa, 0x52, 0x92, 0x7b, 0x30, 0xb1, + 0x45, 0xb7, 0xd5, 0xf1, 0x19, 0x8e, 0xa7, 0x78, 0xf9, 0x11, 0xdd, 0xee, 0x3f, 0x38, 0x29, 0x3a, + 0xe2, 0xc1, 0xd4, 0x5a, 0xe0, 0x3f, 0x3e, 0x60, 0x5b, 0x3d, 0xda, 0xa6, 0x01, 0x06, 0x77, 0x8d, + 0xa0, 0xbb, 0x6a, 0x36, 0xb1, 0x2c, 0xf5, 0xf2, 0xda, 0x67, 0x8e, 0x0e, 0x2b, 0xcf, 0x76, 0x18, + 0xd8, 0x6e, 0x0a, 0xb8, 0x9d, 0xba, 0x17, 0xd8, 0xcb, 0x95, 0xfc, 0x24, 0x4c, 0x5a, 0x7e, 0x37, + 0xf2, 0xda, 0xbb, 0xf5, 0x28, 0x70, 0x22, 0xba, 0xcb, 0x15, 0x79, 0x12, 0x45, 0x96, 0x2a, 0xe5, + 0x8e, 0xe9, 0x80, 0x03, 0xed, 0x50, 0x40, 0x35, 0x4d, 0xaa, 0x13, 0x98, 0xbf, 0x92, 0x83, 0x59, + 0x31, 0x0c, 0x16, 0x6d, 0xf8, 0x81, 0xfb, 0xf4, 0x4f, 0xfb, 0x45, 0x6d, 0xda, 0x3f, 0x1f, 0xc7, + 0x28, 0x65, 0x7d, 0xe4, 0x31, 0xb3, 0xfe, 0xf7, 0x0c, 0xb8, 0x74, 0x1c, 0x11, 0xeb, 0x9d, 0x38, + 0xae, 0x6f, 0xb4, 0x27, 0x7e, 0xaf, 0x03, 0xd3, 0x38, 0x9e, 0xe8, 0x38, 0x0e, 0xef, 0xf9, 0x61, + 0x84, 0xde, 0xbb, 0x9c, 0x16, 0x48, 0x50, 0xf3, 0xfd, 0x26, 0xea, 0xf9, 0xda, 0xab, 0x4c, 0x9d, + 0x7f, 0xff, 0xb0, 0x02, 0x0c, 0xc4, 0x23, 0xf1, 0xd8, 0x9a, 0xcf, 0x25, 0x06, 0xfd, 0xd2, 0xa1, + 0x8d, 0xd1, 0x1f, 0xfb, 0xf4, 0x20, 0xb4, 0xb2, 0x58, 0xa3, 0x87, 0xa6, 0xda, 0x8d, 0xf6, 0xd6, + 0x02, 0xba, 0x43, 0x03, 0xda, 0x6e, 0xd0, 0x4f, 0x99, 0x87, 0x46, 0xff, 0xb8, 0x81, 0xb6, 0x27, + 0x7f, 0x31, 0x02, 0x33, 0x59, 0x64, 0xac, 0x5f, 0x14, 0x8b, 0x38, 0x7d, 0x89, 0xfc, 0x6f, 0x1a, + 0x50, 0xaa, 0xd3, 0x86, 0xdf, 0x76, 0xef, 0x38, 0x8d, 0xc8, 0x97, 0x21, 0x19, 0x36, 0xd7, 0x6c, + 0x0c, 0x6e, 0xef, 0x60, 0x81, 0xe6, 0x19, 0x78, 0x6f, 0x30, 0x43, 0xb4, 0xe1, 0x63, 0x20, 0x6c, + 0xc4, 0x64, 0x32, 0xa9, 0x02, 0x4f, 0x35, 0xb4, 0x4a, 0x49, 0x0d, 0xc6, 0xe7, 0xfd, 0x76, 0x9b, + 0xb2, 0x1f, 0x4a, 0x58, 0x27, 0x06, 0x62, 0x36, 0x64, 0x41, 0xda, 0x43, 0xa0, 0x93, 0x90, 0x5b, + 0x90, 0xdf, 0x98, 0xbb, 0x23, 0xc6, 0x40, 0x06, 0xab, 0x6d, 0xcc, 0xdd, 0xc1, 0xbd, 0x2e, 0xb3, + 0x1f, 0xc6, 0xbb, 0x73, 0x3b, 0xaa, 0x0f, 0x74, 0x63, 0xee, 0x0e, 0x59, 0x85, 0x29, 0x8b, 0x7e, + 0xad, 0xeb, 0x05, 0x54, 0x4c, 0x80, 0x07, 0x77, 0xaa, 0x38, 0x16, 0x45, 0xae, 0xc7, 0x02, 0x5e, + 0x28, 0x6d, 0x7b, 0xbb, 0xb5, 0xa3, 0x5e, 0x9c, 0xec, 0xa5, 0x25, 0x3f, 0x0b, 0x67, 0x17, 0xbc, + 0x50, 0xb4, 0x99, 0x3b, 0x1f, 0x5d, 0x3c, 0x87, 0x1c, 0xee, 0x33, 0x1d, 0x3e, 0x9f, 0x39, 0x1d, + 0x3e, 0xe3, 0xc6, 0x4c, 0x6c, 0xee, 0xd9, 0x74, 0xd3, 0xf1, 0xb0, 0xd9, 0xf5, 0x90, 0x0f, 0x61, + 0x02, 0xbd, 0x3d, 0xe8, 0x8f, 0xc5, 0x78, 0xf3, 0x91, 0x3e, 0x35, 0x7f, 0x36, 0xb3, 0xe6, 0x8b, + 0xe8, 0x3c, 0xb2, 0xd1, 0xab, 0x8b, 0xb1, 0xe9, 0xda, 0x1e, 0x41, 0xe3, 0x4c, 0xde, 0x87, 0x49, + 0xb1, 0xe8, 0xac, 0xee, 0xac, 0xef, 0xd1, 0x05, 0xe7, 0x40, 0x04, 0x21, 0xa0, 0xfd, 0x27, 0x56, + 0x2a, 0xdb, 0xdf, 0xb1, 0xa3, 0x3d, 0x6a, 0xbb, 0x8e, 0xa6, 0x9e, 0x53, 0x84, 0xe4, 0xa7, 0x61, + 0x6c, 0xd9, 0xc7, 0x83, 0x27, 0x54, 0x35, 0xa3, 0xc8, 0xe7, 0x4b, 0x78, 0x71, 0x9a, 0x83, 0x53, + 0x8b, 0xc8, 0x8f, 0x0e, 0x2b, 0x6f, 0x9e, 0x56, 0x0a, 0x95, 0x0a, 0x2c, 0xb5, 0x36, 0x32, 0x0f, + 0xc5, 0x2d, 0xba, 0xcd, 0xbe, 0x36, 0x7d, 0xe9, 0x4f, 0x82, 0xb9, 0xbe, 0x78, 0x24, 0x7e, 0xa9, + 0xa7, 0x3a, 0x12, 0x83, 0x04, 0x30, 0x85, 0xfd, 0xb3, 0xe6, 0x84, 0xe1, 0x23, 0x3f, 0x70, 0x9b, + 0x34, 0x94, 0xc7, 0x23, 0xbd, 0x9d, 0x3f, 0x97, 0xd9, 0xf9, 0x97, 0x78, 0xe7, 0x77, 0x14, 0x0e, + 0xaa, 0xb8, 0xf5, 0xb0, 0x37, 0xff, 0xb5, 0x81, 0x52, 0x4f, 0xae, 0x61, 0xf0, 0x59, 0x1c, 0xd5, + 0x8e, 0xbb, 0x59, 0xa7, 0x93, 0xba, 0x0b, 0xc0, 0x51, 0xd8, 0xd6, 0xf7, 0x8e, 0xd3, 0xa0, 0x91, + 0xf4, 0x91, 0x22, 0xf2, 0x0e, 0x42, 0xd4, 0xad, 0x2f, 0xc7, 0x21, 0x5f, 0x84, 0x99, 0x05, 0xfa, + 0xd0, 0x6b, 0xd0, 0x6a, 0x14, 0xd1, 0x90, 0xf7, 0xf0, 0x7c, 0x95, 0x1f, 0x26, 0x8e, 0xd6, 0x5e, + 0x38, 0x3a, 0xac, 0x5c, 0x76, 0xb1, 0xdc, 0x76, 0x12, 0x04, 0xbb, 0xe1, 0xa8, 0xbc, 0x32, 0x39, + 0x98, 0xff, 0xdb, 0x48, 0x7a, 0x9d, 0xbc, 0x04, 0x05, 0x6b, 0x2d, 0x6e, 0x3f, 0x3f, 0x27, 0x4c, + 0x35, 0x1f, 0x11, 0xc8, 0x97, 0xe1, 0xac, 0xc2, 0x07, 0x7b, 0x84, 0xba, 0xac, 0x41, 0xfc, 0x63, + 0x5e, 0xc4, 0x83, 0x21, 0xa5, 0x25, 0x0e, 0xc7, 0x48, 0xb5, 0x28, 0x9b, 0x07, 0xfb, 0x58, 0xa5, + 0x60, 0x81, 0xb6, 0x3d, 0xce, 0x5b, 0xf9, 0x58, 0x95, 0xb7, 0x8b, 0x08, 0xe9, 0x8f, 0xcd, 0xe2, + 0xf0, 0x7e, 0xa1, 0x58, 0x28, 0x0f, 0x99, 0x7f, 0x69, 0x28, 0x59, 0x2f, 0x9e, 0xd2, 0x15, 0xeb, + 0xb6, 0xb6, 0x62, 0xcd, 0x08, 0xd2, 0xf8, 0xab, 0x58, 0x59, 0xa6, 0x95, 0x31, 0x09, 0xe3, 0x1a, + 0x12, 0x86, 0xd9, 0x6e, 0x84, 0x34, 0xe0, 0x3e, 0xc9, 0x4f, 0x57, 0x98, 0x6d, 0xfc, 0x5d, 0x03, + 0x45, 0x4f, 0xfe, 0x99, 0x01, 0x93, 0x29, 0x0a, 0xd6, 0x1b, 0x0c, 0xa4, 0xf6, 0x46, 0x37, 0xa4, + 0x81, 0x85, 0x50, 0x1e, 0x94, 0xb7, 0xac, 0x07, 0xe5, 0x35, 0x2d, 0x06, 0x23, 0xef, 0xc1, 0xd0, + 0x06, 0xee, 0x20, 0xf4, 0xb8, 0x8e, 0x98, 0x3f, 0x16, 0xf2, 0x19, 0xd6, 0x65, 0xff, 0xaa, 0x0a, + 0x02, 0xcb, 0x48, 0x1d, 0x46, 0xe6, 0x03, 0x8a, 0xf9, 0x2d, 0x0a, 0x83, 0x1f, 0xc0, 0x35, 0x38, + 0x49, 0xfa, 0x00, 0x4e, 0x70, 0x32, 0x7f, 0x39, 0x07, 0x24, 0xf9, 0x46, 0xda, 0x08, 0x68, 0x14, + 0x3e, 0xb5, 0x83, 0xfe, 0xae, 0x36, 0xe8, 0xcf, 0xf6, 0x0c, 0x3a, 0xff, 0xbc, 0x81, 0xc6, 0xfe, + 0x8f, 0x0c, 0x38, 0x97, 0x4d, 0x48, 0x9e, 0x87, 0xe1, 0xd5, 0xf5, 0x35, 0x19, 0x1a, 0x24, 0x3e, + 0xc5, 0xef, 0xa0, 0x65, 0x6c, 0x89, 0x22, 0xf2, 0x1a, 0x0c, 0x7f, 0x60, 0xcd, 0xb3, 0x25, 0x53, + 0xb9, 0x3d, 0xf3, 0xb5, 0xc0, 0x6e, 0xe8, 0x5b, 0x2e, 0x81, 0xa4, 0x8e, 0x6d, 0xfe, 0x89, 0x8d, + 0xed, 0xb7, 0x72, 0x30, 0x59, 0x6d, 0x34, 0x68, 0x18, 0x32, 0x83, 0x88, 0x86, 0xd1, 0x53, 0x3b, + 0xb0, 0xd9, 0x41, 0x3f, 0xda, 0xb7, 0x0d, 0x34, 0xaa, 0x7f, 0x6c, 0xc0, 0x59, 0x49, 0xf5, 0xd0, + 0xa3, 0x8f, 0xd6, 0xf7, 0x02, 0x1a, 0xee, 0xf9, 0x4d, 0x77, 0xd0, 0x7b, 0x60, 0xb8, 0x4a, 0x7b, + 0xcd, 0x88, 0x06, 0xaa, 0x83, 0x7a, 0x07, 0x21, 0xda, 0x2a, 0x8d, 0x10, 0x72, 0x03, 0x46, 0xaa, + 0x9d, 0x4e, 0xe0, 0x3f, 0xe4, 0xd3, 0x7e, 0x5c, 0x9c, 0x47, 0x72, 0x90, 0x76, 0x7e, 0xc9, 0x41, + 0xac, 0x19, 0x0b, 0xb4, 0xcd, 0x23, 0x9a, 0xc7, 0x79, 0x33, 0x5c, 0xda, 0x56, 0x2d, 0x34, 0x2c, + 0x37, 0xbf, 0x59, 0x80, 0x92, 0xfa, 0x21, 0xc4, 0x84, 0x61, 0x1e, 0x9e, 0xa2, 0x86, 0x09, 0x38, + 0x08, 0xb1, 0x44, 0x49, 0x12, 0xf5, 0x93, 0x3b, 0x31, 0xea, 0x67, 0x0b, 0xc6, 0xd7, 0x02, 0xbf, + 0xe3, 0x87, 0xd4, 0xe5, 0x29, 0x8a, 0xb8, 0xd6, 0x9a, 0x8e, 0x43, 0x61, 0x79, 0x9f, 0xb3, 0x22, + 0xbe, 0x1d, 0xe8, 0x08, 0x6c, 0x3b, 0x9d, 0xc0, 0x48, 0xe7, 0xc3, 0x1d, 0xfc, 0x4e, 0x28, 0xae, + 0x0b, 0xc4, 0x0e, 0x7e, 0x06, 0xd1, 0x1d, 0xfc, 0x0c, 0xa2, 0x4e, 0x8b, 0xa1, 0x27, 0x35, 0x2d, + 0xc8, 0x2f, 0x1b, 0x30, 0x56, 0x6d, 0xb7, 0x45, 0xd4, 0x8f, 0xbc, 0xe7, 0x7f, 0x36, 0x71, 0xf2, + 0xf3, 0xb0, 0x50, 0xee, 0xe3, 0xff, 0x8a, 0xf0, 0xf1, 0xbf, 0xf9, 0x91, 0x7c, 0xfc, 0xeb, 0x81, + 0xe3, 0x45, 0x21, 0x1e, 0xe6, 0x26, 0x15, 0xaa, 0xa1, 0xbf, 0x4a, 0x3b, 0xc8, 0x9b, 0x50, 0x8e, + 0xe5, 0x71, 0xa9, 0xed, 0xd2, 0xc7, 0x94, 0x07, 0x49, 0x8d, 0xf3, 0x1b, 0x86, 0xda, 0xe1, 0x45, + 0x1a, 0xd1, 0xfc, 0x96, 0x01, 0xe7, 0x54, 0x81, 0xa8, 0x77, 0xb7, 0x5b, 0x1e, 0x6e, 0x7f, 0xc8, + 0x75, 0x18, 0x15, 0xe3, 0x15, 0x1b, 0x72, 0xbd, 0x79, 0xad, 0x12, 0x14, 0xb2, 0xc8, 0x86, 0x88, + 0xf1, 0x10, 0xbe, 0x82, 0xe9, 0xd4, 0x74, 0x63, 0x45, 0xb5, 0x59, 0xd1, 0xd9, 0xe5, 0x00, 0x7f, + 0xeb, 0x63, 0xc7, 0x20, 0xe6, 0x3b, 0x30, 0xa5, 0xb7, 0xb2, 0x4e, 0xf1, 0x0a, 0x9a, 0xfc, 0x34, + 0x23, 0xfb, 0xd3, 0x64, 0xb9, 0xb9, 0x05, 0xa4, 0x87, 0x3e, 0xc4, 0x83, 0x2a, 0x1a, 0xc9, 0x83, + 0x54, 0xe9, 0xee, 0xea, 0x41, 0x8c, 0x33, 0xbc, 0x8d, 0xa9, 0xdd, 0x8d, 0xa4, 0xe6, 0x9f, 0x03, + 0x4c, 0x67, 0xa8, 0x8e, 0x13, 0x96, 0xf6, 0x8a, 0x3e, 0x79, 0x46, 0xe3, 0x88, 0x00, 0x39, 0x65, + 0xde, 0x91, 0xd9, 0xbc, 0x8e, 0x99, 0x2a, 0xc7, 0xa5, 0xf8, 0xfa, 0x24, 0x96, 0x77, 0x35, 0x68, + 0x67, 0xe8, 0x89, 0x05, 0xed, 0xd4, 0x60, 0x5c, 0x7c, 0x95, 0x98, 0xca, 0xc3, 0x89, 0x5b, 0x20, + 0xe0, 0x05, 0x76, 0xcf, 0x94, 0xd6, 0x49, 0x38, 0x8f, 0xd0, 0x6f, 0x3e, 0xa4, 0x82, 0xc7, 0x88, + 0xca, 0x03, 0x0b, 0x32, 0x79, 0x28, 0x24, 0xe4, 0x9f, 0x1a, 0x40, 0x04, 0x44, 0x9d, 0xcf, 0xc5, + 0xe3, 0xe6, 0xb3, 0xfb, 0x64, 0xe6, 0xf3, 0xb3, 0xb2, 0x8d, 0xd9, 0xf3, 0x3a, 0xa3, 0x59, 0xe4, + 0x1f, 0x1b, 0x30, 0xc5, 0x23, 0x47, 0xd4, 0xc6, 0x8e, 0x1e, 0xd7, 0xd8, 0xc6, 0x93, 0x69, 0xec, + 0xa5, 0x10, 0xab, 0xed, 0xd3, 0xd6, 0xde, 0x46, 0x91, 0x1f, 0x07, 0x88, 0x67, 0x94, 0x8c, 0x50, + 0xbc, 0x94, 0xa1, 0x05, 0x62, 0xa4, 0xe4, 0x92, 0x65, 0x14, 0xd3, 0xa9, 0x31, 0x3d, 0x09, 0x37, + 0xf2, 0xb3, 0x30, 0xc3, 0xe6, 0x4b, 0x0c, 0x11, 0x71, 0x6e, 0xb3, 0x63, 0x58, 0xcb, 0xe7, 0xfa, + 0x2f, 0xed, 0xd7, 0xb3, 0xc8, 0xf8, 0x3d, 0x91, 0x24, 0xd1, 0x42, 0xd4, 0x52, 0xb7, 0x7c, 0x59, + 0x14, 0x18, 0xd0, 0x8a, 0xad, 0x0f, 0x67, 0x4b, 0x58, 0x67, 0xa6, 0x7e, 0xbb, 0x20, 0xe7, 0x02, + 0xd7, 0x6f, 0xa1, 0x7e, 0xd1, 0x03, 0x41, 0xe4, 0x03, 0x20, 0xf5, 0xee, 0xee, 0x2e, 0x0d, 0x23, + 0xea, 0x72, 0x18, 0x0d, 0xc2, 0xd9, 0x71, 0xd4, 0x0f, 0xe8, 0xa6, 0x0a, 0x65, 0xa9, 0x1d, 0xc8, + 0x62, 0x55, 0x48, 0x7a, 0x89, 0x09, 0x85, 0x19, 0xf1, 0xd1, 0x0c, 0x2a, 0xd3, 0x14, 0x84, 0xb3, + 0x13, 0x5a, 0x14, 0x61, 0x52, 0x52, 0x7b, 0x4e, 0xe6, 0xb1, 0x53, 0x72, 0x1d, 0x68, 0xdb, 0xde, + 0x2c, 0x76, 0x17, 0xb7, 0xe1, 0x42, 0xdf, 0xde, 0xcc, 0xb8, 0x2b, 0x72, 0x43, 0xbf, 0x2b, 0x72, + 0xa1, 0x9f, 0xd6, 0x0d, 0xd5, 0xfb, 0x22, 0xbf, 0x61, 0xa4, 0xd4, 0xac, 0xb0, 0x89, 0x78, 0x7e, + 0xc5, 0x7e, 0xeb, 0x50, 0x0e, 0x93, 0x32, 0x70, 0x45, 0x9c, 0x4b, 0x6c, 0x31, 0xa6, 0x88, 0x55, + 0x45, 0x8e, 0x2a, 0xf9, 0x63, 0x6a, 0x5c, 0xf3, 0x9f, 0x1b, 0x40, 0x78, 0x0b, 0xe7, 0x9d, 0x8e, + 0xb3, 0xed, 0x35, 0xbd, 0xc8, 0xa3, 0x21, 0xb9, 0x0f, 0x65, 0xc1, 0xc2, 0xd9, 0x6e, 0x52, 0x35, + 0x0c, 0x4c, 0x9c, 0x13, 0xc7, 0x65, 0x76, 0xda, 0x7a, 0xea, 0x21, 0xec, 0x23, 0x23, 0xb9, 0x8f, + 0x21, 0x23, 0xe6, 0x0f, 0x0d, 0xb8, 0xd0, 0xdb, 0x6c, 0x51, 0x73, 0xdc, 0x79, 0xc6, 0x09, 0x9d, + 0x97, 0xf5, 0x95, 0x39, 0xf4, 0xb0, 0x3e, 0xb1, 0xaf, 0xcc, 0x27, 0x0e, 0xdb, 0xd3, 0x7f, 0xe5, + 0x23, 0x35, 0xa9, 0x07, 0x79, 0x2d, 0x2b, 0xa0, 0x87, 0xdf, 0xba, 0xe1, 0x60, 0x3d, 0x96, 0x47, + 0xee, 0x72, 0x72, 0x99, 0xbb, 0x1c, 0x79, 0x81, 0x28, 0x9f, 0x75, 0x81, 0xc8, 0xfc, 0x85, 0x1c, + 0x94, 0xd6, 0x9a, 0xdd, 0x5d, 0xaf, 0xbd, 0xe0, 0x44, 0xce, 0x53, 0xbb, 0x65, 0x7a, 0x43, 0xdb, + 0x32, 0xc5, 0x11, 0x67, 0xf1, 0x87, 0x0d, 0x96, 0x64, 0xcf, 0x80, 0xc9, 0x84, 0x84, 0xab, 0x87, + 0x7b, 0x50, 0x60, 0x3f, 0x84, 0x05, 0x76, 0xb9, 0x87, 0x31, 0x62, 0x5d, 0x8f, 0xff, 0x13, 0x9b, + 0x18, 0x3d, 0xb5, 0x21, 0x72, 0xb8, 0xf8, 0x79, 0x9e, 0x99, 0xec, 0xf4, 0x59, 0x54, 0xff, 0xc0, + 0x80, 0x72, 0xfa, 0x4b, 0xc8, 0x7d, 0x18, 0x61, 0x9c, 0xbc, 0x38, 0xcb, 0xd9, 0x0b, 0x7d, 0xbe, + 0xf9, 0xba, 0x40, 0xe3, 0xcd, 0xc3, 0xce, 0xa7, 0x1c, 0x62, 0x49, 0x0e, 0x17, 0x2d, 0x28, 0xa9, + 0x58, 0x19, 0xad, 0x7b, 0x55, 0xd7, 0x89, 0xe7, 0xb2, 0xfb, 0x41, 0x6d, 0xf5, 0xaf, 0x6b, 0xad, + 0x16, 0xda, 0x70, 0xd0, 0x74, 0x95, 0x78, 0xe5, 0x8e, 0x4f, 0x07, 0x55, 0xce, 0xa4, 0xd6, 0xd7, + 0xaf, 0xdc, 0x71, 0x18, 0xdb, 0x6b, 0xf1, 0xfa, 0x84, 0x9c, 0xe1, 0x5e, 0xab, 0x83, 0x10, 0xd5, + 0x5e, 0xe7, 0x38, 0xe6, 0xdf, 0xcb, 0xc3, 0xb9, 0xa4, 0x79, 0x3c, 0x79, 0xe7, 0x9a, 0x13, 0x38, + 0xad, 0xf0, 0x84, 0x19, 0x70, 0xb5, 0xa7, 0x69, 0x78, 0xa5, 0x5c, 0x36, 0x4d, 0x69, 0x90, 0x99, + 0x6a, 0x10, 0x6e, 0x52, 0x79, 0x83, 0x64, 0x33, 0xc8, 0x7d, 0xc8, 0xd7, 0x69, 0x24, 0x2e, 0x9e, + 0x5e, 0xe9, 0xe9, 0x55, 0xb5, 0x5d, 0xd7, 0xeb, 0x34, 0xe2, 0x83, 0xc8, 0x63, 0xf7, 0xa9, 0x16, + 0x4b, 0xcf, 0xb6, 0x1b, 0x5b, 0x30, 0xbc, 0xf8, 0xb8, 0x43, 0x1b, 0x91, 0xb8, 0x6f, 0xfa, 0xf2, + 0xf1, 0xfc, 0x38, 0xae, 0x72, 0xab, 0x95, 0x22, 0x40, 0xed, 0x2c, 0x8e, 0x72, 0xf1, 0x36, 0x14, + 0x65, 0xe5, 0xa7, 0xba, 0x9d, 0xf9, 0x06, 0x8c, 0x29, 0x95, 0x9c, 0x4a, 0xe8, 0xff, 0xca, 0x80, + 0x61, 0xa6, 0x6d, 0x37, 0x5f, 0x7f, 0x4a, 0x35, 0xd2, 0x2d, 0x4d, 0x23, 0x4d, 0x29, 0xd7, 0x88, + 0x70, 0x5e, 0xbe, 0x7e, 0x82, 0x2e, 0x3a, 0x34, 0x00, 0x12, 0x64, 0x72, 0x17, 0x46, 0x44, 0xbe, + 0x18, 0x91, 0x19, 0x57, 0xbd, 0x97, 0x24, 0x33, 0x87, 0xc5, 0x56, 0x9c, 0xdf, 0x49, 0x9b, 0xbd, + 0x92, 0x9a, 0x2c, 0x24, 0xb1, 0xdb, 0xea, 0x45, 0x58, 0xc6, 0x66, 0xde, 0x6f, 0xf3, 0x7b, 0x2a, + 0x4a, 0x0e, 0xb2, 0x3e, 0x41, 0xdc, 0x55, 0xe1, 0xb8, 0xc9, 0x1f, 0xc7, 0xe4, 0x9c, 0x60, 0x92, + 0xed, 0xd3, 0xf9, 0x8b, 0x12, 0xbf, 0xf9, 0x21, 0x1b, 0xf6, 0x36, 0x94, 0xee, 0xf8, 0xc1, 0x23, + 0x27, 0x70, 0xab, 0xbb, 0x54, 0x44, 0xdd, 0x17, 0x31, 0x74, 0x7e, 0x7c, 0x87, 0xc3, 0x6d, 0x87, + 0x15, 0xfc, 0xe8, 0xb0, 0x52, 0xa8, 0xf9, 0x7e, 0xd3, 0xd2, 0xd0, 0xc9, 0x2a, 0x8c, 0x3f, 0x70, + 0x1e, 0x8b, 0x33, 0xd0, 0xf5, 0xf5, 0x65, 0x11, 0xbb, 0xf3, 0xf2, 0xd1, 0x61, 0xe5, 0x42, 0xcb, + 0x79, 0x1c, 0x9f, 0x9d, 0xf6, 0x0f, 0x2f, 0xd7, 0xe9, 0x89, 0x07, 0x13, 0x6b, 0x7e, 0x10, 0x89, + 0x4a, 0x98, 0xcd, 0x9e, 0xef, 0x73, 0x8a, 0x76, 0x23, 0xf3, 0x14, 0xed, 0x02, 0xdb, 0xa8, 0xd8, + 0x3b, 0x31, 0xb9, 0x76, 0x5d, 0x51, 0x63, 0x4c, 0xde, 0x86, 0xa9, 0x79, 0x1a, 0x44, 0xde, 0x8e, + 0xd7, 0x70, 0x22, 0x7a, 0xc7, 0x0f, 0x5a, 0x4e, 0x24, 0x1c, 0x46, 0xe8, 0x30, 0x68, 0x50, 0xce, + 0xa9, 0xe5, 0x44, 0x56, 0x2f, 0x26, 0xf9, 0x72, 0x56, 0x34, 0xd4, 0x10, 0x7e, 0xfe, 0x6b, 0xcc, + 0x1a, 0xc9, 0x88, 0x86, 0xea, 0xd3, 0x05, 0x19, 0x71, 0x51, 0xbb, 0xc7, 0x1d, 0x25, 0x17, 0x6b, + 0x37, 0xc5, 0xb1, 0xf6, 0xc9, 0x47, 0xc5, 0xf1, 0xb8, 0xf5, 0x39, 0x32, 0x9e, 0x83, 0x7c, 0x6d, + 0xed, 0x0e, 0xba, 0x80, 0xc4, 0xd1, 0x2d, 0x6d, 0xef, 0x39, 0xed, 0x06, 0x1a, 0x51, 0x22, 0x1e, + 0x44, 0x55, 0x78, 0xb5, 0xb5, 0x3b, 0xc4, 0x81, 0xe9, 0x35, 0x1a, 0xb4, 0xbc, 0xe8, 0x8b, 0x37, + 0x6f, 0x2a, 0x03, 0x55, 0xc4, 0xa6, 0xdd, 0x10, 0x4d, 0xab, 0x74, 0x10, 0xc5, 0x7e, 0x7c, 0xf3, + 0x66, 0xe6, 0x70, 0xc4, 0x0d, 0xcb, 0xe2, 0x45, 0x16, 0x61, 0xe2, 0x81, 0xf3, 0x58, 0x1c, 0xf2, + 0xc7, 0x7b, 0xd8, 0x3c, 0xde, 0x36, 0x40, 0xc1, 0x6a, 0x24, 0x45, 0xea, 0x10, 0xeb, 0x44, 0xe4, + 0x2d, 0x18, 0x4b, 0xc4, 0x2b, 0xc4, 0xe3, 0xdd, 0x3c, 0x0f, 0x33, 0x55, 0x84, 0x53, 0xf3, 0x95, + 0x29, 0xe8, 0x64, 0x23, 0x76, 0x41, 0x70, 0x4b, 0x18, 0x0f, 0x74, 0x47, 0x6b, 0x37, 0x54, 0x17, + 0x84, 0x83, 0x25, 0xda, 0x67, 0x4d, 0xc6, 0x7b, 0x03, 0x1e, 0x7d, 0x64, 0xe9, 0x5c, 0x14, 0xcf, + 0xc6, 0x5a, 0xe0, 0xb7, 0x3a, 0x11, 0x46, 0x61, 0xa6, 0x3c, 0x1b, 0x1d, 0x2c, 0xc9, 0xf0, 0x6c, + 0x70, 0x92, 0xec, 0xd8, 0x85, 0xf1, 0x8f, 0x11, 0xbb, 0x40, 0xa1, 0xb0, 0xec, 0x37, 0xf6, 0x31, + 0xec, 0x72, 0xb4, 0xf6, 0x01, 0xd3, 0x1f, 0x4d, 0xbf, 0xb1, 0xff, 0xe4, 0xce, 0xdc, 0x91, 0x3d, + 0x59, 0x61, 0xdf, 0xce, 0xc4, 0x4a, 0x54, 0x3d, 0x3b, 0xa9, 0x9d, 0x24, 0x6a, 0x65, 0xdc, 0x50, + 0xe1, 0x52, 0x28, 0x3f, 0xc4, 0xd2, 0xc9, 0x09, 0x85, 0xf2, 0x02, 0x0d, 0xf7, 0x23, 0xbf, 0x33, + 0xdf, 0xf4, 0x3a, 0xdb, 0xbe, 0x13, 0xb8, 0xb3, 0xe5, 0x3e, 0x0a, 0xe3, 0xa5, 0x4c, 0x85, 0x31, + 0xe5, 0x72, 0x7a, 0xbb, 0x21, 0x19, 0x58, 0x3d, 0x2c, 0xc9, 0x97, 0x61, 0x82, 0xcd, 0x96, 0xc5, + 0xc7, 0x11, 0x6d, 0x73, 0x51, 0x9a, 0xc2, 0xa5, 0x7e, 0x46, 0xb9, 0xb8, 0x19, 0x17, 0x72, 0x21, + 0x45, 0xed, 0x41, 0x63, 0x02, 0x55, 0x48, 0x75, 0x56, 0xc4, 0x85, 0xd9, 0x07, 0xce, 0x63, 0x25, + 0xcd, 0x91, 0x22, 0xf5, 0x04, 0x25, 0x16, 0x13, 0xea, 0x31, 0x89, 0xdd, 0x8f, 0x91, 0xfa, 0x4c, + 0x80, 0xbe, 0x9c, 0xc8, 0x4f, 0xc3, 0x79, 0xf1, 0x59, 0x0b, 0x98, 0x2b, 0xc1, 0x0f, 0x0e, 0xea, + 0x7b, 0x4e, 0xc0, 0x26, 0xee, 0xf4, 0xe9, 0x34, 0xac, 0xec, 0x30, 0x57, 0xf2, 0xb1, 0x43, 0xce, + 0xc8, 0xea, 0x57, 0x83, 0xf9, 0xe3, 0xa9, 0x61, 0x27, 0x4b, 0x30, 0x22, 0x70, 0xc5, 0xc2, 0xda, + 0x5b, 0xfb, 0xb3, 0x99, 0xb5, 0x8f, 0x88, 0xda, 0x2d, 0x49, 0x6f, 0xfe, 0xa1, 0x01, 0xe3, 0x5a, + 0x8f, 0x92, 0xdb, 0x4a, 0xd4, 0x53, 0x12, 0xad, 0xa8, 0xe1, 0x64, 0x3e, 0xaa, 0x71, 0x5b, 0x84, + 0xba, 0xe5, 0xfa, 0xd3, 0x65, 0x26, 0xb1, 0x3b, 0x76, 0xab, 0x97, 0xe4, 0x8a, 0x28, 0xf4, 0xc9, + 0x15, 0xf1, 0xed, 0x71, 0x98, 0xd0, 0xd7, 0x70, 0x66, 0x54, 0x2f, 0xfb, 0xbb, 0x5e, 0x5b, 0xfa, + 0x04, 0x78, 0xf6, 0x13, 0x84, 0x68, 0x2f, 0x54, 0x20, 0x84, 0xbc, 0x08, 0x10, 0x9f, 0xae, 0xcb, + 0x6d, 0xbf, 0x78, 0x4f, 0x43, 0x29, 0x20, 0x3f, 0x01, 0xb0, 0xe2, 0xbb, 0x34, 0x4e, 0xa0, 0x73, + 0x8c, 0x4f, 0xf0, 0x25, 0xe1, 0x13, 0x14, 0x6f, 0x60, 0x1c, 0x1d, 0x56, 0xce, 0xb6, 0x7d, 0x97, + 0xf6, 0x66, 0xce, 0x51, 0x38, 0x92, 0x2f, 0xc0, 0x90, 0xd5, 0x6d, 0x52, 0x99, 0xcf, 0x65, 0x4c, + 0xce, 0xe9, 0x6e, 0x53, 0xc9, 0x8d, 0x1b, 0x74, 0xd3, 0x47, 0x41, 0x0c, 0x40, 0xde, 0x05, 0x60, + 0x62, 0x8b, 0x49, 0x26, 0xe5, 0x85, 0x71, 0x74, 0x11, 0x28, 0x12, 0x8f, 0xa9, 0x29, 0xb5, 0xca, + 0x13, 0x12, 0xb2, 0x0a, 0x23, 0x42, 0x43, 0x8a, 0xa3, 0x96, 0xe7, 0xb2, 0x9c, 0x7c, 0x8a, 0x99, + 0x24, 0x12, 0xac, 0x20, 0x58, 0xf7, 0xbb, 0x71, 0x17, 0xc7, 0x5b, 0x30, 0xca, 0xd8, 0x6f, 0x84, + 0x54, 0x5c, 0x23, 0x1f, 0xe5, 0x61, 0xa7, 0x4a, 0x83, 0xba, 0xa1, 0xee, 0x61, 0x48, 0x08, 0xc8, + 0x97, 0x31, 0x25, 0x92, 0xe8, 0xea, 0x63, 0x7d, 0xc5, 0x57, 0x7a, 0xba, 0x7a, 0xc6, 0xe9, 0x74, + 0x32, 0x72, 0xc8, 0xc5, 0xfc, 0xc8, 0x6e, 0x7c, 0x35, 0x2b, 0x4e, 0x90, 0x7e, 0x4c, 0x05, 0xd7, + 0x7a, 0x2a, 0x98, 0x95, 0xb7, 0x8d, 0x7a, 0x13, 0x21, 0x69, 0x7c, 0x49, 0x07, 0xca, 0x89, 0x32, + 0x11, 0x75, 0xc1, 0x71, 0x75, 0xbd, 0xd6, 0x53, 0x97, 0x3a, 0x80, 0x3d, 0xd5, 0xf5, 0x70, 0x27, + 0x6e, 0x92, 0xcc, 0x5a, 0xd4, 0x37, 0x76, 0x5c, 0x7d, 0x2f, 0xf6, 0xd4, 0x37, 0xed, 0x6e, 0xf7, + 0xd6, 0x93, 0xe2, 0x49, 0xde, 0x82, 0x71, 0x09, 0xc1, 0xf9, 0x81, 0x3e, 0x5a, 0xb1, 0x85, 0x71, + 0xb7, 0x31, 0xd6, 0x50, 0xcf, 0x02, 0xa4, 0x22, 0xab, 0xd4, 0x5c, 0x3a, 0xc6, 0x35, 0xea, 0xb4, + 0x54, 0xe8, 0xc8, 0xe4, 0x4b, 0x30, 0xb6, 0xd4, 0x62, 0x1f, 0xe2, 0xb7, 0x9d, 0x88, 0xe2, 0x7a, + 0x9b, 0xf8, 0xbd, 0x95, 0x12, 0x45, 0x54, 0x79, 0xba, 0xd1, 0xa4, 0x48, 0xb5, 0x57, 0x14, 0x0a, + 0xd6, 0x79, 0xdc, 0xb5, 0x25, 0x64, 0x38, 0x14, 0xab, 0xeb, 0xb3, 0x19, 0xbe, 0x67, 0x85, 0x3d, + 0x2e, 0x57, 0xdc, 0x63, 0x66, 0x8b, 0x09, 0xa1, 0x75, 0x9e, 0xce, 0x93, 0xbc, 0x0d, 0x63, 0xe2, + 0x22, 0x6c, 0xd5, 0x5a, 0x09, 0x67, 0xcb, 0xf8, 0xf1, 0x98, 0xc2, 0x4f, 0xde, 0x99, 0xb5, 0x9d, + 0x20, 0x75, 0x00, 0x99, 0xe0, 0x93, 0x2f, 0xc2, 0xcc, 0x96, 0xd7, 0x76, 0xfd, 0x47, 0xa1, 0x50, + 0xe0, 0x42, 0xd1, 0x4d, 0x25, 0x61, 0x56, 0x8f, 0x78, 0xb9, 0x2d, 0x17, 0x9a, 0x1e, 0xc5, 0x97, + 0xc9, 0x81, 0xfc, 0x4c, 0x0f, 0x67, 0x2e, 0x41, 0xe4, 0x38, 0x09, 0x9a, 0xeb, 0x91, 0xa0, 0xde, + 0xea, 0xd3, 0xe2, 0x94, 0x59, 0x0d, 0xf1, 0x81, 0xe8, 0x66, 0xd5, 0xfb, 0xbe, 0xd7, 0x9e, 0x9d, + 0xd6, 0x9e, 0x1f, 0x8a, 0x23, 0xad, 0x11, 0x6f, 0xcd, 0x6f, 0x7a, 0x8d, 0x03, 0x99, 0xca, 0x57, + 0x37, 0xd8, 0x3e, 0xf4, 0x35, 0xff, 0x49, 0x06, 0x6b, 0xf2, 0x25, 0x28, 0xb1, 0xbf, 0xb1, 0x75, + 0x3b, 0xa3, 0x9d, 0x56, 0x2a, 0x98, 0xa2, 0x1e, 0x1c, 0x23, 0xbc, 0xa9, 0x9b, 0x61, 0xf8, 0x6a, + 0xac, 0xcc, 0x1f, 0x1a, 0x30, 0x93, 0xd5, 0xd6, 0x13, 0xd2, 0x22, 0x99, 0xa9, 0xb8, 0x05, 0x74, + 0xbd, 0xf0, 0xb8, 0x85, 0x38, 0x5a, 0xa1, 0x02, 0x43, 0xf7, 0xbd, 0xb6, 0x2b, 0xe3, 0xea, 0x70, + 0x39, 0xdc, 0x67, 0x00, 0x8b, 0xc3, 0x19, 0x02, 0xde, 0xc1, 0xc0, 0xf5, 0x72, 0x88, 0x23, 0xe0, + 0x45, 0x0d, 0x8b, 0xc3, 0x19, 0x02, 0x5b, 0x76, 0xe5, 0x32, 0x81, 0x08, 0x6c, 0x35, 0x0e, 0x2d, + 0x0e, 0x27, 0x57, 0x60, 0x64, 0xb5, 0xbd, 0x4c, 0x9d, 0x87, 0x54, 0x1c, 0x1a, 0xa2, 0xab, 0xc8, + 0x6f, 0xdb, 0x4d, 0x06, 0xb3, 0x64, 0xa1, 0xf9, 0x5d, 0x03, 0xa6, 0x7a, 0xba, 0xe9, 0xe4, 0xcc, + 0x4f, 0xc7, 0x9f, 0xd0, 0x0e, 0xf2, 0x7d, 0xbc, 0xf9, 0x85, 0xec, 0xe6, 0x9b, 0xbf, 0x57, 0x80, + 0xf3, 0x7d, 0x56, 0xad, 0x24, 0xba, 0xc2, 0x38, 0x31, 0xba, 0xe2, 0x2b, 0x6c, 0x95, 0x70, 0xbc, + 0x56, 0xb8, 0xee, 0x27, 0x2d, 0x4e, 0x0e, 0xa2, 0xb0, 0x4c, 0xa6, 0x56, 0x91, 0x69, 0x40, 0x2e, + 0x34, 0x90, 0xc2, 0x8e, 0xfc, 0x1e, 0x7f, 0xbc, 0xce, 0xac, 0x27, 0xbe, 0x21, 0xff, 0xd7, 0x24, + 0xbe, 0x41, 0x3f, 0x55, 0x2c, 0x3c, 0xd1, 0x53, 0xc5, 0xec, 0x03, 0x88, 0xa1, 0x8f, 0x73, 0x14, + 0x37, 0x0f, 0xe3, 0x75, 0xea, 0x04, 0x8d, 0xbd, 0x6a, 0xc8, 0x07, 0x69, 0x18, 0xb9, 0xa1, 0x4a, + 0x0e, 0xb1, 0xc0, 0x76, 0xc2, 0xde, 0xb1, 0xd0, 0x68, 0xcc, 0xff, 0x94, 0x0a, 0xcb, 0xf8, 0xeb, + 0x28, 0x2f, 0x2f, 0xc3, 0xd0, 0xd6, 0x1e, 0x0d, 0xa4, 0x91, 0x8c, 0x0d, 0x79, 0xc4, 0x00, 0x6a, + 0x43, 0x10, 0xc3, 0xfc, 0x69, 0x28, 0xa9, 0x95, 0xa1, 0x42, 0x60, 0xbf, 0xc5, 0x8c, 0xe4, 0x0a, + 0x81, 0x01, 0x2c, 0x0e, 0x3f, 0x31, 0x1b, 0x5b, 0xd2, 0x0b, 0xf9, 0x93, 0x7a, 0x81, 0x55, 0x8e, + 0xf2, 0xa6, 0x54, 0x8e, 0xbf, 0xd5, 0xca, 0x23, 0x06, 0xb0, 0x38, 0xfc, 0x89, 0x56, 0xfe, 0xef, + 0x0d, 0x28, 0x60, 0x26, 0x8c, 0xd7, 0x61, 0x54, 0xfa, 0xb3, 0xd5, 0xec, 0x10, 0xd3, 0xd2, 0xdd, + 0x1d, 0xea, 0x41, 0x35, 0x02, 0xc8, 0xaa, 0xda, 0xa4, 0xc1, 0xb6, 0x16, 0x7b, 0xf5, 0x90, 0x01, + 0xd4, 0xaa, 0x10, 0xe3, 0x14, 0xe3, 0x81, 0xf1, 0x65, 0x62, 0x3b, 0xca, 0x55, 0x16, 0x8f, 0x2f, + 0xeb, 0xd9, 0x7b, 0x4a, 0x2c, 0xf3, 0x57, 0x0d, 0x38, 0x9b, 0x69, 0xc9, 0xb0, 0x5a, 0xb9, 0xc9, + 0xa4, 0x88, 0x63, 0xda, 0x5e, 0xe2, 0x18, 0xa7, 0x89, 0x23, 0x3b, 0x85, 0x6c, 0x7d, 0x06, 0x46, + 0xe3, 0x1d, 0x26, 0x99, 0x91, 0x43, 0x87, 0x4e, 0x4f, 0xb9, 0x1d, 0xfb, 0x2b, 0x03, 0x86, 0x59, + 0x13, 0x9e, 0xda, 0x6b, 0x45, 0xd9, 0x2e, 0x70, 0xf6, 0x49, 0x03, 0x5d, 0x26, 0xfa, 0xad, 0x61, + 0x80, 0x04, 0x99, 0x6c, 0xc3, 0xc4, 0xea, 0xd2, 0xc2, 0xfc, 0x92, 0x4b, 0xdb, 0x11, 0x9e, 0x01, + 0xa7, 0xd2, 0x4b, 0xb0, 0xad, 0x71, 0xd0, 0x76, 0x9a, 0x02, 0xe1, 0x20, 0xd1, 0x0d, 0xbe, 0xe7, + 0x36, 0x6c, 0x2f, 0xa6, 0x53, 0x4d, 0x4a, 0x9d, 0x23, 0xab, 0xa3, 0x5e, 0x7d, 0xb0, 0xac, 0xd4, + 0x91, 0x1b, 0xb0, 0x8e, 0xd0, 0x69, 0x35, 0xfb, 0xd4, 0xa1, 0x73, 0x24, 0x7b, 0x50, 0xbe, 0x8b, + 0xab, 0x8f, 0x52, 0x4b, 0xfe, 0xf8, 0x5a, 0x9e, 0x17, 0xb5, 0x3c, 0xc3, 0x97, 0xad, 0xec, 0x7a, + 0x7a, 0xb8, 0x26, 0x92, 0x5b, 0x38, 0x51, 0x72, 0xff, 0x96, 0x01, 0xc3, 0x7c, 0x79, 0x8b, 0xdf, + 0x10, 0xca, 0x5c, 0x40, 0xb7, 0x9e, 0xcc, 0x02, 0x5a, 0x46, 0xcd, 0xa5, 0xb9, 0x10, 0x78, 0x19, + 0x59, 0x48, 0x3d, 0x48, 0x24, 0xcf, 0x39, 0xd0, 0xb4, 0xe6, 0x25, 0x49, 0x34, 0x1e, 0x7f, 0x8b, + 0x48, 0xe5, 0xc2, 0x31, 0xd4, 0xe7, 0x51, 0x47, 0x3e, 0xe6, 0xf3, 0xa8, 0xcb, 0x30, 0x2a, 0xc2, + 0xcb, 0x6a, 0x07, 0x62, 0x03, 0x2d, 0x5d, 0x44, 0x31, 0x5c, 0xc9, 0xba, 0xce, 0x41, 0xf6, 0xb6, + 0x96, 0x33, 0x31, 0x46, 0x24, 0xab, 0x30, 0x9a, 0xdc, 0x89, 0x1a, 0xd5, 0x0e, 0xab, 0x63, 0xb8, + 0x88, 0xbf, 0xe6, 0xd7, 0x6e, 0x33, 0xaf, 0x40, 0x25, 0x3c, 0xcc, 0x6f, 0x1a, 0x50, 0x4e, 0xcb, + 0x0b, 0x79, 0x0b, 0xc6, 0xe2, 0x6b, 0x69, 0x71, 0xf4, 0x09, 0x7a, 0x9b, 0x93, 0x7b, 0x6c, 0x5a, + 0x1c, 0x8a, 0x8a, 0x4e, 0xe6, 0xa0, 0xc8, 0xa6, 0x9d, 0x92, 0x34, 0x1b, 0xf5, 0x49, 0x57, 0xc0, + 0xd4, 0xc3, 0x57, 0x89, 0xa7, 0xcc, 0xda, 0xff, 0x92, 0x87, 0x31, 0x65, 0xb0, 0xc8, 0xcb, 0x50, + 0x5c, 0x0a, 0x97, 0xfd, 0xc6, 0x3e, 0x75, 0xc5, 0x99, 0x0e, 0xbe, 0x7e, 0xeb, 0x85, 0x76, 0x13, + 0x81, 0x56, 0x5c, 0x4c, 0x6a, 0x30, 0xce, 0xff, 0x93, 0xd7, 0x8f, 0x73, 0x89, 0x3f, 0x9a, 0x23, + 0xcb, 0x8b, 0xc7, 0xea, 0xf2, 0xae, 0x91, 0x90, 0xaf, 0x02, 0x70, 0x00, 0x1b, 0xdf, 0x01, 0xa2, + 0xcb, 0xe5, 0x04, 0x3e, 0x2b, 0x2a, 0x88, 0x3c, 0xf5, 0x0b, 0x51, 0x14, 0x14, 0x86, 0xf8, 0xf2, + 0xa6, 0xdf, 0xd8, 0x1f, 0xfc, 0xed, 0xdd, 0xe4, 0xe5, 0x4d, 0xbf, 0xb1, 0x6f, 0x67, 0x87, 0x1a, + 0xaa, 0x2c, 0xc9, 0xb7, 0x0c, 0xb8, 0x68, 0xd1, 0x86, 0xff, 0x90, 0x06, 0x07, 0xd5, 0x08, 0xb1, + 0xd4, 0x1a, 0x4f, 0x8e, 0x6b, 0xbc, 0x25, 0x6a, 0x7c, 0x29, 0x10, 0x5c, 0xf0, 0x4e, 0x54, 0xab, + 0x13, 0xd9, 0xc7, 0x34, 0xe1, 0x98, 0x2a, 0xcd, 0x3f, 0x35, 0x94, 0x29, 0x40, 0x56, 0x60, 0x34, + 0x16, 0x16, 0xe1, 0x32, 0x8d, 0x2d, 0x33, 0x09, 0xb7, 0xe8, 0x4e, 0xed, 0x19, 0x71, 0xfc, 0x32, + 0x1d, 0x8b, 0x9c, 0x36, 0x23, 0x24, 0x90, 0xbc, 0x07, 0x05, 0x1c, 0xaa, 0x93, 0xb3, 0xac, 0xc9, + 0xa5, 0xa6, 0xc0, 0xc6, 0x08, 0x5b, 0x8d, 0x94, 0xe4, 0xb3, 0x22, 0x06, 0x28, 0xaf, 0xe5, 0x2f, + 0x66, 0x20, 0xd6, 0x8e, 0x78, 0x8d, 0x49, 0xa2, 0x5b, 0x15, 0x69, 0xfd, 0x3b, 0x39, 0x28, 0xa7, + 0x27, 0x1e, 0x79, 0x17, 0x4a, 0xf2, 0x7e, 0xdb, 0x3d, 0x27, 0xdc, 0x13, 0x39, 0x51, 0x71, 0xd7, + 0x2a, 0x2f, 0xc5, 0xd9, 0x7b, 0x8e, 0x96, 0x3b, 0x4f, 0x23, 0x60, 0x0b, 0xf2, 0xba, 0xb8, 0x34, + 0xa1, 0x4c, 0xa0, 0xc8, 0x8f, 0x3a, 0xa9, 0x9c, 0xa8, 0x12, 0x8d, 0xbc, 0x0e, 0x79, 0x7e, 0xe9, + 0x53, 0x4d, 0xa8, 0xf5, 0xe0, 0x4e, 0x95, 0xdf, 0x59, 0xe3, 0x27, 0xfe, 0xfa, 0xd1, 0x09, 0xc3, + 0x27, 0xcb, 0xca, 0x95, 0xc1, 0x61, 0x2d, 0xb1, 0x90, 0x04, 0xc7, 0x1f, 0x77, 0xf2, 0xdd, 0xc1, + 0xf7, 0x0b, 0xc5, 0x7c, 0xb9, 0x20, 0x2e, 0x89, 0xfd, 0x4e, 0x1e, 0x46, 0xe3, 0xfa, 0x09, 0x01, + 0xb4, 0x37, 0xc4, 0xd1, 0x3d, 0xfe, 0x4f, 0x2e, 0x40, 0x51, 0x9a, 0x18, 0xe2, 0xf8, 0x7e, 0x24, + 0x14, 0xe6, 0xc5, 0x2c, 0x48, 0x5b, 0x82, 0x9b, 0x17, 0x96, 0xfc, 0x49, 0x6e, 0x42, 0x6c, 0x28, + 0xf4, 0xb3, 0x28, 0x0a, 0x6c, 0xc0, 0xac, 0x18, 0x8d, 0x4c, 0x40, 0xce, 0xe3, 0x01, 0xf1, 0xa3, + 0x56, 0xce, 0x73, 0xc9, 0xbb, 0x50, 0x74, 0x5c, 0x97, 0xba, 0xb6, 0x13, 0x0d, 0xf0, 0x0e, 0x72, + 0x91, 0x71, 0xe3, 0x1a, 0x1d, 0xa9, 0xaa, 0x11, 0xa9, 0xc2, 0x28, 0x3e, 0x83, 0xdb, 0x0d, 0x07, + 0x7a, 0x3b, 0x37, 0xe1, 0x50, 0x64, 0x64, 0x1b, 0x21, 0x75, 0xc9, 0x4b, 0x50, 0x60, 0xa3, 0x29, + 0xd6, 0x83, 0x38, 0x4d, 0xe2, 0xea, 0xfa, 0x1a, 0xef, 0xb0, 0x7b, 0x67, 0x2c, 0x44, 0x20, 0x2f, + 0x40, 0xbe, 0x3b, 0xb7, 0x23, 0x34, 0x7d, 0x39, 0xb9, 0x0f, 0x1c, 0xa3, 0xb1, 0x62, 0x72, 0x0b, + 0x8a, 0x8f, 0xf4, 0x9b, 0x9f, 0x67, 0x53, 0xc3, 0x18, 0xe3, 0xc7, 0x88, 0xb5, 0x22, 0x0c, 0xf3, + 0x3b, 0x8f, 0xe6, 0x73, 0x00, 0x49, 0xd5, 0xbd, 0x51, 0x16, 0xe6, 0x57, 0x61, 0x34, 0xae, 0x92, + 0x3c, 0x0b, 0xb0, 0x4f, 0x0f, 0xec, 0x3d, 0xa7, 0xed, 0x8a, 0x37, 0x7d, 0x4a, 0xd6, 0xe8, 0x3e, + 0x3d, 0xb8, 0x87, 0x00, 0x72, 0x1e, 0x46, 0x3a, 0x6c, 0x54, 0x65, 0x46, 0x5f, 0x6b, 0xb8, 0xd3, + 0xdd, 0x66, 0x12, 0x3a, 0x0b, 0x23, 0xe8, 0xfc, 0x10, 0x13, 0x6d, 0xdc, 0x92, 0x3f, 0xcd, 0xdf, + 0xc8, 0x61, 0xae, 0x07, 0xa5, 0x9d, 0xe4, 0x79, 0x18, 0x6f, 0x04, 0x14, 0x97, 0x23, 0x87, 0x99, + 0x45, 0xa2, 0x9e, 0x52, 0x02, 0x5c, 0x72, 0xc9, 0x15, 0x98, 0x4c, 0x52, 0x0c, 0xdb, 0x8d, 0x6d, + 0x71, 0xef, 0xbb, 0x64, 0x8d, 0x77, 0x64, 0x8e, 0xe1, 0xf9, 0x6d, 0xbc, 0xc8, 0x51, 0x56, 0xef, + 0x3b, 0x46, 0x32, 0x5d, 0xf0, 0xa8, 0x35, 0xa9, 0xc0, 0xf1, 0xe0, 0xe4, 0x1c, 0x0c, 0x3b, 0xce, + 0x6e, 0xd7, 0xe3, 0x41, 0xe5, 0x25, 0x4b, 0xfc, 0x22, 0xaf, 0xc0, 0x54, 0xe8, 0xed, 0xb6, 0x9d, + 0xa8, 0x1b, 0x88, 0x64, 0x1b, 0x34, 0x40, 0x91, 0x1a, 0xb7, 0xca, 0x71, 0xc1, 0x3c, 0x87, 0x93, + 0xd7, 0x80, 0xa8, 0xf5, 0xf9, 0xdb, 0x1f, 0xd2, 0x06, 0x17, 0xb5, 0x92, 0x35, 0xa5, 0x94, 0xac, + 0x62, 0x01, 0xf9, 0x0c, 0x94, 0x02, 0x1a, 0xa2, 0x49, 0x86, 0xdd, 0x86, 0x29, 0x84, 0xac, 0x31, + 0x09, 0xbb, 0x4f, 0x0f, 0xcc, 0x1a, 0x4c, 0xf5, 0xcc, 0x47, 0xf2, 0x1a, 0xb7, 0xee, 0xc5, 0xfa, + 0x5c, 0xe2, 0x9b, 0x19, 0x7c, 0xfa, 0x4a, 0x7f, 0x39, 0x9d, 0x23, 0x99, 0x6d, 0x28, 0xa9, 0xfa, + 0xf5, 0x84, 0x1b, 0xf5, 0xe7, 0x30, 0xec, 0x94, 0x2b, 0x9f, 0xe1, 0xa3, 0xc3, 0x4a, 0xce, 0x73, + 0x31, 0xd8, 0xf4, 0x2a, 0x14, 0xa5, 0x95, 0xa0, 0xbe, 0x3f, 0x23, 0x0c, 0xca, 0x03, 0x2b, 0x2e, + 0x35, 0x5f, 0x82, 0x11, 0xa1, 0x42, 0x8f, 0x77, 0x44, 0x99, 0x5f, 0xcf, 0xc1, 0xa4, 0x45, 0xd9, + 0x04, 0x17, 0x2f, 0xbb, 0x7c, 0xca, 0x92, 0x2d, 0x6b, 0xdf, 0x76, 0x4c, 0x02, 0x8b, 0xdf, 0x35, + 0x60, 0x3a, 0x03, 0xf7, 0x23, 0x65, 0x67, 0xbb, 0x0d, 0xa3, 0x0b, 0x9e, 0xd3, 0xac, 0xba, 0x6e, + 0x1c, 0x3e, 0x8b, 0xd6, 0xa0, 0xcb, 0xa6, 0x93, 0xc3, 0xa0, 0xea, 0x62, 0x1a, 0xa3, 0x92, 0x6b, + 0x42, 0x28, 0x92, 0xfc, 0x91, 0x32, 0x9d, 0x33, 0xf0, 0x36, 0x25, 0xc9, 0x9c, 0xf1, 0x2e, 0x24, + 0x07, 0x26, 0xa7, 0xb3, 0x4f, 0xed, 0xd0, 0x65, 0xdf, 0x85, 0x4c, 0x7f, 0xde, 0x40, 0xdb, 0xce, + 0x6f, 0xe6, 0xe0, 0x5c, 0x36, 0xe1, 0x47, 0x4d, 0xb4, 0x87, 0xd9, 0x43, 0x94, 0x8c, 0xd9, 0x98, + 0x68, 0x8f, 0xa7, 0x1a, 0x41, 0xfc, 0x04, 0x81, 0xec, 0xc0, 0xf8, 0xb2, 0x13, 0x46, 0xf7, 0xa8, + 0x13, 0x44, 0xdb, 0xd4, 0x89, 0x06, 0xb0, 0x60, 0xe3, 0xf7, 0xc9, 0x71, 0x51, 0xdb, 0x93, 0x94, + 0xe9, 0xf7, 0xc9, 0x35, 0xb6, 0xb1, 0xa0, 0x14, 0x06, 0x10, 0x94, 0xaf, 0xc1, 0x64, 0x9d, 0xb6, + 0x9c, 0xce, 0x9e, 0x1f, 0x50, 0xe1, 0x3b, 0xbf, 0x0e, 0xe3, 0x31, 0x28, 0x53, 0x5a, 0xf4, 0x62, + 0x0d, 0x5f, 0xe9, 0x88, 0x44, 0x95, 0xe8, 0xc5, 0xe6, 0xaf, 0xe5, 0xe0, 0x7c, 0xb5, 0x21, 0x0e, + 0x1a, 0x44, 0x81, 0x3c, 0x0f, 0xfd, 0x84, 0xeb, 0x26, 0x37, 0x60, 0xf4, 0x81, 0xf3, 0x78, 0x99, + 0xe2, 0x0b, 0xc2, 0x3c, 0x5d, 0x13, 0x37, 0xbf, 0x9c, 0xc7, 0x76, 0xec, 0xf6, 0xb2, 0x12, 0x1c, + 0x75, 0xb3, 0x59, 0xf8, 0x98, 0x9b, 0x4d, 0x13, 0x86, 0xef, 0xf9, 0x4d, 0x57, 0x2c, 0x4e, 0xe2, + 0xdc, 0x62, 0x0f, 0x21, 0x96, 0x28, 0x31, 0x7f, 0x68, 0xc0, 0x44, 0xdc, 0x62, 0x6c, 0xc2, 0x27, + 0xde, 0x25, 0x57, 0x60, 0x04, 0x2b, 0x8a, 0x5f, 0x47, 0xc2, 0x45, 0xa3, 0xc9, 0x40, 0xb6, 0xe7, + 0x5a, 0xb2, 0x50, 0xed, 0x89, 0xa1, 0x8f, 0xd7, 0x13, 0xe6, 0x3f, 0xc1, 0x23, 0x11, 0xf5, 0x2b, + 0xd9, 0x4a, 0xa4, 0x34, 0xc4, 0x18, 0xb0, 0x21, 0xb9, 0x27, 0x36, 0x24, 0xf9, 0xbe, 0x43, 0xf2, + 0x8d, 0x1c, 0x8c, 0xc5, 0x8d, 0xfd, 0x94, 0x25, 0x11, 0x88, 0xbf, 0x6b, 0xa0, 0x10, 0xfa, 0xba, + 0xa2, 0x2b, 0x44, 0xa4, 0xfa, 0x7b, 0x30, 0x2c, 0x26, 0x93, 0x91, 0x3a, 0x17, 0x4c, 0x8d, 0x6e, + 0xf2, 0xc6, 0x34, 0x0e, 0x68, 0x68, 0x09, 0x3a, 0xbc, 0xa3, 0xb0, 0x45, 0xb7, 0xc5, 0x09, 0xd9, + 0x53, 0xbb, 0x46, 0x65, 0xdf, 0x51, 0x48, 0x3e, 0x6c, 0xa0, 0xd5, 0xe9, 0x1f, 0x14, 0xa0, 0x9c, + 0x26, 0x39, 0x39, 0x4d, 0xc3, 0x5a, 0x77, 0x5b, 0x3c, 0xd0, 0x81, 0x69, 0x1a, 0x3a, 0xdd, 0x6d, + 0x8b, 0xc1, 0xc8, 0x15, 0x28, 0xac, 0x05, 0xde, 0x43, 0xfc, 0x6a, 0xf1, 0x3e, 0x49, 0x27, 0xf0, + 0x1e, 0xaa, 0xc1, 0xba, 0xac, 0x1c, 0x37, 0xb4, 0xcb, 0x75, 0xe5, 0x79, 0x7f, 0xbe, 0xa1, 0x6d, + 0x86, 0xe9, 0x7c, 0x40, 0x12, 0x8d, 0x2d, 0x95, 0x35, 0xea, 0x04, 0x22, 0xa5, 0x80, 0x50, 0x67, + 0xb8, 0x54, 0x6e, 0x23, 0x98, 0x27, 0xfb, 0xb5, 0x54, 0x24, 0xd2, 0x04, 0xa2, 0xfc, 0x94, 0x13, + 0xf8, 0xe4, 0x3d, 0x9e, 0x7c, 0x57, 0x6b, 0x46, 0x65, 0x6d, 0xab, 0xb3, 0x39, 0x83, 0xef, 0x93, + 0xf4, 0x11, 0xae, 0xc1, 0x28, 0xba, 0xbc, 0xd0, 0x91, 0x51, 0x3c, 0x91, 0x99, 0x0c, 0x8c, 0x06, + 0x8c, 0x27, 0xb0, 0x63, 0x77, 0x46, 0xc2, 0x84, 0xbc, 0x03, 0x63, 0x6a, 0x34, 0x2f, 0x8f, 0x39, + 0xbd, 0xc4, 0xef, 0x8f, 0xf5, 0xc9, 0x9b, 0xa7, 0x12, 0x98, 0x9f, 0x55, 0xa5, 0x44, 0x2c, 0xda, + 0xc7, 0x4a, 0x89, 0xf9, 0x2b, 0x68, 0xc6, 0xb7, 0xfc, 0x88, 0x0a, 0xeb, 0xe5, 0xa9, 0xd5, 0x63, + 0x89, 0x0b, 0x79, 0x48, 0x8b, 0x69, 0xd1, 0xbe, 0xee, 0x14, 0x0f, 0xdb, 0xff, 0xb6, 0x01, 0x67, + 0x33, 0x69, 0xc9, 0x75, 0x80, 0xc4, 0x46, 0x14, 0xbd, 0xc4, 0xb3, 0x28, 0xc7, 0x50, 0x4b, 0xc1, + 0x20, 0x5f, 0x49, 0x5b, 0x77, 0x27, 0x2f, 0x4e, 0xf2, 0xad, 0x91, 0x09, 0xdd, 0xba, 0xcb, 0xb0, + 0xe9, 0xcc, 0xdf, 0xcd, 0xc3, 0x54, 0xcf, 0x1b, 0x95, 0x27, 0x44, 0x11, 0xec, 0xa7, 0x5e, 0x40, + 0xe3, 0xc7, 0x1d, 0xd7, 0xfa, 0xbd, 0x90, 0x99, 0xf1, 0x1e, 0x1a, 0xba, 0xc5, 0x44, 0x02, 0xef, + 0x13, 0x9e, 0x45, 0x0b, 0xb3, 0xdf, 0xce, 0x7b, 0xa5, 0x6f, 0x6d, 0x4f, 0xe0, 0x0d, 0xbd, 0xbf, + 0xc6, 0x4f, 0x8c, 0xfd, 0x4a, 0x0e, 0xa6, 0x7b, 0xbe, 0xf9, 0xa9, 0x9d, 0x75, 0xef, 0x69, 0xab, + 0xdb, 0x73, 0xfd, 0xc6, 0x74, 0x20, 0x2b, 0xe2, 0x7f, 0x19, 0x70, 0xbe, 0x0f, 0x25, 0x39, 0x48, + 0x0b, 0x11, 0xb7, 0x2a, 0x6e, 0x1e, 0x5f, 0xe1, 0x13, 0x11, 0xa5, 0x4f, 0x4c, 0x12, 0xbe, 0x9e, + 0x03, 0xd8, 0xa2, 0xdb, 0x4f, 0x77, 0x0e, 0xaa, 0xcf, 0x6b, 0x02, 0xa0, 0x38, 0x30, 0x07, 0x4f, + 0x41, 0xb5, 0x8a, 0x8e, 0xc4, 0xc1, 0x13, 0x50, 0xc5, 0xef, 0xa9, 0xe4, 0xb2, 0xdf, 0x53, 0x31, + 0xb7, 0x61, 0xe6, 0x2e, 0x8d, 0x92, 0x95, 0x50, 0xee, 0x21, 0x8f, 0x67, 0xfb, 0x2a, 0x8c, 0x0a, + 0x7c, 0x3d, 0x37, 0xbe, 0x0c, 0x89, 0xf3, 0x5c, 0x2b, 0x41, 0x30, 0x29, 0x9c, 0x5f, 0xa0, 0x4d, + 0x1a, 0xd1, 0x4f, 0xb6, 0x9a, 0x3a, 0x10, 0xfe, 0x29, 0xfc, 0x99, 0x8d, 0x81, 0x6a, 0x38, 0xb1, + 0x7f, 0x36, 0xe1, 0x6c, 0xdc, 0xf6, 0x27, 0xc9, 0xf7, 0x06, 0xb3, 0x25, 0xc4, 0x85, 0xc8, 0x84, + 0xe3, 0x31, 0x4e, 0xc4, 0xc7, 0x70, 0x51, 0x12, 0x6c, 0x79, 0xf1, 0x49, 0xcc, 0x40, 0xb4, 0xe4, + 0x2d, 0x18, 0x53, 0x68, 0xc4, 0xb5, 0x6e, 0x3c, 0xed, 0x7c, 0xe4, 0x45, 0x7b, 0x76, 0xc8, 0xe1, + 0xea, 0x69, 0xa7, 0x82, 0x6e, 0x7e, 0x19, 0x9e, 0x89, 0xe3, 0x56, 0x32, 0xaa, 0x4e, 0x31, 0x37, + 0x4e, 0xc7, 0x7c, 0x25, 0xf9, 0xac, 0xa5, 0x76, 0x1c, 0x01, 0x2f, 0x79, 0x13, 0xf5, 0xb3, 0xc4, + 0xc7, 0x5c, 0x52, 0x72, 0xf3, 0x89, 0xb5, 0x28, 0x01, 0x98, 0x6f, 0x2a, 0x8d, 0xcd, 0x60, 0xa8, + 0x11, 0x1b, 0x69, 0xe2, 0xaf, 0xe7, 0x60, 0x72, 0x75, 0x69, 0x61, 0x3e, 0x76, 0x23, 0x7f, 0xca, + 0x12, 0x64, 0x69, 0xdf, 0xd6, 0x5f, 0xdf, 0x98, 0x1b, 0x30, 0x9d, 0xea, 0x06, 0x7c, 0x45, 0xe8, + 0x1d, 0x1e, 0x5f, 0x12, 0x83, 0xe5, 0xca, 0x72, 0x2e, 0x8b, 0xfd, 0xe6, 0x2d, 0x2b, 0x85, 0x6d, + 0xfe, 0x8b, 0x91, 0x14, 0x5f, 0xa1, 0xc2, 0x5e, 0x85, 0xd1, 0xa5, 0x30, 0xec, 0xd2, 0x60, 0xc3, + 0x5a, 0x56, 0x6d, 0x44, 0x0f, 0x81, 0x76, 0x37, 0x68, 0x5a, 0x09, 0x02, 0x79, 0x19, 0x8a, 0xe2, + 0x12, 0x9e, 0xd4, 0x09, 0x78, 0x5c, 0x1e, 0xdf, 0xe1, 0xb3, 0xe2, 0x62, 0xf2, 0x3a, 0x94, 0xf8, + 0xff, 0x5c, 0xda, 0x44, 0x87, 0xa3, 0xaf, 0x4a, 0xa0, 0x73, 0xe9, 0xb4, 0x34, 0x34, 0xf2, 0x12, + 0x8c, 0xc9, 0x67, 0x4a, 0x59, 0x8b, 0xb8, 0x07, 0x50, 0xdc, 0xd2, 0x50, 0x4b, 0xc8, 0x35, 0xc8, + 0x57, 0xe7, 0x2d, 0x35, 0x07, 0xb8, 0xd3, 0x08, 0x78, 0x0e, 0x7d, 0xed, 0xf9, 0xaf, 0xea, 0xbc, + 0x45, 0xe6, 0xa0, 0x88, 0xcf, 0xbb, 0xb8, 0x34, 0x10, 0xa1, 0xae, 0x28, 0x2a, 0x1d, 0x01, 0x53, + 0x8f, 0x1b, 0x25, 0x1e, 0xb9, 0x01, 0x23, 0x0b, 0x5e, 0xd8, 0x69, 0x3a, 0x07, 0x22, 0x1d, 0x0e, + 0x9e, 0x80, 0xb8, 0x1c, 0xa4, 0x0a, 0x97, 0xc0, 0x22, 0x2f, 0xc3, 0x50, 0xbd, 0xe1, 0x77, 0xd8, + 0x16, 0x2b, 0x8e, 0x67, 0x09, 0x19, 0x40, 0x4b, 0x76, 0xc1, 0x00, 0x78, 0x19, 0x9c, 0xdf, 0x69, + 0x1b, 0x55, 0x2e, 0x83, 0xa7, 0xef, 0xb2, 0x09, 0x9c, 0xde, 0x88, 0x43, 0x78, 0x92, 0x11, 0x87, + 0xdb, 0x70, 0xfe, 0x2e, 0xda, 0xf7, 0x75, 0x1a, 0x60, 0x06, 0x52, 0xfe, 0x54, 0xd4, 0x86, 0xb5, + 0x24, 0xee, 0xf1, 0xe1, 0xad, 0x2a, 0xbe, 0x05, 0xb0, 0x43, 0x8e, 0x23, 0x5f, 0x99, 0x4a, 0xbd, + 0x8f, 0xd1, 0x8f, 0x11, 0xf9, 0x22, 0xcc, 0x64, 0x15, 0x89, 0x1b, 0x7d, 0x18, 0xcc, 0x9e, 0x5d, + 0x81, 0x1a, 0x4d, 0x9e, 0xc5, 0x81, 0x2c, 0x43, 0x99, 0xc3, 0xab, 0x6e, 0xcb, 0x6b, 0x2f, 0xb6, + 0x1c, 0xaf, 0x89, 0xf7, 0xfb, 0xc4, 0x25, 0x4d, 0xc1, 0xd5, 0x61, 0x85, 0x36, 0x65, 0xa5, 0x5a, + 0x48, 0x52, 0x8a, 0x92, 0x7c, 0xdb, 0x80, 0x92, 0x22, 0x63, 0xa1, 0xb8, 0x76, 0xd0, 0xef, 0xcd, + 0x91, 0xf5, 0x27, 0xf4, 0xe6, 0x48, 0x49, 0x3e, 0xd6, 0x8b, 0xd3, 0x4d, 0x6b, 0x01, 0xaa, 0xc5, + 0x7a, 0xf5, 0xc1, 0x72, 0x32, 0xb7, 0x3f, 0x5d, 0xe7, 0x57, 0xda, 0xb7, 0x1d, 0x73, 0x7e, 0xb5, + 0x01, 0xd3, 0xa9, 0x6e, 0x90, 0x6a, 0x51, 0x03, 0xa7, 0xd5, 0x62, 0x8a, 0xc6, 0x4a, 0x61, 0x9b, + 0xff, 0x75, 0x38, 0xc5, 0x57, 0xf8, 0xac, 0x4c, 0x18, 0xe6, 0x5a, 0x4f, 0x4d, 0xe1, 0xc7, 0x75, + 0xa2, 0x25, 0x4a, 0xc8, 0x05, 0xc8, 0xd7, 0xeb, 0xab, 0x6a, 0x82, 0xd1, 0x30, 0xf4, 0x2d, 0x06, + 0x63, 0x23, 0x84, 0xee, 0x28, 0xe5, 0xaa, 0x5b, 0x83, 0x06, 0x91, 0x78, 0x4f, 0xf7, 0xc5, 0x44, + 0xb5, 0x14, 0x92, 0xfe, 0x16, 0xaa, 0x25, 0x51, 0x28, 0xf3, 0x30, 0x5b, 0x0d, 0x43, 0x1a, 0x44, + 0xfc, 0x55, 0x84, 0xb0, 0xdb, 0xa2, 0x81, 0x10, 0x7f, 0xa1, 0xf6, 0xf8, 0x6b, 0xfc, 0x8d, 0xd0, + 0xea, 0x8b, 0x48, 0xae, 0x42, 0xb1, 0xda, 0x75, 0x3d, 0xda, 0x6e, 0x68, 0x51, 0xfe, 0x8e, 0x80, + 0x59, 0x71, 0x29, 0xf9, 0x00, 0xce, 0x0a, 0x22, 0xa9, 0x03, 0x45, 0x0f, 0x70, 0xf5, 0xc7, 0x77, + 0xd2, 0x62, 0x7a, 0x4a, 0xcd, 0x69, 0x8b, 0x2e, 0xc9, 0xa6, 0x24, 0x55, 0x28, 0x2f, 0xe2, 0x79, + 0xad, 0x7c, 0x55, 0xdb, 0x0f, 0x44, 0xf6, 0x6b, 0x54, 0xa6, 0xfc, 0x2c, 0xd7, 0x76, 0xe3, 0x42, + 0xab, 0x07, 0x9d, 0xdc, 0x87, 0xe9, 0x34, 0x8c, 0xad, 0x0b, 0xa3, 0xc9, 0xab, 0x77, 0x3d, 0x5c, + 0x70, 0x16, 0x65, 0x51, 0x91, 0x6d, 0x98, 0xaa, 0x46, 0x51, 0xe0, 0x6d, 0x77, 0x23, 0x9a, 0xd2, + 0xa6, 0xd2, 0xe1, 0x19, 0x97, 0x4b, 0x8d, 0xfa, 0x8c, 0x10, 0xc6, 0x69, 0x27, 0xa6, 0x8c, 0xb5, + 0xaa, 0xd5, 0xcb, 0x8e, 0xb8, 0xf1, 0xc3, 0x99, 0xe2, 0x71, 0x49, 0x71, 0x35, 0x4b, 0x3a, 0x96, + 0xab, 0xe1, 0x41, 0xab, 0x45, 0xa3, 0x00, 0x23, 0x08, 0xf0, 0xf1, 0x49, 0x53, 0xc4, 0x22, 0x5d, + 0x54, 0xde, 0x8b, 0xc5, 0x07, 0x46, 0xb5, 0x30, 0x4d, 0x8d, 0xa7, 0xb6, 0xa2, 0x95, 0x06, 0x5c, + 0xd1, 0x9a, 0x30, 0xb5, 0xd8, 0x6e, 0x04, 0x07, 0x78, 0x47, 0x54, 0x36, 0x6e, 0xfc, 0x84, 0xc6, + 0xc9, 0x97, 0x65, 0x2e, 0x39, 0x52, 0xc2, 0xb2, 0x9a, 0xd7, 0xcb, 0xd8, 0xfc, 0x1b, 0x50, 0x4e, + 0xf7, 0xe5, 0xc7, 0x7c, 0x2d, 0xfc, 0x34, 0x21, 0xe2, 0x6c, 0xa4, 0xd3, 0xdf, 0x42, 0x6e, 0x68, + 0x4f, 0x42, 0x1b, 0x49, 0x0a, 0x03, 0xe5, 0xf1, 0x66, 0xed, 0x21, 0x68, 0x39, 0x8d, 0x73, 0x59, + 0xd3, 0xd8, 0xfc, 0x85, 0x1c, 0x4c, 0xf1, 0xa8, 0xd6, 0xa7, 0xdf, 0x66, 0x7d, 0x47, 0x53, 0xce, + 0xd2, 0x27, 0x99, 0xfa, 0xba, 0x63, 0xac, 0xd6, 0xaf, 0xc2, 0xd9, 0x9e, 0xae, 0x40, 0x05, 0xbd, + 0x20, 0xe3, 0x89, 0x7b, 0x54, 0xf4, 0x6c, 0x76, 0x25, 0x9b, 0xb7, 0xac, 0x1e, 0x0a, 0xf3, 0x1f, + 0xe5, 0x7a, 0xf8, 0x0b, 0xfb, 0x55, 0xb5, 0x48, 0x8d, 0xd3, 0x59, 0xa4, 0xb9, 0xc1, 0x2c, 0xd2, + 0x39, 0xdd, 0x22, 0xcd, 0x27, 0x67, 0x05, 0xda, 0xb2, 0xad, 0x19, 0xa7, 0x1f, 0xc0, 0xf8, 0x3a, + 0x75, 0x98, 0x91, 0x25, 0xae, 0xed, 0x15, 0xb4, 0xe7, 0x9a, 0x59, 0x99, 0xd4, 0x2f, 0xf1, 0x95, + 0xdf, 0x88, 0x11, 0x30, 0xd5, 0xc2, 0xef, 0xf1, 0x59, 0x3a, 0x07, 0x75, 0xd1, 0x18, 0xea, 0xbf, + 0x68, 0x98, 0x01, 0x8c, 0xd5, 0xeb, 0xab, 0x5b, 0x4e, 0xc0, 0xb4, 0x45, 0xc8, 0xac, 0x58, 0x19, + 0xae, 0x6a, 0x24, 0x8a, 0xb7, 0x37, 0x4e, 0x55, 0x62, 0x31, 0xc5, 0x22, 0x89, 0x45, 0x68, 0x07, + 0x8f, 0xcc, 0x13, 0x30, 0x2d, 0x32, 0x4f, 0xc0, 0xcc, 0x7f, 0x58, 0x80, 0x32, 0x0f, 0xc1, 0x64, + 0xfb, 0x6f, 0x91, 0xa7, 0xa8, 0xe7, 0xbd, 0x0a, 0xe3, 0xf4, 0xef, 0x55, 0x7c, 0x84, 0x58, 0x5f, + 0xe5, 0x4e, 0x78, 0x7e, 0x80, 0x3b, 0xe1, 0x6f, 0x68, 0x17, 0xaa, 0x0b, 0xc9, 0x83, 0xa8, 0xfb, + 0xdd, 0x6d, 0x7a, 0xfc, 0x55, 0xea, 0xdb, 0xea, 0xcd, 0xe7, 0xa1, 0x24, 0x0a, 0x06, 0x29, 0x8f, + 0xb9, 0xf3, 0x1c, 0x6b, 0xb1, 0xe1, 0xd3, 0xc4, 0xbd, 0x8f, 0xfc, 0x7f, 0x8d, 0x7b, 0x5f, 0x04, + 0x50, 0x92, 0xd7, 0x14, 0x93, 0x77, 0x51, 0x4f, 0x4e, 0x5c, 0xa3, 0x10, 0x9a, 0xff, 0xa1, 0x0c, + 0x53, 0xf5, 0xfa, 0xea, 0x82, 0xe7, 0xec, 0xb6, 0xfd, 0x30, 0xf2, 0x1a, 0x4b, 0xed, 0x1d, 0x9f, + 0x4d, 0xe1, 0x75, 0x1a, 0x46, 0x77, 0x9a, 0xfe, 0x23, 0x35, 0x06, 0x3b, 0xa2, 0x61, 0x64, 0xef, + 0x34, 0xfd, 0x47, 0x56, 0x5c, 0xcc, 0x96, 0x88, 0xc5, 0x20, 0x88, 0x9f, 0x60, 0xc1, 0x25, 0x82, + 0x32, 0x80, 0xc5, 0xe1, 0x6c, 0x96, 0xd4, 0xbb, 0x3c, 0x0b, 0x09, 0xcf, 0x78, 0x87, 0xb3, 0x24, + 0xe4, 0x20, 0x4b, 0x96, 0x11, 0xda, 0x2b, 0xb0, 0x42, 0x6b, 0x9e, 0xd7, 0xa2, 0xe7, 0x93, 0x62, + 0xf1, 0x96, 0x1f, 0x42, 0x71, 0x74, 0xed, 0x0e, 0xc2, 0xd5, 0xfd, 0x44, 0xcf, 0x1c, 0x38, 0x80, + 0xb3, 0xcc, 0xb8, 0x3c, 0xb5, 0xcd, 0x71, 0x4d, 0xe8, 0x04, 0x13, 0xef, 0x6d, 0x64, 0x18, 0x1e, + 0xea, 0x33, 0x0d, 0x99, 0x35, 0x90, 0x5f, 0x30, 0xe0, 0xd9, 0xcc, 0x92, 0x78, 0x76, 0x8f, 0x69, + 0x37, 0x18, 0x14, 0xa5, 0x81, 0x99, 0x5b, 0x5e, 0xe9, 0x57, 0xb5, 0x9d, 0xa1, 0x0a, 0x8e, 0xaf, + 0x89, 0xfc, 0x1b, 0x03, 0xce, 0x6b, 0x18, 0x98, 0xf2, 0xb1, 0x45, 0xdb, 0x91, 0x7c, 0xc0, 0xbc, + 0x8f, 0x5c, 0x7f, 0xf8, 0x64, 0xe4, 0xfa, 0x79, 0xfd, 0x5b, 0x78, 0x5a, 0x6c, 0xac, 0x5e, 0xdd, + 0xbc, 0xf6, 0x69, 0x21, 0xf9, 0x49, 0x98, 0xc2, 0x22, 0x69, 0xff, 0x30, 0x99, 0x45, 0xb3, 0xa9, + 0x54, 0x9b, 0xfb, 0xfe, 0x61, 0x65, 0x5c, 0x2b, 0xc0, 0xeb, 0x8d, 0x58, 0x5b, 0x6c, 0x2e, 0x79, + 0xed, 0x1d, 0x5f, 0x4b, 0xf1, 0x9a, 0x66, 0x46, 0xfe, 0x9d, 0x01, 0xb3, 0x0c, 0xca, 0x1b, 0x7c, + 0x27, 0xf0, 0x5b, 0x71, 0xb9, 0xdc, 0x82, 0xf6, 0xe9, 0xa0, 0xe6, 0x93, 0xe9, 0xa0, 0x17, 0xb1, + 0xc9, 0x7c, 0xf6, 0xdb, 0x3b, 0x81, 0xdf, 0x4a, 0x9a, 0xaf, 0x65, 0x4d, 0xe9, 0xd7, 0x48, 0xf2, + 0xf3, 0x06, 0x5c, 0xd0, 0xb6, 0x51, 0xea, 0xe5, 0xc0, 0xd9, 0x49, 0xcd, 0x5f, 0xa1, 0x16, 0xd5, + 0xae, 0x0b, 0x49, 0xbf, 0x82, 0x2d, 0x48, 0xd6, 0x05, 0x6c, 0x8b, 0xdd, 0xe2, 0x58, 0x4a, 0x13, + 0xfa, 0xd7, 0x42, 0x3c, 0x98, 0x42, 0x07, 0x97, 0xe6, 0x2a, 0x99, 0xe9, 0xef, 0x2a, 0xb9, 0x22, + 0xaa, 0x7e, 0x0e, 0x2f, 0x60, 0xf5, 0xf7, 0x97, 0xf4, 0x72, 0x25, 0x3f, 0x03, 0x17, 0x7a, 0x80, + 0xf1, 0xbc, 0x3a, 0xdb, 0x77, 0x5e, 0xbd, 0x72, 0x74, 0x58, 0x79, 0x29, 0xab, 0xb6, 0xac, 0x39, + 0xd5, 0xbf, 0x06, 0x72, 0x1f, 0x20, 0x29, 0x9c, 0x3d, 0x87, 0xa2, 0xf8, 0x8a, 0x90, 0x04, 0xa5, + 0x84, 0xe9, 0x67, 0xa5, 0x36, 0x75, 0x19, 0x4b, 0x90, 0xc8, 0x2a, 0x94, 0x94, 0x6b, 0x66, 0x07, + 0xb3, 0xe7, 0x39, 0xbb, 0xef, 0x1f, 0x56, 0x34, 0x38, 0xdb, 0xfd, 0xa9, 0x37, 0xd5, 0x54, 0x17, + 0x98, 0x86, 0x48, 0xfe, 0xc0, 0x80, 0x19, 0x06, 0x48, 0x04, 0x45, 0x34, 0x74, 0xf6, 0x38, 0x49, + 0xde, 0x7b, 0x32, 0x92, 0xfc, 0x19, 0x6c, 0xa3, 0x2a, 0xc9, 0x3d, 0x1f, 0x9f, 0xd9, 0x38, 0x94, + 0x60, 0xcd, 0x3f, 0xaa, 0x49, 0xf0, 0x85, 0x01, 0x24, 0x98, 0x77, 0xf5, 0xc9, 0x12, 0xdc, 0xb7, + 0x16, 0xb2, 0x0e, 0x25, 0x61, 0xe4, 0xf2, 0x0e, 0x7b, 0x4e, 0xbb, 0xbf, 0xa2, 0x16, 0xf1, 0xdd, + 0xb8, 0xb8, 0x6f, 0xd7, 0xf3, 0x85, 0x1a, 0x17, 0xd2, 0x86, 0x69, 0xfe, 0x5b, 0xb7, 0x48, 0x2b, + 0x7d, 0x2d, 0xd2, 0xab, 0xe2, 0x8b, 0x2e, 0x0b, 0xfe, 0x29, 0xc3, 0x54, 0xa9, 0x28, 0x8b, 0x31, + 0x71, 0x60, 0x52, 0x80, 0xfd, 0x7d, 0xca, 0xb5, 0xe5, 0x65, 0x2d, 0x66, 0x2b, 0x55, 0xca, 0x13, + 0xd8, 0xc8, 0xba, 0x30, 0x38, 0x26, 0xa5, 0x32, 0xd3, 0xfc, 0xcc, 0x6f, 0x18, 0x3d, 0x75, 0x90, + 0x57, 0xc5, 0x13, 0xf9, 0x4a, 0xd8, 0x39, 0x3a, 0xb2, 0x39, 0x47, 0x0c, 0x3e, 0x4f, 0x10, 0x98, + 0x9d, 0xa0, 0x86, 0xe0, 0xe5, 0x45, 0xea, 0x51, 0x0e, 0x4a, 0x42, 0x67, 0x2a, 0xd2, 0xa7, 0x9b, + 0x4f, 0xec, 0x0d, 0xf4, 0xe9, 0x0a, 0x4f, 0xae, 0xf9, 0xf3, 0x39, 0x7d, 0xcc, 0xc8, 0x55, 0xc5, + 0x64, 0x55, 0x82, 0x00, 0xa5, 0xc9, 0xaa, 0x18, 0xaa, 0xbf, 0x6d, 0xc0, 0xf4, 0x6a, 0xb0, 0xeb, + 0xb4, 0xbd, 0x9f, 0xe2, 0x57, 0x04, 0x7c, 0xec, 0xc7, 0xf8, 0x58, 0xf6, 0x13, 0x4d, 0x11, 0xe0, + 0x2b, 0x15, 0xb3, 0xa1, 0xc5, 0x31, 0xb6, 0xb2, 0xda, 0x83, 0xc7, 0x69, 0xd8, 0x30, 0x25, 0x53, + 0x03, 0x47, 0xe7, 0x70, 0xf3, 0x9b, 0x39, 0x18, 0x53, 0xe4, 0x87, 0x7c, 0x0e, 0x4a, 0x2a, 0x1f, + 0x35, 0x10, 0x59, 0xad, 0xd6, 0xd2, 0xb0, 0xf0, 0xc6, 0x00, 0x75, 0x5a, 0xea, 0x5e, 0x9b, 0xd5, + 0x62, 0x21, 0xf4, 0x94, 0x56, 0xfd, 0xbb, 0x19, 0x56, 0xfd, 0xa9, 0xd2, 0x24, 0xbd, 0xd5, 0x6b, + 0xdb, 0x0f, 0x9e, 0xd5, 0xc8, 0xfc, 0xa5, 0x1c, 0x94, 0xd7, 0x83, 0x6e, 0x18, 0x51, 0x57, 0xc6, + 0x4d, 0x7c, 0xba, 0xde, 0x5e, 0xd4, 0x3f, 0xee, 0x98, 0xc8, 0xc0, 0xc2, 0xaf, 0xfe, 0x66, 0xe5, + 0x8c, 0xf9, 0x25, 0x98, 0x49, 0x77, 0x07, 0xfa, 0x06, 0xaa, 0x30, 0xa9, 0xc3, 0xd3, 0x97, 0xa6, + 0xd3, 0x54, 0x56, 0x1a, 0xdf, 0xfc, 0x93, 0x5c, 0x9a, 0xb7, 0x70, 0xe0, 0xb2, 0x09, 0x8e, 0x4f, + 0x61, 0xcb, 0x7b, 0x9d, 0x22, 0xb7, 0x30, 0x82, 0x2c, 0x59, 0x76, 0x9a, 0xeb, 0xf3, 0xf1, 0xb1, + 0x72, 0x3e, 0xfb, 0x58, 0x99, 0xdc, 0x86, 0x12, 0x86, 0xca, 0x57, 0x5d, 0x37, 0x60, 0x1b, 0x90, + 0x42, 0x92, 0x46, 0xf8, 0x11, 0xdd, 0xb6, 0x79, 0x48, 0xbd, 0xe3, 0xba, 0x81, 0xa5, 0xe1, 0x91, + 0x79, 0x98, 0xd1, 0x6e, 0x66, 0x48, 0xfa, 0xa1, 0xc4, 0x41, 0x15, 0x61, 0x01, 0x27, 0xce, 0x44, + 0xc6, 0x4c, 0xfa, 0x7e, 0x93, 0xed, 0x20, 0x70, 0x5f, 0xa9, 0xa7, 0x60, 0x95, 0x9a, 0x5d, 0x86, + 0x6b, 0x11, 0x4c, 0x3f, 0xd4, 0x72, 0x3a, 0x5a, 0x46, 0x2f, 0x8e, 0x68, 0xfe, 0x85, 0xc1, 0xe6, + 0x5a, 0x63, 0xff, 0x53, 0x76, 0xb1, 0x9f, 0x7d, 0xd2, 0x31, 0xe7, 0x0b, 0xff, 0xd9, 0xe0, 0x57, + 0x73, 0x85, 0xf8, 0xbc, 0x01, 0xc3, 0xfc, 0xe1, 0x6d, 0x71, 0x89, 0x54, 0xe5, 0xc2, 0x0b, 0x92, + 0xd0, 0x3c, 0xfe, 0x7c, 0xb7, 0x25, 0x08, 0x54, 0x97, 0x4b, 0x6e, 0x20, 0x97, 0x8b, 0xf2, 0x2e, + 0xc8, 0x60, 0xef, 0x4d, 0x19, 0x27, 0xbf, 0x0b, 0x62, 0xfe, 0xdf, 0x1c, 0xff, 0x1e, 0xd1, 0xa8, + 0x41, 0x33, 0xd1, 0x5f, 0x81, 0x02, 0x93, 0x03, 0x35, 0xdd, 0x3f, 0x93, 0x15, 0xed, 0x89, 0x41, + 0xbf, 0x89, 0xae, 0x58, 0xd4, 0xb5, 0x6a, 0x2e, 0x09, 0x54, 0xc7, 0xea, 0xbc, 0x41, 0x0c, 0x7c, + 0xcd, 0xc9, 0x77, 0xa9, 0x3a, 0x1d, 0xda, 0xfa, 0xc3, 0x5b, 0x58, 0x4e, 0x6e, 0x2b, 0x57, 0x3a, + 0xd5, 0x63, 0xdd, 0xd6, 0x8e, 0x63, 0xf3, 0xab, 0x84, 0xaa, 0xb6, 0x4d, 0x6e, 0x7f, 0x2e, 0xc2, + 0x84, 0x9e, 0x68, 0x4a, 0x9c, 0x73, 0x60, 0x72, 0x98, 0x54, 0x92, 0x2a, 0xd5, 0xa3, 0xae, 0x13, + 0x91, 0x1a, 0x8c, 0x6b, 0xd9, 0x84, 0xd4, 0x47, 0x50, 0x78, 0xf6, 0x52, 0xbb, 0x37, 0x0d, 0x9e, + 0x4e, 0xa2, 0xc4, 0x0a, 0x7d, 0x16, 0xca, 0x62, 0x66, 0xc6, 0x69, 0x3d, 0xd0, 0x9b, 0xbc, 0xb4, + 0x60, 0xa9, 0xb3, 0xa9, 0xe1, 0xb9, 0x81, 0x85, 0x50, 0xf3, 0xbb, 0x06, 0x5c, 0x10, 0x0f, 0x8a, + 0x5b, 0x34, 0x8c, 0x02, 0x8f, 0x67, 0x09, 0x41, 0x79, 0xfc, 0x1c, 0x79, 0x4b, 0x26, 0x46, 0xd6, + 0x15, 0x64, 0xba, 0x8e, 0xda, 0xb8, 0x10, 0xca, 0x21, 0x4c, 0x8d, 0x2c, 0x13, 0x22, 0xbf, 0x21, + 0x12, 0x22, 0xe7, 0x8e, 0x27, 0x8e, 0xe7, 0x85, 0x4b, 0xdb, 0x32, 0x11, 0xf2, 0x77, 0x72, 0x70, + 0x36, 0xa3, 0x59, 0x9b, 0x9f, 0x7b, 0x4a, 0x95, 0x43, 0x4d, 0x53, 0x0e, 0x32, 0x63, 0x7e, 0xdf, + 0x8e, 0xcf, 0xd4, 0x15, 0xbf, 0x6e, 0xc0, 0x79, 0x5d, 0x7a, 0xc4, 0xf1, 0xd7, 0xe6, 0x2d, 0xf2, + 0x26, 0x0c, 0xdf, 0xa3, 0x8e, 0x4b, 0xe5, 0xed, 0xf3, 0xb3, 0xa9, 0x67, 0x42, 0x78, 0x21, 0x67, + 0xfb, 0x27, 0x7c, 0x2a, 0x9f, 0xb1, 0x04, 0x09, 0x59, 0x10, 0x8d, 0xe3, 0x26, 0xa0, 0x29, 0x83, + 0xd4, 0xb2, 0xaa, 0x3a, 0xc6, 0x17, 0xff, 0xdb, 0x06, 0x3c, 0x73, 0x0c, 0x0d, 0x1b, 0x38, 0x36, + 0xf4, 0xea, 0xc0, 0xe1, 0xc2, 0x82, 0x50, 0xf2, 0x0e, 0x4c, 0xae, 0x0b, 0x13, 0x52, 0x0e, 0x87, + 0xf2, 0xba, 0x9a, 0xb4, 0x2e, 0x6d, 0x39, 0x2e, 0x69, 0x64, 0x66, 0x00, 0xdf, 0xf3, 0xc3, 0xa8, + 0x9d, 0x64, 0xfa, 0x44, 0x03, 0x78, 0x4f, 0xc0, 0xac, 0xb8, 0x94, 0x99, 0x05, 0x7a, 0x33, 0x45, + 0x24, 0xf8, 0xf3, 0x30, 0xcc, 0x70, 0x62, 0x87, 0x3e, 0xca, 0x01, 0x3e, 0x77, 0xed, 0xb9, 0x96, + 0x28, 0x8a, 0x8f, 0x92, 0x72, 0x99, 0x01, 0x5b, 0xdf, 0x34, 0xa0, 0xac, 0xf3, 0xfe, 0xb8, 0x43, + 0xf3, 0xb6, 0x36, 0x34, 0xcf, 0x64, 0x0f, 0x4d, 0xff, 0x31, 0xe9, 0x49, 0xba, 0x37, 0xd0, 0x58, + 0x98, 0x30, 0xbc, 0xe0, 0xb7, 0x1c, 0xaf, 0xad, 0x26, 0x8a, 0x73, 0x11, 0x62, 0x89, 0x12, 0xa5, + 0xb7, 0xf2, 0x7d, 0x7b, 0xcb, 0xfc, 0x76, 0x01, 0x2e, 0x58, 0x74, 0xd7, 0x63, 0x06, 0xd2, 0x46, + 0xe8, 0xb5, 0x77, 0xb5, 0x70, 0x3a, 0x33, 0xd5, 0xe1, 0xe2, 0x12, 0x11, 0x83, 0xc4, 0xfd, 0xfd, + 0x32, 0x14, 0x99, 0x96, 0x56, 0xfa, 0x1c, 0x9d, 0xb4, 0x98, 0xee, 0x94, 0x8f, 0xab, 0x2c, 0x26, + 0xd7, 0xc4, 0x1a, 0xa2, 0x5c, 0xf3, 0x64, 0x6b, 0xc8, 0x8f, 0x0e, 0x2b, 0xc0, 0x9f, 0x37, 0x62, + 0xa5, 0x62, 0x1d, 0x89, 0x8d, 0xaa, 0x42, 0x1f, 0xa3, 0xea, 0x01, 0xcc, 0x54, 0x5d, 0xae, 0x9f, + 0x9c, 0xe6, 0x5a, 0xe0, 0xb5, 0x1b, 0x5e, 0xc7, 0x69, 0x4a, 0xa3, 0x1c, 0x5d, 0xf5, 0x4e, 0x5c, + 0x6e, 0x77, 0x62, 0x04, 0x2b, 0x93, 0x8c, 0x7d, 0xc6, 0xc2, 0x4a, 0x9d, 0x67, 0xb3, 0xe4, 0xfe, + 0x77, 0xfc, 0x0c, 0xb7, 0x1d, 0xf2, 0x74, 0x96, 0x56, 0x5c, 0x8c, 0xe6, 0x1c, 0xde, 0xf4, 0x5e, + 0x5f, 0xae, 0xdf, 0x17, 0x37, 0xa7, 0xe5, 0x2d, 0x14, 0x7e, 0x31, 0x3c, 0x6a, 0x86, 0x78, 0x64, + 0xa8, 0xe1, 0x25, 0x74, 0xf5, 0xfa, 0x3d, 0x46, 0x57, 0xec, 0xa1, 0x0b, 0xc3, 0x3d, 0x95, 0x8e, + 0xe3, 0x91, 0x1b, 0x00, 0x3c, 0x8e, 0x1f, 0x05, 0x62, 0x34, 0x31, 0xfe, 0x02, 0x84, 0x72, 0xe3, + 0x4f, 0x41, 0x21, 0x6f, 0xc1, 0xf4, 0xe2, 0xfc, 0x9c, 0xf4, 0xbb, 0x2c, 0xf8, 0x8d, 0x6e, 0x8b, + 0xb6, 0x23, 0xbc, 0xa2, 0x5f, 0xe2, 0x63, 0x48, 0x1b, 0x73, 0x4c, 0x0a, 0xb2, 0xd0, 0xc4, 0xc5, + 0x68, 0x9e, 0x56, 0x63, 0xde, 0x77, 0x69, 0xb8, 0x79, 0xf3, 0x53, 0x76, 0x31, 0x5a, 0xf9, 0x36, + 0x9c, 0x6d, 0x37, 0x33, 0x67, 0xe6, 0xdf, 0xc5, 0x8b, 0xd1, 0x3d, 0xb8, 0xe4, 0xc7, 0x60, 0x08, + 0x7f, 0x8a, 0x15, 0x77, 0x3a, 0x83, 0x6d, 0xb2, 0xda, 0x36, 0x78, 0x62, 0x42, 0x24, 0x20, 0x4b, + 0xc9, 0xe3, 0x71, 0xa7, 0xb8, 0xde, 0x27, 0x72, 0xf3, 0xe8, 0xaf, 0x86, 0xba, 0x50, 0x52, 0x2b, + 0x64, 0x32, 0x72, 0xcf, 0x09, 0xf7, 0xa8, 0x8b, 0xaf, 0x99, 0xf2, 0x9b, 0xf9, 0x28, 0x23, 0x7b, + 0x08, 0xc5, 0x17, 0x4d, 0x2d, 0x05, 0x85, 0x69, 0x87, 0xa5, 0x70, 0x23, 0x14, 0x4d, 0x11, 0xbb, + 0x20, 0x0f, 0x77, 0xaf, 0xae, 0x25, 0x8a, 0x50, 0x5b, 0xca, 0x53, 0x9a, 0xc0, 0x69, 0xec, 0xd3, + 0x60, 0xf3, 0xe6, 0x27, 0xa1, 0x2d, 0xf5, 0x3a, 0x8e, 0x19, 0x93, 0xaf, 0x43, 0x9c, 0x57, 0x53, + 0x43, 0x66, 0x36, 0x62, 0x12, 0x94, 0x6c, 0x24, 0x36, 0x62, 0x12, 0x94, 0xac, 0xda, 0x88, 0x31, + 0x6a, 0xfc, 0xb2, 0x4b, 0xee, 0x84, 0x97, 0x5d, 0xfa, 0xbc, 0x62, 0x25, 0xef, 0xb3, 0x7d, 0x8a, + 0xde, 0x0d, 0xfc, 0x02, 0x94, 0xaa, 0x51, 0xe4, 0x34, 0xf6, 0xa8, 0x8b, 0x2f, 0x08, 0x29, 0x61, + 0x91, 0x8e, 0x80, 0xab, 0x1e, 0x45, 0x15, 0x57, 0x79, 0x37, 0x74, 0x64, 0x80, 0x77, 0x43, 0x6f, + 0xc0, 0xc8, 0x52, 0xfb, 0xa1, 0xc7, 0xfa, 0xa4, 0x98, 0xe4, 0xc5, 0xf3, 0x38, 0x48, 0x7f, 0x6c, + 0x12, 0x41, 0xe4, 0x0d, 0xc5, 0x82, 0x18, 0x4d, 0x4c, 0x79, 0xbe, 0xcd, 0xb2, 0xa5, 0x21, 0xa1, + 0x1e, 0xfe, 0x4a, 0x74, 0x72, 0x1b, 0x46, 0xe4, 0xee, 0x19, 0x12, 0xf3, 0x5d, 0x50, 0x3a, 0xbc, + 0x44, 0x4b, 0xc5, 0x27, 0x76, 0xcf, 0x6f, 0xe9, 0x57, 0xe7, 0xc7, 0x94, 0x94, 0x54, 0xca, 0xd5, + 0x79, 0x2d, 0x25, 0x95, 0x72, 0x89, 0x3e, 0xde, 0x0c, 0x95, 0x4e, 0xdc, 0x0c, 0x6d, 0x42, 0x69, + 0xcd, 0x09, 0x22, 0x8f, 0x2d, 0x47, 0xed, 0x88, 0xe7, 0x44, 0x4e, 0xf6, 0xea, 0x4a, 0x51, 0xf2, + 0x98, 0x5c, 0x47, 0xc1, 0xd7, 0x73, 0xfa, 0x24, 0x70, 0xb2, 0x92, 0x71, 0xb9, 0x4a, 0x3c, 0x52, + 0x80, 0x07, 0x97, 0x6a, 0x46, 0x7c, 0x5e, 0xaa, 0x9e, 0x70, 0xf4, 0xde, 0xcb, 0xba, 0xc5, 0xc7, + 0x00, 0xf7, 0x8c, 0x93, 0xc8, 0x06, 0x13, 0x2b, 0xa2, 0x5d, 0x91, 0xda, 0x38, 0xc6, 0x88, 0xe4, + 0x2b, 0x50, 0x62, 0xff, 0x63, 0x82, 0x58, 0x8f, 0xf2, 0x9c, 0xc7, 0xc9, 0x65, 0x1b, 0x7d, 0x42, + 0xf3, 0x2c, 0xb2, 0x75, 0x1a, 0xf1, 0x09, 0x8c, 0x8c, 0xd3, 0x8e, 0x17, 0x8d, 0x1b, 0x79, 0x17, + 0x4a, 0x6a, 0x82, 0xe9, 0xd9, 0xa9, 0x24, 0x2c, 0xcd, 0x15, 0xf0, 0xf4, 0x28, 0x69, 0x04, 0x6c, + 0xfd, 0xaa, 0x76, 0x3a, 0x48, 0x4b, 0x14, 0x69, 0xef, 0x74, 0xd2, 0x64, 0x12, 0x8d, 0xbc, 0x07, + 0xa5, 0x6a, 0xa7, 0x93, 0x68, 0x9c, 0x69, 0x65, 0x4b, 0xd8, 0xe9, 0xd8, 0x99, 0x5a, 0x47, 0xa3, + 0x60, 0x82, 0x25, 0x0c, 0x3e, 0xac, 0x77, 0x26, 0x11, 0x2c, 0x99, 0x36, 0x39, 0x2d, 0x58, 0x0a, + 0xba, 0xf9, 0x43, 0x03, 0xce, 0xf7, 0xe9, 0xb6, 0x81, 0x1f, 0x49, 0xbe, 0x91, 0xac, 0xc1, 0x8a, + 0x3b, 0x42, 0xac, 0xc1, 0xea, 0x47, 0xcb, 0xd5, 0x38, 0x3b, 0x41, 0x73, 0xfe, 0x13, 0x4b, 0xd0, + 0x6c, 0x1e, 0x1a, 0x30, 0xa6, 0x08, 0xf3, 0x13, 0x7c, 0x94, 0xf0, 0x8a, 0x78, 0xa9, 0x20, 0x9f, + 0xe0, 0xb5, 0x52, 0xae, 0x07, 0x7c, 0x99, 0xe0, 0xab, 0x00, 0xcb, 0x4e, 0x18, 0x55, 0x1b, 0x91, + 0xf7, 0x90, 0x0e, 0xa0, 0xb9, 0x93, 0xb4, 0x6c, 0x0e, 0xbe, 0x6d, 0xc2, 0xc8, 0x7a, 0xd2, 0xb2, + 0xc5, 0x0c, 0xcd, 0x15, 0x18, 0xae, 0xfb, 0x41, 0x54, 0x3b, 0xe0, 0xcb, 0xf1, 0x02, 0x0d, 0x1b, + 0xaa, 0x53, 0xd2, 0x43, 0xf7, 0x44, 0xc3, 0x12, 0x45, 0xcc, 0x26, 0xbe, 0xe3, 0xd1, 0xa6, 0xab, + 0x06, 0x39, 0xec, 0x30, 0x80, 0xc5, 0xe1, 0xd7, 0xde, 0x85, 0x49, 0x29, 0xd8, 0xeb, 0xcb, 0x75, + 0xfc, 0x82, 0x49, 0x18, 0xdb, 0x5c, 0xb4, 0x96, 0xee, 0x7c, 0xc9, 0xbe, 0xb3, 0xb1, 0xbc, 0x5c, + 0x3e, 0x43, 0xc6, 0x61, 0x54, 0x00, 0xe6, 0xab, 0x65, 0x83, 0x94, 0xa0, 0xb8, 0xb4, 0x52, 0x5f, + 0x9c, 0xdf, 0xb0, 0x16, 0xcb, 0xb9, 0x6b, 0x2f, 0xc2, 0x44, 0x12, 0xe5, 0x86, 0xe7, 0x21, 0x23, + 0x90, 0xb7, 0xaa, 0x5b, 0xe5, 0x33, 0x04, 0x60, 0x78, 0xed, 0xfe, 0x7c, 0xfd, 0xe6, 0xcd, 0xb2, + 0x71, 0xed, 0xb3, 0x30, 0x85, 0x8e, 0xca, 0x65, 0xb6, 0x6f, 0x68, 0xd3, 0x00, 0x6b, 0x2a, 0x41, + 0xb1, 0x4e, 0x3b, 0x4e, 0xe0, 0x44, 0x94, 0x57, 0xf3, 0xa0, 0xdb, 0x8c, 0xbc, 0x4e, 0x93, 0x3e, + 0x2e, 0x1b, 0xd7, 0xde, 0x80, 0x49, 0xcb, 0xef, 0x46, 0x5e, 0x7b, 0x57, 0xbe, 0xea, 0x42, 0xce, + 0xc2, 0xd4, 0xc6, 0x4a, 0xf5, 0x41, 0x6d, 0xe9, 0xee, 0xc6, 0xea, 0x46, 0xdd, 0x7e, 0x50, 0x5d, + 0x9f, 0xbf, 0x57, 0x3e, 0xc3, 0x1a, 0xfc, 0x60, 0xb5, 0xbe, 0x6e, 0x5b, 0x8b, 0xf3, 0x8b, 0x2b, + 0xeb, 0x65, 0xe3, 0xda, 0x2f, 0x1a, 0x30, 0xa1, 0x3f, 0xc0, 0x4f, 0x2e, 0xc3, 0xa5, 0x8d, 0xfa, + 0xa2, 0x65, 0xaf, 0xaf, 0xde, 0x5f, 0x5c, 0xb1, 0x37, 0xea, 0xd5, 0xbb, 0x8b, 0xf6, 0xc6, 0x4a, + 0x7d, 0x6d, 0x71, 0x7e, 0xe9, 0xce, 0xd2, 0xe2, 0x42, 0xf9, 0x0c, 0xa9, 0xc0, 0x33, 0x0a, 0x86, + 0xb5, 0x38, 0xbf, 0xba, 0xb9, 0x68, 0xd9, 0x6b, 0xd5, 0x7a, 0x7d, 0x6b, 0xd5, 0x5a, 0x28, 0x1b, + 0xe4, 0x22, 0x9c, 0xcb, 0x40, 0x78, 0x70, 0xa7, 0x5a, 0xce, 0xf5, 0x94, 0xad, 0x2c, 0x6e, 0x55, + 0x97, 0xed, 0xda, 0xea, 0x7a, 0x39, 0x7f, 0xed, 0x5d, 0x66, 0x78, 0x25, 0x4f, 0x57, 0x92, 0x22, + 0x14, 0x56, 0x56, 0x57, 0x16, 0xcb, 0x67, 0xc8, 0x18, 0x8c, 0xac, 0x2d, 0xae, 0x2c, 0x2c, 0xad, + 0xdc, 0xe5, 0xdd, 0x5a, 0x5d, 0x5b, 0xb3, 0x56, 0x37, 0x17, 0x17, 0xca, 0x39, 0xd6, 0x77, 0x0b, + 0x8b, 0x2b, 0xac, 0x65, 0xf9, 0x6b, 0x26, 0x7f, 0x35, 0x49, 0x7b, 0x11, 0x83, 0xf5, 0xd6, 0xe2, + 0x17, 0xd7, 0x17, 0x57, 0xea, 0x4b, 0xab, 0x2b, 0xe5, 0x33, 0xd7, 0x2e, 0xa5, 0x70, 0xe4, 0x48, + 0xd4, 0xeb, 0xf7, 0xca, 0x67, 0xae, 0x7d, 0x05, 0x4a, 0xaa, 0xdd, 0x41, 0xce, 0xc3, 0xb4, 0xfa, + 0x7b, 0x8d, 0xb6, 0x5d, 0xaf, 0xbd, 0x5b, 0x3e, 0x93, 0x2e, 0xb0, 0xba, 0xed, 0x36, 0x2b, 0xc0, + 0x8f, 0x57, 0x0b, 0xd6, 0x69, 0xd0, 0xf2, 0xda, 0xcc, 0xa4, 0x28, 0xe7, 0x6a, 0xe5, 0xef, 0xfd, + 0xd9, 0x73, 0x67, 0xbe, 0xf7, 0x83, 0xe7, 0x8c, 0x3f, 0xf9, 0xc1, 0x73, 0xc6, 0xff, 0xfc, 0xc1, + 0x73, 0xc6, 0xf6, 0x30, 0x0a, 0xfa, 0xad, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x22, 0xe3, + 0x82, 0xd5, 0xc8, 0x00, 0x00, } func (m *KeepAlive) Marshal() (dAtA []byte, err error) { @@ -19174,6 +19184,16 @@ func (m *OIDCConnectorSpecV3) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size := m.RedirectURLs.Size() + i -= size + if _, err := m.RedirectURLs.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 if len(m.GoogleAdminEmail) > 0 { i -= len(m.GoogleAdminEmail) copy(dAtA[i:], m.GoogleAdminEmail) @@ -20641,12 +20661,12 @@ func (m *LockSpecV2) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if m.Expires != nil { - n184, err184 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err184 != nil { - return 0, err184 + n185, err185 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err185 != nil { + return 0, err185 } - i -= n184 - i = encodeVarintTypes(dAtA, i, uint64(n184)) + i -= n185 + i = encodeVarintTypes(dAtA, i, uint64(n185)) i-- dAtA[i] = 0x1a } @@ -21327,12 +21347,12 @@ func (m *RecoveryCodesSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n194, err194 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) - if err194 != nil { - return 0, err194 + n195, err195 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err195 != nil { + return 0, err195 } - i -= n194 - i = encodeVarintTypes(dAtA, i, uint64(n194)) + i -= n195 + i = encodeVarintTypes(dAtA, i, uint64(n195)) i-- dAtA[i] = 0x12 if len(m.Codes) > 0 { @@ -21598,21 +21618,21 @@ func (m *SessionTrackerSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n197, err197 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err197 != nil { - return 0, err197 - } - i -= n197 - i = encodeVarintTypes(dAtA, i, uint64(n197)) - i-- - dAtA[i] = 0x2a - n198, err198 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + n198, err198 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) if err198 != nil { return 0, err198 } i -= n198 i = encodeVarintTypes(dAtA, i, uint64(n198)) i-- + dAtA[i] = 0x2a + n199, err199 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Created):]) + if err199 != nil { + return 0, err199 + } + i -= n199 + i = encodeVarintTypes(dAtA, i, uint64(n199)) + i-- dAtA[i] = 0x22 if m.State != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.State)) @@ -21715,12 +21735,12 @@ func (m *Participant) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n199, err199 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) - if err199 != nil { - return 0, err199 + n200, err200 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastActive, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastActive):]) + if err200 != nil { + return 0, err200 } - i -= n199 - i = encodeVarintTypes(dAtA, i, uint64(n199)) + i -= n200 + i = encodeVarintTypes(dAtA, i, uint64(n200)) i-- dAtA[i] = 0x22 if len(m.Mode) > 0 { @@ -25800,6 +25820,8 @@ func (m *OIDCConnectorSpecV3) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + l = m.RedirectURLs.Size() + n += 1 + l + sovTypes(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -54057,6 +54079,39 @@ func (m *OIDCConnectorSpecV3) Unmarshal(dAtA []byte) error { } m.GoogleAdminEmail = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedirectURLs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RedirectURLs.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/api/types/types.proto b/api/types/types.proto index 75bec33768f7f..ff6fb33970444 100644 --- a/api/types/types.proto +++ b/api/types/types.proto @@ -2556,7 +2556,9 @@ message OIDCConnectorSpecV3 { // RedirectURL is a URL that will redirect the client's browser // back to the identity provider after successful authentication. // This should match the URL on the Provider's side. - string RedirectURL = 4 [ (gogoproto.jsontag) = "redirect_url" ]; + // + // DELETE IN 11.0.0 in favor of RedirectURLs + string RedirectURL = 4 [ (gogoproto.jsontag) = "-" ]; // ACR is an Authentication Context Class Reference value. The meaning of the ACR // value is context-specific and varies for identity providers. string ACR = 5 [ (gogoproto.jsontag) = "acr_values,omitempty" ]; @@ -2579,6 +2581,16 @@ message OIDCConnectorSpecV3 { string GoogleServiceAccount = 12 [ (gogoproto.jsontag) = "google_service_account,omitempty" ]; // GoogleAdminEmail is the email of a google admin to impersonate. string GoogleAdminEmail = 13 [ (gogoproto.jsontag) = "google_admin_email,omitempty" ]; + // RedirectURLs is a list of callback URLs which the identity provider can use + // to redirect the client back to the Teleport Proxy to complete authentication. + // This list should match the URLs on the provider's side. The URL used for a + // given auth request will be chosen to match the requesting Proxy's public + // address. If there is no match, the first url in the list will be used. + wrappers.StringValues RedirectURLs = 14 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "redirect_url", + (gogoproto.customtype) = "github.com/gravitational/teleport/api/types/wrappers.Strings" + ]; } // SAMLConnectorV2 represents a SAML connector. diff --git a/lib/utils/uri.go b/api/utils/uri.go similarity index 93% rename from lib/utils/uri.go rename to api/utils/uri.go index 6afa5658539a7..f3161215f41a8 100644 --- a/lib/utils/uri.go +++ b/api/utils/uri.go @@ -19,8 +19,6 @@ package utils import ( "net/url" - "github.com/gravitational/teleport" - "github.com/gravitational/trace" ) @@ -35,7 +33,7 @@ func ParseSessionsURI(in string) (*url.URL, error) { return nil, trace.BadParameter("failed to parse URI %q: %v", in, err) } if u.Scheme == "" { - u.Scheme = teleport.SchemeFile + u.Scheme = "file" } return u, nil } diff --git a/api/utils/uri_test.go b/api/utils/uri_test.go new file mode 100644 index 0000000000000..8cb4c4aeb4509 --- /dev/null +++ b/api/utils/uri_test.go @@ -0,0 +1,45 @@ +/* +Copyright 2022 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "net/url" + "testing" + + "github.com/stretchr/testify/require" +) + +// TestParseSessionsURI parses sessions URI +func TestParseSessionsURI(t *testing.T) { + t.Parallel() + testCases := []struct { + info string + in string + url *url.URL + }{ + {info: "local default file system URI", in: "/home/log", url: &url.URL{Scheme: "file", Path: "/home/log"}}, + {info: "explicit filesystem URI", in: "file:///home/log", url: &url.URL{Scheme: "file", Path: "/home/log"}}, + {info: "other scheme", in: "other://my-bucket", url: &url.URL{Scheme: "other", Host: "my-bucket"}}, + } + for _, testCase := range testCases { + t.Run(testCase.info, func(t *testing.T) { + out, err := ParseSessionsURI(testCase.in) + require.NoError(t, err) + require.Equal(t, testCase.url, out) + }) + } +} diff --git a/e b/e index e407f7ad7d79d..39e02ffd6a3b7 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit e407f7ad7d79d6db068487fc145d31f3d44c6637 +Subproject commit 39e02ffd6a3b7aed87f250c3d2309e39df36c866 diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 3b03f8d700d33..1b9a0b7d6eebb 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -311,7 +311,8 @@ var ( // - same for users and their sessions // - checks public keys to see if they're signed by it (can be trusted or not) type Server struct { - lock sync.RWMutex + lock sync.RWMutex + // oidcClients is a map from authID & proxyAddr -> oidcClient oidcClients map[string]*oidcClient samlProviders map[string]*samlProvider githubClients map[string]*githubClient @@ -3709,9 +3710,13 @@ const ( // oidcClient is internal structure that stores OIDC client and its config type oidcClient struct { - client *oidc.Client - config oidc.ClientConfig - cancel context.CancelFunc + client *oidc.Client + connector types.OIDCConnector + // syncCtx controls the provider sync goroutine. + syncCtx context.Context + syncCancel context.CancelFunc + // firstSync will be closed once the first provider sync succeeds + firstSync chan struct{} } // samlProvider is internal structure that stores SAML client and its config @@ -3726,28 +3731,6 @@ type githubClient struct { config oauth2.Config } -// oidcConfigsEqual returns true if the provided OIDC configs are equal -func oidcConfigsEqual(a, b oidc.ClientConfig) bool { - if a.RedirectURL != b.RedirectURL { - return false - } - if a.Credentials.ID != b.Credentials.ID { - return false - } - if a.Credentials.Secret != b.Credentials.Secret { - return false - } - if len(a.Scope) != len(b.Scope) { - return false - } - for i := range a.Scope { - if a.Scope[i] != b.Scope[i] { - return false - } - } - return true -} - // oauth2ConfigsEqual returns true if the provided OAuth2 configs are equal func oauth2ConfigsEqual(a, b oauth2.Config) bool { if a.Credentials.ID != b.Credentials.ID { diff --git a/lib/auth/auth_test.go b/lib/auth/auth_test.go index edea65e88ec02..7cace6a788525 100644 --- a/lib/auth/auth_test.go +++ b/lib/auth/auth_test.go @@ -953,13 +953,17 @@ func TestOIDCConnectorCRUDEventsEmitted(t *testing.T) { ctx := context.Background() // test oidc create event - oidc, err := types.NewOIDCConnector("test", types.OIDCConnectorSpecV3{ClientID: "a", ClaimsToRoles: []types.ClaimMapping{ - { - Claim: "dummy", - Value: "dummy", - Roles: []string{"dummy"}, + oidc, err := types.NewOIDCConnector("test", types.OIDCConnectorSpecV3{ + ClientID: "a", + ClaimsToRoles: []types.ClaimMapping{ + { + Claim: "dummy", + Value: "dummy", + Roles: []string{"dummy"}, + }, }, - }}) + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, + }) require.NoError(t, err) err = s.a.UpsertOIDCConnector(ctx, oidc) require.NoError(t, err) diff --git a/lib/auth/auth_with_roles_test.go b/lib/auth/auth_with_roles_test.go index 3f5affabe363b..f4c5d2df2852f 100644 --- a/lib/auth/auth_with_roles_test.go +++ b/lib/auth/auth_with_roles_test.go @@ -518,7 +518,7 @@ func TestOIDCAuthRequest(t *testing.T) { IssuerURL: "https://gitlab.com", ClientID: "example-client-id", ClientSecret: "example-client-secret", - RedirectURL: "https://localhost:3080/v1/webapi/oidc/callback", + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, Display: "sign in with example.com", Scope: []string{"foo", "bar"}, ClaimsToRoles: []types.ClaimMapping{ @@ -535,14 +535,25 @@ func TestOIDCAuthRequest(t *testing.T) { require.NoError(t, err) reqNormal := services.OIDCAuthRequest{ConnectorID: conn.GetName(), Type: constants.OIDC} - reqTest := services.OIDCAuthRequest{ConnectorID: conn.GetName(), Type: constants.OIDC, SSOTestFlow: true, ConnectorSpec: &types.OIDCConnectorSpecV3{ - IssuerURL: "https://gitlab.com", - ClientID: "example-client-id", - ClientSecret: "example-client-secret", - RedirectURL: "https://localhost:3080/v1/webapi/oidc/callback", - Display: "sign in with example.com", - Scope: []string{"foo", "bar"}, - }} + reqTest := services.OIDCAuthRequest{ + ConnectorID: conn.GetName(), + Type: constants.OIDC, + SSOTestFlow: true, + ConnectorSpec: &types.OIDCConnectorSpecV3{ + IssuerURL: "https://gitlab.com", + ClientID: "example-client-id", + ClientSecret: "example-client-secret", + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, + Display: "sign in with example.com", + Scope: []string{"foo", "bar"}, + ClaimsToRoles: []types.ClaimMapping{ + { + Claim: "groups", + Value: "idp-admin", + Roles: []string{"access"}, + }, + }, + }} tests := []struct { desc string diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 2e8ea4eab340b..65855d64adc47 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -2257,9 +2257,6 @@ func (g *GRPCServer) UpsertOIDCConnector(ctx context.Context, oidcConnector *typ if err != nil { return nil, trace.Wrap(err) } - if err = services.ValidateOIDCConnector(oidcConnector); err != nil { - return nil, trace.Wrap(err) - } if err = auth.ServerWithRoles.UpsertOIDCConnector(ctx, oidcConnector); err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/oidc.go b/lib/auth/oidc.go index 227248fe3b4c5..25e7a257a3978 100644 --- a/lib/auth/oidc.go +++ b/lib/auth/oidc.go @@ -25,6 +25,7 @@ import ( "net/url" "time" + "github.com/google/go-cmp/cmp" "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" @@ -42,7 +43,10 @@ import ( "github.com/gravitational/trace" ) +// getOIDCConnectorAndClient returns the associated oidc connector +// and client for the given oidc auth request. func (a *Server) getOIDCConnectorAndClient(ctx context.Context, request services.OIDCAuthRequest) (types.OIDCConnector, *oidc.Client, error) { + // stateless test flow if request.SSOTestFlow { if request.ConnectorSpec == nil { return nil, nil, trace.BadParameter("ConnectorSpec cannot be nil when SSOTestFlow is true") @@ -52,18 +56,32 @@ func (a *Server) getOIDCConnectorAndClient(ctx context.Context, request services return nil, nil, trace.BadParameter("ConnectorID cannot be empty") } - // stateless test flow connector, err := types.NewOIDCConnector(request.ConnectorID, *request.ConnectorSpec) if err != nil { return nil, nil, trace.Wrap(err) } // we don't want to cache the client. construct it directly. - client, err := a.createOIDCClient(ctx, connector, false) + client, err := newOIDCClient(ctx, connector, request.ProxyAddress) if err != nil { return nil, nil, trace.Wrap(err) } - return connector, client, nil + if err := client.waitFirstSync(defaults.WebHeadersTimeout); err != nil { + return nil, nil, trace.Wrap(err) + } + + // close this request-scoped oidc client after 10 minutes + go func() { + ticker := a.GetClock().NewTicker(defaults.OIDCAuthRequestTTL) + defer ticker.Stop() + select { + case <-ticker.Chan(): + client.syncCancel() + case <-client.syncCtx.Done(): + } + }() + + return connector, client.client, nil } // regular execution flow @@ -71,101 +89,71 @@ func (a *Server) getOIDCConnectorAndClient(ctx context.Context, request services if err != nil { return nil, nil, trace.Wrap(err) } - client, err := a.getOrCreateOIDCClient(ctx, connector) + + client, err := a.getCachedOIDCClient(ctx, connector, request.ProxyAddress) if err != nil { return nil, nil, trace.Wrap(err) } - return connector, client, nil -} - -func (a *Server) getOrCreateOIDCClient(ctx context.Context, conn types.OIDCConnector) (*oidc.Client, error) { - client, err := a.getOIDCClient(conn) - if err == nil { - return client, nil - } - if !trace.IsNotFound(err) { - return nil, trace.Wrap(err) + // Wait for the client to successfully sync after getting it from the cache. + // We do this after caching the client to prevent locking the server during + // the initial sync period. + if err := client.waitFirstSync(defaults.WebHeadersTimeout); err != nil { + return nil, nil, trace.Wrap(err) } - return a.createOIDCClient(ctx, conn, true) + return connector, client.client, nil } -func (a *Server) getOIDCClient(conn types.OIDCConnector) (*oidc.Client, error) { +// getCachedOIDCClient gets a cached oidc client for +// the given OIDC connector and redirectURL preference. +func (a *Server) getCachedOIDCClient(ctx context.Context, conn types.OIDCConnector, proxyAddr string) (*oidcClient, error) { a.lock.Lock() defer a.lock.Unlock() - clientPack, ok := a.oidcClients[conn.GetName()] - if !ok { - return nil, trace.NotFound("connector %v is not found", conn.GetName()) - } + // Each connector and proxy combination has a distinct client, + // so we use a composite key to capture all combinations. + clientMapKey := conn.GetName() + "_" + proxyAddr - config := oidcConfig(conn) - if ok && oidcConfigsEqual(clientPack.config, config) { - return clientPack.client, nil + cachedClient, ok := a.oidcClients[clientMapKey] + if ok { + if !cachedClient.needsRefresh(conn) && cachedClient.syncCtx.Err() == nil { + return cachedClient, nil + } + // Cached client needs to be refreshed or is no longer syncing. + cachedClient.syncCancel() + delete(a.oidcClients, clientMapKey) } - clientPack.cancel() - delete(a.oidcClients, conn.GetName()) - return nil, trace.NotFound("connector %v has updated the configuration and is invalidated", conn.GetName()) + // Create a new oidc client and add it to the cache. + client, err := newOIDCClient(ctx, conn, proxyAddr) + if err != nil { + return nil, trace.Wrap(err) + } + a.oidcClients[clientMapKey] = client + return client, nil } -func (a *Server) createOIDCClient(ctx context.Context, conn types.OIDCConnector, rememberClient bool) (*oidc.Client, error) { - config := oidcConfig(conn) - client, err := oidc.NewClient(config) +func newOIDCClient(ctx context.Context, conn types.OIDCConnector, proxyAddr string) (*oidcClient, error) { + redirectURL, err := services.GetRedirectURL(conn, proxyAddr) if err != nil { return nil, trace.Wrap(err) } - // SyncProviderConfig doesn't take a context for cancellation, instead it - // returns a channel that has to be closed to stop the sync. To ensure that - // the sync is eventually stopped we create a child context of the server context, which - // is cancelled either on deletion of the connector or shutdown of the server. - // This will cause syncCtx.Done() to unblock, at which point we can close the stop channel. - firstSync := make(chan struct{}) - syncCtx, syncCancel := context.WithCancel(a.closeCtx) - go func() { - stop := client.SyncProviderConfig(conn.GetIssuerURL()) - close(firstSync) - <-syncCtx.Done() - close(stop) - }() - - select { - case <-firstSync: - case <-time.After(defaults.WebHeadersTimeout): - syncCancel() - return nil, trace.ConnectionProblem(nil, - "timed out syncing oidc connector %v, ensure URL %q is valid and accessible and check configuration", - conn.GetName(), conn.GetIssuerURL()) - case <-a.closeCtx.Done(): - syncCancel() - return nil, trace.ConnectionProblem(nil, "auth server is shutting down") - } - - if rememberClient { - a.lock.Lock() - defer a.lock.Unlock() - - a.oidcClients[conn.GetName()] = &oidcClient{client: client, config: config, cancel: syncCancel} - } else { - // either wait for the parent context to finish, or wait up to 10 minutes. - go func() { - select { - case <-ctx.Done(): - case <-time.After(defaults.OIDCAuthRequestTTL): - } - log.Infof("Removing OIDC test client for connector %q, URL %q", conn.GetName(), conn.GetIssuerURL()) - syncCancel() - }() + config := oidcConfig(conn, redirectURL) + client, err := oidc.NewClient(config) + if err != nil { + return nil, trace.Wrap(err) } - return client, nil + oidcClient := &oidcClient{client: client, connector: conn, firstSync: make(chan struct{})} + oidcClient.startSync(ctx) + return oidcClient, nil } -func oidcConfig(conn types.OIDCConnector) oidc.ClientConfig { +func oidcConfig(conn types.OIDCConnector, redirectURL string) oidc.ClientConfig { return oidc.ClientConfig{ - RedirectURL: conn.GetRedirectURL(), + RedirectURL: redirectURL, Credentials: oidc.ClientCredentials{ ID: conn.GetClientID(), Secret: conn.GetClientSecret(), @@ -175,6 +163,57 @@ func oidcConfig(conn types.OIDCConnector) oidc.ClientConfig { } } +// needsRefresh returns whether the client's connector and the +// given connector have the same values for fields relevant to +// generating and syncing an oidc.Client. +func (c *oidcClient) needsRefresh(conn types.OIDCConnector) bool { + return !cmp.Equal(conn.GetRedirectURLs(), c.connector.GetRedirectURLs()) || + conn.GetClientID() != c.connector.GetClientID() || + conn.GetClientSecret() != c.connector.GetClientSecret() || + !cmp.Equal(conn.GetScope(), c.connector.GetScope()) || + conn.GetIssuerURL() != c.connector.GetIssuerURL() +} + +// startSync starts a goroutine to sync the client with its provider +// config until the given ctx is closed or the sync is cancelled. +func (c *oidcClient) startSync(ctx context.Context) { + // SyncProviderConfig doesn't take a context for cancellation, instead it + // returns a channel that has to be closed to stop the sync. To ensure that the + // sync is eventually stopped, we "wrap" the stop channel with a cancel context. + c.syncCtx, c.syncCancel = context.WithCancel(ctx) + go func() { + stop := c.client.SyncProviderConfig(c.connector.GetIssuerURL()) + close(c.firstSync) + <-c.syncCtx.Done() + close(stop) + }() +} + +// waitFirstSync waits for the client to start syncing successfully, or +// returns an error if syncing fails or fails to succeed within 10 seconds. +// This prevents waiting on clients with faulty provider configurations. +func (c *oidcClient) waitFirstSync(timeout time.Duration) error { + timeoutTimer := time.NewTimer(timeout) + + select { + case <-c.firstSync: + case <-c.syncCtx.Done(): + case <-timeoutTimer.C: + // cancel sync so that it gets removed from the cache + c.syncCancel() + return trace.ConnectionProblem(nil, "timed out syncing oidc connector %v, ensure URL %q is valid and accessible and check configuration", + c.connector.GetName(), c.connector.GetIssuerURL()) + } + + // stop and flush timer + if !timeoutTimer.Stop() { + <-timeoutTimer.C + } + + // return the syncing error if there is one + return trace.Wrap(c.syncCtx.Err()) +} + // UpsertOIDCConnector creates or updates an OIDC connector. func (a *Server) UpsertOIDCConnector(ctx context.Context, connector types.OIDCConnector) error { if err := a.Identity.UpsertOIDCConnector(ctx, connector); err != nil { diff --git a/lib/auth/oidc_google.go b/lib/auth/oidc_google.go index 20a8839ca76b8..62f28e01d23a8 100644 --- a/lib/auth/oidc_google.go +++ b/lib/auth/oidc_google.go @@ -20,7 +20,7 @@ import ( "os" "github.com/gravitational/teleport/api/types" - "github.com/gravitational/teleport/lib/utils" + "github.com/gravitational/teleport/api/utils" "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" diff --git a/lib/auth/oidc_test.go b/lib/auth/oidc_test.go index ad7786728a29c..33d94f71ffd4e 100644 --- a/lib/auth/oidc_test.go +++ b/lib/auth/oidc_test.go @@ -41,6 +41,7 @@ import ( "github.com/coreos/go-oidc/jose" "github.com/coreos/go-oidc/oauth2" "github.com/coreos/go-oidc/oidc" + "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/stretchr/testify/require" directory "google.golang.org/api/admin/directory/v1" @@ -84,7 +85,7 @@ func setUpSuite(t *testing.T) *OIDCSuite { // createInsecureOIDCClient creates an insecure client for testing. func createInsecureOIDCClient(t *testing.T, connector types.OIDCConnector) *oidc.Client { - conf := oidcConfig(connector) + conf := oidcConfig(connector, "") conf.HTTPClient = &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ @@ -141,22 +142,26 @@ func TestCreateOIDCUser(t *testing.T) { // all claim information is already within the token and additional claim // information does not need to be fetched. func TestUserInfoBlockHTTP(t *testing.T) { + ctx := context.Background() s := setUpSuite(t) // Create configurable IdP to use in tests. idp := newFakeIDP(t, false /* tls */) // Create OIDC connector and client. connector, err := types.NewOIDCConnector("test-connector", types.OIDCConnectorSpecV3{ - IssuerURL: idp.s.URL, - ClientID: "00000000000000000000000000000000", - ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, }) require.NoError(t, err) - oidcClient, err := s.a.getOrCreateOIDCClient(context.Background(), connector) + + oidcClient, err := s.a.getCachedOIDCClient(ctx, connector, "") require.NoError(t, err) // Verify HTTP endpoints return trace.NotFound. - _, err = claimsFromUserInfo(oidcClient, idp.s.URL, "") + _, err = claimsFromUserInfo(oidcClient.client, idp.s.URL, "") fixtures.AssertNotFound(t, err) } @@ -168,9 +173,11 @@ func TestUserInfoBadStatus(t *testing.T) { // Create OIDC connector and client. connector, err := types.NewOIDCConnector("test-connector", types.OIDCConnectorSpecV3{ - IssuerURL: idp.s.URL, - ClientID: "00000000000000000000000000000000", - ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, }) require.NoError(t, err) oidcClient := createInsecureOIDCClient(t, connector) @@ -209,6 +216,7 @@ func TestSSODiagnostic(t *testing.T) { Roles: []string{"access"}, }, }, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, } oidcRequest := services.OIDCAuthRequest{ @@ -319,30 +327,198 @@ func TestSSODiagnostic(t *testing.T) { } // TestPingProvider confirms that the client_secret_post auth -//method was set for a oauthclient. +// method was set for a oauthclient. func TestPingProvider(t *testing.T) { + ctx := context.Background() s := setUpSuite(t) // Create configurable IdP to use in tests. idp := newFakeIDP(t, false /* tls */) + // Create and upsert oidc connector into identity + connector, err := types.NewOIDCConnector("test-connector", types.OIDCConnectorSpecV3{ + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + Provider: teleport.Ping, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, + }) + require.NoError(t, err) + err = s.a.Identity.UpsertOIDCConnector(ctx, connector) + require.NoError(t, err) + + for _, req := range []services.OIDCAuthRequest{ + { + ConnectorID: "test-connector", + }, { + SSOTestFlow: true, + ConnectorID: "test-connector", + ConnectorSpec: &types.OIDCConnectorSpecV3{ + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + Provider: teleport.Ping, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, + }, + }, + } { + t.Run(fmt.Sprintf("Test SSOFlow: %v", req.SSOTestFlow), func(t *testing.T) { + oidcConnector, oidcClient, err := s.a.getOIDCConnectorAndClient(ctx, req) + require.NoError(t, err) + + oac, err := getOAuthClient(oidcClient, oidcConnector) + require.NoError(t, err) + + // authMethod should be client secret post now + require.Equal(t, oauth2.AuthMethodClientSecretPost, oac.GetAuthMethod()) + }) + } +} + +func TestOIDCClientProviderSync(t *testing.T) { + ctx := context.Background() + // Create configurable IdP to use in tests. + idp := newFakeIDP(t, false /* tls */) + // Create OIDC connector and client. connector, err := types.NewOIDCConnector("test-connector", types.OIDCConnectorSpecV3{ - IssuerURL: idp.s.URL, - ClientID: "00000000000000000000000000000000", - ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", - Provider: teleport.Ping, + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + Provider: teleport.Ping, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, + }) + require.NoError(t, err) + + client, err := newOIDCClient(ctx, connector, "proxy.example.com") + require.NoError(t, err) + + // first sync should complete successfully + require.NoError(t, client.waitFirstSync(100*time.Millisecond)) + require.NoError(t, client.syncCtx.Err()) + + // Create OIDC client with a canceled ctx + canceledCtx, cancel := context.WithCancel(ctx) + cancel() + + client, err = newOIDCClient(canceledCtx, connector, "proxy.example.com") + require.NoError(t, err) + + // provider sync goroutine should end and first sync should fail + require.ErrorIs(t, client.syncCtx.Err(), context.Canceled) + err = client.waitFirstSync(100 * time.Millisecond) + require.Error(t, err) + require.ErrorIs(t, err, context.Canceled) + + // Create OIDC connector and client without an issuer URL for provider syncing + connectorNoIssuer, err := types.NewOIDCConnector("test-connector", types.OIDCConnectorSpecV3{ + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + Provider: teleport.Ping, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, }) require.NoError(t, err) - oidcClient, err := s.a.getOrCreateOIDCClient(context.Background(), connector) + timeoutCtx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + client, err = newOIDCClient(timeoutCtx, connectorNoIssuer, "proxy.example.com") require.NoError(t, err) - oac, err := getOAuthClient(oidcClient, connector) + // first sync should fail after the given timeout and cancel the sync goroutine. + err = client.waitFirstSync(100 * time.Millisecond) + require.Error(t, err) + require.True(t, trace.IsConnectionProblem(err)) + require.ErrorIs(t, client.syncCtx.Err(), context.Canceled) +} +func TestOIDCClientCache(t *testing.T) { + ctx := context.Background() + s := setUpSuite(t) + // Create configurable IdP to use in tests. + idp := newFakeIDP(t, false /* tls */) + connectorSpec := types.OIDCConnectorSpecV3{ + IssuerURL: idp.s.URL, + ClientID: "00000000000000000000000000000000", + ClientSecret: "0000000000000000000000000000000000000000000000000000000000000000", + Provider: teleport.Ping, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://proxy.example.com/v1/webapi/oidc/callback"}, + } + connector, err := types.NewOIDCConnector("test-connector", connectorSpec) require.NoError(t, err) - // authMethod should be client secret post now - require.Equal(t, oauth2.AuthMethodClientSecretPost, oac.GetAuthMethod()) + // Create and cache a new oidc client + client, err := s.a.getCachedOIDCClient(ctx, connector, "proxy.example.com") + require.NoError(t, err) + + // The next call should return the same client (compare memory address) + cachedClient, err := s.a.getCachedOIDCClient(ctx, connector, "proxy.example.com") + require.NoError(t, err) + require.True(t, client == cachedClient) + + // Canceling provider sync on a cached client should cause it to be replaced + client.syncCancel() + cachedClient, err = s.a.getCachedOIDCClient(ctx, connector, "proxy.example.com") + require.NoError(t, err) + require.False(t, client == cachedClient) + + // Certain changes to the connector should cause the cached client to be refreshed + originalClient := cachedClient + for _, tc := range []struct { + desc string + mutateConnector func(types.OIDCConnector) + expectNoRefresh bool + }{ + { + desc: "IssuerURL", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetIssuerURL(newFakeIDP(t, false /* tls */).s.URL) + }, + }, { + desc: "ClientID", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetClientID("11111111111111111111111111111111") + }, + }, { + desc: "ClientSecret", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetClientSecret("1111111111111111111111111111111111111111111111111111111111111111") + }, + }, { + desc: "RedirectURLs", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetRedirectURLs([]string{"https://other.example.com/v1/webapi/oidc/callback"}) + }, + }, { + desc: "Scope", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetScope([]string{"groups"}) + }, + }, { + desc: "Prompt - no refresh", + mutateConnector: func(conn types.OIDCConnector) { + conn.SetPrompt("none") + }, + expectNoRefresh: true, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + newConnector, err := types.NewOIDCConnector("test-connector", connectorSpec) + require.NoError(t, err) + tc.mutateConnector(newConnector) + + client, err = s.a.getCachedOIDCClient(ctx, newConnector, "proxy.example.com") + require.NoError(t, err) + require.True(t, (client == originalClient) == tc.expectNoRefresh) + + // reset cached client to the original client for remaining tests + originalClient, err = s.a.getCachedOIDCClient(ctx, connector, "proxy.example.com") + require.NoError(t, err) + }) + } } // fakeIDP is a configurable OIDC IdP that can be used to mock responses in diff --git a/lib/config/configuration.go b/lib/config/configuration.go index 50b18bfb761e1..d6f4902b2a932 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -849,7 +849,7 @@ func applyProxyConfig(fc *FileConfig, cfg *service.Config) error { } } if len(fc.Proxy.PublicAddr) != 0 { - addrs, err := utils.AddrsFromStrings(fc.Proxy.PublicAddr, defaults.HTTPListenPort) + addrs, err := utils.AddrsFromStrings(fc.Proxy.PublicAddr, cfg.Proxy.WebAddr.Port(defaults.HTTPListenPort)) if err != nil { return trace.Wrap(err) } diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index 14976373ee352..ff7496745e702 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -657,10 +657,6 @@ type Auth struct { // Deprecated: Remove in Teleport 2.4.1. TrustedClusters []TrustedCluster `yaml:"trusted_clusters,omitempty"` - // OIDCConnectors is a list of trusted OpenID Connect Identity providers - // Deprecated: Remove in Teleport 2.4.1. - OIDCConnectors []OIDCConnector `yaml:"oidc_connectors,omitempty"` - // DynamicConfig determines when file configuration is pushed to the backend. Setting // it here overrides defaults. // Deprecated: Remove in Teleport 2.4.1. @@ -1505,77 +1501,6 @@ type ClaimMapping struct { Roles []string `yaml:"roles,omitempty"` } -// OIDCConnector specifies configuration fo Open ID Connect compatible external -// identity provider, e.g. google in some organisation -type OIDCConnector struct { - // ID is a provider id, 'e.g.' google, used internally - ID string `yaml:"id"` - // Issuer URL is the endpoint of the provider, e.g. https://accounts.google.com - IssuerURL string `yaml:"issuer_url"` - // ClientID is id for authentication client (in our case it's our Auth server) - ClientID string `yaml:"client_id"` - // ClientSecret is used to authenticate our client and should not - // be visible to end user - ClientSecret string `yaml:"client_secret"` - // RedirectURL - Identity provider will use this URL to redirect - // client's browser back to it after successful authentication - // Should match the URL on Provider's side - RedirectURL string `yaml:"redirect_url"` - // ACR is the acr_values parameter to be sent with an authorization request. - ACR string `yaml:"acr_values,omitempty"` - // Provider is the identity provider we connect to. This field is - // only required if using acr_values. - Provider string `yaml:"provider,omitempty"` - // Display controls how this connector is displayed - Display string `yaml:"display"` - // Scope is a list of additional scopes to request from OIDC - // note that oidc and email scopes are always requested - Scope []string `yaml:"scope"` - // ClaimsToRoles is a list of mappings of claims to roles - ClaimsToRoles []ClaimMapping `yaml:"claims_to_roles"` -} - -// Parse parses config struct into services connector and checks if it's valid -func (o *OIDCConnector) Parse() (types.OIDCConnector, error) { - if o.Display == "" { - o.Display = o.ID - } - - var mappings []types.ClaimMapping - for _, c := range o.ClaimsToRoles { - var roles []string - if len(c.Roles) > 0 { - roles = append(roles, c.Roles...) - } - - mappings = append(mappings, types.ClaimMapping{ - Claim: c.Claim, - Value: c.Value, - Roles: roles, - }) - } - - connector, err := types.NewOIDCConnector(o.ID, types.OIDCConnectorSpecV3{ - IssuerURL: o.IssuerURL, - ClientID: o.ClientID, - ClientSecret: o.ClientSecret, - RedirectURL: o.RedirectURL, - Display: o.Display, - Scope: o.Scope, - ClaimsToRoles: mappings, - }) - if err != nil { - return nil, trace.Wrap(err) - } - - connector.SetACR(o.ACR) - connector.SetProvider(o.Provider) - if err := connector.CheckAndSetDefaults(); err != nil { - return nil, trace.Wrap(err) - } - return connector, nil -} - // Metrics is a `metrics_service` section of the config file: type Metrics struct { // Service is a generic service configuration section diff --git a/lib/service/service.go b/lib/service/service.go index 2ce82c1c7287a..14e46a1bd8536 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -1001,7 +1001,7 @@ func initUploadHandler(ctx context.Context, auditConfig types.ClusterAuditConfig } return handler, nil } - uri, err := utils.ParseSessionsURI(auditConfig.AuditSessionsURI()) + uri, err := apiutils.ParseSessionsURI(auditConfig.AuditSessionsURI()) if err != nil { return nil, trace.Wrap(err) } @@ -1051,7 +1051,7 @@ func initExternalLog(ctx context.Context, auditConfig types.ClusterAuditConfig, var hasNonFileLog bool var loggers []events.IAuditLog for _, eventsURI := range auditConfig.AuditEventsURIs() { - uri, err := utils.ParseSessionsURI(eventsURI) + uri, err := apiutils.ParseSessionsURI(eventsURI) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/services/identity.go b/lib/services/identity.go index 84bea93b5c438..a44d38ba121ee 100644 --- a/lib/services/identity.go +++ b/lib/services/identity.go @@ -395,7 +395,8 @@ type OIDCAuthRequest struct { // CSRFToken is associated with user web session token CSRFToken string `json:"csrf_token"` - // RedirectURL will be used by browser + // RedirectURL will be used to route the user back to a + // Teleport Proxy after the oidc login attempt in the brower. RedirectURL string `json:"redirect_url"` // PublicKey is an optional public key, users want these @@ -428,6 +429,12 @@ type OIDCAuthRequest struct { // ConnectorSpec is embedded connector spec for use in test flow. ConnectorSpec *types.OIDCConnectorSpecV3 `json:"connector_spec,omitempty"` + + // ProxyAddress is an optional address which can be used to + // find a redirect url from the OIDC connector which matches + // the address. If there is no match, the default redirect + // url will be used. + ProxyAddress string `json:"proxy_address,omitempty"` } // Check returns nil if all parameters are great, err otherwise diff --git a/lib/services/oidc.go b/lib/services/oidc.go index 46d5f7a731607..5df318160878d 100644 --- a/lib/services/oidc.go +++ b/lib/services/oidc.go @@ -22,52 +22,10 @@ import ( "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" - "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/utils" ) -// ValidateOIDCConnector validates the OIDC connector and sets default values -func ValidateOIDCConnector(oc types.OIDCConnector) error { - if err := oc.CheckAndSetDefaults(); err != nil { - return trace.Wrap(err) - } - if _, err := url.Parse(oc.GetIssuerURL()); err != nil { - return trace.BadParameter("IssuerURL: bad url: '%v'", oc.GetIssuerURL()) - } - if _, err := url.Parse(oc.GetRedirectURL()); err != nil { - return trace.BadParameter("RedirectURL: bad url: '%v'", oc.GetRedirectURL()) - } - - if oc.GetGoogleServiceAccountURI() != "" && oc.GetGoogleServiceAccount() != "" { - return trace.BadParameter("one of either google_service_account_uri or google_service_account is supported, not both") - } - - if oc.GetGoogleServiceAccountURI() != "" { - uri, err := utils.ParseSessionsURI(oc.GetGoogleServiceAccountURI()) - if err != nil { - return trace.Wrap(err) - } - if uri.Scheme != teleport.SchemeFile { - return trace.BadParameter("only %v:// scheme is supported for google_service_account_uri", teleport.SchemeFile) - } - if oc.GetGoogleAdminEmail() == "" { - return trace.BadParameter("whenever google_service_account_uri is specified, google_admin_email should be set as well, read https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority for more details") - } - } - if oc.GetGoogleServiceAccount() != "" { - if oc.GetGoogleAdminEmail() == "" { - return trace.BadParameter("whenever google_service_account is specified, google_admin_email should be set as well, read https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority for more details") - } - } - - if len(oc.GetClaimsToRoles()) == 0 { - return trace.BadParameter("claims_to_roles is empty, authorization with connector would never assign any roles") - } - - return nil -} - // GetClaimNames returns a list of claim names from the claim values func GetClaimNames(claims jose.Claims) []string { var out []string @@ -95,6 +53,52 @@ func OIDCClaimsToTraits(claims jose.Claims) map[string][]string { return traits } +// GetRedirectURL gets a redirect URL for the given connector. If the connector +// has a redirect URL which matches the host of the given Proxy address, then +// that one will be returned. Otherwise, the first URL in the list will be returned. +func GetRedirectURL(conn types.OIDCConnector, proxyAddr string) (string, error) { + if len(conn.GetRedirectURLs()) == 0 { + return "", trace.BadParameter("No redirect URLs provided") + } + + // If a specific proxyAddr wasn't provided in the oidc auth request, + // or there is only one redirect URL, use the first redirect URL. + if proxyAddr == "" || len(conn.GetRedirectURLs()) == 1 { + return conn.GetRedirectURLs()[0], nil + } + + proxyNetAddr, err := utils.ParseAddr(proxyAddr) + if err != nil { + return "", trace.Wrap(err, "invalid proxy address %v", proxyAddr) + } + + var matchingHostname string + for _, r := range conn.GetRedirectURLs() { + redirectURL, err := url.ParseRequestURI(r) + if err != nil { + return "", trace.Wrap(err) + } + + // If we have a direct host:port match, return it. + if proxyNetAddr.String() == redirectURL.Host { + return r, nil + } + + // If we have a matching host, but not port, + // save it as the best match for now. + if matchingHostname == "" && proxyNetAddr.Host() == redirectURL.Hostname() { + matchingHostname = r + } + } + + if matchingHostname != "" { + return matchingHostname, nil + } + + // No match, default to the first redirect URL. + return conn.GetRedirectURLs()[0], nil +} + // UnmarshalOIDCConnector unmarshals the OIDCConnector resource from JSON. func UnmarshalOIDCConnector(bytes []byte, opts ...MarshalOption) (types.OIDCConnector, error) { cfg, err := CollectOptions(opts) @@ -113,7 +117,7 @@ func UnmarshalOIDCConnector(bytes []byte, opts ...MarshalOption) (types.OIDCConn if err := utils.FastUnmarshal(bytes, &c); err != nil { return nil, trace.BadParameter(err.Error()) } - if err := ValidateOIDCConnector(&c); err != nil { + if err := c.CheckAndSetDefaults(); err != nil { return nil, trace.Wrap(err) } if cfg.ID != 0 { @@ -130,7 +134,7 @@ func UnmarshalOIDCConnector(bytes []byte, opts ...MarshalOption) (types.OIDCConn // MarshalOIDCConnector marshals the OIDCConnector resource to JSON. func MarshalOIDCConnector(oidcConnector types.OIDCConnector, opts ...MarshalOption) ([]byte, error) { - if err := ValidateOIDCConnector(oidcConnector); err != nil { + if err := oidcConnector.CheckAndSetDefaults(); err != nil { return nil, trace.Wrap(err) } diff --git a/lib/services/oidc_test.go b/lib/services/oidc_test.go index 12255990f56e5..76216d92a21da 100644 --- a/lib/services/oidc_test.go +++ b/lib/services/oidc_test.go @@ -21,56 +21,24 @@ import ( "github.com/coreos/go-oidc/jose" - "github.com/gravitational/teleport" + "github.com/gravitational/teleport/api/constants" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/trace" "github.com/stretchr/testify/require" ) -// Verify that an OIDC connector with no mappings produces no roles. -func TestOIDCRoleMappingEmpty(t *testing.T) { - // create a connector - oidcConnector, err := types.NewOIDCConnector("example", types.OIDCConnectorSpecV3{ - IssuerURL: "https://www.exmaple.com", - ClientID: "example-client-id", - ClientSecret: "example-client-secret", - RedirectURL: "https://localhost:3080/v1/webapi/oidc/callback", - Display: "sign in with example.com", - Scope: []string{"foo", "bar"}, - }) - require.NoError(t, err) - - // create some claims - var claims = make(jose.Claims) - claims.Add("roles", "teleport-user") - claims.Add("email", "foo@example.com") - claims.Add("nickname", "foo") - claims.Add("full_name", "foo bar") - - traits := OIDCClaimsToTraits(claims) - require.Len(t, traits, 4) - - _, roles := TraitsToRoles(oidcConnector.GetTraitMappings(), traits) - require.Len(t, roles, 0) -} - // TestOIDCRoleMapping verifies basic mapping from OIDC claims to roles. func TestOIDCRoleMapping(t *testing.T) { // create a connector oidcConnector, err := types.NewOIDCConnector("example", types.OIDCConnectorSpecV3{ - IssuerURL: "https://www.exmaple.com", - ClientID: "example-client-id", - ClientSecret: "example-client-secret", - RedirectURL: "https://localhost:3080/v1/webapi/oidc/callback", - Display: "sign in with example.com", - Scope: []string{"foo", "bar"}, - ClaimsToRoles: []types.ClaimMapping{ - { - Claim: "roles", - Value: "teleport-user", - Roles: []string{"user"}, - }, - }, + IssuerURL: "https://www.exmaple.com", + ClientID: "example-client-id", + ClientSecret: "example-client-secret", + Display: "sign in with example.com", + Scope: []string{"foo", "bar"}, + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"user"}}}, + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, }) require.NoError(t, err) @@ -89,150 +57,194 @@ func TestOIDCRoleMapping(t *testing.T) { require.Equal(t, "user", roles[0]) } -// TestOIDCUnmarshal tests unmarshal of OIDC connector +// TestOIDCUnmarshal tests UnmarshalOIDCConnector func TestOIDCUnmarshal(t *testing.T) { - input := ` - { - "kind": "oidc", - "version": "v2", - "metadata": { - "name": "google" - }, - "spec": { - "issuer_url": "https://accounts.google.com", - "client_id": "id-from-google.apps.googleusercontent.com", - "client_secret": "secret-key-from-google", - "redirect_url": "https://localhost:3080/v1/webapi/oidc/callback", - "display": "whatever", - "scope": ["roles"], - "claims_to_roles": [{ - "claim": "roles", - "value": "teleport-user", - "roles": ["dictator"] - }], - "prompt": "consent login" - } - } - ` - - oc, err := UnmarshalOIDCConnector([]byte(input)) - require.NoError(t, err) - - require.Equal(t, "google", oc.GetName()) - require.Equal(t, "https://accounts.google.com", oc.GetIssuerURL()) - require.Equal(t, "id-from-google.apps.googleusercontent.com", oc.GetClientID()) - require.Equal(t, "https://localhost:3080/v1/webapi/oidc/callback", oc.GetRedirectURL()) - require.Equal(t, "whatever", oc.GetDisplay()) - require.Equal(t, "consent login", oc.GetPrompt()) + for _, tc := range []struct { + desc string + input string + expectErr bool + expectSpec types.OIDCConnectorSpecV3 + }{ + { + desc: "basic connector", + input: `{ + "version": "v3", + "kind": "oidc", + "metadata": { + "name": "google" + }, + "spec": { + "client_id": "id-from-google.apps.googleusercontent.com", + "client_secret": "secret-key-from-google", + "display": "whatever", + "scope": ["roles"], + "prompt": "consent login", + "claims_to_roles": [ + { + "claim": "roles", + "value": "teleport-user", + "roles": ["dictator"] + } + ], + "redirect_url": "https://localhost:3080/v1/webapi/oidc/callback" + } + }`, + expectSpec: types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClientSecret: "secret-key-from-google", + Display: "whatever", + Scope: []string{"roles"}, + Prompt: "consent login", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, + }, + }, { + desc: "multiple redirect urls", + input: `{ + "version": "v3", + "kind": "oidc", + "metadata": { + "name": "google" + }, + "spec": { + "client_id": "id-from-google.apps.googleusercontent.com", + "claims_to_roles": [ + { + "claim": "roles", + "value": "teleport-user", + "roles": ["dictator"] + } + ], + "redirect_url": [ + "https://localhost:3080/v1/webapi/oidc/callback", + "https://proxy.example.com/v1/webapi/oidc/callback", + "https://other.proxy.example.com/v1/webapi/oidc/callback" + ] + } + }`, + expectSpec: types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{ + "https://localhost:3080/v1/webapi/oidc/callback", + "https://proxy.example.com/v1/webapi/oidc/callback", + "https://other.proxy.example.com/v1/webapi/oidc/callback", + }, + }, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + connector, err := UnmarshalOIDCConnector([]byte(tc.input)) + if tc.expectErr { + require.Error(t, err) + return + } + require.NoError(t, err) + + expectedConnector, err := types.NewOIDCConnector("google", tc.expectSpec) + require.NoError(t, err) + require.Equal(t, expectedConnector, connector) + }) + } } -// TestOIDCUnmarshalOmitPrompt makes sure that that setting -// prompt value to none will omit the prompt value. -func TestOIDCUnmarshalOmitPrompt(t *testing.T) { - input := ` - { - "kind": "oidc", - "version": "v2", - "metadata": { - "name": "google" - }, - "spec": { - "issuer_url": "https://accounts.google.com", - "client_id": "id-from-google.apps.googleusercontent.com", - "client_secret": "secret-key-from-google", - "redirect_url": "https://localhost:3080/v1/webapi/oidc/callback", - "display": "whatever", - "scope": ["roles"], - "prompt": "none", - "claims_to_roles": [ - { - "claim": "email", - "value": "*", - "roles": [ - "access" - ] - } - ] - } - } - ` - - oc, err := UnmarshalOIDCConnector([]byte(input)) - require.NoError(t, err) - - require.Equal(t, "google", oc.GetName()) - require.Equal(t, "https://accounts.google.com", oc.GetIssuerURL()) - require.Equal(t, "id-from-google.apps.googleusercontent.com", oc.GetClientID()) - require.Equal(t, "https://localhost:3080/v1/webapi/oidc/callback", oc.GetRedirectURL()) - require.Equal(t, "whatever", oc.GetDisplay()) - require.Equal(t, "", oc.GetPrompt()) +func TestOIDCCheckAndSetDefaults(t *testing.T) { + for _, tc := range []struct { + desc string + spec types.OIDCConnectorSpecV3 + expect func(*testing.T, types.OIDCConnector, error) + }{ + { + desc: "basic spec and defaults", + spec: types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, + }, + expect: func(t *testing.T, c types.OIDCConnector, err error) { + require.NoError(t, err) + require.Equal(t, types.V3, c.GetVersion()) + require.Equal(t, types.KindOIDCConnector, c.GetKind()) + require.Equal(t, "google", c.GetName()) + require.Equal(t, "id-from-google.apps.googleusercontent.com", c.GetClientID()) + require.Equal(t, []string{"https://localhost:3080/v1/webapi/oidc/callback"}, c.GetRedirectURLs()) + require.Equal(t, constants.OIDCPromptSelectAccount, c.GetPrompt()) + }, + }, { + desc: "omit prompt", + spec: types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{ + "https://localhost:3080/v1/webapi/oidc/callback", + "https://proxy.example.com/v1/webapi/oidc/callback", + "https://other.proxy.example.com/v1/webapi/oidc/callback", + }, + Prompt: "none", + }, + expect: func(t *testing.T, c types.OIDCConnector, err error) { + require.NoError(t, err) + require.Equal(t, "", c.GetPrompt()) + }, + }, { + desc: "invalid claims to roles", + spec: types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user"}}, + RedirectURLs: []string{ + "https://localhost:3080/v1/webapi/oidc/callback", + "https://proxy.example.com/v1/webapi/oidc/callback", + "https://other.proxy.example.com/v1/webapi/oidc/callback", + }, + Prompt: "none", + }, + expect: func(t *testing.T, c types.OIDCConnector, err error) { + require.Error(t, err) + require.True(t, trace.IsBadParameter(err)) + }, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + connector, err := types.NewOIDCConnector("google", tc.spec) + tc.expect(t, connector, err) + }) + } } -// TestOIDCUnmarshalOmitPrompt makes sure that an -// empty prompt value will default to select account. -func TestOIDCUnmarshalPromptDefault(t *testing.T) { - input := ` - { - "kind": "oidc", - "version": "v2", - "metadata": { - "name": "google" - }, - "spec": { - "issuer_url": "https://accounts.google.com", - "client_id": "id-from-google.apps.googleusercontent.com", - "client_secret": "secret-key-from-google", - "redirect_url": "https://localhost:3080/v1/webapi/oidc/callback", - "display": "whatever", - "scope": ["roles"], - "claims_to_roles": [ - { - "claim": "email", - "value": "*", - "roles": [ - "access" - ] - } - ] - } - } - ` - - oc, err := UnmarshalOIDCConnector([]byte(input)) +func TestOIDCGetRedirectURL(t *testing.T) { + conn, err := types.NewOIDCConnector("oidc", types.OIDCConnectorSpecV3{ + ClientID: "id-from-google.apps.googleusercontent.com", + ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"dictator"}}}, + RedirectURLs: []string{ + "https://proxy.example.com/v1/webapi/oidc/callback", + "https://other.example.com/v1/webapi/oidc/callback", + "https://other.example.com:443/v1/webapi/oidc/callback", + "https://other.example.com:3080/v1/webapi/oidc/callback", + "https://eu.proxy.example.com/v1/webapi/oidc/callback", + "https://us.proxy.example.com:443/v1/webapi/oidc/callback", + }, + }) require.NoError(t, err) - require.Equal(t, "google", oc.GetName()) - require.Equal(t, "https://accounts.google.com", oc.GetIssuerURL()) - require.Equal(t, "id-from-google.apps.googleusercontent.com", oc.GetClientID()) - require.Equal(t, "https://localhost:3080/v1/webapi/oidc/callback", oc.GetRedirectURL()) - require.Equal(t, "whatever", oc.GetDisplay()) - require.Equal(t, teleport.OIDCPromptSelectAccount, oc.GetPrompt()) -} - -// TestOIDCUnmarshalInvalid unmarshals and fails validation of the connector -func TestOIDCUnmarshalInvalid(t *testing.T) { - input := ` - { - "kind": "oidc", - "version": "v2", - "metadata": { - "name": "google" - }, - "spec": { - "issuer_url": "https://accounts.google.com", - "client_id": "id-from-google.apps.googleusercontent.com", - "client_secret": "secret-key-from-google", - "redirect_url": "https://localhost:3080/v1/webapi/oidc/callback", - "display": "whatever", - "scope": ["roles"], - "claims_to_roles": [{ - "claim": "roles", - "value": "teleport-user", - }] - } - } - ` - - _, err := UnmarshalOIDCConnector([]byte(input)) - require.Error(t, err) + expectedMapping := map[string]string{ + "proxy.example.com": "https://proxy.example.com/v1/webapi/oidc/callback", + "proxy.example.com:443": "https://proxy.example.com/v1/webapi/oidc/callback", + "other.example.com": "https://other.example.com/v1/webapi/oidc/callback", + "other.example.com:80": "https://other.example.com/v1/webapi/oidc/callback", + "other.example.com:443": "https://other.example.com:443/v1/webapi/oidc/callback", + "other.example.com:3080": "https://other.example.com:3080/v1/webapi/oidc/callback", + "eu.proxy.example.com": "https://eu.proxy.example.com/v1/webapi/oidc/callback", + "eu.proxy.example.com:443": "https://eu.proxy.example.com/v1/webapi/oidc/callback", + "eu.proxy.example.com:3080": "https://eu.proxy.example.com/v1/webapi/oidc/callback", + "us.proxy.example.com": "https://us.proxy.example.com:443/v1/webapi/oidc/callback", + "notfound.example.com": "https://proxy.example.com/v1/webapi/oidc/callback", + } + + for proxyAddr, redirectURL := range expectedMapping { + t.Run(proxyAddr, func(t *testing.T) { + url, err := GetRedirectURL(conn, proxyAddr) + require.NoError(t, err) + require.Equal(t, redirectURL, url) + }) + } } diff --git a/lib/utils/utils_test.go b/lib/utils/utils_test.go index 4d3378dcceb92..408c1bff28e3c 100644 --- a/lib/utils/utils_test.go +++ b/lib/utils/utils_test.go @@ -20,7 +20,6 @@ import ( "bytes" "fmt" "io" - "net/url" "os" "path/filepath" "strings" @@ -28,7 +27,6 @@ import ( "time" "github.com/google/uuid" - "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/fixtures" "github.com/stretchr/testify/require" @@ -198,27 +196,6 @@ func TestClickableURL(t *testing.T) { } } -// TestParseSessionsURI parses sessions URI -func TestParseSessionsURI(t *testing.T) { - t.Parallel() - testCases := []struct { - info string - in string - url *url.URL - }{ - {info: "local default file system URI", in: "/home/log", url: &url.URL{Scheme: teleport.SchemeFile, Path: "/home/log"}}, - {info: "explicit filesystem URI", in: "file:///home/log", url: &url.URL{Scheme: teleport.SchemeFile, Path: "/home/log"}}, - {info: "S3 URI", in: "s3://my-bucket", url: &url.URL{Scheme: teleport.SchemeS3, Host: "my-bucket"}}, - } - for _, testCase := range testCases { - t.Run(testCase.info, func(t *testing.T) { - out, err := ParseSessionsURI(testCase.in) - require.NoError(t, err) - require.Equal(t, testCase.url, out) - }) - } -} - // TestParseAdvertiseAddr tests parsing of advertise address func TestParseAdvertiseAddr(t *testing.T) { t.Parallel() diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index bc6d64b364647..ede35c1f5b07f 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -1068,6 +1068,7 @@ func (h *Handler) oidcLoginWeb(w http.ResponseWriter, r *http.Request, p httprou CreateWebSession: true, ClientRedirectURL: req.clientRedirectURL, CheckUser: true, + ProxyAddress: r.Host, }) if err != nil { logger.WithError(err).Error("Error creating auth request.") @@ -1229,6 +1230,7 @@ func (h *Handler) oidcLoginConsole(w http.ResponseWriter, r *http.Request, p htt Compatibility: req.Compatibility, RouteToCluster: req.RouteToCluster, KubernetesCluster: req.KubernetesCluster, + ProxyAddress: r.Host, }) if err != nil { logger.WithError(err).Error("Failed to create OIDC auth request.") diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index 02f22d33adf91..438effa5deba8 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -1788,7 +1788,7 @@ func TestMultipleConnectors(t *testing.T) { // create two oidc connectors, one named "foo" and another named "bar" oidcConnectorSpec := types.OIDCConnectorSpecV3{ - RedirectURL: "https://localhost:3080/v1/webapi/oidc/callback", + RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, ClientID: "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com", ClientSecret: "AAAAAAAAAAAAAAAAAAAAAAAA", IssuerURL: "https://oidc.example.com", diff --git a/tool/tsh/tsh_test.go b/tool/tsh/tsh_test.go index 1070539503eab..9b4b1d2e1b783 100644 --- a/tool/tsh/tsh_test.go +++ b/tool/tsh/tsh_test.go @@ -1448,9 +1448,9 @@ func mockConnector(t *testing.T) types.OIDCConnector { // Connector need not be functional since we are going to mock the actual // login operation. connector, err := types.NewOIDCConnector("auth.example.com", types.OIDCConnectorSpecV3{ - IssuerURL: "https://auth.example.com", - RedirectURL: "https://cluster.example.com", - ClientID: "fake-client", + IssuerURL: "https://auth.example.com", + RedirectURLs: []string{"https://cluster.example.com"}, + ClientID: "fake-client", ClaimsToRoles: []types.ClaimMapping{ { Claim: "groups",