From 29fd8db39ac979e4dcf2611fb9716ee14a632454 Mon Sep 17 00:00:00 2001 From: Prune Sebastien THOMAS Date: Fri, 17 Apr 2026 13:32:18 -0400 Subject: [PATCH] feat(appset): filtering repos by archived status #20736 (#21505) Signed-off-by: Prune Signed-off-by: Alexandre Gaudreault Co-authored-by: Alexandre Gaudreault --- applicationset/generators/scm_provider.go | 12 +- applicationset/services/scm_provider/gitea.go | 21 +- .../services/scm_provider/gitea_test.go | 584 +++++- .../services/scm_provider/github.go | 16 +- .../services/scm_provider/github_app.go | 4 +- .../services/scm_provider/github_test.go | 490 ++++- .../services/scm_provider/gitlab.go | 18 +- .../services/scm_provider/gitlab_test.go | 586 +++++- assets/swagger.json | 12 + .../applicationset/Generators-SCM-Provider.md | 9 + manifests/core-install-with-hydrator.yaml | 18 + manifests/core-install.yaml | 18 + manifests/crds/applicationset-crd.yaml | 18 + manifests/ha/install-with-hydrator.yaml | 18 + manifests/ha/install.yaml | 18 + manifests/install-with-hydrator.yaml | 18 + manifests/install.yaml | 18 + .../v1alpha1/applicationset_types.go | 6 + pkg/apis/application/v1alpha1/generated.pb.go | 1683 +++++++++-------- pkg/apis/application/v1alpha1/generated.proto | 9 + 20 files changed, 2628 insertions(+), 948 deletions(-) diff --git a/applicationset/generators/scm_provider.go b/applicationset/generators/scm_provider.go index dd7f3013c2..e5c4c555ca 100644 --- a/applicationset/generators/scm_provider.go +++ b/applicationset/generators/scm_provider.go @@ -164,7 +164,7 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error fetching Gitlab token: %w", err) } - provider, err = scm_provider.NewGitlabProvider(providerConfig.Group, token, providerConfig.API, providerConfig.AllBranches, providerConfig.IncludeSubgroups, providerConfig.WillIncludeSharedProjects(), providerConfig.Insecure, g.scmRootCAPath, providerConfig.Topic, caCerts) + provider, err = scm_provider.NewGitlabProvider(providerConfig.Group, token, providerConfig.API, providerConfig.AllBranches, providerConfig.IncludeSubgroups, providerConfig.WillIncludeSharedProjects(), providerConfig.IncludeArchivedRepos, providerConfig.Insecure, g.scmRootCAPath, providerConfig.Topic, caCerts) if err != nil { return nil, fmt.Errorf("error initializing Gitlab service: %w", err) } @@ -173,7 +173,7 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error fetching Gitea token: %w", err) } - provider, err = scm_provider.NewGiteaProvider(providerConfig.Gitea.Owner, token, providerConfig.Gitea.API, providerConfig.Gitea.AllBranches, providerConfig.Gitea.Insecure) + provider, err = scm_provider.NewGiteaProvider(providerConfig.Gitea.Owner, token, providerConfig.Gitea.API, providerConfig.Gitea.AllBranches, providerConfig.Gitea.Insecure, providerConfig.Gitea.ExcludeArchivedRepos) if err != nil { return nil, fmt.Errorf("error initializing Gitea service: %w", err) } @@ -289,9 +289,9 @@ func (g *SCMProviderGenerator) githubProvider(ctx context.Context, github *argop } if g.enableGitHubAPIMetrics { - return scm_provider.NewGithubAppProviderFor(ctx, *auth, github.Organization, github.API, github.AllBranches, httpClient) + return scm_provider.NewGithubAppProviderFor(ctx, *auth, github.Organization, github.API, github.AllBranches, github.ExcludeArchivedRepos, httpClient) } - return scm_provider.NewGithubAppProviderFor(ctx, *auth, github.Organization, github.API, github.AllBranches) + return scm_provider.NewGithubAppProviderFor(ctx, *auth, github.Organization, github.API, github.AllBranches, github.ExcludeArchivedRepos) } token, err := utils.GetSecretRef(ctx, g.client, github.TokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) @@ -300,7 +300,7 @@ func (g *SCMProviderGenerator) githubProvider(ctx context.Context, github *argop } if g.enableGitHubAPIMetrics { - return scm_provider.NewGithubProvider(github.Organization, token, github.API, github.AllBranches, httpClient) + return scm_provider.NewGithubProvider(github.Organization, token, github.API, github.AllBranches, github.ExcludeArchivedRepos, httpClient) } - return scm_provider.NewGithubProvider(github.Organization, token, github.API, github.AllBranches) + return scm_provider.NewGithubProvider(github.Organization, token, github.API, github.AllBranches, github.ExcludeArchivedRepos) } diff --git a/applicationset/services/scm_provider/gitea.go b/applicationset/services/scm_provider/gitea.go index b633d0c5ef..5d8668bb51 100644 --- a/applicationset/services/scm_provider/gitea.go +++ b/applicationset/services/scm_provider/gitea.go @@ -12,14 +12,15 @@ import ( ) type GiteaProvider struct { - client *gitea.Client - owner string - allBranches bool + client *gitea.Client + owner string + allBranches bool + excludeArchivedRepos bool } var _ SCMProviderService = &GiteaProvider{} -func NewGiteaProvider(owner, token, url string, allBranches, insecure bool) (*GiteaProvider, error) { +func NewGiteaProvider(owner, token, url string, allBranches, insecure, excludeArchivedRepos bool) (*GiteaProvider, error) { if token == "" { token = os.Getenv("GITEA_TOKEN") } @@ -40,9 +41,10 @@ func NewGiteaProvider(owner, token, url string, allBranches, insecure bool) (*Gi return nil, fmt.Errorf("error creating a new gitea client: %w", err) } return &GiteaProvider{ - client: client, - owner: owner, - allBranches: allBranches, + client: client, + owner: owner, + allBranches: allBranches, + excludeArchivedRepos: excludeArchivedRepos, }, nil } @@ -114,6 +116,11 @@ func (g *GiteaProvider) ListRepos(_ context.Context, cloneProtocol string) ([]*R for _, label := range giteaLabels { labels = append(labels, label.Name) } + + if g.excludeArchivedRepos && repo.Archived { + continue + } + repos = append(repos, &Repository{ Organization: g.owner, Repository: repo.Name, diff --git a/applicationset/services/scm_provider/gitea_test.go b/applicationset/services/scm_provider/gitea_test.go index e14c56669f..7f5096b666 100644 --- a/applicationset/services/scm_provider/gitea_test.go +++ b/applicationset/services/scm_provider/gitea_test.go @@ -100,17 +100,96 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { "mirror_interval": "", "mirror_updated": "0001-01-01T00:00:00Z", "repo_transfer": null - }]`) + }, + { + "id": 21619, + "owner": { + "id": 31480, + "login": "test-argocd", + "full_name": "", + "email": "", + "avatar_url": "https://gitea.com/avatars/22d1b1d3f61abf95951c4a958731d848", + "language": "", + "is_admin": false, + "last_login": "0001-01-01T00:00:00Z", + "created": "2022-04-06T02:28:06+08:00", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "test-argocd" + }, + "name": "another-repo", + "full_name": "test-argocd/another-repo", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "https://gitea.com/api/v1/repos/test-argocd/another-repo/languages", + "html_url": "https://gitea.com/test-argocd/another-repo", + "ssh_url": "git@gitea.com:test-argocd/another-repo.git", + "clone_url": "https://gitea.com/test-argocd/another-repo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": true, + "created_at": "2022-04-06T02:32:09+08:00", + "updated_at": "2022-04-06T02:33:12+08:00", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "default_merge_style": "merge", + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "mirror_updated": "0001-01-01T00:00:00Z", + "repo_transfer": null + } + + ]`) if err != nil { t.Fail() } - case "/api/v1/repos/test-argocd/pr-test/branches/main": + case "/api/v1/repos/test-argocd/another-repo/branches/main": _, err := io.WriteString(w, `{ "name": "main", "commit": { - "id": "72687815ccba81ef014a96201cc2e846a68789d8", + "id": "1fa33898cf84e89836863e3a5e76eee45777b4b0", "message": "initial commit\n", - "url": "https://gitea.com/test-argocd/pr-test/commit/72687815ccba81ef014a96201cc2e846a68789d8", + "url": "https://gitea.com/test-argocd/pr-test/commit/1fa33898cf84e89836863e3a5e76eee45777b4b0", "author": { "name": "Dan Molik", "email": "dan@danmolik.com", @@ -144,13 +223,209 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { if err != nil { t.Fail() } + case "/api/v1/repos/test-argocd/pr-test/branches/test": + _, err := io.WriteString(w, `{ + "name": "test", + "commit": { + "id": "28c3b329933f6fefd9b55225535123bbffec5a46", + "message": "initial commit\n", + "url": "https://gitea.com/test-argocd/pr-test/commit/28c3b329933f6fefd9b55225535123bbffec5a46", + "author": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "committer": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "verification": { + "verified": false, + "reason": "gpg.error.no_gpg_keys_found", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEXYAkwEBRpXzXgHFWlgCr7m50zBMFAmJMiqUACgkQlgCr7m50\nzBPSmQgAiVVEIxC42tuks4iGFNURrtYvypZAEIc+hJgt2kBpmdCrAphYPeAj+Wtr\n9KT7dDscCZIba2wx39HEXO2S7wNCXESvAzrA8rdfbXjR4L2miZ1urfBkEoqK5i/F\noblWGuAyjurX4KPa2ARROd0H4AXxt6gNAXaFPgZO+xXCyNKZfad/lkEP1AiPRknD\nvTTMbEkIzFHK9iVwZ9DORGpfF1wnLzxWmMfhYatZnBgFNnoeJNtFhCJo05rHBgqc\nqVZWXt1iF7nysBoXSzyx1ZAsmBr/Qerkuj0nonh0aPVa6NKJsdmeJyPX4zXXoi6E\ne/jpxX2UQJkpFezg3IjUpvE5FvIiYg==\n=3Af2\n-----END PGP SIGNATURE-----\n", + "signer": null, + "payload": "tree 64d47c7fc6e31dcf00654223ec4ab749dd0a464e\nauthor Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\ncommitter Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\n\ninitial commit\n" + }, + "timestamp": "2022-04-05T14:29:51-04:00", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + }`) + if err != nil { + t.Fail() + } + case "/api/v1/repos/test-argocd/another-repo/branches/test": + _, err := io.WriteString(w, `{ + "name": "test", + "commit": { + "id": "32cdcf613b259a9439ceabd4d1745d43f163ea70", + "message": "initial commit\n", + "url": "https://gitea.com/test-argocd/another-repo/commit/32cdcf613b259a9439ceabd4d1745d43f163ea70", + "author": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "committer": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "verification": { + "verified": false, + "reason": "gpg.error.no_gpg_keys_found", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEXYAkwEBRpXzXgHFWlgCr7m50zBMFAmJMiqUACgkQlgCr7m50\nzBPSmQgAiVVEIxC42tuks4iGFNURrtYvypZAEIc+hJgt2kBpmdCrAphYPeAj+Wtr\n9KT7dDscCZIba2wx39HEXO2S7wNCXESvAzrA8rdfbXjR4L2miZ1urfBkEoqK5i/F\noblWGuAyjurX4KPa2ARROd0H4AXxt6gNAXaFPgZO+xXCyNKZfad/lkEP1AiPRknD\nvTTMbEkIzFHK9iVwZ9DORGpfF1wnLzxWmMfhYatZnBgFNnoeJNtFhCJo05rHBgqc\nqVZWXt1iF7nysBoXSzyx1ZAsmBr/Qerkuj0nonh0aPVa6NKJsdmeJyPX4zXXoi6E\ne/jpxX2UQJkpFezg3IjUpvE5FvIiYg==\n=3Af2\n-----END PGP SIGNATURE-----\n", + "signer": null, + "payload": "tree 64d47c7fc6e31dcf00654223ec4ab749dd0a464e\nauthor Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\ncommitter Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\n\ninitial commit\n" + }, + "timestamp": "2022-04-05T14:29:51-04:00", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + }`) + if err != nil { + t.Fail() + } + case "/api/v1/repos/test-argocd/pr-test/branches/main": + _, err := io.WriteString(w, `{ + "name": "main", + "commit": { + "id": "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + "message": "initial commit\n", + "url": "https://gitea.com/test-argocd/pr-test/commit/75f6fceff80f6aaf12b65a2cf6a89190b866625b", + "author": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "committer": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "verification": { + "verified": false, + "reason": "gpg.error.no_gpg_keys_found", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEXYAkwEBRpXzXgHFWlgCr7m50zBMFAmJMiqUACgkQlgCr7m50\nzBPSmQgAiVVEIxC42tuks4iGFNURrtYvypZAEIc+hJgt2kBpmdCrAphYPeAj+Wtr\n9KT7dDscCZIba2wx39HEXO2S7wNCXESvAzrA8rdfbXjR4L2miZ1urfBkEoqK5i/F\noblWGuAyjurX4KPa2ARROd0H4AXxt6gNAXaFPgZO+xXCyNKZfad/lkEP1AiPRknD\nvTTMbEkIzFHK9iVwZ9DORGpfF1wnLzxWmMfhYatZnBgFNnoeJNtFhCJo05rHBgqc\nqVZWXt1iF7nysBoXSzyx1ZAsmBr/Qerkuj0nonh0aPVa6NKJsdmeJyPX4zXXoi6E\ne/jpxX2UQJkpFezg3IjUpvE5FvIiYg==\n=3Af2\n-----END PGP SIGNATURE-----\n", + "signer": null, + "payload": "tree 64d47c7fc6e31dcf00654223ec4ab749dd0a464e\nauthor Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\ncommitter Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\n\ninitial commit\n" + }, + "timestamp": "2022-04-05T14:29:51-04:00", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + }`) + if err != nil { + t.Fail() + } + case "/api/v1/repos/test-argocd/another-repo/branches?limit=0&page=1": + _, err := io.WriteString(w, `[{ + "name": "main", + "commit": { + "id": "1fa33898cf84e89836863e3a5e76eee45777b4b0", + "message": "initial commit\n", + "url": "https://gitea.com/test-argocd/pr-test/commit/1fa33898cf84e89836863e3a5e76eee45777b4b0", + "author": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "committer": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "verification": { + "verified": false, + "reason": "gpg.error.no_gpg_keys_found", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEXYAkwEBRpXzXgHFWlgCr7m50zBMFAmJMiqUACgkQlgCr7m50\nzBPSmQgAiVVEIxC42tuks4iGFNURrtYvypZAEIc+hJgt2kBpmdCrAphYPeAj+Wtr\n9KT7dDscCZIba2wx39HEXO2S7wNCXESvAzrA8rdfbXjR4L2miZ1urfBkEoqK5i/F\noblWGuAyjurX4KPa2ARROd0H4AXxt6gNAXaFPgZO+xXCyNKZfad/lkEP1AiPRknD\nvTTMbEkIzFHK9iVwZ9DORGpfF1wnLzxWmMfhYatZnBgFNnoeJNtFhCJo05rHBgqc\nqVZWXt1iF7nysBoXSzyx1ZAsmBr/Qerkuj0nonh0aPVa6NKJsdmeJyPX4zXXoi6E\ne/jpxX2UQJkpFezg3IjUpvE5FvIiYg==\n=3Af2\n-----END PGP SIGNATURE-----\n", + "signer": null, + "payload": "tree 64d47c7fc6e31dcf00654223ec4ab749dd0a464e\nauthor Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\ncommitter Dan Molik \u003cdan@danmolik.com\u003e 1649183391 -0400\n\ninitial commit\n" + }, + "timestamp": "2022-04-05T14:29:51-04:00", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + }, + { + "name": "test", + "commit": { + "id": "32cdcf613b259a9439ceabd4d1745d43f163ea70", + "message": "add an empty file\n", + "url": "https://gitea.com/test-argocd/pr-test/commit/32cdcf613b259a9439ceabd4d1745d43f163ea70", + "author": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "committer": { + "name": "Dan Molik", + "email": "dan@danmolik.com", + "username": "graytshirt" + }, + "verification": { + "verified": false, + "reason": "gpg.error.no_gpg_keys_found", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEXYAkwEBRpXzXgHFWlgCr7m50zBMFAmJMiugACgkQlgCr7m50\nzBN+7wgAkCHD3KfX3Ffkqv2qPwqgHNYM1bA6Hmffzhv0YeD9jWCI3tp0JulP4iFZ\ncQ7jqx9xP9tCQMSFCaijLRHaE6Js1xrVtf0OKRkbpdlvkyrIM3sQhqyQgAsISrDG\nLzSqeoQQjglzeWESYh2Tjn1CgqQNKjI6LLepSwvF1pIeV4pJpJobaEbIfTgStdzM\nWEk8o0I+EZaYqK0C0vU9N0LK/LR/jnlaHsb4OUjvk+S7lRjZwBkrsg7P/QsqtCVd\nw5nkxDiCx1J58zKMnQ7ZinJEK9A5WYdnMYc6aBn7ARgZrblXPPBkkKUhEv3ZSPeW\nKv9i4GQy838xkVSTFkHNj1+a5o6zEA==\n=JiFw\n-----END PGP SIGNATURE-----\n", + "signer": null, + "payload": "tree cdddf3e1d6a8a7e6899a044d0e1bc73bf798e2f5\nparent 72687815ccba81ef014a96201cc2e846a68789d8\nauthor Dan Molik \u003cdan@danmolik.com\u003e 1649183458 -0400\ncommitter Dan Molik \u003cdan@danmolik.com\u003e 1649183458 -0400\n\nadd an empty file\n" + }, + "timestamp": "2022-04-05T14:30:58-04:00", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + }]`) + if err != nil { + t.Fail() + } case "/api/v1/repos/test-argocd/pr-test/branches?limit=0&page=1": _, err := io.WriteString(w, `[{ "name": "main", "commit": { - "id": "72687815ccba81ef014a96201cc2e846a68789d8", + "id": "75f6fceff80f6aaf12b65a2cf6a89190b866625b", "message": "initial commit\n", - "url": "https://gitea.com/test-argocd/pr-test/commit/72687815ccba81ef014a96201cc2e846a68789d8", + "url": "https://gitea.com/test-argocd/pr-test/commit/75f6fceff80f6aaf12b65a2cf6a89190b866625b", "author": { "name": "Dan Molik", "email": "dan@danmolik.com", @@ -183,9 +458,9 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { }, { "name": "test", "commit": { - "id": "7bbaf62d92ddfafd9cc8b340c619abaec32bc09f", + "id": "28c3b329933f6fefd9b55225535123bbffec5a46", "message": "add an empty file\n", - "url": "https://gitea.com/test-argocd/pr-test/commit/7bbaf62d92ddfafd9cc8b340c619abaec32bc09f", + "url": "https://gitea.com/test-argocd/pr-test/commit/28c3b329933f6fefd9b55225535123bbffec5a46", "author": { "name": "Dan Molik", "email": "dan@danmolik.com", @@ -261,40 +536,270 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { func TestGiteaListRepos(t *testing.T) { cases := []struct { - name, proto, url string + name, proto string hasError, allBranches, includeSubgroups bool + excludeArchivedRepos bool branches []string + expectedRepos []*Repository filters []v1alpha1.SCMProviderGeneratorFilter }{ { - name: "blank protocol", - allBranches: false, - url: "git@gitea.com:test-argocd/pr-test.git", - branches: []string{"main"}, + name: "blank protocol", + allBranches: false, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"main"}, + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + RepositoryId: 21618, + Labels: []string{}, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + RepositoryId: 21619, + Labels: []string{}, + }, + }, }, { - name: "ssh protocol", - allBranches: false, - proto: "ssh", - url: "git@gitea.com:test-argocd/pr-test.git", + name: "ssh protocol", + allBranches: false, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + proto: "ssh", + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + RepositoryId: 21618, + Labels: []string{}, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + RepositoryId: 21619, + Labels: []string{}, + }, + }, }, { - name: "https protocol", - allBranches: false, - proto: "https", - url: "https://gitea.com/test-argocd/pr-test", + name: "https protocol", + allBranches: false, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + proto: "https", + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "https://gitea.com/test-argocd/pr-test", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + RepositoryId: 21618, + Labels: []string{}, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "https://gitea.com/test-argocd/another-repo", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + RepositoryId: 21619, + Labels: []string{}, + }, + }, }, { - name: "other protocol", - allBranches: false, - proto: "other", - hasError: true, + name: "other protocol", + allBranches: false, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + proto: "other", + hasError: true, + expectedRepos: []*Repository{}, }, { - name: "all branches", - allBranches: true, - url: "git@gitea.com:test-argocd/pr-test.git", - branches: []string{"main"}, + name: "all branches including archived repos", + allBranches: true, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + Labels: []string{}, + RepositoryId: 21619, + }, + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "test", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "28c3b329933f6fefd9b55225535123bbffec5a46", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "test", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "32cdcf613b259a9439ceabd4d1745d43f163ea70", + Labels: []string{}, + RepositoryId: 21619, + }, + }, + }, + { + name: "all branches", + allBranches: true, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + Labels: []string{}, + RepositoryId: 21619, + }, + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "test", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "28c3b329933f6fefd9b55225535123bbffec5a46", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "test", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "32cdcf613b259a9439ceabd4d1745d43f163ea70", + Labels: []string{}, + RepositoryId: 21619, + }, + }, + }, + { + name: "all branches", + allBranches: true, + excludeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"main"}, + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "main", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "1fa33898cf84e89836863e3a5e76eee45777b4b0", + Labels: []string{}, + RepositoryId: 21619, + }, + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "test", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "28c3b329933f6fefd9b55225535123bbffec5a46", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "another-repo", + Branch: "test", + URL: "git@gitea.com:test-argocd/another-repo.git", + SHA: "32cdcf613b259a9439ceabd4d1745d43f163ea70", + Labels: []string{}, + RepositoryId: 21619, + }, + }, + }, + { + name: "all branches with no archived repos", + allBranches: true, + excludeArchivedRepos: true, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"main"}, + expectedRepos: []*Repository{ + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "main", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "75f6fceff80f6aaf12b65a2cf6a89190b866625b", + Labels: []string{}, + RepositoryId: 21618, + }, + { + Organization: "test-argocd", + Repository: "pr-test", + Branch: "test", + URL: "git@gitea.com:test-argocd/pr-test.git", + SHA: "28c3b329933f6fefd9b55225535123bbffec5a46", + Labels: []string{}, + RepositoryId: 21618, + }, + }, }, } ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -303,26 +808,19 @@ func TestGiteaListRepos(t *testing.T) { defer ts.Close() for _, c := range cases { t.Run(c.name, func(t *testing.T) { - provider, _ := NewGiteaProvider("test-argocd", "", ts.URL, c.allBranches, false) + provider, _ := NewGiteaProvider("test-argocd", "", ts.URL, c.allBranches, false, c.excludeArchivedRepos) rawRepos, err := ListRepos(t.Context(), provider, c.filters, c.proto) + if c.hasError { require.Error(t, err) } else { require.NoError(t, err) - // Just check that this one project shows up. Not a great test but better thing nothing? repos := []*Repository{} - branches := []string{} - for _, r := range rawRepos { - if r.Repository == "pr-test" { - repos = append(repos, r) - branches = append(branches, r.Branch) - } - } + repos = append(rawRepos, repos...) + assert.NotEmpty(t, repos) - assert.Equal(t, c.url, repos[0].URL) - for _, b := range c.branches { - assert.Contains(t, branches, b) - } + assert.Len(t, repos, len(c.expectedRepos)) + assert.ElementsMatch(t, c.expectedRepos, repos) } }) } @@ -333,7 +831,7 @@ func TestGiteaHasPath(t *testing.T) { giteaMockHandler(t)(w, r) })) defer ts.Close() - host, _ := NewGiteaProvider("gitea", "", ts.URL, false, false) + host, _ := NewGiteaProvider("gitea", "", ts.URL, false, false, false) repo := &Repository{ Organization: "gitea", Repository: "go-sdk", diff --git a/applicationset/services/scm_provider/github.go b/applicationset/services/scm_provider/github.go index 6684269a60..0b90a983b0 100644 --- a/applicationset/services/scm_provider/github.go +++ b/applicationset/services/scm_provider/github.go @@ -12,14 +12,15 @@ import ( ) type GithubProvider struct { - client *github.Client - organization string - allBranches bool + client *github.Client + organization string + allBranches bool + excludeArchivedRepos bool } var _ SCMProviderService = &GithubProvider{} -func NewGithubProvider(organization string, token string, url string, allBranches bool, optionalHTTPClient ...*http.Client) (*GithubProvider, error) { +func NewGithubProvider(organization string, token string, url string, allBranches bool, excludeArchivedRepos bool, optionalHTTPClient ...*http.Client) (*GithubProvider, error) { // Undocumented environment variable to set a default token, to be used in testing to dodge anonymous rate limits. if token == "" { token = os.Getenv("GITHUB_TOKEN") @@ -45,7 +46,7 @@ func NewGithubProvider(organization string, token string, url string, allBranche return nil, err } } - return &GithubProvider{client: client, organization: organization, allBranches: allBranches}, nil + return &GithubProvider{client: client, organization: organization, allBranches: allBranches, excludeArchivedRepos: excludeArchivedRepos}, nil } func (g *GithubProvider) GetBranches(ctx context.Context, repo *Repository) ([]*Repository, error) { @@ -90,6 +91,11 @@ func (g *GithubProvider) ListRepos(ctx context.Context, cloneProtocol string) ([ default: return nil, fmt.Errorf("unknown clone protocol for GitHub %v", cloneProtocol) } + + if g.excludeArchivedRepos && githubRepo.GetArchived() { + continue + } + repos = append(repos, &Repository{ Organization: githubRepo.Owner.GetLogin(), Repository: githubRepo.GetName(), diff --git a/applicationset/services/scm_provider/github_app.go b/applicationset/services/scm_provider/github_app.go index 3863480e9d..4d09218fe7 100644 --- a/applicationset/services/scm_provider/github_app.go +++ b/applicationset/services/scm_provider/github_app.go @@ -9,11 +9,11 @@ import ( appsetutils "github.com/argoproj/argo-cd/v3/applicationset/utils" ) -func NewGithubAppProviderFor(ctx context.Context, g github_app_auth.Authentication, organization string, url string, allBranches bool, optionalHTTPClient ...*http.Client) (*GithubProvider, error) { +func NewGithubAppProviderFor(ctx context.Context, g github_app_auth.Authentication, organization string, url string, allBranches bool, excludeArchivedRepos bool, optionalHTTPClient ...*http.Client) (*GithubProvider, error) { httpClient := appsetutils.GetOptionalHTTPClient(optionalHTTPClient...) client, err := github_app.Client(ctx, g, url, organization, httpClient) if err != nil { return nil, err } - return &GithubProvider{client: client, organization: organization, allBranches: allBranches}, nil + return &GithubProvider{client: client, organization: organization, allBranches: allBranches, excludeArchivedRepos: excludeArchivedRepos}, nil } diff --git a/applicationset/services/scm_provider/github_test.go b/applicationset/services/scm_provider/github_test.go index 31c6ef8b5d..297bd14d05 100644 --- a/applicationset/services/scm_provider/github_test.go +++ b/applicationset/services/scm_provider/github_test.go @@ -122,6 +122,110 @@ func githubMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { "pull": true }, "template_repository": null + }, + { + "id": 1296270, + "node_id": "MDEwOlJlcGsddRvcnkxMjk2MjY5", + "name": "another-repo", + "full_name": "argoproj/another-repo", + "owner": { + "login": "argoproj", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://github.com/images/error/argoproj_happy.gif", + "gravatar_id": "", + "url": "https://api.github.com/users/argoproj", + "html_url": "https://github.com/argoproj", + "followers_url": "https://api.github.com/users/argoproj/followers", + "following_url": "https://api.github.com/users/argoproj/following{/other_user}", + "gists_url": "https://api.github.com/users/argoproj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/argoproj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/argoproj/subscriptions", + "organizations_url": "https://api.github.com/users/argoproj/orgs", + "repos_url": "https://api.github.com/users/argoproj/repos", + "events_url": "https://api.github.com/users/argoproj/events{/privacy}", + "received_events_url": "https://api.github.com/users/argoproj/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/argoproj/another-repo", + "description": "This your first repo!", + "fork": false, + "url": "https://api.github.com/repos/argoproj/another-repo", + "archive_url": "https://api.github.com/repos/argoproj/another-repo/{archive_format}{/ref}", + "assignees_url": "https://api.github.com/repos/argoproj/another-repo/assignees{/user}", + "blobs_url": "https://api.github.com/repos/argoproj/another-repo/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/argoproj/another-repo/branches{/branch}", + "collaborators_url": "https://api.github.com/repos/argoproj/another-repo/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/argoproj/another-repo/comments{/number}", + "commits_url": "https://api.github.com/repos/argoproj/another-repo/commits{/sha}", + "compare_url": "https://api.github.com/repos/argoproj/another-repo/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/argoproj/another-repo/contents/{path}", + "contributors_url": "https://api.github.com/repos/argoproj/another-repo/contributors", + "deployments_url": "https://api.github.com/repos/argoproj/another-repo/deployments", + "downloads_url": "https://api.github.com/repos/argoproj/another-repo/downloads", + "events_url": "https://api.github.com/repos/argoproj/another-repo/events", + "forks_url": "https://api.github.com/repos/argoproj/another-repo/forks", + "git_commits_url": "https://api.github.com/repos/argoproj/another-repo/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/argoproj/another-repo/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/argoproj/another-repo/git/tags{/sha}", + "git_url": "git:github.com/argoproj/another-repo.git", + "issue_comment_url": "https://api.github.com/repos/argoproj/another-repo/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/argoproj/another-repo/issues/events{/number}", + "issues_url": "https://api.github.com/repos/argoproj/another-repo/issues{/number}", + "keys_url": "https://api.github.com/repos/argoproj/another-repo/keys{/key_id}", + "labels_url": "https://api.github.com/repos/argoproj/another-repo/labels{/name}", + "languages_url": "https://api.github.com/repos/argoproj/another-repo/languages", + "merges_url": "https://api.github.com/repos/argoproj/another-repo/merges", + "milestones_url": "https://api.github.com/repos/argoproj/another-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/argoproj/another-repo/notifications{?since,all,participating}", + "pulls_url": "https://api.github.com/repos/argoproj/another-repo/pulls{/number}", + "releases_url": "https://api.github.com/repos/argoproj/another-repo/releases{/id}", + "ssh_url": "git@github.com:argoproj/another-repo.git", + "stargazers_url": "https://api.github.com/repos/argoproj/another-repo/stargazers", + "statuses_url": "https://api.github.com/repos/argoproj/another-repo/statuses/{sha}", + "subscribers_url": "https://api.github.com/repos/argoproj/another-repo/subscribers", + "subscription_url": "https://api.github.com/repos/argoproj/another-repo/subscription", + "tags_url": "https://api.github.com/repos/argoproj/another-repo/tags", + "teams_url": "https://api.github.com/repos/argoproj/another-repo/teams", + "trees_url": "https://api.github.com/repos/argoproj/another-repo/git/trees{/sha}", + "clone_url": "https://github.com/argoproj/another-repo.git", + "mirror_url": "git:git.example.com/argoproj/another-repo", + "hooks_url": "https://api.github.com/repos/argoproj/another-repo/hooks", + "svn_url": "https://svn.github.com/argoproj/another-repo", + "homepage": "https://github.com", + "language": null, + "forks_count": 9, + "stargazers_count": 80, + "watchers_count": 80, + "size": 108, + "default_branch": "master", + "open_issues_count": 0, + "is_template": false, + "topics": [ + "argoproj", + "atom", + "electron", + "api" + ], + "has_issues": true, + "has_projects": true, + "has_wiki": true, + "has_pages": false, + "has_downloads": true, + "archived": true, + "disabled": false, + "visibility": "public", + "pushed_at": "2011-01-26T19:06:43Z", + "created_at": "2011-01-26T19:01:12Z", + "updated_at": "2011-01-26T19:14:43Z", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "template_repository": null } ]`) if err != nil { @@ -146,12 +250,55 @@ func githubMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { } }, "protection_url": "https://api.github.com/repos/argoproj/hello-world/branches/master/protection" + }, + { + "name": "test", + "commit": { + "sha": "80a6e93f16e8093e24091b03c614362df3fb9b92", + "url": "https://api.github.com/repos/argoproj/argo-cd/commits/80a6e93f16e8093e24091b03c614362df3fb9b92" + }, + "protected": true, + "protection": { + "required_status_checks": { + "enforcement_level": "non_admins", + "contexts": [ + "ci-test", + "linter" + ] + } + }, + "protection_url": "https://api.github.com/repos/argoproj/hello-world/branches/master/protection" } ] `) if err != nil { t.Fail() } + case "/api/v3/repos/argoproj/another-repo/branches?per_page=100": + _, err := io.WriteString(w, `[ + { + "name": "main", + "commit": { + "sha": "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + "url": "https://api.github.com/repos/argoproj/another-repo/commits/19b016818bc0e0a44ddeaab345838a2a6c97fa67" + }, + "protected": true, + "protection": { + "required_status_checks": { + "enforcement_level": "non_admins", + "contexts": [ + "ci-test", + "linter" + ] + } + }, + "protection_url": "https://api.github.com/repos/argoproj/hello-world/branches/master/protection" + } + ] + `) + if err != nil { + t.Fail() + } case "/api/v3/repos/argoproj/argo-cd/contents/pkg?ref=master": _, err := io.WriteString(w, `{ "type": "file", @@ -196,6 +343,50 @@ func githubMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { if err != nil { t.Fail() } + case "/api/v3/repos/argoproj/argo-cd/branches/test": + _, err := io.WriteString(w, `{ + "name": "test", + "commit": { + "sha": "80a6e93f16e8093e24091b03c614362df3fb9b92", + "url": "https://api.github.com/repos/octocat/Hello-World/commits/80a6e93f16e8093e24091b03c614362df3fb9b92" + }, + "protected": true, + "protection": { + "required_status_checks": { + "enforcement_level": "non_admins", + "contexts": [ + "ci-test", + "linter" + ] + } + }, + "protection_url": "https://api.github.com/repos/octocat/hello-world/branches/test/protection" + }`) + if err != nil { + t.Fail() + } + case "/api/v3/repos/argoproj/another-repo/branches/main": + _, err := io.WriteString(w, `{ + "name": "main", + "commit": { + "sha": "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + "url": "https://api.github.com/repos/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc" + }, + "protected": true, + "protection": { + "required_status_checks": { + "enforcement_level": "non_admins", + "contexts": [ + "ci-test", + "linter" + ] + } + }, + "protection_url": "https://api.github.com/repos/octocat/hello-world/branches/master/protection" + }`) + if err != nil { + t.Fail() + } default: w.WriteHeader(http.StatusNotFound) } @@ -203,37 +394,276 @@ func githubMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { } func TestGithubListRepos(t *testing.T) { + idptr := func(i int64) *int64 { + return &i + } + // Test cases for ListRepos cases := []struct { - name, proto, url string + name, proto string hasError, allBranches bool - branches []string + excludeArchivedRepos bool + expectedRepos []*Repository filters []v1alpha1.SCMProviderGeneratorFilter }{ { - name: "blank protocol", - url: "git@github.com:argoproj/argo-cd.git", - branches: []string{"master"}, + name: "blank protocol", + allBranches: true, + excludeArchivedRepos: false, + expectedRepos: []*Repository{ + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "master", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "test", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "80a6e93f16e8093e24091b03c614362df3fb9b92", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "another-repo", + Branch: "main", + URL: "git@github.com:argoproj/another-repo.git", + SHA: "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296270), + }, + }, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, }, { - name: "ssh protocol", - proto: "ssh", - url: "git@github.com:argoproj/argo-cd.git", + name: "ssh protocol", + proto: "ssh", + allBranches: true, + excludeArchivedRepos: false, + expectedRepos: []*Repository{ + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "master", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "test", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "80a6e93f16e8093e24091b03c614362df3fb9b92", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "another-repo", + Branch: "main", + URL: "git@github.com:argoproj/another-repo.git", + SHA: "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296270), + }, + }, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, }, { - name: "https protocol", - proto: "https", - url: "https://github.com/argoproj/argo-cd.git", + name: "https protocol", + proto: "https", + allBranches: true, + excludeArchivedRepos: false, + expectedRepos: []*Repository{ + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "master", + URL: "https://github.com/argoproj/argo-cd.git", + SHA: "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "test", + URL: "https://github.com/argoproj/argo-cd.git", + SHA: "80a6e93f16e8093e24091b03c614362df3fb9b92", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "another-repo", + Branch: "main", + URL: "https://github.com/argoproj/another-repo.git", + SHA: "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296270), + }, + }, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, }, { - name: "other protocol", - proto: "other", - hasError: true, + name: "other protocol", + proto: "other", + hasError: true, + excludeArchivedRepos: false, + expectedRepos: []*Repository{}, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, }, { - name: "all branches", - allBranches: true, - url: "git@github.com:argoproj/argo-cd.git", - branches: []string{"master"}, + name: "all branches with archived repos", + allBranches: true, + proto: "ssh", + excludeArchivedRepos: false, + expectedRepos: []*Repository{ + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "master", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "test", + URL: "git@github.com:argoproj/argo-cd.git", + SHA: "80a6e93f16e8093e24091b03c614362df3fb9b92", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "another-repo", + Branch: "main", + URL: "git@github.com:argoproj/another-repo.git", + SHA: "19b016818bc0e0a44ddeaab345838a2a6c97fa67", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296270), + }, + }, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, + }, + { + name: "test repo all branches without archived repos", + allBranches: true, + excludeArchivedRepos: true, + proto: "https", + expectedRepos: []*Repository{ + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "master", + URL: "https://github.com/argoproj/argo-cd.git", + SHA: "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + { + Organization: "argoproj", + Repository: "argo-cd", + Branch: "test", + URL: "https://github.com/argoproj/argo-cd.git", + SHA: "80a6e93f16e8093e24091b03c614362df3fb9b92", + Labels: []string{ + "argoproj", + "atom", + "electron", + "api", + }, + RepositoryId: idptr(1296269), + }, + }, + filters: []v1alpha1.SCMProviderGeneratorFilter{ + {}, + }, }, } ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -242,26 +672,18 @@ func TestGithubListRepos(t *testing.T) { defer ts.Close() for _, c := range cases { t.Run(c.name, func(t *testing.T) { - provider, _ := NewGithubProvider("argoproj", "", ts.URL, c.allBranches) + provider, _ := NewGithubProvider("argoproj", "", ts.URL, c.allBranches, c.excludeArchivedRepos) rawRepos, err := ListRepos(t.Context(), provider, c.filters, c.proto) if c.hasError { require.Error(t, err) } else { require.NoError(t, err) - // Just check that this one project shows up. Not a great test but better thing nothing? repos := []*Repository{} - branches := []string{} - for _, r := range rawRepos { - if r.Repository == "argo-cd" { - repos = append(repos, r) - branches = append(branches, r.Branch) - } - } + repos = append(rawRepos, repos...) + assert.NotEmpty(t, repos) - assert.Equal(t, c.url, repos[0].URL) - for _, b := range c.branches { - assert.Contains(t, branches, b) - } + assert.Len(t, repos, len(c.expectedRepos)) + assert.ElementsMatch(t, c.expectedRepos, repos) } }) } @@ -280,7 +702,7 @@ func TestGithubHasPath(t *testing.T) { githubMockHandler(t)(w, r) })) defer ts.Close() - host, _ := NewGithubProvider("argoproj", "", ts.URL, false) + host, _ := NewGithubProvider("argoproj", "", ts.URL, false, false) repo := &Repository{ Organization: "argoproj", Repository: "argo-cd", @@ -300,7 +722,7 @@ func TestGithubGetBranches(t *testing.T) { githubMockHandler(t)(w, r) })) defer ts.Close() - host, _ := NewGithubProvider("argoproj", "", ts.URL, false) + host, _ := NewGithubProvider("argoproj", "", ts.URL, false, false) repo := &Repository{ Organization: "argoproj", Repository: "argo-cd", @@ -328,6 +750,6 @@ func TestGithubGetBranches(t *testing.T) { require.NoError(t, err) } else { // considering master branch to exist. - assert.Len(t, repos, 1) + assert.Len(t, repos, 2) } } diff --git a/applicationset/services/scm_provider/gitlab.go b/applicationset/services/scm_provider/gitlab.go index fde178a84a..a6b74bce69 100644 --- a/applicationset/services/scm_provider/gitlab.go +++ b/applicationset/services/scm_provider/gitlab.go @@ -19,12 +19,13 @@ type GitlabProvider struct { allBranches bool includeSubgroups bool includeSharedProjects bool + includeArchivedRepos bool topic string } var _ SCMProviderService = &GitlabProvider{} -func NewGitlabProvider(organization string, token string, url string, allBranches, includeSubgroups, includeSharedProjects, insecure bool, scmRootCAPath, topic string, caCerts []byte) (*GitlabProvider, error) { +func NewGitlabProvider(organization string, token string, url string, allBranches, includeSubgroups, includeSharedProjects, includeArchivedRepos, insecure bool, scmRootCAPath, topic string, caCerts []byte) (*GitlabProvider, error) { // Undocumented environment variable to set a default token, to be used in testing to dodge anonymous rate limits. if token == "" { token = os.Getenv("GITLAB_TOKEN") @@ -51,7 +52,15 @@ func NewGitlabProvider(organization string, token string, url string, allBranche } } - return &GitlabProvider{client: client, organization: organization, allBranches: allBranches, includeSubgroups: includeSubgroups, includeSharedProjects: includeSharedProjects, topic: topic}, nil + return &GitlabProvider{ + client: client, + organization: organization, + allBranches: allBranches, + includeSubgroups: includeSubgroups, + includeSharedProjects: includeSharedProjects, + includeArchivedRepos: includeArchivedRepos, + topic: topic, + }, nil } func (g *GitlabProvider) GetBranches(ctx context.Context, repo *Repository) ([]*Repository, error) { @@ -88,6 +97,11 @@ func (g *GitlabProvider) ListRepos(_ context.Context, cloneProtocol string) ([]* Topic: &g.topic, } + // gitlab does not include Archived repos by default + if g.includeArchivedRepos { + opt.Archived = gitlab.Ptr(true) + } + repos := []*Repository{} for { gitlabRepos, resp, err := g.client.Groups.ListGroupProjects(g.organization, opt) diff --git a/applicationset/services/scm_provider/gitlab_test.go b/applicationset/services/scm_provider/gitlab_test.go index 909ea7bb75..6e7efe3388 100644 --- a/applicationset/services/scm_provider/gitlab_test.go +++ b/applicationset/services/scm_provider/gitlab_test.go @@ -3,7 +3,6 @@ package scm_provider import ( "crypto/x509" "encoding/pem" - "fmt" "io" "net/http" "net/http/httptest" @@ -19,12 +18,9 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { t.Helper() return func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - fmt.Println(r.RequestURI) switch r.RequestURI { case "/api/v4": - fmt.Println("here1") - case "/api/v4/groups/test-argocd-proton/projects?include_subgroups=false&per_page=100", "/api/v4/groups/test-argocd-proton/projects?include_subgroups=false&per_page=100&topic=&with_shared=false": - fmt.Println("here") + case "/api/v4/groups/test-argocd-proton/projects?include_subgroups=false&per_page=100", "/api/v4/groups/test-argocd-proton/projects?include_subgroups=false&per_page=100&topic=&with_shared=false", "/api/v4/groups/test-argocd-proton/projects?archived=false&include_subgroups=false&per_page=100", "/api/v4/groups/test-argocd-proton/projects?archived=false&include_subgroups=false&per_page=100&topic=&with_shared=false": _, err := io.WriteString(w, `[{ "id": 27084533, "description": "", @@ -151,8 +147,253 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { if err != nil { t.Fail() } + case "/api/v4/groups/test-argocd-proton/projects?archived=true&include_subgroups=false&per_page=100", "/api/v4/groups/test-argocd-proton/projects?archived=true&include_subgroups=false&per_page=100&topic=&with_shared=false": + _, err := io.WriteString(w, `[{ + "id": 27084533, + "description": "", + "name": "argocd", + "name_with_namespace": "test argocd proton / argocd", + "path": "argocd", + "path_with_namespace": "test-argocd-proton/argocd", + "created_at": "2021-06-01T17:30:44.724Z", + "default_branch": "master", + "tag_list": [], + "topics": [], + "ssh_url_to_repo": "git@gitlab.com:test-argocd-proton/argocd.git", + "http_url_to_repo": "https://gitlab.com/test-argocd-proton/argocd.git", + "web_url": "https://gitlab.com/test-argocd-proton/argocd", + "readme_url": null, + "avatar_url": null, + "forks_count": 0, + "star_count": 0, + "last_activity_at": "2021-06-04T08:19:51.656Z", + "namespace": { + "id": 12258515, + "name": "test argocd proton", + "path": "test-argocd-proton", + "kind": "gro* Connection #0 to host gitlab.com left intact up ", + "full_path ": "test - argocd - proton ", + "parent_id ": null, + "avatar_url ": null, + "web_url ": "https: //gitlab.com/groups/test-argocd-proton" + }, + "container_registry_image_prefix": "registry.gitlab.com/test-argocd-proton/argocd", + "_links": { + "self": "https://gitlab.com/api/v4/projects/27084533", + "issues": "https://gitlab.com/api/v4/projects/27084533/issues", + "merge_requests": "https://gitlab.com/api/v4/projects/27084533/merge_requests", + "repo_branches": "https://gitlab.com/api/v4/projects/27084533/repository/branches", + "labels": "https://gitlab.com/api/v4/projects/27084533/labels", + "events": "https://gitlab.com/api/v4/projects/27084533/events", + "members": "https://gitlab.com/api/v4/projects/27084533/members", + "cluster_agents": "https://gitlab.com/api/v4/projects/27084533/cluster_agents" + }, + "packages_enabled": true, + "empty_repo": false, + "archived": false, + "visibility": "public", + "resolve_outdated_diff_discussions": false, + "container_expiration_policy": { + "cadence": "1d", + "enabled": false, + "keep_n": 10, + "older_than": "90d", + "name_regex": ".*", + "name_regex_keep": null, + "next_run_at": "2021-06-02T17:30:44.740Z" + }, + "issues_enabled": true, + "merge_requests_enabled": true, + "wiki_enabled": true, + "jobs_enabled": true, + "snippets_enabled": true, + "container_registry_enabled": true, + "service_desk_enabled": true, + "can_create_merge_request_in": false, + "issues_access_level": "enabled", + "repository_access_level": "enabled", + "merge_requests_access_level": "enabled", + "forking_access_level": "enabled", + "wiki_access_level": "enabled", + "builds_access_level": "enabled", + "snippets_access_level": "enabled", + "pages_access_level": "enabled", + "operations_access_level": "enabled", + "analytics_access_level": "enabled", + "container_registry_access_level": "enabled", + "security_and_compliance_access_level": "private", + "emails_disabled": null, + "shared_runners_enabled": true, + "lfs_enabled": true, + "creator_id": 2378866, + "import_status": "none", + "open_issues_count": 0, + "ci_default_git_depth": 50, + "ci_forward_deployment_enabled": true, + "ci_job_token_scope_enabled": false, + "public_jobs": true, + "build_timeout": 3600, + "auto_cancel_pending_pipelines": "enabled", + "ci_config_path": "", + "shared_with_groups": [], + "only_allow_merge_if_pipeline_succeeds": false, + "allow_merge_on_skipped_pipeline": null, + "restrict_user_defined_variables": false, + "request_access_enabled": true, + "only_allow_merge_if_all_discussions_are_resolved": false, + "remove_source_branch_after_merge": true, + "printing_merge_request_link_enabled": true, + "merge_method": "merge", + "squash_option": "default_off", + "suggestion_commit_message": null, + "merge_commit_template": null, + "squash_commit_template": null, + "auto_devops_enabled": false, + "auto_devops_deploy_strategy": "continuous", + "autoclose_referenced_issues": true, + "keep_latest_artifact": true, + "runner_token_expiration_interval": null, + "approvals_before_merge": 0, + "mirror": false, + "external_authorization_classification_label": "", + "marked_for_deletion_at": null, + "marked_for_deletion_on": null, + "requirements_enabled": true, + "requirements_access_level": "enabled", + "security_and_compliance_enabled": false, + "compliance_frameworks": [], + "issues_template": null, + "merge_requests_template": null, + "merge_pipelines_enabled": false, + "merge_trains_enabled": false + }, + { + "id": 56522142, + "description": "", + "name": "another-repo", + "name_with_namespace": "test argocd proton / another-repo", + "path": "another-repo", + "path_with_namespace": "test-argocd-proton/another-repo", + "created_at": "2022-09-13T12:10:14.722Z", + "default_branch": "master", + "tag_list": [ + "test-topic" + ], + "topics": [ + "test-topic" + ], + "ssh_url_to_repo": "git@gitlab.com:test-argocd-proton/another-repo.git", + "http_url_to_repo": "https://gitlab.com/test-argocd-proton/another-repo.git", + "web_url": "https://gitlab.com/test-argocd-proton/another-repo", + "readme_url": null, + "avatar_url": null, + "forks_count": 0, + "star_count": 0, + "last_activity_at": "2021-06-04T08:19:51.656Z", + "namespace": { + "id": 12258515, + "name": "test argocd proton", + "path": "test-argocd-proton", + "kind": "gro* Connection #0 to host gitlab.com left intact up ", + "full_path ": "test - argocd - proton ", + "parent_id ": null, + "avatar_url ": null, + "web_url ": "https: //gitlab.com/groups/test-argocd-proton" + }, + "container_registry_image_prefix": "registry.gitlab.com/test-argocd-proton/another-repo", + "_links": { + "self": "https://gitlab.com/api/v4/projects/56522142", + "issues": "https://gitlab.com/api/v4/projects/56522142/issues", + "merge_requests": "https://gitlab.com/api/v4/projects/56522142/merge_requests", + "repo_branches": "https://gitlab.com/api/v4/projects/56522142/repository/branches", + "labels": "https://gitlab.com/api/v4/projects/56522142/labels", + "events": "https://gitlab.com/api/v4/projects/56522142/events", + "members": "https://gitlab.com/api/v4/projects/56522142/members", + "cluster_agents": "https://gitlab.com/api/v4/projects/56522142/cluster_agents" + }, + "packages_enabled": true, + "empty_repo": false, + "archived": true, + "visibility": "public", + "resolve_outdated_diff_discussions": false, + "container_expiration_policy": { + "cadence": "1d", + "enabled": false, + "keep_n": 10, + "older_than": "90d", + "name_regex": ".*", + "name_regex_keep": null, + "next_run_at": "2021-06-02T17:30:44.740Z" + }, + "issues_enabled": true, + "merge_requests_enabled": true, + "wiki_enabled": true, + "jobs_enabled": true, + "snippets_enabled": true, + "container_registry_enabled": true, + "service_desk_enabled": true, + "can_create_merge_request_in": false, + "issues_access_level": "enabled", + "repository_access_level": "enabled", + "merge_requests_access_level": "enabled", + "forking_access_level": "enabled", + "wiki_access_level": "enabled", + "builds_access_level": "enabled", + "snippets_access_level": "enabled", + "pages_access_level": "enabled", + "operations_access_level": "enabled", + "analytics_access_level": "enabled", + "container_registry_access_level": "enabled", + "security_and_compliance_access_level": "private", + "emails_disabled": null, + "shared_runners_enabled": true, + "lfs_enabled": true, + "creator_id": 2378866, + "import_status": "none", + "open_issues_count": 0, + "ci_default_git_depth": 50, + "ci_forward_deployment_enabled": true, + "ci_job_token_scope_enabled": false, + "public_jobs": true, + "build_timeout": 3600, + "auto_cancel_pending_pipelines": "enabled", + "ci_config_path": "", + "shared_with_groups": [], + "only_allow_merge_if_pipeline_succeeds": false, + "allow_merge_on_skipped_pipeline": null, + "restrict_user_defined_variables": false, + "request_access_enabled": true, + "only_allow_merge_if_all_discussions_are_resolved": false, + "remove_source_branch_after_merge": true, + "printing_merge_request_link_enabled": true, + "merge_method": "merge", + "squash_option": "default_off", + "suggestion_commit_message": null, + "merge_commit_template": null, + "squash_commit_template": null, + "auto_devops_enabled": false, + "auto_devops_deploy_strategy": "continuous", + "autoclose_referenced_issues": true, + "keep_latest_artifact": true, + "runner_token_expiration_interval": null, + "approvals_before_merge": 0, + "mirror": false, + "external_authorization_classification_label": "", + "marked_for_deletion_at": null, + "marked_for_deletion_on": null, + "requirements_enabled": true, + "requirements_access_level": "enabled", + "security_and_compliance_enabled": false, + "compliance_frameworks": [], + "issues_template": null, + "merge_requests_template": null, + "merge_pipelines_enabled": false, + "merge_trains_enabled": false + }]`) + if err != nil { + t.Fail() + } case "/api/v4/groups/test-argocd-proton/projects?include_subgroups=true&per_page=100&topic=&with_shared=false": - fmt.Println("here") _, err := io.WriteString(w, `[{ "id": 27084533, "description": "", @@ -406,7 +647,6 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { t.Fail() } case "/api/v4/groups/test-argocd-proton/projects?include_subgroups=false&per_page=100&topic=specific-topic&with_shared=false": - fmt.Println("here") _, err := io.WriteString(w, `[{ "id": 27084533, "description": "", @@ -537,7 +777,6 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { t.Fail() } case "/api/v4/groups/test-argocd-proton/projects?include_subgroups=true&per_page=100&topic=&with_shared=true": - fmt.Println("here") _, err := io.WriteString(w, `[{ "id": 27084533, "description": "", @@ -796,7 +1035,6 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { t.Fail() } case "/api/v4/projects/27084533/repository/branches/master": - fmt.Println("returning") _, err := io.WriteString(w, `{ "name": "master", "commit": { @@ -826,6 +1064,36 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { if err != nil { t.Fail() } + case "/api/v4/projects/56522142/repository/branches/master": + _, err := io.WriteString(w, `{ + "name": "master", + "commit": { + "id": "9998d7999fc99dd0fd578650b58b244fc63f6b53", + "short_id": "9998d799", + "created_at": "2023-08-04T08:14:14.000+00:00", + "parent_ids": ["5d9d50be1ef949ad28674e238c7e12a17b1e9706", "99482e001731640b4123cf177e51c696f08a3005"], + "title": "Merge branch 'pipeline-4547911429' into 'master'", + "message": "Merge branch 'pipeline-4547911429' into 'master'\n\n[testapp-ci] manifests/demo/test-app.yaml: release v1.2.0\n\nSee merge request test-argocd-proton/argocd!3", + "author_name": "Martin Vozník", + "author_email": "martin@voznik.cz", + "authored_date": "2023-08-04T08:14:14.000+00:00", + "committer_name": "Martin Vozník", + "committer_email": "martin@voznik.cz", + "committed_date": "2023-08-04T08:14:14.000+00:00", + "trailers": {}, + "web_url": "https://gitlab.com/test-argocd-proton/argocd/-/commit/9998d7999fc99dd0fd578650b58b244fc63f6b53" + }, + "merged": false, + "protected": true, + "developers_can_push": false, + "developers_can_merge": false, + "can_push": false, + "default": true, + "web_url": "https://gitlab.com/test-argocd-proton/argocd/-/tree/master" + }`) + if err != nil { + t.Fail() + } case "/api/v4/projects/27084533/repository/branches?per_page=100": _, err := io.WriteString(w, `[{ "name": "master", @@ -991,8 +1259,62 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { if err != nil { t.Fail() } + case "/api/v4/projects/56522142/repository/branches?per_page=100": + _, err := io.WriteString(w, `[{ + "name": "master", + "commit": { + "id": "8898d8889fc99dd0fd578650b58b244fc63f6b58", + "short_id": "8898d801", + "created_at": "2021-06-04T08:24:44.000+00:00", + "parent_ids": null, + "title": "Merge branch 'pipeline-1317911429' into 'master'", + "message": "Merge branch 'pipeline-1317911429' into 'master'", + "author_name": "Martin Vozník", + "author_email": "martin@voznik.cz", + "authored_date": "2021-06-04T08:24:44.000+00:00", + "committer_name": "Martin Vozník", + "committer_email": "martin@voznik.cz", + "committed_date": "2021-06-04T08:24:44.000+00:00", + "trailers": null, + "web_url": "https://gitlab.com/test-argocd-proton/subgroup/argocd-subgroup/-/commit/8898d7999fc99dd0fd578650b58b244fc63f6b53" + }, + "merged": false, + "protected": true, + "developers_can_push": false, + "developers_can_merge": false, + "can_push": false, + "default": true, + "web_url": "https://gitlab.com/test-argocd-proton/subgroup/argocd-subgroup/-/tree/master" + }, { + "name": "pipeline-2310077506", + "commit": { + "id": "0f92540e5f396ba960adea4ed0aa905baf3f73d1", + "short_id": "0f92540e", + "created_at": "2021-06-01T18:39:59.000+00:00", + "parent_ids": null, + "title": "[testapp-ci] manifests/demo/test-app.yaml: release v1.0.1", + "message": "[testapp-ci] manifests/demo/test-app.yaml: release v1.0.1", + "author_name": "ci-test-app", + "author_email": "mvoznik+cicd@protonmail.com", + "authored_date": "2021-06-01T18:39:59.000+00:00", + "committer_name": "ci-test-app", + "committer_email": "mvoznik+cicd@protonmail.com", + "committed_date": "2021-06-01T18:39:59.000+00:00", + "trailers": null, + "web_url": "https://gitlab.com/test-argocd-proton/subgroup/argocd-subgroup/-/commit/0f92540e5f396ba960adea4ed0aa905baf3f73d1" + }, + "merged": false, + "protected": false, + "developers_can_push": false, + "developers_can_merge": false, + "can_push": false, + "default": false, + "web_url": "https://gitlab.com/test-argocd-proton/subgroup/argocd-subgroup/-/tree/pipeline-1310077506" + }]`) + if err != nil { + t.Fail() + } case "/api/v4/projects/test-argocd-proton%2Fargocd": - fmt.Println("auct") _, err := io.WriteString(w, `{ "id": 27084533, "description": "", @@ -1079,35 +1401,94 @@ func gitlabMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { func TestGitlabListRepos(t *testing.T) { cases := []struct { - name, proto, url, topic string - hasError, allBranches, includeSubgroups, includeSharedProjects, insecure bool - branches []string - filters []v1alpha1.SCMProviderGeneratorFilter + name, proto, topic string + hasError, allBranches, includeSubgroups, includeSharedProjects, includeArchivedRepos, insecure bool + branches []string + expectedRepos []*Repository + filters []v1alpha1.SCMProviderGeneratorFilter }{ { - name: "blank protocol", - url: "git@gitlab.com:test-argocd-proton/argocd.git", + name: "blank protocol", + allBranches: false, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + branches: []string{"master"}, + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + }, }, { - name: "ssh protocol", - proto: "ssh", - url: "git@gitlab.com:test-argocd-proton/argocd.git", + name: "ssh protocol", + proto: "ssh", + allBranches: false, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"master"}, + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + }, }, { - name: "labelmatch", - proto: "ssh", - url: "git@gitlab.com:test-argocd-proton/argocd.git", + name: "https protocol", + proto: "https", + allBranches: false, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"master"}, + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "https://gitlab.com/test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + }, + }, + { + name: "labelmatch", + proto: "ssh", + allBranches: false, + includeArchivedRepos: false, filters: []v1alpha1.SCMProviderGeneratorFilter{ { LabelMatch: new("test-topic"), }, }, - }, - { - name: "https protocol", - proto: "https", - url: "https://gitlab.com/test-argocd-proton/argocd.git", + + branches: []string{"master"}, + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + }, }, { name: "other protocol", @@ -1115,34 +1496,133 @@ func TestGitlabListRepos(t *testing.T) { hasError: true, }, { - name: "all branches", - allBranches: true, - url: "git@gitlab.com:test-argocd-proton/argocd.git", - branches: []string{"master"}, + name: "all branches", + allBranches: true, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + branches: []string{"master"}, + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + }, }, { name: "all subgroups", allBranches: true, - url: "git@gitlab.com:test-argocd-proton/argocd.git", branches: []string{"master"}, includeSharedProjects: false, includeSubgroups: true, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic", "specific-topic"}, + }, + { + Organization: "", + Repository: "argocd-subgroup", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/subgroup/argocd-subgroup.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b58", + RepositoryId: int64(27084538), + Labels: []string{"test-topic"}, + }, + }, }, { name: "all subgroups and shared projects", allBranches: true, - url: "git@gitlab.com:test-argocd-proton/argocd.git", branches: []string{"master"}, includeSharedProjects: true, includeSubgroups: true, + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic"}, + }, + { + Organization: "", + Repository: "shared-argocd", + Branch: "master", + URL: "git@gitlab.com:test-shared-argocd-proton/shared-argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084534), + Labels: []string{"test-topic"}, + }, + }, }, { - name: "specific topic", - allBranches: true, - url: "git@gitlab.com:test-argocd-proton/argocd.git", - branches: []string{"master"}, - includeSubgroups: false, - topic: "specific-topic", + name: "specific topic", + allBranches: true, + branches: []string{"master"}, + includeSubgroups: false, + topic: "specific-topic", + includeArchivedRepos: false, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{"test-topic", "specific-topic"}, + }, + }, + }, + { + name: "all branches with archived repos", + allBranches: true, + branches: []string{"master"}, + includeSubgroups: false, + includeArchivedRepos: true, + filters: []v1alpha1.SCMProviderGeneratorFilter{}, + + expectedRepos: []*Repository{ + { + Organization: "", + Repository: "argocd", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/argocd.git", + SHA: "8898d7999fc99dd0fd578650b58b244fc63f6b53", + RepositoryId: int64(27084533), + Labels: []string{}, + }, + { + Organization: "", + Repository: "another-repo", + Branch: "master", + URL: "git@gitlab.com:test-argocd-proton/another-repo.git", + SHA: "8898d8889fc99dd0fd578650b58b244fc63f6b58", + RepositoryId: int64(56522142), + Labels: []string{"test-topic"}, + }, + }, }, } ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -1150,28 +1630,24 @@ func TestGitlabListRepos(t *testing.T) { })) for _, c := range cases { t.Run(c.name, func(t *testing.T) { - provider, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, c.allBranches, c.includeSubgroups, c.includeSharedProjects, c.insecure, "", c.topic, nil) + provider, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, c.allBranches, c.includeSubgroups, c.includeSharedProjects, c.includeArchivedRepos, c.insecure, "", c.topic, nil) rawRepos, err := ListRepos(t.Context(), provider, c.filters, c.proto) if c.hasError { require.Error(t, err) } else { require.NoError(t, err) - // Just check that this one project shows up. Not a great test but better than nothing? + repos := []*Repository{} uniqueRepos := map[string]int{} - branches := []string{} + for _, r := range rawRepos { - if r.Repository == "argocd" { + if _, ok := uniqueRepos[r.Repository]; !ok { repos = append(repos, r) - branches = append(branches, r.Branch) } uniqueRepos[r.Repository]++ } assert.NotEmpty(t, repos) - assert.Equal(t, c.url, repos[0].URL) - for _, b := range c.branches { - assert.Contains(t, branches, b) - } + // In case of listing subgroups, validate the number of returned projects if c.includeSubgroups || c.includeSharedProjects { assert.Len(t, uniqueRepos, 2) @@ -1180,6 +1656,8 @@ func TestGitlabListRepos(t *testing.T) { if c.topic != "" { assert.Len(t, uniqueRepos, 1) } + assert.Len(t, repos, len(c.expectedRepos)) + assert.ElementsMatch(t, c.expectedRepos, repos) } }) } @@ -1189,7 +1667,7 @@ func TestGitlabHasPath(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gitlabMockHandler(t)(w, r) })) - host, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, false, "", "", nil) + host, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, false, false, "", "", nil) repo := &Repository{ Organization: "test-argocd-proton", Repository: "argocd", @@ -1245,10 +1723,10 @@ func TestGitlabGetBranches(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gitlabMockHandler(t)(w, r) })) - host, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, false, "", "", nil) + host, _ := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, false, false, "", "", nil) repo := &Repository{ - RepositoryId: 27084533, + RepositoryId: int64(27084533), Branch: "master", } t.Run("branch exists", func(t *testing.T) { @@ -1258,7 +1736,7 @@ func TestGitlabGetBranches(t *testing.T) { }) repo2 := &Repository{ - RepositoryId: 27084533, + RepositoryId: int64(27084533), Branch: "foo", } t.Run("unknown branch", func(t *testing.T) { @@ -1321,10 +1799,10 @@ func TestGetBranchesTLS(t *testing.T) { } } - host, err := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, test.tlsInsecure, "", "", certs) + host, err := NewGitlabProvider("test-argocd-proton", "", ts.URL, false, true, true, false, test.tlsInsecure, "", "", certs) require.NoError(t, err) repo := &Repository{ - RepositoryId: 27084533, + RepositoryId: int64(27084533), Branch: "master", } _, err = host.GetBranches(t.Context(), repo) diff --git a/assets/swagger.json b/assets/swagger.json index 43b23e2a74..3cfd500370 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -10498,6 +10498,10 @@ "description": "The Gitea URL to talk to. For example https://gitea.mydomain.com/.", "type": "string" }, + "excludeArchivedRepos": { + "description": "Exclude repositories that are archived.", + "type": "boolean" + }, "insecure": { "type": "boolean", "title": "Allow self-signed TLS / Certificates; default: false" @@ -10527,6 +10531,10 @@ "description": "AppSecretName is a reference to a GitHub App repo-creds secret.", "type": "string" }, + "excludeArchivedRepos": { + "description": "Exclude repositories that are archived.", + "type": "boolean" + }, "organization": { "description": "GitHub org to scan. Required.", "type": "string" @@ -10555,6 +10563,10 @@ "description": "Gitlab group to scan. Required. You can use either the project id (recommended) or the full namespaced path.", "type": "string" }, + "includeArchivedRepos": { + "description": "Include repositories that are archived.", + "type": "boolean" + }, "includeSharedProjects": { "type": "boolean", "title": "When recursing through subgroups, also include shared Projects (true) or scan only the subgroups under same path (false). Defaults to \"true\"" diff --git a/docs/operator-manual/applicationset/Generators-SCM-Provider.md b/docs/operator-manual/applicationset/Generators-SCM-Provider.md index 82c433d6e0..36c7fc3944 100644 --- a/docs/operator-manual/applicationset/Generators-SCM-Provider.md +++ b/docs/operator-manual/applicationset/Generators-SCM-Provider.md @@ -44,6 +44,8 @@ spec: api: https://git.example.com/ # If true, scan every branch of every repository. If false, scan only the default branch. Defaults to false. allBranches: true + # Exclude repos that are archived + excludeArchivedRepos: true # Reference to a Secret containing an access token. (optional) tokenRef: secretName: github-token @@ -59,6 +61,7 @@ spec: * `allBranches`: By default (false) the template will only be evaluated for the default branch of each repo. If this is true, every branch of every repository will be passed to the filters. If using this flag, you likely want to use a `branchMatch` filter. * `tokenRef`: A `Secret` name and key containing the GitHub access token to use for requests. If not specified, will make anonymous requests which have a lower rate limit and can only see public repositories. * `appSecretName`: A `Secret` name containing a GitHub App secret in [repo-creds format][repo-creds]. +* `excludeArchivedRepos`: exclude repositories that are archived. defaults to false [repo-creds]: ../declarative-setup.md#repository-credentials @@ -90,6 +93,8 @@ spec: # If true and includeSubgroups is also true, include Shared Projects, which is gitlab API default. # If false only search Projects under the same path. Defaults to true. includeSharedProjects: false + # Include repos that are archived + includeArchivedRepos: true # filter projects by topic. A single topic is supported by Gitlab API. Defaults to "" (all topics). topic: "my-topic" # Reference to a Secret containing an access token. (optional) @@ -111,6 +116,7 @@ spec: * `allBranches`: By default (false) the template will only be evaluated for the default branch of each repo. If this is true, every branch of every repository will be passed to the filters. If using this flag, you likely want to use a `branchMatch` filter. * `includeSubgroups`: By default (false) the controller will only search for repos directly in the base group. If this is true, it will recurse through all the subgroups searching for repos to scan. * `includeSharedProjects`: If true and includeSubgroups is also true, include Shared Projects, which is gitlab API default. If false only search Projects under the same path. In general most would want the behaviour when set to false. Defaults to true. +* `includeArchivedRepos`: include repositories that are archived. defaults to false * `topic`: filter projects by topic. A single topic is supported by Gitlab API. Defaults to "" (all topics). * `tokenRef`: A `Secret` name and key containing the GitLab access token to use for requests. If not specified, will make anonymous requests which have a lower rate limit and can only see public repositories. * `insecure`: By default (false) - Skip checking the validity of the SCM's certificate - useful for self-signed TLS certificates. @@ -147,6 +153,8 @@ spec: api: https://gitea.mydomain.com/ # If true, scan every branch of every repository. If false, scan only the default branch. Defaults to false. allBranches: true + # Exclude repos that are archived + excludeArchivedRepos: true # Reference to a Secret containing an access token. (optional) tokenRef: secretName: gitea-token @@ -160,6 +168,7 @@ spec: * `allBranches`: By default (false) the template will only be evaluated for the default branch of each repo. If this is true, every branch of every repository will be passed to the filters. If using this flag, you likely want to use a `branchMatch` filter. * `tokenRef`: A `Secret` name and key containing the Gitea access token to use for requests. If not specified, will make anonymous requests which have a lower rate limit and can only see public repositories. * `insecure`: Allow for self-signed TLS certificates. +* `excludeArchivedRepos`: exclude repositories that are archived. defaults to false This SCM provider does not yet support label filtering diff --git a/manifests/core-install-with-hydrator.yaml b/manifests/core-install-with-hydrator.yaml index 24731be5c7..6b43f9bbce 100644 --- a/manifests/core-install-with-hydrator.yaml +++ b/manifests/core-install-with-hydrator.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index e7faca36a5..c3afe405fc 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 5932f99479..b3a4300431 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -9436,6 +9436,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -9462,6 +9464,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -9495,6 +9499,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -17088,6 +17094,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -17114,6 +17122,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -17147,6 +17157,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -21125,6 +21137,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -21151,6 +21165,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -21184,6 +21200,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/ha/install-with-hydrator.yaml b/manifests/ha/install-with-hydrator.yaml index c5f0d407f3..9ad0d354d2 100644 --- a/manifests/ha/install-with-hydrator.yaml +++ b/manifests/ha/install-with-hydrator.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index f629fa3e2c..3a843129de 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/install-with-hydrator.yaml b/manifests/install-with-hydrator.yaml index 435ae2c596..8d409690dd 100644 --- a/manifests/install-with-hydrator.yaml +++ b/manifests/install-with-hydrator.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/manifests/install.yaml b/manifests/install.yaml index 6e8663e08d..537c063ad4 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -16441,6 +16441,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -16467,6 +16469,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -16500,6 +16504,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -24093,6 +24099,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -24119,6 +24127,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -24152,6 +24162,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: @@ -28130,6 +28142,8 @@ spec: type: boolean api: type: string + excludeArchivedRepos: + type: boolean insecure: type: boolean owner: @@ -28156,6 +28170,8 @@ spec: type: string appSecretName: type: string + excludeArchivedRepos: + type: boolean organization: type: string tokenRef: @@ -28189,6 +28205,8 @@ spec: type: object group: type: string + includeArchivedRepos: + type: boolean includeSharedProjects: type: boolean includeSubgroups: diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index 2ddb8313c0..0dd3c3c276 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -484,6 +484,8 @@ type SCMProviderGeneratorGitea struct { AllBranches bool `json:"allBranches,omitempty" protobuf:"varint,4,opt,name=allBranches"` // Allow self-signed TLS / Certificates; default: false Insecure bool `json:"insecure,omitempty" protobuf:"varint,5,opt,name=insecure"` + // Exclude repositories that are archived. + ExcludeArchivedRepos bool `json:"excludeArchivedRepos,omitempty" protobuf:"varint,6,opt,name=excludeArchivedRepos"` } // SCMProviderGeneratorGithub defines connection info specific to GitHub. @@ -498,6 +500,8 @@ type SCMProviderGeneratorGithub struct { AppSecretName string `json:"appSecretName,omitempty" protobuf:"bytes,4,opt,name=appSecretName"` // Scan all branches instead of just the default branch. AllBranches bool `json:"allBranches,omitempty" protobuf:"varint,5,opt,name=allBranches"` + // Exclude repositories that are archived. + ExcludeArchivedRepos bool `json:"excludeArchivedRepos,omitempty" protobuf:"varint,6,opt,name=excludeArchivedRepos"` } // SCMProviderGeneratorGitlab defines connection info specific to Gitlab. @@ -520,6 +524,8 @@ type SCMProviderGeneratorGitlab struct { Topic string `json:"topic,omitempty" protobuf:"bytes,8,opt,name=topic"` // ConfigMap key holding the trusted certificates CARef *ConfigMapKeyRef `json:"caRef,omitempty" protobuf:"bytes,9,opt,name=caRef"` + // Include repositories that are archived. + IncludeArchivedRepos bool `json:"includeArchivedRepos,omitempty" protobuf:"varint,10,opt,name=includeArchivedRepos"` } func (s *SCMProviderGeneratorGitlab) WillIncludeSharedProjects() bool { diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index f7430a79aa..5a7a071933 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4972,801 +4972,804 @@ func init() { } var fileDescriptor_c078c3c476799f44 = []byte{ - // 12691 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x25, 0xd9, - 0x55, 0x98, 0xfb, 0x3d, 0x3d, 0xe9, 0xbd, 0xa3, 0x8f, 0x19, 0xdd, 0x99, 0xd9, 0xd5, 0xcc, 0xce, - 0x8e, 0xc6, 0xbd, 0x78, 0xbd, 0xc4, 0x6b, 0x0d, 0x1e, 0x7b, 0xcd, 0x86, 0x05, 0x13, 0x3d, 0x69, - 0x3e, 0x34, 0x23, 0x8d, 0xe4, 0xfb, 0x34, 0x33, 0xfe, 0x5a, 0xdb, 0xad, 0x7e, 0x57, 0x52, 0x8f, - 0xfa, 0x75, 0xbf, 0xed, 0xee, 0xa7, 0x99, 0xb7, 0x18, 0x63, 0x63, 0x1b, 0x0c, 0x36, 0xf6, 0x06, - 0x52, 0x61, 0x49, 0x62, 0xc7, 0x04, 0xf2, 0x51, 0x95, 0xa2, 0x20, 0xe1, 0x07, 0x54, 0x80, 0xa2, - 0x02, 0x14, 0x05, 0x15, 0x12, 0x08, 0x45, 0x80, 0x04, 0x50, 0xec, 0x49, 0x52, 0x50, 0xa9, 0x0a, - 0x29, 0x92, 0x54, 0x2a, 0x35, 0x21, 0x54, 0xea, 0x7e, 0xdf, 0xee, 0xd7, 0x4f, 0x7a, 0x1a, 0xb5, - 0x34, 0x63, 0xd8, 0x7f, 0xef, 0xdd, 0x73, 0xfa, 0x9c, 0xdb, 0xb7, 0xef, 0x3d, 0xe7, 0xdc, 0x73, - 0xcf, 0x39, 0x17, 0x16, 0x37, 0xbc, 0x64, 0xb3, 0xb3, 0x36, 0xe3, 0x86, 0xad, 0x0b, 0x4e, 0xb4, - 0x11, 0xb6, 0xa3, 0xf0, 0x0e, 0xfb, 0xf1, 0x76, 0xb7, 0x79, 0x61, 0xfb, 0x9d, 0x17, 0xda, 0x5b, - 0x1b, 0x17, 0x9c, 0xb6, 0x17, 0x5f, 0x70, 0xda, 0x6d, 0xdf, 0x73, 0x9d, 0xc4, 0x0b, 0x83, 0x0b, - 0xdb, 0xef, 0x70, 0xfc, 0xf6, 0xa6, 0xf3, 0x8e, 0x0b, 0x1b, 0x24, 0x20, 0x91, 0x93, 0x90, 0xe6, - 0x4c, 0x3b, 0x0a, 0x93, 0x10, 0x7d, 0xab, 0xa6, 0x36, 0x23, 0xa9, 0xb1, 0x1f, 0x1f, 0x71, 0x9b, - 0x33, 0xdb, 0xef, 0x9c, 0x69, 0x6f, 0x6d, 0xcc, 0x50, 0x6a, 0x33, 0x06, 0xb5, 0x19, 0x49, 0xed, - 0xcc, 0xdb, 0x8d, 0xbe, 0x6c, 0x84, 0x1b, 0xe1, 0x05, 0x46, 0x74, 0xad, 0xb3, 0xce, 0xfe, 0xb1, - 0x3f, 0xec, 0x17, 0x67, 0x76, 0xc6, 0xde, 0x7a, 0x31, 0x9e, 0xf1, 0x42, 0xda, 0xbd, 0x0b, 0x6e, - 0x18, 0x91, 0x0b, 0xdb, 0x3d, 0x1d, 0x3a, 0x73, 0x55, 0xe3, 0x90, 0x7b, 0x09, 0x09, 0x62, 0x2f, - 0x0c, 0xe2, 0xb7, 0xd3, 0x2e, 0x90, 0x68, 0x9b, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0x79, 0x94, 0xde, - 0xa5, 0x29, 0xb5, 0x1c, 0x77, 0xd3, 0x0b, 0x48, 0xd4, 0xd5, 0x8f, 0xb7, 0x48, 0xe2, 0xe4, 0x3d, - 0x75, 0xa1, 0xdf, 0x53, 0x51, 0x27, 0x48, 0xbc, 0x16, 0xe9, 0x79, 0xe0, 0xdd, 0x7b, 0x3d, 0x10, - 0xbb, 0x9b, 0xa4, 0xe5, 0xf4, 0x3c, 0xf7, 0xce, 0x7e, 0xcf, 0x75, 0x12, 0xcf, 0xbf, 0xe0, 0x05, - 0x49, 0x9c, 0x44, 0xd9, 0x87, 0xec, 0xbf, 0x67, 0xc1, 0xf8, 0xec, 0xed, 0xc6, 0x6c, 0x27, 0xd9, - 0x9c, 0x0b, 0x83, 0x75, 0x6f, 0x03, 0xbd, 0x00, 0xa3, 0xae, 0xdf, 0x89, 0x13, 0x12, 0xdd, 0x70, - 0x5a, 0x64, 0xca, 0x3a, 0x6f, 0x3d, 0x57, 0xab, 0x9f, 0xf8, 0xb5, 0x9d, 0xe9, 0x37, 0xdd, 0xdf, - 0x99, 0x1e, 0x9d, 0xd3, 0x20, 0x6c, 0xe2, 0xa1, 0x6f, 0x84, 0x91, 0x28, 0xf4, 0xc9, 0x2c, 0xbe, - 0x31, 0x55, 0x62, 0x8f, 0x1c, 0x13, 0x8f, 0x8c, 0x60, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0xb6, 0xa3, - 0x70, 0xdd, 0xf3, 0xc9, 0x54, 0x39, 0x8d, 0xba, 0xc2, 0x9b, 0xb1, 0x84, 0xdb, 0x3f, 0x5a, 0x82, - 0x63, 0xb3, 0xed, 0xf6, 0x55, 0xe2, 0xf8, 0xc9, 0x66, 0x23, 0x71, 0x92, 0x4e, 0x8c, 0x42, 0x18, - 0x8e, 0xd9, 0x2f, 0xd1, 0xb7, 0xdb, 0xe2, 0xe9, 0x61, 0x0e, 0x7f, 0xb0, 0x33, 0x7d, 0x69, 0xb7, - 0x19, 0xbd, 0xe1, 0x25, 0x61, 0x3b, 0x7e, 0x3b, 0x09, 0x36, 0xbc, 0x80, 0xb0, 0xf1, 0xd9, 0x64, - 0xd4, 0x67, 0x4c, 0x26, 0x73, 0x61, 0x93, 0x60, 0xc1, 0x86, 0xf6, 0xb7, 0x45, 0xe2, 0xd8, 0xd9, - 0x20, 0xd9, 0x57, 0x5b, 0xe2, 0xcd, 0x58, 0xc2, 0x51, 0x04, 0xc8, 0x77, 0xe2, 0x64, 0x35, 0x72, - 0x82, 0xd8, 0xa3, 0x53, 0x7b, 0xd5, 0x6b, 0xf1, 0xb7, 0x1c, 0xbd, 0xf8, 0xd7, 0x66, 0xf8, 0x07, - 0x9a, 0x31, 0x3f, 0x90, 0x5e, 0x0f, 0x74, 0xfe, 0xcc, 0x6c, 0xbf, 0x63, 0x86, 0x3e, 0x51, 0x7f, - 0xe2, 0xfe, 0xce, 0x34, 0x5a, 0xec, 0xa1, 0x84, 0x73, 0xa8, 0xdb, 0xbf, 0x5b, 0x02, 0x98, 0x6d, - 0xb7, 0x57, 0xa2, 0xf0, 0x0e, 0x71, 0x13, 0xf4, 0x51, 0xa8, 0x52, 0x52, 0x4d, 0x27, 0x71, 0xd8, - 0x00, 0x8d, 0x5e, 0xfc, 0xa6, 0xc1, 0x18, 0x2f, 0xaf, 0xd1, 0xe7, 0x97, 0x48, 0xe2, 0xd4, 0x91, - 0x78, 0x41, 0xd0, 0x6d, 0x58, 0x51, 0x45, 0x01, 0x0c, 0xc5, 0x6d, 0xe2, 0xb2, 0xc1, 0x18, 0xbd, - 0xb8, 0x38, 0x73, 0x90, 0x15, 0x3f, 0xa3, 0x7b, 0xde, 0x68, 0x13, 0xb7, 0x3e, 0x26, 0x38, 0x0f, - 0xd1, 0x7f, 0x98, 0xf1, 0x41, 0xdb, 0xea, 0x83, 0xf3, 0x81, 0xbc, 0x51, 0x18, 0x47, 0x46, 0xb5, - 0x3e, 0x91, 0x9e, 0x40, 0xf2, 0xbb, 0xdb, 0x7f, 0x64, 0xc1, 0x84, 0x46, 0x5e, 0xf4, 0xe2, 0x04, - 0x7d, 0xa8, 0x67, 0x70, 0x67, 0x06, 0x1b, 0x5c, 0xfa, 0x34, 0x1b, 0xda, 0xe3, 0x82, 0x59, 0x55, - 0xb6, 0x18, 0x03, 0xdb, 0x82, 0x8a, 0x97, 0x90, 0x56, 0x3c, 0x55, 0x3a, 0x5f, 0x7e, 0x6e, 0xf4, - 0xe2, 0xd5, 0xa2, 0xde, 0xb3, 0x3e, 0x2e, 0x98, 0x56, 0x16, 0x28, 0x79, 0xcc, 0xb9, 0xd8, 0xbf, - 0x31, 0x61, 0xbe, 0x1f, 0x1d, 0x70, 0xf4, 0x0e, 0x18, 0x8d, 0xc3, 0x4e, 0xe4, 0x12, 0x4c, 0xda, - 0x21, 0x5d, 0x60, 0x65, 0x3a, 0xdd, 0xe9, 0xc2, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0xa0, 0x2f, 0x58, - 0x30, 0xd6, 0x24, 0x71, 0xe2, 0x05, 0x8c, 0xbf, 0xec, 0xfc, 0xea, 0x81, 0x3b, 0x2f, 0x1b, 0xe7, - 0x35, 0xf1, 0xfa, 0x49, 0xf1, 0x22, 0x63, 0x46, 0x63, 0x8c, 0x53, 0xfc, 0xa9, 0x00, 0x6b, 0x92, - 0xd8, 0x8d, 0xbc, 0x36, 0xfd, 0x2f, 0x44, 0x8c, 0x12, 0x60, 0xf3, 0x1a, 0x84, 0x4d, 0x3c, 0x14, - 0x40, 0x85, 0x0a, 0xa8, 0x78, 0x6a, 0x88, 0xf5, 0x7f, 0xe1, 0x60, 0xfd, 0x17, 0x83, 0x4a, 0x65, - 0x9f, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0x17, 0x16, 0x4c, 0x09, 0x01, 0x8a, 0x09, - 0x1f, 0xd0, 0xdb, 0x9b, 0x5e, 0x42, 0x7c, 0x2f, 0x4e, 0xa6, 0x2a, 0xac, 0x0f, 0x1f, 0x3a, 0x58, - 0x1f, 0xe6, 0xd2, 0xd4, 0x31, 0x89, 0x93, 0xc8, 0x73, 0x29, 0x0e, 0x9d, 0x06, 0xf5, 0xf3, 0xa2, - 0x5b, 0x53, 0x73, 0x7d, 0x7a, 0x81, 0xfb, 0xf6, 0x0f, 0xfd, 0x90, 0x05, 0x67, 0x02, 0xa7, 0x45, - 0xe2, 0xb6, 0xc3, 0x08, 0x33, 0x70, 0xdd, 0x77, 0xdc, 0x2d, 0xd6, 0xfd, 0x61, 0xd6, 0xfd, 0x0b, - 0x83, 0x2d, 0x8d, 0x2b, 0x51, 0xd8, 0x69, 0x5f, 0xf7, 0x82, 0x66, 0xdd, 0x16, 0x3d, 0x3a, 0x73, - 0xa3, 0x2f, 0x69, 0xbc, 0x0b, 0x5b, 0xf4, 0x63, 0x16, 0x4c, 0x86, 0x51, 0x7b, 0xd3, 0x09, 0x48, - 0x53, 0x42, 0xe3, 0xa9, 0x11, 0xb6, 0x4e, 0x3f, 0x7c, 0xb0, 0xb1, 0x5c, 0xce, 0x92, 0x5d, 0x0a, - 0x03, 0x2f, 0x09, 0xa3, 0x06, 0x49, 0x12, 0x2f, 0xd8, 0x88, 0xeb, 0xa7, 0xee, 0xef, 0x4c, 0x4f, - 0xf6, 0x60, 0xe1, 0xde, 0xfe, 0xa0, 0xef, 0x80, 0xd1, 0xb8, 0x1b, 0xb8, 0xb7, 0xbd, 0xa0, 0x19, - 0xde, 0x8d, 0xa7, 0xaa, 0x45, 0xac, 0xf5, 0x86, 0x22, 0x28, 0x56, 0xab, 0x66, 0x80, 0x4d, 0x6e, - 0xf9, 0x1f, 0x4e, 0xcf, 0xbb, 0x5a, 0xd1, 0x1f, 0x4e, 0x4f, 0xa6, 0x5d, 0xd8, 0xa2, 0xef, 0xb5, - 0x60, 0x3c, 0xf6, 0x36, 0x02, 0x27, 0xe9, 0x44, 0xe4, 0x3a, 0xe9, 0xc6, 0x53, 0xc0, 0x3a, 0x72, - 0xed, 0x80, 0xa3, 0x62, 0x90, 0xac, 0x9f, 0x12, 0x7d, 0x1c, 0x37, 0x5b, 0x63, 0x9c, 0xe6, 0x9b, - 0xb7, 0x2a, 0xf5, 0xb4, 0x1e, 0x7d, 0x84, 0xab, 0x52, 0xaf, 0x80, 0xbe, 0xfd, 0x43, 0x7f, 0x03, - 0x8e, 0xf3, 0x26, 0xf5, 0x19, 0xe2, 0xa9, 0x31, 0x26, 0xc2, 0x4f, 0xde, 0xdf, 0x99, 0x3e, 0xde, - 0xc8, 0xc0, 0x70, 0x0f, 0x36, 0x7a, 0x05, 0xa6, 0xdb, 0x24, 0x6a, 0x79, 0xc9, 0x72, 0xe0, 0x77, - 0xa5, 0x62, 0x70, 0xc3, 0x36, 0x69, 0x8a, 0xee, 0xc4, 0x53, 0xe3, 0xe7, 0xad, 0xe7, 0xaa, 0xf5, - 0xb7, 0x8a, 0x6e, 0x4e, 0xaf, 0xec, 0x8e, 0x8e, 0xf7, 0xa2, 0x87, 0x7e, 0xd5, 0x82, 0x33, 0x86, - 0xfc, 0x6e, 0x90, 0x68, 0xdb, 0x73, 0xc9, 0xac, 0xeb, 0x86, 0x9d, 0x20, 0x89, 0xa7, 0x26, 0xd8, - 0x98, 0xaf, 0x1d, 0x86, 0x36, 0x49, 0xb3, 0xd2, 0x93, 0xb8, 0x2f, 0x4a, 0x8c, 0x77, 0xe9, 0xa9, - 0xfd, 0xeb, 0x25, 0x38, 0x9e, 0xb5, 0x2d, 0xd0, 0x3f, 0xb2, 0xe0, 0xd8, 0x9d, 0xbb, 0xc9, 0x6a, - 0xb8, 0x45, 0x82, 0xb8, 0xde, 0xa5, 0x1a, 0x80, 0x69, 0xd5, 0xd1, 0x8b, 0x6e, 0xb1, 0x56, 0xcc, - 0xcc, 0xb5, 0x34, 0x97, 0x4b, 0x41, 0x12, 0x75, 0xeb, 0x4f, 0x8a, 0x77, 0x3a, 0x76, 0xed, 0xf6, - 0xaa, 0x09, 0xc5, 0xd9, 0x4e, 0x9d, 0xf9, 0x9c, 0x05, 0x27, 0xf3, 0x48, 0xa0, 0xe3, 0x50, 0xde, - 0x22, 0x5d, 0x6e, 0x6b, 0x63, 0xfa, 0x13, 0xbd, 0x0c, 0x95, 0x6d, 0xc7, 0xef, 0x10, 0x61, 0x00, - 0x5e, 0x39, 0xd8, 0x8b, 0xa8, 0x9e, 0x61, 0x4e, 0xf5, 0x5b, 0x4a, 0x2f, 0x5a, 0xf6, 0x6f, 0x96, - 0x61, 0xd4, 0xf8, 0x68, 0x47, 0x60, 0xd4, 0x86, 0x29, 0xa3, 0x76, 0xa9, 0xb0, 0xf9, 0xd6, 0xd7, - 0xaa, 0xbd, 0x9b, 0xb1, 0x6a, 0x97, 0x8b, 0x63, 0xb9, 0xab, 0x59, 0x8b, 0x12, 0xa8, 0x85, 0x6d, - 0xba, 0x09, 0xa4, 0xd6, 0xd1, 0x50, 0x11, 0x9f, 0x70, 0x59, 0x92, 0xab, 0x8f, 0xdf, 0xdf, 0x99, - 0xae, 0xa9, 0xbf, 0x58, 0x33, 0xb2, 0x7f, 0xcf, 0x82, 0x93, 0x46, 0x1f, 0xe7, 0xc2, 0xa0, 0xc9, - 0xb6, 0x30, 0xe8, 0x3c, 0x0c, 0x25, 0xdd, 0xb6, 0xdc, 0x68, 0xaa, 0x91, 0x5a, 0xed, 0xb6, 0x09, - 0x66, 0x90, 0xc7, 0x7d, 0xff, 0xf5, 0x43, 0x16, 0x3c, 0x91, 0x2f, 0x60, 0xd0, 0xb3, 0x30, 0xcc, - 0xbd, 0x0c, 0xe2, 0xed, 0xf4, 0x27, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x05, 0xa8, 0x29, 0xed, 0x28, - 0xde, 0x71, 0x52, 0xa0, 0xd6, 0xb4, 0x4a, 0xd5, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0x61, 0xdc, 0xaa, - 0x41, 0x63, 0xdb, 0x72, 0x06, 0xb1, 0x7f, 0xc7, 0x82, 0x6f, 0x18, 0x44, 0xec, 0x1d, 0x5e, 0x1f, - 0x1b, 0x70, 0xaa, 0x49, 0xd6, 0x9d, 0x8e, 0x9f, 0xa4, 0x39, 0x8a, 0x4e, 0x3f, 0x2d, 0x1e, 0x3e, - 0x35, 0x9f, 0x87, 0x84, 0xf3, 0x9f, 0xb5, 0xff, 0xa3, 0xc5, 0x1c, 0x02, 0xf2, 0xb5, 0x8e, 0x60, - 0x53, 0x16, 0xa4, 0x37, 0x65, 0x0b, 0x85, 0x2d, 0xd3, 0x3e, 0xbb, 0xb2, 0x1f, 0xb0, 0xe0, 0x8c, - 0x81, 0xb5, 0xe4, 0x24, 0xee, 0xe6, 0xa5, 0x7b, 0xed, 0x88, 0xc4, 0x31, 0x9d, 0x52, 0x4f, 0x1b, - 0xe2, 0xb8, 0x3e, 0x2a, 0x28, 0x94, 0xaf, 0x93, 0x2e, 0x97, 0xcd, 0xcf, 0x43, 0x95, 0xaf, 0xb9, - 0x30, 0x12, 0x1f, 0x49, 0xbd, 0xdb, 0xb2, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xcc, 0x64, 0x2e, - 0x95, 0x41, 0xd4, 0x4c, 0x00, 0xfa, 0xdd, 0x6f, 0xb1, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, - 0x4a, 0x44, 0xd8, 0x7c, 0x68, 0x5e, 0xf6, 0x88, 0xdf, 0x8c, 0xe9, 0x86, 0xd1, 0x09, 0x82, 0x30, - 0x11, 0x7b, 0x3f, 0x63, 0xc3, 0x38, 0xab, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0xfa, 0xce, 0x1a, 0xf1, - 0xf9, 0x88, 0x0a, 0xa6, 0x8b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xbf, 0xc4, 0xb6, 0xa6, 0x4a, 0xa2, - 0x91, 0xa3, 0xf0, 0x6b, 0x44, 0x29, 0x15, 0xb0, 0x52, 0x9c, 0x3c, 0x26, 0xfd, 0x7d, 0x1b, 0xaf, - 0x66, 0xb4, 0x00, 0x2e, 0x94, 0xeb, 0xee, 0xfe, 0x8d, 0x2f, 0x95, 0x61, 0x3a, 0xfd, 0x40, 0x8f, - 0x12, 0xa1, 0x9b, 0x69, 0x83, 0x51, 0xd6, 0x1b, 0x68, 0xe0, 0x63, 0x13, 0xaf, 0x8f, 0x1c, 0x2e, - 0x1d, 0xa6, 0x1c, 0x36, 0xd5, 0x44, 0x79, 0x0f, 0x35, 0x31, 0xa7, 0x46, 0x7d, 0x88, 0x61, 0xbe, - 0xad, 0xc7, 0x85, 0x78, 0x7a, 0x25, 0x0a, 0x37, 0xd8, 0x9a, 0xdb, 0x26, 0x74, 0x33, 0x95, 0xe3, - 0x16, 0x3c, 0x0f, 0x43, 0x71, 0x42, 0xda, 0x53, 0x95, 0xb4, 0x0c, 0x6e, 0x24, 0xa4, 0x8d, 0x19, - 0x04, 0x7d, 0x1b, 0x1c, 0x4b, 0x9c, 0x68, 0x83, 0x24, 0x11, 0xd9, 0xf6, 0x98, 0x5b, 0x99, 0xed, - 0x8c, 0x6b, 0xf5, 0x13, 0xd4, 0x24, 0x5b, 0x65, 0x20, 0x2c, 0x41, 0x38, 0x8b, 0x6b, 0xff, 0xd7, - 0x12, 0x3c, 0x99, 0xfe, 0x3e, 0x5a, 0x6b, 0x7e, 0x7b, 0x4a, 0x6b, 0xbe, 0xcd, 0xd4, 0x9a, 0x0f, - 0x76, 0xa6, 0x9f, 0xea, 0xf3, 0xd8, 0xd7, 0x8d, 0x52, 0x45, 0x57, 0x32, 0x5f, 0xe8, 0x42, 0xcf, - 0x17, 0x7a, 0xba, 0xcf, 0x3b, 0x66, 0xac, 0x9d, 0x67, 0x61, 0x38, 0x22, 0x4e, 0x1c, 0x06, 0xe2, - 0x3b, 0xa9, 0xc5, 0x80, 0x59, 0x2b, 0x16, 0x50, 0xfb, 0xb7, 0x6b, 0xd9, 0xc1, 0xbe, 0xc2, 0x5d, - 0xe5, 0x61, 0x84, 0x3c, 0x18, 0x62, 0xfb, 0x3f, 0x2e, 0x76, 0xae, 0x1f, 0x6c, 0x89, 0x52, 0x15, - 0xa3, 0x48, 0xd7, 0xab, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x58, 0xa0, 0x7b, 0x50, 0x75, 0xe5, 0x4e, - 0xab, 0x54, 0x84, 0xb7, 0x53, 0xec, 0xb3, 0x34, 0xc7, 0x31, 0xaa, 0x0b, 0xd4, 0xf6, 0x4c, 0x71, - 0x43, 0x04, 0xca, 0x1b, 0x5e, 0x22, 0x3e, 0xeb, 0x01, 0x37, 0xde, 0x57, 0x3c, 0xe3, 0x15, 0x47, - 0xa8, 0x82, 0xba, 0xe2, 0x25, 0x98, 0xd2, 0x47, 0x9f, 0xb1, 0x60, 0x34, 0x76, 0x5b, 0x2b, 0x51, - 0xb8, 0xed, 0x35, 0x49, 0x24, 0x0c, 0xd0, 0x03, 0x8a, 0xbd, 0xc6, 0xdc, 0x92, 0x24, 0xa8, 0xf9, - 0x72, 0x47, 0x88, 0x86, 0x60, 0x93, 0x2f, 0xdd, 0x98, 0x3d, 0x29, 0xde, 0x7d, 0x9e, 0xb8, 0x6c, - 0xc5, 0xc9, 0x0d, 0x35, 0x9b, 0x29, 0x07, 0x36, 0xc8, 0xe7, 0x3b, 0xee, 0x16, 0x5d, 0x6f, 0xba, - 0x43, 0x4f, 0xdd, 0xdf, 0x99, 0x7e, 0x72, 0x2e, 0x9f, 0x27, 0xee, 0xd7, 0x19, 0x36, 0x60, 0xed, - 0x8e, 0xef, 0x63, 0xf2, 0x4a, 0x87, 0x30, 0xdf, 0x5a, 0x01, 0x03, 0xb6, 0xa2, 0x09, 0x66, 0x06, - 0xcc, 0x80, 0x60, 0x93, 0x2f, 0x7a, 0x05, 0x86, 0x5b, 0x4e, 0x12, 0x79, 0xf7, 0x84, 0x43, 0xed, - 0x80, 0x5b, 0xa4, 0x25, 0x46, 0x4b, 0x33, 0x67, 0x56, 0x00, 0x6f, 0xc4, 0x82, 0x11, 0x6a, 0x41, - 0xa5, 0x45, 0xa2, 0x0d, 0x32, 0x55, 0x2d, 0xe2, 0xa4, 0x61, 0x89, 0x92, 0xd2, 0x0c, 0x6b, 0xd4, - 0xf2, 0x62, 0x6d, 0x98, 0x73, 0x41, 0x2f, 0x43, 0x35, 0x26, 0x3e, 0x71, 0xa9, 0xed, 0x54, 0x63, - 0x1c, 0xdf, 0x39, 0xa0, 0x1d, 0x49, 0x8d, 0x96, 0x86, 0x78, 0x94, 0x2f, 0x30, 0xf9, 0x0f, 0x2b, - 0x92, 0x74, 0x00, 0xdb, 0x7e, 0x67, 0xc3, 0x0b, 0xa6, 0xa0, 0x88, 0x01, 0x5c, 0x61, 0xb4, 0x32, - 0x03, 0xc8, 0x1b, 0xb1, 0x60, 0x64, 0xff, 0x17, 0x0b, 0x50, 0x5a, 0xa8, 0x1d, 0x81, 0xc1, 0xfc, - 0x4a, 0xda, 0x60, 0x5e, 0x2c, 0xd2, 0xa2, 0xe9, 0x63, 0x33, 0xff, 0x5c, 0x0d, 0x32, 0xea, 0xe0, - 0x06, 0x89, 0x13, 0xd2, 0x7c, 0x43, 0x84, 0xbf, 0x21, 0xc2, 0xdf, 0x10, 0xe1, 0x4a, 0x84, 0xaf, - 0x65, 0x44, 0xf8, 0x7b, 0x8c, 0x55, 0xaf, 0x43, 0x1f, 0x3e, 0xa2, 0x62, 0x23, 0xcc, 0x1e, 0x18, - 0x08, 0x54, 0x12, 0x5c, 0x6b, 0x2c, 0xdf, 0xc8, 0x95, 0xd9, 0x1f, 0x49, 0xcb, 0xec, 0x83, 0xb2, - 0xf8, 0xab, 0x20, 0xa5, 0x7f, 0xd5, 0x82, 0xb7, 0xa6, 0xa5, 0x97, 0x9c, 0x39, 0x0b, 0x1b, 0x41, - 0x18, 0x91, 0x79, 0x6f, 0x7d, 0x9d, 0x44, 0x24, 0x70, 0x49, 0xac, 0x1c, 0x3f, 0x56, 0x3f, 0xc7, - 0x0f, 0x7a, 0x17, 0x8c, 0xdd, 0x89, 0xc3, 0x60, 0x25, 0xf4, 0x02, 0x21, 0x82, 0xe8, 0x8e, 0xe3, - 0xf8, 0xfd, 0x9d, 0xe9, 0x31, 0x3a, 0xa2, 0xb2, 0x1d, 0xa7, 0xb0, 0xd0, 0x1c, 0x4c, 0xde, 0x79, - 0x65, 0xc5, 0x49, 0x0c, 0x57, 0x83, 0x74, 0x0a, 0xb0, 0x93, 0xad, 0x6b, 0xef, 0xcd, 0x00, 0x71, - 0x2f, 0xbe, 0xfd, 0x77, 0x4b, 0x70, 0x3a, 0xf3, 0x22, 0xa1, 0xef, 0x87, 0x9d, 0x84, 0xee, 0x89, - 0xd0, 0x97, 0x2d, 0x38, 0xde, 0x4a, 0x7b, 0x33, 0x62, 0xe1, 0x0b, 0x7f, 0x5f, 0x61, 0x3a, 0x22, - 0xe3, 0x2e, 0xa9, 0x4f, 0x89, 0x11, 0x3a, 0x9e, 0x01, 0xc4, 0xb8, 0xa7, 0x2f, 0xe8, 0x65, 0xa8, - 0xb5, 0x9c, 0x7b, 0x37, 0xdb, 0x4d, 0x27, 0x91, 0x7b, 0xd5, 0xfe, 0x2e, 0x86, 0x4e, 0xe2, 0xf9, - 0x33, 0x3c, 0xa8, 0x66, 0x66, 0x21, 0x48, 0x96, 0xa3, 0x46, 0x12, 0x79, 0xc1, 0x06, 0xf7, 0x80, - 0x2e, 0x49, 0x32, 0x58, 0x53, 0xb4, 0xbf, 0x64, 0x65, 0x95, 0x94, 0x1a, 0x9d, 0xc8, 0x49, 0xc8, - 0x46, 0x17, 0x7d, 0x0c, 0x2a, 0x74, 0xdf, 0x28, 0x47, 0xe5, 0x76, 0x91, 0x9a, 0xd3, 0xf8, 0x12, - 0x5a, 0x89, 0xd2, 0x7f, 0x31, 0xe6, 0x4c, 0xed, 0x2f, 0xd7, 0xb2, 0xc6, 0x02, 0x0b, 0x09, 0xb8, - 0x08, 0xb0, 0x11, 0xae, 0x92, 0x56, 0xdb, 0xa7, 0xc3, 0x62, 0xb1, 0xd3, 0x1f, 0xe5, 0x47, 0xb9, - 0xa2, 0x20, 0xd8, 0xc0, 0x42, 0xdf, 0x67, 0x01, 0x6c, 0xc8, 0x39, 0x2f, 0x0d, 0x81, 0x9b, 0x45, - 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0xef, 0xb6, 0xa0, 0x9a, 0xc8, - 0xee, 0x73, 0xd5, 0xb8, 0x5a, 0x64, 0x4f, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, 0xe2, 0x8b, - 0xbe, 0xc7, 0x02, 0x88, 0xbb, 0x81, 0xbb, 0x12, 0xfa, 0x9e, 0xdb, 0x15, 0x1a, 0xf3, 0x56, 0xa1, - 0xbe, 0x1e, 0x45, 0xbd, 0x3e, 0x41, 0x47, 0x43, 0xff, 0xc7, 0x06, 0x67, 0xf4, 0x71, 0xa8, 0xc6, - 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x5a, 0xac, 0xc7, 0x89, 0xd3, 0x16, 0xe2, 0x55, 0xfc, 0xc3, 0x8a, - 0x27, 0xfa, 0x61, 0x0b, 0x8e, 0xb5, 0xd3, 0x3e, 0x44, 0xa1, 0x0e, 0x8b, 0x93, 0x01, 0x19, 0x1f, - 0x25, 0xf7, 0xb6, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, 0xea, 0x19, 0xbc, 0xdc, 0xe6, 0xfe, - 0xcc, 0x11, 0x2d, 0x01, 0xaf, 0x64, 0x81, 0xb8, 0x17, 0x1f, 0xad, 0xc0, 0x49, 0xda, 0xbb, 0x2e, - 0x37, 0x3f, 0xa5, 0x7a, 0x89, 0x99, 0x32, 0xac, 0xd6, 0xcf, 0x8a, 0x19, 0xc2, 0x0e, 0x42, 0xb2, - 0x38, 0x38, 0xf7, 0x49, 0xf4, 0x9b, 0x16, 0x9c, 0xf5, 0x98, 0x1a, 0x30, 0xbd, 0xf9, 0x5a, 0x23, - 0x88, 0x23, 0x7b, 0x52, 0xa8, 0xac, 0xe8, 0xa7, 0x7e, 0xea, 0xdf, 0x20, 0xde, 0xe0, 0xec, 0xc2, - 0x2e, 0x5d, 0xc2, 0xbb, 0x76, 0x18, 0x7d, 0x33, 0x8c, 0xcb, 0x75, 0xb1, 0x42, 0x45, 0x30, 0x53, - 0xb4, 0xb5, 0xfa, 0xe4, 0xfd, 0x9d, 0xe9, 0xf1, 0x55, 0x13, 0x80, 0xd3, 0x78, 0xf6, 0x5f, 0x0c, - 0xa5, 0x8e, 0x90, 0x94, 0x83, 0x93, 0x89, 0x1b, 0x57, 0xfa, 0x7f, 0xa4, 0xf4, 0x2c, 0x54, 0xdc, - 0x28, 0xef, 0x92, 0x16, 0x37, 0xaa, 0x29, 0xc6, 0x06, 0x73, 0x6a, 0x94, 0x4e, 0x3a, 0x59, 0x37, - 0xaa, 0x90, 0x80, 0x2f, 0x17, 0xd9, 0xa5, 0xde, 0x03, 0xbf, 0xd3, 0xa2, 0x6b, 0x93, 0x3d, 0x20, - 0xdc, 0xdb, 0x25, 0xf4, 0x9d, 0x50, 0x8b, 0x54, 0x8c, 0x4c, 0xb9, 0x88, 0xad, 0x9a, 0x9c, 0x36, - 0xa2, 0x3b, 0xea, 0x74, 0x48, 0x47, 0xc3, 0x68, 0x8e, 0xe8, 0x3d, 0x30, 0xa1, 0xfe, 0xcc, 0xb1, - 0x63, 0x21, 0x2a, 0x14, 0xcb, 0xf5, 0x27, 0xc4, 0x53, 0x13, 0x38, 0x05, 0xc5, 0x19, 0x6c, 0x14, - 0xc1, 0x30, 0x8f, 0xdb, 0x14, 0x62, 0xec, 0x80, 0xdb, 0x1d, 0x33, 0xf8, 0x53, 0xfb, 0x08, 0x79, - 0x2b, 0x16, 0x9c, 0xec, 0xcf, 0x96, 0x52, 0x27, 0x7d, 0x86, 0xbc, 0x1b, 0xe0, 0x14, 0xf3, 0x0b, - 0x16, 0x8c, 0x46, 0xa1, 0xef, 0x7b, 0xc1, 0x06, 0x95, 0xcd, 0xc2, 0xc0, 0xf8, 0xe0, 0xa1, 0xe8, - 0x78, 0x21, 0x84, 0xd9, 0x6e, 0x00, 0x6b, 0x9e, 0xd8, 0xec, 0x00, 0x7a, 0x09, 0xc6, 0x9b, 0xc4, - 0x27, 0xf4, 0xd9, 0xe5, 0x88, 0xee, 0xe3, 0xb8, 0xd7, 0x5c, 0xc5, 0xc9, 0xcc, 0x9b, 0x40, 0x9c, - 0xc6, 0xb5, 0xff, 0xc8, 0x82, 0xa9, 0x7e, 0x0a, 0x08, 0x11, 0x78, 0x4a, 0x4a, 0x57, 0xf5, 0x15, - 0x97, 0x03, 0x49, 0x4f, 0xd8, 0x10, 0xcf, 0x08, 0x3e, 0x4f, 0xad, 0xf4, 0x47, 0xc5, 0xbb, 0xd1, - 0x41, 0x1f, 0x80, 0xe3, 0xc6, 0xa0, 0xc4, 0x6a, 0x54, 0x6b, 0xf5, 0x19, 0x6a, 0xf1, 0xcd, 0x66, - 0x60, 0x0f, 0x76, 0xa6, 0x9f, 0xc8, 0xb6, 0x09, 0x0d, 0xd9, 0x43, 0xc7, 0xfe, 0xf1, 0x9e, 0x4f, - 0xad, 0x8c, 0x9b, 0xd7, 0xad, 0x1e, 0xf7, 0xc9, 0xfb, 0x0e, 0xc3, 0xa0, 0x60, 0x8e, 0x16, 0x15, - 0x94, 0xd2, 0x1f, 0xe7, 0x11, 0x06, 0x31, 0xd8, 0xbf, 0x31, 0x04, 0xbb, 0xf4, 0x6c, 0x80, 0xdd, - 0xca, 0xbe, 0x4f, 0x95, 0x3f, 0x6f, 0xa9, 0xe3, 0x43, 0x2e, 0xb4, 0x9a, 0x87, 0x35, 0xf6, 0x7c, - 0xc3, 0x18, 0xf3, 0x40, 0x1a, 0x25, 0x12, 0xd2, 0x07, 0x95, 0xe8, 0x2b, 0x56, 0xfa, 0x00, 0x94, - 0x07, 0x8f, 0x7a, 0x87, 0xd6, 0x27, 0xe3, 0x54, 0x95, 0x77, 0x4c, 0x9f, 0xc5, 0xf5, 0x3b, 0x6f, - 0x9d, 0x01, 0x58, 0xf7, 0x02, 0xc7, 0xf7, 0x5e, 0xa5, 0xdb, 0xc1, 0x0a, 0xb3, 0x68, 0x98, 0x89, - 0x78, 0x59, 0xb5, 0x62, 0x03, 0xe3, 0xcc, 0x5f, 0x87, 0x51, 0xe3, 0xcd, 0x73, 0xe2, 0x7f, 0x4e, - 0x9a, 0xf1, 0x3f, 0x35, 0x23, 0x6c, 0xe7, 0xcc, 0x7b, 0xe0, 0x78, 0xb6, 0x83, 0xfb, 0x79, 0xde, - 0xfe, 0x3f, 0x23, 0xd9, 0x13, 0xc9, 0x55, 0x12, 0xb5, 0x68, 0xd7, 0xde, 0xf0, 0xe4, 0xbd, 0xe1, - 0xc9, 0x7b, 0xc3, 0x93, 0x67, 0x1e, 0xc6, 0x08, 0x2f, 0xd5, 0xc8, 0x11, 0x79, 0xa9, 0x52, 0x7e, - 0xb7, 0x6a, 0xe1, 0x7e, 0x37, 0xfb, 0x33, 0x3d, 0x47, 0x15, 0xab, 0x11, 0x21, 0x28, 0x84, 0x4a, - 0x10, 0x36, 0x89, 0x34, 0xea, 0xaf, 0x15, 0x63, 0xa1, 0xde, 0x08, 0x9b, 0x46, 0x58, 0x3e, 0xfd, - 0x17, 0x63, 0xce, 0xc7, 0xfe, 0xdf, 0x3d, 0x86, 0xcd, 0x6d, 0xe6, 0x27, 0xda, 0x26, 0x41, 0x82, - 0xae, 0xa7, 0xac, 0xbc, 0x6f, 0xce, 0x9c, 0xba, 0xbf, 0xb5, 0x5f, 0x02, 0xd6, 0x5d, 0x4a, 0x61, - 0x86, 0x91, 0x30, 0x0c, 0xc2, 0xcf, 0x5b, 0x30, 0xe1, 0xa4, 0x38, 0x15, 0x96, 0x51, 0x63, 0x9e, - 0x98, 0x28, 0x83, 0x3a, 0x63, 0x2b, 0x66, 0x78, 0xdb, 0x9f, 0x1e, 0x86, 0xd4, 0xc6, 0x81, 0x4f, - 0xf8, 0x6f, 0x84, 0x91, 0x88, 0xb4, 0xc3, 0x9b, 0x78, 0x51, 0xbc, 0xb4, 0x4e, 0xeb, 0xe2, 0xcd, - 0x58, 0xc2, 0xa9, 0xb2, 0x6f, 0x3b, 0xc9, 0xa6, 0xd0, 0xe2, 0x4a, 0xd9, 0xaf, 0x38, 0xc9, 0x26, - 0x66, 0x10, 0x6a, 0xf3, 0x27, 0xa9, 0xa0, 0x07, 0x71, 0xb8, 0xaf, 0xba, 0x98, 0x0e, 0x89, 0xc0, - 0x19, 0x6c, 0xf4, 0x0a, 0x0c, 0x6d, 0x12, 0xbf, 0x25, 0xe6, 0x7c, 0xa3, 0xb8, 0x61, 0x62, 0xef, - 0x7a, 0x95, 0xf8, 0x2d, 0xae, 0x02, 0xe8, 0x2f, 0xcc, 0x58, 0xd1, 0x05, 0x5f, 0xdb, 0xea, 0xc4, - 0x49, 0xd8, 0xf2, 0x5e, 0x95, 0x3e, 0xed, 0xf7, 0x15, 0xcc, 0xf8, 0xba, 0xa4, 0xcf, 0x9d, 0x87, - 0xea, 0x2f, 0xd6, 0x9c, 0x59, 0x3f, 0x9a, 0x5e, 0xc4, 0xd6, 0x4a, 0x57, 0xb8, 0xa6, 0x8b, 0xee, - 0xc7, 0xbc, 0xa4, 0xcf, 0xfb, 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0x75, 0x95, 0xe0, 0x19, 0x65, 0x7d, - 0xb8, 0x59, 0x70, 0x1f, 0xb8, 0xd0, 0xc9, 0x15, 0x40, 0xcf, 0x40, 0xc5, 0xdd, 0x74, 0xa2, 0x64, - 0x6a, 0x8c, 0x4d, 0x1a, 0xb5, 0x7c, 0xe7, 0x68, 0x23, 0xe6, 0x30, 0xf4, 0x34, 0x94, 0x23, 0xb2, - 0xce, 0x82, 0xd4, 0x8d, 0xf0, 0x38, 0x4c, 0xd6, 0x31, 0x6d, 0x57, 0x06, 0xe9, 0x44, 0xdf, 0xb8, - 0xc9, 0x1f, 0x2d, 0xa5, 0x2d, 0xda, 0xf4, 0xc8, 0xf0, 0xf5, 0xe0, 0x76, 0xa2, 0x58, 0xba, 0x42, - 0x8d, 0xf5, 0xc0, 0x9a, 0xb1, 0x84, 0xa3, 0x4f, 0x5a, 0x30, 0x72, 0x27, 0x0e, 0x83, 0x40, 0x2d, - 0xec, 0x5b, 0x05, 0x0f, 0xd6, 0x35, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, 0x97, 0x76, 0x97, - 0xdc, 0x73, 0xfd, 0x4e, 0xb3, 0x27, 0x26, 0xea, 0x12, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xbd, 0x80, - 0xa3, 0x0e, 0xa5, 0x51, 0x17, 0x02, 0x81, 0x2a, 0xe0, 0xf6, 0x4f, 0x57, 0xe1, 0x54, 0xee, 0xf2, - 0xa1, 0xb6, 0x26, 0xb3, 0xe6, 0x2e, 0x7b, 0x3e, 0x91, 0xd1, 0x80, 0xcc, 0xd6, 0xbc, 0xa5, 0x5a, - 0xb1, 0x81, 0x81, 0xbe, 0x0b, 0xa0, 0xed, 0x44, 0x4e, 0x8b, 0xa8, 0xa3, 0x8a, 0x03, 0x9b, 0x74, - 0xb4, 0x1f, 0x2b, 0x92, 0xa6, 0x76, 0xd7, 0xa8, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, 0x0b, 0x30, 0x1a, - 0x11, 0x9f, 0x38, 0x31, 0xcb, 0x82, 0xc8, 0x26, 0x8b, 0x61, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x56, - 0x05, 0x4e, 0x0e, 0xa5, 0xa3, 0x8a, 0xd2, 0xc1, 0x93, 0xe8, 0x8b, 0x16, 0x4c, 0xac, 0x7b, 0x3e, - 0xd1, 0xdc, 0x45, 0x6a, 0xd7, 0xf2, 0xc1, 0x5f, 0xf2, 0xb2, 0x49, 0x57, 0xcb, 0xd0, 0x54, 0x73, - 0x8c, 0x33, 0xec, 0xe9, 0x67, 0xde, 0x26, 0x11, 0x13, 0xbe, 0xc3, 0xe9, 0xcf, 0x7c, 0x8b, 0x37, - 0x63, 0x09, 0x47, 0xb3, 0x70, 0xac, 0xed, 0xc4, 0xf1, 0x5c, 0x44, 0x9a, 0x24, 0x48, 0x3c, 0xc7, - 0xe7, 0xb9, 0x54, 0x55, 0x9d, 0x55, 0xb0, 0x92, 0x06, 0xe3, 0x2c, 0x3e, 0x7a, 0x3f, 0x3c, 0xc9, - 0x7d, 0x81, 0x4b, 0x5e, 0x1c, 0x7b, 0xc1, 0x86, 0x9e, 0x06, 0xc2, 0x25, 0x3a, 0x2d, 0x48, 0x3d, - 0xb9, 0x90, 0x8f, 0x86, 0xfb, 0x3d, 0x8f, 0x9e, 0x87, 0x6a, 0xbc, 0xe5, 0xb5, 0xe7, 0xa2, 0x66, - 0xcc, 0xce, 0x01, 0xab, 0xda, 0x01, 0xdf, 0x10, 0xed, 0x58, 0x61, 0x20, 0x17, 0xc6, 0xf8, 0x27, - 0xe1, 0x91, 0x9f, 0x42, 0x82, 0xbe, 0xbd, 0xaf, 0x05, 0x23, 0x72, 0xad, 0x67, 0xb0, 0x73, 0xf7, - 0x92, 0x3c, 0x95, 0xe4, 0x87, 0x68, 0xb7, 0x0c, 0x32, 0x38, 0x45, 0x34, 0xbd, 0x99, 0x1d, 0x1d, - 0x60, 0x33, 0xfb, 0x02, 0x8c, 0x6e, 0x75, 0xd6, 0x88, 0x18, 0x79, 0x21, 0xd8, 0xd4, 0xec, 0xbb, - 0xae, 0x41, 0xd8, 0xc4, 0x63, 0x41, 0xb7, 0x6d, 0x4f, 0xfc, 0x8b, 0xa7, 0xc6, 0x8d, 0xa0, 0xdb, - 0x95, 0x05, 0xd9, 0x8c, 0x4d, 0x1c, 0xda, 0x35, 0x3a, 0x16, 0xab, 0x24, 0x66, 0x39, 0x35, 0x74, - 0xb8, 0x54, 0xd7, 0x1a, 0x12, 0x80, 0x35, 0x0e, 0x5a, 0x81, 0x93, 0xf4, 0x4f, 0x83, 0xe5, 0x9a, - 0xdf, 0x72, 0x7c, 0xaf, 0xc9, 0x23, 0x40, 0x8f, 0xa5, 0x3d, 0xd9, 0x8d, 0x1c, 0x1c, 0x9c, 0xfb, - 0xa4, 0xfd, 0x23, 0xa5, 0xb4, 0x65, 0x65, 0x8a, 0x30, 0x14, 0x53, 0x41, 0x95, 0xdc, 0x72, 0x22, - 0x69, 0xe9, 0x1d, 0x30, 0x21, 0x4e, 0xd0, 0xbd, 0xe5, 0x44, 0xa6, 0xc8, 0x63, 0x0c, 0xb0, 0xe4, - 0x84, 0xee, 0xc0, 0x50, 0xe2, 0x3b, 0x05, 0xa5, 0xdb, 0x1a, 0x1c, 0xb5, 0xfb, 0x6f, 0x71, 0x36, - 0xc6, 0x8c, 0x07, 0x3a, 0x4b, 0xb7, 0xad, 0x6b, 0xf2, 0x4c, 0x55, 0xec, 0x34, 0xd7, 0x62, 0xcc, - 0x5a, 0xed, 0xbf, 0x35, 0x9e, 0xa3, 0x75, 0x94, 0x21, 0x80, 0x2e, 0x02, 0xd0, 0x49, 0xb3, 0x12, - 0x91, 0x75, 0xef, 0x9e, 0x30, 0xc4, 0x94, 0x64, 0xbb, 0xa1, 0x20, 0xd8, 0xc0, 0x92, 0xcf, 0x34, - 0x3a, 0xeb, 0xf4, 0x99, 0x52, 0xef, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x2e, 0x18, 0xf6, 0x5a, - 0xce, 0x86, 0x8a, 0x07, 0x3f, 0x4b, 0x45, 0xda, 0x02, 0x6b, 0x79, 0xb0, 0x33, 0x3d, 0xa1, 0x3a, - 0xc4, 0x9a, 0xb0, 0xc0, 0x45, 0x3f, 0x6e, 0xc1, 0x98, 0x1b, 0xb6, 0x5a, 0x61, 0xc0, 0xfd, 0x06, - 0xc2, 0x09, 0x72, 0xe7, 0xb0, 0xcc, 0xa4, 0x99, 0x39, 0x83, 0x19, 0xf7, 0x82, 0xa8, 0xbc, 0x60, - 0x13, 0x84, 0x53, 0xbd, 0x32, 0x25, 0x5f, 0x65, 0x0f, 0xc9, 0xf7, 0xb3, 0x16, 0x4c, 0xf2, 0x67, - 0x0d, 0x77, 0x86, 0xc8, 0x6a, 0x0d, 0x0f, 0xf9, 0xb5, 0x7a, 0x3c, 0x3c, 0xca, 0xad, 0xdf, 0x03, - 0xc7, 0xbd, 0x9d, 0x44, 0x57, 0x60, 0x72, 0x3d, 0x8c, 0x5c, 0x62, 0x0e, 0x84, 0x10, 0xdb, 0x8a, - 0xd0, 0xe5, 0x2c, 0x02, 0xee, 0x7d, 0x06, 0xdd, 0x82, 0x27, 0x8c, 0x46, 0x73, 0x1c, 0xb8, 0xe4, - 0x3e, 0x27, 0xa8, 0x3d, 0x71, 0x39, 0x17, 0x0b, 0xf7, 0x79, 0x3a, 0x2d, 0x24, 0x6b, 0x03, 0x08, - 0xc9, 0x8f, 0xc0, 0x69, 0xb7, 0x77, 0x64, 0xb6, 0xe3, 0xce, 0x5a, 0xcc, 0xe5, 0x78, 0xb5, 0xfe, - 0x66, 0x41, 0xe0, 0xf4, 0x5c, 0x3f, 0x44, 0xdc, 0x9f, 0x06, 0xfa, 0x18, 0x54, 0x23, 0xc2, 0xbe, - 0x4a, 0x2c, 0x52, 0x3c, 0x0f, 0xe8, 0xe6, 0xd1, 0x16, 0x3c, 0x27, 0xab, 0x35, 0x93, 0x68, 0x88, - 0xb1, 0xe2, 0x88, 0xee, 0xc2, 0x48, 0x9b, 0xee, 0x0f, 0x45, 0xae, 0xe6, 0x81, 0xb7, 0x7f, 0x8a, - 0x39, 0x3b, 0x34, 0x33, 0x6a, 0x6b, 0x70, 0x26, 0x58, 0x72, 0xa3, 0xb6, 0x9a, 0x1b, 0xb6, 0xda, - 0x61, 0x40, 0x82, 0x44, 0x2a, 0x91, 0x09, 0x7e, 0xb2, 0x25, 0x5b, 0xb1, 0x81, 0xd1, 0xa3, 0xcb, - 0x35, 0xda, 0xd4, 0xe4, 0x2e, 0xba, 0xdc, 0xa0, 0xd6, 0xef, 0x79, 0xaa, 0x6c, 0x98, 0x3f, 0xf5, - 0xb6, 0x97, 0x6c, 0x86, 0x9d, 0x44, 0xba, 0x07, 0x84, 0xa2, 0x52, 0xca, 0x66, 0x31, 0x07, 0x07, - 0xe7, 0x3e, 0x99, 0xd5, 0xac, 0xc7, 0x1e, 0x4e, 0xb3, 0x1e, 0x1f, 0x40, 0xb3, 0x36, 0xe0, 0x14, - 0xeb, 0x81, 0xb0, 0x92, 0xa5, 0xb7, 0x36, 0x9e, 0x42, 0xac, 0xf3, 0x2a, 0xcd, 0x69, 0x31, 0x0f, - 0x09, 0xe7, 0x3f, 0x7b, 0xe6, 0xdb, 0x61, 0xb2, 0x47, 0xc8, 0xed, 0xcb, 0x13, 0x3b, 0x0f, 0x4f, - 0xe4, 0x8b, 0x93, 0x7d, 0xf9, 0x63, 0x7f, 0x3a, 0x93, 0x81, 0x60, 0x6c, 0xd1, 0x06, 0xf0, 0xed, - 0x3b, 0x50, 0x26, 0xc1, 0xb6, 0xd0, 0xae, 0x97, 0x0f, 0x36, 0xab, 0x2f, 0x05, 0xdb, 0x5c, 0x1a, - 0x32, 0x07, 0xe6, 0xa5, 0x60, 0x1b, 0x53, 0xda, 0xe8, 0x07, 0xad, 0xd4, 0x06, 0x82, 0x9f, 0x08, - 0x7c, 0xf8, 0x50, 0xf6, 0xa4, 0x03, 0xef, 0x29, 0xec, 0x7f, 0x5d, 0x82, 0xf3, 0x7b, 0x11, 0x19, - 0x60, 0xf8, 0x9e, 0x81, 0xe1, 0x98, 0xc5, 0x14, 0x09, 0x75, 0x35, 0x4a, 0x57, 0x31, 0x8f, 0x32, - 0xfa, 0x08, 0x16, 0x20, 0xe4, 0x43, 0xb9, 0xe5, 0xb4, 0x85, 0xa3, 0x78, 0xe1, 0xa0, 0x69, 0x9c, - 0xf4, 0xbf, 0xe3, 0x2f, 0x39, 0x6d, 0x3e, 0xe7, 0x8d, 0x06, 0x4c, 0xd9, 0xa0, 0x04, 0x2a, 0x4e, - 0x14, 0x39, 0x32, 0x80, 0xe5, 0x7a, 0x31, 0xfc, 0x66, 0x29, 0x49, 0x7e, 0xfe, 0x9f, 0x6a, 0xc2, - 0x9c, 0x99, 0xfd, 0xc3, 0xd5, 0x54, 0xce, 0x1f, 0x8b, 0x4a, 0x8a, 0x61, 0x58, 0xf8, 0x87, 0xad, - 0xa2, 0xb3, 0x67, 0x79, 0x52, 0x3d, 0xf3, 0x40, 0x88, 0xa2, 0x27, 0x82, 0x15, 0xfa, 0x9c, 0xc5, - 0x4a, 0x8b, 0xc8, 0x44, 0x4a, 0xb1, 0xab, 0x3f, 0x9c, 0x4a, 0x27, 0x66, 0xc1, 0x12, 0xd9, 0x88, - 0x4d, 0xee, 0xa2, 0x8c, 0x12, 0xdb, 0xcd, 0xf4, 0x96, 0x51, 0x62, 0xbb, 0x13, 0x09, 0x47, 0xf7, - 0x72, 0xa2, 0x8f, 0x0a, 0xa8, 0x38, 0x31, 0x40, 0xbc, 0xd1, 0x57, 0x2c, 0x98, 0xf4, 0xb2, 0x61, - 0x24, 0x62, 0x0f, 0x7c, 0xbb, 0x18, 0x67, 0x6e, 0x6f, 0x94, 0x8a, 0x32, 0x74, 0x7a, 0x40, 0xb8, - 0xb7, 0x33, 0xa8, 0x09, 0x43, 0x5e, 0xb0, 0x1e, 0x0a, 0xf3, 0xae, 0x7e, 0xb0, 0x4e, 0x2d, 0x04, - 0xeb, 0xa1, 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xd4, 0xd1, 0x22, 0x9c, 0x94, 0x99, 0x5d, 0x57, 0xbd, - 0x38, 0x09, 0xa3, 0xee, 0xa2, 0xd7, 0xf2, 0x12, 0x66, 0x9a, 0x95, 0xeb, 0x53, 0x54, 0xbd, 0xe1, - 0x1c, 0x38, 0xce, 0x7d, 0x0a, 0xbd, 0x0a, 0x23, 0x32, 0x74, 0xa3, 0x5a, 0x84, 0x3f, 0xa1, 0x77, - 0xfe, 0xab, 0xc9, 0xd4, 0x10, 0xb1, 0x1b, 0x92, 0x21, 0xfa, 0xac, 0x05, 0x13, 0xfc, 0xf7, 0xd5, - 0x6e, 0x93, 0x67, 0x9a, 0xd6, 0x8a, 0xf0, 0x5b, 0x37, 0x52, 0x34, 0xeb, 0xe8, 0xfe, 0xce, 0xf4, - 0x44, 0xba, 0x0d, 0x67, 0xf8, 0xda, 0xff, 0x78, 0x0c, 0x7a, 0x83, 0x5d, 0xd2, 0x91, 0x2d, 0xd6, - 0x91, 0x47, 0xb6, 0xdc, 0x81, 0xa1, 0x58, 0x07, 0x78, 0x14, 0xb0, 0xcc, 0x04, 0x57, 0x7d, 0xfe, - 0xde, 0x0d, 0x5c, 0xcc, 0x78, 0xa0, 0x8e, 0x8a, 0x82, 0x29, 0x17, 0x74, 0xe4, 0x3f, 0x48, 0x20, - 0x0c, 0xba, 0x07, 0x23, 0x9b, 0x7c, 0x3a, 0x8a, 0xbd, 0xde, 0xd2, 0x41, 0xc7, 0x37, 0x35, 0xc7, - 0xf5, 0xe4, 0x13, 0x0d, 0x58, 0xb2, 0x63, 0x81, 0x94, 0x46, 0xa8, 0x17, 0x17, 0x24, 0xc5, 0x25, - 0xcd, 0x0e, 0x1e, 0xe7, 0xf5, 0x51, 0x18, 0x8b, 0x88, 0x1b, 0x06, 0xae, 0xe7, 0x93, 0xe6, 0xac, - 0x3c, 0x09, 0xdc, 0x4f, 0x3a, 0x24, 0xf3, 0x26, 0x61, 0x83, 0x06, 0x4e, 0x51, 0x64, 0xeb, 0x4c, - 0xd5, 0x4f, 0xa0, 0x1f, 0x84, 0x88, 0x83, 0x8f, 0xc5, 0x82, 0xaa, 0x35, 0x30, 0x9a, 0x7c, 0x9d, - 0xa5, 0xdb, 0x70, 0x86, 0x2f, 0xfa, 0x00, 0x40, 0xb8, 0xc6, 0xa3, 0x25, 0x67, 0x13, 0x71, 0x0a, - 0xb2, 0x9f, 0x57, 0x9d, 0xe0, 0x39, 0xd7, 0x92, 0x02, 0x36, 0xa8, 0xa1, 0xeb, 0x00, 0x7c, 0xe5, - 0xac, 0x76, 0xdb, 0x72, 0x43, 0x28, 0xf3, 0x59, 0xa1, 0xa1, 0x20, 0x0f, 0x76, 0xa6, 0x7b, 0x7d, - 0xce, 0xec, 0x34, 0xcd, 0x78, 0x1c, 0x7d, 0x07, 0x8c, 0xc4, 0x9d, 0x56, 0xcb, 0x51, 0x67, 0x24, - 0x05, 0x66, 0x71, 0x73, 0xba, 0x86, 0x60, 0xe4, 0x0d, 0x58, 0x72, 0x44, 0x77, 0xa8, 0x88, 0x17, - 0x12, 0x8a, 0xaf, 0x22, 0x6e, 0xa1, 0x70, 0x4f, 0xe0, 0xbb, 0xe5, 0x2e, 0x06, 0xe7, 0xe0, 0x3c, - 0xd8, 0x99, 0x7e, 0x22, 0xdd, 0xbe, 0x18, 0x8a, 0xbc, 0xea, 0x5c, 0x9a, 0xe8, 0x9a, 0x2c, 0xd4, - 0x46, 0x5f, 0x5b, 0x56, 0xf9, 0x79, 0x4e, 0x17, 0x6a, 0x63, 0xcd, 0xfd, 0xc7, 0xcc, 0x7c, 0x18, - 0x2d, 0xc1, 0x09, 0x37, 0x0c, 0x92, 0x28, 0xf4, 0x7d, 0x5e, 0xcc, 0x91, 0xef, 0xcd, 0xf9, 0x19, - 0xca, 0x53, 0xa2, 0xdb, 0x27, 0xe6, 0x7a, 0x51, 0x70, 0xde, 0x73, 0xd4, 0x26, 0xcf, 0xea, 0x87, - 0x89, 0x42, 0xe2, 0x0a, 0x52, 0x34, 0x85, 0x84, 0x52, 0x6e, 0xef, 0x3d, 0x34, 0x45, 0x90, 0x3e, - 0x5d, 0x16, 0x5f, 0xec, 0x5d, 0x30, 0x46, 0xee, 0x25, 0x24, 0x0a, 0x1c, 0xff, 0x26, 0x5e, 0x94, - 0x07, 0x16, 0x6c, 0x61, 0x5e, 0x32, 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x4b, 0x66, 0x14, 0x30, - 0xe0, 0x5e, 0x32, 0xe9, 0x13, 0xb3, 0x7f, 0xaa, 0x9c, 0xb2, 0x59, 0x1f, 0xc9, 0x59, 0x36, 0x2b, - 0xab, 0x25, 0xeb, 0x8f, 0x31, 0x80, 0xd8, 0x8b, 0x15, 0xc9, 0x59, 0x85, 0x0b, 0x2e, 0x9b, 0x8c, - 0x70, 0x9a, 0x2f, 0xda, 0x82, 0xca, 0x66, 0x18, 0x27, 0x72, 0x87, 0x76, 0xc0, 0xcd, 0xe0, 0xd5, - 0x30, 0x4e, 0x98, 0xa1, 0xa5, 0x5e, 0x9b, 0xb6, 0xc4, 0x98, 0xf3, 0xa0, 0x7b, 0xff, 0x78, 0xd3, - 0x89, 0x9a, 0xa9, 0xb8, 0x52, 0x65, 0x4f, 0x37, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x1f, 0x5b, 0xa9, - 0x53, 0xad, 0xc3, 0x3a, 0xf6, 0xff, 0x84, 0x95, 0x2e, 0xa9, 0x50, 0x2a, 0x62, 0xeb, 0x66, 0x96, - 0x15, 0xd9, 0xb3, 0x3a, 0x83, 0xfd, 0x83, 0x16, 0x8c, 0xd4, 0x1d, 0x77, 0x2b, 0x5c, 0x5f, 0x47, - 0xcf, 0x43, 0xb5, 0xd9, 0x89, 0xcc, 0xea, 0x0e, 0xca, 0x59, 0x35, 0x2f, 0xda, 0xb1, 0xc2, 0xa0, - 0x53, 0x7f, 0xdd, 0x71, 0x65, 0x71, 0x91, 0x32, 0x9f, 0xfa, 0x97, 0x59, 0x0b, 0x16, 0x10, 0x3a, - 0xfc, 0x2d, 0xe7, 0x9e, 0x7c, 0x38, 0x7b, 0xa4, 0xb6, 0xa4, 0x41, 0xd8, 0xc4, 0xb3, 0x7f, 0xc5, - 0x82, 0xa9, 0xba, 0x13, 0x7b, 0xee, 0x6c, 0x27, 0xd9, 0xac, 0x7b, 0xc9, 0x5a, 0xc7, 0xdd, 0x22, - 0x09, 0x2f, 0x42, 0x43, 0x7b, 0xd9, 0x89, 0xe9, 0x0a, 0x54, 0x3b, 0x66, 0xd5, 0xcb, 0x9b, 0xa2, - 0x1d, 0x2b, 0x0c, 0xf4, 0x2a, 0x8c, 0xb6, 0x9d, 0x38, 0xbe, 0x1b, 0x46, 0x4d, 0x4c, 0xd6, 0x8b, - 0x29, 0x53, 0xd5, 0x20, 0x6e, 0x44, 0x12, 0x4c, 0xd6, 0x45, 0x64, 0x8e, 0xa6, 0x8f, 0x4d, 0x66, - 0xf6, 0xf7, 0x59, 0x70, 0xb2, 0x4e, 0x9c, 0x88, 0x44, 0xac, 0xaa, 0x95, 0x7a, 0x11, 0xf4, 0x0a, - 0x54, 0x13, 0xda, 0x42, 0x7b, 0x64, 0x15, 0xdb, 0x23, 0x16, 0x53, 0xb3, 0x2a, 0x88, 0x63, 0xc5, - 0xc6, 0xfe, 0x82, 0x05, 0xa7, 0xf3, 0xfa, 0x32, 0xe7, 0x87, 0x9d, 0xe6, 0xa3, 0xe8, 0xd0, 0xdf, - 0xb1, 0x60, 0x8c, 0x1d, 0xd7, 0xcf, 0x93, 0xc4, 0xf1, 0xfc, 0x9e, 0x5a, 0x9d, 0xd6, 0x80, 0xb5, - 0x3a, 0xcf, 0xc3, 0xd0, 0x66, 0xd8, 0x22, 0xd9, 0x50, 0x93, 0xab, 0x61, 0x8b, 0x60, 0x06, 0x41, - 0xef, 0xa0, 0x93, 0xd0, 0x0b, 0x12, 0x87, 0x2e, 0x47, 0x79, 0x9c, 0x71, 0x8c, 0x4f, 0x40, 0xd5, - 0x8c, 0x4d, 0x1c, 0xfb, 0x5f, 0xd6, 0x60, 0x44, 0x04, 0x84, 0x0d, 0x5c, 0x14, 0x49, 0x7a, 0x71, - 0x4a, 0x7d, 0xbd, 0x38, 0x31, 0x0c, 0xbb, 0xac, 0xb0, 0xb2, 0xb0, 0xd0, 0xaf, 0x17, 0x12, 0x41, - 0xc8, 0x6b, 0x35, 0xeb, 0x6e, 0xf1, 0xff, 0x58, 0xb0, 0x42, 0xaf, 0x59, 0x70, 0xcc, 0x0d, 0x83, - 0x80, 0xb8, 0xda, 0x76, 0x1c, 0x2a, 0x62, 0x83, 0x30, 0x97, 0x26, 0xaa, 0x4f, 0x82, 0x33, 0x00, - 0x9c, 0x65, 0x8f, 0x5e, 0x82, 0x71, 0x3e, 0x66, 0xb7, 0x52, 0x67, 0x30, 0xba, 0x2a, 0xa3, 0x09, - 0xc4, 0x69, 0x5c, 0x34, 0xc3, 0xcf, 0xb2, 0x44, 0x49, 0xc3, 0x61, 0xed, 0xaa, 0x36, 0x8a, 0x19, - 0x1a, 0x18, 0x28, 0x02, 0x14, 0x91, 0xf5, 0x88, 0xc4, 0x9b, 0x22, 0x60, 0x8e, 0xd9, 0xad, 0x23, - 0x0f, 0x57, 0xb1, 0x04, 0xf7, 0x50, 0xc2, 0x39, 0xd4, 0xd1, 0x96, 0x70, 0x23, 0x54, 0x8b, 0x90, - 0xe7, 0xe2, 0x33, 0xf7, 0xf5, 0x26, 0x4c, 0x43, 0x85, 0xa9, 0x2e, 0x66, 0x2f, 0x97, 0x79, 0x96, - 0x2c, 0x53, 0x6c, 0x98, 0xb7, 0xa3, 0x79, 0x38, 0x9e, 0x29, 0x13, 0x19, 0x8b, 0xb3, 0x12, 0x95, - 0x11, 0x99, 0x29, 0x30, 0x19, 0xe3, 0x9e, 0x27, 0x4c, 0x17, 0xd3, 0xe8, 0x1e, 0x2e, 0xa6, 0xae, - 0x0a, 0xcb, 0xe6, 0xa7, 0x18, 0xef, 0x2d, 0x64, 0x00, 0x06, 0x8a, 0xc1, 0xfe, 0x81, 0x4c, 0x0c, - 0xf6, 0x38, 0xeb, 0xc0, 0xad, 0x62, 0x3a, 0xb0, 0xff, 0x80, 0xeb, 0x47, 0x19, 0x40, 0xfd, 0xbf, - 0x2c, 0x90, 0xdf, 0x75, 0xce, 0x71, 0x37, 0x09, 0x9d, 0x32, 0x39, 0xa9, 0x36, 0xd6, 0xbe, 0x52, - 0x6d, 0x2e, 0x40, 0x8d, 0x8e, 0x13, 0x7f, 0x94, 0xeb, 0x7d, 0xe5, 0x01, 0x99, 0x5d, 0x59, 0x10, - 0x4f, 0x69, 0x1c, 0x14, 0xc2, 0xa4, 0xef, 0xc4, 0x09, 0xeb, 0x41, 0xa3, 0x1b, 0xb8, 0x0f, 0x59, - 0x2f, 0x88, 0xa5, 0xdd, 0x2d, 0x66, 0x09, 0xe1, 0x5e, 0xda, 0xf6, 0xbf, 0xad, 0xc0, 0x78, 0x4a, - 0x32, 0xee, 0xd3, 0x60, 0x78, 0x1e, 0xaa, 0x52, 0x87, 0x67, 0xab, 0xa6, 0x29, 0x45, 0xaf, 0x30, - 0xa8, 0xd2, 0x5a, 0xd3, 0x5a, 0x35, 0x6b, 0xe0, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, - 0x7e, 0x3c, 0xe7, 0x7b, 0x24, 0x48, 0x78, 0x37, 0x8b, 0x11, 0xca, 0xab, 0x8b, 0x0d, 0x93, 0xa8, - 0x16, 0xca, 0x19, 0x00, 0xce, 0xb2, 0x47, 0x9f, 0xb6, 0x60, 0xdc, 0xb9, 0x1b, 0xeb, 0xea, 0xff, - 0x22, 0xda, 0xfa, 0x80, 0x4a, 0x2a, 0x75, 0xa1, 0x00, 0x77, 0xec, 0xa7, 0x9a, 0x70, 0x9a, 0x29, - 0x7a, 0xdd, 0x02, 0x44, 0xee, 0x11, 0x57, 0xc6, 0x83, 0x8b, 0xbe, 0x0c, 0x17, 0xb1, 0x83, 0xbf, - 0xd4, 0x43, 0x97, 0x4b, 0xf5, 0xde, 0x76, 0x9c, 0xd3, 0x07, 0x74, 0x0d, 0x50, 0xd3, 0x8b, 0x9d, - 0x35, 0x9f, 0xcc, 0x85, 0x2d, 0x99, 0x2a, 0x2e, 0xce, 0xd3, 0xcf, 0x88, 0x71, 0x46, 0xf3, 0x3d, - 0x18, 0x38, 0xe7, 0x29, 0x36, 0xcb, 0xa2, 0xf0, 0x5e, 0xf7, 0x66, 0xe4, 0x33, 0x2d, 0x61, 0xce, - 0x32, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x27, 0x65, 0xb5, 0x94, 0x75, 0xf2, 0x83, 0x63, 0x04, 0x61, - 0x5b, 0x0f, 0x1f, 0x84, 0xad, 0x23, 0xa5, 0x7a, 0x0b, 0x20, 0xa4, 0xf2, 0xa5, 0x4b, 0x8f, 0x28, - 0x5f, 0xfa, 0xbb, 0xad, 0x54, 0x65, 0xc2, 0xd1, 0x8b, 0x1f, 0x28, 0x36, 0xf1, 0x62, 0x86, 0x47, - 0x71, 0x65, 0xf4, 0x4a, 0x26, 0x78, 0xef, 0x79, 0xa8, 0xae, 0xfb, 0x0e, 0x2b, 0x99, 0xc3, 0x16, - 0xaa, 0x11, 0x61, 0x76, 0x59, 0xb4, 0x63, 0x85, 0x41, 0xa5, 0xbe, 0x41, 0x74, 0x5f, 0x52, 0xfb, - 0x3f, 0x94, 0x61, 0xd4, 0xd0, 0xf8, 0xb9, 0xe6, 0x9b, 0xf5, 0x98, 0x99, 0x6f, 0xa5, 0x7d, 0x98, - 0x6f, 0xdf, 0x05, 0x35, 0x57, 0x6a, 0xa3, 0x62, 0xee, 0x70, 0xc8, 0xea, 0x38, 0xad, 0x90, 0x54, - 0x13, 0xd6, 0x3c, 0xd1, 0x95, 0x54, 0x4e, 0x6e, 0xca, 0x2f, 0x90, 0x97, 0x34, 0x2b, 0x34, 0x5a, - 0xef, 0x33, 0xd9, 0xf8, 0x80, 0xca, 0xde, 0xf1, 0x01, 0xf6, 0xef, 0x59, 0xea, 0xe3, 0x1e, 0x41, - 0xf1, 0xa5, 0x3b, 0xe9, 0xe2, 0x4b, 0x97, 0x0a, 0x19, 0xe6, 0x3e, 0x55, 0x97, 0xbe, 0xcf, 0x82, - 0x73, 0xbb, 0x57, 0x33, 0x47, 0xcf, 0x40, 0x65, 0x23, 0x0a, 0x3b, 0x6d, 0xa1, 0x83, 0x15, 0x1d, - 0x56, 0x3a, 0x1e, 0x73, 0x18, 0xdd, 0x44, 0x6d, 0x79, 0x41, 0x33, 0xbb, 0x89, 0xba, 0xee, 0x05, - 0x4d, 0xcc, 0x20, 0x03, 0x94, 0xbb, 0xbd, 0x01, 0x23, 0x73, 0x61, 0xab, 0xe5, 0x04, 0x4d, 0xf4, - 0x16, 0x18, 0x71, 0xf9, 0x4f, 0xe1, 0xcf, 0x63, 0x07, 0xe7, 0x02, 0x8a, 0x25, 0x0c, 0x9d, 0x85, - 0x21, 0x27, 0xda, 0x90, 0x3e, 0x3c, 0x16, 0x90, 0x37, 0x1b, 0x6d, 0xc4, 0x98, 0xb5, 0xda, 0x7f, - 0x66, 0xc1, 0x04, 0x7d, 0xc4, 0x63, 0x03, 0xcc, 0x86, 0xf6, 0x59, 0x18, 0x76, 0x3a, 0xc9, 0x66, - 0xd8, 0xb3, 0x27, 0x9c, 0x65, 0xad, 0x58, 0x40, 0x69, 0x67, 0x55, 0x05, 0x11, 0xa3, 0xb3, 0xf3, - 0x74, 0x5d, 0x31, 0x08, 0x35, 0xab, 0xe3, 0xce, 0x5a, 0xde, 0xc9, 0x6d, 0x83, 0x37, 0x63, 0x09, - 0xa7, 0xc4, 0xd6, 0xc2, 0x66, 0x57, 0x84, 0x19, 0x2b, 0x62, 0xf5, 0xb0, 0xd9, 0xc5, 0x0c, 0x82, - 0x9e, 0x86, 0x72, 0xbc, 0xe9, 0xc8, 0x18, 0x01, 0x19, 0xf1, 0xde, 0xb8, 0x3a, 0x8b, 0x69, 0xbb, - 0x4a, 0xe0, 0x88, 0xfc, 0x6c, 0xbc, 0x6f, 0x3a, 0x81, 0x23, 0xf2, 0xed, 0x7f, 0x3e, 0x04, 0x2c, - 0xf6, 0xc7, 0x89, 0x48, 0x73, 0x35, 0x64, 0x05, 0xaa, 0x0f, 0xf5, 0x88, 0x5d, 0x6f, 0xaa, 0x1f, - 0xe7, 0x63, 0x76, 0xe3, 0xa8, 0xb5, 0x7c, 0xd4, 0x47, 0xad, 0xf9, 0xa7, 0xe7, 0x43, 0x8f, 0xd1, - 0xe9, 0xb9, 0xfd, 0x79, 0x0b, 0x90, 0x8a, 0xe4, 0xd2, 0xe1, 0x2d, 0x17, 0xa0, 0xa6, 0x42, 0xc7, - 0xc4, 0x7a, 0xd1, 0x22, 0x5a, 0x02, 0xb0, 0xc6, 0x19, 0xc0, 0x93, 0xf2, 0x8c, 0xd4, 0x9f, 0xe5, - 0xb4, 0x2c, 0x61, 0x5a, 0x57, 0xa8, 0x53, 0xfb, 0x97, 0x4a, 0xf0, 0x04, 0x37, 0xdd, 0x96, 0x9c, - 0xc0, 0xd9, 0x20, 0x2d, 0xda, 0xab, 0x41, 0x03, 0x96, 0x5c, 0xba, 0x85, 0xf7, 0x64, 0xb6, 0xc6, - 0x41, 0x65, 0x27, 0x97, 0x33, 0x5c, 0xb2, 0x2c, 0x04, 0x5e, 0x82, 0x19, 0x71, 0x14, 0x43, 0x55, - 0x5e, 0xc2, 0x25, 0x74, 0x61, 0x41, 0x8c, 0x94, 0x5a, 0x10, 0x56, 0x0e, 0xc1, 0x8a, 0x11, 0x35, - 0x65, 0xfc, 0xd0, 0xdd, 0xa2, 0x4b, 0x3e, 0x6b, 0xca, 0x2c, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x16, - 0x1c, 0x93, 0x63, 0xd8, 0xbe, 0x4e, 0xba, 0x98, 0xac, 0x53, 0xfd, 0xef, 0xca, 0x26, 0xe3, 0x5e, - 0x30, 0xa5, 0xff, 0xe7, 0x4c, 0x20, 0x4e, 0xe3, 0xca, 0x9a, 0xd5, 0xa5, 0xfc, 0x9a, 0xd5, 0xf6, - 0x2f, 0x59, 0x90, 0x35, 0x40, 0x98, 0x03, 0xce, 0xbc, 0xe4, 0xab, 0x5f, 0x31, 0xfb, 0x7d, 0x94, - 0xb1, 0xfd, 0x10, 0x8c, 0x3a, 0x09, 0xb5, 0x30, 0xb9, 0x37, 0xa8, 0xfc, 0x70, 0xa7, 0x98, 0x4b, - 0x61, 0xd3, 0x5b, 0xf7, 0x98, 0x17, 0xc8, 0x24, 0x67, 0xff, 0xed, 0x0a, 0xd4, 0xe6, 0xa3, 0xee, - 0xfe, 0xd3, 0xe6, 0x7a, 0x93, 0xe2, 0x4a, 0xfb, 0x4a, 0x8a, 0x93, 0x69, 0x77, 0xe5, 0xbe, 0x69, - 0x77, 0x32, 0x6d, 0x6e, 0xe8, 0x51, 0xa5, 0xcd, 0x55, 0x1e, 0x93, 0xb4, 0xb9, 0xe1, 0xc7, 0x20, - 0x6d, 0x6e, 0xe4, 0x88, 0xd3, 0xe6, 0xec, 0xff, 0x31, 0x04, 0x93, 0x3d, 0xe9, 0xcf, 0xe8, 0x45, - 0x18, 0x53, 0x6b, 0x54, 0x1e, 0x00, 0xd4, 0xcc, 0x30, 0x7a, 0x0d, 0xc3, 0x29, 0xcc, 0x01, 0x04, - 0xf5, 0x02, 0x9c, 0x88, 0xc8, 0x2b, 0x1d, 0xd2, 0x21, 0xb3, 0xeb, 0x09, 0x89, 0x1a, 0xc4, 0x0d, - 0x83, 0x26, 0x2f, 0x70, 0x5e, 0xae, 0x3f, 0x79, 0x7f, 0x67, 0xfa, 0x04, 0xee, 0x05, 0xe3, 0xbc, - 0x67, 0x50, 0x1b, 0xc6, 0x7d, 0x73, 0xe7, 0x2a, 0xe6, 0xf0, 0x43, 0x6d, 0x7a, 0x95, 0xac, 0x4a, - 0x35, 0xe3, 0x34, 0x83, 0xf4, 0xf6, 0xb7, 0xf2, 0x88, 0xb6, 0xbf, 0x9f, 0xd2, 0xdb, 0x5f, 0x1e, - 0x95, 0xf6, 0xc1, 0x82, 0xd3, 0xdf, 0x07, 0xd9, 0xff, 0x1e, 0x64, 0x47, 0xfb, 0x5e, 0xa8, 0xca, - 0x88, 0xdd, 0x81, 0x22, 0x5d, 0x4d, 0x3a, 0x7d, 0x34, 0xfb, 0x83, 0x12, 0xe4, 0x38, 0x6d, 0xa8, - 0xa4, 0xd5, 0xd6, 0x7e, 0x4a, 0xd2, 0xee, 0xcf, 0xe2, 0x47, 0xf7, 0x78, 0xb4, 0x32, 0xb7, 0xf1, - 0xde, 0x5f, 0xb4, 0xd3, 0x49, 0x07, 0x30, 0x2b, 0xfd, 0xa7, 0x82, 0x98, 0x2f, 0x02, 0xe8, 0x0d, - 0xa3, 0xb0, 0xf4, 0x55, 0xf8, 0x91, 0xde, 0x57, 0x62, 0x03, 0x0b, 0xbd, 0x00, 0xa3, 0x5e, 0x10, - 0x27, 0x8e, 0xef, 0x5f, 0xf5, 0x82, 0x44, 0x58, 0xff, 0xca, 0x98, 0x5d, 0xd0, 0x20, 0x6c, 0xe2, - 0x9d, 0x79, 0xb7, 0xf1, 0x5d, 0xf6, 0xf3, 0x3d, 0x37, 0xe1, 0xf4, 0x15, 0x2f, 0x51, 0xa2, 0x4d, - 0xcd, 0x23, 0xb6, 0xc9, 0x93, 0x1a, 0xc8, 0xea, 0xab, 0x81, 0x8c, 0x34, 0xd4, 0x52, 0x3a, 0x6b, - 0x36, 0x9b, 0x86, 0x6a, 0xbb, 0x70, 0xf2, 0x8a, 0x97, 0x5c, 0xf6, 0x7c, 0x72, 0x88, 0x4c, 0x7e, - 0x71, 0x18, 0xc6, 0xcc, 0xb2, 0x18, 0xfb, 0xd1, 0xd7, 0x5f, 0xa0, 0xbb, 0x13, 0x31, 0x10, 0x9e, - 0x0a, 0xa9, 0xb8, 0x7d, 0xe0, 0x1a, 0x1d, 0xf9, 0x83, 0x6b, 0x6c, 0x50, 0x34, 0x4f, 0x6c, 0x76, - 0x00, 0xdd, 0x85, 0xca, 0x3a, 0xcb, 0xa8, 0x2c, 0x17, 0x11, 0x0c, 0x97, 0x37, 0xf8, 0x7a, 0x45, - 0xf2, 0x9c, 0x4c, 0xce, 0x8f, 0x1a, 0x95, 0x51, 0x3a, 0x91, 0xdf, 0xc8, 0x73, 0x11, 0xd6, 0x8a, - 0xc2, 0xe8, 0xa7, 0x15, 0x2a, 0x0f, 0xa1, 0x15, 0x52, 0x32, 0x7a, 0xf8, 0x11, 0xc9, 0x68, 0x96, - 0x1d, 0x9b, 0x6c, 0xb2, 0x2d, 0x8f, 0x48, 0xcc, 0x1b, 0x61, 0x83, 0x60, 0x64, 0xc7, 0xa6, 0xc0, - 0x38, 0x8b, 0x8f, 0x3e, 0xae, 0xa4, 0x7c, 0xb5, 0x88, 0x23, 0x2b, 0x73, 0x46, 0x1f, 0xb6, 0x80, - 0xff, 0x7c, 0x09, 0x26, 0xae, 0x04, 0x9d, 0x95, 0x2b, 0x2b, 0x9d, 0x35, 0xdf, 0x73, 0xaf, 0x93, - 0x2e, 0x95, 0xe2, 0x5b, 0xa4, 0xbb, 0x30, 0x9f, 0xf5, 0xf5, 0x5c, 0xa7, 0x8d, 0x98, 0xc3, 0xa8, - 0xdc, 0x5a, 0xf7, 0x82, 0x0d, 0x12, 0xb5, 0x23, 0x4f, 0x9c, 0x26, 0x19, 0x72, 0xeb, 0xb2, 0x06, - 0x61, 0x13, 0x8f, 0xd2, 0x0e, 0xef, 0x06, 0xaa, 0x46, 0x99, 0xa2, 0xbd, 0x4c, 0x1b, 0x31, 0x87, - 0x51, 0xa4, 0x24, 0xea, 0x08, 0x67, 0xad, 0x81, 0xb4, 0x4a, 0x1b, 0x31, 0x87, 0x09, 0xdf, 0x0b, - 0x8b, 0x35, 0xac, 0xf4, 0xf8, 0x5e, 0x58, 0x98, 0x8e, 0x84, 0x53, 0xd4, 0x2d, 0xd2, 0x9d, 0x77, - 0x12, 0x27, 0xeb, 0x3a, 0xb9, 0xce, 0x9b, 0xb1, 0x84, 0xb3, 0x42, 0xeb, 0xe9, 0xe1, 0xf8, 0xba, - 0x2b, 0xb4, 0x9e, 0xee, 0x7e, 0x1f, 0x97, 0xdf, 0x97, 0x4b, 0x30, 0xf6, 0xc6, 0x65, 0xcc, 0xbb, - 0x5c, 0x06, 0x76, 0x1b, 0x26, 0x7b, 0x72, 0xf3, 0x07, 0xb0, 0x80, 0xf6, 0xac, 0x9d, 0x62, 0x63, - 0x18, 0xa5, 0x84, 0x65, 0xa1, 0xd1, 0x39, 0x98, 0xe4, 0x8b, 0x98, 0x72, 0x62, 0xa9, 0xd6, 0xaa, - 0xde, 0x02, 0x3b, 0x36, 0xbd, 0x95, 0x05, 0xe2, 0x5e, 0x7c, 0xfb, 0x07, 0x2c, 0x18, 0x4f, 0x95, - 0x4b, 0x28, 0xc8, 0x56, 0x63, 0xab, 0x3c, 0x64, 0xf1, 0xf2, 0x2c, 0x7f, 0xa9, 0xcc, 0xd4, 0xb1, - 0x5e, 0xe5, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xd7, 0xcb, 0x50, 0x95, 0xb1, 0x7d, 0x03, 0x74, 0xe5, - 0x73, 0x16, 0x8c, 0xab, 0xa3, 0x6a, 0x76, 0xb6, 0x50, 0x2a, 0x22, 0x7b, 0x93, 0xf6, 0x40, 0x79, - 0xc7, 0x82, 0xf5, 0x50, 0x6f, 0x1c, 0xb0, 0xc9, 0x0c, 0xa7, 0x79, 0xa3, 0x5b, 0x00, 0x71, 0x37, - 0x4e, 0x48, 0xcb, 0x38, 0xe5, 0xb0, 0x8d, 0x59, 0x36, 0xe3, 0x86, 0x11, 0xa1, 0x73, 0xea, 0x46, - 0xd8, 0x24, 0x0d, 0x85, 0xa9, 0x2d, 0x3d, 0xdd, 0x86, 0x0d, 0x4a, 0xe8, 0x55, 0x15, 0x58, 0x31, - 0x54, 0x84, 0x7e, 0x97, 0xe3, 0x3b, 0x48, 0x64, 0xc5, 0x01, 0x22, 0x19, 0xec, 0x9f, 0x2c, 0xc1, - 0xf1, 0xec, 0x48, 0xa2, 0x0f, 0xc2, 0x98, 0x1c, 0x34, 0xc3, 0x89, 0x24, 0x03, 0x2a, 0xc7, 0xb0, - 0x01, 0x7b, 0xb0, 0x33, 0x3d, 0xdd, 0x7b, 0xbb, 0xff, 0x8c, 0x89, 0x82, 0x53, 0xc4, 0x78, 0x98, - 0x83, 0x88, 0xc7, 0xa9, 0x77, 0x67, 0xdb, 0x6d, 0x11, 0xab, 0x60, 0x84, 0x39, 0x98, 0x50, 0x9c, - 0xc1, 0x46, 0x2b, 0x70, 0xd2, 0x68, 0xb9, 0x41, 0xbc, 0x8d, 0xcd, 0xb5, 0x30, 0x92, 0xfb, 0xd6, - 0xb3, 0x3a, 0x7c, 0xbb, 0x17, 0x07, 0xe7, 0x3e, 0x49, 0x0d, 0x24, 0xd7, 0x69, 0x3b, 0xae, 0x97, - 0x74, 0xc5, 0x69, 0x93, 0x12, 0xe7, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x1f, 0x0c, 0xc1, 0x71, - 0x1e, 0xaf, 0x4c, 0x54, 0x38, 0x3e, 0xfa, 0x20, 0xd4, 0xe2, 0xc4, 0x89, 0xb8, 0xcb, 0xca, 0xda, - 0xb7, 0xe8, 0xd2, 0x35, 0x1e, 0x24, 0x11, 0xac, 0xe9, 0xa1, 0x0f, 0xb0, 0xca, 0x80, 0x5e, 0xbc, - 0xc9, 0xa8, 0x97, 0x1e, 0xce, 0x21, 0x76, 0x59, 0x51, 0xc0, 0x06, 0x35, 0xf4, 0xad, 0x50, 0x69, - 0x6f, 0x3a, 0xb1, 0xf4, 0xd6, 0x3e, 0x2b, 0xe5, 0xc4, 0x0a, 0x6d, 0x7c, 0xb0, 0x33, 0x7d, 0x2a, - 0xfb, 0xaa, 0x0c, 0x80, 0xf9, 0x43, 0xa6, 0x94, 0x1f, 0xda, 0x43, 0xca, 0x3f, 0x0b, 0xc3, 0xcd, - 0xa8, 0xdb, 0xb8, 0x3a, 0x9b, 0xbd, 0xe0, 0x69, 0x9e, 0xb5, 0x62, 0x01, 0xa5, 0x32, 0x69, 0x93, - 0xb3, 0x6c, 0x52, 0xe4, 0xe1, 0xb4, 0xe5, 0x71, 0x55, 0x83, 0xb0, 0x89, 0xc7, 0xaa, 0x74, 0x65, - 0xa2, 0xd9, 0x47, 0x0e, 0x21, 0xdb, 0x69, 0xd0, 0x38, 0xf6, 0x4b, 0x50, 0x13, 0x5d, 0x5d, 0x0d, - 0xd1, 0x8b, 0x30, 0xc6, 0x9d, 0x81, 0xf5, 0xc8, 0x09, 0xdc, 0xcd, 0xac, 0x13, 0x67, 0xd5, 0x80, - 0xe1, 0x14, 0xa6, 0xbd, 0x04, 0x43, 0x03, 0x0a, 0xd9, 0x81, 0xf6, 0xe6, 0xef, 0x85, 0x2a, 0x25, - 0x27, 0x37, 0x6a, 0x45, 0x90, 0x0c, 0xa1, 0x2a, 0x6f, 0x86, 0x45, 0x36, 0x94, 0x3d, 0x47, 0x46, - 0x2d, 0xa9, 0x25, 0xb4, 0x10, 0xc7, 0x1d, 0x36, 0xed, 0x28, 0x10, 0x3d, 0x03, 0x65, 0x72, 0xaf, - 0x9d, 0x0d, 0x4f, 0xba, 0x74, 0xaf, 0xed, 0x45, 0x24, 0xa6, 0x48, 0xe4, 0x5e, 0x1b, 0x9d, 0x81, - 0x92, 0xd7, 0x14, 0x33, 0x12, 0x04, 0x4e, 0x69, 0x61, 0x1e, 0x97, 0xbc, 0xa6, 0x7d, 0x0f, 0x6a, - 0xea, 0x2a, 0x5a, 0xb4, 0x25, 0x4d, 0x2b, 0xab, 0x88, 0x78, 0x75, 0x49, 0xb7, 0x8f, 0x51, 0xd5, - 0x01, 0xd0, 0xc5, 0x43, 0x8a, 0x52, 0xc1, 0xe7, 0x61, 0xc8, 0x0d, 0x45, 0xd9, 0xa7, 0xaa, 0x26, - 0xc3, 0x6c, 0x29, 0x06, 0xb1, 0x6f, 0xc3, 0xc4, 0xf5, 0x20, 0xbc, 0xcb, 0x2e, 0x85, 0x63, 0x35, - 0xd0, 0x29, 0xe1, 0x75, 0xfa, 0x23, 0x6b, 0xc1, 0x33, 0x28, 0xe6, 0x30, 0x55, 0xe9, 0xb8, 0xd4, - 0xaf, 0xd2, 0xb1, 0xfd, 0x09, 0x0b, 0xc6, 0x94, 0x37, 0xf6, 0xca, 0xf6, 0xd6, 0x60, 0xa7, 0xc0, - 0x46, 0x79, 0x8e, 0xd2, 0x1e, 0xe5, 0x39, 0xe4, 0x81, 0x71, 0xb9, 0xdf, 0x81, 0xb1, 0xfd, 0x17, - 0x16, 0x1c, 0x57, 0x5d, 0x90, 0x36, 0xd3, 0x8b, 0x30, 0xb6, 0xd6, 0xf1, 0xfc, 0xa6, 0x2c, 0xee, - 0x9e, 0x59, 0x2e, 0x75, 0x03, 0x86, 0x53, 0x98, 0xe8, 0x22, 0xc0, 0x9a, 0x17, 0x38, 0x51, 0x77, - 0x45, 0x1b, 0x69, 0x4a, 0x6f, 0xd7, 0x15, 0x04, 0x1b, 0x58, 0xe8, 0x63, 0x50, 0xdd, 0x96, 0x71, - 0x02, 0xe5, 0x42, 0xab, 0x4a, 0x88, 0xf1, 0xd0, 0x2b, 0x41, 0x05, 0x1e, 0x28, 0x8e, 0xf6, 0x17, - 0xcb, 0x30, 0x91, 0xae, 0x04, 0x31, 0x80, 0x07, 0xe5, 0x19, 0xa8, 0xb0, 0xe2, 0x10, 0xd9, 0x89, - 0xc5, 0xab, 0xb1, 0x73, 0x18, 0x8a, 0x61, 0x98, 0x8b, 0x92, 0x62, 0xee, 0x2d, 0x56, 0x9d, 0x54, - 0x7e, 0x5a, 0xe6, 0xc4, 0x16, 0x87, 0x1e, 0x82, 0x15, 0xfa, 0xb4, 0x05, 0x23, 0x61, 0xdb, 0x2c, - 0xb1, 0xfb, 0xfe, 0x22, 0xab, 0x64, 0x88, 0x54, 0x74, 0x61, 0x0d, 0xa9, 0x89, 0x27, 0x27, 0x83, - 0x64, 0x7d, 0xe6, 0x5b, 0x60, 0xcc, 0xc4, 0xdc, 0xcb, 0x20, 0xaa, 0x9a, 0x06, 0xd1, 0xe7, 0xcc, - 0x29, 0x29, 0xea, 0x80, 0x0c, 0xb0, 0xd8, 0x6f, 0x42, 0xc5, 0x55, 0x81, 0x97, 0x0f, 0x75, 0x21, - 0x89, 0xaa, 0x93, 0xc7, 0x82, 0x5a, 0x38, 0x35, 0xfb, 0xf7, 0x2c, 0x63, 0x7e, 0x60, 0x12, 0x2f, - 0x34, 0x51, 0x04, 0xe5, 0x8d, 0xed, 0x2d, 0x61, 0x64, 0x5c, 0x2b, 0x68, 0x78, 0xaf, 0x6c, 0x6f, - 0xe9, 0x15, 0x66, 0xb6, 0x62, 0xca, 0x6c, 0x80, 0xc3, 0x84, 0x54, 0xb9, 0x98, 0xf2, 0xde, 0xe5, - 0x62, 0xec, 0xd7, 0x4b, 0x30, 0xd9, 0x33, 0xa9, 0xd0, 0xab, 0x50, 0x89, 0xe8, 0x5b, 0x8a, 0xd7, - 0x5b, 0x2c, 0xac, 0xc0, 0x4b, 0xbc, 0xd0, 0xd4, 0xca, 0x3b, 0xdd, 0x8e, 0x39, 0x4b, 0x74, 0x0d, - 0x90, 0x0e, 0x0f, 0x56, 0x27, 0x19, 0xfc, 0x95, 0x55, 0x0c, 0xe1, 0x6c, 0x0f, 0x06, 0xce, 0x79, - 0x0a, 0xbd, 0x94, 0x3d, 0x10, 0xc9, 0x14, 0x6d, 0xdf, 0xed, 0x6c, 0xc3, 0x7e, 0xcd, 0x9c, 0x82, - 0xb7, 0xb4, 0x30, 0x3d, 0xe8, 0xe6, 0xb4, 0x47, 0xb2, 0x96, 0x07, 0x95, 0xac, 0xf6, 0xcf, 0x97, - 0x60, 0x3c, 0x55, 0x84, 0x19, 0xf9, 0x50, 0x25, 0x3e, 0x3b, 0xb7, 0x97, 0xda, 0xf7, 0xa0, 0x77, - 0x48, 0x29, 0x39, 0x79, 0x49, 0xd0, 0xc5, 0x8a, 0xc3, 0xe3, 0x11, 0xed, 0xf8, 0x22, 0x8c, 0xc9, - 0x0e, 0xbd, 0xdf, 0x69, 0xf9, 0xd9, 0xe1, 0xbb, 0x64, 0xc0, 0x70, 0x0a, 0xd3, 0xfe, 0xe5, 0x32, - 0x4c, 0xf1, 0x40, 0x87, 0xa6, 0x5a, 0x0c, 0x2a, 0x60, 0xe9, 0xfb, 0x75, 0xa9, 0x74, 0x3e, 0x90, - 0x6b, 0x07, 0xbd, 0xb2, 0x31, 0x9f, 0xd1, 0x40, 0x41, 0xfa, 0x5f, 0xce, 0x04, 0xe9, 0xf3, 0xad, - 0xfa, 0xc6, 0x21, 0xf5, 0xe8, 0xeb, 0x2b, 0x6a, 0xff, 0x9f, 0x94, 0xe0, 0x58, 0xe6, 0x3e, 0x4c, - 0xf4, 0xc5, 0xf4, 0x15, 0x4a, 0x56, 0x11, 0xc7, 0x80, 0xbb, 0x5e, 0x91, 0xb8, 0xbf, 0x8b, 0x94, - 0x1e, 0xd1, 0x52, 0xb1, 0x7f, 0xa7, 0x04, 0x13, 0xe9, 0x8b, 0x3c, 0x1f, 0xc3, 0x91, 0x7a, 0x1b, - 0xd4, 0xd8, 0x5d, 0x75, 0xd7, 0x49, 0x57, 0x9e, 0x36, 0xf2, 0x6b, 0xc1, 0x64, 0x23, 0xd6, 0xf0, - 0xc7, 0xe2, 0x7e, 0x2a, 0xfb, 0x9f, 0x5a, 0x70, 0x8a, 0xbf, 0x65, 0x76, 0x1e, 0xfe, 0xcd, 0xbc, - 0xd1, 0x7d, 0xb9, 0xd8, 0x0e, 0x66, 0x4a, 0xfc, 0xef, 0x35, 0xbe, 0xd4, 0x78, 0x39, 0x29, 0x7a, - 0x9b, 0x9e, 0x0a, 0x8f, 0x61, 0x67, 0xf7, 0x35, 0x19, 0xec, 0x7f, 0x57, 0x82, 0xd1, 0xe5, 0xb9, - 0x05, 0x25, 0xc2, 0x2f, 0x40, 0xcd, 0x8d, 0x88, 0xa3, 0xdd, 0x3f, 0x66, 0x18, 0x9d, 0x04, 0x60, - 0x8d, 0x43, 0x77, 0x51, 0x3c, 0x0c, 0x35, 0xce, 0xee, 0xa2, 0x78, 0x94, 0x6a, 0x8c, 0x25, 0x1c, - 0x3d, 0x0f, 0x55, 0x96, 0xac, 0x7e, 0x33, 0x92, 0x1a, 0x47, 0x6f, 0xad, 0x59, 0x3b, 0x5e, 0xc4, - 0x0a, 0x83, 0x12, 0x6e, 0x86, 0x6e, 0x4c, 0x91, 0x33, 0x1e, 0x99, 0x79, 0xda, 0x8c, 0x17, 0xb1, - 0x84, 0xb3, 0x5a, 0xa3, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xe9, 0x4e, 0x73, 0xf7, 0x06, 0x45, 0xd7, - 0x38, 0xfb, 0xa9, 0x49, 0x9b, 0x49, 0x18, 0x1d, 0x19, 0x2c, 0x61, 0xd4, 0xfe, 0x9d, 0x32, 0xd4, - 0xb4, 0x53, 0xcd, 0x13, 0x15, 0x5a, 0x0a, 0xb9, 0x42, 0xa2, 0xd1, 0x0d, 0x5c, 0x45, 0x9a, 0x47, - 0x15, 0x18, 0x05, 0x5a, 0xbe, 0xd7, 0x82, 0x51, 0x2f, 0xf0, 0x12, 0xcf, 0x61, 0xbe, 0x41, 0x21, - 0x37, 0x57, 0x0a, 0xaa, 0xe0, 0xb1, 0xc0, 0x29, 0x87, 0x91, 0x79, 0xf4, 0xaf, 0x98, 0x61, 0x93, - 0x33, 0xfa, 0xa8, 0xc8, 0x4f, 0x2c, 0x17, 0x56, 0xe6, 0xa8, 0x9a, 0x49, 0x4a, 0x6c, 0x53, 0x1b, - 0x3b, 0x89, 0x0a, 0xaa, 0x0e, 0x86, 0x29, 0x29, 0x75, 0x95, 0x91, 0xda, 0xc5, 0xb0, 0x66, 0xcc, - 0x19, 0xd9, 0x31, 0xa0, 0xde, 0xb1, 0xd8, 0x67, 0xee, 0xd7, 0x05, 0xa8, 0x39, 0x9d, 0x24, 0x6c, - 0xd1, 0x61, 0x12, 0x81, 0x03, 0x3a, 0xbb, 0x4d, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xb8, 0x02, 0x99, - 0x7a, 0x29, 0xe8, 0x1e, 0xd4, 0x54, 0xc5, 0x94, 0x62, 0x72, 0xa9, 0xf5, 0x8c, 0x52, 0x9d, 0x51, - 0x4d, 0x58, 0x33, 0x43, 0xa1, 0x74, 0xb3, 0xf2, 0xd5, 0xfe, 0xfe, 0xac, 0x9b, 0xf5, 0xea, 0xfe, - 0x4e, 0xdf, 0xe8, 0x9c, 0xbd, 0xc0, 0x2b, 0x65, 0xce, 0xec, 0xe9, 0x99, 0x2d, 0xef, 0xe1, 0x99, - 0xfd, 0xa4, 0xb8, 0xf4, 0x10, 0x93, 0xb8, 0xe3, 0x27, 0x62, 0x56, 0xbc, 0xb7, 0xc0, 0xd5, 0xc6, - 0x09, 0xeb, 0xfa, 0x63, 0xfc, 0x3f, 0x36, 0x98, 0xa6, 0xfd, 0xe7, 0xc3, 0x87, 0xea, 0x3f, 0x1f, - 0x29, 0xd4, 0x7f, 0x7e, 0x11, 0x80, 0xcd, 0x71, 0x9e, 0xab, 0x52, 0x65, 0x6e, 0x4d, 0xa5, 0x6a, - 0xb0, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x26, 0x48, 0x17, 0xd0, 0x43, 0xd3, 0xb2, 0x5e, 0x1f, 0x3f, - 0x19, 0x64, 0x69, 0xc2, 0xa9, 0xd2, 0x7a, 0x3f, 0x6b, 0x81, 0x59, 0xe5, 0x0f, 0xbd, 0xc2, 0xcb, - 0x09, 0x5a, 0x45, 0x9c, 0x34, 0x19, 0x74, 0x67, 0x96, 0x9c, 0x76, 0x26, 0xfa, 0x49, 0xd6, 0x14, - 0x3c, 0xf3, 0x6e, 0xa8, 0x4a, 0xe8, 0xbe, 0x8c, 0xe6, 0x8f, 0xc3, 0x09, 0x59, 0x72, 0x44, 0x1e, - 0x0a, 0x89, 0x28, 0x84, 0xa3, 0xc9, 0x38, 0xf9, 0x39, 0x0b, 0xce, 0x67, 0x3b, 0x10, 0x2f, 0x85, - 0x81, 0x97, 0x84, 0x51, 0x83, 0x24, 0x89, 0x17, 0x6c, 0xb0, 0xaa, 0xcf, 0x77, 0x9d, 0x48, 0x5e, - 0x79, 0xc6, 0x04, 0xe6, 0x6d, 0x27, 0x0a, 0x30, 0x6b, 0x45, 0x5d, 0x18, 0xe6, 0x01, 0xf5, 0x62, - 0x37, 0x74, 0xc0, 0xb5, 0x91, 0x33, 0x1c, 0x7a, 0x3b, 0xc6, 0x83, 0xf9, 0xb1, 0x60, 0x68, 0x7f, - 0xd5, 0x02, 0xb4, 0xbc, 0x4d, 0xa2, 0xc8, 0x6b, 0x1a, 0x29, 0x00, 0xec, 0xf2, 0x60, 0xe3, 0x92, - 0x60, 0xb3, 0x20, 0x4e, 0xe6, 0xf2, 0x60, 0xe3, 0x5f, 0xfe, 0xe5, 0xc1, 0xa5, 0xfd, 0x5d, 0x1e, - 0x8c, 0x96, 0xe1, 0x54, 0x8b, 0x6f, 0xe7, 0xf8, 0x85, 0x9c, 0x7c, 0x6f, 0xa7, 0x6a, 0x37, 0x9c, - 0xbe, 0xbf, 0x33, 0x7d, 0x6a, 0x29, 0x0f, 0x01, 0xe7, 0x3f, 0x67, 0xbf, 0x1b, 0x10, 0x0f, 0x85, - 0x9d, 0xcb, 0x0b, 0x5f, 0xed, 0xeb, 0xee, 0xb0, 0xbf, 0x54, 0x81, 0x63, 0x99, 0x0b, 0x71, 0xe8, - 0x56, 0xba, 0x37, 0x5e, 0xf6, 0xc0, 0x7a, 0xbc, 0xb7, 0x7b, 0x03, 0x45, 0xe0, 0x06, 0x50, 0xf1, - 0x82, 0x76, 0x27, 0x29, 0xa6, 0x74, 0x0c, 0xef, 0xc4, 0x02, 0x25, 0x68, 0x9c, 0x4f, 0xd0, 0xbf, - 0x98, 0xb3, 0x29, 0x32, 0x9e, 0x37, 0xb5, 0xd9, 0x19, 0x7a, 0x44, 0xee, 0x96, 0x4f, 0xea, 0xe8, - 0xda, 0x4a, 0x11, 0xbe, 0xe4, 0xcc, 0x64, 0x39, 0xec, 0xd0, 0xab, 0x9f, 0x2a, 0xc1, 0xa8, 0xf1, - 0xd1, 0xd0, 0x8f, 0xa6, 0x6b, 0xe0, 0x5a, 0xc5, 0xbd, 0x12, 0xa3, 0x3f, 0xa3, 0xab, 0xdc, 0xf2, - 0x57, 0x7a, 0xb6, 0xb7, 0xfc, 0xed, 0x83, 0x9d, 0xe9, 0xe3, 0x99, 0x02, 0xb7, 0xa9, 0x92, 0xb8, - 0x67, 0xbe, 0x13, 0x8e, 0x65, 0xc8, 0xe4, 0xbc, 0xf2, 0xaa, 0xf9, 0xca, 0x07, 0x76, 0xfb, 0x99, - 0x43, 0xf6, 0x13, 0x74, 0xc8, 0x44, 0xc5, 0x8a, 0xd0, 0x27, 0x03, 0xf8, 0x3c, 0x33, 0xfb, 0x8c, - 0xd2, 0x80, 0x85, 0x69, 0x9e, 0x83, 0x6a, 0x3b, 0xf4, 0x3d, 0xd7, 0x53, 0x25, 0xf4, 0x59, 0x29, - 0x9c, 0x15, 0xd1, 0x86, 0x15, 0x14, 0xdd, 0x85, 0xda, 0x9d, 0xbb, 0x09, 0x3f, 0x6e, 0x14, 0x47, - 0x1a, 0x45, 0x9d, 0x32, 0x2a, 0xa3, 0x45, 0x9d, 0x67, 0x62, 0xcd, 0x0b, 0xd9, 0x30, 0xcc, 0x94, - 0xa0, 0xcc, 0x5e, 0x65, 0xc7, 0x2d, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0x7f, 0x33, 0x0a, 0x27, - 0xf3, 0x6e, 0x25, 0x43, 0x1f, 0x83, 0x61, 0xde, 0xc7, 0x62, 0x2e, 0xbe, 0xcc, 0xe3, 0x71, 0x85, - 0x11, 0x14, 0xdd, 0x62, 0xbf, 0xb1, 0xe0, 0x29, 0xb8, 0xfb, 0xce, 0x9a, 0x98, 0x21, 0x87, 0xc3, - 0x7d, 0xd1, 0xd1, 0xdc, 0x17, 0x1d, 0xce, 0xdd, 0x77, 0xd6, 0xd0, 0x3d, 0xa8, 0x6c, 0x78, 0x09, - 0x71, 0x84, 0x93, 0xe6, 0xf6, 0xa1, 0x30, 0x27, 0x0e, 0xb7, 0xd2, 0xd8, 0x4f, 0xcc, 0x19, 0xa2, - 0xaf, 0x58, 0x70, 0x6c, 0x2d, 0x5d, 0x11, 0x4b, 0x08, 0x4f, 0xe7, 0x10, 0x6e, 0x9e, 0x4b, 0x33, - 0xe2, 0xb7, 0x67, 0x67, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x8c, 0xac, 0x7b, 0xbe, 0x71, - 0xc3, 0xcd, 0x21, 0x7c, 0x9c, 0xcb, 0x8c, 0x81, 0xde, 0x71, 0xf0, 0xff, 0x31, 0x96, 0x9c, 0xfb, - 0x69, 0xaa, 0xe1, 0x83, 0x6a, 0xaa, 0x91, 0x47, 0xa4, 0xa9, 0x3e, 0x6b, 0x41, 0x4d, 0x8d, 0xb4, - 0xa8, 0x2c, 0xf4, 0xc1, 0x43, 0xfc, 0xe4, 0xdc, 0x33, 0xa5, 0xfe, 0x62, 0xcd, 0x1c, 0xbd, 0x66, - 0xc1, 0xa8, 0xf3, 0x6a, 0x27, 0x22, 0x4d, 0xb2, 0x1d, 0xb6, 0x63, 0x51, 0xf2, 0xf7, 0xe5, 0xe2, - 0x3b, 0x33, 0x4b, 0x99, 0xcc, 0x93, 0xed, 0xe5, 0x76, 0x2c, 0x32, 0xeb, 0x75, 0x03, 0x36, 0xbb, - 0x80, 0xbe, 0x47, 0xeb, 0x71, 0x28, 0xa2, 0xf0, 0x7b, 0x5e, 0x6f, 0x06, 0x2a, 0x14, 0x41, 0xe0, - 0x29, 0x37, 0x0c, 0x12, 0x2f, 0xe8, 0x90, 0xe5, 0x00, 0x93, 0x76, 0x78, 0x23, 0x4c, 0x2e, 0x87, - 0x9d, 0xa0, 0x79, 0x29, 0x8a, 0xc2, 0x88, 0x95, 0x4e, 0x32, 0xee, 0x3b, 0x9e, 0xeb, 0x8f, 0x8a, - 0x77, 0xa3, 0x73, 0x10, 0x9b, 0x61, 0xa7, 0x04, 0xd3, 0x7b, 0x0c, 0x36, 0x7a, 0x11, 0xc6, 0xc2, - 0x68, 0xc3, 0x09, 0xbc, 0x57, 0xcd, 0x6a, 0x80, 0xca, 0x20, 0x5d, 0x36, 0x60, 0x38, 0x85, 0x69, - 0x96, 0x89, 0x2a, 0xed, 0x51, 0x26, 0xea, 0x3c, 0x0c, 0x45, 0xa4, 0x1d, 0x66, 0xf7, 0x55, 0x2c, - 0x01, 0x95, 0x41, 0xd0, 0xd3, 0x50, 0x76, 0xda, 0x9e, 0x70, 0x32, 0xaa, 0xed, 0xe2, 0xec, 0xca, - 0x02, 0xa6, 0xed, 0xa9, 0xaa, 0x75, 0x95, 0x23, 0xa9, 0x5a, 0x47, 0x35, 0xa6, 0x38, 0x46, 0x1b, - 0xd6, 0x1a, 0x33, 0x7d, 0xbc, 0x65, 0xbf, 0x5e, 0x86, 0xa7, 0x77, 0x5d, 0x5a, 0x3a, 0x84, 0xdd, - 0xda, 0x25, 0x84, 0x5d, 0x0e, 0x4f, 0x69, 0xaf, 0xe1, 0x29, 0xf7, 0x19, 0x9e, 0x4f, 0x51, 0x89, - 0x21, 0xab, 0x28, 0x0a, 0x25, 0x71, 0xc0, 0xb4, 0x82, 0x7e, 0x45, 0x19, 0x85, 0xb0, 0x90, 0x50, - 0xac, 0xf9, 0xd2, 0xed, 0x52, 0xaa, 0x44, 0x52, 0xa5, 0x08, 0x8d, 0xd9, 0xb7, 0x92, 0x21, 0x17, - 0x13, 0xfd, 0xea, 0x2e, 0xd9, 0xbf, 0x30, 0x04, 0xcf, 0x0c, 0xa0, 0xe8, 0xcc, 0x59, 0x6c, 0x0d, - 0x38, 0x8b, 0xbf, 0xce, 0x3f, 0xd3, 0x67, 0x72, 0x3f, 0x13, 0x2e, 0xfe, 0x33, 0xed, 0xfe, 0x85, - 0xd8, 0x49, 0x44, 0x10, 0x13, 0xb7, 0x13, 0xf1, 0x74, 0x1e, 0x23, 0x3b, 0x7d, 0x41, 0xb4, 0x63, - 0x85, 0x41, 0xb7, 0xbf, 0xae, 0x43, 0x97, 0xff, 0x48, 0x41, 0x25, 0x71, 0xcc, 0x44, 0x77, 0x6e, - 0x7d, 0xcd, 0xcd, 0x52, 0x09, 0xc0, 0xd9, 0xd8, 0xbf, 0x62, 0xc1, 0x99, 0xfe, 0xd6, 0x08, 0x7a, - 0x07, 0x8c, 0xae, 0xb1, 0xa0, 0xca, 0x25, 0x16, 0x3a, 0x25, 0xa6, 0x0e, 0x7b, 0x5f, 0xdd, 0x8c, - 0x4d, 0x1c, 0x34, 0x07, 0x93, 0x66, 0x34, 0xe6, 0x92, 0x11, 0x73, 0xc5, 0xfc, 0x25, 0xab, 0x59, - 0x20, 0xee, 0xc5, 0x47, 0x33, 0x00, 0x89, 0x97, 0xf8, 0x84, 0x3f, 0xcd, 0x27, 0x1a, 0x73, 0x28, - 0xae, 0xaa, 0x56, 0x6c, 0x60, 0xd8, 0x5f, 0x2b, 0xe7, 0xbf, 0x06, 0xb7, 0x72, 0xf7, 0x33, 0xfb, - 0xc5, 0xdc, 0x2e, 0x0d, 0x20, 0xa1, 0xcb, 0x47, 0x2d, 0xa1, 0x87, 0xfa, 0x49, 0x68, 0x34, 0x0f, - 0xc7, 0x8d, 0x1b, 0x94, 0x79, 0x51, 0x25, 0x7e, 0x38, 0xa5, 0x2a, 0x22, 0xae, 0x64, 0xe0, 0xb8, - 0xe7, 0x89, 0xc7, 0x7c, 0xaa, 0xfe, 0x6a, 0x09, 0x4e, 0xf7, 0xdd, 0x58, 0x1c, 0x91, 0x06, 0x32, - 0x3f, 0xff, 0xd0, 0xd1, 0x7c, 0x7e, 0xf3, 0xa3, 0x54, 0xf6, 0xfc, 0x28, 0x83, 0xa8, 0xf3, 0xdf, - 0x2d, 0xf5, 0x5d, 0x2c, 0x74, 0x23, 0xfa, 0x97, 0x76, 0x24, 0x5f, 0x82, 0x71, 0xa7, 0xdd, 0xe6, - 0x78, 0x2c, 0x43, 0x23, 0x53, 0xa5, 0x75, 0xd6, 0x04, 0xe2, 0x34, 0xee, 0x40, 0x03, 0xfb, 0x87, - 0x16, 0xd4, 0x30, 0x59, 0xe7, 0x12, 0x0e, 0xdd, 0x11, 0x43, 0x64, 0x15, 0x71, 0x55, 0x06, 0x1d, - 0xd8, 0xd8, 0x63, 0x85, 0x18, 0xf2, 0x06, 0xfb, 0xa0, 0x75, 0x36, 0xd4, 0xf5, 0xc3, 0xe5, 0xfe, - 0xd7, 0x0f, 0xdb, 0x7f, 0x3e, 0x46, 0x5f, 0xaf, 0x1d, 0xce, 0x45, 0xa4, 0x19, 0xd3, 0xef, 0xdb, - 0x89, 0x7c, 0x31, 0x49, 0xd4, 0xf7, 0xbd, 0x89, 0x17, 0x31, 0x6d, 0x4f, 0x9d, 0x53, 0x96, 0xf6, - 0x55, 0xa3, 0xb2, 0xbc, 0x67, 0x8d, 0xca, 0x97, 0x60, 0x3c, 0x8e, 0x37, 0x57, 0x22, 0x6f, 0xdb, - 0x49, 0xc8, 0x75, 0x22, 0x0b, 0x48, 0xe9, 0x7a, 0x6d, 0x8d, 0xab, 0x1a, 0x88, 0xd3, 0xb8, 0xe8, - 0x0a, 0x4c, 0xea, 0x4a, 0x91, 0x24, 0x4a, 0x58, 0x0a, 0x24, 0x9f, 0x09, 0xaa, 0x38, 0x90, 0xae, - 0x2d, 0x29, 0x10, 0x70, 0xef, 0x33, 0x54, 0xe6, 0xa6, 0x1a, 0x69, 0x47, 0x86, 0xd3, 0x32, 0x37, - 0x45, 0x87, 0xf6, 0xa5, 0xe7, 0x09, 0xb4, 0x04, 0x27, 0xf8, 0xc4, 0x98, 0x6d, 0xb7, 0x8d, 0x37, - 0x1a, 0x49, 0xdf, 0x4f, 0x70, 0xa5, 0x17, 0x05, 0xe7, 0x3d, 0x87, 0x5e, 0x80, 0x51, 0xd5, 0xbc, - 0x30, 0x2f, 0x8e, 0xd6, 0x94, 0x6b, 0x4f, 0x91, 0x59, 0x68, 0x62, 0x13, 0x0f, 0xbd, 0x1f, 0x9e, - 0xd4, 0x7f, 0x79, 0x4a, 0x3d, 0x3f, 0x77, 0x9e, 0x17, 0x45, 0x78, 0xd5, 0xf5, 0x77, 0x57, 0x72, - 0xd1, 0x9a, 0xb8, 0xdf, 0xf3, 0x68, 0x0d, 0xce, 0x28, 0xd0, 0xa5, 0x20, 0x61, 0x49, 0xaf, 0x31, - 0xa9, 0x3b, 0x31, 0x8b, 0xa0, 0x00, 0xf6, 0x9e, 0xb6, 0xa0, 0x7e, 0xe6, 0x8a, 0x97, 0x5c, 0xcd, - 0xc3, 0xc4, 0x8b, 0x78, 0x17, 0x2a, 0xe8, 0x02, 0xd4, 0x48, 0xe0, 0xac, 0xf9, 0x64, 0x79, 0x6e, - 0x41, 0xec, 0x48, 0x75, 0x96, 0x84, 0x04, 0x60, 0x8d, 0xa3, 0xe2, 0xfc, 0xc7, 0xfa, 0xc5, 0xf9, - 0xa3, 0x15, 0x38, 0xb9, 0xe1, 0xb6, 0xa9, 0x95, 0xe9, 0xb9, 0x64, 0xd6, 0x65, 0x81, 0xc5, 0xf4, - 0xc3, 0xf0, 0x8b, 0x23, 0x54, 0xc2, 0xd4, 0x95, 0xb9, 0x95, 0x1e, 0x1c, 0x9c, 0xfb, 0x24, 0x0b, - 0x40, 0x8f, 0xc2, 0x7b, 0xdd, 0xa9, 0x13, 0x99, 0x00, 0x74, 0xda, 0x88, 0x39, 0x0c, 0x5d, 0x03, - 0xc4, 0x92, 0x06, 0xaf, 0x26, 0x49, 0x5b, 0x99, 0xb5, 0x53, 0x27, 0xd3, 0x25, 0x39, 0x2f, 0xf7, - 0x60, 0xe0, 0x9c, 0xa7, 0xa8, 0xd5, 0x13, 0x84, 0x8c, 0xfa, 0xd4, 0x93, 0x69, 0xab, 0xe7, 0x06, - 0x6f, 0xc6, 0x12, 0x8e, 0x3e, 0x04, 0x53, 0x9d, 0x98, 0xb0, 0x0d, 0xf3, 0xed, 0x30, 0xda, 0xf2, - 0x43, 0xa7, 0xb9, 0xc0, 0xee, 0x39, 0x4e, 0xba, 0x53, 0x53, 0x8c, 0xf9, 0x79, 0xf1, 0xec, 0xd4, - 0xcd, 0x3e, 0x78, 0xb8, 0x2f, 0x85, 0x6c, 0x4d, 0xd9, 0xd3, 0x03, 0xd6, 0x94, 0x5d, 0x81, 0x93, - 0x52, 0xaf, 0x2d, 0xcf, 0x2d, 0xa8, 0x97, 0x9e, 0x3a, 0x93, 0xbe, 0x38, 0x71, 0x21, 0x07, 0x07, - 0xe7, 0x3e, 0x89, 0xb6, 0xe0, 0x69, 0xe6, 0x63, 0x11, 0x1f, 0x67, 0x25, 0xf2, 0x02, 0xd7, 0x6b, - 0x3b, 0x3e, 0x5f, 0x92, 0x0b, 0xcd, 0xa9, 0xa7, 0x59, 0xd7, 0xde, 0x22, 0x48, 0x3f, 0x3d, 0xbb, - 0x1b, 0x32, 0xde, 0x9d, 0x16, 0xba, 0x0b, 0x6f, 0xde, 0x05, 0x81, 0xab, 0x96, 0xa9, 0x73, 0x8c, - 0xe1, 0x37, 0x0a, 0x86, 0x6f, 0x9e, 0xdd, 0xeb, 0x01, 0xbc, 0x37, 0xcd, 0xbe, 0x6f, 0xb9, 0x4a, - 0x02, 0x87, 0xbd, 0xe5, 0xf4, 0x00, 0x6f, 0x29, 0x91, 0xf1, 0xee, 0xb4, 0xd0, 0x26, 0x9c, 0x65, - 0x08, 0xb3, 0x6e, 0xe2, 0x6d, 0xeb, 0x72, 0x41, 0x97, 0x82, 0x66, 0x3b, 0xf4, 0x82, 0x64, 0xea, - 0x3c, 0xe3, 0xf5, 0x0d, 0x82, 0xd7, 0xd9, 0xd9, 0x5d, 0x70, 0xf1, 0xae, 0x94, 0xec, 0x3f, 0xb0, - 0x60, 0x5c, 0xa9, 0x9f, 0x23, 0xc8, 0x40, 0xf7, 0xd3, 0x19, 0xe8, 0x57, 0x0e, 0xae, 0xc0, 0x59, - 0xcf, 0xfb, 0xe4, 0x49, 0xfd, 0xf7, 0x49, 0x00, 0xad, 0xe4, 0x95, 0x7d, 0x65, 0xf5, 0xb5, 0xaf, - 0x1e, 0x5b, 0x05, 0x9b, 0x57, 0xe0, 0xb5, 0xf2, 0x68, 0x0b, 0xbc, 0x36, 0xe0, 0x94, 0x94, 0x07, - 0x3c, 0x1e, 0xe0, 0x6a, 0x18, 0x2b, 0x7d, 0x6d, 0x5c, 0x63, 0xba, 0x90, 0x87, 0x84, 0xf3, 0x9f, - 0x4d, 0x19, 0xe6, 0x23, 0x7b, 0x1a, 0xe6, 0x4a, 0x45, 0x2d, 0xae, 0xcb, 0x4b, 0x86, 0x33, 0x2a, - 0x6a, 0xf1, 0x72, 0x03, 0x6b, 0x9c, 0x7c, 0x3b, 0xa5, 0x56, 0x90, 0x9d, 0x02, 0xfb, 0xb6, 0x53, - 0xa4, 0xc6, 0x1c, 0xed, 0xab, 0x31, 0xe5, 0xb9, 0xe3, 0x58, 0xdf, 0x73, 0xc7, 0xf7, 0xc0, 0x84, - 0x17, 0x6c, 0x92, 0xc8, 0x4b, 0x48, 0x93, 0xad, 0x05, 0xa6, 0x4d, 0xab, 0xda, 0x4a, 0x5d, 0x48, - 0x41, 0x71, 0x06, 0x3b, 0xad, 0xe6, 0x27, 0x06, 0x50, 0xf3, 0x7d, 0x8c, 0xab, 0x63, 0xc5, 0x18, - 0x57, 0xc7, 0x0f, 0x6e, 0x5c, 0x4d, 0x1e, 0xaa, 0x71, 0x85, 0x0a, 0x31, 0xae, 0x06, 0xb2, 0x5b, - 0x0c, 0x0f, 0xcb, 0xc9, 0x3d, 0x3c, 0x2c, 0xfd, 0x2c, 0xab, 0x53, 0x0f, 0x6d, 0x59, 0xe5, 0x1b, - 0x4d, 0x4f, 0xbc, 0x61, 0x34, 0x15, 0x62, 0x34, 0x3d, 0x03, 0x95, 0x26, 0x69, 0x27, 0x9b, 0x53, - 0x4f, 0xb1, 0xc9, 0xaa, 0xbe, 0xff, 0x3c, 0x6d, 0xc4, 0x1c, 0x86, 0x12, 0x38, 0x7f, 0x97, 0xac, - 0x6d, 0x86, 0xe1, 0xd6, 0x92, 0x13, 0x78, 0xeb, 0x44, 0x5c, 0x62, 0x70, 0xdb, 0x89, 0x5a, 0xa2, - 0x80, 0x7c, 0x73, 0xea, 0x2c, 0xeb, 0xc2, 0x73, 0xe2, 0xf9, 0xf3, 0xb7, 0xf7, 0xc0, 0xc7, 0x7b, - 0x52, 0x7c, 0xc3, 0x9e, 0xfb, 0x7a, 0xb6, 0xe7, 0x3e, 0x5b, 0x82, 0x53, 0xda, 0xe2, 0xa1, 0x7a, - 0xc6, 0x5b, 0xa7, 0x3a, 0x9f, 0xa0, 0x8b, 0x00, 0x3c, 0x0a, 0xc6, 0xa8, 0xa3, 0xa1, 0x2b, 0x89, - 0x28, 0x08, 0x36, 0xb0, 0x58, 0x39, 0x0a, 0x12, 0xb1, 0xbb, 0xc8, 0xb2, 0xe6, 0xd0, 0x9c, 0x68, - 0xc7, 0x0a, 0x83, 0x2e, 0x2e, 0xfa, 0x5b, 0x54, 0x45, 0xca, 0xde, 0x72, 0x31, 0xa7, 0x41, 0xd8, - 0xc4, 0x43, 0xcf, 0x71, 0x26, 0x4c, 0x15, 0x53, 0x93, 0x68, 0x8c, 0xfb, 0x9a, 0x94, 0xf6, 0x55, - 0x50, 0xd9, 0x1d, 0x56, 0x2e, 0xa5, 0xd2, 0xdb, 0x1d, 0x16, 0x58, 0xae, 0x30, 0xec, 0xff, 0x69, - 0xc1, 0xe9, 0xdc, 0xa1, 0x38, 0x02, 0x33, 0xf7, 0x5e, 0xda, 0xcc, 0x6d, 0x14, 0xe5, 0xa7, 0x32, - 0xde, 0xa2, 0x8f, 0xc9, 0xfb, 0xef, 0x2d, 0x98, 0xd0, 0xf8, 0x47, 0xf0, 0xaa, 0x5e, 0xfa, 0x55, - 0x8b, 0x73, 0xc9, 0xd5, 0x7a, 0xde, 0xed, 0x97, 0x4b, 0xa0, 0x6e, 0x9e, 0x99, 0x75, 0x93, 0xc1, - 0x72, 0x51, 0xbb, 0x30, 0xcc, 0xc2, 0xca, 0xe2, 0x62, 0x42, 0x66, 0xd3, 0xfc, 0x59, 0x88, 0x9a, - 0x3e, 0xe5, 0x67, 0x7f, 0x63, 0x2c, 0x18, 0xb2, 0x9b, 0xf2, 0xa4, 0x9c, 0x2e, 0xa7, 0x8d, 0x59, - 0x25, 0x8f, 0x15, 0x06, 0x35, 0xc4, 0x3c, 0x37, 0x0c, 0xe6, 0x7c, 0x27, 0x8e, 0xc5, 0xde, 0x40, - 0x19, 0x62, 0x0b, 0x12, 0x80, 0x35, 0x0e, 0x8b, 0x38, 0xf3, 0xe2, 0xb6, 0xef, 0x74, 0x0d, 0xc7, - 0xab, 0x51, 0xfd, 0x4f, 0x81, 0xb0, 0x89, 0x67, 0xb7, 0x60, 0x2a, 0xfd, 0x12, 0xf3, 0x64, 0x9d, - 0xa5, 0x7d, 0x0c, 0x34, 0x9c, 0x17, 0xa0, 0xe6, 0xb0, 0xa7, 0x16, 0x3b, 0x8e, 0x90, 0x09, 0x3a, - 0xf9, 0x41, 0x02, 0xb0, 0xc6, 0xb1, 0xbf, 0x19, 0x4e, 0xe4, 0x8c, 0xd9, 0x00, 0x51, 0xb5, 0x3f, - 0x5f, 0x82, 0x63, 0xe9, 0x27, 0x63, 0x96, 0x18, 0xcd, 0xfb, 0xec, 0xc5, 0x6e, 0xb8, 0x4d, 0xa2, - 0x2e, 0xed, 0x86, 0x95, 0x49, 0x8c, 0xee, 0xc1, 0xc0, 0x39, 0x4f, 0xb1, 0x4b, 0xa0, 0x9a, 0xea, - 0xd5, 0xe5, 0xf4, 0xb8, 0x55, 0xe4, 0xf4, 0xd0, 0x23, 0x6b, 0x46, 0x02, 0x2a, 0x96, 0xd8, 0xe4, - 0x4f, 0xed, 0x6a, 0x96, 0xd6, 0x55, 0xef, 0x78, 0x7e, 0xe2, 0x05, 0xe2, 0x95, 0xc5, 0xc4, 0x51, - 0x76, 0xf5, 0x52, 0x2f, 0x0a, 0xce, 0x7b, 0xce, 0xfe, 0xea, 0x10, 0xa8, 0xf2, 0x48, 0x2c, 0x52, - 0xbb, 0xa0, 0x38, 0xf7, 0xfd, 0xa6, 0xd7, 0xab, 0x2f, 0x3d, 0xb4, 0x5b, 0xe8, 0x24, 0x77, 0x9d, - 0x9b, 0x67, 0x6c, 0x6a, 0xc0, 0x56, 0x35, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0xbe, 0xb7, 0x4d, 0xf8, - 0x43, 0xc3, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, 0xec, 0x9e, 0x05, 0x6f, 0x7d, 0x5d, 0xf8, - 0x81, 0xf5, 0x3d, 0x0b, 0xde, 0xfa, 0x3a, 0x66, 0x10, 0x7e, 0x4d, 0x60, 0xb8, 0x25, 0xf6, 0x92, - 0xc6, 0x35, 0x81, 0xe1, 0x16, 0x66, 0x10, 0xfa, 0x95, 0x82, 0x30, 0x6a, 0x39, 0xbe, 0xf7, 0x2a, - 0x69, 0x2a, 0x2e, 0x62, 0x0f, 0xa9, 0xbe, 0xd2, 0x8d, 0x5e, 0x14, 0x9c, 0xf7, 0x1c, 0x9d, 0xd0, - 0xed, 0x88, 0x34, 0x3d, 0x37, 0x31, 0xa9, 0x41, 0x7a, 0x42, 0xaf, 0xf4, 0x60, 0xe0, 0x9c, 0xa7, - 0xd0, 0x2c, 0x1c, 0x93, 0xe5, 0xad, 0x64, 0x69, 0xd8, 0xd1, 0x74, 0x7d, 0x49, 0x9c, 0x06, 0xe3, - 0x2c, 0x3e, 0x95, 0x58, 0x2d, 0x51, 0xae, 0x9c, 0x6d, 0x39, 0x0d, 0x89, 0x25, 0xcb, 0x98, 0x63, - 0x85, 0x61, 0x7f, 0xb2, 0x4c, 0x35, 0x6c, 0x9f, 0x5b, 0x01, 0x8e, 0x2c, 0xaf, 0x22, 0x3d, 0x23, - 0x87, 0x06, 0x98, 0x91, 0xef, 0x82, 0xb1, 0x3b, 0x71, 0x18, 0xa8, 0x9c, 0x85, 0x4a, 0xdf, 0x9c, - 0x05, 0x03, 0x2b, 0x3f, 0x67, 0x61, 0xb8, 0xa8, 0x9c, 0x85, 0x91, 0x87, 0xcc, 0x59, 0xf8, 0x57, - 0x15, 0x50, 0xf7, 0x40, 0xdf, 0x20, 0xc9, 0xdd, 0x30, 0xda, 0xf2, 0x82, 0x0d, 0x56, 0xaa, 0xe9, - 0x2b, 0x96, 0xac, 0xf6, 0xb4, 0x68, 0xe6, 0xf4, 0xaf, 0x17, 0x74, 0x97, 0x6f, 0x8a, 0xd9, 0xcc, - 0xaa, 0xc1, 0x88, 0xc7, 0xbe, 0x65, 0xaa, 0x4a, 0x89, 0x63, 0xbd, 0x54, 0x8f, 0xd0, 0x77, 0x02, - 0xc8, 0x43, 0xb3, 0x75, 0x29, 0x81, 0x17, 0x8a, 0xe9, 0x1f, 0x26, 0xeb, 0xda, 0xbe, 0x5d, 0x55, - 0x4c, 0xb0, 0xc1, 0x10, 0x7d, 0x56, 0xd7, 0x3b, 0xe0, 0x49, 0x8e, 0x1f, 0x3d, 0x94, 0xb1, 0x19, - 0xa4, 0xda, 0x01, 0x86, 0x11, 0x2f, 0xd8, 0xa0, 0xf3, 0x44, 0xc4, 0x76, 0xbf, 0x35, 0xaf, 0x12, - 0xe0, 0x62, 0xe8, 0x34, 0xeb, 0x8e, 0xef, 0x04, 0x2e, 0x89, 0x16, 0x38, 0xba, 0xde, 0x4b, 0x8b, - 0x06, 0x2c, 0x09, 0xf5, 0x5c, 0x56, 0x5d, 0x19, 0xe4, 0xb2, 0xea, 0x33, 0xdf, 0x0e, 0x93, 0x3d, - 0x1f, 0x73, 0x5f, 0xc5, 0x0d, 0x0e, 0x50, 0x03, 0xf0, 0x17, 0x86, 0xb5, 0xd2, 0xba, 0x11, 0x36, - 0xf9, 0xdd, 0xc7, 0x91, 0xfe, 0xa2, 0xc2, 0x7e, 0x2d, 0x70, 0x8a, 0x28, 0x35, 0x63, 0x34, 0x62, - 0x93, 0x25, 0x9d, 0xa3, 0x6d, 0x27, 0x22, 0xc1, 0x61, 0xcf, 0xd1, 0x15, 0xc5, 0x04, 0x1b, 0x0c, - 0xd1, 0x66, 0x2a, 0x0b, 0xf7, 0xf2, 0xc1, 0xb3, 0x70, 0x59, 0x7d, 0xe6, 0xbc, 0x2b, 0x42, 0x5f, - 0xb3, 0x60, 0x22, 0x48, 0xcd, 0xdc, 0x62, 0x12, 0x6e, 0xf2, 0x57, 0x45, 0x1d, 0xdd, 0xdf, 0x99, - 0x9e, 0x48, 0xb7, 0xe1, 0x0c, 0xff, 0x3c, 0x95, 0x56, 0xd9, 0xa7, 0x4a, 0xd3, 0x77, 0xaf, 0x0f, - 0xf7, 0xbb, 0x7b, 0x1d, 0x05, 0x30, 0xcc, 0xab, 0xc8, 0x8a, 0xb0, 0x9b, 0x03, 0xd6, 0x32, 0x32, - 0x4b, 0xd1, 0x72, 0x7e, 0xbc, 0x05, 0x0b, 0x2e, 0xe8, 0xb6, 0x99, 0xa4, 0x5f, 0xdd, 0x77, 0x16, - 0xe8, 0x78, 0xbf, 0x64, 0x7e, 0xfb, 0xff, 0x0e, 0xc1, 0x71, 0x39, 0x22, 0x32, 0x59, 0x8f, 0xea, - 0x47, 0xce, 0x57, 0xdb, 0xca, 0x4a, 0x3f, 0x5e, 0x95, 0x00, 0xac, 0x71, 0xa8, 0x3d, 0xd6, 0x89, - 0xc9, 0x72, 0x9b, 0x04, 0x8b, 0xde, 0x5a, 0x2c, 0x02, 0x64, 0xd4, 0x42, 0xb9, 0xa9, 0x41, 0xd8, - 0xc4, 0x63, 0x95, 0x04, 0x5c, 0xb3, 0x9c, 0x8f, 0xae, 0x24, 0x20, 0x0c, 0x55, 0x09, 0x47, 0x3f, - 0x92, 0x7b, 0x4d, 0x51, 0x31, 0xa9, 0xee, 0x3d, 0x39, 0x8a, 0xfb, 0xbb, 0x9f, 0x08, 0xfd, 0x43, - 0x0b, 0x4e, 0xf1, 0x56, 0x39, 0x92, 0x37, 0xdb, 0x4d, 0x27, 0x21, 0x71, 0x31, 0xd7, 0x4b, 0xe6, - 0xf4, 0x4f, 0x1f, 0x95, 0xe4, 0xb1, 0xc5, 0xf9, 0xbd, 0x41, 0x5f, 0xb4, 0xe0, 0xd8, 0x56, 0xaa, - 0x1c, 0x9f, 0x54, 0x1d, 0x07, 0xad, 0x55, 0x95, 0x22, 0xaa, 0x97, 0x5a, 0xba, 0x3d, 0xc6, 0x59, - 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0xa3, 0xaf, 0xe2, 0xb7, 0x7f, 0x53, 0x50, 0x5a, 0x97, - 0x95, 0xbe, 0xd6, 0xe5, 0xd3, 0x50, 0xee, 0x78, 0x4d, 0xb1, 0xbf, 0xd0, 0x21, 0x39, 0x0b, 0xf3, - 0x98, 0xb6, 0xdb, 0xff, 0xaf, 0xa2, 0x7d, 0x12, 0x22, 0x83, 0xfc, 0x2f, 0xc5, 0x6b, 0x07, 0xaa, - 0x4c, 0x37, 0x7f, 0xf3, 0x5b, 0x3d, 0x65, 0xba, 0xe7, 0x1f, 0xbe, 0x50, 0x00, 0x1f, 0xa8, 0x7e, - 0x55, 0xba, 0x47, 0xf6, 0xac, 0xd2, 0x5d, 0xa5, 0x5b, 0x31, 0xe6, 0x64, 0xac, 0xa6, 0x3a, 0x57, - 0xbd, 0x2a, 0xda, 0x1f, 0xec, 0x4c, 0xd7, 0x1f, 0xbe, 0x7b, 0x92, 0x0a, 0x56, 0x7c, 0xd0, 0x77, - 0x40, 0x8d, 0xfe, 0x66, 0x85, 0x0d, 0xc4, 0x66, 0xef, 0x65, 0x25, 0x43, 0x25, 0xa0, 0xd0, 0xea, - 0x09, 0x9a, 0x1f, 0xda, 0x86, 0x1a, 0x45, 0xe4, 0xcc, 0xf9, 0xde, 0xf0, 0x7d, 0xaa, 0xcc, 0x80, - 0x04, 0x3c, 0xd8, 0x99, 0x9e, 0x7b, 0x78, 0xe6, 0x8a, 0x0c, 0xd6, 0xac, 0x0c, 0xd5, 0x39, 0xda, - 0x4f, 0x75, 0xda, 0x7f, 0x3e, 0xa4, 0xe7, 0xbf, 0xa8, 0xf0, 0xfe, 0x97, 0x62, 0xfe, 0xbf, 0x98, - 0x99, 0xff, 0xe7, 0x7b, 0xe6, 0xff, 0x04, 0x1d, 0xb3, 0x9c, 0x7a, 0xf3, 0x47, 0x6d, 0x4c, 0xec, - 0xed, 0xb3, 0x60, 0x56, 0xd4, 0x2b, 0x1d, 0x2f, 0x22, 0xf1, 0x4a, 0xd4, 0x09, 0xbc, 0x60, 0x83, - 0x4d, 0xe1, 0xaa, 0x69, 0x45, 0xa5, 0xc0, 0x38, 0x8b, 0x8f, 0x9e, 0x87, 0x2a, 0x9d, 0x17, 0xb7, - 0x9d, 0x6d, 0x3e, 0x03, 0x8d, 0xaa, 0xba, 0x0d, 0xd1, 0x8e, 0x15, 0x06, 0xda, 0x84, 0xb3, 0x92, - 0xc0, 0x3c, 0xf1, 0x09, 0x7d, 0x21, 0x16, 0x8a, 0x1c, 0xb5, 0x78, 0xa2, 0x10, 0x8f, 0x26, 0x53, - 0xe7, 0x1d, 0x78, 0x17, 0x5c, 0xbc, 0x2b, 0x25, 0xfb, 0xf7, 0x59, 0xfc, 0x8a, 0x51, 0xf7, 0x85, - 0xce, 0x3e, 0xdf, 0x6b, 0x79, 0xb2, 0xf8, 0xaf, 0x9a, 0x7d, 0x8b, 0xb4, 0x11, 0x73, 0x18, 0xba, - 0x0b, 0x23, 0x6b, 0x8e, 0xbb, 0x15, 0xae, 0xaf, 0x17, 0x73, 0x75, 0x5f, 0x9d, 0x13, 0x63, 0x85, - 0xff, 0x47, 0xc4, 0x9f, 0x07, 0xfa, 0x27, 0x96, 0xdc, 0xf8, 0xb5, 0x31, 0xeb, 0x11, 0x89, 0x37, - 0x85, 0x63, 0xcf, 0xb8, 0x36, 0x86, 0x35, 0x63, 0x09, 0xb7, 0x7f, 0xbb, 0x02, 0xc7, 0x64, 0x2c, - 0xe9, 0x55, 0x2f, 0x66, 0x11, 0x2c, 0xe6, 0x05, 0x2a, 0xa5, 0x3d, 0x2f, 0x50, 0xf9, 0x30, 0x40, - 0x93, 0xb4, 0xfd, 0xb0, 0xcb, 0xec, 0xcc, 0xa1, 0x7d, 0xdb, 0x99, 0x6a, 0x6b, 0x32, 0xaf, 0xa8, - 0x60, 0x83, 0xa2, 0x28, 0x8e, 0xcc, 0xef, 0x63, 0xc9, 0x14, 0x47, 0x36, 0xee, 0x02, 0x1d, 0x3e, - 0xda, 0xbb, 0x40, 0x3d, 0x38, 0xc6, 0xbb, 0xa8, 0x0a, 0xb0, 0x3c, 0x44, 0x9d, 0x15, 0x96, 0xc2, - 0x3a, 0x9f, 0x26, 0x83, 0xb3, 0x74, 0xcd, 0x8b, 0x3e, 0xab, 0x47, 0x7d, 0xd1, 0xe7, 0xdb, 0xa0, - 0x26, 0xbf, 0x73, 0x3c, 0x55, 0xd3, 0x45, 0xc2, 0xe4, 0x34, 0x88, 0xb1, 0x86, 0xf7, 0xd4, 0x94, - 0x82, 0x47, 0x55, 0x53, 0xca, 0x7e, 0xad, 0x4c, 0x37, 0x28, 0xbc, 0x5f, 0xfb, 0xbe, 0x27, 0xf7, - 0xaa, 0x71, 0x4f, 0xee, 0xfe, 0xbe, 0x67, 0x35, 0x73, 0x9f, 0xee, 0x59, 0x18, 0x4a, 0x9c, 0x0d, - 0x99, 0x71, 0xcf, 0xa0, 0xab, 0xce, 0x46, 0x8c, 0x59, 0xeb, 0x7e, 0x6a, 0xc9, 0xbf, 0x04, 0xe3, - 0xb1, 0xb7, 0x11, 0x38, 0x49, 0x27, 0x22, 0xc6, 0xb9, 0xa4, 0x0e, 0xea, 0x32, 0x81, 0x38, 0x8d, - 0x8b, 0x3e, 0x65, 0x01, 0x44, 0x44, 0x6d, 0x7f, 0x86, 0x8b, 0x98, 0x43, 0x4a, 0x0c, 0x48, 0xba, - 0x66, 0x0d, 0x20, 0xb5, 0xed, 0x31, 0xd8, 0xda, 0x9f, 0xb1, 0x60, 0xb2, 0xe7, 0x29, 0xd4, 0x86, - 0x61, 0x97, 0xdd, 0x66, 0x5c, 0x4c, 0xfd, 0xdb, 0xf4, 0xcd, 0xc8, 0x5c, 0x8f, 0xf1, 0x36, 0x2c, - 0xf8, 0xd8, 0xbf, 0x38, 0x06, 0x27, 0x1b, 0x73, 0x4b, 0xf2, 0x16, 0xb4, 0x43, 0x2b, 0x21, 0x90, - 0xc7, 0xe3, 0xe8, 0x4a, 0x08, 0xf4, 0xe1, 0xee, 0x1b, 0x25, 0x04, 0x7c, 0xa3, 0x84, 0x40, 0x3a, - 0x9f, 0xbb, 0x5c, 0x44, 0x3e, 0x77, 0x5e, 0x0f, 0x06, 0xc9, 0xe7, 0x3e, 0xb4, 0x9a, 0x02, 0xbb, - 0x76, 0x68, 0x5f, 0x35, 0x05, 0x54, 0xc1, 0x85, 0x42, 0xd2, 0x47, 0xfb, 0x7c, 0xaa, 0xdc, 0x82, - 0x0b, 0x2a, 0xd9, 0x9d, 0xa7, 0x46, 0x0b, 0xa5, 0xf7, 0x72, 0xf1, 0x1d, 0x18, 0x20, 0xd9, 0x5d, - 0x64, 0x67, 0x9b, 0x05, 0x16, 0x46, 0x8a, 0x28, 0xb0, 0x90, 0xd7, 0x9d, 0x3d, 0x0b, 0x2c, 0xbc, - 0x04, 0xe3, 0xae, 0x1f, 0x06, 0x64, 0x25, 0x0a, 0x93, 0xd0, 0x0d, 0x7d, 0xb1, 0x63, 0xd3, 0xd7, - 0x00, 0x9b, 0x40, 0x9c, 0xc6, 0xed, 0x57, 0x9d, 0xa1, 0x76, 0xd0, 0xea, 0x0c, 0xf0, 0x88, 0xaa, - 0x33, 0x18, 0xf5, 0x07, 0x46, 0x8b, 0xa8, 0x3f, 0x90, 0xf7, 0x45, 0x06, 0xaa, 0x3f, 0xf0, 0xba, - 0x05, 0xe3, 0xce, 0x5d, 0xb6, 0x6f, 0xe1, 0x52, 0x98, 0x9d, 0xf6, 0x8d, 0x5e, 0xfc, 0xc8, 0x21, - 0x4c, 0xd8, 0xdb, 0x0d, 0xcd, 0xa6, 0x3e, 0xc9, 0x72, 0xc2, 0xcc, 0x26, 0x9c, 0xee, 0xc8, 0x41, - 0x6a, 0x16, 0x7c, 0xa9, 0x04, 0x6f, 0xde, 0xb3, 0x0b, 0xe8, 0x2e, 0x40, 0xe2, 0x6c, 0x88, 0x89, - 0x2a, 0xce, 0xc4, 0x0e, 0x18, 0x87, 0xbe, 0x2a, 0xe9, 0x89, 0x7c, 0x5a, 0x45, 0x1e, 0x1b, 0xac, - 0x58, 0xf8, 0x79, 0xe8, 0xf7, 0x94, 0xae, 0xc7, 0xa1, 0x4f, 0x30, 0x83, 0x50, 0x43, 0x28, 0x22, - 0x1b, 0xd4, 0xb8, 0x2f, 0xa7, 0x0d, 0x21, 0xcc, 0x5a, 0xb1, 0x80, 0xa2, 0x17, 0x60, 0xd4, 0xf1, - 0x7d, 0x9e, 0xdb, 0x4b, 0x62, 0x71, 0x3f, 0xb7, 0x2e, 0x58, 0xad, 0x41, 0xd8, 0xc4, 0xb3, 0xff, - 0xb4, 0x04, 0xd3, 0x7b, 0xc8, 0x94, 0x9e, 0x9a, 0x0e, 0x95, 0x81, 0x6b, 0x3a, 0x88, 0xdc, 0xc4, - 0xe1, 0x3e, 0xb9, 0x89, 0x2f, 0xc0, 0x68, 0x42, 0x9c, 0x96, 0x88, 0x5c, 0xcd, 0xd6, 0x61, 0x5d, - 0xd5, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe1, 0xb8, 0x2e, 0x89, 0x63, 0x99, 0x7c, 0x28, 0x1c, - 0xe6, 0x85, 0x65, 0x36, 0xb2, 0x73, 0x88, 0xd9, 0x14, 0x0b, 0x9c, 0x61, 0x99, 0x1d, 0xf0, 0xda, - 0x80, 0x03, 0xfe, 0x63, 0x25, 0x78, 0x7a, 0x57, 0xed, 0x36, 0x70, 0x5e, 0x68, 0x27, 0x26, 0x51, - 0x76, 0xe2, 0xdc, 0x8c, 0x49, 0x84, 0x19, 0x84, 0x8f, 0x52, 0xbb, 0xad, 0xb2, 0x0e, 0x8a, 0x4f, - 0xa4, 0xe6, 0xa3, 0x94, 0x62, 0x81, 0x33, 0x2c, 0x1f, 0x76, 0x5a, 0xfe, 0xf6, 0x10, 0x3c, 0x33, - 0x80, 0x0d, 0x50, 0x60, 0xc2, 0x79, 0xba, 0x98, 0x42, 0xf9, 0x11, 0x15, 0x53, 0x78, 0xb8, 0xe1, - 0x7a, 0xa3, 0x06, 0xc3, 0x40, 0x89, 0xed, 0x3f, 0x51, 0x82, 0x33, 0xfd, 0x0d, 0x16, 0xf4, 0x6d, - 0x70, 0x2c, 0x52, 0xa1, 0x86, 0x66, 0x1d, 0x86, 0x13, 0xdc, 0x1d, 0x96, 0x02, 0xe1, 0x2c, 0x2e, - 0x9a, 0x01, 0x68, 0x3b, 0xc9, 0x66, 0x7c, 0xe9, 0x9e, 0x17, 0x27, 0xa2, 0x70, 0xe5, 0x04, 0x3f, - 0xc4, 0x95, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xf9, 0xf0, 0x46, 0x98, 0xf0, 0x87, 0xf8, - 0xd6, 0xf3, 0x84, 0xbc, 0xf6, 0xd5, 0x00, 0xe1, 0x2c, 0x2e, 0x65, 0xc7, 0xc2, 0x04, 0x78, 0x47, - 0x87, 0x74, 0xe5, 0x86, 0x45, 0xd5, 0x8a, 0x0d, 0x8c, 0x6c, 0x85, 0x89, 0xca, 0xde, 0x15, 0x26, - 0xec, 0x9f, 0x29, 0xc1, 0xe9, 0xbe, 0x06, 0xef, 0x60, 0x62, 0xea, 0xf1, 0xab, 0xf2, 0xf0, 0x90, - 0x2b, 0x6c, 0x5f, 0xd5, 0x01, 0xec, 0x3f, 0xec, 0x33, 0xd3, 0x44, 0xe6, 0xff, 0xc3, 0x17, 0x49, - 0x7a, 0xfc, 0xc6, 0xb3, 0x27, 0xd9, 0x7f, 0x68, 0x1f, 0xc9, 0xfe, 0x99, 0x8f, 0x51, 0x19, 0x50, - 0x3b, 0xfc, 0xe7, 0xa1, 0xbe, 0xc3, 0x4b, 0x37, 0xc8, 0x03, 0x1d, 0x36, 0xcc, 0xc3, 0x71, 0x2f, - 0x60, 0x17, 0x79, 0x37, 0x3a, 0x6b, 0xa2, 0x96, 0x21, 0x2f, 0xdc, 0xad, 0xb2, 0xb5, 0x16, 0x32, - 0x70, 0xdc, 0xf3, 0xc4, 0x63, 0x58, 0x7c, 0xe1, 0xe1, 0x86, 0x74, 0x9f, 0x92, 0x7b, 0x19, 0x4e, - 0xc9, 0xa1, 0xd8, 0x74, 0x22, 0xd2, 0x14, 0xca, 0x36, 0x16, 0xf9, 0x79, 0xa7, 0x79, 0x8e, 0x5f, - 0x0e, 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0xba, 0x1c, 0xb6, 0x3d, 0x57, 0x6c, 0x05, 0xf5, 0xad, 0xcb, - 0xb4, 0x11, 0x73, 0x98, 0xd6, 0x17, 0xb5, 0xa3, 0xd1, 0x17, 0x1f, 0x86, 0x9a, 0x1a, 0x6f, 0x9e, - 0x2b, 0xa1, 0x26, 0x79, 0x4f, 0xae, 0x84, 0x9a, 0xe1, 0x06, 0x16, 0x9d, 0x1d, 0x74, 0xa3, 0x92, - 0x59, 0xad, 0x94, 0x1f, 0x6d, 0xb7, 0xdf, 0x09, 0x63, 0xca, 0x17, 0x38, 0xe8, 0xdd, 0xd7, 0xf6, - 0x5f, 0x94, 0x20, 0x73, 0xbd, 0x23, 0xba, 0x07, 0xb5, 0x66, 0xd4, 0xe5, 0x8d, 0xc5, 0x14, 0x8e, - 0x9f, 0x97, 0xe4, 0xf4, 0x99, 0x99, 0x6a, 0xc2, 0x9a, 0x19, 0xfa, 0x18, 0xaf, 0xcd, 0x2e, 0x58, - 0x97, 0x8a, 0x28, 0xc0, 0xd1, 0x50, 0xf4, 0xcc, 0x4b, 0x6d, 0x65, 0x1b, 0x36, 0xf8, 0xa1, 0x04, - 0x6a, 0x9b, 0xf2, 0x1a, 0xcb, 0x62, 0xc4, 0x9d, 0xba, 0x15, 0x93, 0x9b, 0x68, 0xea, 0x2f, 0xd6, - 0x8c, 0xec, 0x3f, 0x28, 0xc1, 0xc9, 0xf4, 0x07, 0x10, 0x67, 0x9c, 0x3f, 0x69, 0xc1, 0x93, 0xbe, - 0x13, 0x27, 0x8d, 0x0e, 0xdb, 0x28, 0xac, 0x77, 0xfc, 0xe5, 0x4c, 0x39, 0xff, 0x83, 0x3a, 0x5b, - 0x14, 0xe1, 0xec, 0xb5, 0xa7, 0xf5, 0xa7, 0xee, 0xef, 0x4c, 0x3f, 0xb9, 0x98, 0xcf, 0x1c, 0xf7, - 0xeb, 0x15, 0x7a, 0xcd, 0x82, 0xe3, 0x6e, 0x27, 0x8a, 0x48, 0x90, 0xe8, 0xae, 0xf2, 0xaf, 0x78, - 0xa3, 0x90, 0x81, 0xd4, 0x1d, 0x3c, 0x49, 0x05, 0xea, 0x5c, 0x86, 0x17, 0xee, 0xe1, 0x6e, 0x7f, - 0x3f, 0xd5, 0x9c, 0x7d, 0xdf, 0xf3, 0xaf, 0xd8, 0x3d, 0xad, 0x7f, 0x3c, 0x0c, 0xe3, 0xa9, 0xbb, - 0x0a, 0x52, 0x87, 0x7d, 0xd6, 0x9e, 0x87, 0x7d, 0x2c, 0xa3, 0xb4, 0x13, 0x88, 0x7b, 0x04, 0xcd, - 0x8c, 0xd2, 0x4e, 0x40, 0x30, 0x87, 0x89, 0x21, 0xc5, 0x9d, 0x40, 0x9c, 0x3e, 0x9a, 0x43, 0x8a, - 0x3b, 0x01, 0x16, 0x50, 0xf4, 0x09, 0x0b, 0xc6, 0xd8, 0xe2, 0x13, 0xa7, 0xaa, 0x42, 0xa1, 0x5d, - 0x2b, 0x60, 0xb9, 0xcb, 0xfb, 0x39, 0x58, 0x18, 0xaa, 0xd9, 0x82, 0x53, 0x1c, 0xd1, 0xa7, 0x2d, - 0xa8, 0xa9, 0xfb, 0xb2, 0xc5, 0xd9, 0x48, 0xa3, 0xd8, 0xab, 0x20, 0x32, 0x52, 0x4f, 0xd5, 0xe4, - 0xc7, 0x9a, 0x31, 0x8a, 0xd5, 0x39, 0xe6, 0xc8, 0xe1, 0x9c, 0x63, 0x42, 0xce, 0x19, 0xe6, 0xdb, - 0xa0, 0xd6, 0x12, 0xf9, 0x99, 0xfc, 0x68, 0x51, 0xde, 0x00, 0x24, 0x1b, 0xb1, 0x86, 0x53, 0x63, - 0x3f, 0x66, 0x2f, 0x96, 0x18, 0x67, 0x81, 0xcc, 0xd8, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0x98, 0x07, - 0x97, 0xf0, 0x48, 0x0f, 0x2e, 0x47, 0xf7, 0x38, 0xb8, 0x6c, 0xc0, 0x29, 0xa7, 0x93, 0x84, 0x57, - 0x89, 0xe3, 0xcf, 0x26, 0x09, 0x69, 0xb5, 0x93, 0x98, 0x5f, 0x6f, 0x31, 0xc6, 0x5c, 0xc0, 0x2a, - 0x70, 0xae, 0x41, 0xfc, 0xf5, 0x1e, 0x24, 0x9c, 0xff, 0xac, 0xfd, 0xcf, 0x2c, 0x38, 0x95, 0x3b, - 0x15, 0x1e, 0xdf, 0x94, 0x05, 0xfb, 0x87, 0x2a, 0x70, 0x22, 0xe7, 0x26, 0x13, 0xd4, 0x35, 0x17, - 0x89, 0x55, 0x44, 0xf4, 0x5f, 0x3a, 0x98, 0x4d, 0x7e, 0x9b, 0x9c, 0x95, 0xb1, 0xbf, 0x58, 0x04, - 0x1d, 0x0f, 0x50, 0x3e, 0xda, 0x78, 0x00, 0x63, 0xae, 0x0f, 0x3d, 0xd2, 0xb9, 0x5e, 0xd9, 0x63, - 0xae, 0xff, 0x94, 0x05, 0x53, 0xad, 0x3e, 0xd7, 0x13, 0x8a, 0xf3, 0xa4, 0x5b, 0x87, 0x73, 0xf9, - 0x61, 0xfd, 0xec, 0xfd, 0x9d, 0xe9, 0xbe, 0xb7, 0x42, 0xe2, 0xbe, 0xbd, 0xb2, 0xbf, 0x5a, 0x06, - 0x66, 0xaf, 0xb1, 0x6a, 0xf5, 0x5d, 0xf4, 0x71, 0xf3, 0x62, 0x24, 0xab, 0xa8, 0xcb, 0x7b, 0x38, - 0x71, 0x75, 0xb1, 0x12, 0x1f, 0xc1, 0xbc, 0x7b, 0x96, 0xb2, 0x92, 0xb0, 0x34, 0x80, 0x24, 0xf4, - 0xe5, 0x0d, 0x54, 0xe5, 0xe2, 0x6f, 0xa0, 0xaa, 0x65, 0x6f, 0x9f, 0xda, 0xfd, 0x13, 0x0f, 0x3d, - 0x96, 0x9f, 0xf8, 0x67, 0x2c, 0x2e, 0x78, 0x32, 0x5f, 0x01, 0x4d, 0x4b, 0x73, 0x83, 0x5f, 0x54, - 0x53, 0xeb, 0x31, 0x35, 0x9e, 0x83, 0x6a, 0x2c, 0xa4, 0xb2, 0x30, 0x49, 0xd8, 0x2e, 0x56, 0x4a, - 0x6a, 0xac, 0xa0, 0x68, 0x06, 0xc0, 0xf1, 0xfd, 0xf0, 0xee, 0xa5, 0x56, 0x3b, 0xe9, 0x4a, 0xc3, - 0x84, 0x6e, 0x05, 0x66, 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x5b, 0x60, 0x84, 0x57, 0x23, 0x69, 0x0a, - 0x8f, 0xce, 0x28, 0x5d, 0x7c, 0xbc, 0x56, 0x49, 0x13, 0x4b, 0x98, 0xbd, 0x09, 0xc6, 0x5e, 0xe2, - 0xe1, 0x6f, 0xbe, 0xdf, 0xfb, 0x32, 0x5b, 0xfb, 0xef, 0x97, 0x04, 0x2b, 0xbe, 0x37, 0xd0, 0xa1, - 0x83, 0xd6, 0x3e, 0x43, 0x07, 0x3f, 0x06, 0xe0, 0x86, 0xad, 0x36, 0xdd, 0x2d, 0xaf, 0x86, 0xc5, - 0x6c, 0xb1, 0xe6, 0x14, 0x3d, 0xbd, 0xc5, 0xd2, 0x6d, 0xd8, 0xe0, 0x97, 0x12, 0xe8, 0xe5, 0x3d, - 0x05, 0x7a, 0x4a, 0xb6, 0x0d, 0xed, 0x2e, 0xdb, 0xec, 0x3f, 0xb5, 0x20, 0x65, 0xeb, 0xa1, 0x36, - 0x54, 0x68, 0x77, 0xbb, 0x42, 0x4c, 0x2c, 0x17, 0x67, 0x58, 0x52, 0xf9, 0x2c, 0xd6, 0x1e, 0xfb, - 0x89, 0x39, 0x23, 0xe4, 0x8b, 0x30, 0xc9, 0x42, 0xb6, 0x3c, 0x26, 0xc3, 0xab, 0x61, 0xb8, 0xc5, - 0x43, 0x88, 0x74, 0xc8, 0xa5, 0xfd, 0x22, 0x4c, 0xf6, 0x74, 0x8a, 0xdd, 0x96, 0x1f, 0xca, 0x7d, - 0xbb, 0x61, 0xa2, 0xb3, 0xb2, 0x20, 0x98, 0xc3, 0xec, 0x9f, 0xb0, 0xe0, 0x78, 0x96, 0x3c, 0x7a, - 0xdd, 0x82, 0xc9, 0x38, 0x4b, 0xef, 0xb0, 0xc6, 0x4e, 0xa5, 0x4b, 0xf4, 0x80, 0x70, 0x6f, 0x27, - 0xec, 0xff, 0x26, 0x74, 0xc0, 0x6d, 0x2f, 0x68, 0x86, 0x77, 0x95, 0x75, 0x64, 0xf5, 0xb5, 0x8e, - 0x9e, 0x87, 0x6a, 0xec, 0x6e, 0x92, 0x66, 0xc7, 0xef, 0x29, 0x2a, 0xd1, 0x10, 0xed, 0x58, 0x61, - 0xb0, 0x1c, 0xfa, 0x8e, 0xd8, 0xad, 0x66, 0x26, 0xe5, 0xbc, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x0b, - 0xc6, 0x8c, 0x97, 0x94, 0xf3, 0x92, 0x6d, 0x35, 0x0c, 0xbd, 0x1d, 0xe3, 0x14, 0x16, 0x15, 0x40, - 0xca, 0xd2, 0x92, 0x7a, 0x9a, 0x09, 0x20, 0x25, 0x0e, 0x63, 0x6c, 0x60, 0xb0, 0x8a, 0x15, 0x7e, - 0x27, 0x66, 0xe7, 0xc7, 0xc3, 0xfa, 0xce, 0x96, 0x39, 0xd1, 0x86, 0x15, 0x14, 0x5d, 0x04, 0x68, - 0x39, 0x41, 0xc7, 0xf1, 0xe9, 0x08, 0x09, 0x87, 0x99, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, - 0xfa, 0xc6, 0x89, 0xd7, 0x22, 0x1f, 0x08, 0x03, 0x19, 0xde, 0xae, 0x43, 0x0a, 0x44, 0x3b, 0x56, - 0x18, 0xe8, 0x45, 0x18, 0x75, 0x82, 0x26, 0x37, 0x0b, 0xc3, 0x48, 0x9c, 0x4c, 0xaa, 0x3d, 0xe7, - 0xcd, 0x98, 0xcc, 0x6a, 0x28, 0x36, 0x51, 0xb3, 0x17, 0xd6, 0xc0, 0x80, 0x17, 0x63, 0xfe, 0x89, - 0x05, 0xc7, 0x74, 0x69, 0x2b, 0xe6, 0x57, 0x4b, 0x39, 0x14, 0xad, 0x3d, 0x1d, 0x8a, 0xe9, 0x4a, - 0x24, 0xa5, 0x81, 0x2a, 0x91, 0x98, 0x45, 0x42, 0xca, 0xbb, 0x16, 0x09, 0x79, 0x0b, 0x8c, 0x6c, - 0x91, 0xae, 0x51, 0x4d, 0x84, 0x69, 0x87, 0xeb, 0xbc, 0x09, 0x4b, 0x18, 0xb2, 0x61, 0xd8, 0x75, - 0x54, 0x99, 0xd2, 0x31, 0x11, 0x91, 0x36, 0xcb, 0x90, 0x04, 0xc4, 0x5e, 0x86, 0x9a, 0x3a, 0xca, - 0x97, 0xfe, 0x3d, 0x2b, 0xdf, 0xbf, 0x47, 0xd7, 0xb6, 0x11, 0x95, 0xa0, 0xd7, 0x36, 0x8b, 0x65, - 0x10, 0x41, 0x0a, 0xf5, 0xb5, 0x5f, 0xfb, 0xda, 0xb9, 0x37, 0xfd, 0xd6, 0xd7, 0xce, 0xbd, 0xe9, - 0xf7, 0xbf, 0x76, 0xee, 0x4d, 0x9f, 0xb8, 0x7f, 0xce, 0xfa, 0xb5, 0xfb, 0xe7, 0xac, 0xdf, 0xba, - 0x7f, 0xce, 0xfa, 0xfd, 0xfb, 0xe7, 0xac, 0xaf, 0xde, 0x3f, 0x67, 0xbd, 0xf6, 0x9f, 0xce, 0xbd, - 0xe9, 0x03, 0xdf, 0xba, 0x5b, 0x18, 0xff, 0xf6, 0x3b, 0x59, 0xec, 0x3e, 0x5d, 0xcf, 0x17, 0x8c, - 0x49, 0x7c, 0x41, 0xae, 0xe7, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x63, 0x16, 0x6c, 0x4b, 0x9d, - 0x09, 0x01, 0x00, + // 12739 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, + 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x1f, 0x24, 0x9a, 0xe4, 0x1d, 0xc8, 0xe3, 0x11, + 0xd4, 0x9c, 0x75, 0x3a, 0xff, 0x74, 0x02, 0x2d, 0x4a, 0x27, 0xdf, 0xcf, 0x67, 0xcb, 0xc1, 0x02, + 0xfc, 0x00, 0x09, 0x10, 0x50, 0x2f, 0x48, 0xea, 0xeb, 0x24, 0x0d, 0x66, 0x1b, 0xc0, 0x10, 0xb3, + 0x33, 0x7b, 0x33, 0xb3, 0x20, 0xf7, 0x2c, 0xcb, 0x92, 0x25, 0xd9, 0x92, 0x25, 0x4b, 0x17, 0x3b, + 0x15, 0x9f, 0x93, 0x48, 0x91, 0x63, 0xe7, 0xa3, 0x2a, 0xe5, 0xd8, 0x89, 0xab, 0x12, 0x57, 0x6c, + 0x97, 0x2b, 0xb6, 0xcb, 0x65, 0x57, 0x9c, 0xd8, 0x71, 0x39, 0xb6, 0x13, 0xc7, 0x88, 0xc4, 0x54, + 0xca, 0xae, 0x54, 0xc5, 0x29, 0x27, 0xa9, 0x54, 0x8a, 0x71, 0x5c, 0xa9, 0xfe, 0xee, 0x99, 0x9d, + 0x05, 0x16, 0xc4, 0x00, 0xa4, 0xec, 0xfb, 0x6f, 0xb7, 0xdf, 0x9b, 0xf7, 0x7a, 0x7a, 0xba, 0xdf, + 0x7b, 0xfd, 0xfa, 0xbd, 0xd7, 0xb0, 0xb8, 0xe1, 0x25, 0x9b, 0x9d, 0xb5, 0x19, 0x37, 0x6c, 0x5d, + 0x70, 0xa2, 0x8d, 0xb0, 0x1d, 0x85, 0x77, 0xd8, 0x8f, 0xb7, 0xbb, 0xcd, 0x0b, 0xdb, 0xef, 0xbc, + 0xd0, 0xde, 0xda, 0xb8, 0xe0, 0xb4, 0xbd, 0xf8, 0x82, 0xd3, 0x6e, 0xfb, 0x9e, 0xeb, 0x24, 0x5e, + 0x18, 0x5c, 0xd8, 0x7e, 0x87, 0xe3, 0xb7, 0x37, 0x9d, 0x77, 0x5c, 0xd8, 0x20, 0x01, 0x89, 0x9c, + 0x84, 0x34, 0x67, 0xda, 0x51, 0x98, 0x84, 0xe8, 0xdb, 0x35, 0xb5, 0x19, 0x49, 0x8d, 0xfd, 0xf8, + 0x88, 0xdb, 0x9c, 0xd9, 0x7e, 0xe7, 0x4c, 0x7b, 0x6b, 0x63, 0x86, 0x52, 0x9b, 0x31, 0xa8, 0xcd, + 0x48, 0x6a, 0x67, 0xde, 0x6e, 0xf4, 0x65, 0x23, 0xdc, 0x08, 0x2f, 0x30, 0xa2, 0x6b, 0x9d, 0x75, + 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0x38, 0xb3, 0x33, 0xf6, 0xd6, 0x8b, 0xf1, 0x8c, 0x17, 0xd2, 0xee, + 0x5d, 0x70, 0xc3, 0x88, 0x5c, 0xd8, 0xee, 0xe9, 0xd0, 0x99, 0xab, 0x1a, 0x87, 0xdc, 0x4b, 0x48, + 0x10, 0x7b, 0x61, 0x10, 0xbf, 0x9d, 0x76, 0x81, 0x44, 0xdb, 0x24, 0x32, 0x5f, 0xcf, 0x40, 0xc8, + 0xa3, 0xf4, 0x2e, 0x4d, 0xa9, 0xe5, 0xb8, 0x9b, 0x5e, 0x40, 0xa2, 0xae, 0x7e, 0xbc, 0x45, 0x12, + 0x27, 0xef, 0xa9, 0x0b, 0xfd, 0x9e, 0x8a, 0x3a, 0x41, 0xe2, 0xb5, 0x48, 0xcf, 0x03, 0xef, 0xde, + 0xeb, 0x81, 0xd8, 0xdd, 0x24, 0x2d, 0xa7, 0xe7, 0xb9, 0x77, 0xf6, 0x7b, 0xae, 0x93, 0x78, 0xfe, + 0x05, 0x2f, 0x48, 0xe2, 0x24, 0xca, 0x3e, 0x64, 0xff, 0x2d, 0x0b, 0xc6, 0x67, 0x6f, 0x37, 0x66, + 0x3b, 0xc9, 0xe6, 0x5c, 0x18, 0xac, 0x7b, 0x1b, 0xe8, 0x05, 0x18, 0x75, 0xfd, 0x4e, 0x9c, 0x90, + 0xe8, 0x86, 0xd3, 0x22, 0x53, 0xd6, 0x79, 0xeb, 0xb9, 0x5a, 0xfd, 0xc4, 0xaf, 0xed, 0x4c, 0xbf, + 0xe9, 0xfe, 0xce, 0xf4, 0xe8, 0x9c, 0x06, 0x61, 0x13, 0x0f, 0x7d, 0x33, 0x8c, 0x44, 0xa1, 0x4f, + 0x66, 0xf1, 0x8d, 0xa9, 0x12, 0x7b, 0xe4, 0x98, 0x78, 0x64, 0x04, 0xf3, 0x66, 0x2c, 0xe1, 0x14, + 0xb5, 0x1d, 0x85, 0xeb, 0x9e, 0x4f, 0xa6, 0xca, 0x69, 0xd4, 0x15, 0xde, 0x8c, 0x25, 0xdc, 0xfe, + 0xb1, 0x12, 0x1c, 0x9b, 0x6d, 0xb7, 0xaf, 0x12, 0xc7, 0x4f, 0x36, 0x1b, 0x89, 0x93, 0x74, 0x62, + 0x14, 0xc2, 0x70, 0xcc, 0x7e, 0x89, 0xbe, 0xdd, 0x16, 0x4f, 0x0f, 0x73, 0xf8, 0x83, 0x9d, 0xe9, + 0x4b, 0xbb, 0xcd, 0xe8, 0x0d, 0x2f, 0x09, 0xdb, 0xf1, 0xdb, 0x49, 0xb0, 0xe1, 0x05, 0x84, 0x8d, + 0xcf, 0x26, 0xa3, 0x3e, 0x63, 0x32, 0x99, 0x0b, 0x9b, 0x04, 0x0b, 0x36, 0xb4, 0xbf, 0x2d, 0x12, + 0xc7, 0xce, 0x06, 0xc9, 0xbe, 0xda, 0x12, 0x6f, 0xc6, 0x12, 0x8e, 0x22, 0x40, 0xbe, 0x13, 0x27, + 0xab, 0x91, 0x13, 0xc4, 0x1e, 0x9d, 0xda, 0xab, 0x5e, 0x8b, 0xbf, 0xe5, 0xe8, 0xc5, 0xff, 0x6f, + 0x86, 0x7f, 0xa0, 0x19, 0xf3, 0x03, 0xe9, 0xf5, 0x40, 0xe7, 0xcf, 0xcc, 0xf6, 0x3b, 0x66, 0xe8, + 0x13, 0xf5, 0x27, 0xee, 0xef, 0x4c, 0xa3, 0xc5, 0x1e, 0x4a, 0x38, 0x87, 0xba, 0xfd, 0xbb, 0x25, + 0x80, 0xd9, 0x76, 0x7b, 0x25, 0x0a, 0xef, 0x10, 0x37, 0x41, 0x1f, 0x85, 0x2a, 0x25, 0xd5, 0x74, + 0x12, 0x87, 0x0d, 0xd0, 0xe8, 0xc5, 0x6f, 0x19, 0x8c, 0xf1, 0xf2, 0x1a, 0x7d, 0x7e, 0x89, 0x24, + 0x4e, 0x1d, 0x89, 0x17, 0x04, 0xdd, 0x86, 0x15, 0x55, 0x14, 0xc0, 0x50, 0xdc, 0x26, 0x2e, 0x1b, + 0x8c, 0xd1, 0x8b, 0x8b, 0x33, 0x07, 0x59, 0xf1, 0x33, 0xba, 0xe7, 0x8d, 0x36, 0x71, 0xeb, 0x63, + 0x82, 0xf3, 0x10, 0xfd, 0x87, 0x19, 0x1f, 0xb4, 0xad, 0x3e, 0x38, 0x1f, 0xc8, 0x1b, 0x85, 0x71, + 0x64, 0x54, 0xeb, 0x13, 0xe9, 0x09, 0x24, 0xbf, 0xbb, 0xfd, 0x87, 0x16, 0x4c, 0x68, 0xe4, 0x45, + 0x2f, 0x4e, 0xd0, 0x87, 0x7a, 0x06, 0x77, 0x66, 0xb0, 0xc1, 0xa5, 0x4f, 0xb3, 0xa1, 0x3d, 0x2e, + 0x98, 0x55, 0x65, 0x8b, 0x31, 0xb0, 0x2d, 0xa8, 0x78, 0x09, 0x69, 0xc5, 0x53, 0xa5, 0xf3, 0xe5, + 0xe7, 0x46, 0x2f, 0x5e, 0x2d, 0xea, 0x3d, 0xeb, 0xe3, 0x82, 0x69, 0x65, 0x81, 0x92, 0xc7, 0x9c, + 0x8b, 0xfd, 0x1b, 0x13, 0xe6, 0xfb, 0xd1, 0x01, 0x47, 0xef, 0x80, 0xd1, 0x38, 0xec, 0x44, 0x2e, + 0xc1, 0xa4, 0x1d, 0xd2, 0x05, 0x56, 0xa6, 0xd3, 0x9d, 0x2e, 0xfc, 0x86, 0x6e, 0xc6, 0x26, 0x0e, + 0xfa, 0xa2, 0x05, 0x63, 0x4d, 0x12, 0x27, 0x5e, 0xc0, 0xf8, 0xcb, 0xce, 0xaf, 0x1e, 0xb8, 0xf3, + 0xb2, 0x71, 0x5e, 0x13, 0xaf, 0x9f, 0x14, 0x2f, 0x32, 0x66, 0x34, 0xc6, 0x38, 0xc5, 0x9f, 0x0a, + 0xb0, 0x26, 0x89, 0xdd, 0xc8, 0x6b, 0xd3, 0xff, 0x42, 0xc4, 0x28, 0x01, 0x36, 0xaf, 0x41, 0xd8, + 0xc4, 0x43, 0x01, 0x54, 0xa8, 0x80, 0x8a, 0xa7, 0x86, 0x58, 0xff, 0x17, 0x0e, 0xd6, 0x7f, 0x31, + 0xa8, 0x54, 0xf6, 0xe9, 0xd1, 0xa7, 0xff, 0x62, 0xcc, 0xd9, 0xa0, 0x7f, 0x6e, 0xc1, 0x94, 0x10, + 0xa0, 0x98, 0xf0, 0x01, 0xbd, 0xbd, 0xe9, 0x25, 0xc4, 0xf7, 0xe2, 0x64, 0xaa, 0xc2, 0xfa, 0xf0, + 0xa1, 0x83, 0xf5, 0x61, 0x2e, 0x4d, 0x1d, 0x93, 0x38, 0x89, 0x3c, 0x97, 0xe2, 0xd0, 0x69, 0x50, + 0x3f, 0x2f, 0xba, 0x35, 0x35, 0xd7, 0xa7, 0x17, 0xb8, 0x6f, 0xff, 0xd0, 0x0f, 0x5b, 0x70, 0x26, + 0x70, 0x5a, 0x24, 0x6e, 0x3b, 0x8c, 0x30, 0x03, 0xd7, 0x7d, 0xc7, 0xdd, 0x62, 0xdd, 0x1f, 0x66, + 0xdd, 0xbf, 0x30, 0xd8, 0xd2, 0xb8, 0x12, 0x85, 0x9d, 0xf6, 0x75, 0x2f, 0x68, 0xd6, 0x6d, 0xd1, + 0xa3, 0x33, 0x37, 0xfa, 0x92, 0xc6, 0xbb, 0xb0, 0x45, 0x3f, 0x6e, 0xc1, 0x64, 0x18, 0xb5, 0x37, + 0x9d, 0x80, 0x34, 0x25, 0x34, 0x9e, 0x1a, 0x61, 0xeb, 0xf4, 0xc3, 0x07, 0x1b, 0xcb, 0xe5, 0x2c, + 0xd9, 0xa5, 0x30, 0xf0, 0x92, 0x30, 0x6a, 0x90, 0x24, 0xf1, 0x82, 0x8d, 0xb8, 0x7e, 0xea, 0xfe, + 0xce, 0xf4, 0x64, 0x0f, 0x16, 0xee, 0xed, 0x0f, 0xfa, 0x2e, 0x18, 0x8d, 0xbb, 0x81, 0x7b, 0xdb, + 0x0b, 0x9a, 0xe1, 0xdd, 0x78, 0xaa, 0x5a, 0xc4, 0x5a, 0x6f, 0x28, 0x82, 0x62, 0xb5, 0x6a, 0x06, + 0xd8, 0xe4, 0x96, 0xff, 0xe1, 0xf4, 0xbc, 0xab, 0x15, 0xfd, 0xe1, 0xf4, 0x64, 0xda, 0x85, 0x2d, + 0xfa, 0x7e, 0x0b, 0xc6, 0x63, 0x6f, 0x23, 0x70, 0x92, 0x4e, 0x44, 0xae, 0x93, 0x6e, 0x3c, 0x05, + 0xac, 0x23, 0xd7, 0x0e, 0x38, 0x2a, 0x06, 0xc9, 0xfa, 0x29, 0xd1, 0xc7, 0x71, 0xb3, 0x35, 0xc6, + 0x69, 0xbe, 0x79, 0xab, 0x52, 0x4f, 0xeb, 0xd1, 0x47, 0xb8, 0x2a, 0xf5, 0x0a, 0xe8, 0xdb, 0x3f, + 0xf4, 0x57, 0xe0, 0x38, 0x6f, 0x52, 0x9f, 0x21, 0x9e, 0x1a, 0x63, 0x22, 0xfc, 0xe4, 0xfd, 0x9d, + 0xe9, 0xe3, 0x8d, 0x0c, 0x0c, 0xf7, 0x60, 0xa3, 0x57, 0x60, 0xba, 0x4d, 0xa2, 0x96, 0x97, 0x2c, + 0x07, 0x7e, 0x57, 0x2a, 0x06, 0x37, 0x6c, 0x93, 0xa6, 0xe8, 0x4e, 0x3c, 0x35, 0x7e, 0xde, 0x7a, + 0xae, 0x5a, 0x7f, 0xab, 0xe8, 0xe6, 0xf4, 0xca, 0xee, 0xe8, 0x78, 0x2f, 0x7a, 0xe8, 0x57, 0x2d, + 0x38, 0x63, 0xc8, 0xef, 0x06, 0x89, 0xb6, 0x3d, 0x97, 0xcc, 0xba, 0x6e, 0xd8, 0x09, 0x92, 0x78, + 0x6a, 0x82, 0x8d, 0xf9, 0xda, 0x61, 0x68, 0x93, 0x34, 0x2b, 0x3d, 0x89, 0xfb, 0xa2, 0xc4, 0x78, + 0x97, 0x9e, 0xda, 0xbf, 0x5e, 0x82, 0xe3, 0x59, 0xdb, 0x02, 0xfd, 0x3d, 0x0b, 0x8e, 0xdd, 0xb9, + 0x9b, 0xac, 0x86, 0x5b, 0x24, 0x88, 0xeb, 0x5d, 0xaa, 0x01, 0x98, 0x56, 0x1d, 0xbd, 0xe8, 0x16, + 0x6b, 0xc5, 0xcc, 0x5c, 0x4b, 0x73, 0xb9, 0x14, 0x24, 0x51, 0xb7, 0xfe, 0xa4, 0x78, 0xa7, 0x63, + 0xd7, 0x6e, 0xaf, 0x9a, 0x50, 0x9c, 0xed, 0xd4, 0x99, 0xcf, 0x5b, 0x70, 0x32, 0x8f, 0x04, 0x3a, + 0x0e, 0xe5, 0x2d, 0xd2, 0xe5, 0xb6, 0x36, 0xa6, 0x3f, 0xd1, 0xcb, 0x50, 0xd9, 0x76, 0xfc, 0x0e, + 0x11, 0x06, 0xe0, 0x95, 0x83, 0xbd, 0x88, 0xea, 0x19, 0xe6, 0x54, 0xbf, 0xad, 0xf4, 0xa2, 0x65, + 0xff, 0x66, 0x19, 0x46, 0x8d, 0x8f, 0x76, 0x04, 0x46, 0x6d, 0x98, 0x32, 0x6a, 0x97, 0x0a, 0x9b, + 0x6f, 0x7d, 0xad, 0xda, 0xbb, 0x19, 0xab, 0x76, 0xb9, 0x38, 0x96, 0xbb, 0x9a, 0xb5, 0x28, 0x81, + 0x5a, 0xd8, 0xa6, 0x9b, 0x40, 0x6a, 0x1d, 0x0d, 0x15, 0xf1, 0x09, 0x97, 0x25, 0xb9, 0xfa, 0xf8, + 0xfd, 0x9d, 0xe9, 0x9a, 0xfa, 0x8b, 0x35, 0x23, 0xfb, 0xf7, 0x2c, 0x38, 0x69, 0xf4, 0x71, 0x2e, + 0x0c, 0x9a, 0x6c, 0x0b, 0x83, 0xce, 0xc3, 0x50, 0xd2, 0x6d, 0xcb, 0x8d, 0xa6, 0x1a, 0xa9, 0xd5, + 0x6e, 0x9b, 0x60, 0x06, 0x79, 0xdc, 0xf7, 0x5f, 0x3f, 0x6c, 0xc1, 0x13, 0xf9, 0x02, 0x06, 0x3d, + 0x0b, 0xc3, 0xdc, 0xcb, 0x20, 0xde, 0x4e, 0x7f, 0x12, 0xd6, 0x8a, 0x05, 0x14, 0x5d, 0x80, 0x9a, + 0xd2, 0x8e, 0xe2, 0x1d, 0x27, 0x05, 0x6a, 0x4d, 0xab, 0x54, 0x8d, 0x43, 0x07, 0x8d, 0xfe, 0x11, + 0xc6, 0xad, 0x1a, 0x34, 0xb6, 0x2d, 0x67, 0x10, 0xfb, 0x77, 0x2c, 0xf8, 0xa6, 0x41, 0xc4, 0xde, + 0xe1, 0xf5, 0xb1, 0x01, 0xa7, 0x9a, 0x64, 0xdd, 0xe9, 0xf8, 0x49, 0x9a, 0xa3, 0xe8, 0xf4, 0xd3, + 0xe2, 0xe1, 0x53, 0xf3, 0x79, 0x48, 0x38, 0xff, 0x59, 0xfb, 0x3f, 0x5a, 0xcc, 0x21, 0x20, 0x5f, + 0xeb, 0x08, 0x36, 0x65, 0x41, 0x7a, 0x53, 0xb6, 0x50, 0xd8, 0x32, 0xed, 0xb3, 0x2b, 0xfb, 0x41, + 0x0b, 0xce, 0x18, 0x58, 0x4b, 0x4e, 0xe2, 0x6e, 0x5e, 0xba, 0xd7, 0x8e, 0x48, 0x1c, 0xd3, 0x29, + 0xf5, 0xb4, 0x21, 0x8e, 0xeb, 0xa3, 0x82, 0x42, 0xf9, 0x3a, 0xe9, 0x72, 0xd9, 0xfc, 0x3c, 0x54, + 0xf9, 0x9a, 0x0b, 0x23, 0xf1, 0x91, 0xd4, 0xbb, 0x2d, 0x8b, 0x76, 0xac, 0x30, 0x90, 0x0d, 0xc3, + 0x4c, 0xe6, 0x52, 0x19, 0x44, 0xcd, 0x04, 0xa0, 0xdf, 0xfd, 0x16, 0x6b, 0xc1, 0x02, 0x62, 0xc7, + 0xa9, 0xee, 0xac, 0x44, 0x84, 0xcd, 0x87, 0xe6, 0x65, 0x8f, 0xf8, 0xcd, 0x98, 0x6e, 0x18, 0x9d, + 0x20, 0x08, 0x13, 0xb1, 0xf7, 0x33, 0x36, 0x8c, 0xb3, 0xba, 0x19, 0x9b, 0x38, 0x94, 0xa9, 0xef, + 0xac, 0x11, 0x9f, 0x8f, 0xa8, 0x60, 0xba, 0xc8, 0x5a, 0xb0, 0x80, 0xd8, 0xf7, 0x4b, 0x6c, 0x6b, + 0xaa, 0x24, 0x1a, 0x39, 0x0a, 0xbf, 0x46, 0x94, 0x52, 0x01, 0x2b, 0xc5, 0xc9, 0x63, 0xd2, 0xdf, + 0xb7, 0xf1, 0x6a, 0x46, 0x0b, 0xe0, 0x42, 0xb9, 0xee, 0xee, 0xdf, 0xf8, 0x72, 0x19, 0xa6, 0xd3, + 0x0f, 0xf4, 0x28, 0x11, 0xba, 0x99, 0x36, 0x18, 0x65, 0xbd, 0x81, 0x06, 0x3e, 0x36, 0xf1, 0xfa, + 0xc8, 0xe1, 0xd2, 0x61, 0xca, 0x61, 0x53, 0x4d, 0x94, 0xf7, 0x50, 0x13, 0x73, 0x6a, 0xd4, 0x87, + 0x18, 0xe6, 0xdb, 0x7a, 0x5c, 0x88, 0xa7, 0x57, 0xa2, 0x70, 0x83, 0xad, 0xb9, 0x6d, 0x42, 0x37, + 0x53, 0x39, 0x6e, 0xc1, 0xf3, 0x30, 0x14, 0x27, 0xa4, 0x3d, 0x55, 0x49, 0xcb, 0xe0, 0x46, 0x42, + 0xda, 0x98, 0x41, 0xd0, 0x77, 0xc0, 0xb1, 0xc4, 0x89, 0x36, 0x48, 0x12, 0x91, 0x6d, 0x8f, 0xb9, + 0x95, 0xd9, 0xce, 0xb8, 0x56, 0x3f, 0x41, 0x4d, 0xb2, 0x55, 0x06, 0xc2, 0x12, 0x84, 0xb3, 0xb8, + 0xf6, 0x7f, 0x29, 0xc1, 0x93, 0xe9, 0xef, 0xa3, 0xb5, 0xe6, 0x77, 0xa6, 0xb4, 0xe6, 0xdb, 0x4c, + 0xad, 0xf9, 0x60, 0x67, 0xfa, 0xa9, 0x3e, 0x8f, 0x7d, 0xc3, 0x28, 0x55, 0x74, 0x25, 0xf3, 0x85, + 0x2e, 0xf4, 0x7c, 0xa1, 0xa7, 0xfb, 0xbc, 0x63, 0xc6, 0xda, 0x79, 0x16, 0x86, 0x23, 0xe2, 0xc4, + 0x61, 0x20, 0xbe, 0x93, 0x5a, 0x0c, 0x98, 0xb5, 0x62, 0x01, 0xb5, 0x7f, 0xbb, 0x96, 0x1d, 0xec, + 0x2b, 0xdc, 0x55, 0x1e, 0x46, 0xc8, 0x83, 0x21, 0xb6, 0xff, 0xe3, 0x62, 0xe7, 0xfa, 0xc1, 0x96, + 0x28, 0x55, 0x31, 0x8a, 0x74, 0xbd, 0x4a, 0xbf, 0x1a, 0x6d, 0xc2, 0x8c, 0x05, 0xba, 0x07, 0x55, + 0x57, 0xee, 0xb4, 0x4a, 0x45, 0x78, 0x3b, 0xc5, 0x3e, 0x4b, 0x73, 0x1c, 0xa3, 0xba, 0x40, 0x6d, + 0xcf, 0x14, 0x37, 0x44, 0xa0, 0xbc, 0xe1, 0x25, 0xe2, 0xb3, 0x1e, 0x70, 0xe3, 0x7d, 0xc5, 0x33, + 0x5e, 0x71, 0x84, 0x2a, 0xa8, 0x2b, 0x5e, 0x82, 0x29, 0x7d, 0xf4, 0x19, 0x0b, 0x46, 0x63, 0xb7, + 0xb5, 0x12, 0x85, 0xdb, 0x5e, 0x93, 0x44, 0xc2, 0x00, 0x3d, 0xa0, 0xd8, 0x6b, 0xcc, 0x2d, 0x49, + 0x82, 0x9a, 0x2f, 0x77, 0x84, 0x68, 0x08, 0x36, 0xf9, 0xd2, 0x8d, 0xd9, 0x93, 0xe2, 0xdd, 0xe7, + 0x89, 0xcb, 0x56, 0x9c, 0xdc, 0x50, 0xb3, 0x99, 0x72, 0x60, 0x83, 0x7c, 0xbe, 0xe3, 0x6e, 0xd1, + 0xf5, 0xa6, 0x3b, 0xf4, 0xd4, 0xfd, 0x9d, 0xe9, 0x27, 0xe7, 0xf2, 0x79, 0xe2, 0x7e, 0x9d, 0x61, + 0x03, 0xd6, 0xee, 0xf8, 0x3e, 0x26, 0xaf, 0x74, 0x08, 0xf3, 0xad, 0x15, 0x30, 0x60, 0x2b, 0x9a, + 0x60, 0x66, 0xc0, 0x0c, 0x08, 0x36, 0xf9, 0xa2, 0x57, 0x60, 0xb8, 0xe5, 0x24, 0x91, 0x77, 0x4f, + 0x38, 0xd4, 0x0e, 0xb8, 0x45, 0x5a, 0x62, 0xb4, 0x34, 0x73, 0x66, 0x05, 0xf0, 0x46, 0x2c, 0x18, + 0xa1, 0x16, 0x54, 0x5a, 0x24, 0xda, 0x20, 0x53, 0xd5, 0x22, 0x4e, 0x1a, 0x96, 0x28, 0x29, 0xcd, + 0xb0, 0x46, 0x2d, 0x2f, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x32, 0x54, 0x63, 0xe2, 0x13, 0x97, 0xda, + 0x4e, 0x35, 0xc6, 0xf1, 0x9d, 0x03, 0xda, 0x91, 0xd4, 0x68, 0x69, 0x88, 0x47, 0xf9, 0x02, 0x93, + 0xff, 0xb0, 0x22, 0x49, 0x07, 0xb0, 0xed, 0x77, 0x36, 0xbc, 0x60, 0x0a, 0x8a, 0x18, 0xc0, 0x15, + 0x46, 0x2b, 0x33, 0x80, 0xbc, 0x11, 0x0b, 0x46, 0xf6, 0x7f, 0xb6, 0x00, 0xa5, 0x85, 0xda, 0x11, + 0x18, 0xcc, 0xaf, 0xa4, 0x0d, 0xe6, 0xc5, 0x22, 0x2d, 0x9a, 0x3e, 0x36, 0xf3, 0xcf, 0xd5, 0x20, + 0xa3, 0x0e, 0x6e, 0x90, 0x38, 0x21, 0xcd, 0x37, 0x44, 0xf8, 0x1b, 0x22, 0xfc, 0x0d, 0x11, 0xae, + 0x44, 0xf8, 0x5a, 0x46, 0x84, 0xbf, 0xc7, 0x58, 0xf5, 0x3a, 0xf4, 0xe1, 0x23, 0x2a, 0x36, 0xc2, + 0xec, 0x81, 0x81, 0x40, 0x25, 0xc1, 0xb5, 0xc6, 0xf2, 0x8d, 0x5c, 0x99, 0xfd, 0x91, 0xb4, 0xcc, + 0x3e, 0x28, 0x8b, 0xbf, 0x0c, 0x52, 0xfa, 0x57, 0x2d, 0x78, 0x6b, 0x5a, 0x7a, 0xc9, 0x99, 0xb3, + 0xb0, 0x11, 0x84, 0x11, 0x99, 0xf7, 0xd6, 0xd7, 0x49, 0x44, 0x02, 0x97, 0xc4, 0xca, 0xf1, 0x63, + 0xf5, 0x73, 0xfc, 0xa0, 0x77, 0xc1, 0xd8, 0x9d, 0x38, 0x0c, 0x56, 0x42, 0x2f, 0x10, 0x22, 0x88, + 0xee, 0x38, 0x8e, 0xdf, 0xdf, 0x99, 0x1e, 0xa3, 0x23, 0x2a, 0xdb, 0x71, 0x0a, 0x0b, 0xcd, 0xc1, + 0xe4, 0x9d, 0x57, 0x56, 0x9c, 0xc4, 0x70, 0x35, 0x48, 0xa7, 0x00, 0x3b, 0xd9, 0xba, 0xf6, 0xde, + 0x0c, 0x10, 0xf7, 0xe2, 0xdb, 0x7f, 0xb3, 0x04, 0xa7, 0x33, 0x2f, 0x12, 0xfa, 0x7e, 0xd8, 0x49, + 0xe8, 0x9e, 0x08, 0x7d, 0xc5, 0x82, 0xe3, 0xad, 0xb4, 0x37, 0x23, 0x16, 0xbe, 0xf0, 0xf7, 0x15, + 0xa6, 0x23, 0x32, 0xee, 0x92, 0xfa, 0x94, 0x18, 0xa1, 0xe3, 0x19, 0x40, 0x8c, 0x7b, 0xfa, 0x82, + 0x5e, 0x86, 0x5a, 0xcb, 0xb9, 0x77, 0xb3, 0xdd, 0x74, 0x12, 0xb9, 0x57, 0xed, 0xef, 0x62, 0xe8, + 0x24, 0x9e, 0x3f, 0xc3, 0x83, 0x6a, 0x66, 0x16, 0x82, 0x64, 0x39, 0x6a, 0x24, 0x91, 0x17, 0x6c, + 0x70, 0x0f, 0xe8, 0x92, 0x24, 0x83, 0x35, 0x45, 0xfb, 0xcb, 0x56, 0x56, 0x49, 0xa9, 0xd1, 0x89, + 0x9c, 0x84, 0x6c, 0x74, 0xd1, 0xc7, 0xa0, 0x42, 0xf7, 0x8d, 0x72, 0x54, 0x6e, 0x17, 0xa9, 0x39, + 0x8d, 0x2f, 0xa1, 0x95, 0x28, 0xfd, 0x17, 0x63, 0xce, 0xd4, 0xfe, 0x4a, 0x2d, 0x6b, 0x2c, 0xb0, + 0x90, 0x80, 0x8b, 0x00, 0x1b, 0xe1, 0x2a, 0x69, 0xb5, 0x7d, 0x3a, 0x2c, 0x16, 0x3b, 0xfd, 0x51, + 0x7e, 0x94, 0x2b, 0x0a, 0x82, 0x0d, 0x2c, 0xf4, 0x39, 0x0b, 0x60, 0x43, 0xce, 0x79, 0x69, 0x08, + 0xdc, 0x2c, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0x7d, 0xaf, 0x05, + 0xd5, 0x44, 0x76, 0x9f, 0xab, 0xc6, 0xd5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, 0x6a, 0x48, + 0x14, 0x5f, 0xf4, 0x7d, 0x16, 0x40, 0xdc, 0x0d, 0xdc, 0x95, 0xd0, 0xf7, 0xdc, 0xae, 0xd0, 0x98, + 0xb7, 0x0a, 0xf5, 0xf5, 0x28, 0xea, 0xf5, 0x09, 0x3a, 0x1a, 0xfa, 0x3f, 0x36, 0x38, 0xa3, 0x8f, + 0x43, 0x35, 0x16, 0xd3, 0x4d, 0xe8, 0xc8, 0xd5, 0x62, 0x3d, 0x4e, 0x9c, 0xb6, 0x10, 0xaf, 0xe2, + 0x1f, 0x56, 0x3c, 0xd1, 0x8f, 0x58, 0x70, 0xac, 0x9d, 0xf6, 0x21, 0x0a, 0x75, 0x58, 0x9c, 0x0c, + 0xc8, 0xf8, 0x28, 0xb9, 0xb7, 0x25, 0xd3, 0x88, 0xb3, 0xbd, 0xa0, 0x12, 0x50, 0xcf, 0xe0, 0xe5, + 0x36, 0xf7, 0x67, 0x8e, 0x68, 0x09, 0x78, 0x25, 0x0b, 0xc4, 0xbd, 0xf8, 0x68, 0x05, 0x4e, 0xd2, + 0xde, 0x75, 0xb9, 0xf9, 0x29, 0xd5, 0x4b, 0xcc, 0x94, 0x61, 0xb5, 0x7e, 0x56, 0xcc, 0x10, 0x76, + 0x10, 0x92, 0xc5, 0xc1, 0xb9, 0x4f, 0xa2, 0xdf, 0xb4, 0xe0, 0xac, 0xc7, 0xd4, 0x80, 0xe9, 0xcd, + 0xd7, 0x1a, 0x41, 0x1c, 0xd9, 0x93, 0x42, 0x65, 0x45, 0x3f, 0xf5, 0x53, 0xff, 0x26, 0xf1, 0x06, + 0x67, 0x17, 0x76, 0xe9, 0x12, 0xde, 0xb5, 0xc3, 0xe8, 0x5b, 0x61, 0x5c, 0xae, 0x8b, 0x15, 0x2a, + 0x82, 0x99, 0xa2, 0xad, 0xd5, 0x27, 0xef, 0xef, 0x4c, 0x8f, 0xaf, 0x9a, 0x00, 0x9c, 0xc6, 0xb3, + 0xff, 0x7c, 0x28, 0x75, 0x84, 0xa4, 0x1c, 0x9c, 0x4c, 0xdc, 0xb8, 0xd2, 0xff, 0x23, 0xa5, 0x67, + 0xa1, 0xe2, 0x46, 0x79, 0x97, 0xb4, 0xb8, 0x51, 0x4d, 0x31, 0x36, 0x98, 0x53, 0xa3, 0x74, 0xd2, + 0xc9, 0xba, 0x51, 0x85, 0x04, 0x7c, 0xb9, 0xc8, 0x2e, 0xf5, 0x1e, 0xf8, 0x9d, 0x16, 0x5d, 0x9b, + 0xec, 0x01, 0xe1, 0xde, 0x2e, 0xa1, 0xef, 0x86, 0x5a, 0xa4, 0x62, 0x64, 0xca, 0x45, 0x6c, 0xd5, + 0xe4, 0xb4, 0x11, 0xdd, 0x51, 0xa7, 0x43, 0x3a, 0x1a, 0x46, 0x73, 0x44, 0xef, 0x81, 0x09, 0xf5, + 0x67, 0x8e, 0x1d, 0x0b, 0x51, 0xa1, 0x58, 0xae, 0x3f, 0x21, 0x9e, 0x9a, 0xc0, 0x29, 0x28, 0xce, + 0x60, 0xa3, 0x08, 0x86, 0x79, 0xdc, 0xa6, 0x10, 0x63, 0x07, 0xdc, 0xee, 0x98, 0xc1, 0x9f, 0xda, + 0x47, 0xc8, 0x5b, 0xb1, 0xe0, 0x64, 0x7f, 0xb6, 0x94, 0x3a, 0xe9, 0x33, 0xe4, 0xdd, 0x00, 0xa7, + 0x98, 0x5f, 0xb4, 0x60, 0x34, 0x0a, 0x7d, 0xdf, 0x0b, 0x36, 0xa8, 0x6c, 0x16, 0x06, 0xc6, 0x07, + 0x0f, 0x45, 0xc7, 0x0b, 0x21, 0xcc, 0x76, 0x03, 0x58, 0xf3, 0xc4, 0x66, 0x07, 0xd0, 0x4b, 0x30, + 0xde, 0x24, 0x3e, 0xa1, 0xcf, 0x2e, 0x47, 0x74, 0x1f, 0xc7, 0xbd, 0xe6, 0x2a, 0x4e, 0x66, 0xde, + 0x04, 0xe2, 0x34, 0xae, 0xfd, 0x87, 0x16, 0x4c, 0xf5, 0x53, 0x40, 0x88, 0xc0, 0x53, 0x52, 0xba, + 0xaa, 0xaf, 0xb8, 0x1c, 0x48, 0x7a, 0xc2, 0x86, 0x78, 0x46, 0xf0, 0x79, 0x6a, 0xa5, 0x3f, 0x2a, + 0xde, 0x8d, 0x0e, 0xfa, 0x00, 0x1c, 0x37, 0x06, 0x25, 0x56, 0xa3, 0x5a, 0xab, 0xcf, 0x50, 0x8b, + 0x6f, 0x36, 0x03, 0x7b, 0xb0, 0x33, 0xfd, 0x44, 0xb6, 0x4d, 0x68, 0xc8, 0x1e, 0x3a, 0xf6, 0x4f, + 0xf4, 0x7c, 0x6a, 0x65, 0xdc, 0xbc, 0x6e, 0xf5, 0xb8, 0x4f, 0xde, 0x77, 0x18, 0x06, 0x05, 0x73, + 0xb4, 0xa8, 0xa0, 0x94, 0xfe, 0x38, 0x8f, 0x30, 0x88, 0xc1, 0xfe, 0x8d, 0x21, 0xd8, 0xa5, 0x67, + 0x03, 0xec, 0x56, 0xf6, 0x7d, 0xaa, 0xfc, 0x05, 0x4b, 0x1d, 0x1f, 0x72, 0xa1, 0xd5, 0x3c, 0xac, + 0xb1, 0xe7, 0x1b, 0xc6, 0x98, 0x07, 0xd2, 0x28, 0x91, 0x90, 0x3e, 0xa8, 0x44, 0x5f, 0xb5, 0xd2, + 0x07, 0xa0, 0x3c, 0x78, 0xd4, 0x3b, 0xb4, 0x3e, 0x19, 0xa7, 0xaa, 0xbc, 0x63, 0xfa, 0x2c, 0xae, + 0xdf, 0x79, 0xeb, 0x0c, 0xc0, 0xba, 0x17, 0x38, 0xbe, 0xf7, 0x2a, 0xdd, 0x0e, 0x56, 0x98, 0x45, + 0xc3, 0x4c, 0xc4, 0xcb, 0xaa, 0x15, 0x1b, 0x18, 0x67, 0xfe, 0x7f, 0x18, 0x35, 0xde, 0x3c, 0x27, + 0xfe, 0xe7, 0xa4, 0x19, 0xff, 0x53, 0x33, 0xc2, 0x76, 0xce, 0xbc, 0x07, 0x8e, 0x67, 0x3b, 0xb8, + 0x9f, 0xe7, 0xed, 0xff, 0x3d, 0x92, 0x3d, 0x91, 0x5c, 0x25, 0x51, 0x8b, 0x76, 0xed, 0x0d, 0x4f, + 0xde, 0x1b, 0x9e, 0xbc, 0x37, 0x3c, 0x79, 0xe6, 0x61, 0x8c, 0xf0, 0x52, 0x8d, 0x1c, 0x91, 0x97, + 0x2a, 0xe5, 0x77, 0xab, 0x16, 0xee, 0x77, 0xb3, 0x3f, 0xd3, 0x73, 0x54, 0xb1, 0x1a, 0x11, 0x82, + 0x42, 0xa8, 0x04, 0x61, 0x93, 0x48, 0xa3, 0xfe, 0x5a, 0x31, 0x16, 0xea, 0x8d, 0xb0, 0x69, 0x84, + 0xe5, 0xd3, 0x7f, 0x31, 0xe6, 0x7c, 0xec, 0xff, 0xd5, 0x63, 0xd8, 0xdc, 0x66, 0x7e, 0xa2, 0x6d, + 0x12, 0x24, 0xe8, 0x7a, 0xca, 0xca, 0xfb, 0xd6, 0xcc, 0xa9, 0xfb, 0x5b, 0xfb, 0x25, 0x60, 0xdd, + 0xa5, 0x14, 0x66, 0x18, 0x09, 0xc3, 0x20, 0xfc, 0x82, 0x05, 0x13, 0x4e, 0x8a, 0x53, 0x61, 0x19, + 0x35, 0xe6, 0x89, 0x89, 0x32, 0xa8, 0x33, 0xb6, 0x62, 0x86, 0xb7, 0xfd, 0xe9, 0x61, 0x48, 0x6d, + 0x1c, 0xf8, 0x84, 0xff, 0x66, 0x18, 0x89, 0x48, 0x3b, 0xbc, 0x89, 0x17, 0xc5, 0x4b, 0xeb, 0xb4, + 0x2e, 0xde, 0x8c, 0x25, 0x9c, 0x2a, 0xfb, 0xb6, 0x93, 0x6c, 0x0a, 0x2d, 0xae, 0x94, 0xfd, 0x8a, + 0x93, 0x6c, 0x62, 0x06, 0xa1, 0x36, 0x7f, 0x92, 0x0a, 0x7a, 0x10, 0x87, 0xfb, 0xaa, 0x8b, 0xe9, + 0x90, 0x08, 0x9c, 0xc1, 0x46, 0xaf, 0xc0, 0xd0, 0x26, 0xf1, 0x5b, 0x62, 0xce, 0x37, 0x8a, 0x1b, + 0x26, 0xf6, 0xae, 0x57, 0x89, 0xdf, 0xe2, 0x2a, 0x80, 0xfe, 0xc2, 0x8c, 0x15, 0x5d, 0xf0, 0xb5, + 0xad, 0x4e, 0x9c, 0x84, 0x2d, 0xef, 0x55, 0xe9, 0xd3, 0x7e, 0x5f, 0xc1, 0x8c, 0xaf, 0x4b, 0xfa, + 0xdc, 0x79, 0xa8, 0xfe, 0x62, 0xcd, 0x99, 0xf5, 0xa3, 0xe9, 0x45, 0x6c, 0xad, 0x74, 0x85, 0x6b, + 0xba, 0xe8, 0x7e, 0xcc, 0x4b, 0xfa, 0xbc, 0x1f, 0xea, 0x2f, 0xd6, 0x9c, 0x51, 0x57, 0x09, 0x9e, + 0x51, 0xd6, 0x87, 0x9b, 0x05, 0xf7, 0x81, 0x0b, 0x9d, 0x5c, 0x01, 0xf4, 0x0c, 0x54, 0xdc, 0x4d, + 0x27, 0x4a, 0xa6, 0xc6, 0xd8, 0xa4, 0x51, 0xcb, 0x77, 0x8e, 0x36, 0x62, 0x0e, 0x43, 0x4f, 0x43, + 0x39, 0x22, 0xeb, 0x2c, 0x48, 0xdd, 0x08, 0x8f, 0xc3, 0x64, 0x1d, 0xd3, 0x76, 0x65, 0x90, 0x4e, + 0xf4, 0x8d, 0x9b, 0xfc, 0xb1, 0x52, 0xda, 0xa2, 0x4d, 0x8f, 0x0c, 0x5f, 0x0f, 0x6e, 0x27, 0x8a, + 0xa5, 0x2b, 0xd4, 0x58, 0x0f, 0xac, 0x19, 0x4b, 0x38, 0xfa, 0xa4, 0x05, 0x23, 0x77, 0xe2, 0x30, + 0x08, 0xd4, 0xc2, 0xbe, 0x55, 0xf0, 0x60, 0x5d, 0xe3, 0xd4, 0x75, 0x1f, 0x44, 0x03, 0x96, 0x7c, + 0x69, 0x77, 0xc9, 0x3d, 0xd7, 0xef, 0x34, 0x7b, 0x62, 0xa2, 0x2e, 0xf1, 0x66, 0x2c, 0xe1, 0x14, + 0xd5, 0x0b, 0x38, 0xea, 0x50, 0x1a, 0x75, 0x21, 0x10, 0xa8, 0x02, 0x6e, 0xff, 0x4c, 0x15, 0x4e, + 0xe5, 0x2e, 0x1f, 0x6a, 0x6b, 0x32, 0x6b, 0xee, 0xb2, 0xe7, 0x13, 0x19, 0x0d, 0xc8, 0x6c, 0xcd, + 0x5b, 0xaa, 0x15, 0x1b, 0x18, 0xe8, 0x7b, 0x00, 0xda, 0x4e, 0xe4, 0xb4, 0x88, 0x3a, 0xaa, 0x38, + 0xb0, 0x49, 0x47, 0xfb, 0xb1, 0x22, 0x69, 0x6a, 0x77, 0x8d, 0x6a, 0x8a, 0xb1, 0xc1, 0x12, 0xbd, + 0x00, 0xa3, 0x11, 0xf1, 0x89, 0x13, 0xb3, 0x2c, 0x88, 0x6c, 0xb2, 0x18, 0xd6, 0x20, 0x6c, 0xe2, + 0xa1, 0x67, 0x55, 0xe0, 0xe4, 0x50, 0x3a, 0xaa, 0x28, 0x1d, 0x3c, 0x89, 0xbe, 0x64, 0xc1, 0xc4, + 0xba, 0xe7, 0x13, 0xcd, 0x5d, 0xa4, 0x76, 0x2d, 0x1f, 0xfc, 0x25, 0x2f, 0x9b, 0x74, 0xb5, 0x0c, + 0x4d, 0x35, 0xc7, 0x38, 0xc3, 0x9e, 0x7e, 0xe6, 0x6d, 0x12, 0x31, 0xe1, 0x3b, 0x9c, 0xfe, 0xcc, + 0xb7, 0x78, 0x33, 0x96, 0x70, 0x34, 0x0b, 0xc7, 0xda, 0x4e, 0x1c, 0xcf, 0x45, 0xa4, 0x49, 0x82, + 0xc4, 0x73, 0x7c, 0x9e, 0x4b, 0x55, 0xd5, 0x59, 0x05, 0x2b, 0x69, 0x30, 0xce, 0xe2, 0xa3, 0xf7, + 0xc3, 0x93, 0xdc, 0x17, 0xb8, 0xe4, 0xc5, 0xb1, 0x17, 0x6c, 0xe8, 0x69, 0x20, 0x5c, 0xa2, 0xd3, + 0x82, 0xd4, 0x93, 0x0b, 0xf9, 0x68, 0xb8, 0xdf, 0xf3, 0xe8, 0x79, 0xa8, 0xc6, 0x5b, 0x5e, 0x7b, + 0x2e, 0x6a, 0xc6, 0xec, 0x1c, 0xb0, 0xaa, 0x1d, 0xf0, 0x0d, 0xd1, 0x8e, 0x15, 0x06, 0x72, 0x61, + 0x8c, 0x7f, 0x12, 0x1e, 0xf9, 0x29, 0x24, 0xe8, 0xdb, 0xfb, 0x5a, 0x30, 0x22, 0xd7, 0x7a, 0x06, + 0x3b, 0x77, 0x2f, 0xc9, 0x53, 0x49, 0x7e, 0x88, 0x76, 0xcb, 0x20, 0x83, 0x53, 0x44, 0xd3, 0x9b, + 0xd9, 0xd1, 0x01, 0x36, 0xb3, 0x2f, 0xc0, 0xe8, 0x56, 0x67, 0x8d, 0x88, 0x91, 0x17, 0x82, 0x4d, + 0xcd, 0xbe, 0xeb, 0x1a, 0x84, 0x4d, 0x3c, 0x16, 0x74, 0xdb, 0xf6, 0xc4, 0xbf, 0x78, 0x6a, 0xdc, + 0x08, 0xba, 0x5d, 0x59, 0x90, 0xcd, 0xd8, 0xc4, 0xa1, 0x5d, 0xa3, 0x63, 0xb1, 0x4a, 0x62, 0x96, + 0x53, 0x43, 0x87, 0x4b, 0x75, 0xad, 0x21, 0x01, 0x58, 0xe3, 0xa0, 0x15, 0x38, 0x49, 0xff, 0x34, + 0x58, 0xae, 0xf9, 0x2d, 0xc7, 0xf7, 0x9a, 0x3c, 0x02, 0xf4, 0x58, 0xda, 0x93, 0xdd, 0xc8, 0xc1, + 0xc1, 0xb9, 0x4f, 0xda, 0x3f, 0x5a, 0x4a, 0x5b, 0x56, 0xa6, 0x08, 0x43, 0x31, 0x15, 0x54, 0xc9, + 0x2d, 0x27, 0x92, 0x96, 0xde, 0x01, 0x13, 0xe2, 0x04, 0xdd, 0x5b, 0x4e, 0x64, 0x8a, 0x3c, 0xc6, + 0x00, 0x4b, 0x4e, 0xe8, 0x0e, 0x0c, 0x25, 0xbe, 0x53, 0x50, 0xba, 0xad, 0xc1, 0x51, 0xbb, 0xff, + 0x16, 0x67, 0x63, 0xcc, 0x78, 0xa0, 0xb3, 0x74, 0xdb, 0xba, 0x26, 0xcf, 0x54, 0xc5, 0x4e, 0x73, + 0x2d, 0xc6, 0xac, 0xd5, 0xfe, 0x6b, 0xe3, 0x39, 0x5a, 0x47, 0x19, 0x02, 0xe8, 0x22, 0x00, 0x9d, + 0x34, 0x2b, 0x11, 0x59, 0xf7, 0xee, 0x09, 0x43, 0x4c, 0x49, 0xb6, 0x1b, 0x0a, 0x82, 0x0d, 0x2c, + 0xf9, 0x4c, 0xa3, 0xb3, 0x4e, 0x9f, 0x29, 0xf5, 0x3e, 0xc3, 0x21, 0xd8, 0xc0, 0x42, 0xef, 0x82, + 0x61, 0xaf, 0xe5, 0x6c, 0xa8, 0x78, 0xf0, 0xb3, 0x54, 0xa4, 0x2d, 0xb0, 0x96, 0x07, 0x3b, 0xd3, + 0x13, 0xaa, 0x43, 0xac, 0x09, 0x0b, 0x5c, 0xf4, 0x13, 0x16, 0x8c, 0xb9, 0x61, 0xab, 0x15, 0x06, + 0xdc, 0x6f, 0x20, 0x9c, 0x20, 0x77, 0x0e, 0xcb, 0x4c, 0x9a, 0x99, 0x33, 0x98, 0x71, 0x2f, 0x88, + 0xca, 0x0b, 0x36, 0x41, 0x38, 0xd5, 0x2b, 0x53, 0xf2, 0x55, 0xf6, 0x90, 0x7c, 0x3f, 0x6b, 0xc1, + 0x24, 0x7f, 0xd6, 0x70, 0x67, 0x88, 0xac, 0xd6, 0xf0, 0x90, 0x5f, 0xab, 0xc7, 0xc3, 0xa3, 0xdc, + 0xfa, 0x3d, 0x70, 0xdc, 0xdb, 0x49, 0x74, 0x05, 0x26, 0xd7, 0xc3, 0xc8, 0x25, 0xe6, 0x40, 0x08, + 0xb1, 0xad, 0x08, 0x5d, 0xce, 0x22, 0xe0, 0xde, 0x67, 0xd0, 0x2d, 0x78, 0xc2, 0x68, 0x34, 0xc7, + 0x81, 0x4b, 0xee, 0x73, 0x82, 0xda, 0x13, 0x97, 0x73, 0xb1, 0x70, 0x9f, 0xa7, 0xd3, 0x42, 0xb2, + 0x36, 0x80, 0x90, 0xfc, 0x08, 0x9c, 0x76, 0x7b, 0x47, 0x66, 0x3b, 0xee, 0xac, 0xc5, 0x5c, 0x8e, + 0x57, 0xeb, 0x6f, 0x16, 0x04, 0x4e, 0xcf, 0xf5, 0x43, 0xc4, 0xfd, 0x69, 0xa0, 0x8f, 0x41, 0x35, + 0x22, 0xec, 0xab, 0xc4, 0x22, 0xc5, 0xf3, 0x80, 0x6e, 0x1e, 0x6d, 0xc1, 0x73, 0xb2, 0x5a, 0x33, + 0x89, 0x86, 0x18, 0x2b, 0x8e, 0xe8, 0x2e, 0x8c, 0xb4, 0xe9, 0xfe, 0x50, 0xe4, 0x6a, 0x1e, 0x78, + 0xfb, 0xa7, 0x98, 0xb3, 0x43, 0x33, 0xa3, 0xb6, 0x06, 0x67, 0x82, 0x25, 0x37, 0x6a, 0xab, 0xb9, + 0x61, 0xab, 0x1d, 0x06, 0x24, 0x48, 0xa4, 0x12, 0x99, 0xe0, 0x27, 0x5b, 0xb2, 0x15, 0x1b, 0x18, + 0x3d, 0xba, 0x5c, 0xa3, 0x4d, 0x4d, 0xee, 0xa2, 0xcb, 0x0d, 0x6a, 0xfd, 0x9e, 0xa7, 0xca, 0x86, + 0xf9, 0x53, 0x6f, 0x7b, 0xc9, 0x66, 0xd8, 0x49, 0xa4, 0x7b, 0x40, 0x28, 0x2a, 0xa5, 0x6c, 0x16, + 0x73, 0x70, 0x70, 0xee, 0x93, 0x59, 0xcd, 0x7a, 0xec, 0xe1, 0x34, 0xeb, 0xf1, 0x01, 0x34, 0x6b, + 0x03, 0x4e, 0xb1, 0x1e, 0x08, 0x2b, 0x59, 0x7a, 0x6b, 0xe3, 0x29, 0xc4, 0x3a, 0xaf, 0xd2, 0x9c, + 0x16, 0xf3, 0x90, 0x70, 0xfe, 0xb3, 0x67, 0xbe, 0x13, 0x26, 0x7b, 0x84, 0xdc, 0xbe, 0x3c, 0xb1, + 0xf3, 0xf0, 0x44, 0xbe, 0x38, 0xd9, 0x97, 0x3f, 0xf6, 0x67, 0x32, 0x19, 0x08, 0xc6, 0x16, 0x6d, + 0x00, 0xdf, 0xbe, 0x03, 0x65, 0x12, 0x6c, 0x0b, 0xed, 0x7a, 0xf9, 0x60, 0xb3, 0xfa, 0x52, 0xb0, + 0xcd, 0xa5, 0x21, 0x73, 0x60, 0x5e, 0x0a, 0xb6, 0x31, 0xa5, 0x8d, 0x7e, 0xc8, 0x4a, 0x6d, 0x20, + 0xf8, 0x89, 0xc0, 0x87, 0x0f, 0x65, 0x4f, 0x3a, 0xf0, 0x9e, 0xc2, 0xfe, 0x57, 0x25, 0x38, 0xbf, + 0x17, 0x91, 0x01, 0x86, 0xef, 0x19, 0x18, 0x8e, 0x59, 0x4c, 0x91, 0x50, 0x57, 0xa3, 0x74, 0x15, + 0xf3, 0x28, 0xa3, 0x8f, 0x60, 0x01, 0x42, 0x3e, 0x94, 0x5b, 0x4e, 0x5b, 0x38, 0x8a, 0x17, 0x0e, + 0x9a, 0xc6, 0x49, 0xff, 0x3b, 0xfe, 0x92, 0xd3, 0xe6, 0x73, 0xde, 0x68, 0xc0, 0x94, 0x0d, 0x4a, + 0xa0, 0xe2, 0x44, 0x91, 0x23, 0x03, 0x58, 0xae, 0x17, 0xc3, 0x6f, 0x96, 0x92, 0xe4, 0xe7, 0xff, + 0xa9, 0x26, 0xcc, 0x99, 0xd9, 0x3f, 0x52, 0x4d, 0xe5, 0xfc, 0xb1, 0xa8, 0xa4, 0x18, 0x86, 0x85, + 0x7f, 0xd8, 0x2a, 0x3a, 0x7b, 0x96, 0x27, 0xd5, 0x33, 0x0f, 0x84, 0x28, 0x7a, 0x22, 0x58, 0xa1, + 0xcf, 0x5b, 0xac, 0xb4, 0x88, 0x4c, 0xa4, 0x14, 0xbb, 0xfa, 0xc3, 0xa9, 0x74, 0x62, 0x16, 0x2c, + 0x91, 0x8d, 0xd8, 0xe4, 0x2e, 0xca, 0x28, 0xb1, 0xdd, 0x4c, 0x6f, 0x19, 0x25, 0xb6, 0x3b, 0x91, + 0x70, 0x74, 0x2f, 0x27, 0xfa, 0xa8, 0x80, 0x8a, 0x13, 0x03, 0xc4, 0x1b, 0x7d, 0xd5, 0x82, 0x49, + 0x2f, 0x1b, 0x46, 0x22, 0xf6, 0xc0, 0xb7, 0x8b, 0x71, 0xe6, 0xf6, 0x46, 0xa9, 0x28, 0x43, 0xa7, + 0x07, 0x84, 0x7b, 0x3b, 0x83, 0x9a, 0x30, 0xe4, 0x05, 0xeb, 0xa1, 0x30, 0xef, 0xea, 0x07, 0xeb, + 0xd4, 0x42, 0xb0, 0x1e, 0xea, 0xd5, 0x4c, 0xff, 0x61, 0x46, 0x1d, 0x2d, 0xc2, 0x49, 0x99, 0xd9, + 0x75, 0xd5, 0x8b, 0x93, 0x30, 0xea, 0x2e, 0x7a, 0x2d, 0x2f, 0x61, 0xa6, 0x59, 0xb9, 0x3e, 0x45, + 0xd5, 0x1b, 0xce, 0x81, 0xe3, 0xdc, 0xa7, 0xd0, 0xab, 0x30, 0x22, 0x43, 0x37, 0xaa, 0x45, 0xf8, + 0x13, 0x7a, 0xe7, 0xbf, 0x9a, 0x4c, 0x0d, 0x11, 0xbb, 0x21, 0x19, 0xa2, 0xcf, 0x5a, 0x30, 0xc1, + 0x7f, 0x5f, 0xed, 0x36, 0x79, 0xa6, 0x69, 0xad, 0x08, 0xbf, 0x75, 0x23, 0x45, 0xb3, 0x8e, 0xee, + 0xef, 0x4c, 0x4f, 0xa4, 0xdb, 0x70, 0x86, 0xaf, 0xfd, 0xf7, 0xc7, 0xa0, 0x37, 0xd8, 0x25, 0x1d, + 0xd9, 0x62, 0x1d, 0x79, 0x64, 0xcb, 0x1d, 0x18, 0x8a, 0x75, 0x80, 0x47, 0x01, 0xcb, 0x4c, 0x70, + 0xd5, 0xe7, 0xef, 0xdd, 0xc0, 0xc5, 0x8c, 0x07, 0xea, 0xa8, 0x28, 0x98, 0x72, 0x41, 0x47, 0xfe, + 0x83, 0x04, 0xc2, 0xa0, 0x7b, 0x30, 0xb2, 0xc9, 0xa7, 0xa3, 0xd8, 0xeb, 0x2d, 0x1d, 0x74, 0x7c, + 0x53, 0x73, 0x5c, 0x4f, 0x3e, 0xd1, 0x80, 0x25, 0x3b, 0x16, 0x48, 0x69, 0x84, 0x7a, 0x71, 0x41, + 0x52, 0x5c, 0xd2, 0xec, 0xe0, 0x71, 0x5e, 0x1f, 0x85, 0xb1, 0x88, 0xb8, 0x61, 0xe0, 0x7a, 0x3e, + 0x69, 0xce, 0xca, 0x93, 0xc0, 0xfd, 0xa4, 0x43, 0x32, 0x6f, 0x12, 0x36, 0x68, 0xe0, 0x14, 0x45, + 0xb6, 0xce, 0x54, 0xfd, 0x04, 0xfa, 0x41, 0x88, 0x38, 0xf8, 0x58, 0x2c, 0xa8, 0x5a, 0x03, 0xa3, + 0xc9, 0xd7, 0x59, 0xba, 0x0d, 0x67, 0xf8, 0xa2, 0x0f, 0x00, 0x84, 0x6b, 0x3c, 0x5a, 0x72, 0x36, + 0x11, 0xa7, 0x20, 0xfb, 0x79, 0xd5, 0x09, 0x9e, 0x73, 0x2d, 0x29, 0x60, 0x83, 0x1a, 0xba, 0x0e, + 0xc0, 0x57, 0xce, 0x6a, 0xb7, 0x2d, 0x37, 0x84, 0x32, 0x9f, 0x15, 0x1a, 0x0a, 0xf2, 0x60, 0x67, + 0xba, 0xd7, 0xe7, 0xcc, 0x4e, 0xd3, 0x8c, 0xc7, 0xd1, 0x77, 0xc1, 0x48, 0xdc, 0x69, 0xb5, 0x1c, + 0x75, 0x46, 0x52, 0x60, 0x16, 0x37, 0xa7, 0x6b, 0x08, 0x46, 0xde, 0x80, 0x25, 0x47, 0x74, 0x87, + 0x8a, 0x78, 0x21, 0xa1, 0xf8, 0x2a, 0xe2, 0x16, 0x0a, 0xf7, 0x04, 0xbe, 0x5b, 0xee, 0x62, 0x70, + 0x0e, 0xce, 0x83, 0x9d, 0xe9, 0x27, 0xd2, 0xed, 0x8b, 0xa1, 0xc8, 0xab, 0xce, 0xa5, 0x89, 0xae, + 0xc9, 0x42, 0x6d, 0xf4, 0xb5, 0x65, 0x95, 0x9f, 0xe7, 0x74, 0xa1, 0x36, 0xd6, 0xdc, 0x7f, 0xcc, + 0xcc, 0x87, 0xd1, 0x12, 0x9c, 0x70, 0xc3, 0x20, 0x89, 0x42, 0xdf, 0xe7, 0xc5, 0x1c, 0xf9, 0xde, + 0x9c, 0x9f, 0xa1, 0x3c, 0x25, 0xba, 0x7d, 0x62, 0xae, 0x17, 0x05, 0xe7, 0x3d, 0x47, 0x6d, 0xf2, + 0xac, 0x7e, 0x98, 0x28, 0x24, 0xae, 0x20, 0x45, 0x53, 0x48, 0x28, 0xe5, 0xf6, 0xde, 0x43, 0x53, + 0x04, 0xe9, 0xd3, 0x65, 0xf1, 0xc5, 0xde, 0x05, 0x63, 0xe4, 0x5e, 0x42, 0xa2, 0xc0, 0xf1, 0x6f, + 0xe2, 0x45, 0x79, 0x60, 0xc1, 0x16, 0xe6, 0x25, 0xa3, 0x1d, 0xa7, 0xb0, 0x90, 0xad, 0xbc, 0x64, + 0x46, 0x01, 0x03, 0xee, 0x25, 0x93, 0x3e, 0x31, 0xfb, 0xa7, 0xcb, 0x29, 0x9b, 0xf5, 0x91, 0x9c, + 0x65, 0xb3, 0xb2, 0x5a, 0xb2, 0xfe, 0x18, 0x03, 0x88, 0xbd, 0x58, 0x91, 0x9c, 0x55, 0xb8, 0xe0, + 0xb2, 0xc9, 0x08, 0xa7, 0xf9, 0xa2, 0x2d, 0xa8, 0x6c, 0x86, 0x71, 0x22, 0x77, 0x68, 0x07, 0xdc, + 0x0c, 0x5e, 0x0d, 0xe3, 0x84, 0x19, 0x5a, 0xea, 0xb5, 0x69, 0x4b, 0x8c, 0x39, 0x0f, 0xba, 0xf7, + 0x8f, 0x37, 0x9d, 0xa8, 0x99, 0x8a, 0x2b, 0x55, 0xf6, 0x74, 0x43, 0x83, 0xb0, 0x89, 0x67, 0xff, + 0x91, 0x95, 0x3a, 0xd5, 0x3a, 0xac, 0x63, 0xff, 0x4f, 0x58, 0xe9, 0x92, 0x0a, 0xa5, 0x22, 0xb6, + 0x6e, 0x66, 0x59, 0x91, 0x3d, 0xab, 0x33, 0xd8, 0x3f, 0x64, 0xc1, 0x48, 0xdd, 0x71, 0xb7, 0xc2, + 0xf5, 0x75, 0xf4, 0x3c, 0x54, 0x9b, 0x9d, 0xc8, 0xac, 0xee, 0xa0, 0x9c, 0x55, 0xf3, 0xa2, 0x1d, + 0x2b, 0x0c, 0x3a, 0xf5, 0xd7, 0x1d, 0x57, 0x16, 0x17, 0x29, 0xf3, 0xa9, 0x7f, 0x99, 0xb5, 0x60, + 0x01, 0xa1, 0xc3, 0xdf, 0x72, 0xee, 0xc9, 0x87, 0xb3, 0x47, 0x6a, 0x4b, 0x1a, 0x84, 0x4d, 0x3c, + 0xfb, 0x57, 0x2c, 0x98, 0xaa, 0x3b, 0xb1, 0xe7, 0xce, 0x76, 0x92, 0xcd, 0xba, 0x97, 0xac, 0x75, + 0xdc, 0x2d, 0x92, 0xf0, 0x22, 0x34, 0xb4, 0x97, 0x9d, 0x98, 0xae, 0x40, 0xb5, 0x63, 0x56, 0xbd, + 0xbc, 0x29, 0xda, 0xb1, 0xc2, 0x40, 0xaf, 0xc2, 0x68, 0xdb, 0x89, 0xe3, 0xbb, 0x61, 0xd4, 0xc4, + 0x64, 0xbd, 0x98, 0x32, 0x55, 0x0d, 0xe2, 0x46, 0x24, 0xc1, 0x64, 0x5d, 0x44, 0xe6, 0x68, 0xfa, + 0xd8, 0x64, 0x66, 0x7f, 0xce, 0x82, 0x93, 0x75, 0xe2, 0x44, 0x24, 0x62, 0x55, 0xad, 0xd4, 0x8b, + 0xa0, 0x57, 0xa0, 0x9a, 0xd0, 0x16, 0xda, 0x23, 0xab, 0xd8, 0x1e, 0xb1, 0x98, 0x9a, 0x55, 0x41, + 0x1c, 0x2b, 0x36, 0xf6, 0x17, 0x2d, 0x38, 0x9d, 0xd7, 0x97, 0x39, 0x3f, 0xec, 0x34, 0x1f, 0x45, + 0x87, 0xfe, 0x86, 0x05, 0x63, 0xec, 0xb8, 0x7e, 0x9e, 0x24, 0x8e, 0xe7, 0xf7, 0xd4, 0xea, 0xb4, + 0x06, 0xac, 0xd5, 0x79, 0x1e, 0x86, 0x36, 0xc3, 0x16, 0xc9, 0x86, 0x9a, 0x5c, 0x0d, 0x5b, 0x04, + 0x33, 0x08, 0x7a, 0x07, 0x9d, 0x84, 0x5e, 0x90, 0x38, 0x74, 0x39, 0xca, 0xe3, 0x8c, 0x63, 0x7c, + 0x02, 0xaa, 0x66, 0x6c, 0xe2, 0xd8, 0xff, 0xa2, 0x06, 0x23, 0x22, 0x20, 0x6c, 0xe0, 0xa2, 0x48, + 0xd2, 0x8b, 0x53, 0xea, 0xeb, 0xc5, 0x89, 0x61, 0xd8, 0x65, 0x85, 0x95, 0x85, 0x85, 0x7e, 0xbd, + 0x90, 0x08, 0x42, 0x5e, 0xab, 0x59, 0x77, 0x8b, 0xff, 0xc7, 0x82, 0x15, 0x7a, 0xcd, 0x82, 0x63, + 0x6e, 0x18, 0x04, 0xc4, 0xd5, 0xb6, 0xe3, 0x50, 0x11, 0x1b, 0x84, 0xb9, 0x34, 0x51, 0x7d, 0x12, + 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x12, 0x8c, 0xf3, 0x31, 0xbb, 0x95, 0x3a, 0x83, 0xd1, 0x55, + 0x19, 0x4d, 0x20, 0x4e, 0xe3, 0xa2, 0x19, 0x7e, 0x96, 0x25, 0x4a, 0x1a, 0x0e, 0x6b, 0x57, 0xb5, + 0x51, 0xcc, 0xd0, 0xc0, 0x40, 0x11, 0xa0, 0x88, 0xac, 0x47, 0x24, 0xde, 0x14, 0x01, 0x73, 0xcc, + 0x6e, 0x1d, 0x79, 0xb8, 0x8a, 0x25, 0xb8, 0x87, 0x12, 0xce, 0xa1, 0x8e, 0xb6, 0x84, 0x1b, 0xa1, + 0x5a, 0x84, 0x3c, 0x17, 0x9f, 0xb9, 0xaf, 0x37, 0x61, 0x1a, 0x2a, 0x4c, 0x75, 0x31, 0x7b, 0xb9, + 0xcc, 0xb3, 0x64, 0x99, 0x62, 0xc3, 0xbc, 0x1d, 0xcd, 0xc3, 0xf1, 0x4c, 0x99, 0xc8, 0x58, 0x9c, + 0x95, 0xa8, 0x8c, 0xc8, 0x4c, 0x81, 0xc9, 0x18, 0xf7, 0x3c, 0x61, 0xba, 0x98, 0x46, 0xf7, 0x70, + 0x31, 0x75, 0x55, 0x58, 0x36, 0x3f, 0xc5, 0x78, 0x6f, 0x21, 0x03, 0x30, 0x50, 0x0c, 0xf6, 0x0f, + 0x66, 0x62, 0xb0, 0xc7, 0x59, 0x07, 0x6e, 0x15, 0xd3, 0x81, 0xfd, 0x07, 0x5c, 0x3f, 0xca, 0x00, + 0xea, 0xff, 0x69, 0x81, 0xfc, 0xae, 0x73, 0x8e, 0xbb, 0x49, 0xe8, 0x94, 0xc9, 0x49, 0xb5, 0xb1, + 0xf6, 0x95, 0x6a, 0x73, 0x01, 0x6a, 0x74, 0x9c, 0xf8, 0xa3, 0x5c, 0xef, 0x2b, 0x0f, 0xc8, 0xec, + 0xca, 0x82, 0x78, 0x4a, 0xe3, 0xa0, 0x10, 0x26, 0x7d, 0x27, 0x4e, 0x58, 0x0f, 0x1a, 0xdd, 0xc0, + 0x7d, 0xc8, 0x7a, 0x41, 0x2c, 0xed, 0x6e, 0x31, 0x4b, 0x08, 0xf7, 0xd2, 0xb6, 0xff, 0x4d, 0x05, + 0xc6, 0x53, 0x92, 0x71, 0x9f, 0x06, 0xc3, 0xf3, 0x50, 0x95, 0x3a, 0x3c, 0x5b, 0x35, 0x4d, 0x29, + 0x7a, 0x85, 0x41, 0x95, 0xd6, 0x9a, 0xd6, 0xaa, 0x59, 0x03, 0xc7, 0x50, 0xb8, 0xd8, 0xc4, 0x63, + 0x42, 0x39, 0xf1, 0xe3, 0x39, 0xdf, 0x23, 0x41, 0xc2, 0xbb, 0x59, 0x8c, 0x50, 0x5e, 0x5d, 0x6c, + 0x98, 0x44, 0xb5, 0x50, 0xce, 0x00, 0x70, 0x96, 0x3d, 0xfa, 0xb4, 0x05, 0xe3, 0xce, 0xdd, 0x58, + 0x57, 0xff, 0x17, 0xd1, 0xd6, 0x07, 0x54, 0x52, 0xa9, 0x0b, 0x05, 0xb8, 0x63, 0x3f, 0xd5, 0x84, + 0xd3, 0x4c, 0xd1, 0xeb, 0x16, 0x20, 0x72, 0x8f, 0xb8, 0x32, 0x1e, 0x5c, 0xf4, 0x65, 0xb8, 0x88, + 0x1d, 0xfc, 0xa5, 0x1e, 0xba, 0x5c, 0xaa, 0xf7, 0xb6, 0xe3, 0x9c, 0x3e, 0xa0, 0x6b, 0x80, 0x9a, + 0x5e, 0xec, 0xac, 0xf9, 0x64, 0x2e, 0x6c, 0xc9, 0x54, 0x71, 0x71, 0x9e, 0x7e, 0x46, 0x8c, 0x33, + 0x9a, 0xef, 0xc1, 0xc0, 0x39, 0x4f, 0xb1, 0x59, 0x16, 0x85, 0xf7, 0xba, 0x37, 0x23, 0x9f, 0x69, + 0x09, 0x73, 0x96, 0x89, 0x76, 0xac, 0x30, 0xec, 0x3f, 0x2e, 0xab, 0xa5, 0xac, 0x93, 0x1f, 0x1c, + 0x23, 0x08, 0xdb, 0x7a, 0xf8, 0x20, 0x6c, 0x1d, 0x29, 0xd5, 0x5b, 0x00, 0x21, 0x95, 0x2f, 0x5d, + 0x7a, 0x44, 0xf9, 0xd2, 0xdf, 0x6b, 0xa5, 0x2a, 0x13, 0x8e, 0x5e, 0xfc, 0x40, 0xb1, 0x89, 0x17, + 0x33, 0x3c, 0x8a, 0x2b, 0xa3, 0x57, 0x32, 0xc1, 0x7b, 0xcf, 0x43, 0x75, 0xdd, 0x77, 0x58, 0xc9, + 0x1c, 0xb6, 0x50, 0x8d, 0x08, 0xb3, 0xcb, 0xa2, 0x1d, 0x2b, 0x0c, 0x2a, 0xf5, 0x0d, 0xa2, 0xfb, + 0x92, 0xda, 0xff, 0xbe, 0x0c, 0xa3, 0x86, 0xc6, 0xcf, 0x35, 0xdf, 0xac, 0xc7, 0xcc, 0x7c, 0x2b, + 0xed, 0xc3, 0x7c, 0xfb, 0x1e, 0xa8, 0xb9, 0x52, 0x1b, 0x15, 0x73, 0x87, 0x43, 0x56, 0xc7, 0x69, + 0x85, 0xa4, 0x9a, 0xb0, 0xe6, 0x89, 0xae, 0xa4, 0x72, 0x72, 0x53, 0x7e, 0x81, 0xbc, 0xa4, 0x59, + 0xa1, 0xd1, 0x7a, 0x9f, 0xc9, 0xc6, 0x07, 0x54, 0xf6, 0x8e, 0x0f, 0xb0, 0x7f, 0xcf, 0x52, 0x1f, + 0xf7, 0x08, 0x8a, 0x2f, 0xdd, 0x49, 0x17, 0x5f, 0xba, 0x54, 0xc8, 0x30, 0xf7, 0xa9, 0xba, 0xf4, + 0x39, 0x0b, 0xce, 0xed, 0x5e, 0xcd, 0x1c, 0x3d, 0x03, 0x95, 0x8d, 0x28, 0xec, 0xb4, 0x85, 0x0e, + 0x56, 0x74, 0x58, 0xe9, 0x78, 0xcc, 0x61, 0x74, 0x13, 0xb5, 0xe5, 0x05, 0xcd, 0xec, 0x26, 0xea, + 0xba, 0x17, 0x34, 0x31, 0x83, 0x0c, 0x50, 0xee, 0xf6, 0x06, 0x8c, 0xcc, 0x85, 0xad, 0x96, 0x13, + 0x34, 0xd1, 0x5b, 0x60, 0xc4, 0xe5, 0x3f, 0x85, 0x3f, 0x8f, 0x1d, 0x9c, 0x0b, 0x28, 0x96, 0x30, + 0x74, 0x16, 0x86, 0x9c, 0x68, 0x43, 0xfa, 0xf0, 0x58, 0x40, 0xde, 0x6c, 0xb4, 0x11, 0x63, 0xd6, + 0x6a, 0xff, 0xa9, 0x05, 0x13, 0xf4, 0x11, 0x8f, 0x0d, 0x30, 0x1b, 0xda, 0x67, 0x61, 0xd8, 0xe9, + 0x24, 0x9b, 0x61, 0xcf, 0x9e, 0x70, 0x96, 0xb5, 0x62, 0x01, 0xa5, 0x9d, 0x55, 0x15, 0x44, 0x8c, + 0xce, 0xce, 0xd3, 0x75, 0xc5, 0x20, 0xd4, 0xac, 0x8e, 0x3b, 0x6b, 0x79, 0x27, 0xb7, 0x0d, 0xde, + 0x8c, 0x25, 0x9c, 0x12, 0x5b, 0x0b, 0x9b, 0x5d, 0x11, 0x66, 0xac, 0x88, 0xd5, 0xc3, 0x66, 0x17, + 0x33, 0x08, 0x7a, 0x1a, 0xca, 0xf1, 0xa6, 0x23, 0x63, 0x04, 0x64, 0xc4, 0x7b, 0xe3, 0xea, 0x2c, + 0xa6, 0xed, 0x2a, 0x81, 0x23, 0xf2, 0xb3, 0xf1, 0xbe, 0xe9, 0x04, 0x8e, 0xc8, 0xb7, 0xff, 0xc9, + 0x10, 0xb0, 0xd8, 0x1f, 0x27, 0x22, 0xcd, 0xd5, 0x90, 0x15, 0xa8, 0x3e, 0xd4, 0x23, 0x76, 0xbd, + 0xa9, 0x7e, 0x9c, 0x8f, 0xd9, 0x8d, 0xa3, 0xd6, 0xf2, 0x51, 0x1f, 0xb5, 0xe6, 0x9f, 0x9e, 0x0f, + 0x3d, 0x46, 0xa7, 0xe7, 0xf6, 0x17, 0x2c, 0x40, 0x2a, 0x92, 0x4b, 0x87, 0xb7, 0x5c, 0x80, 0x9a, + 0x0a, 0x1d, 0x13, 0xeb, 0x45, 0x8b, 0x68, 0x09, 0xc0, 0x1a, 0x67, 0x00, 0x4f, 0xca, 0x33, 0x52, + 0x7f, 0x96, 0xd3, 0xb2, 0x84, 0x69, 0x5d, 0xa1, 0x4e, 0xed, 0x5f, 0x2a, 0xc1, 0x13, 0xdc, 0x74, + 0x5b, 0x72, 0x02, 0x67, 0x83, 0xb4, 0x68, 0xaf, 0x06, 0x0d, 0x58, 0x72, 0xe9, 0x16, 0xde, 0x93, + 0xd9, 0x1a, 0x07, 0x95, 0x9d, 0x5c, 0xce, 0x70, 0xc9, 0xb2, 0x10, 0x78, 0x09, 0x66, 0xc4, 0x51, + 0x0c, 0x55, 0x79, 0x09, 0x97, 0xd0, 0x85, 0x05, 0x31, 0x52, 0x6a, 0x41, 0x58, 0x39, 0x04, 0x2b, + 0x46, 0xd4, 0x94, 0xf1, 0x43, 0x77, 0x8b, 0x2e, 0xf9, 0xac, 0x29, 0xb3, 0x28, 0xda, 0xb1, 0xc2, + 0xb0, 0x5b, 0x70, 0x4c, 0x8e, 0x61, 0xfb, 0x3a, 0xe9, 0x62, 0xb2, 0x4e, 0xf5, 0xbf, 0x2b, 0x9b, + 0x8c, 0x7b, 0xc1, 0x94, 0xfe, 0x9f, 0x33, 0x81, 0x38, 0x8d, 0x2b, 0x6b, 0x56, 0x97, 0xf2, 0x6b, + 0x56, 0xdb, 0xbf, 0x64, 0x41, 0xd6, 0x00, 0x61, 0x0e, 0x38, 0xf3, 0x92, 0xaf, 0x7e, 0xc5, 0xec, + 0xf7, 0x51, 0xc6, 0xf6, 0x43, 0x30, 0xea, 0x24, 0xd4, 0xc2, 0xe4, 0xde, 0xa0, 0xf2, 0xc3, 0x9d, + 0x62, 0x2e, 0x85, 0x4d, 0x6f, 0xdd, 0x63, 0x5e, 0x20, 0x93, 0x9c, 0xfd, 0xd7, 0x2b, 0x50, 0x9b, + 0x8f, 0xba, 0xfb, 0x4f, 0x9b, 0xeb, 0x4d, 0x8a, 0x2b, 0xed, 0x2b, 0x29, 0x4e, 0xa6, 0xdd, 0x95, + 0xfb, 0xa6, 0xdd, 0xc9, 0xb4, 0xb9, 0xa1, 0x47, 0x95, 0x36, 0x57, 0x79, 0x4c, 0xd2, 0xe6, 0x86, + 0x1f, 0x83, 0xb4, 0xb9, 0x91, 0x23, 0x4e, 0x9b, 0xb3, 0xff, 0xfb, 0x10, 0x4c, 0xf6, 0xa4, 0x3f, + 0xa3, 0x17, 0x61, 0x4c, 0xad, 0x51, 0x79, 0x00, 0x50, 0x33, 0xc3, 0xe8, 0x35, 0x0c, 0xa7, 0x30, + 0x07, 0x10, 0xd4, 0x0b, 0x70, 0x22, 0x22, 0xaf, 0x74, 0x48, 0x87, 0xcc, 0xae, 0x27, 0x24, 0x6a, + 0x10, 0x37, 0x0c, 0x9a, 0xbc, 0xc0, 0x79, 0xb9, 0xfe, 0xe4, 0xfd, 0x9d, 0xe9, 0x13, 0xb8, 0x17, + 0x8c, 0xf3, 0x9e, 0x41, 0x6d, 0x18, 0xf7, 0xcd, 0x9d, 0xab, 0x98, 0xc3, 0x0f, 0xb5, 0xe9, 0x55, + 0xb2, 0x2a, 0xd5, 0x8c, 0xd3, 0x0c, 0xd2, 0xdb, 0xdf, 0xca, 0x23, 0xda, 0xfe, 0x7e, 0x4a, 0x6f, + 0x7f, 0x79, 0x54, 0xda, 0x07, 0x0b, 0x4e, 0x7f, 0x1f, 0x64, 0xff, 0x7b, 0x90, 0x1d, 0xed, 0x7b, + 0xa1, 0x2a, 0x23, 0x76, 0x07, 0x8a, 0x74, 0x35, 0xe9, 0xf4, 0xd1, 0xec, 0x0f, 0x4a, 0x90, 0xe3, + 0xb4, 0xa1, 0x92, 0x56, 0x5b, 0xfb, 0x29, 0x49, 0xbb, 0x3f, 0x8b, 0x1f, 0xdd, 0xe3, 0xd1, 0xca, + 0xdc, 0xc6, 0x7b, 0x7f, 0xd1, 0x4e, 0x27, 0x1d, 0xc0, 0xac, 0xf4, 0x9f, 0x0a, 0x62, 0xbe, 0x08, + 0xa0, 0x37, 0x8c, 0xc2, 0xd2, 0x57, 0xe1, 0x47, 0x7a, 0x5f, 0x89, 0x0d, 0x2c, 0xf4, 0x02, 0x8c, + 0x7a, 0x41, 0x9c, 0x38, 0xbe, 0x7f, 0xd5, 0x0b, 0x12, 0x61, 0xfd, 0x2b, 0x63, 0x76, 0x41, 0x83, + 0xb0, 0x89, 0x77, 0xe6, 0xdd, 0xc6, 0x77, 0xd9, 0xcf, 0xf7, 0xdc, 0x84, 0xd3, 0x57, 0xbc, 0x44, + 0x89, 0x36, 0x35, 0x8f, 0xd8, 0x26, 0x4f, 0x6a, 0x20, 0xab, 0xaf, 0x06, 0x32, 0xd2, 0x50, 0x4b, + 0xe9, 0xac, 0xd9, 0x6c, 0x1a, 0xaa, 0xed, 0xc2, 0xc9, 0x2b, 0x5e, 0x72, 0xd9, 0xf3, 0xc9, 0x21, + 0x32, 0xf9, 0xc5, 0x61, 0x18, 0x33, 0xcb, 0x62, 0xec, 0x47, 0x5f, 0x7f, 0x91, 0xee, 0x4e, 0xc4, + 0x40, 0x78, 0x2a, 0xa4, 0xe2, 0xf6, 0x81, 0x6b, 0x74, 0xe4, 0x0f, 0xae, 0xb1, 0x41, 0xd1, 0x3c, + 0xb1, 0xd9, 0x01, 0x74, 0x17, 0x2a, 0xeb, 0x2c, 0xa3, 0xb2, 0x5c, 0x44, 0x30, 0x5c, 0xde, 0xe0, + 0xeb, 0x15, 0xc9, 0x73, 0x32, 0x39, 0x3f, 0x6a, 0x54, 0x46, 0xe9, 0x44, 0x7e, 0x23, 0xcf, 0x45, + 0x58, 0x2b, 0x0a, 0xa3, 0x9f, 0x56, 0xa8, 0x3c, 0x84, 0x56, 0x48, 0xc9, 0xe8, 0xe1, 0x47, 0x24, + 0xa3, 0x59, 0x76, 0x6c, 0xb2, 0xc9, 0xb6, 0x3c, 0x22, 0x31, 0x6f, 0x84, 0x0d, 0x82, 0x91, 0x1d, + 0x9b, 0x02, 0xe3, 0x2c, 0x3e, 0xfa, 0xb8, 0x92, 0xf2, 0xd5, 0x22, 0x8e, 0xac, 0xcc, 0x19, 0x7d, + 0xd8, 0x02, 0xfe, 0x0b, 0x25, 0x98, 0xb8, 0x12, 0x74, 0x56, 0xae, 0xac, 0x74, 0xd6, 0x7c, 0xcf, + 0xbd, 0x4e, 0xba, 0x54, 0x8a, 0x6f, 0x91, 0xee, 0xc2, 0x7c, 0xd6, 0xd7, 0x73, 0x9d, 0x36, 0x62, + 0x0e, 0xa3, 0x72, 0x6b, 0xdd, 0x0b, 0x36, 0x48, 0xd4, 0x8e, 0x3c, 0x71, 0x9a, 0x64, 0xc8, 0xad, + 0xcb, 0x1a, 0x84, 0x4d, 0x3c, 0x4a, 0x3b, 0xbc, 0x1b, 0xa8, 0x1a, 0x65, 0x8a, 0xf6, 0x32, 0x6d, + 0xc4, 0x1c, 0x46, 0x91, 0x92, 0xa8, 0x23, 0x9c, 0xb5, 0x06, 0xd2, 0x2a, 0x6d, 0xc4, 0x1c, 0x26, + 0x7c, 0x2f, 0x2c, 0xd6, 0xb0, 0xd2, 0xe3, 0x7b, 0x61, 0x61, 0x3a, 0x12, 0x4e, 0x51, 0xb7, 0x48, + 0x77, 0xde, 0x49, 0x9c, 0xac, 0xeb, 0xe4, 0x3a, 0x6f, 0xc6, 0x12, 0xce, 0x0a, 0xad, 0xa7, 0x87, + 0xe3, 0x1b, 0xae, 0xd0, 0x7a, 0xba, 0xfb, 0x7d, 0x5c, 0x7e, 0x5f, 0x29, 0xc1, 0xd8, 0x1b, 0x97, + 0x31, 0xef, 0x72, 0x19, 0xd8, 0x6d, 0x98, 0xec, 0xc9, 0xcd, 0x1f, 0xc0, 0x02, 0xda, 0xb3, 0x76, + 0x8a, 0x8d, 0x61, 0x94, 0x12, 0x96, 0x85, 0x46, 0xe7, 0x60, 0x92, 0x2f, 0x62, 0xca, 0x89, 0xa5, + 0x5a, 0xab, 0x7a, 0x0b, 0xec, 0xd8, 0xf4, 0x56, 0x16, 0x88, 0x7b, 0xf1, 0xed, 0x1f, 0xb4, 0x60, + 0x3c, 0x55, 0x2e, 0xa1, 0x20, 0x5b, 0x8d, 0xad, 0xf2, 0x90, 0xc5, 0xcb, 0xb3, 0xfc, 0xa5, 0x32, + 0x53, 0xc7, 0x7a, 0x95, 0x6b, 0x10, 0x36, 0xf1, 0xec, 0x5f, 0x2f, 0x43, 0x55, 0xc6, 0xf6, 0x0d, + 0xd0, 0x95, 0xcf, 0x5b, 0x30, 0xae, 0x8e, 0xaa, 0xd9, 0xd9, 0x42, 0xa9, 0x88, 0xec, 0x4d, 0xda, + 0x03, 0xe5, 0x1d, 0x0b, 0xd6, 0x43, 0xbd, 0x71, 0xc0, 0x26, 0x33, 0x9c, 0xe6, 0x8d, 0x6e, 0x01, + 0xc4, 0xdd, 0x38, 0x21, 0x2d, 0xe3, 0x94, 0xc3, 0x36, 0x66, 0xd9, 0x8c, 0x1b, 0x46, 0x84, 0xce, + 0xa9, 0x1b, 0x61, 0x93, 0x34, 0x14, 0xa6, 0xb6, 0xf4, 0x74, 0x1b, 0x36, 0x28, 0xa1, 0x57, 0x55, + 0x60, 0xc5, 0x50, 0x11, 0xfa, 0x5d, 0x8e, 0xef, 0x20, 0x91, 0x15, 0x07, 0x88, 0x64, 0xb0, 0x7f, + 0xaa, 0x04, 0xc7, 0xb3, 0x23, 0x89, 0x3e, 0x08, 0x63, 0x72, 0xd0, 0x0c, 0x27, 0x92, 0x0c, 0xa8, + 0x1c, 0xc3, 0x06, 0xec, 0xc1, 0xce, 0xf4, 0x74, 0xef, 0xed, 0xfe, 0x33, 0x26, 0x0a, 0x4e, 0x11, + 0xe3, 0x61, 0x0e, 0x22, 0x1e, 0xa7, 0xde, 0x9d, 0x6d, 0xb7, 0x45, 0xac, 0x82, 0x11, 0xe6, 0x60, + 0x42, 0x71, 0x06, 0x1b, 0xad, 0xc0, 0x49, 0xa3, 0xe5, 0x06, 0xf1, 0x36, 0x36, 0xd7, 0xc2, 0x48, + 0xee, 0x5b, 0xcf, 0xea, 0xf0, 0xed, 0x5e, 0x1c, 0x9c, 0xfb, 0x24, 0x35, 0x90, 0x5c, 0xa7, 0xed, + 0xb8, 0x5e, 0xd2, 0x15, 0xa7, 0x4d, 0x4a, 0x9c, 0xcf, 0x89, 0x76, 0xac, 0x30, 0xec, 0xbf, 0x33, + 0x04, 0xc7, 0x79, 0xbc, 0x32, 0x51, 0xe1, 0xf8, 0xe8, 0x83, 0x50, 0x8b, 0x13, 0x27, 0xe2, 0x2e, + 0x2b, 0x6b, 0xdf, 0xa2, 0x4b, 0xd7, 0x78, 0x90, 0x44, 0xb0, 0xa6, 0x87, 0x3e, 0xc0, 0x2a, 0x03, + 0x7a, 0xf1, 0x26, 0xa3, 0x5e, 0x7a, 0x38, 0x87, 0xd8, 0x65, 0x45, 0x01, 0x1b, 0xd4, 0xd0, 0xb7, + 0x43, 0xa5, 0xbd, 0xe9, 0xc4, 0xd2, 0x5b, 0xfb, 0xac, 0x94, 0x13, 0x2b, 0xb4, 0xf1, 0xc1, 0xce, + 0xf4, 0xa9, 0xec, 0xab, 0x32, 0x00, 0xe6, 0x0f, 0x99, 0x52, 0x7e, 0x68, 0x0f, 0x29, 0xff, 0x2c, + 0x0c, 0x37, 0xa3, 0x6e, 0xe3, 0xea, 0x6c, 0xf6, 0x82, 0xa7, 0x79, 0xd6, 0x8a, 0x05, 0x94, 0xca, + 0xa4, 0x4d, 0xce, 0xb2, 0x49, 0x91, 0x87, 0xd3, 0x96, 0xc7, 0x55, 0x0d, 0xc2, 0x26, 0x1e, 0xab, + 0xd2, 0x95, 0x89, 0x66, 0x1f, 0x39, 0x84, 0x6c, 0xa7, 0x41, 0xe3, 0xd8, 0x2f, 0x41, 0x4d, 0x74, + 0x75, 0x35, 0x44, 0x2f, 0xc2, 0x18, 0x77, 0x06, 0xd6, 0x23, 0x27, 0x70, 0x37, 0xb3, 0x4e, 0x9c, + 0x55, 0x03, 0x86, 0x53, 0x98, 0xf6, 0x12, 0x0c, 0x0d, 0x28, 0x64, 0x07, 0xda, 0x9b, 0xbf, 0x17, + 0xaa, 0x94, 0x9c, 0xdc, 0xa8, 0x15, 0x41, 0x32, 0x84, 0xaa, 0xbc, 0x19, 0x16, 0xd9, 0x50, 0xf6, + 0x1c, 0x19, 0xb5, 0xa4, 0x96, 0xd0, 0x42, 0x1c, 0x77, 0xd8, 0xb4, 0xa3, 0x40, 0xf4, 0x0c, 0x94, + 0xc9, 0xbd, 0x76, 0x36, 0x3c, 0xe9, 0xd2, 0xbd, 0xb6, 0x17, 0x91, 0x98, 0x22, 0x91, 0x7b, 0x6d, + 0x74, 0x06, 0x4a, 0x5e, 0x53, 0xcc, 0x48, 0x10, 0x38, 0xa5, 0x85, 0x79, 0x5c, 0xf2, 0x9a, 0xf6, + 0x3d, 0xa8, 0xa9, 0xab, 0x68, 0xd1, 0x96, 0x34, 0xad, 0xac, 0x22, 0xe2, 0xd5, 0x25, 0xdd, 0x3e, + 0x46, 0x55, 0x07, 0x40, 0x17, 0x0f, 0x29, 0x4a, 0x05, 0x9f, 0x87, 0x21, 0x37, 0x14, 0x65, 0x9f, + 0xaa, 0x9a, 0x0c, 0xb3, 0xa5, 0x18, 0xc4, 0xbe, 0x0d, 0x13, 0xd7, 0x83, 0xf0, 0x2e, 0xbb, 0x14, + 0x8e, 0xd5, 0x40, 0xa7, 0x84, 0xd7, 0xe9, 0x8f, 0xac, 0x05, 0xcf, 0xa0, 0x98, 0xc3, 0x54, 0xa5, + 0xe3, 0x52, 0xbf, 0x4a, 0xc7, 0xf6, 0x27, 0x2c, 0x18, 0x53, 0xde, 0xd8, 0x2b, 0xdb, 0x5b, 0x83, + 0x9d, 0x02, 0x1b, 0xe5, 0x39, 0x4a, 0x7b, 0x94, 0xe7, 0x90, 0x07, 0xc6, 0xe5, 0x7e, 0x07, 0xc6, + 0xf6, 0x9f, 0x5b, 0x70, 0x5c, 0x75, 0x41, 0xda, 0x4c, 0x2f, 0xc2, 0xd8, 0x5a, 0xc7, 0xf3, 0x9b, + 0xb2, 0xb8, 0x7b, 0x66, 0xb9, 0xd4, 0x0d, 0x18, 0x4e, 0x61, 0xa2, 0x8b, 0x00, 0x6b, 0x5e, 0xe0, + 0x44, 0xdd, 0x15, 0x6d, 0xa4, 0x29, 0xbd, 0x5d, 0x57, 0x10, 0x6c, 0x60, 0xa1, 0x8f, 0x41, 0x75, + 0x5b, 0xc6, 0x09, 0x94, 0x0b, 0xad, 0x2a, 0x21, 0xc6, 0x43, 0xaf, 0x04, 0x15, 0x78, 0xa0, 0x38, + 0xda, 0x5f, 0x2a, 0xc3, 0x44, 0xba, 0x12, 0xc4, 0x00, 0x1e, 0x94, 0x67, 0xa0, 0xc2, 0x8a, 0x43, + 0x64, 0x27, 0x16, 0xaf, 0xc6, 0xce, 0x61, 0x28, 0x86, 0x61, 0x2e, 0x4a, 0x8a, 0xb9, 0xb7, 0x58, + 0x75, 0x52, 0xf9, 0x69, 0x99, 0x13, 0x5b, 0x1c, 0x7a, 0x08, 0x56, 0xe8, 0xd3, 0x16, 0x8c, 0x84, + 0x6d, 0xb3, 0xc4, 0xee, 0xfb, 0x8b, 0xac, 0x92, 0x21, 0x52, 0xd1, 0x85, 0x35, 0xa4, 0x26, 0x9e, + 0x9c, 0x0c, 0x92, 0xf5, 0x99, 0x6f, 0x83, 0x31, 0x13, 0x73, 0x2f, 0x83, 0xa8, 0x6a, 0x1a, 0x44, + 0x9f, 0x37, 0xa7, 0xa4, 0xa8, 0x03, 0x32, 0xc0, 0x62, 0xbf, 0x09, 0x15, 0x57, 0x05, 0x5e, 0x3e, + 0xd4, 0x85, 0x24, 0xaa, 0x4e, 0x1e, 0x0b, 0x6a, 0xe1, 0xd4, 0xec, 0xdf, 0xb3, 0x8c, 0xf9, 0x81, + 0x49, 0xbc, 0xd0, 0x44, 0x11, 0x94, 0x37, 0xb6, 0xb7, 0x84, 0x91, 0x71, 0xad, 0xa0, 0xe1, 0xbd, + 0xb2, 0xbd, 0xa5, 0x57, 0x98, 0xd9, 0x8a, 0x29, 0xb3, 0x01, 0x0e, 0x13, 0x52, 0xe5, 0x62, 0xca, + 0x7b, 0x97, 0x8b, 0xb1, 0x5f, 0x2f, 0xc1, 0x64, 0xcf, 0xa4, 0x42, 0xaf, 0x42, 0x25, 0xa2, 0x6f, + 0x29, 0x5e, 0x6f, 0xb1, 0xb0, 0x02, 0x2f, 0xf1, 0x42, 0x53, 0x2b, 0xef, 0x74, 0x3b, 0xe6, 0x2c, + 0xd1, 0x35, 0x40, 0x3a, 0x3c, 0x58, 0x9d, 0x64, 0xf0, 0x57, 0x56, 0x31, 0x84, 0xb3, 0x3d, 0x18, + 0x38, 0xe7, 0x29, 0xf4, 0x52, 0xf6, 0x40, 0x24, 0x53, 0xb4, 0x7d, 0xb7, 0xb3, 0x0d, 0xfb, 0x35, + 0x73, 0x0a, 0xde, 0xd2, 0xc2, 0xf4, 0xa0, 0x9b, 0xd3, 0x1e, 0xc9, 0x5a, 0x1e, 0x54, 0xb2, 0xda, + 0x3f, 0x5f, 0x82, 0xf1, 0x54, 0x11, 0x66, 0xe4, 0x43, 0x95, 0xf8, 0xec, 0xdc, 0x5e, 0x6a, 0xdf, + 0x83, 0xde, 0x21, 0xa5, 0xe4, 0xe4, 0x25, 0x41, 0x17, 0x2b, 0x0e, 0x8f, 0x47, 0xb4, 0xe3, 0x8b, + 0x30, 0x26, 0x3b, 0xf4, 0x7e, 0xa7, 0xe5, 0x67, 0x87, 0xef, 0x92, 0x01, 0xc3, 0x29, 0x4c, 0xfb, + 0x97, 0xcb, 0x30, 0xc5, 0x03, 0x1d, 0x9a, 0x6a, 0x31, 0xa8, 0x80, 0xa5, 0x1f, 0xd0, 0xa5, 0xd2, + 0xf9, 0x40, 0xae, 0x1d, 0xf4, 0xca, 0xc6, 0x7c, 0x46, 0x03, 0x05, 0xe9, 0x7f, 0x25, 0x13, 0xa4, + 0xcf, 0xb7, 0xea, 0x1b, 0x87, 0xd4, 0xa3, 0x6f, 0xac, 0xa8, 0xfd, 0x7f, 0x50, 0x82, 0x63, 0x99, + 0xfb, 0x30, 0xd1, 0x97, 0xd2, 0x57, 0x28, 0x59, 0x45, 0x1c, 0x03, 0xee, 0x7a, 0x45, 0xe2, 0xfe, + 0x2e, 0x52, 0x7a, 0x44, 0x4b, 0xc5, 0xfe, 0x9d, 0x12, 0x4c, 0xa4, 0x2f, 0xf2, 0x7c, 0x0c, 0x47, + 0xea, 0x6d, 0x50, 0x63, 0x77, 0xd5, 0x5d, 0x27, 0x5d, 0x79, 0xda, 0xc8, 0xaf, 0x05, 0x93, 0x8d, + 0x58, 0xc3, 0x1f, 0x8b, 0xfb, 0xa9, 0xec, 0x7f, 0x68, 0xc1, 0x29, 0xfe, 0x96, 0xd9, 0x79, 0xf8, + 0x57, 0xf3, 0x46, 0xf7, 0xe5, 0x62, 0x3b, 0x98, 0x29, 0xf1, 0xbf, 0xd7, 0xf8, 0x52, 0xe3, 0xe5, + 0xa4, 0xe8, 0x6d, 0x7a, 0x2a, 0x3c, 0x86, 0x9d, 0xdd, 0xd7, 0x64, 0xb0, 0xff, 0x6d, 0x09, 0x46, + 0x97, 0xe7, 0x16, 0x94, 0x08, 0xbf, 0x00, 0x35, 0x37, 0x22, 0x8e, 0x76, 0xff, 0x98, 0x61, 0x74, + 0x12, 0x80, 0x35, 0x0e, 0xdd, 0x45, 0xf1, 0x30, 0xd4, 0x38, 0xbb, 0x8b, 0xe2, 0x51, 0xaa, 0x31, + 0x96, 0x70, 0xf4, 0x3c, 0x54, 0x59, 0xb2, 0xfa, 0xcd, 0x48, 0x6a, 0x1c, 0xbd, 0xb5, 0x66, 0xed, + 0x78, 0x11, 0x2b, 0x0c, 0x4a, 0xb8, 0x19, 0xba, 0x31, 0x45, 0xce, 0x78, 0x64, 0xe6, 0x69, 0x33, + 0x5e, 0xc4, 0x12, 0xce, 0x6a, 0x8d, 0x32, 0xaf, 0x05, 0x45, 0xae, 0xa4, 0x3b, 0xcd, 0xdd, 0x1b, + 0x14, 0x5d, 0xe3, 0xec, 0xa7, 0x26, 0x6d, 0x26, 0x61, 0x74, 0x64, 0xb0, 0x84, 0x51, 0xfb, 0x77, + 0xca, 0x50, 0xd3, 0x4e, 0x35, 0x4f, 0x54, 0x68, 0x29, 0xe4, 0x0a, 0x89, 0x46, 0x37, 0x70, 0x15, + 0x69, 0x1e, 0x55, 0x60, 0x14, 0x68, 0xf9, 0x7e, 0x0b, 0x46, 0xbd, 0xc0, 0x4b, 0x3c, 0x87, 0xf9, + 0x06, 0x85, 0xdc, 0x5c, 0x29, 0xa8, 0x82, 0xc7, 0x02, 0xa7, 0x1c, 0x46, 0xe6, 0xd1, 0xbf, 0x62, + 0x86, 0x4d, 0xce, 0xe8, 0xa3, 0x22, 0x3f, 0xb1, 0x5c, 0x58, 0x99, 0xa3, 0x6a, 0x26, 0x29, 0xb1, + 0x4d, 0x6d, 0xec, 0x24, 0x2a, 0xa8, 0x3a, 0x18, 0xa6, 0xa4, 0xd4, 0x55, 0x46, 0x6a, 0x17, 0xc3, + 0x9a, 0x31, 0x67, 0x64, 0xc7, 0x80, 0x7a, 0xc7, 0x62, 0x9f, 0xb9, 0x5f, 0x17, 0xa0, 0xe6, 0x74, + 0x92, 0xb0, 0x45, 0x87, 0x49, 0x04, 0x0e, 0xe8, 0xec, 0x36, 0x09, 0xc0, 0x1a, 0xc7, 0xfe, 0x91, + 0x0a, 0x64, 0xea, 0xa5, 0xa0, 0x7b, 0x50, 0x53, 0x15, 0x53, 0x8a, 0xc9, 0xa5, 0xd6, 0x33, 0x4a, + 0x75, 0x46, 0x35, 0x61, 0xcd, 0x0c, 0x85, 0xd2, 0xcd, 0xca, 0x57, 0xfb, 0xfb, 0xb3, 0x6e, 0xd6, + 0xab, 0xfb, 0x3b, 0x7d, 0xa3, 0x73, 0xf6, 0x02, 0xaf, 0x94, 0x39, 0xb3, 0xa7, 0x67, 0xb6, 0xbc, + 0x87, 0x67, 0xf6, 0x93, 0xe2, 0xd2, 0x43, 0x4c, 0xe2, 0x8e, 0x9f, 0x88, 0x59, 0xf1, 0xde, 0x02, + 0x57, 0x1b, 0x27, 0xac, 0xeb, 0x8f, 0xf1, 0xff, 0xd8, 0x60, 0x9a, 0xf6, 0x9f, 0x0f, 0x1f, 0xaa, + 0xff, 0x7c, 0xa4, 0x50, 0xff, 0xf9, 0x45, 0x00, 0x36, 0xc7, 0x79, 0xae, 0x4a, 0x95, 0xb9, 0x35, + 0x95, 0xaa, 0xc1, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x5b, 0x20, 0x5d, 0x40, 0x0f, 0x4d, 0xcb, 0x7a, + 0x7d, 0xfc, 0x64, 0x90, 0xa5, 0x09, 0xa7, 0x4a, 0xeb, 0xfd, 0xac, 0x05, 0x66, 0x95, 0x3f, 0xf4, + 0x0a, 0x2f, 0x27, 0x68, 0x15, 0x71, 0xd2, 0x64, 0xd0, 0x9d, 0x59, 0x72, 0xda, 0x99, 0xe8, 0x27, + 0x59, 0x53, 0xf0, 0xcc, 0xbb, 0xa1, 0x2a, 0xa1, 0xfb, 0x32, 0x9a, 0x3f, 0x0e, 0x27, 0x64, 0xc9, + 0x11, 0x79, 0x28, 0x24, 0xa2, 0x10, 0x8e, 0x26, 0xe3, 0xe4, 0xe7, 0x2c, 0x38, 0x9f, 0xed, 0x40, + 0xbc, 0x14, 0x06, 0x5e, 0x12, 0x46, 0x0d, 0x92, 0x24, 0x5e, 0xb0, 0xc1, 0xaa, 0x3e, 0xdf, 0x75, + 0x22, 0x79, 0xe5, 0x19, 0x13, 0x98, 0xb7, 0x9d, 0x28, 0xc0, 0xac, 0x15, 0x75, 0x61, 0x98, 0x07, + 0xd4, 0x8b, 0xdd, 0xd0, 0x01, 0xd7, 0x46, 0xce, 0x70, 0xe8, 0xed, 0x18, 0x0f, 0xe6, 0xc7, 0x82, + 0xa1, 0xfd, 0x35, 0x0b, 0xd0, 0xf2, 0x36, 0x89, 0x22, 0xaf, 0x69, 0xa4, 0x00, 0xb0, 0xcb, 0x83, + 0x8d, 0x4b, 0x82, 0xcd, 0x82, 0x38, 0x99, 0xcb, 0x83, 0x8d, 0x7f, 0xf9, 0x97, 0x07, 0x97, 0xf6, + 0x77, 0x79, 0x30, 0x5a, 0x86, 0x53, 0x2d, 0xbe, 0x9d, 0xe3, 0x17, 0x72, 0xf2, 0xbd, 0x9d, 0xaa, + 0xdd, 0x70, 0xfa, 0xfe, 0xce, 0xf4, 0xa9, 0xa5, 0x3c, 0x04, 0x9c, 0xff, 0x9c, 0xfd, 0x6e, 0x40, + 0x3c, 0x14, 0x76, 0x2e, 0x2f, 0x7c, 0xb5, 0xaf, 0xbb, 0xc3, 0xfe, 0x72, 0x05, 0x8e, 0x65, 0x2e, + 0xc4, 0xa1, 0x5b, 0xe9, 0xde, 0x78, 0xd9, 0x03, 0xeb, 0xf1, 0xde, 0xee, 0x0d, 0x14, 0x81, 0x1b, + 0x40, 0xc5, 0x0b, 0xda, 0x9d, 0xa4, 0x98, 0xd2, 0x31, 0xbc, 0x13, 0x0b, 0x94, 0xa0, 0x71, 0x3e, + 0x41, 0xff, 0x62, 0xce, 0xa6, 0xc8, 0x78, 0xde, 0xd4, 0x66, 0x67, 0xe8, 0x11, 0xb9, 0x5b, 0x3e, + 0xa9, 0xa3, 0x6b, 0x2b, 0x45, 0xf8, 0x92, 0x33, 0x93, 0xe5, 0xb0, 0x43, 0xaf, 0x7e, 0xba, 0x04, + 0xa3, 0xc6, 0x47, 0x43, 0x3f, 0x96, 0xae, 0x81, 0x6b, 0x15, 0xf7, 0x4a, 0x8c, 0xfe, 0x8c, 0xae, + 0x72, 0xcb, 0x5f, 0xe9, 0xd9, 0xde, 0xf2, 0xb7, 0x0f, 0x76, 0xa6, 0x8f, 0x67, 0x0a, 0xdc, 0xa6, + 0x4a, 0xe2, 0x9e, 0xf9, 0x6e, 0x38, 0x96, 0x21, 0x93, 0xf3, 0xca, 0xab, 0xe6, 0x2b, 0x1f, 0xd8, + 0xed, 0x67, 0x0e, 0xd9, 0x4f, 0xd2, 0x21, 0x13, 0x15, 0x2b, 0x42, 0x9f, 0x0c, 0xe0, 0xf3, 0xcc, + 0xec, 0x33, 0x4a, 0x03, 0x16, 0xa6, 0x79, 0x0e, 0xaa, 0xed, 0xd0, 0xf7, 0x5c, 0x4f, 0x95, 0xd0, + 0x67, 0xa5, 0x70, 0x56, 0x44, 0x1b, 0x56, 0x50, 0x74, 0x17, 0x6a, 0x77, 0xee, 0x26, 0xfc, 0xb8, + 0x51, 0x1c, 0x69, 0x14, 0x75, 0xca, 0xa8, 0x8c, 0x16, 0x75, 0x9e, 0x89, 0x35, 0x2f, 0x64, 0xc3, + 0x30, 0x53, 0x82, 0x32, 0x7b, 0x95, 0x1d, 0xb7, 0x30, 0xed, 0x18, 0x63, 0x01, 0xb1, 0xff, 0xf5, + 0x28, 0x9c, 0xcc, 0xbb, 0x95, 0x0c, 0x7d, 0x0c, 0x86, 0x79, 0x1f, 0x8b, 0xb9, 0xf8, 0x32, 0x8f, + 0xc7, 0x15, 0x46, 0x50, 0x74, 0x8b, 0xfd, 0xc6, 0x82, 0xa7, 0xe0, 0xee, 0x3b, 0x6b, 0x62, 0x86, + 0x1c, 0x0e, 0xf7, 0x45, 0x47, 0x73, 0x5f, 0x74, 0x38, 0x77, 0xdf, 0x59, 0x43, 0xf7, 0xa0, 0xb2, + 0xe1, 0x25, 0xc4, 0x11, 0x4e, 0x9a, 0xdb, 0x87, 0xc2, 0x9c, 0x38, 0xdc, 0x4a, 0x63, 0x3f, 0x31, + 0x67, 0x88, 0xbe, 0x6a, 0xc1, 0xb1, 0xb5, 0x74, 0x45, 0x2c, 0x21, 0x3c, 0x9d, 0x43, 0xb8, 0x79, + 0x2e, 0xcd, 0x88, 0xdf, 0x9e, 0x9d, 0x69, 0xc4, 0xd9, 0xee, 0xa0, 0x4f, 0x59, 0x30, 0xb2, 0xee, + 0xf9, 0xc6, 0x0d, 0x37, 0x87, 0xf0, 0x71, 0x2e, 0x33, 0x06, 0x7a, 0xc7, 0xc1, 0xff, 0xc7, 0x58, + 0x72, 0xee, 0xa7, 0xa9, 0x86, 0x0f, 0xaa, 0xa9, 0x46, 0x1e, 0x91, 0xa6, 0xfa, 0xac, 0x05, 0x35, + 0x35, 0xd2, 0xa2, 0xb2, 0xd0, 0x07, 0x0f, 0xf1, 0x93, 0x73, 0xcf, 0x94, 0xfa, 0x8b, 0x35, 0x73, + 0xf4, 0x9a, 0x05, 0xa3, 0xce, 0xab, 0x9d, 0x88, 0x34, 0xc9, 0x76, 0xd8, 0x8e, 0x45, 0xc9, 0xdf, + 0x97, 0x8b, 0xef, 0xcc, 0x2c, 0x65, 0x32, 0x4f, 0xb6, 0x97, 0xdb, 0xb1, 0xc8, 0xac, 0xd7, 0x0d, + 0xd8, 0xec, 0x02, 0xfa, 0x3e, 0xad, 0xc7, 0xa1, 0x88, 0xc2, 0xef, 0x79, 0xbd, 0x19, 0xa8, 0x50, + 0x04, 0x81, 0xa7, 0xdc, 0x30, 0x48, 0xbc, 0xa0, 0x43, 0x96, 0x03, 0x4c, 0xda, 0xe1, 0x8d, 0x30, + 0xb9, 0x1c, 0x76, 0x82, 0xe6, 0xa5, 0x28, 0x0a, 0x23, 0x56, 0x3a, 0xc9, 0xb8, 0xef, 0x78, 0xae, + 0x3f, 0x2a, 0xde, 0x8d, 0xce, 0x41, 0x6c, 0x86, 0x9d, 0x12, 0x4c, 0xef, 0x31, 0xd8, 0xe8, 0x45, + 0x18, 0x0b, 0xa3, 0x0d, 0x27, 0xf0, 0x5e, 0x35, 0xab, 0x01, 0x2a, 0x83, 0x74, 0xd9, 0x80, 0xe1, + 0x14, 0xa6, 0x59, 0x26, 0xaa, 0xb4, 0x47, 0x99, 0xa8, 0xf3, 0x30, 0x14, 0x91, 0x76, 0x98, 0xdd, + 0x57, 0xb1, 0x04, 0x54, 0x06, 0x41, 0x4f, 0x43, 0xd9, 0x69, 0x7b, 0xc2, 0xc9, 0xa8, 0xb6, 0x8b, + 0xb3, 0x2b, 0x0b, 0x98, 0xb6, 0xa7, 0xaa, 0xd6, 0x55, 0x8e, 0xa4, 0x6a, 0x1d, 0xd5, 0x98, 0xe2, + 0x18, 0x6d, 0x58, 0x6b, 0xcc, 0xf4, 0xf1, 0x96, 0xfd, 0x7a, 0x19, 0x9e, 0xde, 0x75, 0x69, 0xe9, + 0x10, 0x76, 0x6b, 0x97, 0x10, 0x76, 0x39, 0x3c, 0xa5, 0xbd, 0x86, 0xa7, 0xdc, 0x67, 0x78, 0x3e, + 0x45, 0x25, 0x86, 0xac, 0xa2, 0x28, 0x94, 0xc4, 0x01, 0xd3, 0x0a, 0xfa, 0x15, 0x65, 0x14, 0xc2, + 0x42, 0x42, 0xb1, 0xe6, 0x4b, 0xb7, 0x4b, 0xa9, 0x12, 0x49, 0x95, 0x22, 0x34, 0x66, 0xdf, 0x4a, + 0x86, 0x5c, 0x4c, 0xf4, 0xab, 0xbb, 0x64, 0xff, 0xc2, 0x10, 0x3c, 0x33, 0x80, 0xa2, 0x33, 0x67, + 0xb1, 0x35, 0xe0, 0x2c, 0xfe, 0x06, 0xff, 0x4c, 0x9f, 0xc9, 0xfd, 0x4c, 0xb8, 0xf8, 0xcf, 0xb4, + 0xfb, 0x17, 0x62, 0x27, 0x11, 0x41, 0x4c, 0xdc, 0x4e, 0xc4, 0xd3, 0x79, 0x8c, 0xec, 0xf4, 0x05, + 0xd1, 0x8e, 0x15, 0x06, 0xdd, 0xfe, 0xba, 0x0e, 0x5d, 0xfe, 0x23, 0x05, 0x95, 0xc4, 0x31, 0x13, + 0xdd, 0xb9, 0xf5, 0x35, 0x37, 0x4b, 0x25, 0x00, 0x67, 0x63, 0xff, 0x8a, 0x05, 0x67, 0xfa, 0x5b, + 0x23, 0xe8, 0x1d, 0x30, 0xba, 0xc6, 0x82, 0x2a, 0x97, 0x58, 0xe8, 0x94, 0x98, 0x3a, 0xec, 0x7d, + 0x75, 0x33, 0x36, 0x71, 0xd0, 0x1c, 0x4c, 0x9a, 0xd1, 0x98, 0x4b, 0x46, 0xcc, 0x15, 0xf3, 0x97, + 0xac, 0x66, 0x81, 0xb8, 0x17, 0x1f, 0xcd, 0x00, 0x24, 0x5e, 0xe2, 0x13, 0xfe, 0x34, 0x9f, 0x68, + 0xcc, 0xa1, 0xb8, 0xaa, 0x5a, 0xb1, 0x81, 0x61, 0x7f, 0xbd, 0x9c, 0xff, 0x1a, 0xdc, 0xca, 0xdd, + 0xcf, 0xec, 0x17, 0x73, 0xbb, 0x34, 0x80, 0x84, 0x2e, 0x1f, 0xb5, 0x84, 0x1e, 0xea, 0x27, 0xa1, + 0xd1, 0x3c, 0x1c, 0x37, 0x6e, 0x50, 0xe6, 0x45, 0x95, 0xf8, 0xe1, 0x94, 0xaa, 0x88, 0xb8, 0x92, + 0x81, 0xe3, 0x9e, 0x27, 0x1e, 0xf3, 0xa9, 0xfa, 0xab, 0x25, 0x38, 0xdd, 0x77, 0x63, 0x71, 0x44, + 0x1a, 0xc8, 0xfc, 0xfc, 0x43, 0x47, 0xf3, 0xf9, 0xcd, 0x8f, 0x52, 0xd9, 0xf3, 0xa3, 0x0c, 0xa2, + 0xce, 0x7f, 0xb7, 0xd4, 0x77, 0xb1, 0xd0, 0x8d, 0xe8, 0x5f, 0xd8, 0x91, 0x7c, 0x09, 0xc6, 0x9d, + 0x76, 0x9b, 0xe3, 0xb1, 0x0c, 0x8d, 0x4c, 0x95, 0xd6, 0x59, 0x13, 0x88, 0xd3, 0xb8, 0x03, 0x0d, + 0xec, 0x7f, 0xb0, 0xa0, 0x86, 0xc9, 0x3a, 0x97, 0x70, 0xe8, 0x8e, 0x18, 0x22, 0xab, 0x88, 0xab, + 0x32, 0xe8, 0xc0, 0xc6, 0x1e, 0x2b, 0xc4, 0x90, 0x37, 0xd8, 0x07, 0xad, 0xb3, 0xa1, 0xae, 0x1f, + 0x2e, 0xf7, 0xbf, 0x7e, 0xd8, 0xfe, 0xb3, 0x31, 0xfa, 0x7a, 0xed, 0x70, 0x2e, 0x22, 0xcd, 0x98, + 0x7e, 0xdf, 0x4e, 0xe4, 0x8b, 0x49, 0xa2, 0xbe, 0xef, 0x4d, 0xbc, 0x88, 0x69, 0x7b, 0xea, 0x9c, + 0xb2, 0xb4, 0xaf, 0x1a, 0x95, 0xe5, 0x3d, 0x6b, 0x54, 0xbe, 0x04, 0xe3, 0x71, 0xbc, 0xb9, 0x12, + 0x79, 0xdb, 0x4e, 0x42, 0xae, 0x13, 0x59, 0x40, 0x4a, 0xd7, 0x6b, 0x6b, 0x5c, 0xd5, 0x40, 0x9c, + 0xc6, 0x45, 0x57, 0x60, 0x52, 0x57, 0x8a, 0x24, 0x51, 0xc2, 0x52, 0x20, 0xf9, 0x4c, 0x50, 0xc5, + 0x81, 0x74, 0x6d, 0x49, 0x81, 0x80, 0x7b, 0x9f, 0xa1, 0x32, 0x37, 0xd5, 0x48, 0x3b, 0x32, 0x9c, + 0x96, 0xb9, 0x29, 0x3a, 0xb4, 0x2f, 0x3d, 0x4f, 0xa0, 0x25, 0x38, 0xc1, 0x27, 0xc6, 0x6c, 0xbb, + 0x6d, 0xbc, 0xd1, 0x48, 0xfa, 0x7e, 0x82, 0x2b, 0xbd, 0x28, 0x38, 0xef, 0x39, 0xf4, 0x02, 0x8c, + 0xaa, 0xe6, 0x85, 0x79, 0x71, 0xb4, 0xa6, 0x5c, 0x7b, 0x8a, 0xcc, 0x42, 0x13, 0x9b, 0x78, 0xe8, + 0xfd, 0xf0, 0xa4, 0xfe, 0xcb, 0x53, 0xea, 0xf9, 0xb9, 0xf3, 0xbc, 0x28, 0xc2, 0xab, 0xae, 0xbf, + 0xbb, 0x92, 0x8b, 0xd6, 0xc4, 0xfd, 0x9e, 0x47, 0x6b, 0x70, 0x46, 0x81, 0x2e, 0x05, 0x09, 0x4b, + 0x7a, 0x8d, 0x49, 0xdd, 0x89, 0x59, 0x04, 0x05, 0xb0, 0xf7, 0xb4, 0x05, 0xf5, 0x33, 0x57, 0xbc, + 0xe4, 0x6a, 0x1e, 0x26, 0x5e, 0xc4, 0xbb, 0x50, 0x41, 0x17, 0xa0, 0x46, 0x02, 0x67, 0xcd, 0x27, + 0xcb, 0x73, 0x0b, 0x62, 0x47, 0xaa, 0xb3, 0x24, 0x24, 0x00, 0x6b, 0x1c, 0x15, 0xe7, 0x3f, 0xd6, + 0x2f, 0xce, 0x1f, 0xad, 0xc0, 0xc9, 0x0d, 0xb7, 0x4d, 0xad, 0x4c, 0xcf, 0x25, 0xb3, 0x2e, 0x0b, + 0x2c, 0xa6, 0x1f, 0x86, 0x5f, 0x1c, 0xa1, 0x12, 0xa6, 0xae, 0xcc, 0xad, 0xf4, 0xe0, 0xe0, 0xdc, + 0x27, 0x59, 0x00, 0x7a, 0x14, 0xde, 0xeb, 0x4e, 0x9d, 0xc8, 0x04, 0xa0, 0xd3, 0x46, 0xcc, 0x61, + 0xe8, 0x1a, 0x20, 0x96, 0x34, 0x78, 0x35, 0x49, 0xda, 0xca, 0xac, 0x9d, 0x3a, 0x99, 0x2e, 0xc9, + 0x79, 0xb9, 0x07, 0x03, 0xe7, 0x3c, 0x45, 0xad, 0x9e, 0x20, 0x64, 0xd4, 0xa7, 0x9e, 0x4c, 0x5b, + 0x3d, 0x37, 0x78, 0x33, 0x96, 0x70, 0xf4, 0x21, 0x98, 0xea, 0xc4, 0x84, 0x6d, 0x98, 0x6f, 0x87, + 0xd1, 0x96, 0x1f, 0x3a, 0xcd, 0x05, 0x76, 0xcf, 0x71, 0xd2, 0x9d, 0x9a, 0x62, 0xcc, 0xcf, 0x8b, + 0x67, 0xa7, 0x6e, 0xf6, 0xc1, 0xc3, 0x7d, 0x29, 0x64, 0x6b, 0xca, 0x9e, 0x1e, 0xb0, 0xa6, 0xec, + 0x0a, 0x9c, 0x94, 0x7a, 0x6d, 0x79, 0x6e, 0x41, 0xbd, 0xf4, 0xd4, 0x99, 0xf4, 0xc5, 0x89, 0x0b, + 0x39, 0x38, 0x38, 0xf7, 0x49, 0xb4, 0x05, 0x4f, 0x33, 0x1f, 0x8b, 0xf8, 0x38, 0x2b, 0x91, 0x17, + 0xb8, 0x5e, 0xdb, 0xf1, 0xf9, 0x92, 0x5c, 0x68, 0x4e, 0x3d, 0xcd, 0xba, 0xf6, 0x16, 0x41, 0xfa, + 0xe9, 0xd9, 0xdd, 0x90, 0xf1, 0xee, 0xb4, 0xd0, 0x5d, 0x78, 0xf3, 0x2e, 0x08, 0x5c, 0xb5, 0x4c, + 0x9d, 0x63, 0x0c, 0xbf, 0x59, 0x30, 0x7c, 0xf3, 0xec, 0x5e, 0x0f, 0xe0, 0xbd, 0x69, 0xf6, 0x7d, + 0xcb, 0x55, 0x12, 0x38, 0xec, 0x2d, 0xa7, 0x07, 0x78, 0x4b, 0x89, 0x8c, 0x77, 0xa7, 0x85, 0x36, + 0xe1, 0x2c, 0x43, 0x98, 0x75, 0x13, 0x6f, 0x5b, 0x97, 0x0b, 0xba, 0x14, 0x34, 0xdb, 0xa1, 0x17, + 0x24, 0x53, 0xe7, 0x19, 0xaf, 0x6f, 0x12, 0xbc, 0xce, 0xce, 0xee, 0x82, 0x8b, 0x77, 0xa5, 0x64, + 0xff, 0x81, 0x05, 0xe3, 0x4a, 0xfd, 0x1c, 0x41, 0x06, 0xba, 0x9f, 0xce, 0x40, 0xbf, 0x72, 0x70, + 0x05, 0xce, 0x7a, 0xde, 0x27, 0x4f, 0xea, 0xbf, 0x4d, 0x02, 0x68, 0x25, 0xaf, 0xec, 0x2b, 0xab, + 0xaf, 0x7d, 0xf5, 0xd8, 0x2a, 0xd8, 0xbc, 0x02, 0xaf, 0x95, 0x47, 0x5b, 0xe0, 0xb5, 0x01, 0xa7, + 0xa4, 0x3c, 0xe0, 0xf1, 0x00, 0x57, 0xc3, 0x58, 0xe9, 0x6b, 0xe3, 0x1a, 0xd3, 0x85, 0x3c, 0x24, + 0x9c, 0xff, 0x6c, 0xca, 0x30, 0x1f, 0xd9, 0xd3, 0x30, 0x57, 0x2a, 0x6a, 0x71, 0x5d, 0x5e, 0x32, + 0x9c, 0x51, 0x51, 0x8b, 0x97, 0x1b, 0x58, 0xe3, 0xe4, 0xdb, 0x29, 0xb5, 0x82, 0xec, 0x14, 0xd8, + 0xb7, 0x9d, 0x22, 0x35, 0xe6, 0x68, 0x5f, 0x8d, 0x29, 0xcf, 0x1d, 0xc7, 0xfa, 0x9e, 0x3b, 0xbe, + 0x07, 0x26, 0xbc, 0x60, 0x93, 0x44, 0x5e, 0x42, 0x9a, 0x6c, 0x2d, 0x30, 0x6d, 0x5a, 0xd5, 0x56, + 0xea, 0x42, 0x0a, 0x8a, 0x33, 0xd8, 0x69, 0x35, 0x3f, 0x31, 0x80, 0x9a, 0xef, 0x63, 0x5c, 0x1d, + 0x2b, 0xc6, 0xb8, 0x3a, 0x7e, 0x70, 0xe3, 0x6a, 0xf2, 0x50, 0x8d, 0x2b, 0x54, 0x88, 0x71, 0x35, + 0x90, 0xdd, 0x62, 0x78, 0x58, 0x4e, 0xee, 0xe1, 0x61, 0xe9, 0x67, 0x59, 0x9d, 0x7a, 0x68, 0xcb, + 0x2a, 0xdf, 0x68, 0x7a, 0xe2, 0x0d, 0xa3, 0xa9, 0x10, 0xa3, 0xe9, 0x19, 0xa8, 0x34, 0x49, 0x3b, + 0xd9, 0x9c, 0x7a, 0x8a, 0x4d, 0x56, 0xf5, 0xfd, 0xe7, 0x69, 0x23, 0xe6, 0x30, 0x94, 0xc0, 0xf9, + 0xbb, 0x64, 0x6d, 0x33, 0x0c, 0xb7, 0x96, 0x9c, 0xc0, 0x5b, 0x27, 0xe2, 0x12, 0x83, 0xdb, 0x4e, + 0xd4, 0x12, 0x05, 0xe4, 0x9b, 0x53, 0x67, 0x59, 0x17, 0x9e, 0x13, 0xcf, 0x9f, 0xbf, 0xbd, 0x07, + 0x3e, 0xde, 0x93, 0xe2, 0x1b, 0xf6, 0xdc, 0x37, 0xb2, 0x3d, 0xf7, 0xd9, 0x12, 0x9c, 0xd2, 0x16, + 0x0f, 0xd5, 0x33, 0xde, 0x3a, 0xd5, 0xf9, 0x04, 0x5d, 0x04, 0xe0, 0x51, 0x30, 0x46, 0x1d, 0x0d, + 0x5d, 0x49, 0x44, 0x41, 0xb0, 0x81, 0xc5, 0xca, 0x51, 0x90, 0x88, 0xdd, 0x45, 0x96, 0x35, 0x87, + 0xe6, 0x44, 0x3b, 0x56, 0x18, 0x74, 0x71, 0xd1, 0xdf, 0xa2, 0x2a, 0x52, 0xf6, 0x96, 0x8b, 0x39, + 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x8e, 0x33, 0x61, 0xaa, 0x98, 0x9a, 0x44, 0x63, 0xdc, 0xd7, 0xa4, + 0xb4, 0xaf, 0x82, 0xca, 0xee, 0xb0, 0x72, 0x29, 0x95, 0xde, 0xee, 0xb0, 0xc0, 0x72, 0x85, 0x61, + 0xff, 0x0f, 0x0b, 0x4e, 0xe7, 0x0e, 0xc5, 0x11, 0x98, 0xb9, 0xf7, 0xd2, 0x66, 0x6e, 0xa3, 0x28, + 0x3f, 0x95, 0xf1, 0x16, 0x7d, 0x4c, 0xde, 0x7f, 0x67, 0xc1, 0x84, 0xc6, 0x3f, 0x82, 0x57, 0xf5, + 0xd2, 0xaf, 0x5a, 0x9c, 0x4b, 0xae, 0xd6, 0xf3, 0x6e, 0xbf, 0x5c, 0x02, 0x75, 0xf3, 0xcc, 0xac, + 0x9b, 0x0c, 0x96, 0x8b, 0xda, 0x85, 0x61, 0x16, 0x56, 0x16, 0x17, 0x13, 0x32, 0x9b, 0xe6, 0xcf, + 0x42, 0xd4, 0xf4, 0x29, 0x3f, 0xfb, 0x1b, 0x63, 0xc1, 0x90, 0xdd, 0x94, 0x27, 0xe5, 0x74, 0x39, + 0x6d, 0xcc, 0x2a, 0x79, 0xac, 0x30, 0xa8, 0x21, 0xe6, 0xb9, 0x61, 0x30, 0xe7, 0x3b, 0x71, 0x2c, + 0xf6, 0x06, 0xca, 0x10, 0x5b, 0x90, 0x00, 0xac, 0x71, 0x58, 0xc4, 0x99, 0x17, 0xb7, 0x7d, 0xa7, + 0x6b, 0x38, 0x5e, 0x8d, 0xea, 0x7f, 0x0a, 0x84, 0x4d, 0x3c, 0xbb, 0x05, 0x53, 0xe9, 0x97, 0x98, + 0x27, 0xeb, 0x2c, 0xed, 0x63, 0xa0, 0xe1, 0xbc, 0x00, 0x35, 0x87, 0x3d, 0xb5, 0xd8, 0x71, 0x84, + 0x4c, 0xd0, 0xc9, 0x0f, 0x12, 0x80, 0x35, 0x8e, 0xfd, 0xad, 0x70, 0x22, 0x67, 0xcc, 0x06, 0x88, + 0xaa, 0xfd, 0xf9, 0x12, 0x1c, 0x4b, 0x3f, 0x19, 0xb3, 0xc4, 0x68, 0xde, 0x67, 0x2f, 0x76, 0xc3, + 0x6d, 0x12, 0x75, 0x69, 0x37, 0xac, 0x4c, 0x62, 0x74, 0x0f, 0x06, 0xce, 0x79, 0x8a, 0x5d, 0x02, + 0xd5, 0x54, 0xaf, 0x2e, 0xa7, 0xc7, 0xad, 0x22, 0xa7, 0x87, 0x1e, 0x59, 0x33, 0x12, 0x50, 0xb1, + 0xc4, 0x26, 0x7f, 0x6a, 0x57, 0xb3, 0xb4, 0xae, 0x7a, 0xc7, 0xf3, 0x13, 0x2f, 0x10, 0xaf, 0x2c, + 0x26, 0x8e, 0xb2, 0xab, 0x97, 0x7a, 0x51, 0x70, 0xde, 0x73, 0xf6, 0xd7, 0x86, 0x40, 0x95, 0x47, + 0x62, 0x91, 0xda, 0x05, 0xc5, 0xb9, 0xef, 0x37, 0xbd, 0x5e, 0x7d, 0xe9, 0xa1, 0xdd, 0x42, 0x27, + 0xb9, 0xeb, 0xdc, 0x3c, 0x63, 0x53, 0x03, 0xb6, 0xaa, 0x41, 0xd8, 0xc4, 0xa3, 0x3d, 0xf1, 0xbd, + 0x6d, 0xc2, 0x1f, 0x1a, 0x4e, 0xf7, 0x64, 0x51, 0x02, 0xb0, 0xc6, 0x61, 0xf7, 0x2c, 0x78, 0xeb, + 0xeb, 0xc2, 0x0f, 0xac, 0xef, 0x59, 0xf0, 0xd6, 0xd7, 0x31, 0x83, 0xf0, 0x6b, 0x02, 0xc3, 0x2d, + 0xb1, 0x97, 0x34, 0xae, 0x09, 0x0c, 0xb7, 0x30, 0x83, 0xd0, 0xaf, 0x14, 0x84, 0x51, 0xcb, 0xf1, + 0xbd, 0x57, 0x49, 0x53, 0x71, 0x11, 0x7b, 0x48, 0xf5, 0x95, 0x6e, 0xf4, 0xa2, 0xe0, 0xbc, 0xe7, + 0xe8, 0x84, 0x6e, 0x47, 0xa4, 0xe9, 0xb9, 0x89, 0x49, 0x0d, 0xd2, 0x13, 0x7a, 0xa5, 0x07, 0x03, + 0xe7, 0x3c, 0x85, 0x66, 0xe1, 0x98, 0x2c, 0x6f, 0x25, 0x4b, 0xc3, 0x8e, 0xa6, 0xeb, 0x4b, 0xe2, + 0x34, 0x18, 0x67, 0xf1, 0xa9, 0xc4, 0x6a, 0x89, 0x72, 0xe5, 0x6c, 0xcb, 0x69, 0x48, 0x2c, 0x59, + 0xc6, 0x1c, 0x2b, 0x0c, 0xfb, 0x93, 0x65, 0xaa, 0x61, 0xfb, 0xdc, 0x0a, 0x70, 0x64, 0x79, 0x15, + 0xe9, 0x19, 0x39, 0x34, 0xc0, 0x8c, 0x7c, 0x17, 0x8c, 0xdd, 0x89, 0xc3, 0x40, 0xe5, 0x2c, 0x54, + 0xfa, 0xe6, 0x2c, 0x18, 0x58, 0xf9, 0x39, 0x0b, 0xc3, 0x45, 0xe5, 0x2c, 0x8c, 0x3c, 0x64, 0xce, + 0xc2, 0xbf, 0xac, 0x80, 0xba, 0x07, 0xfa, 0x06, 0x49, 0xee, 0x86, 0xd1, 0x96, 0x17, 0x6c, 0xb0, + 0x52, 0x4d, 0x5f, 0xb5, 0x64, 0xb5, 0xa7, 0x45, 0x33, 0xa7, 0x7f, 0xbd, 0xa0, 0xbb, 0x7c, 0x53, + 0xcc, 0x66, 0x56, 0x0d, 0x46, 0x3c, 0xf6, 0x2d, 0x53, 0x55, 0x4a, 0x1c, 0xeb, 0xa5, 0x7a, 0x84, + 0xbe, 0x1b, 0x40, 0x1e, 0x9a, 0xad, 0x4b, 0x09, 0xbc, 0x50, 0x4c, 0xff, 0x30, 0x59, 0xd7, 0xf6, + 0xed, 0xaa, 0x62, 0x82, 0x0d, 0x86, 0xe8, 0xb3, 0xba, 0xde, 0x01, 0x4f, 0x72, 0xfc, 0xe8, 0xa1, + 0x8c, 0xcd, 0x20, 0xd5, 0x0e, 0x30, 0x8c, 0x78, 0xc1, 0x06, 0x9d, 0x27, 0x22, 0xb6, 0xfb, 0xad, + 0x79, 0x95, 0x00, 0x17, 0x43, 0xa7, 0x59, 0x77, 0x7c, 0x27, 0x70, 0x49, 0xb4, 0xc0, 0xd1, 0xf5, + 0x5e, 0x5a, 0x34, 0x60, 0x49, 0xa8, 0xe7, 0xb2, 0xea, 0xca, 0x20, 0x97, 0x55, 0x9f, 0xf9, 0x4e, + 0x98, 0xec, 0xf9, 0x98, 0xfb, 0x2a, 0x6e, 0x70, 0x80, 0x1a, 0x80, 0xbf, 0x30, 0xac, 0x95, 0xd6, + 0x8d, 0xb0, 0xc9, 0xef, 0x3e, 0x8e, 0xf4, 0x17, 0x15, 0xf6, 0x6b, 0x81, 0x53, 0x44, 0xa9, 0x19, + 0xa3, 0x11, 0x9b, 0x2c, 0xe9, 0x1c, 0x6d, 0x3b, 0x11, 0x09, 0x0e, 0x7b, 0x8e, 0xae, 0x28, 0x26, + 0xd8, 0x60, 0x88, 0x36, 0x53, 0x59, 0xb8, 0x97, 0x0f, 0x9e, 0x85, 0xcb, 0xea, 0x33, 0xe7, 0x5d, + 0x11, 0xfa, 0x9a, 0x05, 0x13, 0x41, 0x6a, 0xe6, 0x16, 0x93, 0x70, 0x93, 0xbf, 0x2a, 0xea, 0xe8, + 0xfe, 0xce, 0xf4, 0x44, 0xba, 0x0d, 0x67, 0xf8, 0xe7, 0xa9, 0xb4, 0xca, 0x3e, 0x55, 0x9a, 0xbe, + 0x7b, 0x7d, 0xb8, 0xdf, 0xdd, 0xeb, 0x28, 0x80, 0x61, 0x5e, 0x45, 0x56, 0x84, 0xdd, 0x1c, 0xb0, + 0x96, 0x91, 0x59, 0x8a, 0x96, 0xf3, 0xe3, 0x2d, 0x58, 0x70, 0x41, 0xb7, 0xcd, 0x24, 0xfd, 0xea, + 0xbe, 0xb3, 0x40, 0xc7, 0xfb, 0x25, 0xf3, 0xdb, 0xff, 0x67, 0x08, 0x8e, 0xcb, 0x11, 0x91, 0xc9, + 0x7a, 0x54, 0x3f, 0x72, 0xbe, 0xda, 0x56, 0x56, 0xfa, 0xf1, 0xaa, 0x04, 0x60, 0x8d, 0x43, 0xed, + 0xb1, 0x4e, 0x4c, 0x96, 0xdb, 0x24, 0x58, 0xf4, 0xd6, 0x62, 0x11, 0x20, 0xa3, 0x16, 0xca, 0x4d, + 0x0d, 0xc2, 0x26, 0x1e, 0xab, 0x24, 0xe0, 0x9a, 0xe5, 0x7c, 0x74, 0x25, 0x01, 0x61, 0xa8, 0x4a, + 0x38, 0xfa, 0xd1, 0xdc, 0x6b, 0x8a, 0x8a, 0x49, 0x75, 0xef, 0xc9, 0x51, 0xdc, 0xdf, 0xfd, 0x44, + 0xe8, 0xef, 0x5a, 0x70, 0x8a, 0xb7, 0xca, 0x91, 0xbc, 0xd9, 0x6e, 0x3a, 0x09, 0x89, 0x8b, 0xb9, + 0x5e, 0x32, 0xa7, 0x7f, 0xfa, 0xa8, 0x24, 0x8f, 0x2d, 0xce, 0xef, 0x0d, 0xfa, 0x92, 0x05, 0xc7, + 0xb6, 0x52, 0xe5, 0xf8, 0xa4, 0xea, 0x38, 0x68, 0xad, 0xaa, 0x14, 0x51, 0xbd, 0xd4, 0xd2, 0xed, + 0x31, 0xce, 0x72, 0xb7, 0xff, 0xd4, 0x02, 0x53, 0x8c, 0x1e, 0x7d, 0x15, 0xbf, 0xfd, 0x9b, 0x82, + 0xd2, 0xba, 0xac, 0xf4, 0xb5, 0x2e, 0x9f, 0x86, 0x72, 0xc7, 0x6b, 0x8a, 0xfd, 0x85, 0x0e, 0xc9, + 0x59, 0x98, 0xc7, 0xb4, 0xdd, 0xfe, 0xbf, 0x15, 0xed, 0x93, 0x10, 0x19, 0xe4, 0x7f, 0x21, 0x5e, + 0x3b, 0x50, 0x65, 0xba, 0xf9, 0x9b, 0xdf, 0xea, 0x29, 0xd3, 0x3d, 0xff, 0xf0, 0x85, 0x02, 0xf8, + 0x40, 0xf5, 0xab, 0xd2, 0x3d, 0xb2, 0x67, 0x95, 0xee, 0x2a, 0xdd, 0x8a, 0x31, 0x27, 0x63, 0x35, + 0xd5, 0xb9, 0xea, 0x55, 0xd1, 0xfe, 0x60, 0x67, 0xba, 0xfe, 0xf0, 0xdd, 0x93, 0x54, 0xb0, 0xe2, + 0x83, 0xbe, 0x0b, 0x6a, 0xf4, 0x37, 0x2b, 0x6c, 0x20, 0x36, 0x7b, 0x2f, 0x2b, 0x19, 0x2a, 0x01, + 0x85, 0x56, 0x4f, 0xd0, 0xfc, 0xd0, 0x36, 0xd4, 0x28, 0x22, 0x67, 0xce, 0xf7, 0x86, 0xef, 0x53, + 0x65, 0x06, 0x24, 0xe0, 0xc1, 0xce, 0xf4, 0xdc, 0xc3, 0x33, 0x57, 0x64, 0xb0, 0x66, 0x65, 0xa8, + 0xce, 0xd1, 0x7e, 0xaa, 0xd3, 0xfe, 0xb3, 0x21, 0x3d, 0xff, 0x45, 0x85, 0xf7, 0xbf, 0x10, 0xf3, + 0xff, 0xc5, 0xcc, 0xfc, 0x3f, 0xdf, 0x33, 0xff, 0x27, 0xe8, 0x98, 0xe5, 0xd4, 0x9b, 0x3f, 0x6a, + 0x63, 0x62, 0x6f, 0x9f, 0x05, 0xb3, 0xa2, 0x5e, 0xe9, 0x78, 0x11, 0x89, 0x57, 0xa2, 0x4e, 0xe0, + 0x05, 0x1b, 0x6c, 0x0a, 0x57, 0x4d, 0x2b, 0x2a, 0x05, 0xc6, 0x59, 0x7c, 0xf4, 0x3c, 0x54, 0xe9, + 0xbc, 0xb8, 0xed, 0x6c, 0xf3, 0x19, 0x68, 0x54, 0xd5, 0x6d, 0x88, 0x76, 0xac, 0x30, 0xd0, 0x26, + 0x9c, 0x95, 0x04, 0xe6, 0x89, 0x4f, 0xe8, 0x0b, 0xb1, 0x50, 0xe4, 0xa8, 0xc5, 0x13, 0x85, 0x78, + 0x34, 0x99, 0x3a, 0xef, 0xc0, 0xbb, 0xe0, 0xe2, 0x5d, 0x29, 0xd9, 0xbf, 0xcf, 0xe2, 0x57, 0x8c, + 0xba, 0x2f, 0x74, 0xf6, 0xf9, 0x5e, 0xcb, 0x93, 0xc5, 0x7f, 0xd5, 0xec, 0x5b, 0xa4, 0x8d, 0x98, + 0xc3, 0xd0, 0x5d, 0x18, 0x59, 0x73, 0xdc, 0xad, 0x70, 0x7d, 0xbd, 0x98, 0xab, 0xfb, 0xea, 0x9c, + 0x18, 0x2b, 0xfc, 0x3f, 0x22, 0xfe, 0x3c, 0xd0, 0x3f, 0xb1, 0xe4, 0xc6, 0xaf, 0x8d, 0x59, 0x8f, + 0x48, 0xbc, 0x29, 0x1c, 0x7b, 0xc6, 0xb5, 0x31, 0xac, 0x19, 0x4b, 0xb8, 0xfd, 0xdb, 0x15, 0x38, + 0x26, 0x63, 0x49, 0xaf, 0x7a, 0x31, 0x8b, 0x60, 0x31, 0x2f, 0x50, 0x29, 0xed, 0x79, 0x81, 0xca, + 0x87, 0x01, 0x9a, 0xa4, 0xed, 0x87, 0x5d, 0x66, 0x67, 0x0e, 0xed, 0xdb, 0xce, 0x54, 0x5b, 0x93, + 0x79, 0x45, 0x05, 0x1b, 0x14, 0x45, 0x71, 0x64, 0x7e, 0x1f, 0x4b, 0xa6, 0x38, 0xb2, 0x71, 0x17, + 0xe8, 0xf0, 0xd1, 0xde, 0x05, 0xea, 0xc1, 0x31, 0xde, 0x45, 0x55, 0x80, 0xe5, 0x21, 0xea, 0xac, + 0xb0, 0x14, 0xd6, 0xf9, 0x34, 0x19, 0x9c, 0xa5, 0x6b, 0x5e, 0xf4, 0x59, 0x3d, 0xea, 0x8b, 0x3e, + 0xdf, 0x06, 0x35, 0xf9, 0x9d, 0xe3, 0xa9, 0x9a, 0x2e, 0x12, 0x26, 0xa7, 0x41, 0x8c, 0x35, 0xbc, + 0xa7, 0xa6, 0x14, 0x3c, 0xaa, 0x9a, 0x52, 0xf6, 0x6b, 0x65, 0xba, 0x41, 0xe1, 0xfd, 0xda, 0xf7, + 0x3d, 0xb9, 0x57, 0x8d, 0x7b, 0x72, 0xf7, 0xf7, 0x3d, 0xab, 0x99, 0xfb, 0x74, 0xcf, 0xc2, 0x50, + 0xe2, 0x6c, 0xc8, 0x8c, 0x7b, 0x06, 0x5d, 0x75, 0x36, 0x62, 0xcc, 0x5a, 0xf7, 0x53, 0x4b, 0xfe, + 0x25, 0x18, 0x8f, 0xbd, 0x8d, 0xc0, 0x49, 0x3a, 0x11, 0x31, 0xce, 0x25, 0x75, 0x50, 0x97, 0x09, + 0xc4, 0x69, 0x5c, 0xf4, 0x29, 0x0b, 0x20, 0x22, 0x6a, 0xfb, 0x33, 0x5c, 0xc4, 0x1c, 0x52, 0x62, + 0x40, 0xd2, 0x35, 0x6b, 0x00, 0xa9, 0x6d, 0x8f, 0xc1, 0xd6, 0xfe, 0x8c, 0x05, 0x93, 0x3d, 0x4f, + 0xa1, 0x36, 0x0c, 0xbb, 0xec, 0x36, 0xe3, 0x62, 0xea, 0xdf, 0xa6, 0x6f, 0x46, 0xe6, 0x7a, 0x8c, + 0xb7, 0x61, 0xc1, 0xc7, 0xfe, 0xc5, 0x31, 0x38, 0xd9, 0x98, 0x5b, 0x92, 0xb7, 0xa0, 0x1d, 0x5a, + 0x09, 0x81, 0x3c, 0x1e, 0x47, 0x57, 0x42, 0xa0, 0x0f, 0x77, 0xdf, 0x28, 0x21, 0xe0, 0x1b, 0x25, + 0x04, 0xd2, 0xf9, 0xdc, 0xe5, 0x22, 0xf2, 0xb9, 0xf3, 0x7a, 0x30, 0x48, 0x3e, 0xf7, 0xa1, 0xd5, + 0x14, 0xd8, 0xb5, 0x43, 0xfb, 0xaa, 0x29, 0xa0, 0x0a, 0x2e, 0x14, 0x92, 0x3e, 0xda, 0xe7, 0x53, + 0xe5, 0x16, 0x5c, 0x50, 0xc9, 0xee, 0x3c, 0x35, 0x5a, 0x28, 0xbd, 0x97, 0x8b, 0xef, 0xc0, 0x00, + 0xc9, 0xee, 0x22, 0x3b, 0xdb, 0x2c, 0xb0, 0x30, 0x52, 0x44, 0x81, 0x85, 0xbc, 0xee, 0xec, 0x59, + 0x60, 0xe1, 0x25, 0x18, 0x77, 0xfd, 0x30, 0x20, 0x2b, 0x51, 0x98, 0x84, 0x6e, 0xe8, 0x8b, 0x1d, + 0x9b, 0xbe, 0x06, 0xd8, 0x04, 0xe2, 0x34, 0x6e, 0xbf, 0xea, 0x0c, 0xb5, 0x83, 0x56, 0x67, 0x80, + 0x47, 0x54, 0x9d, 0xc1, 0xa8, 0x3f, 0x30, 0x5a, 0x44, 0xfd, 0x81, 0xbc, 0x2f, 0x32, 0x50, 0xfd, + 0x81, 0xd7, 0x2d, 0x18, 0x77, 0xee, 0xb2, 0x7d, 0x0b, 0x97, 0xc2, 0xec, 0xb4, 0x6f, 0xf4, 0xe2, + 0x47, 0x0e, 0x61, 0xc2, 0xde, 0x6e, 0x68, 0x36, 0xf5, 0x49, 0x96, 0x13, 0x66, 0x36, 0xe1, 0x74, + 0x47, 0x0e, 0x52, 0xb3, 0xe0, 0xcb, 0x25, 0x78, 0xf3, 0x9e, 0x5d, 0x40, 0x77, 0x01, 0x12, 0x67, + 0x43, 0x4c, 0x54, 0x71, 0x26, 0x76, 0xc0, 0x38, 0xf4, 0x55, 0x49, 0x4f, 0xe4, 0xd3, 0x2a, 0xf2, + 0xd8, 0x60, 0xc5, 0xc2, 0xcf, 0x43, 0xbf, 0xa7, 0x74, 0x3d, 0x0e, 0x7d, 0x82, 0x19, 0x84, 0x1a, + 0x42, 0x11, 0xd9, 0xa0, 0xc6, 0x7d, 0x39, 0x6d, 0x08, 0x61, 0xd6, 0x8a, 0x05, 0x14, 0xbd, 0x00, + 0xa3, 0x8e, 0xef, 0xf3, 0xdc, 0x5e, 0x12, 0x8b, 0xfb, 0xb9, 0x75, 0xc1, 0x6a, 0x0d, 0xc2, 0x26, + 0x9e, 0xfd, 0x27, 0x25, 0x98, 0xde, 0x43, 0xa6, 0xf4, 0xd4, 0x74, 0xa8, 0x0c, 0x5c, 0xd3, 0x41, + 0xe4, 0x26, 0x0e, 0xf7, 0xc9, 0x4d, 0x7c, 0x01, 0x46, 0x13, 0xe2, 0xb4, 0x44, 0xe4, 0x6a, 0xb6, + 0x0e, 0xeb, 0xaa, 0x06, 0x61, 0x13, 0x8f, 0x4a, 0xb1, 0x09, 0xc7, 0x75, 0x49, 0x1c, 0xcb, 0xe4, + 0x43, 0xe1, 0x30, 0x2f, 0x2c, 0xb3, 0x91, 0x9d, 0x43, 0xcc, 0xa6, 0x58, 0xe0, 0x0c, 0xcb, 0xec, + 0x80, 0xd7, 0x06, 0x1c, 0xf0, 0x1f, 0x2f, 0xc1, 0xd3, 0xbb, 0x6a, 0xb7, 0x81, 0xf3, 0x42, 0x3b, + 0x31, 0x89, 0xb2, 0x13, 0xe7, 0x66, 0x4c, 0x22, 0xcc, 0x20, 0x7c, 0x94, 0xda, 0x6d, 0x95, 0x75, + 0x50, 0x7c, 0x22, 0x35, 0x1f, 0xa5, 0x14, 0x0b, 0x9c, 0x61, 0xf9, 0xb0, 0xd3, 0xf2, 0xb7, 0x87, + 0xe0, 0x99, 0x01, 0x6c, 0x80, 0x02, 0x13, 0xce, 0xd3, 0xc5, 0x14, 0xca, 0x8f, 0xa8, 0x98, 0xc2, + 0xc3, 0x0d, 0xd7, 0x1b, 0x35, 0x18, 0x06, 0x4a, 0x6c, 0xff, 0xc9, 0x12, 0x9c, 0xe9, 0x6f, 0xb0, + 0xa0, 0xef, 0x80, 0x63, 0x91, 0x0a, 0x35, 0x34, 0xeb, 0x30, 0x9c, 0xe0, 0xee, 0xb0, 0x14, 0x08, + 0x67, 0x71, 0xd1, 0x0c, 0x40, 0xdb, 0x49, 0x36, 0xe3, 0x4b, 0xf7, 0xbc, 0x38, 0x11, 0x85, 0x2b, + 0x27, 0xf8, 0x21, 0xae, 0x6c, 0xc5, 0x06, 0x06, 0x65, 0xc7, 0xfe, 0xcd, 0x87, 0x37, 0xc2, 0x84, + 0x3f, 0xc4, 0xb7, 0x9e, 0x27, 0xe4, 0xb5, 0xaf, 0x06, 0x08, 0x67, 0x71, 0x29, 0x3b, 0x16, 0x26, + 0xc0, 0x3b, 0x3a, 0xa4, 0x2b, 0x37, 0x2c, 0xaa, 0x56, 0x6c, 0x60, 0x64, 0x2b, 0x4c, 0x54, 0xf6, + 0xae, 0x30, 0x61, 0x7f, 0xae, 0x0c, 0xa7, 0xfb, 0x1a, 0xbc, 0x83, 0x89, 0xa9, 0xc7, 0xaf, 0xca, + 0xc3, 0x43, 0xae, 0xb0, 0xfd, 0x55, 0x07, 0x58, 0x81, 0x93, 0xe2, 0x96, 0xe8, 0xd9, 0xc8, 0xdd, + 0xf4, 0xb6, 0x49, 0x93, 0x4d, 0x1f, 0xb1, 0x26, 0x54, 0x72, 0xc0, 0xa5, 0x1c, 0x1c, 0x9c, 0xfb, + 0xa4, 0xfd, 0x8f, 0xca, 0xf9, 0x73, 0x57, 0xd4, 0x12, 0x78, 0xf8, 0xb2, 0x4b, 0x8f, 0xdf, 0x17, + 0xea, 0x29, 0x1f, 0x30, 0xb4, 0x8f, 0xf2, 0x01, 0x99, 0xcf, 0x5b, 0x19, 0xf0, 0xf3, 0x16, 0xff, + 0xc1, 0xfe, 0x69, 0xa5, 0xef, 0x07, 0xa3, 0x9b, 0xf8, 0x81, 0x0e, 0x44, 0xe6, 0xe1, 0xb8, 0x17, + 0x30, 0xda, 0x8d, 0xce, 0x9a, 0xa8, 0xb7, 0xc8, 0x8b, 0x8b, 0xab, 0x8c, 0xb2, 0x85, 0x0c, 0x1c, + 0xf7, 0x3c, 0xf1, 0x18, 0x16, 0x88, 0x78, 0xc8, 0x8f, 0xb4, 0x3f, 0xed, 0xb2, 0x0c, 0xa7, 0xe4, + 0x50, 0x6c, 0x3a, 0x11, 0x69, 0x0a, 0x83, 0x20, 0x16, 0x39, 0x84, 0xa7, 0x79, 0x1e, 0x62, 0x0e, + 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0x0c, 0x1d, 0xb6, 0x3d, 0x57, 0x6c, 0x57, 0xf5, 0xcd, 0xd0, 0xb4, + 0x11, 0x73, 0x98, 0xd6, 0x69, 0xb5, 0x23, 0xd1, 0x69, 0x3c, 0x0d, 0x29, 0x67, 0xe2, 0x42, 0x36, + 0x0d, 0x29, 0x6f, 0xe2, 0xe6, 0x3d, 0x69, 0x7f, 0x18, 0x6a, 0xea, 0x0b, 0xf2, 0x0c, 0x11, 0xb5, + 0x10, 0x7b, 0x32, 0x44, 0xd4, 0x2a, 0x34, 0xb0, 0xe8, 0x7c, 0xa3, 0xdb, 0xb3, 0x8c, 0x44, 0xa1, + 0x6f, 0x40, 0xdb, 0xed, 0x77, 0xc2, 0x98, 0xf2, 0x80, 0x0e, 0x7a, 0xe3, 0xb7, 0xfd, 0xe7, 0x25, + 0xc8, 0x5c, 0x6a, 0x89, 0xee, 0x41, 0xad, 0x19, 0x75, 0x79, 0x63, 0x31, 0xe5, 0xf2, 0xe7, 0x25, + 0x39, 0x7d, 0x52, 0xa8, 0x9a, 0xb0, 0x66, 0x86, 0x3e, 0xc6, 0x2b, 0xd2, 0x0b, 0xd6, 0xa5, 0x22, + 0xca, 0x8e, 0x34, 0x14, 0x3d, 0xf3, 0x2a, 0x5f, 0xd9, 0x86, 0x0d, 0x7e, 0x28, 0x81, 0xda, 0xa6, + 0xbc, 0xbc, 0xb3, 0x18, 0x91, 0xac, 0xee, 0x02, 0xe5, 0x86, 0xa9, 0xfa, 0x8b, 0x35, 0x23, 0xfb, + 0x0f, 0x4a, 0x70, 0x32, 0xfd, 0x01, 0xc4, 0xc9, 0xee, 0x4f, 0x59, 0xf0, 0xa4, 0xef, 0xc4, 0x49, + 0xa3, 0xc3, 0xb6, 0x47, 0xeb, 0x1d, 0x7f, 0x39, 0x73, 0x89, 0xc1, 0x41, 0x5d, 0x4c, 0x8a, 0x70, + 0xf6, 0xb2, 0xd7, 0xfa, 0x53, 0xf7, 0x77, 0xa6, 0x9f, 0x5c, 0xcc, 0x67, 0x8e, 0xfb, 0xf5, 0x0a, + 0xbd, 0x66, 0xc1, 0x71, 0xb7, 0x13, 0x45, 0x24, 0x48, 0x74, 0x57, 0xf9, 0x57, 0xbc, 0x51, 0xc8, + 0x40, 0xea, 0x0e, 0x9e, 0xa4, 0x22, 0x7a, 0x2e, 0xc3, 0x0b, 0xf7, 0x70, 0xb7, 0x7f, 0x80, 0x5a, + 0xa6, 0x7d, 0xdf, 0xf3, 0x2f, 0xd9, 0xed, 0xb4, 0x7f, 0x34, 0x0c, 0xe3, 0xa9, 0x1b, 0x1a, 0x52, + 0x47, 0x9c, 0xd6, 0x9e, 0x47, 0x9c, 0x2c, 0x8f, 0xb6, 0x13, 0x88, 0xdb, 0x13, 0xcd, 0x3c, 0xda, + 0x4e, 0x40, 0x30, 0x87, 0x89, 0x21, 0xc5, 0x9d, 0x40, 0x9c, 0xb9, 0x9a, 0x43, 0x8a, 0x3b, 0x01, + 0x16, 0x50, 0xf4, 0x09, 0x0b, 0xc6, 0xd8, 0xe2, 0x13, 0x67, 0xc9, 0x42, 0x45, 0x5e, 0x2b, 0x60, + 0xb9, 0xcb, 0x5b, 0x49, 0x58, 0xf0, 0xad, 0xd9, 0x82, 0x53, 0x1c, 0xd1, 0xa7, 0x2d, 0xa8, 0xa9, + 0x5b, 0xc2, 0xc5, 0x89, 0x50, 0xa3, 0xd8, 0x0b, 0x30, 0x32, 0x52, 0x4f, 0xdd, 0x44, 0x80, 0x35, + 0x63, 0x14, 0xab, 0xd3, 0xdb, 0x91, 0xc3, 0x39, 0xbd, 0x85, 0x9c, 0x93, 0xdb, 0xb7, 0x41, 0xad, + 0x25, 0xb2, 0x52, 0xf9, 0x81, 0xaa, 0xbc, 0xf7, 0x48, 0x36, 0x62, 0x0d, 0xa7, 0x5b, 0x9c, 0x98, + 0xbd, 0x58, 0x62, 0x9c, 0x80, 0xb2, 0x2d, 0x4e, 0x43, 0x37, 0x63, 0x13, 0xc7, 0x3c, 0xae, 0x85, + 0x47, 0x7a, 0x5c, 0x3b, 0xba, 0xc7, 0x71, 0x6d, 0x03, 0x4e, 0x39, 0x9d, 0x24, 0xbc, 0x4a, 0x1c, + 0x7f, 0x36, 0x49, 0x48, 0xab, 0x9d, 0xc4, 0xfc, 0x52, 0x8f, 0x31, 0xe6, 0xf8, 0x56, 0xe1, 0x82, + 0x0d, 0xe2, 0xaf, 0xf7, 0x20, 0xe1, 0xfc, 0x67, 0xed, 0x7f, 0x6c, 0xc1, 0xa9, 0xdc, 0xa9, 0xf0, + 0xf8, 0x26, 0x6a, 0xd8, 0x3f, 0x5c, 0x81, 0x13, 0x39, 0xf7, 0xb7, 0xa0, 0xae, 0xb9, 0x48, 0xac, + 0x22, 0x62, 0x1e, 0xd3, 0x21, 0x7c, 0xf2, 0xdb, 0xe4, 0xac, 0x8c, 0xfd, 0x45, 0x60, 0xe8, 0x28, + 0x88, 0xf2, 0xd1, 0x46, 0x41, 0x18, 0x73, 0x7d, 0xe8, 0x91, 0xce, 0xf5, 0xca, 0x1e, 0x73, 0xfd, + 0xa7, 0x2d, 0x98, 0x6a, 0xf5, 0xb9, 0x94, 0x51, 0x9c, 0xa2, 0xdd, 0x3a, 0x9c, 0x2b, 0x1f, 0xeb, + 0x67, 0xef, 0xef, 0x4c, 0xf7, 0xbd, 0x0b, 0x13, 0xf7, 0xed, 0x95, 0xfd, 0xb5, 0x32, 0x30, 0x7b, + 0x8d, 0xd5, 0xe8, 0xef, 0xa2, 0x8f, 0x9b, 0xd7, 0x41, 0x59, 0x45, 0x5d, 0x59, 0xc4, 0x89, 0xab, + 0xeb, 0xa4, 0xf8, 0x08, 0xe6, 0xdd, 0x2e, 0x95, 0x95, 0x84, 0xa5, 0x01, 0x24, 0xa1, 0x2f, 0xef, + 0xdd, 0x2a, 0x17, 0x7f, 0xef, 0x56, 0x2d, 0x7b, 0xe7, 0xd6, 0xee, 0x9f, 0x78, 0xe8, 0xb1, 0xfc, + 0xc4, 0xff, 0xcc, 0xe2, 0x82, 0x27, 0xf3, 0x15, 0xd0, 0xb4, 0x34, 0x37, 0xf8, 0xf5, 0x3c, 0xb5, + 0x1e, 0x53, 0xe3, 0x39, 0xa8, 0xc6, 0x42, 0x2a, 0x0b, 0x93, 0x84, 0xed, 0x8b, 0xa5, 0xa4, 0xc6, + 0x0a, 0x8a, 0x66, 0x00, 0x1c, 0xdf, 0x0f, 0xef, 0x5e, 0x6a, 0xb5, 0x93, 0xae, 0x34, 0x4c, 0xe8, + 0x56, 0x60, 0x56, 0xb5, 0x62, 0x03, 0x03, 0xbd, 0x05, 0x46, 0x78, 0x0d, 0x96, 0xa6, 0xf0, 0x63, + 0x8d, 0xd2, 0xc5, 0xc7, 0x2b, 0xb4, 0x34, 0xb1, 0x84, 0xd9, 0x9b, 0x60, 0xec, 0x25, 0x1e, 0xfe, + 0xbe, 0xff, 0xbd, 0xaf, 0xf0, 0xb5, 0xff, 0x76, 0x49, 0xb0, 0xe2, 0x7b, 0x03, 0x1d, 0x30, 0x69, + 0xed, 0x33, 0x60, 0xf2, 0x63, 0x00, 0x6e, 0xd8, 0x6a, 0xd3, 0xfd, 0xf7, 0x6a, 0x58, 0xcc, 0x16, + 0x6b, 0x4e, 0xd1, 0xd3, 0x5b, 0x2c, 0xdd, 0x86, 0x0d, 0x7e, 0x29, 0x81, 0x5e, 0xde, 0x53, 0xa0, + 0xa7, 0x64, 0xdb, 0xd0, 0xee, 0xb2, 0xcd, 0xfe, 0x13, 0x0b, 0x52, 0xb6, 0x1e, 0x6a, 0x43, 0x85, + 0x76, 0xb7, 0x2b, 0xc4, 0xc4, 0x72, 0x71, 0x86, 0x25, 0x95, 0xcf, 0x62, 0xed, 0xb1, 0x9f, 0x98, + 0x33, 0x42, 0xbe, 0x08, 0x0e, 0x2d, 0x64, 0xcb, 0x63, 0x32, 0xbc, 0x1a, 0x86, 0x5b, 0x3c, 0x70, + 0x4a, 0x07, 0x9a, 0xda, 0x2f, 0xc2, 0x64, 0x4f, 0xa7, 0xa8, 0x79, 0xc1, 0x4a, 0xc2, 0x88, 0x35, + 0xa3, 0xcc, 0x0b, 0x56, 0x0c, 0x05, 0x73, 0x98, 0xfd, 0x93, 0x16, 0x1c, 0xcf, 0x92, 0x47, 0xaf, + 0x5b, 0x30, 0x19, 0x67, 0xe9, 0x1d, 0xd6, 0xd8, 0xa9, 0x24, 0x91, 0x1e, 0x10, 0xee, 0xed, 0x84, + 0xfd, 0x5f, 0x85, 0x0e, 0xb8, 0xed, 0x05, 0xcd, 0xf0, 0xae, 0xb2, 0x8e, 0xac, 0xbe, 0xd6, 0xd1, + 0xf3, 0x50, 0x8d, 0xdd, 0x4d, 0xd2, 0xec, 0xf8, 0x3d, 0xa5, 0x34, 0x1a, 0xa2, 0x1d, 0x2b, 0x0c, + 0x56, 0x39, 0xa0, 0x23, 0x76, 0xab, 0x99, 0x49, 0x39, 0x2f, 0xda, 0xb1, 0xc2, 0x40, 0xef, 0x82, + 0x31, 0xe3, 0x25, 0xe5, 0xbc, 0x64, 0x5b, 0x0d, 0x43, 0x6f, 0xc7, 0x38, 0x85, 0x45, 0x05, 0x90, + 0xb2, 0xb4, 0xa4, 0x9e, 0x66, 0x02, 0x48, 0x89, 0xc3, 0x18, 0x1b, 0x18, 0xac, 0x4e, 0x87, 0xdf, + 0x89, 0xd9, 0xa9, 0xf9, 0xb0, 0xbe, 0xa9, 0x66, 0x4e, 0xb4, 0x61, 0x05, 0x45, 0x17, 0x01, 0x5a, + 0x4e, 0xd0, 0x71, 0x7c, 0x3a, 0x42, 0xc2, 0x05, 0xa7, 0x96, 0xe1, 0x92, 0x82, 0x60, 0x03, 0x8b, + 0xbe, 0x71, 0xe2, 0xb5, 0xc8, 0x07, 0xc2, 0x40, 0x06, 0xf5, 0xeb, 0x40, 0x0a, 0xd1, 0x8e, 0x15, + 0x06, 0x7a, 0x11, 0x46, 0x9d, 0xa0, 0xc9, 0xcd, 0xc2, 0x30, 0x12, 0xe7, 0xb1, 0x6a, 0xcf, 0x79, + 0x33, 0x26, 0xb3, 0x1a, 0x8a, 0x4d, 0xd4, 0xec, 0x35, 0x3d, 0x30, 0xe0, 0x75, 0xa0, 0x7f, 0x6c, + 0xc1, 0x31, 0x5d, 0xd0, 0x8b, 0x79, 0xea, 0x52, 0x2e, 0x4a, 0x6b, 0x4f, 0x17, 0x65, 0xba, 0xfe, + 0x4a, 0x69, 0xa0, 0xfa, 0x2b, 0x66, 0x69, 0x94, 0xf2, 0xae, 0xa5, 0x51, 0xde, 0x02, 0x23, 0x5b, + 0xa4, 0x6b, 0xd4, 0x50, 0x61, 0xda, 0xe1, 0x3a, 0x6f, 0xc2, 0x12, 0x86, 0x6c, 0x18, 0x76, 0x1d, + 0x55, 0x9c, 0x75, 0x4c, 0xc4, 0xe1, 0xcd, 0x32, 0x24, 0x01, 0xb1, 0x97, 0xa1, 0xa6, 0x02, 0x18, + 0xa4, 0x7f, 0xcf, 0xca, 0xf7, 0xef, 0xd1, 0xb5, 0x6d, 0xc4, 0x62, 0xe8, 0xb5, 0xcd, 0x22, 0x38, + 0x44, 0x68, 0x46, 0x7d, 0xed, 0xd7, 0xbe, 0x7e, 0xee, 0x4d, 0xbf, 0xf5, 0xf5, 0x73, 0x6f, 0xfa, + 0xfd, 0xaf, 0x9f, 0x7b, 0xd3, 0x27, 0xee, 0x9f, 0xb3, 0x7e, 0xed, 0xfe, 0x39, 0xeb, 0xb7, 0xee, + 0x9f, 0xb3, 0x7e, 0xff, 0xfe, 0x39, 0xeb, 0x6b, 0xf7, 0xcf, 0x59, 0xaf, 0xfd, 0xa7, 0x73, 0x6f, + 0xfa, 0xc0, 0xb7, 0xef, 0x96, 0xbc, 0xb0, 0xfd, 0x4e, 0x96, 0xb1, 0x40, 0xd7, 0xf3, 0x05, 0x63, + 0x12, 0x5f, 0x90, 0xeb, 0xf9, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x68, 0xd8, 0xe3, 0x93, + 0x0a, 0x01, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -15207,6 +15210,14 @@ func (m *SCMProviderGeneratorGitea) MarshalToSizedBuffer(dAtA []byte) (int, erro var l int _ = l i-- + if m.ExcludeArchivedRepos { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + i-- if m.Insecure { dAtA[i] = 1 } else { @@ -15268,6 +15279,14 @@ func (m *SCMProviderGeneratorGithub) MarshalToSizedBuffer(dAtA []byte) (int, err var l int _ = l i-- + if m.ExcludeArchivedRepos { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + i-- if m.AllBranches { dAtA[i] = 1 } else { @@ -15325,6 +15344,14 @@ func (m *SCMProviderGeneratorGitlab) MarshalToSizedBuffer(dAtA []byte) (int, err _ = i var l int _ = l + i-- + if m.IncludeArchivedRepos { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 if m.CARef != nil { { size, err := m.CARef.MarshalToSizedBuffer(dAtA[:i]) @@ -19884,6 +19911,7 @@ func (m *SCMProviderGeneratorGitea) Size() (n int) { } n += 2 n += 2 + n += 2 return n } @@ -19904,6 +19932,7 @@ func (m *SCMProviderGeneratorGithub) Size() (n int) { l = len(m.AppSecretName) n += 1 + l + sovGenerated(uint64(l)) n += 2 + n += 2 return n } @@ -19933,6 +19962,7 @@ func (m *SCMProviderGeneratorGitlab) Size() (n int) { l = m.CARef.Size() n += 1 + l + sovGenerated(uint64(l)) } + n += 2 return n } @@ -22914,6 +22944,7 @@ func (this *SCMProviderGeneratorGitea) String() string { `TokenRef:` + strings.Replace(this.TokenRef.String(), "SecretRef", "SecretRef", 1) + `,`, `AllBranches:` + fmt.Sprintf("%v", this.AllBranches) + `,`, `Insecure:` + fmt.Sprintf("%v", this.Insecure) + `,`, + `ExcludeArchivedRepos:` + fmt.Sprintf("%v", this.ExcludeArchivedRepos) + `,`, `}`, }, "") return s @@ -22928,6 +22959,7 @@ func (this *SCMProviderGeneratorGithub) String() string { `TokenRef:` + strings.Replace(this.TokenRef.String(), "SecretRef", "SecretRef", 1) + `,`, `AppSecretName:` + fmt.Sprintf("%v", this.AppSecretName) + `,`, `AllBranches:` + fmt.Sprintf("%v", this.AllBranches) + `,`, + `ExcludeArchivedRepos:` + fmt.Sprintf("%v", this.ExcludeArchivedRepos) + `,`, `}`, }, "") return s @@ -22946,6 +22978,7 @@ func (this *SCMProviderGeneratorGitlab) String() string { `IncludeSharedProjects:` + valueToStringGenerated(this.IncludeSharedProjects) + `,`, `Topic:` + fmt.Sprintf("%v", this.Topic) + `,`, `CARef:` + strings.Replace(this.CARef.String(), "ConfigMapKeyRef", "ConfigMapKeyRef", 1) + `,`, + `IncludeArchivedRepos:` + fmt.Sprintf("%v", this.IncludeArchivedRepos) + `,`, `}`, }, "") return s @@ -54622,6 +54655,26 @@ func (m *SCMProviderGeneratorGitea) Unmarshal(dAtA []byte) error { } } m.Insecure = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExcludeArchivedRepos", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ExcludeArchivedRepos = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -54824,6 +54877,26 @@ func (m *SCMProviderGeneratorGithub) Unmarshal(dAtA []byte) error { } } m.AllBranches = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExcludeArchivedRepos", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ExcludeArchivedRepos = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -55123,6 +55196,26 @@ func (m *SCMProviderGeneratorGitlab) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeArchivedRepos", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeArchivedRepos = bool(v != 0) default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 2c3813924d..3640b3c378 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -2518,6 +2518,9 @@ message SCMProviderGeneratorGitea { // Allow self-signed TLS / Certificates; default: false optional bool insecure = 5; + + // Exclude repositories that are archived. + optional bool excludeArchivedRepos = 6; } // SCMProviderGeneratorGithub defines connection info specific to GitHub. @@ -2536,6 +2539,9 @@ message SCMProviderGeneratorGithub { // Scan all branches instead of just the default branch. optional bool allBranches = 5; + + // Exclude repositories that are archived. + optional bool excludeArchivedRepos = 6; } // SCMProviderGeneratorGitlab defines connection info specific to Gitlab. @@ -2566,6 +2572,9 @@ message SCMProviderGeneratorGitlab { // ConfigMap key holding the trusted certificates optional ConfigMapKeyRef caRef = 9; + + // Include repositories that are archived. + optional bool includeArchivedRepos = 10; } // SecretRef struct for a reference to a secret key.