diff --git a/USERS.md b/USERS.md index e05625d186fa3..52232774e8071 100644 --- a/USERS.md +++ b/USERS.md @@ -95,6 +95,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Ibotta](https://home.ibotta.com) 1. [IITS-Consulting](https://iits-consulting.de) 1. [imaware](https://imaware.health) +1. [Indeed](https://indeed.com) 1. [Index Exchange](https://www.indexexchange.com/) 1. [InsideBoard](https://www.insideboard.com) 1. [Intuit](https://www.intuit.com/) diff --git a/applicationset/controllers/applicationset_controller.go b/applicationset/controllers/applicationset_controller.go index 74e627316d045..45280da91f12b 100644 --- a/applicationset/controllers/applicationset_controller.go +++ b/applicationset/controllers/applicationset_controller.go @@ -16,6 +16,9 @@ package controllers import ( "context" + "crypto/md5" + "encoding/hex" + "encoding/json" "fmt" "time" @@ -26,6 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" @@ -71,6 +75,8 @@ type ApplicationSetReconciler struct { KubeClientset kubernetes.Interface utils.Policy utils.Renderer + EnableProgressiveRollouts bool + ApplicationProgressingTimeout uint } // +kubebuilder:rbac:groups=argoproj.io,resources=applicationsets,verbs=get;list;watch;create;update;patch;delete @@ -137,6 +143,51 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque return ctrl.Result{RequeueAfter: ReconcileRequeueOnValidationError}, nil } + applications, err := r.getCurrentApplications(ctx, applicationSetInfo) + if err != nil { + return ctrl.Result{}, err + } + + appSyncMap := map[string]bool{} + appMap := map[string]argov1alpha1.Application{} + + if r.EnableProgressiveRollouts && applicationSetInfo.StrategyEnabled() { + appHashMap := map[string]string{} + for _, app := range applications { + appMap[app.Name] = app + hash, err := hashApplication(app) + if err != nil { + log.Warnf("could not compute a hash value for Application '%v', will have to assume that the Application had changes", app.Name) + } + appHashMap[app.Name] = hash + } + + _, err = r.updateApplicationSetApplicationStatus(ctx, &applicationSetInfo, applications, appHashMap) + if err != nil { + return ctrl.Result{}, err + } + + appDependencyList, appStepMap, err := r.buildAppDependencyList(applicationSetInfo, desiredApplications) + if err != nil { + return ctrl.Result{}, err + } + + appSyncMap, err = r.buildAppSyncMap(applicationSetInfo, appDependencyList, appHashMap, appMap) + if err != nil { + return ctrl.Result{}, err + } + + _, err = r.updateApplicationSetApplicationStatusProgress(ctx, &applicationSetInfo, appSyncMap, appStepMap, appHashMap, appMap) + if err != nil { + return ctrl.Result{}, err + } + + _, err = r.updateApplicationSetApplicationStatusConditions(ctx, &applicationSetInfo) + if err != nil { + return ctrl.Result{}, err + } + } + var validApps []argov1alpha1.Application for i := range desiredApplications { if validateErrors[i] == nil { @@ -165,6 +216,40 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque ) } + if r.EnableProgressiveRollouts && applicationSetInfo.StrategyEnabled() { + // filter down valid applications if rollout strategy is enabled + strategy := applicationSetInfo.Spec.Strategy + + var rolloutApps []argov1alpha1.Application + if strategy.Type == "RollingUpdate" { + for i := range validApps { + // check appSyncMap to determine which Applications are ready to be updated and which should be skipped + if !appSyncMap[validApps[i].Name] { + log.Infof("skipping application generation, waiting for previous rollouts to complete before updating: %v", validApps[i].Name) + continue + } + rolloutApps = append(rolloutApps, validApps[i]) + } + } else if strategy.Type == "RollingSync" { + for i := range validApps { + // ensure that Applications generated with RollingSync do not have an automated sync policy, since the AppSet controller will handle this instead + if validApps[i].Spec.SyncPolicy != nil && validApps[i].Spec.SyncPolicy.Automated != nil { + validApps[i].Spec.SyncPolicy.Automated = nil + log.Warnf("application %v has an automated sync policy, this is disabled when using the RollingSync strategy", validApps[i].Name) + } + + log.Infof("sync for application?: %v, sync: %v, status: %v", validApps[i].Name, appSyncMap[validApps[i].Name], appMap[validApps[i].Name].Status.Sync.Status) + // check appSyncMap to determine which Applications are ready to be updated and which should be skipped + if appSyncMap[validApps[i].Name] && appMap[validApps[i].Name].Status.Sync.Status == "OutOfSync" { + log.Infof("triggering sync for application: %v", validApps[i].Name) + validApps[i], _ = syncApplication(validApps[i]) + } + rolloutApps = append(rolloutApps, validApps[i]) + } + } + validApps = rolloutApps + } + if r.Policy.Update() { err = r.createOrUpdateInCluster(ctx, applicationSetInfo, validApps) if err != nil { @@ -353,6 +438,91 @@ func (r *ApplicationSetReconciler) setApplicationSetStatusCondition(ctx context. return nil } +func findApplicationStatusIndex(appStatuses []argov1alpha1.ApplicationSetApplicationStatus, application string) int { + for i := range appStatuses { + if appStatuses[i].Application == application { + return i + } + } + return -1 +} + +func (r *ApplicationSetReconciler) setApplicationSetApplicationStatus(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, applicationStatuses []argov1alpha1.ApplicationSetApplicationStatus) error { + + needToUpdateStatus := false + for i := range applicationStatuses { + appStatus := applicationStatuses[i] + idx := findApplicationStatusIndex(applicationSet.Status.ApplicationStatus, appStatus.Application) + if idx == -1 { + needToUpdateStatus = true + break + } + currentStatus := applicationSet.Status.ApplicationStatus[idx] + if currentStatus.Message != appStatus.Message || currentStatus.Status != appStatus.Status || currentStatus.ObservedHash != appStatus.ObservedHash { + needToUpdateStatus = true + break + } + } + + if needToUpdateStatus { + // fetch updated Application Set object before updating it + namespacedName := types.NamespacedName{Namespace: applicationSet.Namespace, Name: applicationSet.Name} + if err := r.Get(ctx, namespacedName, applicationSet); err != nil { + if client.IgnoreNotFound(err) != nil { + return nil + } + return fmt.Errorf("error fetching updated application set: %v", err) + } + + for i := range applicationStatuses { + applicationSet.Status.SetApplicationStatus(applicationStatuses[i]) + } + + // Update the newly fetched object with new set of ApplicationStatus + err := r.Client.Status().Update(ctx, applicationSet) + if err != nil { + + log.Errorf("unable to set application set status: %v", err) + return fmt.Errorf("unable to set application set status: %v", err) + } + + if err := r.Get(ctx, namespacedName, applicationSet); err != nil { + if client.IgnoreNotFound(err) != nil { + return nil + } + return fmt.Errorf("error fetching updated application set: %v", err) + } + } + + return nil +} + +// used by the RollingSync Progressive Rollout strategy to trigger a sync of a particular Application resource +func syncApplication(application argov1alpha1.Application) (argov1alpha1.Application, error) { + + operation := argov1alpha1.Operation{ + InitiatedBy: argov1alpha1.OperationInitiator{ + Username: "applicationset-controller", + Automated: true, + }, + Info: []*argov1alpha1.Info{ + { + Name: "Reason", + Value: "RollingSync triggered a sync of this Application resource.", + }, + }, + Sync: &argov1alpha1.SyncOperation{}, + } + + if application.Spec.SyncPolicy != nil && application.Spec.SyncPolicy.Retry != nil { + operation.Retry = *application.Spec.SyncPolicy.Retry + } + + application.Operation = &operation + + return application, nil +} + // validateGeneratedApplications uses the Argo CD validation functions to verify the correctness of the // generated applications. func (r *ApplicationSetReconciler) validateGeneratedApplications(ctx context.Context, desiredApplications []argov1alpha1.Application, applicationSetInfo argov1alpha1.ApplicationSet, namespace string) (map[int]error, error) { @@ -531,6 +701,10 @@ func (r *ApplicationSetReconciler) createOrUpdateInCluster(ctx context.Context, // Copy only the Application/ObjectMeta fields that are significant, from the generatedApp found.Spec = generatedApp.Spec + if generatedApp.Operation != nil { + found.Operation = generatedApp.Operation + } + // Preserve specially treated argo cd annotations: // * https://github.com/argoproj/applicationset/issues/180 // * https://github.com/argoproj/argo-cd/issues/10500 @@ -729,4 +903,353 @@ func (r *ApplicationSetReconciler) removeFinalizerOnInvalidDestination(ctx conte return nil } +// computes a deterministic hash representing the Application spec +func hashApplication(application argov1alpha1.Application) (string, error) { + // ensure that the status and other dynamic fields are not included in the hash + appToHash := argov1alpha1.Application{} + appToHash.Annotations = application.Annotations + appToHash.Labels = application.Labels + appToHash.Name = application.Name + appToHash.Namespace = application.Namespace + appToHash.Spec = application.Spec + + jsonString, err := json.Marshal(appToHash) + if err != nil { + return "", err + } + + hash := md5.Sum(jsonString) + hashString := hex.EncodeToString(hash[:]) + return hashString, nil +} + +// this list tracks which Applications belong to each RollingUpdate step +func (r *ApplicationSetReconciler) buildAppDependencyList(applicationSet argov1alpha1.ApplicationSet, applications []argov1alpha1.Application) ([][]string, map[string]int, error) { + + if !applicationSet.StrategyEnabled() { + return [][]string{}, map[string]int{}, nil + } + + steps := applicationSet.Spec.Strategy.GetRolloutSteps() + + appDependencyList := make([][]string, 0) + for range steps { + appDependencyList = append(appDependencyList, make([]string, 0)) + } + + appStepMap := map[string]int{} + + // use applicationLabelSelectors to filter generated Applications into steps and status by name + for _, app := range applications { + for i, step := range steps { + + selected := true // default to true, assuming the current Application is a match for the given step matchExpression + for _, matchExpression := range step.MatchExpressions { + + if val, ok := app.Labels[matchExpression.Key]; ok { + if matchExpression.Operator == "In" { + valueMatched := false + for _, value := range matchExpression.Values { + if val == value { + valueMatched = true + break + } + } + // none of the matchExpression values was a match with the Applications labels + if !valueMatched { + selected = false + break + } + // handle invalid operator selection + } else { + log.Warnf("skipping AppSet rollingUpdate step Application selection for '%v', invalid matchExpression operate provided: '%v' ", applicationSet.Name, matchExpression.Operator) + selected = false + break + } + // no matching label key found for the current Application + } else { + selected = false + break + } + } + + if selected { + appDependencyList[i] = append(appDependencyList[i], app.Name) + if val, ok := appStepMap[app.Name]; ok { + log.Warnf("AppSet '%v' has a invalid matchExpression that selects Application '%v' label twice, in steps %v and %v", applicationSet.Name, app.Name, val, i) + } else { + appStepMap[app.Name] = i + } + } + } + } + + return appDependencyList, appStepMap, nil +} + +// this map is used to determine which stage of Applications are ready to be updated in the reconciler loop +func (r *ApplicationSetReconciler) buildAppSyncMap(applicationSet argov1alpha1.ApplicationSet, appDependencyList [][]string, appHashMap map[string]string, appMap map[string]argov1alpha1.Application) (map[string]bool, error) { + appSyncMap := map[string]bool{} + syncEnabled := true + + // healthy stages and the first non-healthy stage should have sync enabled + // every stage after should have sync disabled + + for i := range appDependencyList { + // set the syncEnabled boolean for every Application in the current step + for _, appName := range appDependencyList[i] { + appSyncMap[appName] = syncEnabled + } + + // detect if we need to halt before progressing to the next step + for _, appName := range appDependencyList[i] { + + idx := findApplicationStatusIndex(applicationSet.Status.ApplicationStatus, appName) + if idx == -1 { + // no Application status found, likely because the Application is being newly created + syncEnabled = false + break + } + + appStatus := applicationSet.Status.ApplicationStatus[idx] + // we still need to complete the current step if the Application is not yet Healthy or there are still pending Application changes + if applicationSet.Spec.Strategy.Type == "RollingUpdate" { + hashOutdated := appHashMap[appName] != appStatus.ObservedHash || appHashMap[appName] == "" + if appStatus.Status != "Healthy" || hashOutdated { + syncEnabled = false + break + } + } else if applicationSet.Spec.Strategy.Type == "RollingSync" { + if app, ok := appMap[appName]; ok { + syncStatusString := string(app.Status.Sync.Status) + + // we still need to complete the current step if the Application is not yet Healthy or there are still pending Application changes + if appStatus.Status != "Healthy" || syncStatusString == "OutOfSync" { + syncEnabled = false + break + } + } else { + syncEnabled = false + break + } + } + } + } + + return appSyncMap, nil +} + +// check the status of each Application's status and promote Applications to the next status if needed +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatus(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, applications []argov1alpha1.Application, appHashMap map[string]string) ([]argov1alpha1.ApplicationSetApplicationStatus, error) { + + now := metav1.Now() + appStatuses := make([]argov1alpha1.ApplicationSetApplicationStatus, 0, len(applications)) + + for _, app := range applications { + + statusString := string(app.Status.Health.Status) + syncStatusString := string(app.Status.Sync.Status) + + idx := findApplicationStatusIndex(applicationSet.Status.ApplicationStatus, app.Name) + + if idx == -1 { + // AppStatus not found, set default status of "Waiting" + appStatuses = append(appStatuses, argov1alpha1.ApplicationSetApplicationStatus{ + Application: app.Name, + LastTransitionTime: &now, + Message: "No Application status found, defaulting status to Waiting.", + ObservedHash: "", + Status: "Waiting", + }) + } else { + // we have an existing AppStatus + currentAppStatus := applicationSet.Status.ApplicationStatus[idx] + + appOutdated := false + if applicationSet.Spec.Strategy.Type == "RollingUpdate" { + appOutdated = appHashMap[app.Name] != currentAppStatus.ObservedHash || appHashMap[app.Name] == "" + } else if applicationSet.Spec.Strategy.Type == "RollingSync" { + appOutdated = syncStatusString == "OutOfSync" && currentAppStatus.Status != "Pending" + } + + if appOutdated && currentAppStatus.Status != "Waiting" { + log.Infof("Application %v is outdated, updating its ApplicationSet status to Waiting", app.Name) + currentAppStatus.LastTransitionTime = &now + currentAppStatus.Status = "Waiting" + currentAppStatus.Message = "Application has pending changes, setting status to Waiting." + } + + if currentAppStatus.Status == "Pending" { + if statusString == "Progressing" { + log.Infof("Application %v has entered Progressing status, updating its ApplicationSet status to Progressing", app.Name) + currentAppStatus.LastTransitionTime = &now + currentAppStatus.Status = statusString + currentAppStatus.Message = "Application resource became Progressing, updating status from Pending to Progressing." + } else { + duration := now.Sub(currentAppStatus.LastTransitionTime.Time) + log.Infof("%v pending duration seconds = %v", app.Name, duration.Seconds()) + // handle timeout case where Application never proceeds to "Progressing", set status back to "Healthy" + if duration.Seconds() > float64(r.ApplicationProgressingTimeout) { + log.Infof("Application %v has been in Pending status for >%v seconds, moving back to Healthy", app.Name, r.ApplicationProgressingTimeout) + currentAppStatus.LastTransitionTime = &now + currentAppStatus.Status = "Healthy" + currentAppStatus.Message = fmt.Sprintf("Application Pending status timed out after waiting %v seconds to become Progressing, reset status to Healthy.", r.ApplicationProgressingTimeout) + } + } + } + + if currentAppStatus.Status == "Progressing" && statusString == "Healthy" { + log.Infof("Application %v has completed Progressing status, updating its ApplicationSet status to Healthy", app.Name) + currentAppStatus.LastTransitionTime = &now + currentAppStatus.Status = statusString + currentAppStatus.Message = "Application resource became Healthy, updating status from Progressing to Healthy." + } + + appStatuses = append(appStatuses, currentAppStatus) + } + } + + err := r.setApplicationSetApplicationStatus(ctx, applicationSet, appStatuses) + if err != nil { + return nil, err + } + + return appStatuses, nil +} + +// check Applications that are in Waiting status and promote them to Pending if needed +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusProgress(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, appSyncMap map[string]bool, appStepMap map[string]int, appHashMap map[string]string, appMap map[string]argov1alpha1.Application) ([]argov1alpha1.ApplicationSetApplicationStatus, error) { + now := metav1.Now() + + oldAppStatuses := applicationSet.Status.ApplicationStatus + updatedAppStatuses := make([]argov1alpha1.ApplicationSetApplicationStatus, 0, len(oldAppStatuses)) + + strategy := applicationSet.Spec.Strategy + + // if we have no RollingUpdate steps, clear out the existing ApplicationStatus entries + if applicationSet.StrategyEnabled() { + updateCountMap, totalCountMap := getPendingAndProgressingCounts(*strategy, oldAppStatuses, appStepMap, appHashMap, appMap) + + for _, appStatus := range oldAppStatuses { + step := appStepMap[appStatus.Application] + maxUpdate := strategy.GetMaxUpdateForStep(step) + totalAllowed := totalCountMap[step] + currentlyUpdating := updateCountMap[step] + maxUpdateAllowed := isMaxUpdateAllowed(applicationSet.Name, maxUpdate, totalAllowed, currentlyUpdating) + + if appStatus.Status == "Waiting" && appSyncMap[appStatus.Application] && maxUpdateAllowed { + log.Infof("Application %v moved to Pending status, watching for the Application to start Progressing", appStatus.Application) + appStatus.LastTransitionTime = &now + appStatus.Status = "Pending" + appStatus.ObservedHash = appHashMap[appStatus.Application] + appStatus.Message = "Application moved to Pending status, watching for the Application resource to start Progressing." + + updateCountMap[step] += 1 + } + + updatedAppStatuses = append(updatedAppStatuses, appStatus) + } + } + + err := r.setApplicationSetApplicationStatus(ctx, applicationSet, updatedAppStatuses) + if err != nil { + return nil, err + } + + return updatedAppStatuses, nil +} + +// isMaxUpdateAllowed determines whether an update is currently allowed for a given step. +func isMaxUpdateAllowed(applicationSetName string, maxUpdate *intstr.IntOrString, totalAllowed int, currentlyUpdating int) bool { + allowed := true + + // allow any updates if maxUpdate is unset or explicitly 0 + if maxUpdate != nil && !(maxUpdate.Type == intstr.Int && maxUpdate.IntVal == 0) { + maxUpdateVal, err := intstr.GetScaledValueFromIntOrPercent(maxUpdate, totalAllowed, false) + if err != nil { + log.Warnf("AppSet '%v' has a invalid maxUpdate value '%+v', ignoring maxUpdate logic for this step: %v", applicationSetName, maxUpdate, err) + } + + // ensure non-zero values always floor to 1, even while rounding down + if maxUpdateVal == 0 { + maxUpdateVal = 1 + } + + if currentlyUpdating >= maxUpdateVal { + allowed = false + } + } + return allowed +} + +func getPendingAndProgressingCounts(strategy argov1alpha1.ApplicationSetStrategy, oldAppStatuses []argov1alpha1.ApplicationSetApplicationStatus, appStepMap map[string]int, appHashMap map[string]string, appMap map[string]argov1alpha1.Application) ([]int, []int) { + var updateCountMap []int + var totalCountMap []int + + for s := 0; s < len(strategy.GetRolloutSteps()); s++ { + updateCountMap = append(updateCountMap, 0) + totalCountMap = append(totalCountMap, 0) + } + + // populate updateCountMap with counts of existing Pending and Progressing Applications + for _, appStatus := range oldAppStatuses { + totalCountMap[appStepMap[appStatus.Application]] += 1 + + appOutdated := false + if strategy.Type == "RollingUpdate" { + appOutdated = appHashMap[appStatus.Application] != appStatus.ObservedHash || appHashMap[appStatus.Application] == "" + } else if strategy.Type == "RollingSync" { + appOutdated = appMap[appStatus.Application].Status.Sync.Status == "OutOfSync" + } + if appOutdated && (appStatus.Status == "Pending" || appStatus.Status == "Progressing") { + updateCountMap[appStepMap[appStatus.Application]] += 1 + } + } + + return updateCountMap, totalCountMap +} + +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditions(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet) ([]argov1alpha1.ApplicationSetCondition, error) { + + appSetProgressing := false + for _, appStatus := range applicationSet.Status.ApplicationStatus { + if appStatus.Status != "Healthy" { + appSetProgressing = true + break + } + } + + appSetConditionProgressing := false + for _, appSetCondition := range applicationSet.Status.Conditions { + if appSetCondition.Type == argov1alpha1.ApplicationSetConditionRolloutProgressing && appSetCondition.Status == argov1alpha1.ApplicationSetConditionStatusTrue { + appSetConditionProgressing = true + break + } + } + + if appSetProgressing && !appSetConditionProgressing { + _ = r.setApplicationSetStatusCondition(ctx, + applicationSet, + argov1alpha1.ApplicationSetCondition{ + Type: argov1alpha1.ApplicationSetConditionRolloutProgressing, + Message: "ApplicationSet Rollout Rollout started", + Reason: argov1alpha1.ApplicationSetReasonApplicationSetModified, + Status: argov1alpha1.ApplicationSetConditionStatusTrue, + }, false, + ) + } else if !appSetProgressing && appSetConditionProgressing { + _ = r.setApplicationSetStatusCondition(ctx, + applicationSet, + argov1alpha1.ApplicationSetCondition{ + Type: argov1alpha1.ApplicationSetConditionRolloutProgressing, + Message: "ApplicationSet Rollout Rollout complete", + Reason: argov1alpha1.ApplicationSetReasonApplicationSetRolloutComplete, + Status: argov1alpha1.ApplicationSetConditionStatusFalse, + }, false, + ) + } + + return applicationSet.Status.Conditions, nil +} + var _ handler.EventHandler = &clusterSecretEventHandler{} diff --git a/applicationset/controllers/applicationset_controller_test.go b/applicationset/controllers/applicationset_controller_test.go index 506715a0aa877..4bebea50c5a51 100644 --- a/applicationset/controllers/applicationset_controller_test.go +++ b/applicationset/controllers/applicationset_controller_test.go @@ -17,6 +17,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" kubefake "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/tools/record" ctrl "sigs.k8s.io/controller-runtime" @@ -24,6 +25,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "github.com/argoproj/gitops-engine/pkg/health" + "github.com/argoproj/argo-cd/v2/applicationset/generators" "github.com/argoproj/argo-cd/v2/applicationset/utils" @@ -1926,3 +1929,2090 @@ func TestSetApplicationSetStatusCondition(t *testing.T) { assert.Len(t, appSet.Status.Conditions, 3) } + +func TestSetApplicationSetApplicationStatus(t *testing.T) { + scheme := runtime.NewScheme() + err := argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + err = argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + appSet := argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Generators: []argov1alpha1.ApplicationSetGenerator{ + {List: &argov1alpha1.ListGenerator{ + Elements: []apiextensionsv1.JSON{{ + Raw: []byte(`{"cluster": "my-cluster","url": "https://kubernetes.default.svc"}`), + }}, + }}, + }, + Template: argov1alpha1.ApplicationSetTemplate{}, + }, + } + + appStatuses := []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "my-application", + LastTransitionTime: &metav1.Time{}, + Message: "testing SetApplicationSetApplicationStatus to Healthy", + ObservedHash: "1", + Status: "Healthy", + }, + } + + kubeclientset := kubefake.NewSimpleClientset([]runtime.Object{}...) + argoDBMock := dbmocks.ArgoDB{} + argoObjs := []runtime.Object{} + + client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(&appSet).Build() + + r := ApplicationSetReconciler{ + Log: ctrl.Log.WithName("controllers").WithName("ApplicationSet"), + Client: client, + Scheme: scheme, + Renderer: &utils.Render{}, + Recorder: record.NewFakeRecorder(1), + Generators: map[string]generators.Generator{ + "List": generators.NewListGenerator(), + }, + ArgoDB: &argoDBMock, + ArgoAppClientset: appclientset.NewSimpleClientset(argoObjs...), + KubeClientset: kubeclientset, + } + + err = r.setApplicationSetApplicationStatus(context.TODO(), &appSet, appStatuses) + assert.Nil(t, err) + + assert.Len(t, appSet.Status.ApplicationStatus, 1) +} +func TestHashApplicaton(t *testing.T) { + + for _, cc := range []struct { + name string + app argov1alpha1.Application + expectedHash string + }{ + { + name: "handles an empty application", + app: argov1alpha1.Application{}, + expectedHash: "a5225141462ae4d3ed1c341033e57fd5", + }, + { + name: "handles a basic application", + app: argov1alpha1.Application{ + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + Spec: argov1alpha1.ApplicationSpec{ + Source: argov1alpha1.ApplicationSource{ + RepoURL: "https://example.com", + }, + Destination: argov1alpha1.ApplicationDestination{ + Name: "in-cluster", + }, + }, + }, + expectedHash: "1aedc739ac4aa446c656994a7e8e3b80", + }, + { + name: "handles a different application", + app: argov1alpha1.Application{ + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + Spec: argov1alpha1.ApplicationSpec{ + Source: argov1alpha1.ApplicationSource{ + RepoURL: "https://bad-example.com", + }, + Destination: argov1alpha1.ApplicationDestination{ + Name: "out-cluster", + }, + }, + }, + expectedHash: "863b6d5713d302cec90bf547e1ae9281", + }, + { + name: "ignores the status and operation fields", + app: argov1alpha1.Application{ + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + Spec: argov1alpha1.ApplicationSpec{ + Source: argov1alpha1.ApplicationSource{ + RepoURL: "https://example.com", + }, + Destination: argov1alpha1.ApplicationDestination{ + Name: "in-cluster", + }, + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + Message: "the app is healthy", + }, + }, + Operation: &argov1alpha1.Operation{ + InitiatedBy: argov1alpha1.OperationInitiator{ + Username: "test-user", + Automated: false, + }, + }, + }, + expectedHash: "1aedc739ac4aa446c656994a7e8e3b80", + }, + } { + t.Run(cc.name, func(t *testing.T) { + hash, err := hashApplication(cc.app) + assert.Equal(t, err, nil, "expected no errors, but errors occured") + assert.Equal(t, cc.expectedHash, hash, "expected hash did not match actual") + }) + } +} + +func TestBuildAppDependencyList(t *testing.T) { + + scheme := runtime.NewScheme() + err := argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + err = argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + client := fake.NewClientBuilder().WithScheme(scheme).Build() + + for _, cc := range []struct { + name string + appSet argov1alpha1.ApplicationSet + apps []argov1alpha1.Application + expectedList [][]string + expectedStepMap map[string]int + }{ + { + name: "handles an empty set of applications and no strategy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{}, + }, + apps: []argov1alpha1.Application{}, + expectedList: [][]string{}, + expectedStepMap: map[string]int{}, + }, + { + name: "handles an empty set of applications and ignores AllAtOnce strategy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "AllAtOnce", + }, + }, + }, + apps: []argov1alpha1.Application{}, + expectedList: [][]string{}, + expectedStepMap: map[string]int{}, + }, + { + name: "handles an empty set of applications with good selectors", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "dev", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{}, + expectedList: [][]string{ + {}, + }, + expectedStepMap: map[string]int{}, + }, + { + name: "handles selecting 1 application with 1 selector", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "dev", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + }, + }, + expectedList: [][]string{ + {"app-dev"}, + }, + expectedStepMap: map[string]int{ + "app-dev": 0, + }, + }, + { + name: "handles selectors that select no applications", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "dev", + }, + }, + }, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "qa", + }, + }, + }, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "prod", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-qa", + Labels: map[string]string{ + "env": "qa", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-prod", + Labels: map[string]string{ + "env": "prod", + }, + }, + }, + }, + expectedList: [][]string{ + {}, + {"app-qa"}, + {"app-prod"}, + }, + expectedStepMap: map[string]int{ + "app-qa": 1, + "app-prod": 2, + }, + }, + { + name: "handles multiple selectors in the same matchExpression", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "region", + Operator: "In", + Values: []string{ + "us-east-2", + }, + }, + { + Key: "env", + Operator: "In", + Values: []string{ + "qa", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-qa1", + Labels: map[string]string{ + "env": "qa", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-qa2", + Labels: map[string]string{ + "env": "qa", + "region": "us-east-2", + }, + }, + }, + }, + expectedList: [][]string{ + {"app-qa2"}, + }, + expectedStepMap: map[string]int{ + "app-qa2": 0, + }, + }, + { + name: "handles multiple values in the same matchExpression", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "qa", + "prod", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-qa", + Labels: map[string]string{ + "env": "qa", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-prod", + Labels: map[string]string{ + "env": "prod", + "region": "us-east-2", + }, + }, + }, + }, + expectedList: [][]string{ + {"app-qa", "app-prod"}, + }, + expectedStepMap: map[string]int{ + "app-qa": 0, + "app-prod": 0, + }, + }, + + { + name: "handles RollingSync values", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingSync", + RollingSync: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{ + { + Key: "env", + Operator: "In", + Values: []string{ + "qa", + }, + }, + }, + }, + }, + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-dev", + Labels: map[string]string{ + "env": "dev", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app-qa", + Labels: map[string]string{ + "env": "qa", + }, + }, + }, + }, + expectedList: [][]string{ + {"app-qa"}, + }, + expectedStepMap: map[string]int{ + "app-qa": 0, + }, + }, + } { + + t.Run(cc.name, func(t *testing.T) { + + kubeclientset := kubefake.NewSimpleClientset([]runtime.Object{}...) + argoDBMock := dbmocks.ArgoDB{} + argoObjs := []runtime.Object{} + + r := ApplicationSetReconciler{ + Client: client, + Scheme: scheme, + Recorder: record.NewFakeRecorder(1), + Generators: map[string]generators.Generator{}, + ArgoDB: &argoDBMock, + ArgoAppClientset: appclientset.NewSimpleClientset(argoObjs...), + KubeClientset: kubeclientset, + } + + appDependencyList, appStepMap, err := r.buildAppDependencyList(cc.appSet, cc.apps) + assert.Equal(t, err, nil, "expected no errors, but errors occured") + assert.Equal(t, cc.expectedList, appDependencyList, "expected appDependencyList did not match actual") + assert.Equal(t, cc.expectedStepMap, appStepMap, "expected appStepMap did not match actual") + }) + } +} + +func TestBuildAppSyncMap(t *testing.T) { + + scheme := runtime.NewScheme() + err := argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + err = argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + client := fake.NewClientBuilder().WithScheme(scheme).Build() + + for _, cc := range []struct { + name string + appSet argov1alpha1.ApplicationSet + appMap map[string]argov1alpha1.Application + appDependencyList [][]string + appHashMap map[string]string + expectedMap map[string]bool + }{ + { + name: "handles an empty app dependency list", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + }, + appDependencyList: [][]string{}, + expectedMap: map[string]bool{}, + }, + { + name: "handles two applications with no statuses", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "11", + "app2": "22", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles applications after an empty selection", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + }, + appDependencyList: [][]string{ + {}, + {"app1", "app2"}, + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": true, + }, + }, + { + name: "handles applications that are healthy and have no changes", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "1", + Status: "Healthy", + }, + { + Application: "app2", + ObservedHash: "2", + Status: "Healthy", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "1", + "app2": "2", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": true, + }, + }, + { + name: "handles applications that are healthy, but out of date", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "1", + Status: "Healthy", + }, + { + Application: "app2", + ObservedHash: "2", + Status: "Healthy", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "11", + "app2": "22", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles applications that are healthy, but have an empty hash", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "1", + Status: "Healthy", + }, + { + Application: "app2", + ObservedHash: "2", + Status: "Healthy", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "", + "app2": "", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles applications that are up to date, but not healthy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "11", + Status: "Progressing", + }, + { + Application: "app2", + ObservedHash: "22", + Status: "Progressing", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "11", + "app2": "22", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles RollingSync applications that are OutOfSync and healthy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingSync", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "11", + Status: "Healthy", + }, + { + Application: "app2", + ObservedHash: "22", + Status: "Healthy", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "11", + "app2": "22", + }, + appMap: map[string]argov1alpha1.Application{ + "app1": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + "app2": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app2", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles RollingSync applications that are up to date, but not healthy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingSync", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "11", + Status: "Progressing", + }, + { + Application: "app2", + ObservedHash: "22", + Status: "Progressing", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1"}, + {"app2"}, + }, + appHashMap: map[string]string{ + "app1": "11", + "app2": "22", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": false, + }, + }, + { + name: "handles a lot of applications", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + ObservedHash: "1", + Status: "Healthy", + }, + { + Application: "app2", + ObservedHash: "2", + Status: "Healthy", + }, + { + Application: "app4", + ObservedHash: "4", + Status: "Healthy", + }, + { + Application: "app5", + ObservedHash: "5", + Status: "Healthy", + }, + { + Application: "app7", + ObservedHash: "7", + Status: "Healthy", + }, + }, + }, + }, + appDependencyList: [][]string{ + {"app1", "app4", "app7"}, + {"app2", "app5", "app8"}, + {"app3", "app6", "app9"}, + }, + appHashMap: map[string]string{ + "app1": "1", + "app2": "2", + "app4": "4", + "app7": "7", + }, + expectedMap: map[string]bool{ + "app1": true, + "app2": true, + "app3": false, + "app4": true, + "app5": true, + "app6": false, + "app7": true, + "app8": true, + "app9": false, + }, + }, + } { + + t.Run(cc.name, func(t *testing.T) { + + kubeclientset := kubefake.NewSimpleClientset([]runtime.Object{}...) + argoDBMock := dbmocks.ArgoDB{} + argoObjs := []runtime.Object{} + + r := ApplicationSetReconciler{ + Client: client, + Scheme: scheme, + Recorder: record.NewFakeRecorder(1), + Generators: map[string]generators.Generator{}, + ArgoDB: &argoDBMock, + ArgoAppClientset: appclientset.NewSimpleClientset(argoObjs...), + KubeClientset: kubeclientset, + } + + appSyncMap, err := r.buildAppSyncMap(cc.appSet, cc.appDependencyList, cc.appHashMap, cc.appMap) + assert.Equal(t, err, nil, "expected no errors, but errors occured") + assert.Equal(t, cc.expectedMap, appSyncMap, "expected appSyncMap did not match actual") + }) + } +} + +func TestUpdateApplicationSetApplicationStatus(t *testing.T) { + + scheme := runtime.NewScheme() + err := argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + err = argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + for _, cc := range []struct { + name string + appSet argov1alpha1.ApplicationSet + apps []argov1alpha1.Application + appHashMap map[string]string + expectedAppStatus []argov1alpha1.ApplicationSetApplicationStatus + }{ + { + name: "handles a nil list of statuses and no applications", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + }, + apps: []argov1alpha1.Application{}, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + { + name: "handles a nil list of statuses with a healthy application", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "No Application status found, defaulting status to Waiting.", + ObservedHash: "", + Status: "Waiting", + }, + }, + }, + { + name: "handles an empty list of statuses with a healthy application", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{}, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "No Application status found, defaulting status to Waiting.", + ObservedHash: "", + Status: "Waiting", + }, + }, + }, + { + name: "progresses an out of date application to waiting", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "11", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application has pending changes, setting status to Waiting.", + ObservedHash: "1", + Status: "Waiting", + }, + }, + }, + { + name: "progresses an out of date application with no hash to waiting", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + Generation: 2, + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + Status: "Healthy", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application has pending changes, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + { + name: "does not progress an unchanged application to waiting", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + { + name: "does not progress a waiting application to waiting", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Waiting", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Waiting", + }, + }, + }, + { + name: "progresses an OutOfSync RollingSync application to waiting", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingSync", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "11", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application has pending changes, setting status to Waiting.", + ObservedHash: "1", + Status: "Waiting", + }, + }, + }, + { + name: "progresses a pending application to progressing", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Pending", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusProgressing, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application resource became Progressing, updating status from Pending to Progressing.", + ObservedHash: "1", + Status: "Progressing", + }, + }, + }, + { + name: "progresses a pending application to healthy on timeout", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: &metav1.Time{}, + Message: "", + ObservedHash: "1", + Status: "Pending", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application Pending status timed out after waiting 0 seconds to become Progressing, reset status to Healthy.", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + { + name: "progresses a progressing application to healthy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "", + ObservedHash: "1", + Status: "Progressing", + }, + }, + }, + }, + apps: []argov1alpha1.Application{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Health: argov1alpha1.HealthStatus{ + Status: health.HealthStatusHealthy, + }, + }, + }, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application resource became Healthy, updating status from Progressing to Healthy.", + ObservedHash: "1", + Status: "Healthy", + }, + }, + }, + } { + + t.Run(cc.name, func(t *testing.T) { + + kubeclientset := kubefake.NewSimpleClientset([]runtime.Object{}...) + argoDBMock := dbmocks.ArgoDB{} + argoObjs := []runtime.Object{} + + client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(&cc.appSet).Build() + + r := ApplicationSetReconciler{ + Client: client, + Scheme: scheme, + Recorder: record.NewFakeRecorder(1), + Generators: map[string]generators.Generator{}, + ArgoDB: &argoDBMock, + ArgoAppClientset: appclientset.NewSimpleClientset(argoObjs...), + KubeClientset: kubeclientset, + } + + appStatuses, err := r.updateApplicationSetApplicationStatus(context.TODO(), &cc.appSet, cc.apps, cc.appHashMap) + + // opt out of testing the LastTransitionTime is accurate + for i := range appStatuses { + appStatuses[i].LastTransitionTime = nil + } + + assert.Equal(t, err, nil, "expected no errors, but errors occured") + assert.Equal(t, cc.expectedAppStatus, appStatuses, "expected appStatuses did not match actual") + }) + } +} + +func TestUpdateApplicationSetApplicationStatusProgress(t *testing.T) { + + scheme := runtime.NewScheme() + err := argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + err = argov1alpha1.AddToScheme(scheme) + assert.Nil(t, err) + + for _, cc := range []struct { + name string + appSet argov1alpha1.ApplicationSet + appSyncMap map[string]bool + appStepMap map[string]int + appHashMap map[string]string + appMap map[string]argov1alpha1.Application + expectedAppStatus []argov1alpha1.ApplicationSetApplicationStatus + }{ + { + name: "handles an empty appSync and appStepMap", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + }, + appSyncMap: map[string]bool{}, + appStepMap: map[string]int{}, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + { + name: "handles an empty strategy", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{}, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + }, + appSyncMap: map[string]bool{}, + appStepMap: map[string]int{}, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + { + name: "handles an empty rollingUpdate", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{}, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + }, + appSyncMap: map[string]bool{}, + appStepMap: map[string]int{}, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + { + name: "handles an appSyncMap with no existing statuses", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + "app2": false, + }, + appStepMap: map[string]int{ + "app1": 0, + "app2": 1, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{}, + }, + { + name: "handles updating a status from Waiting to Pending", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + }, + appStepMap: map[string]int{ + "app1": 0, + }, + appHashMap: map[string]string{ + "app1": "1", + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + ObservedHash: "1", + Status: "Pending", + }, + }, + }, + { + name: "does not update a status if appSyncMap is false", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": false, + }, + appStepMap: map[string]int{ + "app1": 0, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + { + name: "does not update a status if status is not pending", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application Pending status timed out while waiting to become Progressing, reset status to Healthy.", + Status: "Healthy", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + }, + appStepMap: map[string]int{ + "app1": 0, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application Pending status timed out while waiting to become Progressing, reset status to Healthy.", + Status: "Healthy", + }, + }, + }, + { + name: "does not update a status if maxUpdate has already been reached", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + MaxUpdate: &intstr.IntOrString{ + Type: intstr.Int, + IntVal: 3, + }, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application resource became Progressing, updating status from Pending to Progressing.", + Status: "Progressing", + }, + { + Application: "app2", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app3", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app4", + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + "app2": true, + "app3": true, + "app4": true, + }, + appStepMap: map[string]int{ + "app1": 0, + "app2": 0, + "app3": 0, + "app4": 0, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application resource became Progressing, updating status from Pending to Progressing.", + Status: "Progressing", + }, + { + Application: "app2", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + { + Application: "app3", + LastTransitionTime: nil, + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app4", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + }, + }, + { + name: "does not update a status if maxUpdate has already been reached with RollingSync", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingSync", + RollingSync: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + MaxUpdate: &intstr.IntOrString{ + Type: intstr.Int, + IntVal: 3, + }, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application resource became Progressing, updating status from Pending to Progressing.", + Status: "Progressing", + }, + { + Application: "app2", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app3", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app4", + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + "app2": true, + "app3": true, + "app4": true, + }, + appStepMap: map[string]int{ + "app1": 0, + "app2": 0, + "app3": 0, + "app4": 0, + }, + appMap: map[string]argov1alpha1.Application{ + "app1": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app1", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + "app2": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app2", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + "app3": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app3", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + "app4": { + ObjectMeta: metav1.ObjectMeta{ + Name: "app4", + }, + Status: argov1alpha1.ApplicationStatus{ + Sync: argov1alpha1.SyncStatus{ + Status: argov1alpha1.SyncStatusCodeOutOfSync, + }, + }, + }, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application resource became Progressing, updating status from Pending to Progressing.", + Status: "Progressing", + }, + { + Application: "app2", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + { + Application: "app3", + LastTransitionTime: nil, + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app4", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + }, + }, + { + name: "handles maxUpdate set to percentage string", + appSet: argov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "name", + Namespace: "argocd", + }, + Spec: argov1alpha1.ApplicationSetSpec{ + Strategy: &argov1alpha1.ApplicationSetStrategy{ + Type: "RollingUpdate", + RollingUpdate: &argov1alpha1.ApplicationSetRolloutStrategy{ + Steps: []argov1alpha1.ApplicationSetRolloutStep{ + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + MaxUpdate: &intstr.IntOrString{ + Type: intstr.String, + StrVal: "50%", + }, + }, + { + MatchExpressions: []argov1alpha1.ApplicationMatchExpression{}, + }, + }, + }, + }, + }, + Status: argov1alpha1.ApplicationSetStatus{ + ApplicationStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app2", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app3", + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + }, + appSyncMap: map[string]bool{ + "app1": true, + "app2": true, + "app3": true, + }, + appStepMap: map[string]int{ + "app1": 0, + "app2": 0, + "app3": 0, + }, + expectedAppStatus: []argov1alpha1.ApplicationSetApplicationStatus{ + { + Application: "app1", + LastTransitionTime: nil, + Message: "Application moved to Pending status, watching for the Application resource to start Progressing.", + Status: "Pending", + }, + { + Application: "app2", + LastTransitionTime: nil, + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + { + Application: "app3", + LastTransitionTime: nil, + Message: "Application is out of date with the current AppSet generation, setting status to Waiting.", + Status: "Waiting", + }, + }, + }, + } { + + t.Run(cc.name, func(t *testing.T) { + + kubeclientset := kubefake.NewSimpleClientset([]runtime.Object{}...) + argoDBMock := dbmocks.ArgoDB{} + argoObjs := []runtime.Object{} + + client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(&cc.appSet).Build() + + r := ApplicationSetReconciler{ + Client: client, + Scheme: scheme, + Recorder: record.NewFakeRecorder(1), + Generators: map[string]generators.Generator{}, + ArgoDB: &argoDBMock, + ArgoAppClientset: appclientset.NewSimpleClientset(argoObjs...), + KubeClientset: kubeclientset, + } + + appStatuses, err := r.updateApplicationSetApplicationStatusProgress(context.TODO(), &cc.appSet, cc.appSyncMap, cc.appStepMap, cc.appHashMap, cc.appMap) + + // opt out of testing the LastTransitionTime is accurate + for i := range appStatuses { + appStatuses[i].LastTransitionTime = nil + } + + assert.Equal(t, err, nil, "expected no errors, but errors occured") + assert.Equal(t, cc.expectedAppStatus, appStatuses, "expected appStatuses did not match actual") + }) + } +} diff --git a/assets/swagger.json b/assets/swagger.json index 324319e28258c..be8de055cf397 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4197,6 +4197,24 @@ "type": "object", "title": "Generic (empty) response for GPG public key CRUD requests" }, + "intstrIntOrString": { + "description": "+protobuf=true\n+protobuf.options.(gogoproto.goproto_stringer)=false\n+k8s:openapi-gen=true", + "type": "object", + "title": "IntOrString is a type that can hold an int32 or a string. When used in\nJSON or YAML marshalling and unmarshalling, it produces or consumes the\ninner type. This allows you to have, for example, a JSON field that can\naccept a name or number.\nTODO: Rename to Int32OrString", + "properties": { + "intVal": { + "type": "integer", + "format": "int32" + }, + "strVal": { + "type": "string" + }, + "type": { + "type": "string", + "format": "int64" + } + } + }, "notificationService": { "type": "object", "properties": { @@ -5373,6 +5391,23 @@ } } }, + "v1alpha1ApplicationMatchExpression": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "operator": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "v1alpha1ApplicationSet": { "type": "object", "title": "ApplicationSet is a set of Application resources\n+genclient\n+genclient:noStatus\n+k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object\n+kubebuilder:resource:path=applicationsets,shortName=appset;appsets\n+kubebuilder:subresource:status", @@ -5388,6 +5423,31 @@ } } }, + "v1alpha1ApplicationSetApplicationStatus": { + "type": "object", + "title": "ApplicationSetApplicationCondition contains details about each Application managed by the ApplicationSet", + "properties": { + "application": { + "type": "string", + "title": "Application contains the name of the Application resource" + }, + "lastTransitionTime": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "type": "string", + "title": "Message contains human-readable message indicating details about the status" + }, + "observedHash": { + "type": "string", + "title": "ObservedHash contains the last applied hash of the generated Application resource" + }, + "status": { + "type": "string", + "title": "Status contains the AppSet's perceived status of the managed Application resource: (Waiting, Pending, Progressing, Healthy)" + } + } + }, "v1alpha1ApplicationSetCondition": { "type": "object", "title": "ApplicationSetCondition contains details about an applicationset condition, which is usally an error or warning", @@ -5494,6 +5554,31 @@ } } }, + "v1alpha1ApplicationSetRolloutStep": { + "type": "object", + "properties": { + "matchExpressions": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ApplicationMatchExpression" + } + }, + "maxUpdate": { + "$ref": "#/definitions/intstrIntOrString" + } + } + }, + "v1alpha1ApplicationSetRolloutStrategy": { + "type": "object", + "properties": { + "steps": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ApplicationSetRolloutStep" + } + } + } + }, "v1alpha1ApplicationSetSpec": { "description": "ApplicationSetSpec represents a class of application set state.", "type": "object", @@ -5507,6 +5592,9 @@ "goTemplate": { "type": "boolean" }, + "strategy": { + "$ref": "#/definitions/v1alpha1ApplicationSetStrategy" + }, "syncPolicy": { "$ref": "#/definitions/v1alpha1ApplicationSetSyncPolicy" }, @@ -5519,6 +5607,12 @@ "type": "object", "title": "ApplicationSetStatus defines the observed state of ApplicationSet", "properties": { + "applicationStatus": { + "type": "array", + "items": { + "$ref": "#/definitions/v1alpha1ApplicationSetApplicationStatus" + } + }, "conditions": { "type": "array", "title": "INSERT ADDITIONAL STATUS FIELD - define observed state of cluster\nImportant: Run \"make\" to regenerate code after modifying this file", @@ -5528,6 +5622,21 @@ } } }, + "v1alpha1ApplicationSetStrategy": { + "description": "ApplicationSetStrategy configures how generated Applications are updated in sequence.", + "type": "object", + "properties": { + "rollingSync": { + "$ref": "#/definitions/v1alpha1ApplicationSetRolloutStrategy" + }, + "rollingUpdate": { + "$ref": "#/definitions/v1alpha1ApplicationSetRolloutStrategy" + }, + "type": { + "type": "string" + } + } + }, "v1alpha1ApplicationSetSyncPolicy": { "description": "ApplicationSetSyncPolicy configures how generated Applications will relate to their\nApplicationSet.", "type": "object", diff --git a/cmd/argocd-applicationset-controller/commands/applicationset_controller.go b/cmd/argocd-applicationset-controller/commands/applicationset_controller.go index 00e2b2ebaedc2..3658d936b9e3d 100644 --- a/cmd/argocd-applicationset-controller/commands/applicationset_controller.go +++ b/cmd/argocd-applicationset-controller/commands/applicationset_controller.go @@ -46,18 +46,20 @@ func getSubmoduleEnabled() bool { func NewCommand() *cobra.Command { var ( - clientConfig clientcmd.ClientConfig - metricsAddr string - probeBindAddr string - webhookAddr string - enableLeaderElection bool - namespace string - argocdRepoServer string - policy string - debugLog bool - dryRun bool - logFormat string - logLevel string + clientConfig clientcmd.ClientConfig + metricsAddr string + probeBindAddr string + webhookAddr string + enableLeaderElection bool + namespace string + argocdRepoServer string + policy string + debugLog bool + dryRun bool + logFormat string + logLevel string + enableProgressiveRollouts bool + applicationProgressingTimeout uint ) scheme := runtime.NewScheme() _ = clientgoscheme.AddToScheme(scheme) @@ -182,16 +184,18 @@ func NewCommand() *cobra.Command { go func() { errors.CheckError(askPassServer.Run(askpass.SocketPath)) }() if err = (&controllers.ApplicationSetReconciler{ - Generators: topLevelGenerators, - Client: mgr.GetClient(), - Log: ctrl.Log.WithName("controllers").WithName("ApplicationSet"), - Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("applicationset-controller"), - Renderer: &utils.Render{}, - Policy: policyObj, - ArgoAppClientset: appSetConfig, - KubeClientset: k8sClient, - ArgoDB: argoCDDB, + Generators: topLevelGenerators, + Client: mgr.GetClient(), + Log: ctrl.Log.WithName("controllers").WithName("ApplicationSet"), + Scheme: mgr.GetScheme(), + Recorder: mgr.GetEventRecorderFor("applicationset-controller"), + Renderer: &utils.Render{}, + Policy: policyObj, + ArgoAppClientset: appSetConfig, + KubeClientset: k8sClient, + ArgoDB: argoCDDB, + EnableProgressiveRollouts: enableProgressiveRollouts, + ApplicationProgressingTimeout: applicationProgressingTimeout, }).SetupWithManager(mgr); err != nil { log.Error(err, "unable to create controller", "controller", "ApplicationSet") os.Exit(1) @@ -220,6 +224,8 @@ func NewCommand() *cobra.Command { command.Flags().StringVar(&logLevel, "loglevel", "info", "Set the logging level. One of: debug|info|warn|error") command.Flags().BoolVar(&dryRun, "dry-run", false, "Enable dry run mode") command.Flags().StringVar(&logFormat, "logformat", "text", "Set the logging format. One of: text|json") + command.Flags().BoolVar(&enableProgressiveRollouts, "enable-progressive-rollouts", env.ParseBoolFromEnv("ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS", false), "Enable use of the experimental progressive rollouts feature.") + command.Flags().UintVar(&applicationProgressingTimeout, "application-progressing-timeout", 300, "When Progressive Rollouts is enabled, automatically move a Pending Application to Healthy after this many seconds.") return &command } diff --git a/docs/operator-manual/applicationset/Progressive-Rollouts.md b/docs/operator-manual/applicationset/Progressive-Rollouts.md new file mode 100644 index 0000000000000..304554966dbd4 --- /dev/null +++ b/docs/operator-manual/applicationset/Progressive-Rollouts.md @@ -0,0 +1,109 @@ +# Progressive Rollouts + +This feature allows you to control the order in which the ApplicationSet controller will create or update the Applications owned by an ApplicationSet resource. + +## Use Cases +The Progressive Rollouts feature set is intended to be light and flexible. The feature only interacts with the health of managed Applications. It is not intended to support direct integrations with other Rollout controllers (such as the native ReplicaSet controller or Argo Rollouts). + +* Progressive Rollouts watch for the managed Application resources to become "Healthy" before proceeding to the next stage. +* Deployments, DaemonSets, StatefulSets, and [Argo Rollouts](https://argoproj.github.io/argo-rollouts/) are all supported, because the Application enters a "Progressing" state while pods are being rolled out. In fact, any resource with a health check that can report a "Progressing" status is supported. +* [Argo CD Resource Hooks](../../user-guide/resource_hooks.md) are supported. We recommend this approach for users that need advanced functionality when an Argo Rollout cannot be used, such as smoke testing after a DaemonSet change. + +## Enabling Progressive Rollouts +As an experimental feature, progressive rollouts must be explicitly enabled, in one of two ways. +1. Pass `--enable-progressive-rollouts` to the ApplicationSet controller args. +1. Set `ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS=true` in the ApplicationSet controller environment variables. + +## Strategies + +* AllAtOnce (default) +* RollingUpdate +* RollingSync + +### AllAtOnce +This default Application update behavior is unchanged from the original ApplicationSet implementation. + +All Applications managed by the ApplicationSet resource are updated simultaneously when the ApplicationSet is updated. + +### RollingUpdate +This update strategy allows you to group Applications by labels present on the generated Application resources. +When the ApplicationSet changes, the changes will be applied to each group of Application resources sequentially. + +* Application groups are selected by `matchExpressions`. +* All `matchExpressions` must be true for an Application to be selected (AND behavior). +* The `In` operator must match at least one value to be considered true (OR behavior). +* All Applications in each group must become Healthy before the ApplicationSet controller will proceed to update the next group of Applications. +* The number of simultaneous Application updates in a group will not exceed its `maxUpdate` parameter (0 or undefined means unbounded). + +#### Example +The following example illustrates how to stage a progressive rollout over Applications with explicitly configured environment labels. +``` +--- +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: guestbook +spec: + generators: + - list: + elements: + - cluster: engineering-dev + url: https://1.2.3.4 + env: dev + - cluster: engineering-qa + url: https://2.4.6.8 + env: qa + - cluster: engineering-prod + url: https://9.8.7.6/ + env: prod + strategy: + type: RollingUpdate + rollingUpdate: + steps: + - matchExpressions: + - key: env + operator: In + values: + - dev + maxUpdate: 0 # if undefined or 0, all applications matched are updated together + - matchExpressions: + - key: env + operator: In + values: + - qa + - matchExpressions: + - key: env + operator: In + values: + - prod + maxUpdate: 1 # maxUpdate supports both integer and percentage string values + template: + metadata: + name: '{{cluster}}-guestbook' + labels: + env: '{{env}}' + spec: + source: + repoURL: https://github.com/infra-team/cluster-deployments.git + targetRevision: HEAD + path: guestbook/{{cluster}} + destination: + server: '{{url}}' + namespace: guestbook +``` + +#### Limitations +The RollingUpdate strategy does not enforce sync order for external changes. Basically, if the ApplicationSet spec does not change, the RollingUpdate strategy has no mechanism available to control the sync order of the Applications it manages. The managed Applications will sync on their own (if autosync is enabled), and your desired rollingUpdate spec will be ignored. Please use RollingSync instead to address this limitation. + +This includes: + +* Updates to manifests in a directory watched by the generated Application. +* Updates to an unversioned helm chart watched by the generated Application (including versioned upstream chart dependencies in the unversioned Chart.yaml). + +### RollingSync +RollingSync behaves similarly to RollingUpdate, but uses the OutOfSync status of an Application resource to detect that an Application should be updated. It is based on the work of https://github.com/Skyscanner/applicationset-progressive-sync, and has the following differences from the RollingUpdate strategy. + +* The same spec is used for both RollingUpdate and RollingSync to determine Application dependencies. +* RollingSync will capture external changes outside the ApplicationSet resource, since it relies on the OutOfSync status instead of changes in the generated Application resources to trigger a rollout. +* RollingSync will force all generated Applications to have autosync disabled. Warnings are printed in the applicationset-controller logs for any Application specs with autosync enabled. +* Sync operations are triggered the same way as if they were triggered by the UI or CLI (by directly setting the `operation` status field on the Application resource). This means that a RollingSync will respect sync windows just as if a user had clicked the "Sync" button in the Argo UI. diff --git a/docs/operator-manual/argocd-cmd-params-cm.yaml b/docs/operator-manual/argocd-cmd-params-cm.yaml index 03ede2bd0ca93..d135ddf36168e 100644 --- a/docs/operator-manual/argocd-cmd-params-cm.yaml +++ b/docs/operator-manual/argocd-cmd-params-cm.yaml @@ -58,6 +58,9 @@ data: # Cache expiration default (default 24h0m0s) controller.default.cache.expiration: "24h0m0s" + # Enables use of the Progressive Rollouts capability for ApplicationSets + applicationset.enable.progressive.rollouts: "false" + ## Server properties # Run server without TLS server.insecure: "false" diff --git a/manifests/base/applicationset-controller/argocd-applicationset-controller-deployment.yaml b/manifests/base/applicationset-controller/argocd-applicationset-controller-deployment.yaml index c27d77b2921ff..29fdfa4bbc206 100644 --- a/manifests/base/applicationset-controller/argocd-applicationset-controller-deployment.yaml +++ b/manifests/base/applicationset-controller/argocd-applicationset-controller-deployment.yaml @@ -32,6 +32,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: applicationset.enable.progressive.rollouts + optional: true volumeMounts: - mountPath: /app/config/ssh name: ssh-known-hosts @@ -48,7 +54,7 @@ spec: drop: - ALL allowPrivilegeEscalation: false - readOnlyRootFilesystem: true + readOnlyRootFilesystem: true runAsNonRoot: true seccompProfile: type: RuntimeDefault diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 10545f913220c..da00dee82b0cf 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -8617,6 +8617,37 @@ spec: type: array goTemplate: type: boolean + strategy: + properties: + rollingUpdate: + properties: + steps: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + maxUpdate: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + type: array + type: object + type: + type: string + type: object syncPolicy: properties: preserveResourcesOnDeletion: @@ -8883,6 +8914,26 @@ spec: type: object status: properties: + applicationStatus: + items: + properties: + application: + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + observedHash: + type: string + status: + type: string + required: + - application + - message + - status + type: object + type: array conditions: items: properties: @@ -9632,6 +9683,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS + valueFrom: + configMapKeyRef: + key: applicationset.enable.progressive.rollouts + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always name: argocd-applicationset-controller diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 6bc9f442c9a8c..f9f1cea4835d0 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -6461,6 +6461,65 @@ spec: type: array goTemplate: type: boolean + strategy: + properties: + rollingUpdate: + properties: + steps: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + maxUpdate: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + type: array + type: object + type: + type: string + rollingSync: + properties: + steps: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + maxUpdate: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + type: array + type: object + type: + type: string + type: object syncPolicy: properties: preserveResourcesOnDeletion: @@ -6727,6 +6786,26 @@ spec: type: object status: properties: + applicationStatus: + items: + properties: + application: + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + observedHash: + type: string + status: + type: string + required: + - application + - message + - status + type: object + type: array conditions: items: properties: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index e4252255d1f2e..93fd094e9c56c 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -8617,6 +8617,37 @@ spec: type: array goTemplate: type: boolean + strategy: + properties: + rollingUpdate: + properties: + steps: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + type: object + type: array + maxUpdate: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + type: array + type: object + type: + type: string + type: object syncPolicy: properties: preserveResourcesOnDeletion: @@ -8883,6 +8914,26 @@ spec: type: object status: properties: + applicationStatus: + items: + properties: + application: + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + observedHash: + type: string + status: + type: string + required: + - application + - message + - status + type: object + type: array conditions: items: properties: @@ -10881,6 +10932,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS + valueFrom: + configMapKeyRef: + key: applicationset.enable.progressive.rollouts + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always name: argocd-applicationset-controller diff --git a/manifests/ha/namespace-install.yaml b/manifests/ha/namespace-install.yaml index db7faa96aaeff..014baba10a3f7 100644 --- a/manifests/ha/namespace-install.yaml +++ b/manifests/ha/namespace-install.yaml @@ -1550,6 +1550,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS + valueFrom: + configMapKeyRef: + key: applicationset.enable.progressive.rollouts + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always name: argocd-applicationset-controller diff --git a/manifests/install.yaml b/manifests/install.yaml index 3a6d36b9bb2fd..d30f371b5b158 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -1,11118 +1 @@ # This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: applications.argoproj.io - app.kubernetes.io/part-of: argocd - name: applications.argoproj.io -spec: - group: argoproj.io - names: - kind: Application - listKind: ApplicationList - plural: applications - shortNames: - - app - - apps - singular: application - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.sync.status - name: Sync Status - type: string - - jsonPath: .status.health.status - name: Health Status - type: string - - jsonPath: .status.sync.revision - name: Revision - priority: 10 - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: Application is a definition of Application resource. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - operation: - description: Operation contains information about a requested or running - operation - properties: - info: - description: Info is a list of informational items for this operation - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - initiatedBy: - description: InitiatedBy contains information about who initiated - the operations - properties: - automated: - description: Automated is set to true if operation was initiated - automatically by the application controller. - type: boolean - username: - description: Username contains the name of a user who started - operation - type: string - type: object - retry: - description: Retry controls the strategy to apply if a sync fails - properties: - backoff: - description: Backoff controls how to backoff on subsequent retries - of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default unit - is seconds, but could also be a duration (e.g. "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base duration - after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of time allowed - for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for retrying - a failed sync. If set to 0, no retries will be performed. - format: int64 - type: integer - type: object - sync: - description: Sync contains parameters for the operation - properties: - dryRun: - description: DryRun specifies to perform a `kubectl apply --dry-run` - without actually performing the sync - type: boolean - manifests: - description: Manifests is an optional field that overrides sync - source with a local directory for development - items: - type: string - type: array - prune: - description: Prune specifies to delete resources from the cluster - that are no longer tracked in git - type: boolean - resources: - description: Resources describes which resources shall be part - of the sync - items: - description: SyncOperationResource contains resources to sync. - properties: - group: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - type: array - revision: - description: Revision is the revision (Git) or chart version (Helm) - which to sync the application to If omitted, will use the revision - specified in app spec. - type: string - source: - description: Source overrides the source definition set in the - application. This is typically set in a Rollback operation and - is nil during a Sync operation - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded from - being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included during - manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable to - be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level Arguments - items: - description: JsonnetVar represents a variable to - be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the - helm template - items: - description: HelmFileParameter is a file parameter that's - passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally by - not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters which - are passed to the helm template command upon manifest - generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to tell - Helm to interpret booleans and numbers as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all domains - (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to use. - If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block - type: string - version: - description: Version is the Helm version to use for templating - ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources for - Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to force - applying common labels to resources for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize image - definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management - plugin specific options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, usually - expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository (Git or - Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the source - to sync the application to. In case of Git, this can be - commit, tag, or branch. If omitted, will equal to HEAD. - In case of Helm, this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - syncOptions: - description: SyncOptions provide per-sync sync-options, e.g. Validate=false - items: - type: string - type: array - syncStrategy: - description: SyncStrategy describes how to perform the sync - properties: - apply: - description: Apply will perform a `kubectl apply` to perform - the sync. - properties: - force: - description: Force indicates whether or not to supply - the --force flag to `kubectl apply`. The --force flag - deletes and re-create the resource, when PATCH encounters - conflict and has retried for 5 times. - type: boolean - type: object - hook: - description: Hook will submit any referenced resources to - perform the sync. This is the default strategy - properties: - force: - description: Force indicates whether or not to supply - the --force flag to `kubectl apply`. The --force flag - deletes and re-create the resource, when PATCH encounters - conflict and has retried for 5 times. - type: boolean - type: object - type: object - type: object - type: object - spec: - description: ApplicationSpec represents desired application state. Contains - link to repository with application definition and additional parameters - link definition revision. - properties: - destination: - description: Destination is a reference to the target Kubernetes server - and namespace - properties: - name: - description: Name is an alternate way of specifying the target - cluster by its symbolic name - type: string - namespace: - description: Namespace specifies the target namespace for the - application's resources. The namespace will only be set for - namespace-scoped resources that have not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster and - must be set to the Kubernetes control plane API - type: string - type: object - ignoreDifferences: - description: IgnoreDifferences is a list of resources and their fields - which should be ignored during comparison - items: - description: ResourceIgnoreDifferences contains resource filter - and list of json paths which should be ignored during comparison - with live state. - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - description: ManagedFieldsManagers is a list of trusted managers. - Fields mutated by those managers will take precedence over - the desired state defined in the SCM and won't be displayed - in diffs - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - description: Info contains a list of information (URLs, email addresses, - and plain text) that relates to the application - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string - revisionHistoryLimit: - description: RevisionHistoryLimit limits the number of items kept - in the application's revision history, which is used for informational - purposes as well as for rollbacks to previous versions. This should - only be changed in exceptional circumstances. Setting to zero will - store no history. This will reduce storage used. Increasing will - increase the space used to store the history, so we do not recommend - increasing it. Default is 10. - format: int64 - type: integer - source: - description: Source is a reference to the location of the application's - manifests or chart - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match paths - against that should be explicitly excluded from being used - during manifest generation - type: string - include: - description: Include contains a glob pattern to match paths - against that should be explicitly included during manifest - generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External Variables - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level Arguments - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the helm - template - items: - description: HelmFileParameter is a file parameter that's - passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally by not - appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters which - are passed to the helm template command upon manifest generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to tell - Helm to interpret booleans and numbers as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all domains - (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to use. - If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition installation - step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files to - use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed to - helm template, typically defined as a block - type: string - version: - description: Version is the Helm version to use for templating - ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional annotations - to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels to - add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether to force - applying common annotations to resources for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to force - applying common labels to resources for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize image - definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - version: - description: Version controls which version of Kustomize to - use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management plugin - specific options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, usually - expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository (Git or Helm) - that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the source - to sync the application to. In case of Git, this can be commit, - tag, or branch. If omitted, will equal to HEAD. In case of Helm, - this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - syncPolicy: - description: SyncPolicy controls when and how a sync will be performed - properties: - automated: - description: Automated will keep an application synced to the - target revision - properties: - allowEmpty: - description: 'AllowEmpty allows apps have zero live resources - (default: false)' - type: boolean - prune: - description: 'Prune specifies whether to delete resources - from the cluster that are not found in the sources anymore - as part of automated sync (default: false)' - type: boolean - selfHeal: - description: 'SelfHeal specifes whether to revert resources - back to their desired state upon modification in the cluster - (default: false)' - type: boolean - type: object - retry: - description: Retry controls failed sync retry behavior - properties: - backoff: - description: Backoff controls how to backoff on subsequent - retries of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default - unit is seconds, but could also be a duration (e.g. - "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base duration - after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of time - allowed for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for retrying - a failed sync. If set to 0, no retries will be performed. - format: int64 - type: integer - type: object - syncOptions: - description: Options allow you to specify whole app sync-options - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - status: - description: ApplicationStatus contains status information for the application - properties: - conditions: - description: Conditions is a list of currently observed application - conditions - items: - description: ApplicationCondition contains details about an application - condition, which is usally an error or warning - properties: - lastTransitionTime: - description: LastTransitionTime is the time the condition was - last observed - format: date-time - type: string - message: - description: Message contains human-readable message indicating - details about condition - type: string - type: - description: Type is an application condition type - type: string - required: - - message - - type - type: object - type: array - health: - description: Health contains information about the application's current - health status - properties: - message: - description: Message is a human-readable informational message - describing the health status - type: string - status: - description: Status holds the status code of the application or - resource - type: string - type: object - history: - description: History contains information about the application's - sync history - items: - description: RevisionHistory contains history information about - a previous sync - properties: - deployStartedAt: - description: DeployStartedAt holds the time the sync operation - started - format: date-time - type: string - deployedAt: - description: DeployedAt holds the time the sync operation completed - format: date-time - type: string - id: - description: ID is an auto incrementing identifier of the RevisionHistory - format: int64 - type: integer - revision: - description: Revision holds the revision the sync was performed - against - type: string - source: - description: Source is a reference to the application source - used for the sync operation - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded from - being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included during - manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the - helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally - by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to - tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to - use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block - type: string - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management - plugin specific options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository (Git or - Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - required: - - deployedAt - - id - - revision - type: object - type: array - observedAt: - description: 'ObservedAt indicates when the application state was - updated without querying latest git state Deprecated: controller - no longer updates ObservedAt field' - format: date-time - type: string - operationState: - description: OperationState contains information about any ongoing - operations, such as a sync - properties: - finishedAt: - description: FinishedAt contains time of operation completion - format: date-time - type: string - message: - description: Message holds any pertinent messages when attempting - to perform operation (typically errors). - type: string - operation: - description: Operation is the original requested operation - properties: - info: - description: Info is a list of informational items for this - operation - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - initiatedBy: - description: InitiatedBy contains information about who initiated - the operations - properties: - automated: - description: Automated is set to true if operation was - initiated automatically by the application controller. - type: boolean - username: - description: Username contains the name of a user who - started operation - type: string - type: object - retry: - description: Retry controls the strategy to apply if a sync - fails - properties: - backoff: - description: Backoff controls how to backoff on subsequent - retries of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default - unit is seconds, but could also be a duration (e.g. - "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base - duration after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of - time allowed for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for - retrying a failed sync. If set to 0, no retries will - be performed. - format: int64 - type: integer - type: object - sync: - description: Sync contains parameters for the operation - properties: - dryRun: - description: DryRun specifies to perform a `kubectl apply - --dry-run` without actually performing the sync - type: boolean - manifests: - description: Manifests is an optional field that overrides - sync source with a local directory for development - items: - type: string - type: array - prune: - description: Prune specifies to delete resources from - the cluster that are no longer tracked in git - type: boolean - resources: - description: Resources describes which resources shall - be part of the sync - items: - description: SyncOperationResource contains resources - to sync. - properties: - group: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - type: array - revision: - description: Revision is the revision (Git) or chart version - (Helm) which to sync the application to If omitted, - will use the revision specified in app spec. - type: string - source: - description: Source overrides the source definition set - in the application. This is typically set in a Rollback - operation and is nil during a Sync operation - properties: - chart: - description: Chart is a Helm chart name, and must - be specified for applications sourced from a Helm - repo. - type: string - directory: - description: Directory holds path/directory specific - options - properties: - exclude: - description: Exclude contains a glob pattern to - match paths against that should be explicitly - excluded from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to - match paths against that should be explicitly - included during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to - Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet - External Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan - a directory recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters - to the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm - parameter - type: string - path: - description: Path is the path to the file - containing the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents - helm template from failing when valueFiles do - not exist locally by not appending them to helm - template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command - upon manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and - numbers as strings - type: boolean - name: - description: Name is the name of the Helm - parameter - type: string - value: - description: Value is the value for the - Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials - to all domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application - name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value - files to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be - passed to helm template, typically defined as - a block - type: string - version: - description: Version is the Helm version to use - for templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies - whether to force applying common annotations - to resources for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether - to force applying common labels to resources - for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image - override specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to - resources for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to - resources for Kustomize apps - type: string - version: - description: Version controls which version of - Kustomize to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git - repository, and is only valid for applications sourced - from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management - plugin specific options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in - the application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository - (Git or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of - the source to sync the application to. In case of - Git, this can be commit, tag, or branch. If omitted, - will equal to HEAD. In case of Helm, this is a semver - tag for the Chart's version. - type: string - required: - - repoURL - type: object - syncOptions: - description: SyncOptions provide per-sync sync-options, - e.g. Validate=false - items: - type: string - type: array - syncStrategy: - description: SyncStrategy describes how to perform the - sync - properties: - apply: - description: Apply will perform a `kubectl apply` - to perform the sync. - properties: - force: - description: Force indicates whether or not to - supply the --force flag to `kubectl apply`. - The --force flag deletes and re-create the resource, - when PATCH encounters conflict and has retried - for 5 times. - type: boolean - type: object - hook: - description: Hook will submit any referenced resources - to perform the sync. This is the default strategy - properties: - force: - description: Force indicates whether or not to - supply the --force flag to `kubectl apply`. - The --force flag deletes and re-create the resource, - when PATCH encounters conflict and has retried - for 5 times. - type: boolean - type: object - type: object - type: object - type: object - phase: - description: Phase is the current phase of the operation - type: string - retryCount: - description: RetryCount contains time of operation retries - format: int64 - type: integer - startedAt: - description: StartedAt contains time of operation start - format: date-time - type: string - syncResult: - description: SyncResult is the result of a Sync operation - properties: - resources: - description: Resources contains a list of sync result items - for each individual resource in a sync operation - items: - description: ResourceResult holds the operation result details - of a specific resource - properties: - group: - description: Group specifies the API group of the resource - type: string - hookPhase: - description: HookPhase contains the state of any operation - associated with this resource OR hook This can also - contain values for non-hook resources. - type: string - hookType: - description: HookType specifies the type of the hook. - Empty for non-hook resources - type: string - kind: - description: Kind specifies the API kind of the resource - type: string - message: - description: Message contains an informational or error - message for the last sync OR operation - type: string - name: - description: Name specifies the name of the resource - type: string - namespace: - description: Namespace specifies the target namespace - of the resource - type: string - status: - description: Status holds the final result of the sync. - Will be empty if the resources is yet to be applied/pruned - and is always zero-value for hooks - type: string - syncPhase: - description: SyncPhase indicates the particular phase - of the sync that this result was acquired in - type: string - version: - description: Version specifies the API version of the - resource - type: string - required: - - group - - kind - - name - - namespace - - version - type: object - type: array - revision: - description: Revision holds the revision this sync operation - was performed to - type: string - source: - description: Source records the application source information - of the sync, used for comparing auto-sync - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded - from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included - during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to - the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block - type: string - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management - plugin specific options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - required: - - revision - type: object - required: - - operation - - phase - - startedAt - type: object - reconciledAt: - description: ReconciledAt indicates when the application state was - reconciled using the latest git version - format: date-time - type: string - resourceHealthSource: - description: 'ResourceHealthSource indicates where the resource health - status is stored: inline if not set or appTree' - type: string - resources: - description: Resources is a list of Kubernetes resources managed by - this application - items: - description: 'ResourceStatus holds the current sync and health status - of a resource TODO: describe members of this type' - properties: - group: - type: string - health: - description: HealthStatus contains information about the currently - observed health state of an application or resource - properties: - message: - description: Message is a human-readable informational message - describing the health status - type: string - status: - description: Status holds the status code of the application - or resource - type: string - type: object - hook: - type: boolean - kind: - type: string - name: - type: string - namespace: - type: string - requiresPruning: - type: boolean - status: - description: SyncStatusCode is a type which represents possible - comparison results - type: string - version: - type: string - type: object - type: array - sourceType: - description: SourceType specifies the type of this application - type: string - summary: - description: Summary contains a list of URLs and container images - used by this application - properties: - externalURLs: - description: ExternalURLs holds all external URLs of application - child resources. - items: - type: string - type: array - images: - description: Images holds all images of application child resources. - items: - type: string - type: array - type: object - sync: - description: Sync contains information about the application's current - sync status - properties: - comparedTo: - description: ComparedTo contains information about what has been - compared - properties: - destination: - description: Destination is a reference to the application's - destination used for comparison - properties: - name: - description: Name is an alternate way of specifying the - target cluster by its symbolic name - type: string - namespace: - description: Namespace specifies the target namespace - for the application's resources. The namespace will - only be set for namespace-scoped resources that have - not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster - and must be set to the Kubernetes control plane API - type: string - type: object - source: - description: Source is a reference to the application's source - used for comparison - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded - from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included - during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to - the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block - type: string - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: ConfigManagementPlugin holds config management - plugin specific options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - required: - - destination - - source - type: object - revision: - description: Revision contains information about the revision - the comparison has been performed to - type: string - status: - description: Status is the sync state of the comparison - type: string - required: - - status - type: object - type: object - required: - - metadata - - spec - type: object - served: true - storage: true - subresources: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: applicationsets.argoproj.io - name: applicationsets.argoproj.io -spec: - group: argoproj.io - names: - kind: ApplicationSet - listKind: ApplicationSetList - plural: applicationsets - shortNames: - - appset - - appsets - singular: applicationset - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - properties: - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true - pullRequest: - properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSubgroups: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true - pullRequest: - properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSubgroups: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - generators - - mergeKeys - type: object - pullRequest: - properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSubgroups: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - goTemplate: - type: boolean - syncPolicy: - properties: - preserveResourcesOnDeletion: - type: boolean - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - type: object - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - - source - type: object - required: - - metadata - - spec - type: object - required: - - generators - - template - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - message - - reason - - status - - type - type: object - type: array - type: object - required: - - metadata - - spec - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: appprojects.argoproj.io - app.kubernetes.io/part-of: argocd - name: appprojects.argoproj.io -spec: - group: argoproj.io - names: - kind: AppProject - listKind: AppProjectList - plural: appprojects - shortNames: - - appproj - - appprojs - singular: appproject - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: 'AppProject provides a logical grouping of applications, providing - controls for: * where the apps may deploy to (cluster whitelist) * what - may be deployed (repository whitelist, resource whitelist/blacklist) * who - can access these applications (roles, OIDC group claims bindings) * and - what they can do (RBAC policies) * automation access to these roles (JWT - tokens)' - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AppProjectSpec is the specification of an AppProject - properties: - clusterResourceBlacklist: - description: ClusterResourceBlacklist contains list of blacklisted - cluster level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - clusterResourceWhitelist: - description: ClusterResourceWhitelist contains list of whitelisted - cluster level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - description: - description: Description contains optional project description - type: string - destinations: - description: Destinations contains list of destinations available - for deployment - items: - description: ApplicationDestination holds information about the - application's destination - properties: - name: - description: Name is an alternate way of specifying the target - cluster by its symbolic name - type: string - namespace: - description: Namespace specifies the target namespace for the - application's resources. The namespace will only be set for - namespace-scoped resources that have not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster - and must be set to the Kubernetes control plane API - type: string - type: object - type: array - namespaceResourceBlacklist: - description: NamespaceResourceBlacklist contains list of blacklisted - namespace level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - namespaceResourceWhitelist: - description: NamespaceResourceWhitelist contains list of whitelisted - namespace level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - orphanedResources: - description: OrphanedResources specifies if controller should monitor - orphaned resources of apps in this project - properties: - ignore: - description: Ignore contains a list of resources that are to be - excluded from orphaned resources monitoring - items: - description: OrphanedResourceKey is a reference to a resource - to be ignored from - properties: - group: - type: string - kind: - type: string - name: - type: string - type: object - type: array - warn: - description: Warn indicates if warning condition should be created - for apps which have orphaned resources - type: boolean - type: object - permitOnlyProjectScopedClusters: - description: PermitOnlyProjectScopedClusters determines whether destinations - can only reference clusters which are project-scoped - type: boolean - roles: - description: Roles are user defined RBAC roles associated with this - project - items: - description: ProjectRole represents a role that has access to a - project - properties: - description: - description: Description is a description of the role - type: string - groups: - description: Groups are a list of OIDC group claims bound to - this role - items: - type: string - type: array - jwtTokens: - description: JWTTokens are a list of generated JWT tokens bound - to this role - items: - description: JWTToken holds the issuedAt and expiresAt values - of a token - properties: - exp: - format: int64 - type: integer - iat: - format: int64 - type: integer - id: - type: string - required: - - iat - type: object - type: array - name: - description: Name is a name for this role - type: string - policies: - description: Policies Stores a list of casbin formatted strings - that define access policies for the role in the project - items: - type: string - type: array - required: - - name - type: object - type: array - signatureKeys: - description: SignatureKeys contains a list of PGP key IDs that commits - in Git must be signed with in order to be allowed for sync - items: - description: SignatureKey is the specification of a key required - to verify commit signatures with - properties: - keyID: - description: The ID of the key in hexadecimal notation - type: string - required: - - keyID - type: object - type: array - sourceNamespaces: - description: SourceNamespaces defines the namespaces application resources - are allowed to be created in - items: - type: string - type: array - sourceRepos: - description: SourceRepos contains list of repository URLs which can - be used for deployment - items: - type: string - type: array - syncWindows: - description: SyncWindows controls when syncs can be run for apps in - this project - items: - description: SyncWindow contains the kind, time, duration and attributes - that are used to assign the syncWindows to apps - properties: - applications: - description: Applications contains a list of applications that - the window will apply to - items: - type: string - type: array - clusters: - description: Clusters contains a list of clusters that the window - will apply to - items: - type: string - type: array - duration: - description: Duration is the amount of time the sync window - will be open - type: string - kind: - description: Kind defines if the window allows or blocks syncs - type: string - manualSync: - description: ManualSync enables manual syncs when they would - otherwise be blocked - type: boolean - namespaces: - description: Namespaces contains a list of namespaces that the - window will apply to - items: - type: string - type: array - schedule: - description: Schedule is the time the window will begin, specified - in cron format - type: string - timeZone: - description: TimeZone of the sync that will be applied to the - schedule - type: string - type: object - type: array - type: object - status: - description: AppProjectStatus contains status information for AppProject - CRs - properties: - jwtTokensByRole: - additionalProperties: - description: JWTTokens represents a list of JWT tokens - properties: - items: - items: - description: JWTToken holds the issuedAt and expiresAt values - of a token - properties: - exp: - format: int64 - type: integer - iat: - format: int64 - type: integer - id: - type: string - required: - - iat - type: object - type: array - type: object - description: JWTTokensByRole contains a list of JWT tokens issued - for a given role - type: object - type: object - required: - - metadata - - spec - type: object - served: true - storage: true ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd-applicationset - name: argocd-applicationset-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - verbs: - - create - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd-applicationset - name: argocd-applicationset-controller -rules: -- apiGroups: - - argoproj.io - resources: - - applications - - applicationsets - - applicationsets/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - argoproj.io - resources: - - appprojects - verbs: - - get -- apiGroups: - - argoproj.io - resources: - - applicationsets/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - events - verbs: - - create - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch -- apiGroups: - - apps - - extensions - resources: - - deployments - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: argocd-notifications-controller -rules: -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - verbs: - - get - - list - - watch - - update - - patch -- apiGroups: - - "" - resources: - - configmaps - - secrets - verbs: - - list - - watch -- apiGroups: - - "" - resourceNames: - - argocd-notifications-cm - resources: - - configmaps - verbs: - - get -- apiGroups: - - "" - resourceNames: - - argocd-notifications-secret - resources: - - secrets - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - create - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - - applicationsets - verbs: - - create - - get - - list - - watch - - update - - delete - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -rules: -- apiGroups: - - '*' - resources: - - '*' - verbs: - - '*' -- nonResourceURLs: - - '*' - verbs: - - '*' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -rules: -- apiGroups: - - '*' - resources: - - '*' - verbs: - - delete - - get - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - list -- apiGroups: - - "" - resources: - - pods - - pods/log - verbs: - - get -- apiGroups: - - argoproj.io - resources: - - applications - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-application-controller -subjects: -- kind: ServiceAccount - name: argocd-application-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd-applicationset - name: argocd-applicationset-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-applicationset-controller -subjects: -- kind: ServiceAccount - name: argocd-applicationset-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-dex-server -subjects: -- kind: ServiceAccount - name: argocd-dex-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: argocd-notifications-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-notifications-controller -subjects: -- kind: ServiceAccount - name: argocd-notifications-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-redis -subjects: -- kind: ServiceAccount - name: argocd-redis ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-server -subjects: -- kind: ServiceAccount - name: argocd-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argocd-application-controller -subjects: -- kind: ServiceAccount - name: argocd-application-controller - namespace: argocd ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argocd-server -subjects: -- kind: ServiceAccount - name: argocd-server - namespace: argocd ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-cm - app.kubernetes.io/part-of: argocd - name: argocd-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-cmd-params-cm - app.kubernetes.io/part-of: argocd - name: argocd-cmd-params-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-gpg-keys-cm - app.kubernetes.io/part-of: argocd - name: argocd-gpg-keys-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: argocd-notifications-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-rbac-cm - app.kubernetes.io/part-of: argocd - name: argocd-rbac-cm ---- -apiVersion: v1 -data: - ssh_known_hosts: |- - bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== - github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ== - gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY= - gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf - gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9 - ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H - vs-ssh.visualstudio.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H - github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= - github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-ssh-known-hosts-cm - app.kubernetes.io/part-of: argocd - name: argocd-ssh-known-hosts-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-tls-certs-cm - app.kubernetes.io/part-of: argocd - name: argocd-tls-certs-cm ---- -apiVersion: v1 -kind: Secret -metadata: - name: argocd-notifications-secret -type: Opaque ---- -apiVersion: v1 -kind: Secret -metadata: - labels: - app.kubernetes.io/name: argocd-secret - app.kubernetes.io/part-of: argocd - name: argocd-secret -type: Opaque ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd-applicationset - name: argocd-applicationset-controller -spec: - ports: - - name: webhook - port: 7000 - protocol: TCP - targetPort: webhook - - name: metrics - port: 8080 - protocol: TCP - targetPort: metrics - selector: - app.kubernetes.io/name: argocd-applicationset-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -spec: - ports: - - name: http - port: 5556 - protocol: TCP - targetPort: 5556 - - name: grpc - port: 5557 - protocol: TCP - targetPort: 5557 - - name: metrics - port: 5558 - protocol: TCP - targetPort: 5558 - selector: - app.kubernetes.io/name: argocd-dex-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: metrics - app.kubernetes.io/name: argocd-metrics - app.kubernetes.io/part-of: argocd - name: argocd-metrics -spec: - ports: - - name: metrics - port: 8082 - protocol: TCP - targetPort: 8082 - selector: - app.kubernetes.io/name: argocd-application-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: argocd-notifications-controller-metrics - name: argocd-notifications-controller-metrics -spec: - ports: - - name: metrics - port: 9001 - protocol: TCP - targetPort: 9001 - selector: - app.kubernetes.io/name: argocd-notifications-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis -spec: - ports: - - name: tcp-redis - port: 6379 - targetPort: 6379 - selector: - app.kubernetes.io/name: argocd-redis ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server -spec: - ports: - - name: server - port: 8081 - protocol: TCP - targetPort: 8081 - - name: metrics - port: 8084 - protocol: TCP - targetPort: 8084 - selector: - app.kubernetes.io/name: argocd-repo-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -spec: - ports: - - name: http - port: 80 - protocol: TCP - targetPort: 8080 - - name: https - port: 443 - protocol: TCP - targetPort: 8080 - selector: - app.kubernetes.io/name: argocd-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server-metrics - app.kubernetes.io/part-of: argocd - name: argocd-server-metrics -spec: - ports: - - name: metrics - port: 8083 - protocol: TCP - targetPort: 8083 - selector: - app.kubernetes.io/name: argocd-server ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd-applicationset - name: argocd-applicationset-controller -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-applicationset-controller - template: - metadata: - labels: - app.kubernetes.io/name: argocd-applicationset-controller - spec: - containers: - - command: - - entrypoint.sh - - argocd-applicationset-controller - env: - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - name: argocd-applicationset-controller - ports: - - containerPort: 7000 - name: webhook - - containerPort: 8080 - name: metrics - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/gpg/source - name: gpg-keys - - mountPath: /app/config/gpg/keys - name: gpg-keyring - - mountPath: /tmp - name: tmp - serviceAccountName: argocd-applicationset-controller - volumes: - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - configMap: - name: argocd-gpg-keys-cm - name: gpg-keys - - emptyDir: {} - name: gpg-keyring - - emptyDir: {} - name: tmp ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-dex-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - command: - - /shared/argocd-dex - - rundex - env: - - name: ARGOCD_DEX_SERVER_DISABLE_TLS - valueFrom: - configMapKeyRef: - key: dexserver.disable.tls - name: argocd-cmd-params-cm - optional: true - image: ghcr.io/dexidp/dex:v2.35.0-distroless - imagePullPolicy: Always - name: dex - ports: - - containerPort: 5556 - - containerPort: 5557 - - containerPort: 5558 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /shared - name: static-files - - mountPath: /tmp - name: dexconfig - - mountPath: /tls - name: argocd-dex-server-tls - initContainers: - - command: - - cp - - -n - - /usr/local/bin/argocd - - /shared/argocd-dex - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - name: copyutil - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /shared - name: static-files - - mountPath: /tmp - name: dexconfig - serviceAccountName: argocd-dex-server - volumes: - - emptyDir: {} - name: static-files - - emptyDir: {} - name: dexconfig - - name: argocd-dex-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-dex-server-tls ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: argocd-notifications-controller -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - strategy: - type: Recreate - template: - metadata: - labels: - app.kubernetes.io/name: argocd-notifications-controller - spec: - containers: - - command: - - argocd-notifications - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - livenessProbe: - tcpSocket: - port: 9001 - name: argocd-notifications-controller - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - volumeMounts: - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/reposerver/tls - name: argocd-repo-server-tls - workingDir: /app - securityContext: - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - serviceAccountName: argocd-notifications-controller - volumes: - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-redis - template: - metadata: - labels: - app.kubernetes.io/name: argocd-redis - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-redis - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - args: - - --save - - "" - - --appendonly - - "no" - image: redis:7.0.5-alpine - imagePullPolicy: Always - name: redis - ports: - - containerPort: 6379 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - securityContext: - runAsNonRoot: true - runAsUser: 999 - seccompProfile: - type: RuntimeDefault - serviceAccountName: argocd-redis ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-repo-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - automountServiceAccountToken: false - containers: - - command: - - sh - - -c - - entrypoint.sh argocd-repo-server --redis argocd-redis:6379 - env: - - name: ARGOCD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_REPO_SERVER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: reposerver.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: reposerver.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT - valueFrom: - configMapKeyRef: - key: reposerver.parallelism.limit - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_DISABLE_TLS - valueFrom: - configMapKeyRef: - key: reposerver.disable.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MIN_VERSION - valueFrom: - configMapKeyRef: - key: reposerver.tls.minversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MAX_VERSION - valueFrom: - configMapKeyRef: - key: reposerver.tls.maxversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_CIPHERS - valueFrom: - configMapKeyRef: - key: reposerver.tls.ciphers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: reposerver.repo.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: reposerver.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_MAX_COMBINED_DIRECTORY_MANIFESTS_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.max.combined.directory.manifests.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_PLUGIN_TAR_EXCLUSIONS - valueFrom: - configMapKeyRef: - key: reposerver.plugin.tar.exclusions - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_ALLOW_OUT_OF_BOUNDS_SYMLINKS - valueFrom: - configMapKeyRef: - key: reposerver.allow.oob.symlinks - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_TAR_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.streamed.manifest.max.tar.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_EXTRACTED_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.streamed.manifest.max.extracted.size - name: argocd-cmd-params-cm - optional: true - - name: HELM_CACHE_HOME - value: /helm-working-dir - - name: HELM_CONFIG_HOME - value: /helm-working-dir - - name: HELM_DATA_HOME - value: /helm-working-dir - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - livenessProbe: - failureThreshold: 3 - httpGet: - path: /healthz?full=true - port: 8084 - initialDelaySeconds: 30 - periodSeconds: 5 - name: argocd-repo-server - ports: - - containerPort: 8081 - - containerPort: 8084 - readinessProbe: - httpGet: - path: /healthz - port: 8084 - initialDelaySeconds: 5 - periodSeconds: 10 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/gpg/source - name: gpg-keys - - mountPath: /app/config/gpg/keys - name: gpg-keyring - - mountPath: /app/config/reposerver/tls - name: argocd-repo-server-tls - - mountPath: /tmp - name: tmp - - mountPath: /helm-working-dir - name: helm-working-dir - - mountPath: /home/argocd/cmp-server/plugins - name: plugins - initContainers: - - command: - - cp - - -n - - /usr/local/bin/argocd - - /var/run/argocd/argocd-cmp-server - image: quay.io/argoproj/argocd:latest - name: copyutil - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /var/run/argocd - name: var-files - serviceAccountName: argocd-repo-server - volumes: - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - configMap: - name: argocd-gpg-keys-cm - name: gpg-keys - - emptyDir: {} - name: gpg-keyring - - emptyDir: {} - name: tmp - - emptyDir: {} - name: helm-working-dir - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls - - emptyDir: {} - name: var-files - - emptyDir: {} - name: plugins ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - command: - - argocd-server - env: - - name: ARGOCD_SERVER_INSECURE - valueFrom: - configMapKeyRef: - key: server.insecure - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_BASEHREF - valueFrom: - configMapKeyRef: - key: server.basehref - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_ROOTPATH - valueFrom: - configMapKeyRef: - key: server.rootpath - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: server.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOG_LEVEL - valueFrom: - configMapKeyRef: - key: server.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER - valueFrom: - configMapKeyRef: - key: repo.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER - valueFrom: - configMapKeyRef: - key: server.dex.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DISABLE_AUTH - valueFrom: - configMapKeyRef: - key: server.disable.auth - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_ENABLE_GZIP - valueFrom: - configMapKeyRef: - key: server.enable.gzip - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: server.repo.server.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_X_FRAME_OPTIONS - valueFrom: - configMapKeyRef: - key: server.x.frame.options - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_CONTENT_SECURITY_POLICY - valueFrom: - configMapKeyRef: - key: server.content.security.policy - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: server.repo.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: server.repo.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: server.dex.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: server.dex.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MIN_VERSION - valueFrom: - configMapKeyRef: - key: server.tls.minversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MAX_VERSION - valueFrom: - configMapKeyRef: - key: server.tls.maxversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_CIPHERS - valueFrom: - configMapKeyRef: - key: server.tls.ciphers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.connection.status.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.oidc.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.login.attempts.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_STATIC_ASSETS - valueFrom: - configMapKeyRef: - key: server.staticassets - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APP_STATE_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.app.state.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_MAX_COOKIE_NUMBER - valueFrom: - configMapKeyRef: - key: server.http.cookie.maxnumber - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_NAMESPACES - valueFrom: - configMapKeyRef: - key: application.namespaces - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - livenessProbe: - httpGet: - path: /healthz?full=true - port: 8080 - initialDelaySeconds: 3 - periodSeconds: 30 - name: argocd-server - ports: - - containerPort: 8080 - - containerPort: 8083 - readinessProbe: - httpGet: - path: /healthz - port: 8080 - initialDelaySeconds: 3 - periodSeconds: 30 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/server/tls - name: argocd-repo-server-tls - - mountPath: /app/config/dex/tls - name: argocd-dex-server-tls - - mountPath: /home/argocd - name: plugins-home - - mountPath: /tmp - name: tmp - serviceAccountName: argocd-server - volumes: - - emptyDir: {} - name: plugins-home - - emptyDir: {} - name: tmp - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls - - name: argocd-dex-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-dex-server-tls ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - serviceName: argocd-application-controller - template: - metadata: - labels: - app.kubernetes.io/name: argocd-application-controller - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - command: - - argocd-application-controller - env: - - name: ARGOCD_CONTROLLER_REPLICAS - value: "1" - - name: ARGOCD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_HARD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.hard.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER - valueFrom: - configMapKeyRef: - key: repo.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: controller.repo.server.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS - valueFrom: - configMapKeyRef: - key: controller.status.processors - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS - valueFrom: - configMapKeyRef: - key: controller.operation.processors - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: controller.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: controller.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.metrics.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: controller.self.heal.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: controller.repo.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: controller.repo.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH - valueFrom: - configMapKeyRef: - key: controller.resource.health.persist - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APP_STATE_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.app.state.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_NAMESPACES - valueFrom: - configMapKeyRef: - key: application.namespaces - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:latest - imagePullPolicy: Always - name: argocd-application-controller - ports: - - containerPort: 8082 - readinessProbe: - httpGet: - path: /healthz - port: 8082 - initialDelaySeconds: 5 - periodSeconds: 10 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/controller/tls - name: argocd-repo-server-tls - - mountPath: /home/argocd - name: argocd-home - workingDir: /home/argocd - serviceAccountName: argocd-application-controller - volumes: - - emptyDir: {} - name: argocd-home - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-application-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 8082 - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-applicationset-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 7000 - protocol: TCP - - port: 8080 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-applicationset-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-dex-server-network-policy -spec: - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - ports: - - port: 5556 - protocol: TCP - - port: 5557 - protocol: TCP - - from: - - namespaceSelector: {} - ports: - - port: 5558 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-notifications-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 9001 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-redis-network-policy -spec: - egress: - - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - to: - - namespaceSelector: {} - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - ports: - - port: 6379 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-redis - policyTypes: - - Ingress - - Egress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-repo-server-network-policy -spec: - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - ports: - - port: 8081 - protocol: TCP - - from: - - namespaceSelector: {} - ports: - - port: 8084 - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-server-network-policy -spec: - ingress: - - {} - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - policyTypes: - - Ingress diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 157e52a71249f..af8297fc30c8b 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -621,6 +621,12 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: ARGOCD_APPLICATIONSET_ENABLE_PROGRESSIVE_ROLLOUTS + valueFrom: + configMapKeyRef: + key: applicationset.enable.progressive.rollouts + name: argocd-cmd-params-cm + optional: true image: quay.io/argoproj/argocd:latest imagePullPolicy: Always name: argocd-applicationset-controller diff --git a/mkdocs.yml b/mkdocs.yml index 81103a0eb7a15..24e243e8af8ab 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -96,6 +96,7 @@ nav: - operator-manual/applicationset/GoTemplate.md - Controlling Resource Modification: operator-manual/applicationset/Controlling-Resource-Modification.md - Application Pruning & Resource Deletion: operator-manual/applicationset/Application-Deletion.md + - Progressive Rollouts: operator-manual/applicationset/Progressive-Rollouts.md - Server Configuration Parameters: - operator-manual/server-commands/argocd-server.md - operator-manual/server-commands/argocd-application-controller.md diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 1f625c07e730b..a33dfe60dcb87 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -7,7 +7,11 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,SignatureKeys API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,SourceNamespaces API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,AppProjectSpec,SourceRepos +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationMatchExpression,Values +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetRolloutStep,MatchExpressions +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetRolloutStrategy,Steps API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetSpec,Generators +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetStatus,ApplicationStatus API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetStatus,Conditions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSetTemplateMeta,Finalizers API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceHelm,FileParameters diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index 1c3d657d99781..9ef0d4970be01 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -25,6 +25,7 @@ import ( apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" ) // Utility struct for a reference to a secret key. @@ -46,12 +47,60 @@ type ApplicationSet struct { Status ApplicationSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } +func (a ApplicationSet) StrategyEnabled() bool { + return a.Spec.Strategy != nil && + a.Spec.Strategy.Type != "" && + ((a.Spec.Strategy.Type == "RollingUpdate" && a.Spec.Strategy.RollingUpdate != nil) || + (a.Spec.Strategy.Type == "RollingSync" && a.Spec.Strategy.RollingSync != nil)) +} + // ApplicationSetSpec represents a class of application set state. type ApplicationSetSpec struct { GoTemplate bool `json:"goTemplate,omitempty" protobuf:"bytes,1,name=goTemplate"` Generators []ApplicationSetGenerator `json:"generators" protobuf:"bytes,2,name=generators"` Template ApplicationSetTemplate `json:"template" protobuf:"bytes,3,name=template"` SyncPolicy *ApplicationSetSyncPolicy `json:"syncPolicy,omitempty" protobuf:"bytes,4,name=syncPolicy"` + Strategy *ApplicationSetStrategy `json:"strategy,omitempty" protobuf:"bytes,5,opt,name=strategy"` +} + +// ApplicationSetStrategy configures how generated Applications are updated in sequence. +type ApplicationSetStrategy struct { + Type string `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"` + RollingSync *ApplicationSetRolloutStrategy `json:"rollingSync,omitempty" protobuf:"bytes,2,opt,name=rollingSync"` + RollingUpdate *ApplicationSetRolloutStrategy `json:"rollingUpdate,omitempty" protobuf:"bytes,3,opt,name=rollingUpdate"` +} + +func (s ApplicationSetStrategy) GetRolloutSteps() []ApplicationSetRolloutStep { + if s.Type == "RollingUpdate" { + return s.RollingUpdate.Steps + } else if s.Type == "RollingSync" { + return s.RollingSync.Steps + } + return nil +} + +func (s ApplicationSetStrategy) GetMaxUpdateForStep(step int) *intstr.IntOrString { + if s.Type == "RollingUpdate" { + return s.RollingUpdate.Steps[step].MaxUpdate + } else if s.Type == "RollingSync" { + return s.RollingSync.Steps[step].MaxUpdate + } + return nil +} + +type ApplicationSetRolloutStrategy struct { + Steps []ApplicationSetRolloutStep `json:"steps,omitempty" protobuf:"bytes,1,opt,name=steps"` +} + +type ApplicationSetRolloutStep struct { + MatchExpressions []ApplicationMatchExpression `json:"matchExpressions,omitempty" protobuf:"bytes,1,opt,name=matchExpressions"` + MaxUpdate *intstr.IntOrString `json:"maxUpdate,omitempty" protobuf:"bytes,2,opt,name=maxUpdate"` +} + +type ApplicationMatchExpression struct { + Key string `json:"key,omitempty" protobuf:"bytes,1,opt,name=key"` + Operator string `json:"operator,omitempty" protobuf:"bytes,2,opt,name=operator"` + Values []string `json:"values,omitempty" protobuf:"bytes,3,opt,name=values"` } // ApplicationSetSyncPolicy configures how generated Applications will relate to their @@ -500,7 +549,8 @@ type PullRequestGeneratorFilter struct { type ApplicationSetStatus struct { // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster // Important: Run "make" to regenerate code after modifying this file - Conditions []ApplicationSetCondition `json:"conditions,omitempty" protobuf:"bytes,1,name=conditions"` + Conditions []ApplicationSetCondition `json:"conditions,omitempty" protobuf:"bytes,1,name=conditions"` + ApplicationStatus []ApplicationSetApplicationStatus `json:"applicationStatus,omitempty" protobuf:"bytes,2,name=applicationStatus"` } // ApplicationSetCondition contains details about an applicationset condition, which is usally an error or warning @@ -536,13 +586,28 @@ const ( // prefix "Info" means informational condition type ApplicationSetConditionType string -//ErrorOccurred / ParametersGenerated / TemplateRendered / ResourcesUpToDate +// ErrorOccurred / ParametersGenerated / TemplateRendered / ResourcesUpToDate const ( ApplicationSetConditionErrorOccurred ApplicationSetConditionType = "ErrorOccurred" ApplicationSetConditionParametersGenerated ApplicationSetConditionType = "ParametersGenerated" ApplicationSetConditionResourcesUpToDate ApplicationSetConditionType = "ResourcesUpToDate" + ApplicationSetConditionRolloutProgressing ApplicationSetConditionType = "RolloutProgressing" ) +// ApplicationSetApplicationCondition contains details about each Application managed by the ApplicationSet +type ApplicationSetApplicationStatus struct { + // Application contains the name of the Application resource + Application string `json:"application" protobuf:"bytes,1,opt,name=application"` + // LastTransitionTime is the time the status was last updated + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,2,opt,name=lastTransitionTime"` + // Message contains human-readable message indicating details about the status + Message string `json:"message" protobuf:"bytes,3,opt,name=message"` + // ObservedHash contains the last applied hash of the generated Application resource + ObservedHash string `json:"observedHash,omitempty" protobuf:"bytes,4,name=observedHash"` + // Status contains the AppSet's perceived status of the managed Application resource: (Waiting, Pending, Progressing, Healthy) + Status string `json:"status" protobuf:"bytes,5,opt,name=status"` +} + type ApplicationSetReasonType string const ( @@ -557,6 +622,8 @@ const ( ApplicationSetReasonDeleteApplicationError = "DeleteApplicationError" ApplicationSetReasonRefreshApplicationError = "RefreshApplicationError" ApplicationSetReasonApplicationValidationError = "ApplicationValidationError" + ApplicationSetReasonApplicationSetModified = "ApplicationSetModified" + ApplicationSetReasonApplicationSetRolloutComplete = "ApplicationSetRolloutComplete" ) // ApplicationSetList contains a list of ApplicationSet @@ -616,3 +683,14 @@ func findConditionIndex(conditions []ApplicationSetCondition, t ApplicationSetCo } return -1 } + +func (status *ApplicationSetStatus) SetApplicationStatus(newStatus ApplicationSetApplicationStatus) { + for i := range status.ApplicationStatus { + appStatus := status.ApplicationStatus[i] + if appStatus.Application == newStatus.Application { + status.ApplicationStatus[i] = newStatus + return + } + } + status.ApplicationStatus = append(status.ApplicationStatus, newStatus) +} diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 4532e57820249..110e84247e5b2 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -23,6 +23,7 @@ import ( reflect "reflect" strings "strings" + intstr "k8s.io/apimachinery/pkg/util/intstr" k8s_io_apimachinery_pkg_watch "k8s.io/apimachinery/pkg/watch" ) @@ -289,10 +290,38 @@ func (m *ApplicationList) XXX_DiscardUnknown() { var xxx_messageInfo_ApplicationList proto.InternalMessageInfo +func (m *ApplicationMatchExpression) Reset() { *m = ApplicationMatchExpression{} } +func (*ApplicationMatchExpression) ProtoMessage() {} +func (*ApplicationMatchExpression) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{9} +} +func (m *ApplicationMatchExpression) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationMatchExpression) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplicationMatchExpression) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationMatchExpression.Merge(m, src) +} +func (m *ApplicationMatchExpression) XXX_Size() int { + return m.Size() +} +func (m *ApplicationMatchExpression) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationMatchExpression.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationMatchExpression proto.InternalMessageInfo + func (m *ApplicationSet) Reset() { *m = ApplicationSet{} } func (*ApplicationSet) ProtoMessage() {} func (*ApplicationSet) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{9} + return fileDescriptor_030104ce3b95bcac, []int{10} } func (m *ApplicationSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -317,10 +346,38 @@ func (m *ApplicationSet) XXX_DiscardUnknown() { var xxx_messageInfo_ApplicationSet proto.InternalMessageInfo +func (m *ApplicationSetApplicationStatus) Reset() { *m = ApplicationSetApplicationStatus{} } +func (*ApplicationSetApplicationStatus) ProtoMessage() {} +func (*ApplicationSetApplicationStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{11} +} +func (m *ApplicationSetApplicationStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationSetApplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplicationSetApplicationStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationSetApplicationStatus.Merge(m, src) +} +func (m *ApplicationSetApplicationStatus) XXX_Size() int { + return m.Size() +} +func (m *ApplicationSetApplicationStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationSetApplicationStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationSetApplicationStatus proto.InternalMessageInfo + func (m *ApplicationSetCondition) Reset() { *m = ApplicationSetCondition{} } func (*ApplicationSetCondition) ProtoMessage() {} func (*ApplicationSetCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{10} + return fileDescriptor_030104ce3b95bcac, []int{12} } func (m *ApplicationSetCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -348,7 +405,7 @@ var xxx_messageInfo_ApplicationSetCondition proto.InternalMessageInfo func (m *ApplicationSetGenerator) Reset() { *m = ApplicationSetGenerator{} } func (*ApplicationSetGenerator) ProtoMessage() {} func (*ApplicationSetGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{11} + return fileDescriptor_030104ce3b95bcac, []int{13} } func (m *ApplicationSetGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -376,7 +433,7 @@ var xxx_messageInfo_ApplicationSetGenerator proto.InternalMessageInfo func (m *ApplicationSetList) Reset() { *m = ApplicationSetList{} } func (*ApplicationSetList) ProtoMessage() {} func (*ApplicationSetList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{12} + return fileDescriptor_030104ce3b95bcac, []int{14} } func (m *ApplicationSetList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -404,7 +461,7 @@ var xxx_messageInfo_ApplicationSetList proto.InternalMessageInfo func (m *ApplicationSetNestedGenerator) Reset() { *m = ApplicationSetNestedGenerator{} } func (*ApplicationSetNestedGenerator) ProtoMessage() {} func (*ApplicationSetNestedGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{13} + return fileDescriptor_030104ce3b95bcac, []int{15} } func (m *ApplicationSetNestedGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -429,10 +486,66 @@ func (m *ApplicationSetNestedGenerator) XXX_DiscardUnknown() { var xxx_messageInfo_ApplicationSetNestedGenerator proto.InternalMessageInfo +func (m *ApplicationSetRolloutStep) Reset() { *m = ApplicationSetRolloutStep{} } +func (*ApplicationSetRolloutStep) ProtoMessage() {} +func (*ApplicationSetRolloutStep) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{16} +} +func (m *ApplicationSetRolloutStep) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationSetRolloutStep) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplicationSetRolloutStep) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationSetRolloutStep.Merge(m, src) +} +func (m *ApplicationSetRolloutStep) XXX_Size() int { + return m.Size() +} +func (m *ApplicationSetRolloutStep) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationSetRolloutStep.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationSetRolloutStep proto.InternalMessageInfo + +func (m *ApplicationSetRolloutStrategy) Reset() { *m = ApplicationSetRolloutStrategy{} } +func (*ApplicationSetRolloutStrategy) ProtoMessage() {} +func (*ApplicationSetRolloutStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{17} +} +func (m *ApplicationSetRolloutStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationSetRolloutStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplicationSetRolloutStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationSetRolloutStrategy.Merge(m, src) +} +func (m *ApplicationSetRolloutStrategy) XXX_Size() int { + return m.Size() +} +func (m *ApplicationSetRolloutStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationSetRolloutStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationSetRolloutStrategy proto.InternalMessageInfo + func (m *ApplicationSetSpec) Reset() { *m = ApplicationSetSpec{} } func (*ApplicationSetSpec) ProtoMessage() {} func (*ApplicationSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{14} + return fileDescriptor_030104ce3b95bcac, []int{18} } func (m *ApplicationSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -460,7 +573,7 @@ var xxx_messageInfo_ApplicationSetSpec proto.InternalMessageInfo func (m *ApplicationSetStatus) Reset() { *m = ApplicationSetStatus{} } func (*ApplicationSetStatus) ProtoMessage() {} func (*ApplicationSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{15} + return fileDescriptor_030104ce3b95bcac, []int{19} } func (m *ApplicationSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -485,10 +598,38 @@ func (m *ApplicationSetStatus) XXX_DiscardUnknown() { var xxx_messageInfo_ApplicationSetStatus proto.InternalMessageInfo +func (m *ApplicationSetStrategy) Reset() { *m = ApplicationSetStrategy{} } +func (*ApplicationSetStrategy) ProtoMessage() {} +func (*ApplicationSetStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{20} +} +func (m *ApplicationSetStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationSetStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplicationSetStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationSetStrategy.Merge(m, src) +} +func (m *ApplicationSetStrategy) XXX_Size() int { + return m.Size() +} +func (m *ApplicationSetStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationSetStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationSetStrategy proto.InternalMessageInfo + func (m *ApplicationSetSyncPolicy) Reset() { *m = ApplicationSetSyncPolicy{} } func (*ApplicationSetSyncPolicy) ProtoMessage() {} func (*ApplicationSetSyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{16} + return fileDescriptor_030104ce3b95bcac, []int{21} } func (m *ApplicationSetSyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -516,7 +657,7 @@ var xxx_messageInfo_ApplicationSetSyncPolicy proto.InternalMessageInfo func (m *ApplicationSetTemplate) Reset() { *m = ApplicationSetTemplate{} } func (*ApplicationSetTemplate) ProtoMessage() {} func (*ApplicationSetTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{17} + return fileDescriptor_030104ce3b95bcac, []int{22} } func (m *ApplicationSetTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -544,7 +685,7 @@ var xxx_messageInfo_ApplicationSetTemplate proto.InternalMessageInfo func (m *ApplicationSetTemplateMeta) Reset() { *m = ApplicationSetTemplateMeta{} } func (*ApplicationSetTemplateMeta) ProtoMessage() {} func (*ApplicationSetTemplateMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{18} + return fileDescriptor_030104ce3b95bcac, []int{23} } func (m *ApplicationSetTemplateMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -572,7 +713,7 @@ var xxx_messageInfo_ApplicationSetTemplateMeta proto.InternalMessageInfo func (m *ApplicationSetTerminalGenerator) Reset() { *m = ApplicationSetTerminalGenerator{} } func (*ApplicationSetTerminalGenerator) ProtoMessage() {} func (*ApplicationSetTerminalGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{19} + return fileDescriptor_030104ce3b95bcac, []int{24} } func (m *ApplicationSetTerminalGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -600,7 +741,7 @@ var xxx_messageInfo_ApplicationSetTerminalGenerator proto.InternalMessageInfo func (m *ApplicationSource) Reset() { *m = ApplicationSource{} } func (*ApplicationSource) ProtoMessage() {} func (*ApplicationSource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{20} + return fileDescriptor_030104ce3b95bcac, []int{25} } func (m *ApplicationSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -628,7 +769,7 @@ var xxx_messageInfo_ApplicationSource proto.InternalMessageInfo func (m *ApplicationSourceDirectory) Reset() { *m = ApplicationSourceDirectory{} } func (*ApplicationSourceDirectory) ProtoMessage() {} func (*ApplicationSourceDirectory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{21} + return fileDescriptor_030104ce3b95bcac, []int{26} } func (m *ApplicationSourceDirectory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -656,7 +797,7 @@ var xxx_messageInfo_ApplicationSourceDirectory proto.InternalMessageInfo func (m *ApplicationSourceHelm) Reset() { *m = ApplicationSourceHelm{} } func (*ApplicationSourceHelm) ProtoMessage() {} func (*ApplicationSourceHelm) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{22} + return fileDescriptor_030104ce3b95bcac, []int{27} } func (m *ApplicationSourceHelm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -684,7 +825,7 @@ var xxx_messageInfo_ApplicationSourceHelm proto.InternalMessageInfo func (m *ApplicationSourceJsonnet) Reset() { *m = ApplicationSourceJsonnet{} } func (*ApplicationSourceJsonnet) ProtoMessage() {} func (*ApplicationSourceJsonnet) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{23} + return fileDescriptor_030104ce3b95bcac, []int{28} } func (m *ApplicationSourceJsonnet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -712,7 +853,7 @@ var xxx_messageInfo_ApplicationSourceJsonnet proto.InternalMessageInfo func (m *ApplicationSourceKustomize) Reset() { *m = ApplicationSourceKustomize{} } func (*ApplicationSourceKustomize) ProtoMessage() {} func (*ApplicationSourceKustomize) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{24} + return fileDescriptor_030104ce3b95bcac, []int{29} } func (m *ApplicationSourceKustomize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -740,7 +881,7 @@ var xxx_messageInfo_ApplicationSourceKustomize proto.InternalMessageInfo func (m *ApplicationSourcePlugin) Reset() { *m = ApplicationSourcePlugin{} } func (*ApplicationSourcePlugin) ProtoMessage() {} func (*ApplicationSourcePlugin) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{25} + return fileDescriptor_030104ce3b95bcac, []int{30} } func (m *ApplicationSourcePlugin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -768,7 +909,7 @@ var xxx_messageInfo_ApplicationSourcePlugin proto.InternalMessageInfo func (m *ApplicationSpec) Reset() { *m = ApplicationSpec{} } func (*ApplicationSpec) ProtoMessage() {} func (*ApplicationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{26} + return fileDescriptor_030104ce3b95bcac, []int{31} } func (m *ApplicationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -796,7 +937,7 @@ var xxx_messageInfo_ApplicationSpec proto.InternalMessageInfo func (m *ApplicationStatus) Reset() { *m = ApplicationStatus{} } func (*ApplicationStatus) ProtoMessage() {} func (*ApplicationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{27} + return fileDescriptor_030104ce3b95bcac, []int{32} } func (m *ApplicationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -824,7 +965,7 @@ var xxx_messageInfo_ApplicationStatus proto.InternalMessageInfo func (m *ApplicationSummary) Reset() { *m = ApplicationSummary{} } func (*ApplicationSummary) ProtoMessage() {} func (*ApplicationSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{28} + return fileDescriptor_030104ce3b95bcac, []int{33} } func (m *ApplicationSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -852,7 +993,7 @@ var xxx_messageInfo_ApplicationSummary proto.InternalMessageInfo func (m *ApplicationTree) Reset() { *m = ApplicationTree{} } func (*ApplicationTree) ProtoMessage() {} func (*ApplicationTree) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{29} + return fileDescriptor_030104ce3b95bcac, []int{34} } func (m *ApplicationTree) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -880,7 +1021,7 @@ var xxx_messageInfo_ApplicationTree proto.InternalMessageInfo func (m *ApplicationWatchEvent) Reset() { *m = ApplicationWatchEvent{} } func (*ApplicationWatchEvent) ProtoMessage() {} func (*ApplicationWatchEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{30} + return fileDescriptor_030104ce3b95bcac, []int{35} } func (m *ApplicationWatchEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -908,7 +1049,7 @@ var xxx_messageInfo_ApplicationWatchEvent proto.InternalMessageInfo func (m *Backoff) Reset() { *m = Backoff{} } func (*Backoff) ProtoMessage() {} func (*Backoff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{31} + return fileDescriptor_030104ce3b95bcac, []int{36} } func (m *Backoff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -936,7 +1077,7 @@ var xxx_messageInfo_Backoff proto.InternalMessageInfo func (m *BasicAuthBitbucketServer) Reset() { *m = BasicAuthBitbucketServer{} } func (*BasicAuthBitbucketServer) ProtoMessage() {} func (*BasicAuthBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{32} + return fileDescriptor_030104ce3b95bcac, []int{37} } func (m *BasicAuthBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -964,7 +1105,7 @@ var xxx_messageInfo_BasicAuthBitbucketServer proto.InternalMessageInfo func (m *Cluster) Reset() { *m = Cluster{} } func (*Cluster) ProtoMessage() {} func (*Cluster) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{33} + return fileDescriptor_030104ce3b95bcac, []int{38} } func (m *Cluster) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -992,7 +1133,7 @@ var xxx_messageInfo_Cluster proto.InternalMessageInfo func (m *ClusterCacheInfo) Reset() { *m = ClusterCacheInfo{} } func (*ClusterCacheInfo) ProtoMessage() {} func (*ClusterCacheInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{34} + return fileDescriptor_030104ce3b95bcac, []int{39} } func (m *ClusterCacheInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1020,7 +1161,7 @@ var xxx_messageInfo_ClusterCacheInfo proto.InternalMessageInfo func (m *ClusterConfig) Reset() { *m = ClusterConfig{} } func (*ClusterConfig) ProtoMessage() {} func (*ClusterConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{35} + return fileDescriptor_030104ce3b95bcac, []int{40} } func (m *ClusterConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1048,7 +1189,7 @@ var xxx_messageInfo_ClusterConfig proto.InternalMessageInfo func (m *ClusterGenerator) Reset() { *m = ClusterGenerator{} } func (*ClusterGenerator) ProtoMessage() {} func (*ClusterGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{36} + return fileDescriptor_030104ce3b95bcac, []int{41} } func (m *ClusterGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1076,7 +1217,7 @@ var xxx_messageInfo_ClusterGenerator proto.InternalMessageInfo func (m *ClusterInfo) Reset() { *m = ClusterInfo{} } func (*ClusterInfo) ProtoMessage() {} func (*ClusterInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{37} + return fileDescriptor_030104ce3b95bcac, []int{42} } func (m *ClusterInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1104,7 +1245,7 @@ var xxx_messageInfo_ClusterInfo proto.InternalMessageInfo func (m *ClusterList) Reset() { *m = ClusterList{} } func (*ClusterList) ProtoMessage() {} func (*ClusterList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{38} + return fileDescriptor_030104ce3b95bcac, []int{43} } func (m *ClusterList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1132,7 +1273,7 @@ var xxx_messageInfo_ClusterList proto.InternalMessageInfo func (m *Command) Reset() { *m = Command{} } func (*Command) ProtoMessage() {} func (*Command) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{39} + return fileDescriptor_030104ce3b95bcac, []int{44} } func (m *Command) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1160,7 +1301,7 @@ var xxx_messageInfo_Command proto.InternalMessageInfo func (m *ComparedTo) Reset() { *m = ComparedTo{} } func (*ComparedTo) ProtoMessage() {} func (*ComparedTo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{40} + return fileDescriptor_030104ce3b95bcac, []int{45} } func (m *ComparedTo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1188,7 +1329,7 @@ var xxx_messageInfo_ComparedTo proto.InternalMessageInfo func (m *ComponentParameter) Reset() { *m = ComponentParameter{} } func (*ComponentParameter) ProtoMessage() {} func (*ComponentParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{41} + return fileDescriptor_030104ce3b95bcac, []int{46} } func (m *ComponentParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1216,7 +1357,7 @@ var xxx_messageInfo_ComponentParameter proto.InternalMessageInfo func (m *ConfigManagementPlugin) Reset() { *m = ConfigManagementPlugin{} } func (*ConfigManagementPlugin) ProtoMessage() {} func (*ConfigManagementPlugin) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{42} + return fileDescriptor_030104ce3b95bcac, []int{47} } func (m *ConfigManagementPlugin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1244,7 +1385,7 @@ var xxx_messageInfo_ConfigManagementPlugin proto.InternalMessageInfo func (m *ConnectionState) Reset() { *m = ConnectionState{} } func (*ConnectionState) ProtoMessage() {} func (*ConnectionState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{43} + return fileDescriptor_030104ce3b95bcac, []int{48} } func (m *ConnectionState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1272,7 +1413,7 @@ var xxx_messageInfo_ConnectionState proto.InternalMessageInfo func (m *DuckTypeGenerator) Reset() { *m = DuckTypeGenerator{} } func (*DuckTypeGenerator) ProtoMessage() {} func (*DuckTypeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{44} + return fileDescriptor_030104ce3b95bcac, []int{49} } func (m *DuckTypeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1300,7 +1441,7 @@ var xxx_messageInfo_DuckTypeGenerator proto.InternalMessageInfo func (m *EnvEntry) Reset() { *m = EnvEntry{} } func (*EnvEntry) ProtoMessage() {} func (*EnvEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{45} + return fileDescriptor_030104ce3b95bcac, []int{50} } func (m *EnvEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1328,7 +1469,7 @@ var xxx_messageInfo_EnvEntry proto.InternalMessageInfo func (m *ExecProviderConfig) Reset() { *m = ExecProviderConfig{} } func (*ExecProviderConfig) ProtoMessage() {} func (*ExecProviderConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{46} + return fileDescriptor_030104ce3b95bcac, []int{51} } func (m *ExecProviderConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1356,7 +1497,7 @@ var xxx_messageInfo_ExecProviderConfig proto.InternalMessageInfo func (m *GitDirectoryGeneratorItem) Reset() { *m = GitDirectoryGeneratorItem{} } func (*GitDirectoryGeneratorItem) ProtoMessage() {} func (*GitDirectoryGeneratorItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{47} + return fileDescriptor_030104ce3b95bcac, []int{52} } func (m *GitDirectoryGeneratorItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1384,7 +1525,7 @@ var xxx_messageInfo_GitDirectoryGeneratorItem proto.InternalMessageInfo func (m *GitFileGeneratorItem) Reset() { *m = GitFileGeneratorItem{} } func (*GitFileGeneratorItem) ProtoMessage() {} func (*GitFileGeneratorItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{48} + return fileDescriptor_030104ce3b95bcac, []int{53} } func (m *GitFileGeneratorItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1412,7 +1553,7 @@ var xxx_messageInfo_GitFileGeneratorItem proto.InternalMessageInfo func (m *GitGenerator) Reset() { *m = GitGenerator{} } func (*GitGenerator) ProtoMessage() {} func (*GitGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{49} + return fileDescriptor_030104ce3b95bcac, []int{54} } func (m *GitGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1440,7 +1581,7 @@ var xxx_messageInfo_GitGenerator proto.InternalMessageInfo func (m *GnuPGPublicKey) Reset() { *m = GnuPGPublicKey{} } func (*GnuPGPublicKey) ProtoMessage() {} func (*GnuPGPublicKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{50} + return fileDescriptor_030104ce3b95bcac, []int{55} } func (m *GnuPGPublicKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1468,7 +1609,7 @@ var xxx_messageInfo_GnuPGPublicKey proto.InternalMessageInfo func (m *GnuPGPublicKeyList) Reset() { *m = GnuPGPublicKeyList{} } func (*GnuPGPublicKeyList) ProtoMessage() {} func (*GnuPGPublicKeyList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{51} + return fileDescriptor_030104ce3b95bcac, []int{56} } func (m *GnuPGPublicKeyList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1496,7 +1637,7 @@ var xxx_messageInfo_GnuPGPublicKeyList proto.InternalMessageInfo func (m *HealthStatus) Reset() { *m = HealthStatus{} } func (*HealthStatus) ProtoMessage() {} func (*HealthStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{52} + return fileDescriptor_030104ce3b95bcac, []int{57} } func (m *HealthStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1524,7 +1665,7 @@ var xxx_messageInfo_HealthStatus proto.InternalMessageInfo func (m *HelmFileParameter) Reset() { *m = HelmFileParameter{} } func (*HelmFileParameter) ProtoMessage() {} func (*HelmFileParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{53} + return fileDescriptor_030104ce3b95bcac, []int{58} } func (m *HelmFileParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1552,7 +1693,7 @@ var xxx_messageInfo_HelmFileParameter proto.InternalMessageInfo func (m *HelmOptions) Reset() { *m = HelmOptions{} } func (*HelmOptions) ProtoMessage() {} func (*HelmOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{54} + return fileDescriptor_030104ce3b95bcac, []int{59} } func (m *HelmOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1580,7 +1721,7 @@ var xxx_messageInfo_HelmOptions proto.InternalMessageInfo func (m *HelmParameter) Reset() { *m = HelmParameter{} } func (*HelmParameter) ProtoMessage() {} func (*HelmParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{55} + return fileDescriptor_030104ce3b95bcac, []int{60} } func (m *HelmParameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1608,7 +1749,7 @@ var xxx_messageInfo_HelmParameter proto.InternalMessageInfo func (m *HostInfo) Reset() { *m = HostInfo{} } func (*HostInfo) ProtoMessage() {} func (*HostInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{56} + return fileDescriptor_030104ce3b95bcac, []int{61} } func (m *HostInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1636,7 +1777,7 @@ var xxx_messageInfo_HostInfo proto.InternalMessageInfo func (m *HostResourceInfo) Reset() { *m = HostResourceInfo{} } func (*HostResourceInfo) ProtoMessage() {} func (*HostResourceInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{57} + return fileDescriptor_030104ce3b95bcac, []int{62} } func (m *HostResourceInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1664,7 +1805,7 @@ var xxx_messageInfo_HostResourceInfo proto.InternalMessageInfo func (m *Info) Reset() { *m = Info{} } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{58} + return fileDescriptor_030104ce3b95bcac, []int{63} } func (m *Info) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1692,7 +1833,7 @@ var xxx_messageInfo_Info proto.InternalMessageInfo func (m *InfoItem) Reset() { *m = InfoItem{} } func (*InfoItem) ProtoMessage() {} func (*InfoItem) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{59} + return fileDescriptor_030104ce3b95bcac, []int{64} } func (m *InfoItem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1720,7 +1861,7 @@ var xxx_messageInfo_InfoItem proto.InternalMessageInfo func (m *JWTToken) Reset() { *m = JWTToken{} } func (*JWTToken) ProtoMessage() {} func (*JWTToken) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{60} + return fileDescriptor_030104ce3b95bcac, []int{65} } func (m *JWTToken) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1748,7 +1889,7 @@ var xxx_messageInfo_JWTToken proto.InternalMessageInfo func (m *JWTTokens) Reset() { *m = JWTTokens{} } func (*JWTTokens) ProtoMessage() {} func (*JWTTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{61} + return fileDescriptor_030104ce3b95bcac, []int{66} } func (m *JWTTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1776,7 +1917,7 @@ var xxx_messageInfo_JWTTokens proto.InternalMessageInfo func (m *JsonnetVar) Reset() { *m = JsonnetVar{} } func (*JsonnetVar) ProtoMessage() {} func (*JsonnetVar) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{62} + return fileDescriptor_030104ce3b95bcac, []int{67} } func (m *JsonnetVar) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1804,7 +1945,7 @@ var xxx_messageInfo_JsonnetVar proto.InternalMessageInfo func (m *KnownTypeField) Reset() { *m = KnownTypeField{} } func (*KnownTypeField) ProtoMessage() {} func (*KnownTypeField) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{63} + return fileDescriptor_030104ce3b95bcac, []int{68} } func (m *KnownTypeField) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1832,7 +1973,7 @@ var xxx_messageInfo_KnownTypeField proto.InternalMessageInfo func (m *KustomizeOptions) Reset() { *m = KustomizeOptions{} } func (*KustomizeOptions) ProtoMessage() {} func (*KustomizeOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{64} + return fileDescriptor_030104ce3b95bcac, []int{69} } func (m *KustomizeOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1860,7 +2001,7 @@ var xxx_messageInfo_KustomizeOptions proto.InternalMessageInfo func (m *ListGenerator) Reset() { *m = ListGenerator{} } func (*ListGenerator) ProtoMessage() {} func (*ListGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{65} + return fileDescriptor_030104ce3b95bcac, []int{70} } func (m *ListGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1888,7 +2029,7 @@ var xxx_messageInfo_ListGenerator proto.InternalMessageInfo func (m *MatrixGenerator) Reset() { *m = MatrixGenerator{} } func (*MatrixGenerator) ProtoMessage() {} func (*MatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{66} + return fileDescriptor_030104ce3b95bcac, []int{71} } func (m *MatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1916,7 +2057,7 @@ var xxx_messageInfo_MatrixGenerator proto.InternalMessageInfo func (m *MergeGenerator) Reset() { *m = MergeGenerator{} } func (*MergeGenerator) ProtoMessage() {} func (*MergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{67} + return fileDescriptor_030104ce3b95bcac, []int{72} } func (m *MergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1944,7 +2085,7 @@ var xxx_messageInfo_MergeGenerator proto.InternalMessageInfo func (m *NestedMatrixGenerator) Reset() { *m = NestedMatrixGenerator{} } func (*NestedMatrixGenerator) ProtoMessage() {} func (*NestedMatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{68} + return fileDescriptor_030104ce3b95bcac, []int{73} } func (m *NestedMatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1972,7 +2113,7 @@ var xxx_messageInfo_NestedMatrixGenerator proto.InternalMessageInfo func (m *NestedMergeGenerator) Reset() { *m = NestedMergeGenerator{} } func (*NestedMergeGenerator) ProtoMessage() {} func (*NestedMergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{69} + return fileDescriptor_030104ce3b95bcac, []int{74} } func (m *NestedMergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2000,7 +2141,7 @@ var xxx_messageInfo_NestedMergeGenerator proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{70} + return fileDescriptor_030104ce3b95bcac, []int{75} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2028,7 +2169,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationInitiator) Reset() { *m = OperationInitiator{} } func (*OperationInitiator) ProtoMessage() {} func (*OperationInitiator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{71} + return fileDescriptor_030104ce3b95bcac, []int{76} } func (m *OperationInitiator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2056,7 +2197,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{72} + return fileDescriptor_030104ce3b95bcac, []int{77} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2084,7 +2225,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{73} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2112,7 +2253,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{74} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2140,7 +2281,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{75} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2168,7 +2309,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{76} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2196,7 +2337,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2224,7 +2365,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{78} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2252,7 +2393,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{79} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2280,7 +2421,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{80} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2308,7 +2449,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2336,7 +2477,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2364,7 +2505,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2392,7 +2533,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2420,7 +2561,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{90} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2448,7 +2589,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2476,7 +2617,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2504,7 +2645,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2532,7 +2673,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2560,7 +2701,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2588,7 +2729,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2616,7 +2757,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2644,7 +2785,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2672,7 +2813,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2700,7 +2841,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2728,7 +2869,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2756,7 +2897,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2784,7 +2925,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2812,7 +2953,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2840,7 +2981,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2868,7 +3009,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2896,7 +3037,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2924,7 +3065,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2952,7 +3093,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2980,7 +3121,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3008,7 +3149,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3036,7 +3177,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3064,7 +3205,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3092,7 +3233,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3120,7 +3261,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3148,7 +3289,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3176,7 +3317,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3204,7 +3345,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3232,7 +3373,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3260,7 +3401,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3288,7 +3429,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3316,7 +3457,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3344,7 +3485,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3372,7 +3513,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3400,7 +3541,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3428,7 +3569,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{126} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3456,7 +3597,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{127} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3484,7 +3625,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{128} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3512,7 +3653,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{129} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3548,13 +3689,18 @@ func init() { proto.RegisterType((*ApplicationCondition)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationCondition") proto.RegisterType((*ApplicationDestination)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationDestination") proto.RegisterType((*ApplicationList)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationList") + proto.RegisterType((*ApplicationMatchExpression)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationMatchExpression") proto.RegisterType((*ApplicationSet)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSet") + proto.RegisterType((*ApplicationSetApplicationStatus)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetApplicationStatus") proto.RegisterType((*ApplicationSetCondition)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetCondition") proto.RegisterType((*ApplicationSetGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetGenerator") proto.RegisterType((*ApplicationSetList)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetList") proto.RegisterType((*ApplicationSetNestedGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetNestedGenerator") + proto.RegisterType((*ApplicationSetRolloutStep)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetRolloutStep") + proto.RegisterType((*ApplicationSetRolloutStrategy)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetRolloutStrategy") proto.RegisterType((*ApplicationSetSpec)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetSpec") proto.RegisterType((*ApplicationSetStatus)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetStatus") + proto.RegisterType((*ApplicationSetStrategy)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetStrategy") proto.RegisterType((*ApplicationSetSyncPolicy)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetSyncPolicy") proto.RegisterType((*ApplicationSetTemplate)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetTemplate") proto.RegisterType((*ApplicationSetTemplateMeta)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSetTemplateMeta") @@ -3682,566 +3828,586 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 8937 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x1c, 0x49, - 0x76, 0xd8, 0xf6, 0x0c, 0x87, 0x9c, 0x79, 0xfc, 0x90, 0x58, 0x92, 0x76, 0xb9, 0xda, 0x5d, 0x51, - 0xe8, 0x85, 0xef, 0xd6, 0xb9, 0x5d, 0x32, 0x2b, 0xef, 0x5d, 0x36, 0x5e, 0x7b, 0xcf, 0x1c, 0x52, - 0xa2, 0x28, 0xf1, 0x6b, 0x8b, 0x94, 0xe4, 0xdb, 0xf3, 0x7d, 0x34, 0x7b, 0x6a, 0x86, 0x2d, 0xf6, - 0x74, 0x8f, 0xba, 0x7b, 0x28, 0xce, 0xfa, 0xeb, 0xee, 0x6c, 0xc7, 0x17, 0xdc, 0x67, 0x7c, 0x01, - 0x72, 0x06, 0x82, 0xe4, 0x72, 0x36, 0x8c, 0x18, 0xc9, 0x21, 0xc9, 0xaf, 0x7c, 0x21, 0x3f, 0x6c, - 0xe7, 0xc7, 0x05, 0x09, 0x90, 0x03, 0x62, 0xf8, 0x9c, 0x38, 0xa1, 0xef, 0x98, 0x04, 0x4e, 0x0c, - 0xc4, 0x41, 0x1c, 0xff, 0x89, 0x90, 0x1f, 0x46, 0x7d, 0x57, 0xf7, 0xcc, 0x88, 0x33, 0x62, 0x53, - 0x92, 0x0f, 0xfb, 0x6f, 0xe6, 0xbd, 0xd7, 0xef, 0xbd, 0xae, 0xae, 0x7a, 0xf5, 0xaa, 0xde, 0xab, - 0x57, 0xb0, 0xda, 0xf0, 0x92, 0xdd, 0xf6, 0xce, 0x9c, 0x1b, 0x36, 0xe7, 0x9d, 0xa8, 0x11, 0xb6, - 0xa2, 0xf0, 0x2e, 0xfb, 0xf1, 0x9a, 0x5b, 0x9b, 0xdf, 0xbf, 0x32, 0xdf, 0xda, 0x6b, 0xcc, 0x3b, - 0x2d, 0x2f, 0x9e, 0x77, 0x5a, 0x2d, 0xdf, 0x73, 0x9d, 0xc4, 0x0b, 0x83, 0xf9, 0xfd, 0xd7, 0x1d, - 0xbf, 0xb5, 0xeb, 0xbc, 0x3e, 0xdf, 0x20, 0x01, 0x89, 0x9c, 0x84, 0xd4, 0xe6, 0x5a, 0x51, 0x98, - 0x84, 0xe8, 0xc7, 0x34, 0xb7, 0x39, 0xc9, 0x8d, 0xfd, 0xf8, 0x94, 0x5b, 0x9b, 0xdb, 0xbf, 0x32, - 0xd7, 0xda, 0x6b, 0xcc, 0x51, 0x6e, 0x73, 0x06, 0xb7, 0x39, 0xc9, 0xed, 0xe2, 0x6b, 0x86, 0x2e, - 0x8d, 0xb0, 0x11, 0xce, 0x33, 0xa6, 0x3b, 0xed, 0x3a, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x5c, 0xd8, - 0x45, 0x7b, 0xef, 0xcd, 0x78, 0xce, 0x0b, 0xa9, 0x7a, 0xf3, 0x6e, 0x18, 0x91, 0xf9, 0xfd, 0x2e, - 0x85, 0x2e, 0x5e, 0xd7, 0x34, 0xe4, 0x20, 0x21, 0x41, 0xec, 0x85, 0x41, 0xfc, 0x1a, 0x55, 0x81, - 0x44, 0xfb, 0x24, 0x32, 0x5f, 0xcf, 0x20, 0xe8, 0xc5, 0xe9, 0x0d, 0xcd, 0xa9, 0xe9, 0xb8, 0xbb, - 0x5e, 0x40, 0xa2, 0x8e, 0x7e, 0xbc, 0x49, 0x12, 0xa7, 0xd7, 0x53, 0xf3, 0xfd, 0x9e, 0x8a, 0xda, - 0x41, 0xe2, 0x35, 0x49, 0xd7, 0x03, 0x1f, 0x39, 0xee, 0x81, 0xd8, 0xdd, 0x25, 0x4d, 0x27, 0xfb, - 0x9c, 0x7d, 0x0f, 0x26, 0x17, 0xee, 0x6c, 0x2d, 0xb4, 0x93, 0xdd, 0xc5, 0x30, 0xa8, 0x7b, 0x0d, - 0xf4, 0x61, 0x18, 0x77, 0xfd, 0x76, 0x9c, 0x90, 0x68, 0xdd, 0x69, 0x92, 0x19, 0xeb, 0xb2, 0xf5, - 0x4a, 0xa5, 0x7a, 0xee, 0xdb, 0x87, 0xb3, 0xcf, 0x1c, 0x1d, 0xce, 0x8e, 0x2f, 0x6a, 0x14, 0x36, - 0xe9, 0xd0, 0x0f, 0xc3, 0x58, 0x14, 0xfa, 0x64, 0x01, 0xaf, 0xcf, 0x14, 0xd8, 0x23, 0x67, 0xc4, - 0x23, 0x63, 0x98, 0x83, 0xb1, 0xc4, 0xdb, 0xbf, 0x57, 0x00, 0x58, 0x68, 0xb5, 0x36, 0xa3, 0xf0, - 0x2e, 0x71, 0x13, 0xf4, 0x69, 0x28, 0xd3, 0x56, 0xa8, 0x39, 0x89, 0xc3, 0xa4, 0x8d, 0x5f, 0xf9, - 0xcb, 0x73, 0xfc, 0x65, 0xe6, 0xcc, 0x97, 0xd1, 0x7d, 0x80, 0x52, 0xcf, 0xed, 0xbf, 0x3e, 0xb7, - 0xb1, 0x43, 0x9f, 0x5f, 0x23, 0x89, 0x53, 0x45, 0x42, 0x18, 0x68, 0x18, 0x56, 0x5c, 0x51, 0x00, - 0x23, 0x71, 0x8b, 0xb8, 0x4c, 0xb1, 0xf1, 0x2b, 0xab, 0x73, 0x27, 0xe9, 0x6c, 0x73, 0x5a, 0xf3, - 0xad, 0x16, 0x71, 0xab, 0x13, 0x42, 0xf2, 0x08, 0xfd, 0x87, 0x99, 0x1c, 0xb4, 0x0f, 0xa3, 0x71, - 0xe2, 0x24, 0xed, 0x78, 0xa6, 0xc8, 0x24, 0xae, 0xe7, 0x26, 0x91, 0x71, 0xad, 0x4e, 0x09, 0x99, - 0xa3, 0xfc, 0x3f, 0x16, 0xd2, 0xec, 0xff, 0x62, 0xc1, 0x94, 0x26, 0x5e, 0xf5, 0xe2, 0x04, 0xfd, - 0x54, 0x57, 0xe3, 0xce, 0x0d, 0xd6, 0xb8, 0xf4, 0x69, 0xd6, 0xb4, 0x67, 0x85, 0xb0, 0xb2, 0x84, - 0x18, 0x0d, 0xdb, 0x84, 0x92, 0x97, 0x90, 0x66, 0x3c, 0x53, 0xb8, 0x5c, 0x7c, 0x65, 0xfc, 0xca, - 0xf5, 0xbc, 0xde, 0xb3, 0x3a, 0x29, 0x84, 0x96, 0x56, 0x28, 0x7b, 0xcc, 0xa5, 0xd8, 0xbf, 0x39, - 0x61, 0xbe, 0x1f, 0x6d, 0x70, 0xf4, 0x3a, 0x8c, 0xc7, 0x61, 0x3b, 0x72, 0x09, 0x26, 0xad, 0x30, - 0x9e, 0xb1, 0x2e, 0x17, 0x69, 0xd7, 0xa3, 0x3d, 0x75, 0x4b, 0x83, 0xb1, 0x49, 0x83, 0xbe, 0x6c, - 0xc1, 0x44, 0x8d, 0xc4, 0x89, 0x17, 0x30, 0xf9, 0x52, 0xf9, 0xed, 0x13, 0x2b, 0x2f, 0x81, 0x4b, - 0x9a, 0x79, 0xf5, 0xbc, 0x78, 0x91, 0x09, 0x03, 0x18, 0xe3, 0x94, 0x7c, 0x3a, 0xe2, 0x6a, 0x24, - 0x76, 0x23, 0xaf, 0x45, 0xff, 0xb3, 0x3e, 0x63, 0x8c, 0xb8, 0x25, 0x8d, 0xc2, 0x26, 0x1d, 0x0a, - 0xa0, 0x44, 0x47, 0x54, 0x3c, 0x33, 0xc2, 0xf4, 0x5f, 0x39, 0x99, 0xfe, 0xa2, 0x51, 0xe9, 0x60, - 0xd5, 0xad, 0x4f, 0xff, 0xc5, 0x98, 0x8b, 0x41, 0x5f, 0xb2, 0x60, 0x46, 0x8c, 0x78, 0x4c, 0x78, - 0x83, 0xde, 0xd9, 0xf5, 0x12, 0xe2, 0x7b, 0x71, 0x32, 0x53, 0x62, 0x3a, 0xcc, 0x0f, 0xd6, 0xb7, - 0x96, 0xa3, 0xb0, 0xdd, 0xba, 0xe9, 0x05, 0xb5, 0xea, 0x65, 0x21, 0x69, 0x66, 0xb1, 0x0f, 0x63, - 0xdc, 0x57, 0x24, 0xfa, 0x9a, 0x05, 0x17, 0x03, 0xa7, 0x49, 0xe2, 0x96, 0x43, 0x3f, 0x2d, 0x47, - 0x57, 0x7d, 0xc7, 0xdd, 0x63, 0x1a, 0x8d, 0x3e, 0x9a, 0x46, 0xb6, 0xd0, 0xe8, 0xe2, 0x7a, 0x5f, - 0xd6, 0xf8, 0x21, 0x62, 0xd1, 0xaf, 0x59, 0x30, 0x1d, 0x46, 0xad, 0x5d, 0x27, 0x20, 0x35, 0x89, - 0x8d, 0x67, 0xc6, 0xd8, 0xd0, 0xfb, 0xe4, 0xc9, 0x3e, 0xd1, 0x46, 0x96, 0xed, 0x5a, 0x18, 0x78, - 0x49, 0x18, 0x6d, 0x91, 0x24, 0xf1, 0x82, 0x46, 0x5c, 0xbd, 0x70, 0x74, 0x38, 0x3b, 0xdd, 0x45, - 0x85, 0xbb, 0xf5, 0x41, 0x3f, 0x0d, 0xe3, 0x71, 0x27, 0x70, 0xef, 0x78, 0x41, 0x2d, 0xbc, 0x1f, - 0xcf, 0x94, 0xf3, 0x18, 0xbe, 0x5b, 0x8a, 0xa1, 0x18, 0x80, 0x5a, 0x00, 0x36, 0xa5, 0xf5, 0xfe, - 0x70, 0xba, 0x2b, 0x55, 0xf2, 0xfe, 0x70, 0xba, 0x33, 0x3d, 0x44, 0x2c, 0xfa, 0x65, 0x0b, 0x26, - 0x63, 0xaf, 0x11, 0x38, 0x49, 0x3b, 0x22, 0x37, 0x49, 0x27, 0x9e, 0x01, 0xa6, 0xc8, 0x8d, 0x13, - 0xb6, 0x8a, 0xc1, 0xb2, 0x7a, 0x41, 0xe8, 0x38, 0x69, 0x42, 0x63, 0x9c, 0x96, 0xdb, 0x6b, 0xa0, - 0xe9, 0x6e, 0x3d, 0x9e, 0xef, 0x40, 0xd3, 0x9d, 0xba, 0xaf, 0x48, 0xf4, 0x13, 0x70, 0x96, 0x83, - 0x54, 0xcb, 0xc6, 0x33, 0x13, 0xcc, 0xd0, 0x9e, 0x3f, 0x3a, 0x9c, 0x3d, 0xbb, 0x95, 0xc1, 0xe1, - 0x2e, 0x6a, 0x74, 0x0f, 0x66, 0x5b, 0x24, 0x6a, 0x7a, 0xc9, 0x46, 0xe0, 0x77, 0xa4, 0xf9, 0x76, - 0xc3, 0x16, 0xa9, 0x09, 0x75, 0xe2, 0x99, 0xc9, 0xcb, 0xd6, 0x2b, 0xe5, 0xea, 0x07, 0x85, 0x9a, - 0xb3, 0x9b, 0x0f, 0x27, 0xc7, 0xc7, 0xf1, 0xb3, 0xff, 0x4d, 0x01, 0xce, 0x66, 0x27, 0x4e, 0xf4, - 0x1b, 0x16, 0x9c, 0xb9, 0x7b, 0x3f, 0xd9, 0x0e, 0xf7, 0x48, 0x10, 0x57, 0x3b, 0xd4, 0xbc, 0xb1, - 0x29, 0x63, 0xfc, 0x8a, 0x9b, 0xef, 0x14, 0x3d, 0x77, 0x23, 0x2d, 0xe5, 0x6a, 0x90, 0x44, 0x9d, - 0xea, 0x73, 0xe2, 0xed, 0xce, 0xdc, 0xb8, 0xb3, 0x6d, 0x62, 0x71, 0x56, 0xa9, 0x8b, 0x5f, 0xb0, - 0xe0, 0x7c, 0x2f, 0x16, 0xe8, 0x2c, 0x14, 0xf7, 0x48, 0x87, 0x7b, 0x65, 0x98, 0xfe, 0x44, 0x9f, - 0x80, 0xd2, 0xbe, 0xe3, 0xb7, 0x89, 0xf0, 0x6e, 0x96, 0x4f, 0xf6, 0x22, 0x4a, 0x33, 0xcc, 0xb9, - 0xfe, 0x68, 0xe1, 0x4d, 0xcb, 0xfe, 0xf7, 0x45, 0x18, 0x37, 0xe6, 0xb7, 0xc7, 0xe0, 0xb1, 0x85, - 0x29, 0x8f, 0x6d, 0x2d, 0xb7, 0xa9, 0xb9, 0xaf, 0xcb, 0x76, 0x3f, 0xe3, 0xb2, 0x6d, 0xe4, 0x27, - 0xf2, 0xa1, 0x3e, 0x1b, 0x4a, 0xa0, 0x12, 0xb6, 0xa8, 0x47, 0x4e, 0xa7, 0xfe, 0x91, 0x3c, 0x3e, - 0xe1, 0x86, 0x64, 0x57, 0x9d, 0x3c, 0x3a, 0x9c, 0xad, 0xa8, 0xbf, 0x58, 0x0b, 0xb2, 0xbf, 0x6b, - 0xc1, 0x79, 0x43, 0xc7, 0xc5, 0x30, 0xa8, 0x79, 0xec, 0xd3, 0x5e, 0x86, 0x91, 0xa4, 0xd3, 0x92, - 0x6e, 0xbf, 0x6a, 0xa9, 0xed, 0x4e, 0x8b, 0x60, 0x86, 0xa1, 0x8e, 0x7e, 0x93, 0xc4, 0xb1, 0xd3, - 0x20, 0x59, 0x47, 0x7f, 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0x08, 0x90, 0xef, 0xc4, 0xc9, 0x76, 0xe4, - 0x04, 0x31, 0x63, 0xbf, 0xed, 0x35, 0x89, 0x68, 0xe0, 0xbf, 0x34, 0x58, 0x8f, 0xa1, 0x4f, 0x54, - 0x9f, 0x3d, 0x3a, 0x9c, 0x45, 0xab, 0x5d, 0x9c, 0x70, 0x0f, 0xee, 0xf6, 0xd7, 0x2c, 0x78, 0xb6, - 0xb7, 0x2f, 0x86, 0x3e, 0x00, 0xa3, 0x7c, 0xf5, 0x26, 0xde, 0x4e, 0x7f, 0x12, 0x06, 0xc5, 0x02, - 0x8b, 0xe6, 0xa1, 0xa2, 0xe6, 0x09, 0xf1, 0x8e, 0xd3, 0x82, 0xb4, 0xa2, 0x27, 0x17, 0x4d, 0x43, - 0x1b, 0x8d, 0xfe, 0x11, 0x9e, 0x9b, 0x6a, 0x34, 0xb6, 0x48, 0x62, 0x18, 0xfb, 0x0f, 0x2d, 0x38, - 0x63, 0x68, 0xf5, 0x18, 0x5c, 0xf3, 0x20, 0xed, 0x9a, 0xaf, 0xe4, 0xd6, 0x9f, 0xfb, 0xf8, 0xe6, - 0x47, 0x05, 0xe6, 0x9b, 0xab, 0x5e, 0x4f, 0x1e, 0xc7, 0xc2, 0x2e, 0x4a, 0x99, 0x89, 0xcd, 0xfc, - 0xc6, 0x2c, 0xe9, 0xbf, 0xb8, 0x7b, 0x2f, 0x63, 0x29, 0x70, 0xae, 0x52, 0x1f, 0xbe, 0xc0, 0xfb, - 0xe3, 0x02, 0x3c, 0x97, 0x7e, 0x40, 0x8f, 0xdc, 0x8f, 0xa6, 0x46, 0xee, 0x87, 0xcc, 0x91, 0xfb, - 0xe0, 0x70, 0xf6, 0x85, 0x3e, 0x8f, 0xfd, 0x85, 0x19, 0xd8, 0x68, 0x59, 0xb5, 0xfb, 0x08, 0xd3, - 0x6e, 0x3e, 0xdd, 0x46, 0x0f, 0x0e, 0x67, 0x5f, 0xea, 0xf3, 0x8e, 0x19, 0x8b, 0xfb, 0x01, 0x18, - 0x8d, 0x88, 0x13, 0x87, 0xc1, 0x4c, 0x29, 0x6d, 0x06, 0x30, 0x83, 0x62, 0x81, 0xb5, 0xff, 0xb0, - 0x9c, 0x6d, 0xec, 0x65, 0xbe, 0x77, 0x12, 0x46, 0xc8, 0x83, 0x11, 0xe6, 0x8d, 0xf1, 0x6e, 0x7d, - 0xf3, 0x64, 0x5d, 0x80, 0x8e, 0x5e, 0xc5, 0xba, 0x5a, 0xa6, 0x5f, 0x8d, 0x82, 0x30, 0x13, 0x81, - 0x0e, 0xa0, 0xec, 0x4a, 0x27, 0xa9, 0x90, 0xc7, 0x76, 0x82, 0x70, 0x91, 0xb4, 0xc4, 0x09, 0x6a, - 0x42, 0x94, 0x67, 0xa5, 0xa4, 0x21, 0x02, 0xc5, 0x86, 0x97, 0x88, 0xcf, 0x7a, 0x42, 0x37, 0x78, - 0xd9, 0x33, 0x5e, 0x71, 0xec, 0xe8, 0x70, 0xb6, 0xb8, 0xec, 0x25, 0x98, 0xf2, 0x47, 0xbf, 0x64, - 0xc1, 0x78, 0xec, 0x36, 0x37, 0xa3, 0x70, 0xdf, 0xab, 0x91, 0x48, 0x4c, 0x82, 0x27, 0x1c, 0x56, - 0x5b, 0x8b, 0x6b, 0x92, 0xa1, 0x96, 0xcb, 0x97, 0x25, 0x1a, 0x83, 0x4d, 0xb9, 0xd4, 0x39, 0x7c, - 0x4e, 0xbc, 0xfb, 0x12, 0x71, 0xbd, 0x98, 0x4e, 0x99, 0xc2, 0x17, 0x66, 0x3d, 0xe5, 0xc4, 0x4e, - 0xc1, 0x52, 0xdb, 0xdd, 0xa3, 0xe3, 0x4d, 0x2b, 0xf4, 0xc2, 0xd1, 0xe1, 0xec, 0x73, 0x8b, 0xbd, - 0x65, 0xe2, 0x7e, 0xca, 0xb0, 0x06, 0x6b, 0xb5, 0x7d, 0x1f, 0x93, 0x7b, 0x6d, 0xc2, 0x56, 0xba, - 0x39, 0x34, 0xd8, 0xa6, 0x66, 0x98, 0x69, 0x30, 0x03, 0x83, 0x4d, 0xb9, 0xe8, 0x1e, 0x8c, 0x36, - 0x9d, 0x24, 0xf2, 0x0e, 0xc4, 0xf2, 0xf6, 0x84, 0x6e, 0xda, 0x1a, 0xe3, 0xa5, 0x85, 0x03, 0x1d, - 0x93, 0x1c, 0x88, 0x85, 0x20, 0xd4, 0x84, 0x52, 0x93, 0x44, 0x0d, 0x32, 0x53, 0xce, 0x63, 0x2b, - 0x6f, 0x8d, 0xb2, 0xd2, 0x02, 0x2b, 0x74, 0x52, 0x63, 0x30, 0xcc, 0xa5, 0xa0, 0x4f, 0x40, 0x39, - 0x26, 0x3e, 0x71, 0x93, 0x30, 0x9a, 0xa9, 0x30, 0x89, 0x3f, 0x32, 0xe0, 0x14, 0xed, 0xec, 0x10, - 0x7f, 0x4b, 0x3c, 0xca, 0x07, 0x98, 0xfc, 0x87, 0x15, 0x4b, 0xfb, 0xbf, 0x5b, 0x80, 0xd2, 0x16, - 0xe6, 0x31, 0x38, 0x06, 0xf7, 0xd2, 0x8e, 0xc1, 0x6a, 0x9e, 0xd3, 0x57, 0x1f, 0xdf, 0xe0, 0xdb, - 0x65, 0xc8, 0xd8, 0xe6, 0x75, 0x12, 0x27, 0xa4, 0xf6, 0xbe, 0x3d, 0x7d, 0xdf, 0x9e, 0xbe, 0x6f, - 0x4f, 0x95, 0x3d, 0xdd, 0xc9, 0xd8, 0xd3, 0xb7, 0x8d, 0x51, 0xaf, 0x63, 0x4c, 0x9f, 0x52, 0x41, - 0x28, 0x53, 0x03, 0x83, 0x80, 0x5a, 0x82, 0x1b, 0x5b, 0x1b, 0xeb, 0x3d, 0x0d, 0xe8, 0xa7, 0xd2, - 0x06, 0xf4, 0xa4, 0x22, 0x1e, 0xbb, 0xc9, 0x3c, 0x2a, 0x66, 0x4d, 0x26, 0x0b, 0x03, 0x5c, 0x01, - 0x68, 0x84, 0xdb, 0xa4, 0xd9, 0xf2, 0x9d, 0x84, 0xbb, 0xc0, 0x65, 0xbd, 0x74, 0x58, 0x56, 0x18, - 0x6c, 0x50, 0xa1, 0xbf, 0x6e, 0x01, 0x34, 0xe4, 0xa7, 0x91, 0xe6, 0xf0, 0x56, 0x9e, 0xe6, 0x50, - 0x7f, 0x78, 0xad, 0x8b, 0x12, 0x88, 0x0d, 0xe1, 0xe8, 0x73, 0x16, 0x94, 0x13, 0xa9, 0x3e, 0x37, - 0x10, 0xdb, 0x79, 0x6a, 0x22, 0x5f, 0x5a, 0xcf, 0x0c, 0xaa, 0x49, 0x94, 0x5c, 0xf4, 0xd7, 0x2c, - 0x80, 0xb8, 0x13, 0xb8, 0x9b, 0xa1, 0xef, 0xb9, 0x1d, 0x61, 0x37, 0x6e, 0xe7, 0xba, 0xbc, 0x51, - 0xdc, 0xab, 0x53, 0xb4, 0x35, 0xf4, 0x7f, 0x6c, 0x48, 0xb6, 0xbf, 0x99, 0xde, 0x9d, 0x50, 0xeb, - 0x22, 0xf6, 0xc9, 0x5c, 0xe9, 0xd6, 0xc7, 0x62, 0xeb, 0x2e, 0xd7, 0x4f, 0xa6, 0x16, 0x0d, 0xfa, - 0x93, 0x29, 0x50, 0x8c, 0x0d, 0xe1, 0xf6, 0x67, 0x2d, 0x98, 0xe9, 0xf7, 0x76, 0x88, 0xc0, 0x0b, - 0xad, 0x88, 0xb0, 0x31, 0xa4, 0x36, 0xdd, 0x37, 0x82, 0x25, 0xe2, 0x13, 0xb6, 0xcf, 0xc3, 0x3b, - 0xe8, 0xcb, 0x42, 0xc2, 0x0b, 0x9b, 0xfd, 0x49, 0xf1, 0xc3, 0xf8, 0xd8, 0xbf, 0x5e, 0x48, 0x6d, - 0x76, 0x18, 0x1f, 0x1a, 0x7d, 0xdd, 0xea, 0xf2, 0x22, 0x7e, 0xf2, 0x34, 0x7a, 0x14, 0xf3, 0x37, - 0xd4, 0xde, 0x7b, 0x7f, 0x9a, 0x27, 0xb8, 0xb9, 0x67, 0xff, 0xbb, 0x11, 0x78, 0x88, 0x66, 0x6a, - 0xfb, 0xc6, 0xea, 0xb7, 0x7d, 0x33, 0xfc, 0x8e, 0xd0, 0x17, 0x2d, 0x18, 0xf5, 0xa9, 0x41, 0x8b, - 0x67, 0x8a, 0xac, 0x93, 0xd6, 0x4e, 0xab, 0xed, 0xb9, 0xdd, 0x8c, 0xf9, 0x06, 0xb3, 0x5a, 0xca, - 0x72, 0x20, 0x16, 0x3a, 0xa0, 0x6f, 0x58, 0x30, 0xee, 0x04, 0x41, 0x98, 0x88, 0x88, 0x27, 0x8f, - 0x18, 0x7a, 0xa7, 0xa6, 0xd3, 0x82, 0x96, 0xc5, 0x15, 0x53, 0xd1, 0x4c, 0x03, 0x83, 0x4d, 0x95, - 0xd0, 0x1c, 0x40, 0xdd, 0x0b, 0x1c, 0xdf, 0x7b, 0x8f, 0x3a, 0x66, 0x25, 0x16, 0x5e, 0x60, 0x36, - 0xe2, 0x9a, 0x82, 0x62, 0x83, 0xe2, 0xe2, 0x5f, 0x85, 0x71, 0xe3, 0xcd, 0x7b, 0xec, 0x8b, 0x9f, - 0x37, 0xf7, 0xc5, 0x2b, 0xc6, 0x76, 0xf6, 0xc5, 0xb7, 0xe1, 0x6c, 0x56, 0xc1, 0x61, 0x9e, 0xb7, - 0x7f, 0x63, 0x14, 0x66, 0xb3, 0x2f, 0x1f, 0x35, 0xa9, 0x6a, 0xef, 0x3b, 0xb4, 0xef, 0x3b, 0xb4, - 0xef, 0x3b, 0xb4, 0xf2, 0x8f, 0xfd, 0x3b, 0x25, 0x98, 0x36, 0x07, 0x0a, 0xd7, 0xee, 0x87, 0x61, - 0x2c, 0x22, 0xad, 0xf0, 0x16, 0x5e, 0x15, 0x16, 0x57, 0x67, 0x0a, 0x71, 0x30, 0x96, 0x78, 0x6a, - 0x99, 0x5b, 0x4e, 0xb2, 0x2b, 0x4c, 0xae, 0xb2, 0xcc, 0x9b, 0x4e, 0xb2, 0x8b, 0x19, 0x06, 0xbd, - 0x0d, 0x53, 0x89, 0x13, 0x35, 0x48, 0x82, 0xc9, 0x3e, 0x6b, 0x04, 0xb1, 0x3b, 0xf8, 0xac, 0xa0, - 0x9d, 0xda, 0x4e, 0x61, 0x71, 0x86, 0x1a, 0xdd, 0x83, 0x91, 0x5d, 0xe2, 0x37, 0x85, 0xc7, 0xbd, - 0x95, 0x9f, 0x45, 0x64, 0xef, 0x7a, 0x9d, 0xf8, 0x4d, 0x3e, 0x5e, 0xe9, 0x2f, 0xcc, 0x44, 0xd1, - 0xaf, 0x53, 0xd9, 0x6b, 0xc7, 0x49, 0xd8, 0xf4, 0xde, 0x93, 0x7e, 0xf8, 0x4f, 0xe6, 0x2c, 0xf8, - 0xa6, 0xe4, 0xcf, 0x63, 0x40, 0xea, 0x2f, 0xd6, 0x92, 0x99, 0x1e, 0x35, 0x2f, 0x62, 0x7e, 0x75, - 0x67, 0x06, 0x4e, 0x45, 0x8f, 0x25, 0xc9, 0x9f, 0xeb, 0xa1, 0xfe, 0x62, 0x2d, 0x19, 0x75, 0x60, - 0xb4, 0xe5, 0xb7, 0x1b, 0x5e, 0x30, 0x33, 0xce, 0x74, 0xb8, 0x95, 0xb3, 0x0e, 0x9b, 0x8c, 0x39, - 0x5f, 0x0d, 0xf1, 0xdf, 0x58, 0x08, 0x44, 0x2f, 0x43, 0xc9, 0xdd, 0x75, 0xa2, 0x64, 0x66, 0x82, - 0x75, 0x1a, 0xb5, 0x7b, 0xb1, 0x48, 0x81, 0x98, 0xe3, 0xec, 0xbf, 0x57, 0x48, 0x7b, 0x0f, 0xe9, - 0x17, 0xe3, 0xdd, 0xd9, 0x6d, 0x47, 0xb1, 0x5c, 0x77, 0x18, 0xdd, 0x99, 0x81, 0xb1, 0xc4, 0xa3, - 0xcf, 0x5a, 0x30, 0x76, 0x37, 0x0e, 0x83, 0x80, 0x24, 0xc2, 0x52, 0xdf, 0xce, 0xf9, 0x5d, 0x6f, - 0x70, 0xee, 0x5a, 0x07, 0x01, 0xc0, 0x52, 0x2e, 0x55, 0x97, 0x1c, 0xb8, 0x7e, 0xbb, 0x26, 0xc3, - 0x55, 0x8a, 0xf4, 0x2a, 0x07, 0x63, 0x89, 0xa7, 0xa4, 0x5e, 0xc0, 0x49, 0x47, 0xd2, 0xa4, 0x2b, - 0x81, 0x20, 0x15, 0x78, 0xfb, 0x1f, 0x97, 0xe0, 0x42, 0xcf, 0xde, 0x4f, 0xe7, 0x75, 0x36, 0x73, - 0x5e, 0xf3, 0x7c, 0x22, 0xf3, 0xb3, 0xd8, 0xbc, 0x7e, 0x5b, 0x41, 0xb1, 0x41, 0x81, 0x7e, 0x1e, - 0xa0, 0xe5, 0x44, 0x4e, 0x93, 0x88, 0xf9, 0xac, 0x78, 0xf2, 0xe9, 0x93, 0xea, 0xb1, 0x29, 0x79, - 0x6a, 0xbf, 0x5e, 0x81, 0x62, 0x6c, 0x88, 0x44, 0x1f, 0x86, 0xf1, 0x88, 0xf8, 0xc4, 0x89, 0x59, - 0x02, 0x43, 0x36, 0x1b, 0x0b, 0x6b, 0x14, 0x36, 0xe9, 0xd0, 0x07, 0x60, 0x94, 0xbd, 0x85, 0x0c, - 0x4f, 0x28, 0x57, 0x8c, 0xbd, 0x67, 0x8c, 0x05, 0x16, 0x7d, 0xc5, 0x82, 0xa9, 0xba, 0xe7, 0x13, - 0x2d, 0x5d, 0xe4, 0x4e, 0x6d, 0x9c, 0xfc, 0x25, 0xaf, 0x99, 0x7c, 0xb5, 0x09, 0x4c, 0x81, 0x63, - 0x9c, 0x11, 0x4f, 0x3f, 0xf3, 0x3e, 0x89, 0x98, 0xed, 0x1c, 0x4d, 0x7f, 0xe6, 0xdb, 0x1c, 0x8c, - 0x25, 0x1e, 0x2d, 0xc0, 0x99, 0x96, 0x13, 0xc7, 0x8b, 0x11, 0xa9, 0x91, 0x20, 0xf1, 0x1c, 0x9f, - 0x67, 0x36, 0x95, 0x75, 0x66, 0xc3, 0x66, 0x1a, 0x8d, 0xb3, 0xf4, 0xe8, 0x63, 0xf0, 0x9c, 0xd7, - 0x08, 0xc2, 0x88, 0xac, 0x79, 0x71, 0xec, 0x05, 0x0d, 0xdd, 0x0d, 0x98, 0x29, 0x2c, 0x57, 0x67, - 0x05, 0xab, 0xe7, 0x56, 0x7a, 0x93, 0xe1, 0x7e, 0xcf, 0xa3, 0x57, 0xa1, 0x1c, 0xef, 0x79, 0xad, - 0xc5, 0xa8, 0x16, 0xb3, 0xad, 0x87, 0xb2, 0x5e, 0xed, 0x6e, 0x09, 0x38, 0x56, 0x14, 0xf6, 0xaf, - 0x16, 0xd2, 0xeb, 0x37, 0x73, 0xfc, 0xa0, 0x98, 0x8e, 0x92, 0xe4, 0xb6, 0x13, 0xc9, 0x45, 0xe6, - 0x09, 0x73, 0xa3, 0x04, 0xdf, 0xdb, 0x4e, 0x64, 0x8e, 0x37, 0x26, 0x00, 0x4b, 0x49, 0xe8, 0x2e, - 0x8c, 0x24, 0xbe, 0x93, 0x53, 0x32, 0xa5, 0x21, 0x51, 0x47, 0xf1, 0x57, 0x17, 0x62, 0xcc, 0x64, - 0xa0, 0x17, 0xa9, 0x7f, 0xba, 0xc3, 0x57, 0x27, 0x15, 0xe9, 0x52, 0xee, 0xc4, 0x98, 0x41, 0xed, - 0xff, 0x3d, 0xda, 0xc3, 0xe4, 0xa9, 0x49, 0x04, 0x5d, 0x01, 0xa0, 0x4b, 0x9d, 0xcd, 0x88, 0xd4, - 0xbd, 0x03, 0x31, 0x89, 0xab, 0x61, 0xb5, 0xae, 0x30, 0xd8, 0xa0, 0x92, 0xcf, 0x6c, 0xb5, 0xeb, - 0xf4, 0x99, 0x42, 0xf7, 0x33, 0x1c, 0x83, 0x0d, 0x2a, 0xf4, 0x06, 0x8c, 0x7a, 0x4d, 0xa7, 0x41, - 0xa4, 0x9a, 0x2f, 0xd2, 0xf1, 0xb4, 0xc2, 0x20, 0x0f, 0x0e, 0x67, 0xa7, 0x94, 0x42, 0x0c, 0x84, - 0x05, 0x2d, 0xfa, 0x75, 0x0b, 0x26, 0xdc, 0xb0, 0xd9, 0x0c, 0x03, 0xbe, 0x40, 0x10, 0xab, 0x9d, - 0xbb, 0xa7, 0x35, 0xc5, 0xce, 0x2d, 0x1a, 0xc2, 0xf8, 0x72, 0x47, 0x65, 0x7d, 0x9a, 0x28, 0x9c, - 0xd2, 0xca, 0x1c, 0x76, 0xa5, 0x63, 0x86, 0xdd, 0x3f, 0xb3, 0x60, 0x9a, 0x3f, 0x6b, 0xac, 0x5b, - 0x44, 0x82, 0x63, 0x78, 0xca, 0xaf, 0xd5, 0xb5, 0x94, 0x7b, 0x5e, 0xa8, 0x39, 0xdd, 0x85, 0xc7, - 0xdd, 0x4a, 0xa2, 0x65, 0x98, 0xae, 0x87, 0x91, 0x4b, 0xcc, 0x86, 0x10, 0x36, 0x43, 0x31, 0xba, - 0x96, 0x25, 0xc0, 0xdd, 0xcf, 0xa0, 0xdb, 0xf0, 0xac, 0x01, 0x34, 0xdb, 0x81, 0x9b, 0x8d, 0x4b, - 0x82, 0xdb, 0xb3, 0xd7, 0x7a, 0x52, 0xe1, 0x3e, 0x4f, 0x5f, 0xfc, 0x28, 0x4c, 0x77, 0x7d, 0xbf, - 0xa1, 0x56, 0x93, 0x4b, 0xf0, 0x6c, 0xef, 0x96, 0x1a, 0x6a, 0x4d, 0xf9, 0x77, 0xac, 0x74, 0xb0, - 0xd9, 0xf0, 0x5c, 0x06, 0xd8, 0x9f, 0x70, 0xa0, 0x48, 0x82, 0x7d, 0x61, 0x38, 0xae, 0x9d, 0xac, - 0x47, 0x5c, 0x0d, 0xf6, 0xf9, 0x87, 0x66, 0x8b, 0xb0, 0xab, 0xc1, 0x3e, 0xa6, 0xbc, 0xed, 0xbf, - 0x39, 0x9a, 0xca, 0x60, 0xd9, 0x92, 0x49, 0x53, 0x7c, 0xf9, 0x63, 0xe5, 0x9d, 0x34, 0xc5, 0x53, - 0x10, 0x75, 0x1e, 0x04, 0x5f, 0xf1, 0x08, 0x71, 0xe8, 0x0b, 0x16, 0x4b, 0x99, 0x96, 0x99, 0x3d, - 0xc2, 0x99, 0x3a, 0x9d, 0x0c, 0x6e, 0x33, 0x11, 0x5b, 0x02, 0xb1, 0x29, 0x9d, 0x8e, 0xe4, 0x16, - 0x4f, 0xfe, 0xcb, 0xba, 0x54, 0x32, 0xa9, 0x5a, 0xe2, 0xd1, 0x41, 0x8f, 0x1d, 0xd6, 0x1c, 0xd2, - 0x6e, 0x8f, 0xdf, 0x53, 0x45, 0xdf, 0xb0, 0x60, 0x9a, 0x4f, 0x9c, 0x4b, 0x5e, 0xbd, 0x4e, 0x22, - 0x12, 0xb8, 0x44, 0xba, 0x1e, 0x77, 0x4e, 0xa6, 0x81, 0x5c, 0x77, 0xae, 0x64, 0xd9, 0xeb, 0x21, - 0xde, 0x85, 0xc2, 0xdd, 0xca, 0xa0, 0x1a, 0x8c, 0x78, 0x41, 0x3d, 0x14, 0x86, 0xad, 0x7a, 0x32, - 0xa5, 0x56, 0x82, 0x7a, 0xa8, 0xc7, 0x0a, 0xfd, 0x87, 0x19, 0x77, 0xb4, 0x0a, 0xe7, 0x23, 0xb1, - 0xfa, 0xbb, 0xee, 0xc5, 0xd4, 0x85, 0x5f, 0xf5, 0x9a, 0x5e, 0xc2, 0x8c, 0x52, 0xb1, 0x3a, 0x73, - 0x74, 0x38, 0x7b, 0x1e, 0xf7, 0xc0, 0xe3, 0x9e, 0x4f, 0xd9, 0x7f, 0x56, 0x49, 0x2f, 0x71, 0xf9, - 0x3e, 0xf5, 0xcf, 0x42, 0x25, 0x52, 0xb9, 0xdf, 0x56, 0x1e, 0x71, 0x56, 0xd9, 0xc6, 0x22, 0x41, - 0x48, 0xed, 0x3e, 0xea, 0x2c, 0x6f, 0x2d, 0x91, 0x3a, 0x12, 0xf4, 0xcb, 0x8b, 0x61, 0x91, 0x43, - 0xff, 0x12, 0x52, 0xf5, 0xde, 0x6a, 0x27, 0x70, 0x31, 0x93, 0x81, 0x22, 0x18, 0xdd, 0x25, 0x8e, - 0x9f, 0xec, 0xe6, 0xb3, 0x0d, 0x74, 0x9d, 0xf1, 0xca, 0xa6, 0x41, 0x71, 0x28, 0x16, 0x92, 0xd0, - 0x01, 0x8c, 0xed, 0xf2, 0x8f, 0x20, 0xe6, 0xf6, 0xb5, 0x93, 0x36, 0x6e, 0xea, 0xcb, 0xea, 0xf1, - 0x2b, 0x00, 0x58, 0x8a, 0x63, 0x21, 0x12, 0x23, 0x00, 0xc1, 0x87, 0x4f, 0x7e, 0x19, 0x60, 0x03, - 0x47, 0x1f, 0xd0, 0xa7, 0x61, 0x22, 0x22, 0x6e, 0x18, 0xb8, 0x9e, 0x4f, 0x6a, 0x0b, 0x72, 0x8b, - 0x67, 0x98, 0xdc, 0xab, 0xb3, 0xd4, 0x3f, 0xc1, 0x06, 0x0f, 0x9c, 0xe2, 0x88, 0x3e, 0x6f, 0xc1, - 0x94, 0x4a, 0x18, 0xa5, 0x1f, 0x84, 0x88, 0x4d, 0x92, 0xd5, 0x9c, 0xd2, 0x53, 0x19, 0xcf, 0x2a, - 0xa2, 0x2b, 0x94, 0x34, 0x0c, 0x67, 0xe4, 0xa2, 0x77, 0x01, 0xc2, 0x1d, 0x16, 0x04, 0xa1, 0xaf, - 0x5a, 0x1e, 0xfa, 0x55, 0xa7, 0x78, 0x02, 0xa1, 0xe4, 0x80, 0x0d, 0x6e, 0xe8, 0x26, 0x00, 0x1f, - 0x36, 0xdb, 0x9d, 0x16, 0x61, 0xcb, 0x06, 0x9d, 0x3c, 0x07, 0x5b, 0x0a, 0xf3, 0xe0, 0x70, 0xb6, - 0x7b, 0x81, 0xcb, 0x92, 0xe7, 0x8c, 0xc7, 0xd1, 0x4f, 0xc3, 0x58, 0xdc, 0x6e, 0x36, 0x1d, 0xb5, - 0x9f, 0x92, 0x63, 0x4a, 0x22, 0xe7, 0xab, 0xfb, 0xa6, 0x00, 0x60, 0x29, 0x11, 0xdd, 0xa5, 0x86, - 0x2d, 0x16, 0x2b, 0x6f, 0x36, 0x8a, 0xf8, 0xdc, 0x3c, 0xce, 0xde, 0xe9, 0x23, 0xe2, 0xb9, 0xf3, - 0xb8, 0x07, 0xcd, 0x83, 0xc3, 0xd9, 0x67, 0xd3, 0xf0, 0xd5, 0x90, 0x8b, 0xc5, 0x3d, 0x79, 0xda, - 0x41, 0x3a, 0x0a, 0x2b, 0x34, 0x78, 0x03, 0x26, 0xc8, 0x41, 0x42, 0xa2, 0xc0, 0xf1, 0x6f, 0xe1, - 0x55, 0xb9, 0xda, 0x67, 0x1d, 0xed, 0xaa, 0x01, 0xc7, 0x29, 0x2a, 0x64, 0x2b, 0x2f, 0xbf, 0xc0, - 0xe8, 0x41, 0x7b, 0xf9, 0xd2, 0xa7, 0xb7, 0xff, 0x5f, 0x21, 0xe5, 0x7d, 0x6c, 0x47, 0x84, 0xa0, - 0x10, 0x4a, 0x41, 0x58, 0x53, 0x06, 0xf6, 0x46, 0x3e, 0x06, 0x76, 0x3d, 0xac, 0x19, 0x07, 0xa0, - 0xe8, 0xbf, 0x18, 0x73, 0x39, 0xec, 0x84, 0x88, 0x3c, 0x4a, 0xc3, 0x10, 0xc2, 0xe1, 0xca, 0x53, - 0xb2, 0x3a, 0x21, 0xb2, 0x61, 0x0a, 0xc2, 0x69, 0xb9, 0x68, 0x0f, 0x4a, 0xbb, 0x61, 0x9c, 0xc8, - 0xe0, 0xd2, 0x09, 0x3d, 0xbe, 0xeb, 0x61, 0x9c, 0xb0, 0xe9, 0x52, 0xbd, 0x36, 0x85, 0xc4, 0x98, - 0xcb, 0xb0, 0xff, 0xc8, 0x4a, 0xed, 0xed, 0xdc, 0x71, 0x12, 0x77, 0xf7, 0xea, 0x3e, 0x09, 0xe8, - 0xd8, 0x31, 0x53, 0x4e, 0xff, 0x4a, 0x26, 0xe5, 0xf4, 0x83, 0xfd, 0x4e, 0xa4, 0xde, 0xa7, 0x1c, - 0xe6, 0x18, 0x0b, 0x23, 0xfd, 0xf4, 0x33, 0x16, 0x8c, 0x1b, 0xea, 0x89, 0xc9, 0x2b, 0xc7, 0xbc, - 0x65, 0x1d, 0x83, 0xd2, 0x40, 0x6c, 0x8a, 0xb4, 0x7f, 0xc5, 0x82, 0xb1, 0xaa, 0xe3, 0xee, 0x85, - 0xf5, 0x3a, 0x7a, 0x15, 0xca, 0xb5, 0xb6, 0x48, 0xcb, 0xe7, 0xef, 0xa7, 0x36, 0x13, 0x96, 0x04, - 0x1c, 0x2b, 0x0a, 0xda, 0x87, 0xeb, 0x0e, 0xcb, 0x79, 0x28, 0x30, 0x37, 0x82, 0xf5, 0xe1, 0x6b, - 0x0c, 0x82, 0x05, 0x06, 0x7d, 0x18, 0xc6, 0x9b, 0xce, 0x81, 0x7c, 0x38, 0xbb, 0xb1, 0xb4, 0xa6, - 0x51, 0xd8, 0xa4, 0xb3, 0xff, 0xb5, 0x05, 0x33, 0x55, 0x27, 0xf6, 0xdc, 0x85, 0x76, 0xb2, 0x5b, - 0xf5, 0x92, 0x9d, 0xb6, 0xbb, 0x47, 0x12, 0x9e, 0xb2, 0x4e, 0xb5, 0x6c, 0xc7, 0x74, 0x28, 0xa9, - 0xe5, 0x81, 0xd2, 0xf2, 0x96, 0x80, 0x63, 0x45, 0x81, 0xde, 0x83, 0xf1, 0x96, 0x13, 0xc7, 0xf7, - 0xc3, 0xa8, 0x86, 0x49, 0x3d, 0x9f, 0x03, 0x23, 0x5b, 0xc4, 0x8d, 0x48, 0x82, 0x49, 0x5d, 0xc4, - 0x02, 0x34, 0x7f, 0x6c, 0x0a, 0xb3, 0x7f, 0xab, 0x02, 0x63, 0x22, 0x90, 0x31, 0x70, 0x22, 0xbe, - 0x5c, 0xf8, 0x14, 0xfa, 0x2e, 0x7c, 0x62, 0x18, 0x75, 0xd9, 0xb1, 0x65, 0xe1, 0x7d, 0xdc, 0xcc, - 0x25, 0xf2, 0xc5, 0x4f, 0x42, 0x6b, 0xb5, 0xf8, 0x7f, 0x2c, 0x44, 0xa1, 0xaf, 0x5a, 0x70, 0xc6, - 0x0d, 0x83, 0x80, 0xb8, 0x7a, 0x6a, 0x1c, 0xc9, 0x23, 0x96, 0xbd, 0x98, 0x66, 0xaa, 0x77, 0xd5, - 0x32, 0x08, 0x9c, 0x15, 0x8f, 0xde, 0x82, 0x49, 0xde, 0x66, 0xb7, 0x53, 0x5b, 0x0a, 0xfa, 0xbc, - 0x99, 0x89, 0xc4, 0x69, 0x5a, 0x34, 0xc7, 0xb7, 0x66, 0xc4, 0xc9, 0xae, 0x51, 0xbd, 0x45, 0x6b, - 0x9c, 0xe9, 0x32, 0x28, 0x50, 0x04, 0x28, 0x22, 0xf5, 0x88, 0xc4, 0xbb, 0x22, 0xd0, 0xc3, 0xa6, - 0xe5, 0xb1, 0x47, 0xcb, 0xfe, 0xc6, 0x5d, 0x9c, 0x70, 0x0f, 0xee, 0x68, 0x4f, 0xac, 0x0d, 0xca, - 0x79, 0x58, 0x05, 0xf1, 0x99, 0xfb, 0x2e, 0x11, 0x66, 0xa1, 0x14, 0xef, 0x3a, 0x51, 0x8d, 0xb9, - 0x03, 0x45, 0x9e, 0xe4, 0xb4, 0x45, 0x01, 0x98, 0xc3, 0xd1, 0x12, 0x9c, 0xcd, 0x9c, 0x96, 0x8b, - 0xd9, 0x84, 0x5f, 0xae, 0xce, 0x08, 0x76, 0x67, 0x33, 0xe7, 0xec, 0x62, 0xdc, 0xf5, 0x84, 0xb9, - 0x6e, 0x1c, 0x3f, 0x66, 0xdd, 0xd8, 0x51, 0xe9, 0x04, 0x13, 0xcc, 0xe2, 0xbf, 0x93, 0x4b, 0x03, - 0x0c, 0x94, 0x3b, 0xf0, 0xa5, 0x4c, 0xee, 0xc0, 0x24, 0x53, 0xe0, 0x76, 0x3e, 0x0a, 0x0c, 0x9f, - 0x28, 0xf0, 0x24, 0x03, 0xff, 0x7f, 0x66, 0x81, 0xfc, 0xae, 0x8b, 0x8e, 0xbb, 0x4b, 0x68, 0x97, - 0x41, 0x6f, 0xc3, 0x94, 0x5a, 0x79, 0x2d, 0x86, 0xed, 0x80, 0xc7, 0xfc, 0x8b, 0x7a, 0xfb, 0x1d, - 0xa7, 0xb0, 0x38, 0x43, 0x8d, 0xe6, 0xa1, 0x42, 0xdb, 0x89, 0x3f, 0xca, 0x67, 0x0f, 0xb5, 0xba, - 0x5b, 0xd8, 0x5c, 0x11, 0x4f, 0x69, 0x1a, 0x14, 0xc2, 0xb4, 0xef, 0xc4, 0x09, 0xd3, 0x80, 0x2e, - 0xc4, 0x1e, 0xf1, 0xec, 0x05, 0x3b, 0x2c, 0xbc, 0x9a, 0x65, 0x84, 0xbb, 0x79, 0xdb, 0xdf, 0x1d, - 0x81, 0xc9, 0x94, 0x65, 0x1c, 0x72, 0xda, 0x79, 0x15, 0xca, 0x72, 0x26, 0x10, 0xa6, 0x5c, 0x51, - 0xab, 0xe9, 0x42, 0x51, 0xd0, 0x69, 0x72, 0x87, 0x38, 0x11, 0x89, 0xd8, 0x39, 0xc4, 0xec, 0x34, - 0x59, 0xd5, 0x28, 0x6c, 0xd2, 0x31, 0xa3, 0x9c, 0xf8, 0xf1, 0xa2, 0xef, 0x91, 0x20, 0xe1, 0x6a, - 0xe6, 0x63, 0x94, 0xb7, 0x57, 0xb7, 0x4c, 0xa6, 0xda, 0x28, 0x67, 0x10, 0x38, 0x2b, 0x1e, 0xfd, - 0xa2, 0x05, 0x93, 0xce, 0xfd, 0x58, 0xd7, 0xd6, 0x10, 0x59, 0x02, 0x27, 0x9c, 0xa4, 0x52, 0xe5, - 0x3a, 0xaa, 0xd3, 0xd4, 0xbc, 0xa7, 0x40, 0x38, 0x2d, 0x14, 0x7d, 0xdd, 0x02, 0x44, 0x0e, 0x88, - 0x2b, 0xf3, 0x18, 0x84, 0x2e, 0xa3, 0x79, 0x2c, 0x50, 0xae, 0x76, 0xf1, 0xe5, 0x56, 0xbd, 0x1b, - 0x8e, 0x7b, 0xe8, 0x60, 0xff, 0x8b, 0xa2, 0x1a, 0x50, 0x3a, 0x75, 0xc6, 0x31, 0x32, 0x48, 0xad, - 0x47, 0xcf, 0x20, 0xd5, 0xb1, 0x9f, 0xae, 0x2c, 0xd2, 0x74, 0xba, 0x65, 0xe1, 0x09, 0xa5, 0x5b, - 0x7e, 0xce, 0x52, 0x21, 0x43, 0xee, 0xc6, 0xbf, 0x9b, 0x6f, 0xda, 0xce, 0x1c, 0x8f, 0x3c, 0x66, - 0xac, 0x7b, 0x3a, 0x1c, 0x49, 0xad, 0xa9, 0x41, 0x36, 0x94, 0x35, 0xfc, 0x4f, 0x45, 0x18, 0x37, - 0x66, 0xd2, 0x9e, 0x6e, 0x91, 0xf5, 0x94, 0xb9, 0x45, 0x85, 0x21, 0xdc, 0xa2, 0x9f, 0x87, 0x8a, - 0x2b, 0xad, 0x7c, 0x3e, 0x85, 0x5c, 0xb2, 0x73, 0x87, 0x36, 0xf4, 0x0a, 0x84, 0xb5, 0x4c, 0xb4, - 0x0c, 0xd3, 0x06, 0x1b, 0x31, 0x43, 0x8c, 0xb0, 0x19, 0x42, 0x6d, 0xac, 0x2e, 0x64, 0x09, 0x70, - 0xf7, 0x33, 0xe8, 0x75, 0xba, 0xb2, 0xf2, 0xc4, 0x7b, 0xc9, 0xe4, 0x3a, 0xe6, 0xae, 0x2f, 0x6c, - 0xae, 0x48, 0x30, 0x36, 0x69, 0xec, 0xef, 0x5a, 0xea, 0xe3, 0x3e, 0x86, 0x33, 0x29, 0x77, 0xd3, - 0x67, 0x52, 0xae, 0xe6, 0xd2, 0xcc, 0x7d, 0x0e, 0xa3, 0xac, 0xc3, 0xd8, 0x62, 0xd8, 0x6c, 0x3a, - 0x41, 0x0d, 0xfd, 0x10, 0x8c, 0xb9, 0xfc, 0xa7, 0xd8, 0xaa, 0x18, 0xa7, 0xce, 0x97, 0xc0, 0x62, - 0x89, 0x43, 0x2f, 0xc2, 0x88, 0x13, 0x35, 0xe4, 0xf6, 0x04, 0x8b, 0x95, 0x2e, 0x44, 0x8d, 0x18, - 0x33, 0xa8, 0xfd, 0xb5, 0x02, 0xc0, 0x62, 0xd8, 0x6c, 0x39, 0x11, 0xa9, 0x6d, 0x87, 0xef, 0xc7, - 0x44, 0xf8, 0xaa, 0xf5, 0x8b, 0x16, 0x20, 0xda, 0x2a, 0x61, 0x40, 0x82, 0x44, 0x25, 0x1b, 0x50, - 0x67, 0xc7, 0x95, 0x50, 0xe1, 0x39, 0xe8, 0x31, 0x20, 0x11, 0x58, 0xd3, 0x0c, 0xb0, 0x04, 0x7c, - 0x59, 0x1a, 0xa8, 0x62, 0x3a, 0x87, 0x87, 0x99, 0x35, 0x61, 0xaf, 0xec, 0xdf, 0x2e, 0xc0, 0xb3, - 0x7c, 0xce, 0x59, 0x73, 0x02, 0xa7, 0x41, 0x9a, 0x54, 0xab, 0x41, 0xa3, 0x6b, 0x2e, 0x5d, 0x7b, - 0x78, 0x32, 0x65, 0xe7, 0xa4, 0x9d, 0x93, 0x77, 0x2a, 0xde, 0x8d, 0x56, 0x02, 0x2f, 0xc1, 0x8c, - 0x39, 0x8a, 0xa1, 0x2c, 0x4b, 0x73, 0x09, 0x63, 0x93, 0x93, 0x20, 0x35, 0xee, 0xc4, 0xc4, 0x40, - 0xb0, 0x12, 0x44, 0x3d, 0x33, 0x3f, 0x74, 0xf7, 0x30, 0x69, 0x85, 0xcc, 0xb0, 0x18, 0x19, 0x13, - 0xab, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0xdb, 0x16, 0x64, 0x4d, 0x2e, 0x5b, 0xca, 0xf3, 0x53, 0xb9, - 0xd9, 0xa5, 0x7c, 0xfa, 0xd0, 0xed, 0x10, 0x87, 0x8b, 0x7f, 0x0a, 0xc6, 0x9d, 0x84, 0xce, 0x92, - 0x7c, 0x5d, 0x59, 0x7c, 0xb4, 0xed, 0xde, 0xb5, 0xb0, 0xe6, 0xd5, 0x3d, 0xb6, 0x9e, 0x34, 0xd9, - 0xd9, 0x7f, 0x3a, 0x02, 0xd3, 0x5d, 0x79, 0x96, 0xe8, 0x4d, 0x98, 0x70, 0x45, 0xf7, 0x68, 0x61, - 0x52, 0x17, 0x2f, 0x63, 0x84, 0xf1, 0x35, 0x0e, 0xa7, 0x28, 0x07, 0xe8, 0xa0, 0x2b, 0x70, 0x2e, - 0xa2, 0x2b, 0xd9, 0x36, 0x59, 0xa8, 0x27, 0x24, 0xda, 0x22, 0x6e, 0x18, 0xd4, 0xf8, 0xe9, 0xf1, - 0x62, 0xf5, 0xb9, 0xa3, 0xc3, 0xd9, 0x73, 0xb8, 0x1b, 0x8d, 0x7b, 0x3d, 0x83, 0x5a, 0x30, 0xe9, - 0x9b, 0x4e, 0x8e, 0xf0, 0x70, 0x1f, 0xc9, 0x3f, 0x52, 0x93, 0x60, 0x0a, 0x8c, 0xd3, 0x02, 0xd2, - 0x9e, 0x52, 0xe9, 0x09, 0x79, 0x4a, 0xbf, 0xa0, 0x3d, 0x25, 0x1e, 0x1b, 0xfc, 0x78, 0xce, 0x79, - 0xb6, 0xa7, 0xed, 0x2a, 0xbd, 0x03, 0x65, 0x19, 0x56, 0x1f, 0xc0, 0xde, 0xbc, 0x9c, 0xe2, 0xd3, - 0xc7, 0xa2, 0x3d, 0x28, 0x40, 0x0f, 0x2f, 0x9b, 0x8e, 0x33, 0x3d, 0xa5, 0xa5, 0xc6, 0xd9, 0x70, - 0xd3, 0x1a, 0x3a, 0xe0, 0x29, 0x05, 0xdc, 0x33, 0xfd, 0x58, 0xde, 0xab, 0x04, 0x9d, 0x65, 0x30, - 0x2e, 0xf4, 0x53, 0x99, 0x06, 0xe8, 0x0a, 0x80, 0xf6, 0x44, 0x44, 0x36, 0x9d, 0x0a, 0x87, 0x69, - 0x87, 0x05, 0x1b, 0x54, 0x74, 0xd1, 0xe8, 0x05, 0x71, 0xe2, 0xf8, 0xfe, 0x75, 0x2f, 0x48, 0xc4, - 0xee, 0x97, 0x9a, 0xa5, 0x56, 0x34, 0x0a, 0x9b, 0x74, 0x17, 0x3f, 0x62, 0x7c, 0x97, 0x61, 0xbe, - 0xe7, 0x2e, 0x3c, 0xbf, 0xec, 0x25, 0x2a, 0x07, 0x54, 0xf5, 0x23, 0xea, 0x68, 0xa8, 0xa4, 0x65, - 0xab, 0x6f, 0xd2, 0xb2, 0x91, 0x83, 0x59, 0x48, 0xa7, 0x8c, 0x66, 0x73, 0x30, 0xed, 0x37, 0xe1, - 0xfc, 0xb2, 0x97, 0x5c, 0xf3, 0x7c, 0x32, 0xa4, 0x10, 0xfb, 0xb7, 0x46, 0x60, 0xc2, 0x4c, 0xaa, - 0x1f, 0x26, 0xef, 0xfa, 0xcb, 0xd4, 0x97, 0x10, 0x6f, 0xe7, 0xa9, 0x38, 0xc7, 0x9d, 0x13, 0x67, - 0xf8, 0xf7, 0x6e, 0x31, 0xc3, 0x9d, 0xd0, 0x32, 0xb1, 0xa9, 0x00, 0xba, 0x0f, 0xa5, 0x3a, 0xcb, - 0x11, 0x2c, 0xe6, 0x11, 0x71, 0xed, 0xd5, 0xa2, 0x7a, 0x98, 0xf1, 0x2c, 0x43, 0x2e, 0x8f, 0xce, - 0x90, 0x51, 0x3a, 0xb3, 0x5c, 0x19, 0x2a, 0x95, 0x53, 0xae, 0x28, 0xfa, 0x99, 0xfa, 0xd2, 0x23, - 0x98, 0xfa, 0x94, 0xe1, 0x1d, 0x7d, 0x32, 0x86, 0xd7, 0xfe, 0x62, 0x01, 0xa6, 0x96, 0x83, 0xf6, - 0xe6, 0xf2, 0x66, 0x7b, 0xc7, 0xf7, 0xdc, 0x9b, 0xa4, 0x43, 0x8d, 0xd3, 0x1e, 0xe9, 0xac, 0x2c, - 0x89, 0x3e, 0xa4, 0x5a, 0xed, 0x26, 0x05, 0x62, 0x8e, 0xa3, 0xc3, 0xb1, 0xee, 0x05, 0x0d, 0x12, - 0xb5, 0x22, 0x4f, 0xec, 0x6a, 0x19, 0xc3, 0xf1, 0x9a, 0x46, 0x61, 0x93, 0x8e, 0xf2, 0x0e, 0xef, - 0x07, 0x24, 0xca, 0xba, 0x72, 0x1b, 0x14, 0x88, 0x39, 0x8e, 0x12, 0x25, 0x51, 0x3b, 0x4e, 0xc4, - 0xe7, 0x50, 0x44, 0xdb, 0x14, 0x88, 0x39, 0x8e, 0xf6, 0xf5, 0xb8, 0xbd, 0xc3, 0x42, 0xba, 0x99, - 0xe4, 0xba, 0x2d, 0x0e, 0xc6, 0x12, 0x4f, 0x49, 0xf7, 0x48, 0x67, 0x89, 0x2e, 0x6c, 0x32, 0xe9, - 0xaf, 0x37, 0x39, 0x18, 0x4b, 0x3c, 0x3b, 0xaf, 0x9f, 0x6e, 0x8e, 0xbf, 0x70, 0xe7, 0xf5, 0xd3, - 0xea, 0xf7, 0x59, 0x22, 0x7d, 0xd3, 0x82, 0x09, 0x33, 0x11, 0x03, 0x35, 0x32, 0x5e, 0xde, 0x46, - 0x57, 0xed, 0x95, 0x1f, 0xef, 0x55, 0x0e, 0xb8, 0xe1, 0x25, 0x61, 0x2b, 0x7e, 0x8d, 0x04, 0x0d, - 0x2f, 0x20, 0x2c, 0xf4, 0xc7, 0x13, 0x38, 0x52, 0x59, 0x1e, 0x8b, 0x61, 0x8d, 0x3c, 0x82, 0x9b, - 0x68, 0xdf, 0x81, 0xe9, 0xae, 0x9c, 0xe7, 0x01, 0x26, 0xd7, 0x63, 0x8f, 0x94, 0xd8, 0x18, 0xc6, - 0x29, 0xe3, 0x8d, 0x16, 0xcf, 0xb4, 0x58, 0x84, 0x69, 0xee, 0x00, 0x50, 0x49, 0x5b, 0xee, 0x2e, - 0x69, 0xaa, 0x3c, 0x76, 0xb6, 0x85, 0x7a, 0x3b, 0x8b, 0xc4, 0xdd, 0xf4, 0xf6, 0x97, 0x2c, 0x98, - 0x4c, 0xa5, 0xa1, 0xe7, 0xe4, 0x06, 0xb0, 0x91, 0x16, 0xb2, 0xbc, 0xa0, 0xc8, 0x0b, 0x78, 0x14, - 0xac, 0x6c, 0x8c, 0x34, 0x8d, 0xc2, 0x26, 0x9d, 0xfd, 0x2b, 0x05, 0x28, 0xcb, 0xb0, 0xef, 0x00, - 0xaa, 0x7c, 0xc1, 0x82, 0x49, 0xb5, 0x6d, 0xcd, 0xf6, 0x43, 0x78, 0x67, 0x5c, 0x3f, 0x79, 0xe0, - 0x59, 0x25, 0x8f, 0x05, 0xf5, 0x50, 0xfb, 0xa4, 0xd8, 0x14, 0x86, 0xd3, 0xb2, 0xd1, 0x6d, 0x80, - 0xb8, 0x13, 0x27, 0xa4, 0x69, 0xec, 0xcc, 0xd8, 0xc6, 0x88, 0x9b, 0x73, 0xc3, 0x88, 0xd0, 0xf1, - 0xb5, 0x1e, 0xd6, 0xc8, 0x96, 0xa2, 0xd4, 0x4e, 0x84, 0x86, 0x61, 0x83, 0x93, 0xfd, 0x8f, 0x0a, - 0x70, 0x36, 0xab, 0x12, 0xfa, 0x38, 0x4c, 0x48, 0xe9, 0x46, 0x3d, 0x64, 0x19, 0xeb, 0x9e, 0xc0, - 0x06, 0xee, 0xc1, 0xe1, 0xec, 0x6c, 0x77, 0x69, 0xe9, 0x39, 0x93, 0x04, 0xa7, 0x98, 0xf1, 0xd8, - 0x81, 0x08, 0x72, 0x55, 0x3b, 0x0b, 0xad, 0x96, 0x08, 0x00, 0x18, 0xb1, 0x03, 0x13, 0x8b, 0x33, - 0xd4, 0x68, 0x13, 0xce, 0x1b, 0x90, 0x75, 0xe2, 0x35, 0x76, 0x77, 0xc2, 0x48, 0xae, 0x2d, 0x5e, - 0xd4, 0x29, 0x1f, 0xdd, 0x34, 0xb8, 0xe7, 0x93, 0x74, 0xbe, 0x73, 0x9d, 0x96, 0xe3, 0x7a, 0x49, - 0x47, 0x6c, 0x35, 0x29, 0xdb, 0xb4, 0x28, 0xe0, 0x58, 0x51, 0xd8, 0x6b, 0x30, 0x32, 0x60, 0x0f, - 0x1a, 0xc8, 0xa7, 0x7d, 0x07, 0xca, 0x94, 0x9d, 0x74, 0x70, 0xf2, 0x60, 0x19, 0x42, 0x59, 0x96, - 0x34, 0x44, 0x36, 0x14, 0x3d, 0x47, 0x86, 0x67, 0xd4, 0x6b, 0xad, 0xc4, 0x71, 0x9b, 0x2d, 0x13, - 0x29, 0x12, 0xbd, 0x0c, 0x45, 0x72, 0xd0, 0xca, 0xc6, 0x61, 0xae, 0x1e, 0xb4, 0xbc, 0x88, 0xc4, - 0x94, 0x88, 0x1c, 0xb4, 0xd0, 0x45, 0x28, 0x78, 0x35, 0x31, 0x49, 0x81, 0xa0, 0x29, 0xac, 0x2c, - 0xe1, 0x82, 0x57, 0xb3, 0x0f, 0xa0, 0xa2, 0x6a, 0x28, 0xa2, 0x3d, 0x69, 0xbb, 0xad, 0x3c, 0xf2, - 0x34, 0x24, 0xdf, 0x3e, 0x56, 0xbb, 0x0d, 0xa0, 0x93, 0xfe, 0xf3, 0xb2, 0x2f, 0x97, 0x61, 0xc4, - 0x0d, 0xc5, 0x59, 0xa1, 0xb2, 0x66, 0xc3, 0x8c, 0x36, 0xc3, 0xd8, 0x77, 0x60, 0xea, 0x66, 0x10, - 0xde, 0x67, 0x95, 0xc4, 0xae, 0x79, 0xc4, 0xaf, 0x51, 0xc6, 0x75, 0xfa, 0x23, 0xeb, 0x22, 0x30, - 0x2c, 0xe6, 0x38, 0x55, 0x68, 0xb0, 0xd0, 0xaf, 0xd0, 0xa0, 0xfd, 0x19, 0x0b, 0xce, 0xaa, 0x6c, - 0x74, 0x69, 0x8d, 0xdf, 0x84, 0x89, 0x9d, 0xb6, 0xe7, 0xd7, 0xc4, 0xff, 0xec, 0x42, 0xbd, 0x6a, - 0xe0, 0x70, 0x8a, 0x92, 0x2e, 0x2b, 0x76, 0xbc, 0xc0, 0x89, 0x3a, 0x9b, 0xda, 0xfc, 0x2b, 0x8b, - 0x50, 0x55, 0x18, 0x6c, 0x50, 0xd9, 0x9f, 0x2b, 0xc0, 0x64, 0xea, 0xf0, 0x2d, 0xf2, 0xa1, 0x4c, - 0x7c, 0xb6, 0x7d, 0x24, 0x3f, 0xea, 0x49, 0x4b, 0x68, 0xa8, 0x8e, 0x78, 0x55, 0xf0, 0xc5, 0x4a, - 0xc2, 0x53, 0x11, 0xa7, 0xb0, 0xff, 0x7e, 0x01, 0xce, 0x64, 0x6a, 0x33, 0xa1, 0xaf, 0xa4, 0x6b, - 0x67, 0x58, 0x79, 0xac, 0xca, 0x1f, 0x5a, 0x21, 0x68, 0xb8, 0x0a, 0x1a, 0x4f, 0xaa, 0xa9, 0x7e, - 0xb7, 0x00, 0x53, 0xe9, 0xa2, 0x52, 0x4f, 0x61, 0x4b, 0x7d, 0x08, 0x2a, 0xac, 0x54, 0x0b, 0xab, - 0x71, 0xcc, 0x17, 0xff, 0xec, 0x70, 0xe6, 0x9a, 0x04, 0x62, 0x8d, 0x7f, 0x2a, 0x0a, 0x93, 0xd8, - 0xff, 0xc0, 0x82, 0x0b, 0xfc, 0x2d, 0xb3, 0xfd, 0xf0, 0x6f, 0xf4, 0x6a, 0xdd, 0x4f, 0xe4, 0xab, - 0x60, 0xe6, 0x68, 0xff, 0x71, 0xed, 0xcb, 0x6a, 0xab, 0x0a, 0x6d, 0xd3, 0x5d, 0xe1, 0x29, 0x54, - 0x76, 0xa8, 0xce, 0x60, 0xff, 0x6e, 0x11, 0x74, 0x39, 0x59, 0xe4, 0x89, 0x2c, 0xf3, 0x5c, 0x4a, - 0x1c, 0x6c, 0x75, 0x02, 0x57, 0x17, 0xae, 0x2d, 0x67, 0x92, 0xcc, 0x7f, 0xd9, 0x82, 0x71, 0x2f, - 0xf0, 0x12, 0xcf, 0x61, 0xee, 0x4a, 0x3e, 0xf5, 0x3e, 0x95, 0xb8, 0x15, 0xce, 0x39, 0x8c, 0xcc, - 0x1d, 0x23, 0x25, 0x0c, 0x9b, 0x92, 0xd1, 0xa7, 0x45, 0x1e, 0x52, 0x31, 0xb7, 0x33, 0x0a, 0xe5, - 0x4c, 0xf2, 0x51, 0x0b, 0x4a, 0x11, 0x49, 0x22, 0x79, 0x3a, 0xe4, 0xe6, 0x49, 0x93, 0x4b, 0x93, - 0xa8, 0xb3, 0x95, 0x44, 0x4e, 0x42, 0x1a, 0xc6, 0x72, 0x8f, 0x81, 0x31, 0x17, 0x64, 0xc7, 0x80, - 0xba, 0xdb, 0x62, 0xc8, 0x1c, 0x8f, 0x79, 0xa8, 0x38, 0xed, 0x24, 0x6c, 0xd2, 0x66, 0x12, 0x9b, - 0x5a, 0x3a, 0x8b, 0x45, 0x22, 0xb0, 0xa6, 0xb1, 0xbf, 0x52, 0x82, 0x4c, 0xda, 0x37, 0x3a, 0x30, - 0x4b, 0x21, 0x5b, 0xf9, 0x96, 0x42, 0x56, 0xca, 0xf4, 0x2a, 0x87, 0x8c, 0x1a, 0x50, 0x6a, 0xed, - 0x3a, 0xb1, 0xf4, 0x46, 0xde, 0x91, 0xcd, 0xb4, 0x49, 0x81, 0x0f, 0x0e, 0x67, 0x7f, 0x62, 0xb0, - 0xd5, 0x2d, 0xed, 0xab, 0xf3, 0xfc, 0x0c, 0x9c, 0x16, 0xcd, 0x78, 0x60, 0xce, 0xdf, 0x5c, 0xdf, - 0x16, 0x8f, 0x09, 0x83, 0x7c, 0x56, 0x54, 0x63, 0xc2, 0x24, 0x6e, 0xfb, 0x89, 0xe8, 0x0d, 0xef, - 0xe4, 0x38, 0xca, 0x38, 0x63, 0x7d, 0x68, 0x88, 0xff, 0xc7, 0x86, 0x50, 0xf4, 0x71, 0xa8, 0xc4, - 0x89, 0x13, 0x25, 0x8f, 0x78, 0xc4, 0x40, 0x35, 0xfa, 0x96, 0x64, 0x82, 0x35, 0x3f, 0xf4, 0x2e, - 0xab, 0xf8, 0xe2, 0xc5, 0xbb, 0x8f, 0x98, 0x3e, 0x28, 0xab, 0xc3, 0x08, 0x0e, 0xd8, 0xe0, 0x46, - 0x9d, 0x3d, 0xd6, 0xb7, 0x79, 0xcc, 0xbc, 0xcc, 0xbc, 0x79, 0x65, 0x0a, 0xb1, 0xc2, 0x60, 0x83, - 0xca, 0xfe, 0x39, 0x38, 0x97, 0xbd, 0x3b, 0x41, 0x6c, 0x78, 0x35, 0xa2, 0xb0, 0xdd, 0xca, 0x7a, - 0xb3, 0xac, 0xb6, 0x3e, 0xe6, 0x38, 0xea, 0xcd, 0xee, 0x79, 0x41, 0x2d, 0xeb, 0xcd, 0xde, 0xf4, - 0x82, 0x1a, 0x66, 0x98, 0x01, 0x6a, 0x44, 0xff, 0x4b, 0x0b, 0x2e, 0x1f, 0x77, 0xc5, 0x03, 0x7a, - 0x11, 0x46, 0xee, 0x3b, 0x91, 0xac, 0x20, 0xc5, 0x6c, 0xc7, 0x1d, 0x27, 0x0a, 0x30, 0x83, 0xa2, - 0x0e, 0x8c, 0xf2, 0x63, 0x55, 0x62, 0x7d, 0xfe, 0x4e, 0xbe, 0x17, 0x4e, 0xdc, 0x24, 0x46, 0x74, - 0x84, 0x1f, 0xe9, 0xc2, 0x42, 0xa0, 0xfd, 0x3d, 0x0b, 0xd0, 0xc6, 0x3e, 0x89, 0x22, 0xaf, 0x66, - 0x1c, 0x04, 0x43, 0x6f, 0xc0, 0xc4, 0xdd, 0xad, 0x8d, 0xf5, 0xcd, 0xd0, 0x0b, 0xd8, 0x59, 0x77, - 0xe3, 0x48, 0xc0, 0x0d, 0x03, 0x8e, 0x53, 0x54, 0x68, 0x11, 0xa6, 0xef, 0xde, 0xa3, 0x1e, 0xf8, - 0xd5, 0x83, 0x56, 0x44, 0xe2, 0x58, 0x5d, 0xd3, 0x22, 0xf6, 0x5c, 0x6e, 0xbc, 0x93, 0x41, 0xe2, - 0x6e, 0x7a, 0xb4, 0x01, 0x17, 0x9a, 0x2c, 0xd8, 0x5b, 0x63, 0x0b, 0x8f, 0x98, 0x47, 0x7e, 0x23, - 0x79, 0x98, 0xf8, 0xf9, 0xa3, 0xc3, 0xd9, 0x0b, 0x6b, 0xbd, 0x08, 0x70, 0xef, 0xe7, 0xec, 0x6f, - 0x15, 0x60, 0xdc, 0xb8, 0x26, 0x65, 0x80, 0x25, 0x56, 0xe6, 0x66, 0x97, 0xc2, 0x80, 0x37, 0xbb, - 0xbc, 0x02, 0xe5, 0x56, 0xe8, 0x7b, 0xae, 0xa7, 0x4e, 0x3e, 0xb3, 0x0a, 0x3c, 0x9b, 0x02, 0x86, - 0x15, 0x16, 0xdd, 0x87, 0x8a, 0xba, 0x3a, 0x40, 0x9c, 0x85, 0xca, 0x6b, 0x91, 0xa9, 0x06, 0xaf, - 0xbe, 0x12, 0x40, 0xcb, 0x42, 0x36, 0x8c, 0xb2, 0x9e, 0x2f, 0xb3, 0x49, 0x58, 0xc2, 0x3b, 0x1b, - 0x12, 0x31, 0x16, 0x18, 0xfb, 0x97, 0xc6, 0xe0, 0x7c, 0xaf, 0xaa, 0x31, 0xe8, 0x67, 0x60, 0x94, - 0xeb, 0x98, 0x4f, 0x61, 0xb2, 0x5e, 0x32, 0x96, 0x19, 0x43, 0xa1, 0x16, 0xfb, 0x8d, 0x85, 0x4c, - 0x21, 0xdd, 0x77, 0x76, 0x84, 0x1b, 0x71, 0x3a, 0xd2, 0x57, 0x1d, 0x2d, 0x7d, 0xd5, 0xe1, 0xd2, - 0x7d, 0x67, 0x07, 0x1d, 0x40, 0xa9, 0xe1, 0x25, 0xc4, 0x11, 0xce, 0xf4, 0x9d, 0x53, 0x11, 0x4e, - 0x1c, 0x9e, 0xb4, 0xcc, 0x7e, 0x62, 0x2e, 0x10, 0x7d, 0xc3, 0x82, 0x33, 0x3b, 0xe9, 0xf3, 0x03, - 0x62, 0x56, 0x71, 0x4e, 0xa1, 0x32, 0x50, 0x5a, 0x50, 0xf5, 0xdc, 0xd1, 0xe1, 0xec, 0x99, 0x0c, - 0x10, 0x67, 0xd5, 0x41, 0xbf, 0x60, 0xc1, 0x58, 0xdd, 0xf3, 0x8d, 0xaa, 0x18, 0xa7, 0xf0, 0x71, - 0xae, 0x31, 0x01, 0x7a, 0xe6, 0xe5, 0xff, 0x63, 0x2c, 0x25, 0xf7, 0x8b, 0xe2, 0x8c, 0x9e, 0x34, - 0x8a, 0x33, 0xf6, 0x84, 0x96, 0x4f, 0x7f, 0xab, 0x00, 0x2f, 0x0f, 0xf0, 0x8d, 0xcc, 0x7c, 0x74, - 0xeb, 0x98, 0x7c, 0xf4, 0xcb, 0x30, 0x12, 0x91, 0x56, 0x98, 0x9d, 0xef, 0x58, 0xc2, 0x08, 0xc3, - 0xa0, 0x97, 0xa0, 0xe8, 0xb4, 0x3c, 0x31, 0xdd, 0xa9, 0x20, 0xef, 0xc2, 0xe6, 0x0a, 0xa6, 0x70, - 0xfa, 0xa5, 0x2b, 0x3b, 0xf2, 0x54, 0x4b, 0x3e, 0xa5, 0x26, 0xfb, 0x1d, 0x92, 0xe1, 0x0b, 0x1a, - 0x85, 0xc5, 0x5a, 0xae, 0xbd, 0x01, 0x17, 0xfb, 0xf7, 0x10, 0xf4, 0x3a, 0x8c, 0xef, 0x44, 0x4e, - 0xe0, 0xee, 0xae, 0x39, 0x89, 0x2b, 0x43, 0xad, 0x2c, 0x6d, 0xae, 0xaa, 0xc1, 0xd8, 0xa4, 0xb1, - 0x7f, 0xa7, 0xd0, 0x9b, 0x23, 0x37, 0x02, 0xc3, 0xb4, 0xb0, 0x68, 0xbf, 0x42, 0x9f, 0xf6, 0xbb, - 0x07, 0xe5, 0x84, 0x25, 0x41, 0x93, 0xba, 0xb0, 0x24, 0xb9, 0x9d, 0xe3, 0x61, 0x73, 0xcd, 0xb6, - 0x60, 0x8e, 0x95, 0x18, 0x6a, 0xf2, 0x7d, 0x5d, 0x50, 0x43, 0x98, 0xfc, 0xcc, 0x61, 0x81, 0x25, - 0x38, 0x6b, 0x14, 0x00, 0xe3, 0x39, 0xa0, 0x3c, 0x00, 0xa7, 0x0e, 0x46, 0x6c, 0x66, 0xf0, 0xb8, - 0xeb, 0x09, 0xfb, 0x9b, 0x05, 0x78, 0xbe, 0xaf, 0x65, 0xd3, 0x51, 0x42, 0xeb, 0x21, 0x51, 0xc2, - 0x13, 0x77, 0x50, 0xb3, 0x81, 0x47, 0x1e, 0x4f, 0x03, 0xbf, 0x0a, 0x65, 0x2f, 0x88, 0x89, 0xdb, - 0x8e, 0x78, 0xa3, 0x19, 0xd9, 0x58, 0x2b, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x7b, 0xfd, 0xbb, 0x1a, - 0x9d, 0xe5, 0x7e, 0x60, 0x5b, 0xe9, 0x2d, 0x98, 0x74, 0x5a, 0x2d, 0x4e, 0xc7, 0x22, 0x32, 0x99, - 0xa3, 0x4e, 0x0b, 0x26, 0x12, 0xa7, 0x69, 0x8d, 0x3e, 0x3c, 0xda, 0xaf, 0x0f, 0xdb, 0x7f, 0x5c, - 0x82, 0x0a, 0x6d, 0x81, 0xc5, 0x88, 0xd4, 0x62, 0xda, 0x00, 0xed, 0xc8, 0x17, 0xad, 0xa8, 0x1a, - 0xe0, 0x16, 0x5e, 0xc5, 0x14, 0x9e, 0x5a, 0x25, 0x17, 0x86, 0x3a, 0x09, 0x51, 0x3c, 0xf6, 0x24, - 0xc4, 0x5b, 0x30, 0x19, 0xc7, 0xbb, 0x9b, 0x91, 0xb7, 0xef, 0x24, 0xd4, 0xf7, 0x16, 0x11, 0x6f, - 0x9d, 0xbd, 0xbc, 0x75, 0x5d, 0x23, 0x71, 0x9a, 0x16, 0x2d, 0xc3, 0xb4, 0x3e, 0x8f, 0x40, 0xa2, - 0x84, 0x05, 0xb8, 0x79, 0x53, 0xa9, 0xe4, 0x61, 0x7d, 0x82, 0x41, 0x10, 0xe0, 0xee, 0x67, 0xe8, - 0x90, 0x4e, 0x01, 0xa9, 0x22, 0xa3, 0xe9, 0x21, 0x9d, 0xe2, 0x43, 0x75, 0xe9, 0x7a, 0x02, 0xad, - 0xc1, 0x39, 0xde, 0x2f, 0xd8, 0x4d, 0x59, 0xea, 0x8d, 0xc6, 0x18, 0xa3, 0x17, 0x04, 0xa3, 0x73, - 0xcb, 0xdd, 0x24, 0xb8, 0xd7, 0x73, 0xd4, 0xb1, 0x56, 0xe0, 0x95, 0x25, 0xb1, 0xc0, 0x53, 0x8e, - 0xb5, 0x62, 0xb3, 0x52, 0xc3, 0x26, 0x1d, 0xfa, 0x18, 0x3c, 0xa7, 0xff, 0xf2, 0x3c, 0x20, 0xbe, - 0xeb, 0xb1, 0x24, 0x8e, 0x7a, 0xa9, 0xe2, 0x53, 0xcb, 0x3d, 0xc9, 0x6a, 0xb8, 0xdf, 0xf3, 0x68, - 0x07, 0x2e, 0x2a, 0xd4, 0x55, 0xba, 0x8a, 0x69, 0x45, 0x5e, 0x4c, 0xaa, 0x4e, 0x4c, 0x6e, 0x45, - 0x3e, 0x3b, 0x1c, 0x56, 0xd1, 0x65, 0x72, 0x97, 0xbd, 0xe4, 0x7a, 0x2f, 0x4a, 0xbc, 0x8a, 0x1f, - 0xc2, 0x05, 0xcd, 0x43, 0x85, 0x04, 0xce, 0x8e, 0x4f, 0x36, 0x16, 0x57, 0xd8, 0x91, 0x31, 0x63, - 0x93, 0xe5, 0xaa, 0x44, 0x60, 0x4d, 0xa3, 0x82, 0x2c, 0x13, 0x7d, 0x83, 0x2c, 0x7f, 0x60, 0xc1, - 0xa4, 0xea, 0xec, 0x8f, 0x21, 0x9b, 0xc1, 0x4f, 0x67, 0x33, 0x2c, 0x9f, 0x74, 0x77, 0x4b, 0x68, - 0xde, 0x27, 0x24, 0xf6, 0x47, 0x15, 0x00, 0x76, 0xe9, 0xa7, 0xc7, 0xaa, 0x37, 0x48, 0x73, 0x67, - 0xf5, 0x35, 0x77, 0x4f, 0xed, 0x70, 0xee, 0x75, 0xb8, 0xa2, 0xf4, 0x64, 0x0f, 0x57, 0x6c, 0xc1, - 0x05, 0x39, 0x19, 0xf1, 0x05, 0xff, 0xf5, 0x30, 0x56, 0xd6, 0xa1, 0x5c, 0x7d, 0x49, 0x30, 0xba, - 0xb0, 0xd2, 0x8b, 0x08, 0xf7, 0x7e, 0x36, 0x35, 0x07, 0x8e, 0x1d, 0x37, 0x07, 0xea, 0x01, 0xb1, - 0x5a, 0x97, 0x75, 0xa0, 0x32, 0x03, 0x62, 0xf5, 0xda, 0x16, 0xd6, 0x34, 0xbd, 0xad, 0x62, 0x25, - 0x27, 0xab, 0x08, 0x43, 0x5b, 0x45, 0x39, 0x3e, 0xc7, 0xfb, 0xde, 0xb6, 0x26, 0xf7, 0x18, 0x26, - 0xfa, 0xee, 0x31, 0xbc, 0x0d, 0x53, 0x5e, 0xb0, 0x4b, 0x22, 0x2f, 0x21, 0x35, 0x36, 0x16, 0xc4, - 0x55, 0x8a, 0x2a, 0x87, 0x60, 0x25, 0x85, 0xc5, 0x19, 0xea, 0xb4, 0x51, 0x99, 0x1a, 0xc0, 0xa8, - 0xf4, 0x31, 0xe5, 0x67, 0xf2, 0x31, 0xe5, 0x67, 0x4f, 0x6e, 0xca, 0xa7, 0x4f, 0xd5, 0x94, 0xa3, - 0x5c, 0x4c, 0xf9, 0xcb, 0x50, 0x6a, 0x45, 0xe1, 0x41, 0x67, 0xe6, 0x5c, 0xda, 0x3d, 0xdb, 0xa4, - 0x40, 0xcc, 0x71, 0xe6, 0x72, 0xe1, 0xfc, 0xc3, 0x97, 0x0b, 0xf6, 0xe7, 0x0b, 0x70, 0x41, 0x5b, - 0x3a, 0xda, 0xbf, 0xbc, 0x3a, 0x1d, 0xeb, 0xac, 0x58, 0x1f, 0x0f, 0x44, 0x1b, 0xe9, 0x2b, 0x3a, - 0x13, 0x46, 0x61, 0xb0, 0x41, 0xc5, 0xb2, 0x40, 0x48, 0xc4, 0xaa, 0x33, 0x64, 0xcd, 0xe0, 0xa2, - 0x80, 0x63, 0x45, 0xc1, 0x6e, 0x0c, 0x27, 0x51, 0x22, 0x32, 0xeb, 0xb2, 0x27, 0x36, 0x17, 0x35, - 0x0a, 0x9b, 0x74, 0xe8, 0x15, 0x2e, 0x84, 0x0d, 0x41, 0x6a, 0x0a, 0x27, 0x44, 0x9d, 0x69, 0x39, - 0xea, 0x14, 0x56, 0xaa, 0xc3, 0xd2, 0x7d, 0x4a, 0xdd, 0xea, 0xb0, 0xe0, 0x89, 0xa2, 0xb0, 0xff, - 0xaf, 0x05, 0xcf, 0xf7, 0x6c, 0x8a, 0xc7, 0x30, 0xbd, 0x1d, 0xa4, 0xa7, 0xb7, 0xad, 0x93, 0x4f, - 0x6f, 0x5d, 0x6f, 0xd1, 0x67, 0xaa, 0xfb, 0x8f, 0x16, 0x4c, 0x69, 0xfa, 0xc7, 0xf0, 0xaa, 0x5e, - 0xae, 0x77, 0x7f, 0x6b, 0xd5, 0xf9, 0xce, 0x55, 0xea, 0xdd, 0xfe, 0x80, 0xbd, 0x1b, 0xdf, 0x83, - 0x5e, 0x70, 0xe5, 0x3d, 0x95, 0xc7, 0xec, 0xbd, 0x76, 0x60, 0x94, 0x55, 0x75, 0x8d, 0xf3, 0xd9, - 0x0b, 0x4f, 0xcb, 0x67, 0x79, 0x7c, 0x7a, 0x2f, 0x9c, 0xfd, 0x8d, 0xb1, 0x10, 0xc8, 0x6a, 0x87, - 0x78, 0x31, 0xb5, 0x97, 0x35, 0x91, 0x38, 0xa3, 0x6b, 0x87, 0x08, 0x38, 0x56, 0x14, 0x76, 0x13, - 0x66, 0xd2, 0xcc, 0x97, 0x48, 0x9d, 0x85, 0x1c, 0x07, 0x7a, 0xcd, 0x79, 0xa8, 0x38, 0xec, 0xa9, - 0xd5, 0xb6, 0x93, 0xbd, 0x9a, 0x60, 0x41, 0x22, 0xb0, 0xa6, 0xb1, 0x7f, 0xd3, 0x82, 0x73, 0x3d, - 0x5e, 0x26, 0xc7, 0x84, 0xa1, 0x44, 0x5b, 0x81, 0x3e, 0x17, 0x88, 0xd6, 0x48, 0xdd, 0x91, 0x41, - 0x2d, 0xc3, 0xaa, 0x2d, 0x71, 0x30, 0x96, 0x78, 0xfb, 0x7f, 0x59, 0x70, 0x26, 0xad, 0x6b, 0x8c, - 0x6e, 0x00, 0xe2, 0x2f, 0xb3, 0xe4, 0xc5, 0x6e, 0xb8, 0x4f, 0xa2, 0x0e, 0x7d, 0x73, 0xae, 0xf5, - 0x45, 0xc1, 0x09, 0x2d, 0x74, 0x51, 0xe0, 0x1e, 0x4f, 0xb1, 0xda, 0x06, 0x35, 0xd5, 0xda, 0xb2, - 0xa7, 0xdc, 0xce, 0xb3, 0xa7, 0xe8, 0x8f, 0x69, 0x6e, 0xfc, 0x2b, 0x91, 0xd8, 0x94, 0x6f, 0x7f, - 0x6f, 0x04, 0x54, 0x46, 0x21, 0x0b, 0x9f, 0xe4, 0x14, 0x7c, 0x4a, 0xdd, 0x5f, 0x51, 0x1c, 0xe2, - 0x46, 0xd3, 0x91, 0x87, 0x85, 0x36, 0x78, 0x29, 0x75, 0x73, 0x93, 0x47, 0xbd, 0xe1, 0xb6, 0x46, - 0x61, 0x93, 0x8e, 0x6a, 0xe2, 0x7b, 0xfb, 0x84, 0x3f, 0x34, 0x9a, 0xd6, 0x64, 0x55, 0x22, 0xb0, - 0xa6, 0xa1, 0x9a, 0xd4, 0xbc, 0x7a, 0x5d, 0xac, 0x14, 0x95, 0x26, 0xb4, 0x75, 0x30, 0xc3, 0x50, - 0x8a, 0xdd, 0x30, 0xdc, 0x13, 0xfe, 0x9f, 0xa2, 0xb8, 0x1e, 0x86, 0x7b, 0x98, 0x61, 0xa8, 0xc7, - 0x12, 0x84, 0x51, 0x93, 0x5d, 0x1d, 0x51, 0x53, 0x52, 0x84, 0xdf, 0xa7, 0x3c, 0x96, 0xf5, 0x6e, - 0x12, 0xdc, 0xeb, 0x39, 0xda, 0x03, 0x5b, 0x11, 0xa9, 0x79, 0x6e, 0x62, 0x72, 0x83, 0x74, 0x0f, - 0xdc, 0xec, 0xa2, 0xc0, 0x3d, 0x9e, 0x42, 0x0b, 0x70, 0x46, 0x66, 0x84, 0xca, 0x13, 0x2f, 0xdc, - 0x19, 0x54, 0x7e, 0x38, 0x4e, 0xa3, 0x71, 0x96, 0x9e, 0x5a, 0x9b, 0xa6, 0x38, 0xec, 0xc6, 0xdc, - 0x44, 0xc3, 0xda, 0xc8, 0x43, 0x70, 0x58, 0x51, 0xd8, 0x9f, 0x2d, 0xd2, 0xd9, 0xb1, 0x4f, 0xc1, - 0xc6, 0xc7, 0x16, 0xec, 0x4c, 0xf7, 0xc8, 0x91, 0x01, 0x7a, 0xe4, 0x1b, 0x30, 0x71, 0x37, 0x0e, - 0x03, 0x15, 0x48, 0x2c, 0xf5, 0x0d, 0x24, 0x1a, 0x54, 0xbd, 0x03, 0x89, 0xa3, 0x79, 0x05, 0x12, - 0xc7, 0x1e, 0x31, 0x90, 0xf8, 0x6f, 0x4b, 0xa0, 0xca, 0xad, 0xad, 0x93, 0xe4, 0x7e, 0x18, 0xed, - 0x79, 0x41, 0x83, 0x65, 0xd2, 0x7e, 0xc3, 0x82, 0x09, 0x3e, 0x5e, 0x44, 0xad, 0x5c, 0x9e, 0x25, - 0x54, 0xcf, 0xa9, 0xc4, 0x58, 0x4a, 0xd8, 0xdc, 0xb6, 0x21, 0x28, 0x53, 0xb8, 0xd8, 0x44, 0xe1, - 0x94, 0x46, 0xe8, 0x67, 0x01, 0xe4, 0x25, 0x0a, 0xf5, 0x9c, 0xae, 0x17, 0x56, 0x57, 0x5a, 0x90, - 0xba, 0xf6, 0x4d, 0xb7, 0x95, 0x10, 0x6c, 0x08, 0x44, 0x9f, 0xcf, 0x5e, 0xad, 0xf3, 0xe9, 0x53, - 0x69, 0x9b, 0x41, 0x4a, 0xe3, 0x60, 0x18, 0xf3, 0x82, 0x06, 0xed, 0x27, 0x22, 0xf6, 0xfa, 0xc1, - 0x5e, 0x59, 0xe8, 0xab, 0xa1, 0x53, 0xab, 0x3a, 0xbe, 0x13, 0xb8, 0x24, 0x5a, 0xe1, 0xe4, 0x66, - 0x25, 0x7d, 0x06, 0xc0, 0x92, 0x51, 0x57, 0x0d, 0xbd, 0xd2, 0x20, 0x35, 0xf4, 0x2e, 0x7e, 0x14, - 0xa6, 0xbb, 0x3e, 0xe6, 0x50, 0xa5, 0x71, 0x1e, 0xbd, 0xaa, 0x8e, 0xfd, 0xaf, 0x46, 0xf5, 0xa4, - 0xb5, 0x1e, 0xd6, 0x78, 0x25, 0xb7, 0x48, 0x7f, 0x51, 0xe1, 0x7b, 0xe6, 0xd8, 0x45, 0x8c, 0x6a, - 0xfc, 0x0a, 0x88, 0x4d, 0x91, 0xb4, 0x8f, 0xb6, 0x9c, 0x88, 0x04, 0xa7, 0xdd, 0x47, 0x37, 0x95, - 0x10, 0x6c, 0x08, 0x44, 0xbb, 0xa9, 0x2c, 0xb1, 0x6b, 0x27, 0xcf, 0x12, 0x63, 0x27, 0xd4, 0x7a, - 0x95, 0xaa, 0xfa, 0xaa, 0x05, 0x53, 0x41, 0xaa, 0xe7, 0x8a, 0x7d, 0xf8, 0xed, 0xd3, 0x18, 0x15, - 0xbc, 0x5a, 0x67, 0x1a, 0x86, 0x33, 0xf2, 0x7b, 0x4d, 0x69, 0xa5, 0x21, 0xa7, 0x34, 0x5d, 0x12, - 0x72, 0xb4, 0x5f, 0x49, 0x48, 0x14, 0xa8, 0xc2, 0xb3, 0x63, 0xb9, 0x17, 0x9e, 0x85, 0x1e, 0x45, - 0x67, 0xef, 0x40, 0xc5, 0x8d, 0x88, 0x93, 0x3c, 0x62, 0x0d, 0x52, 0x16, 0x84, 0x5c, 0x94, 0x0c, - 0xb0, 0xe6, 0x65, 0xff, 0x87, 0x22, 0x9c, 0x95, 0x2d, 0x22, 0x33, 0x68, 0xe8, 0xfc, 0xc8, 0xe5, - 0x6a, 0xe7, 0x56, 0xcd, 0x8f, 0xd7, 0x25, 0x02, 0x6b, 0x1a, 0xea, 0x8f, 0xb5, 0x63, 0xb2, 0xd1, - 0x22, 0xc1, 0xaa, 0xb7, 0x13, 0x8b, 0xf8, 0x91, 0x1a, 0x28, 0xb7, 0x34, 0x0a, 0x9b, 0x74, 0xd4, - 0x19, 0xe7, 0x7e, 0x71, 0x9c, 0x4d, 0x48, 0x13, 0xfe, 0x36, 0x96, 0x78, 0xf4, 0xab, 0x3d, 0x2b, - 0x48, 0xe7, 0x93, 0x8a, 0xd9, 0x95, 0x38, 0x34, 0x64, 0xe9, 0xe8, 0xaf, 0x58, 0x70, 0x66, 0x2f, - 0x75, 0x0a, 0x41, 0x9a, 0xe4, 0x13, 0x9e, 0x97, 0x4b, 0x1f, 0x6d, 0xd0, 0x5d, 0x38, 0x0d, 0x8f, - 0x71, 0x56, 0xba, 0xfd, 0x7f, 0x2c, 0x30, 0xcd, 0xd3, 0x60, 0x9e, 0x95, 0x71, 0x27, 0x40, 0xe1, - 0x98, 0x3b, 0x01, 0xa4, 0x13, 0x56, 0x1c, 0xcc, 0xe9, 0x1f, 0x19, 0xc2, 0xe9, 0x2f, 0xf5, 0xf5, - 0xda, 0x5e, 0x82, 0x62, 0xdb, 0xab, 0x09, 0xbf, 0x5d, 0x07, 0xc3, 0x56, 0x96, 0x30, 0x85, 0xdb, - 0xff, 0xbc, 0xa4, 0xd7, 0xe9, 0x22, 0x83, 0xf0, 0x07, 0xe2, 0xb5, 0xeb, 0xea, 0xf8, 0x23, 0x7f, - 0xf3, 0xf5, 0xae, 0xe3, 0x8f, 0x3f, 0x36, 0x7c, 0x82, 0x28, 0x6f, 0xa0, 0x7e, 0xa7, 0x1f, 0xc7, - 0x8e, 0xc9, 0x0e, 0xbd, 0x0b, 0x65, 0xba, 0xb4, 0x61, 0x1b, 0x6e, 0xe5, 0x94, 0x52, 0xe5, 0xeb, - 0x02, 0xfe, 0xe0, 0x70, 0xf6, 0x47, 0x87, 0x57, 0x4b, 0x3e, 0x8d, 0x15, 0x7f, 0x14, 0x43, 0x85, - 0xfe, 0x66, 0x89, 0xac, 0x62, 0xd1, 0x74, 0x4b, 0xd9, 0x22, 0x89, 0xc8, 0x25, 0x4b, 0x56, 0xcb, - 0x41, 0x01, 0x54, 0x58, 0xf5, 0x7a, 0x26, 0x94, 0xaf, 0xad, 0x36, 0x55, 0x3a, 0xa9, 0x44, 0x3c, - 0x38, 0x9c, 0x7d, 0x6b, 0x78, 0xa1, 0xea, 0x71, 0xac, 0x45, 0xd8, 0xff, 0xad, 0xa8, 0xfb, 0xae, - 0x38, 0xf5, 0xfa, 0x03, 0xd1, 0x77, 0xdf, 0xcc, 0xf4, 0xdd, 0xcb, 0x5d, 0x7d, 0x77, 0x4a, 0x57, - 0x78, 0x4f, 0xf5, 0xc6, 0xc7, 0x3d, 0xc1, 0x1e, 0xbf, 0x8e, 0x67, 0x9e, 0xc5, 0xbd, 0xb6, 0x17, - 0x91, 0x78, 0x33, 0x6a, 0x07, 0x5e, 0xd0, 0x10, 0xf7, 0xfc, 0x18, 0x9e, 0x45, 0x0a, 0x8d, 0xb3, - 0xf4, 0xf6, 0xb7, 0x58, 0xbc, 0xd3, 0xc8, 0x89, 0xa7, 0x5f, 0xd9, 0x67, 0x17, 0x00, 0xf0, 0x73, - 0x81, 0xea, 0x2b, 0xf3, 0xaa, 0xff, 0x1c, 0x87, 0xee, 0xc3, 0xd8, 0x0e, 0x2f, 0x0c, 0x9c, 0x4f, - 0x15, 0x20, 0x51, 0x65, 0x98, 0x15, 0xcb, 0x93, 0x25, 0x87, 0x1f, 0xe8, 0x9f, 0x58, 0x4a, 0xb3, - 0xff, 0x6e, 0x11, 0xce, 0x64, 0xca, 0xd3, 0xa7, 0x6a, 0x12, 0x14, 0x8e, 0xad, 0x49, 0xf0, 0x49, - 0x80, 0x1a, 0x69, 0xf9, 0x61, 0x87, 0x39, 0x2e, 0x23, 0x43, 0x3b, 0x2e, 0xca, 0xd7, 0x5d, 0x52, - 0x5c, 0xb0, 0xc1, 0x51, 0x1c, 0x86, 0xe4, 0x25, 0x0e, 0x32, 0x87, 0x21, 0x8d, 0x62, 0x58, 0xa3, - 0x8f, 0xb7, 0x18, 0x96, 0x07, 0x67, 0xb8, 0x8a, 0x2a, 0xf3, 0xfc, 0x11, 0x12, 0xcc, 0x59, 0xce, - 0xe2, 0x52, 0x9a, 0x0d, 0xce, 0xf2, 0xb5, 0xbf, 0x5c, 0xa0, 0xee, 0x1b, 0x6f, 0xec, 0x35, 0xb9, - 0x39, 0xfe, 0x01, 0x18, 0x75, 0xda, 0xc9, 0x6e, 0xd8, 0x55, 0xe1, 0x78, 0x81, 0x41, 0xb1, 0xc0, - 0xa2, 0x55, 0x18, 0xa9, 0xe9, 0x03, 0x6b, 0xc3, 0x28, 0xa7, 0x77, 0xc2, 0x9c, 0x84, 0x60, 0xc6, - 0x05, 0xbd, 0x08, 0x23, 0x89, 0xd3, 0x48, 0x5d, 0xea, 0xb4, 0xed, 0x34, 0x62, 0xcc, 0xa0, 0xe6, - 0xec, 0x32, 0x72, 0xcc, 0xec, 0xf2, 0x16, 0x4c, 0xc6, 0x5e, 0x23, 0x70, 0x92, 0x76, 0x44, 0x8c, - 0xa8, 0x8b, 0x0e, 0x55, 0x9b, 0x48, 0x9c, 0xa6, 0xb5, 0xbf, 0x57, 0x81, 0xf3, 0xbd, 0x6e, 0xd7, - 0xcc, 0x3b, 0xed, 0xb7, 0x97, 0x8c, 0xc7, 0x97, 0xf6, 0xdb, 0x47, 0xba, 0x6f, 0xa4, 0xfd, 0xfa, - 0x46, 0xda, 0xef, 0xe7, 0x2d, 0xa8, 0xa8, 0x6c, 0x57, 0x91, 0xb1, 0xf7, 0xf1, 0x53, 0xb8, 0xc1, - 0x54, 0x8a, 0x10, 0x49, 0x8f, 0xf2, 0x2f, 0xd6, 0xc2, 0x4f, 0x2f, 0x0f, 0xf8, 0xa1, 0x0a, 0x0d, - 0x95, 0x07, 0xac, 0x92, 0xa4, 0x4b, 0x79, 0x24, 0x49, 0xf7, 0xf9, 0x54, 0x3d, 0x93, 0xa4, 0xbf, - 0x6a, 0xc1, 0xb8, 0xf3, 0x5e, 0x3b, 0x22, 0x4b, 0x64, 0x7f, 0xa3, 0x15, 0x0b, 0xbb, 0xf5, 0x89, - 0xfc, 0x15, 0x58, 0xd0, 0x42, 0x44, 0x29, 0x46, 0x0d, 0xc0, 0xa6, 0x0a, 0xa9, 0xa4, 0xe8, 0xb1, - 0x3c, 0x92, 0xa2, 0x7b, 0xa9, 0x73, 0x6c, 0x52, 0xf4, 0x5b, 0x30, 0xe9, 0xfa, 0x61, 0x40, 0x36, - 0xa3, 0x30, 0x09, 0xdd, 0xd0, 0x17, 0x5e, 0xa7, 0x32, 0x09, 0x8b, 0x26, 0x12, 0xa7, 0x69, 0xfb, - 0x65, 0x54, 0x57, 0x4e, 0x9a, 0x51, 0x0d, 0x4f, 0x28, 0xa3, 0xfa, 0x4f, 0x0a, 0x30, 0x7b, 0xcc, - 0x47, 0x45, 0x6f, 0xc2, 0x44, 0x18, 0x35, 0x9c, 0xc0, 0x7b, 0x8f, 0x1f, 0x68, 0x2b, 0xa5, 0x4f, - 0xaa, 0x6f, 0x18, 0x38, 0x9c, 0xa2, 0x94, 0x39, 0x97, 0xa3, 0x7d, 0x72, 0x2e, 0x3f, 0x0c, 0xe3, - 0x09, 0x71, 0x9a, 0x22, 0x05, 0x40, 0xac, 0x14, 0x74, 0xe4, 0x45, 0xa3, 0xb0, 0x49, 0x47, 0xbb, - 0xd1, 0x94, 0xe3, 0xba, 0x24, 0x8e, 0x65, 0x52, 0xa5, 0xd8, 0xc5, 0xc8, 0x2d, 0x63, 0x93, 0x6d, - 0x0e, 0x2d, 0xa4, 0x44, 0xe0, 0x8c, 0x48, 0xaa, 0xbc, 0xe3, 0xfb, 0x3c, 0x7f, 0x9a, 0xc8, 0x6b, - 0x1a, 0x75, 0xd1, 0x6f, 0x8d, 0xc2, 0x26, 0x9d, 0xfd, 0x6b, 0x05, 0x78, 0xe9, 0xa1, 0xe6, 0x65, - 0xe0, 0x7c, 0xd7, 0x76, 0x4c, 0xa2, 0x6c, 0xe4, 0xe2, 0x56, 0x4c, 0x22, 0xcc, 0x30, 0xbc, 0x95, - 0x5a, 0x2d, 0xe3, 0x1a, 0x83, 0xbc, 0xd3, 0xab, 0x79, 0x2b, 0xa5, 0x44, 0xe0, 0x8c, 0xc8, 0x6c, - 0x2b, 0x8d, 0x0c, 0xd8, 0x4a, 0xff, 0xb0, 0x00, 0x2f, 0x0f, 0x60, 0x84, 0x73, 0x4c, 0x43, 0x4f, - 0xa7, 0xf1, 0x17, 0x9f, 0x4c, 0x1a, 0xff, 0xa3, 0x36, 0xd7, 0xb7, 0x0a, 0x70, 0xb1, 0xbf, 0x2d, - 0x44, 0x3f, 0x4e, 0x57, 0x1b, 0x32, 0x2b, 0xc1, 0x3c, 0x02, 0x70, 0x8e, 0xaf, 0x34, 0x52, 0x28, - 0x9c, 0xa5, 0x45, 0x73, 0x00, 0x2d, 0x27, 0xd9, 0x8d, 0xaf, 0x1e, 0x78, 0x71, 0x22, 0x0e, 0xaf, - 0x4d, 0xf1, 0x3d, 0x63, 0x09, 0xc5, 0x06, 0x05, 0x15, 0xc7, 0xfe, 0x2d, 0x85, 0xeb, 0x61, 0xc2, - 0x1f, 0xe2, 0x7e, 0xdc, 0x39, 0x7e, 0xaf, 0x6a, 0x0a, 0x85, 0xb3, 0xb4, 0x54, 0x1c, 0x8b, 0x4a, - 0x70, 0x45, 0xc5, 0x1d, 0xb4, 0x54, 0xdc, 0xaa, 0x82, 0x62, 0x83, 0x22, 0x7b, 0xb8, 0xa1, 0x34, - 0xc0, 0xe1, 0x86, 0x7f, 0x5a, 0x80, 0xe7, 0xfb, 0xce, 0xa5, 0x83, 0x0d, 0xc0, 0xa7, 0xef, 0x54, - 0xc3, 0xa3, 0xf5, 0x9d, 0x21, 0x73, 0xf5, 0xff, 0x73, 0x9f, 0x9e, 0x26, 0x72, 0xf5, 0xb3, 0x53, - 0x85, 0x35, 0xec, 0x54, 0xf1, 0x14, 0xb5, 0x67, 0x57, 0x7a, 0xfe, 0xc8, 0x10, 0xe9, 0xf9, 0x99, - 0x8f, 0x51, 0x1a, 0x70, 0x20, 0x7f, 0xa7, 0x7f, 0xf3, 0x52, 0xdf, 0x7b, 0xa0, 0x7d, 0x9c, 0x25, - 0x38, 0x2b, 0x2e, 0xb3, 0xde, 0x6a, 0xef, 0x88, 0xa3, 0x8d, 0x85, 0xf4, 0x95, 0x1e, 0x2b, 0x19, - 0x3c, 0xee, 0x7a, 0xe2, 0x29, 0x3c, 0x2e, 0xf1, 0x88, 0x4d, 0xfa, 0x49, 0xa8, 0x28, 0xde, 0x3c, - 0x85, 0x50, 0x7d, 0xd0, 0xae, 0x14, 0x42, 0xf5, 0x35, 0x0d, 0x2a, 0xda, 0x12, 0x7b, 0xa4, 0x93, - 0xed, 0x99, 0x37, 0x49, 0x87, 0x85, 0x13, 0xed, 0x1f, 0x81, 0x09, 0xb5, 0x88, 0x1c, 0xb4, 0xac, - 0xa0, 0xfd, 0x3f, 0x47, 0x60, 0x32, 0x75, 0x84, 0x3d, 0xb5, 0x15, 0x62, 0x1d, 0xbb, 0x15, 0xc2, - 0x92, 0x2e, 0xdb, 0x81, 0xac, 0xba, 0x69, 0x24, 0x5d, 0xb6, 0x03, 0x82, 0x39, 0x8e, 0x2e, 0xdd, - 0x6b, 0x51, 0x07, 0xb7, 0x03, 0x91, 0xba, 0xa5, 0x96, 0xee, 0x4b, 0x0c, 0x8a, 0x05, 0x16, 0x7d, - 0xc6, 0x82, 0x89, 0x98, 0xed, 0x9c, 0xf1, 0x8d, 0x24, 0xf1, 0x41, 0x6f, 0xe4, 0x71, 0xdb, 0xa2, - 0x28, 0xd7, 0xc0, 0xa2, 0xbe, 0x26, 0x04, 0xa7, 0x24, 0xa2, 0x5f, 0xb4, 0xcc, 0x7b, 0x26, 0x47, - 0xf3, 0x48, 0x39, 0xcc, 0x56, 0x08, 0xe0, 0xdb, 0x2c, 0x0f, 0xbf, 0x6e, 0x32, 0x56, 0xbb, 0x3c, - 0x63, 0xa7, 0xb3, 0xcb, 0x03, 0x3d, 0x76, 0x78, 0x3e, 0x04, 0x95, 0xa6, 0x13, 0x78, 0x75, 0x12, - 0x27, 0xf1, 0x4c, 0xd9, 0x28, 0x5c, 0x22, 0x81, 0x58, 0xe3, 0xe9, 0x64, 0x17, 0xb3, 0x17, 0xe3, - 0x91, 0xae, 0x8a, 0x2e, 0x80, 0xbf, 0xa5, 0xc1, 0xd8, 0xa4, 0xb1, 0xff, 0x89, 0x05, 0x17, 0x7a, - 0x36, 0xc6, 0xd3, 0x9b, 0x23, 0x43, 0x27, 0xe8, 0x73, 0x3d, 0x4a, 0x3c, 0xa0, 0xce, 0xa9, 0x5d, - 0x47, 0x2a, 0x6a, 0x48, 0x4c, 0xf6, 0xed, 0x1b, 0xc3, 0xed, 0x55, 0xea, 0xfd, 0xc2, 0xe2, 0x63, - 0xdd, 0x2f, 0xa4, 0xae, 0xa0, 0x71, 0x71, 0x2e, 0xfa, 0x39, 0xb3, 0x9a, 0x89, 0x95, 0x57, 0xe5, - 0x0d, 0xce, 0x5c, 0x55, 0x43, 0xe1, 0xad, 0xd6, 0xab, 0x38, 0x4a, 0xb6, 0xbf, 0x16, 0x8e, 0xef, - 0xaf, 0xc8, 0x97, 0x65, 0x63, 0x8a, 0xf9, 0x97, 0x8d, 0xa9, 0x74, 0x95, 0x8c, 0xf9, 0xdb, 0x16, - 0xef, 0x69, 0x99, 0x57, 0xd2, 0x16, 0xd6, 0x7a, 0x88, 0x85, 0x7d, 0x95, 0x5d, 0xf0, 0x52, 0xbf, - 0x4e, 0x1c, 0x5f, 0x58, 0x62, 0xf3, 0xae, 0x16, 0x06, 0xc7, 0x8a, 0x82, 0x95, 0x83, 0xf6, 0xfd, - 0xf0, 0xfe, 0xd5, 0x66, 0x2b, 0xe9, 0x08, 0x9b, 0xac, 0xcb, 0x41, 0x2b, 0x0c, 0x36, 0xa8, 0xec, - 0x3f, 0xb5, 0xf8, 0xe7, 0x14, 0x81, 0x9c, 0x37, 0x33, 0xe5, 0x4b, 0x07, 0x8f, 0x81, 0xfc, 0x0c, - 0x80, 0xab, 0xee, 0x76, 0xc8, 0xe7, 0x3e, 0x5d, 0x7d, 0x57, 0x84, 0x79, 0xc9, 0xab, 0x84, 0x61, - 0x43, 0x5e, 0x6a, 0xf0, 0x14, 0x8f, 0x1b, 0x3c, 0xf6, 0x9f, 0x58, 0x90, 0x9a, 0x2c, 0x50, 0x0b, - 0x4a, 0x54, 0x83, 0x4e, 0x3e, 0x37, 0x51, 0x98, 0xac, 0xe9, 0xc0, 0x12, 0xdd, 0x82, 0xfd, 0xc4, - 0x5c, 0x10, 0xf2, 0x45, 0x08, 0xa7, 0x90, 0xc7, 0x6d, 0x29, 0xa6, 0xc0, 0xeb, 0x61, 0xb8, 0xc7, - 0x37, 0xb4, 0x75, 0x38, 0xc8, 0x7e, 0x13, 0xa6, 0xbb, 0x94, 0x62, 0xc5, 0x07, 0x43, 0x79, 0xfd, - 0x86, 0xd1, 0x03, 0x59, 0x29, 0x54, 0xcc, 0x71, 0xf6, 0xb7, 0x2c, 0x38, 0x9b, 0x65, 0x8f, 0xbe, - 0x6e, 0xc1, 0x74, 0x9c, 0xe5, 0x77, 0x5a, 0x6d, 0xa7, 0xd2, 0x1b, 0xba, 0x50, 0xb8, 0x5b, 0x09, - 0xfb, 0xff, 0x0b, 0xf3, 0x74, 0xc7, 0x0b, 0x6a, 0xe1, 0x7d, 0x35, 0xb9, 0x58, 0x7d, 0x27, 0x17, - 0x3a, 0xc4, 0xdc, 0x5d, 0x52, 0x6b, 0xfb, 0x5d, 0x07, 0x38, 0xb6, 0x04, 0x1c, 0x2b, 0x8a, 0xd4, - 0x5d, 0x97, 0xc5, 0x63, 0xef, 0xba, 0x7c, 0x03, 0x26, 0xcc, 0x2b, 0x66, 0xc4, 0x69, 0x70, 0xe6, - 0xab, 0x98, 0xb7, 0xd1, 0xe0, 0x14, 0x55, 0xe6, 0x92, 0xc1, 0xd2, 0xb1, 0x97, 0x0c, 0xbe, 0x02, - 0x65, 0x71, 0x61, 0x9e, 0x4c, 0x02, 0xe2, 0xa7, 0x43, 0x04, 0x0c, 0x2b, 0x2c, 0x35, 0x10, 0x4d, - 0x27, 0x68, 0x3b, 0x3e, 0x6d, 0x21, 0x71, 0x68, 0x4c, 0x8d, 0xac, 0x35, 0x85, 0xc1, 0x06, 0x15, - 0x7d, 0xe3, 0xc4, 0x6b, 0x92, 0x77, 0xc3, 0x40, 0x86, 0xcf, 0xf5, 0x76, 0x9f, 0x80, 0x63, 0x45, - 0x61, 0xff, 0x0f, 0x0b, 0xb2, 0xb7, 0x7d, 0xa5, 0x16, 0x80, 0xd6, 0xb1, 0x07, 0xd5, 0xd2, 0x87, - 0x70, 0x0a, 0x03, 0x1d, 0xc2, 0x31, 0xcf, 0xc7, 0x14, 0x1f, 0x7a, 0x3e, 0xe6, 0x87, 0x74, 0x09, - 0x6b, 0x7e, 0x90, 0x66, 0xbc, 0x57, 0xf9, 0x6a, 0x64, 0xc3, 0xa8, 0xeb, 0xa8, 0x73, 0xc0, 0x13, - 0xdc, 0xad, 0x5a, 0x5c, 0x60, 0x44, 0x02, 0x53, 0xdd, 0xf9, 0xf6, 0xf7, 0x2f, 0x3d, 0xf3, 0x9d, - 0xef, 0x5f, 0x7a, 0xe6, 0xf7, 0xbf, 0x7f, 0xe9, 0x99, 0xcf, 0x1c, 0x5d, 0xb2, 0xbe, 0x7d, 0x74, - 0xc9, 0xfa, 0xce, 0xd1, 0x25, 0xeb, 0xf7, 0x8f, 0x2e, 0x59, 0xdf, 0x3b, 0xba, 0x64, 0x7d, 0xf5, - 0xbf, 0x5e, 0x7a, 0xe6, 0xdd, 0x9e, 0xe9, 0x0e, 0xf4, 0xc7, 0x6b, 0x6e, 0x6d, 0x7e, 0xff, 0x0a, - 0x8b, 0xb8, 0xd3, 0xd1, 0x30, 0x6f, 0x74, 0x81, 0x79, 0x39, 0x1a, 0xfe, 0x3c, 0x00, 0x00, 0xff, - 0xff, 0x3f, 0xca, 0xc8, 0x75, 0x3b, 0xb2, 0x00, 0x00, + // 9260 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x1c, 0xc9, + 0x75, 0xd8, 0xcd, 0x2e, 0x16, 0xd8, 0x7d, 0xf8, 0x20, 0xd1, 0x24, 0xef, 0x70, 0xbc, 0x3b, 0x82, + 0x35, 0x57, 0x96, 0xce, 0xd1, 0x1d, 0x90, 0xa3, 0x4e, 0x0a, 0xe3, 0xb3, 0x4f, 0xc6, 0x02, 0x24, + 0x08, 0x12, 0x20, 0x70, 0x0d, 0x90, 0x94, 0x4e, 0x3e, 0x49, 0x83, 0xd9, 0xde, 0xc5, 0x10, 0xb3, + 0x33, 0x7b, 0x33, 0xb3, 0x20, 0xf6, 0x2c, 0xcb, 0x92, 0x6c, 0xc7, 0x4a, 0xe9, 0x33, 0x96, 0xab, + 0x22, 0x57, 0x12, 0x47, 0xb1, 0x5d, 0xae, 0xb8, 0x12, 0x55, 0x92, 0x5f, 0xf9, 0xaa, 0xfc, 0xb0, + 0x9d, 0x1f, 0x4a, 0x39, 0x55, 0x51, 0x55, 0x5c, 0x96, 0x1d, 0x27, 0xb0, 0x84, 0x24, 0xe5, 0xc4, + 0x55, 0x71, 0x2a, 0x8e, 0xff, 0x84, 0x95, 0x1f, 0xae, 0xfe, 0xee, 0x99, 0xdd, 0x25, 0x76, 0x89, + 0x01, 0x49, 0xab, 0xee, 0xdf, 0x6e, 0xbf, 0x37, 0xef, 0xf5, 0xf4, 0x74, 0xbf, 0x7e, 0xaf, 0xdf, + 0x47, 0xc3, 0x6a, 0xc3, 0x4b, 0x76, 0xda, 0xdb, 0x73, 0x6e, 0xd8, 0x9c, 0x77, 0xa2, 0x46, 0xd8, + 0x8a, 0xc2, 0xbb, 0xec, 0xc7, 0x2b, 0x6e, 0x6d, 0x7e, 0xef, 0xd2, 0x7c, 0x6b, 0xb7, 0x31, 0xef, + 0xb4, 0xbc, 0x78, 0xde, 0x69, 0xb5, 0x7c, 0xcf, 0x75, 0x12, 0x2f, 0x0c, 0xe6, 0xf7, 0x5e, 0x75, + 0xfc, 0xd6, 0x8e, 0xf3, 0xea, 0x7c, 0x83, 0x04, 0x24, 0x72, 0x12, 0x52, 0x9b, 0x6b, 0x45, 0x61, + 0x12, 0xa2, 0x1f, 0xd5, 0xd4, 0xe6, 0x24, 0x35, 0xf6, 0xe3, 0x93, 0x6e, 0x6d, 0x6e, 0xef, 0xd2, + 0x5c, 0x6b, 0xb7, 0x31, 0x47, 0xa9, 0xcd, 0x19, 0xd4, 0xe6, 0x24, 0xb5, 0xf3, 0xaf, 0x18, 0x7d, + 0x69, 0x84, 0x8d, 0x70, 0x9e, 0x11, 0xdd, 0x6e, 0xd7, 0xd9, 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0xcc, + 0xce, 0xdb, 0xbb, 0x97, 0xe3, 0x39, 0x2f, 0xa4, 0xdd, 0x9b, 0x77, 0xc3, 0x88, 0xcc, 0xef, 0x75, + 0x75, 0xe8, 0xfc, 0x35, 0x8d, 0x43, 0xf6, 0x13, 0x12, 0xc4, 0x5e, 0x18, 0xc4, 0xaf, 0xd0, 0x2e, + 0x90, 0x68, 0x8f, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0xbd, 0x28, 0xbd, 0xa6, 0x29, 0x35, 0x1d, 0x77, + 0xc7, 0x0b, 0x48, 0xd4, 0xd1, 0x8f, 0x37, 0x49, 0xe2, 0xf4, 0x7a, 0x6a, 0xbe, 0xdf, 0x53, 0x51, + 0x3b, 0x48, 0xbc, 0x26, 0xe9, 0x7a, 0xe0, 0xc3, 0x47, 0x3d, 0x10, 0xbb, 0x3b, 0xa4, 0xe9, 0x74, + 0x3d, 0xf7, 0xc1, 0x7e, 0xcf, 0xb5, 0x13, 0xcf, 0x9f, 0xf7, 0x82, 0x24, 0x4e, 0xa2, 0xec, 0x43, + 0xf6, 0x3b, 0x30, 0xb9, 0x70, 0x67, 0x73, 0xa1, 0x9d, 0xec, 0x2c, 0x86, 0x41, 0xdd, 0x6b, 0xa0, + 0x0f, 0xc1, 0xb8, 0xeb, 0xb7, 0xe3, 0x84, 0x44, 0x37, 0x9d, 0x26, 0x99, 0xb1, 0x2e, 0x5a, 0x2f, + 0x55, 0xaa, 0x67, 0xbe, 0x7d, 0x30, 0xfb, 0xd4, 0xe1, 0xc1, 0xec, 0xf8, 0xa2, 0x06, 0x61, 0x13, + 0x0f, 0xfd, 0x30, 0x8c, 0x45, 0xa1, 0x4f, 0x16, 0xf0, 0xcd, 0x99, 0x02, 0x7b, 0xe4, 0x94, 0x78, + 0x64, 0x0c, 0xf3, 0x66, 0x2c, 0xe1, 0xf6, 0xef, 0x15, 0x00, 0x16, 0x5a, 0xad, 0x8d, 0x28, 0xbc, + 0x4b, 0xdc, 0x04, 0x7d, 0x0a, 0xca, 0x74, 0xe8, 0x6a, 0x4e, 0xe2, 0x30, 0x6e, 0xe3, 0x97, 0xfe, + 0xea, 0x1c, 0x7f, 0x93, 0x39, 0xf3, 0x4d, 0xf4, 0xc4, 0xa1, 0xd8, 0x73, 0x7b, 0xaf, 0xce, 0xad, + 0x6f, 0xd3, 0xe7, 0xd7, 0x48, 0xe2, 0x54, 0x91, 0x60, 0x06, 0xba, 0x0d, 0x2b, 0xaa, 0x28, 0x80, + 0x91, 0xb8, 0x45, 0x5c, 0xd6, 0xb1, 0xf1, 0x4b, 0xab, 0x73, 0xc7, 0x99, 0xa1, 0x73, 0xba, 0xe7, + 0x9b, 0x2d, 0xe2, 0x56, 0x27, 0x04, 0xe7, 0x11, 0xfa, 0x0f, 0x33, 0x3e, 0x68, 0x0f, 0x46, 0xe3, + 0xc4, 0x49, 0xda, 0xf1, 0x4c, 0x91, 0x71, 0xbc, 0x99, 0x1b, 0x47, 0x46, 0xb5, 0x3a, 0x25, 0x78, + 0x8e, 0xf2, 0xff, 0x58, 0x70, 0xb3, 0xff, 0x8b, 0x05, 0x53, 0x1a, 0x79, 0xd5, 0x8b, 0x13, 0xf4, + 0x13, 0x5d, 0x83, 0x3b, 0x37, 0xd8, 0xe0, 0xd2, 0xa7, 0xd9, 0xd0, 0x9e, 0x16, 0xcc, 0xca, 0xb2, + 0xc5, 0x18, 0xd8, 0x26, 0x94, 0xbc, 0x84, 0x34, 0xe3, 0x99, 0xc2, 0xc5, 0xe2, 0x4b, 0xe3, 0x97, + 0xae, 0xe5, 0xf5, 0x9e, 0xd5, 0x49, 0xc1, 0xb4, 0xb4, 0x42, 0xc9, 0x63, 0xce, 0xc5, 0xfe, 0x8d, + 0x09, 0xf3, 0xfd, 0xe8, 0x80, 0xa3, 0x57, 0x61, 0x3c, 0x0e, 0xdb, 0x91, 0x4b, 0x30, 0x69, 0x85, + 0xf1, 0x8c, 0x75, 0xb1, 0x48, 0xa7, 0x1e, 0x9d, 0xa9, 0x9b, 0xba, 0x19, 0x9b, 0x38, 0xe8, 0x2b, + 0x16, 0x4c, 0xd4, 0x48, 0x9c, 0x78, 0x01, 0xe3, 0x2f, 0x3b, 0xbf, 0x75, 0xec, 0xce, 0xcb, 0xc6, + 0x25, 0x4d, 0xbc, 0x7a, 0x56, 0xbc, 0xc8, 0x84, 0xd1, 0x18, 0xe3, 0x14, 0x7f, 0xba, 0xe2, 0x6a, + 0x24, 0x76, 0x23, 0xaf, 0x45, 0xff, 0xb3, 0x39, 0x63, 0xac, 0xb8, 0x25, 0x0d, 0xc2, 0x26, 0x1e, + 0x0a, 0xa0, 0x44, 0x57, 0x54, 0x3c, 0x33, 0xc2, 0xfa, 0xbf, 0x72, 0xbc, 0xfe, 0x8b, 0x41, 0xa5, + 0x8b, 0x55, 0x8f, 0x3e, 0xfd, 0x17, 0x63, 0xce, 0x06, 0x7d, 0xd9, 0x82, 0x19, 0xb1, 0xe2, 0x31, + 0xe1, 0x03, 0x7a, 0x67, 0xc7, 0x4b, 0x88, 0xef, 0xc5, 0xc9, 0x4c, 0x89, 0xf5, 0x61, 0x7e, 0xb0, + 0xb9, 0xb5, 0x1c, 0x85, 0xed, 0xd6, 0x0d, 0x2f, 0xa8, 0x55, 0x2f, 0x0a, 0x4e, 0x33, 0x8b, 0x7d, + 0x08, 0xe3, 0xbe, 0x2c, 0xd1, 0xd7, 0x2d, 0x38, 0x1f, 0x38, 0x4d, 0x12, 0xb7, 0x1c, 0xfa, 0x69, + 0x39, 0xb8, 0xea, 0x3b, 0xee, 0x2e, 0xeb, 0xd1, 0xe8, 0xc3, 0xf5, 0xc8, 0x16, 0x3d, 0x3a, 0x7f, + 0xb3, 0x2f, 0x69, 0xfc, 0x00, 0xb6, 0xe8, 0x57, 0x2d, 0x98, 0x0e, 0xa3, 0xd6, 0x8e, 0x13, 0x90, + 0x9a, 0x84, 0xc6, 0x33, 0x63, 0x6c, 0xe9, 0x7d, 0xe2, 0x78, 0x9f, 0x68, 0x3d, 0x4b, 0x76, 0x2d, + 0x0c, 0xbc, 0x24, 0x8c, 0x36, 0x49, 0x92, 0x78, 0x41, 0x23, 0xae, 0x9e, 0x3b, 0x3c, 0x98, 0x9d, + 0xee, 0xc2, 0xc2, 0xdd, 0xfd, 0x41, 0x3f, 0x09, 0xe3, 0x71, 0x27, 0x70, 0xef, 0x78, 0x41, 0x2d, + 0xbc, 0x17, 0xcf, 0x94, 0xf3, 0x58, 0xbe, 0x9b, 0x8a, 0xa0, 0x58, 0x80, 0x9a, 0x01, 0x36, 0xb9, + 0xf5, 0xfe, 0x70, 0x7a, 0x2a, 0x55, 0xf2, 0xfe, 0x70, 0x7a, 0x32, 0x3d, 0x80, 0x2d, 0xfa, 0x79, + 0x0b, 0x26, 0x63, 0xaf, 0x11, 0x38, 0x49, 0x3b, 0x22, 0x37, 0x48, 0x27, 0x9e, 0x01, 0xd6, 0x91, + 0xeb, 0xc7, 0x1c, 0x15, 0x83, 0x64, 0xf5, 0x9c, 0xe8, 0xe3, 0xa4, 0xd9, 0x1a, 0xe3, 0x34, 0xdf, + 0x5e, 0x0b, 0x4d, 0x4f, 0xeb, 0xf1, 0x7c, 0x17, 0x9a, 0x9e, 0xd4, 0x7d, 0x59, 0xa2, 0x1f, 0x87, + 0xd3, 0xbc, 0x49, 0x8d, 0x6c, 0x3c, 0x33, 0xc1, 0x04, 0xed, 0xd9, 0xc3, 0x83, 0xd9, 0xd3, 0x9b, + 0x19, 0x18, 0xee, 0xc2, 0x46, 0xef, 0xc0, 0x6c, 0x8b, 0x44, 0x4d, 0x2f, 0x59, 0x0f, 0xfc, 0x8e, + 0x14, 0xdf, 0x6e, 0xd8, 0x22, 0x35, 0xd1, 0x9d, 0x78, 0x66, 0xf2, 0xa2, 0xf5, 0x52, 0xb9, 0xfa, + 0x7e, 0xd1, 0xcd, 0xd9, 0x8d, 0x07, 0xa3, 0xe3, 0xa3, 0xe8, 0xd9, 0xff, 0xae, 0x00, 0xa7, 0xb3, + 0x1b, 0x27, 0xfa, 0x75, 0x0b, 0x4e, 0xdd, 0xbd, 0x97, 0x6c, 0x85, 0xbb, 0x24, 0x88, 0xab, 0x1d, + 0x2a, 0xde, 0xd8, 0x96, 0x31, 0x7e, 0xc9, 0xcd, 0x77, 0x8b, 0x9e, 0xbb, 0x9e, 0xe6, 0x72, 0x25, + 0x48, 0xa2, 0x4e, 0xf5, 0x19, 0xf1, 0x76, 0xa7, 0xae, 0xdf, 0xd9, 0x32, 0xa1, 0x38, 0xdb, 0xa9, + 0xf3, 0x5f, 0xb4, 0xe0, 0x6c, 0x2f, 0x12, 0xe8, 0x34, 0x14, 0x77, 0x49, 0x87, 0x6b, 0x65, 0x98, + 0xfe, 0x44, 0x6f, 0x43, 0x69, 0xcf, 0xf1, 0xdb, 0x44, 0x68, 0x37, 0xcb, 0xc7, 0x7b, 0x11, 0xd5, + 0x33, 0xcc, 0xa9, 0xfe, 0x48, 0xe1, 0xb2, 0x65, 0xff, 0x87, 0x22, 0x8c, 0x1b, 0xfb, 0xdb, 0x23, + 0xd0, 0xd8, 0xc2, 0x94, 0xc6, 0xb6, 0x96, 0xdb, 0xd6, 0xdc, 0x57, 0x65, 0xbb, 0x97, 0x51, 0xd9, + 0xd6, 0xf3, 0x63, 0xf9, 0x40, 0x9d, 0x0d, 0x25, 0x50, 0x09, 0x5b, 0x54, 0x23, 0xa7, 0x5b, 0xff, + 0x48, 0x1e, 0x9f, 0x70, 0x5d, 0x92, 0xab, 0x4e, 0x1e, 0x1e, 0xcc, 0x56, 0xd4, 0x5f, 0xac, 0x19, + 0xd9, 0xdf, 0xb5, 0xe0, 0xac, 0xd1, 0xc7, 0xc5, 0x30, 0xa8, 0x79, 0xec, 0xd3, 0x5e, 0x84, 0x91, + 0xa4, 0xd3, 0x92, 0x6a, 0xbf, 0x1a, 0xa9, 0xad, 0x4e, 0x8b, 0x60, 0x06, 0xa1, 0x8a, 0x7e, 0x93, + 0xc4, 0xb1, 0xd3, 0x20, 0x59, 0x45, 0x7f, 0x8d, 0x37, 0x63, 0x09, 0x47, 0x11, 0x20, 0xdf, 0x89, + 0x93, 0xad, 0xc8, 0x09, 0x62, 0x46, 0x7e, 0xcb, 0x6b, 0x12, 0x31, 0xc0, 0x7f, 0x65, 0xb0, 0x19, + 0x43, 0x9f, 0xa8, 0x3e, 0x7d, 0x78, 0x30, 0x8b, 0x56, 0xbb, 0x28, 0xe1, 0x1e, 0xd4, 0xed, 0xaf, + 0x5b, 0xf0, 0x74, 0x6f, 0x5d, 0x0c, 0xbd, 0x0f, 0x46, 0xb9, 0xc9, 0x27, 0xde, 0x4e, 0x7f, 0x12, + 0xd6, 0x8a, 0x05, 0x14, 0xcd, 0x43, 0x45, 0xed, 0x13, 0xe2, 0x1d, 0xa7, 0x05, 0x6a, 0x45, 0x6f, + 0x2e, 0x1a, 0x87, 0x0e, 0x1a, 0xfd, 0x23, 0x34, 0x37, 0x35, 0x68, 0xcc, 0x48, 0x62, 0x10, 0xfb, + 0x8f, 0x2c, 0x38, 0x65, 0xf4, 0xea, 0x11, 0xa8, 0xe6, 0x41, 0x5a, 0x35, 0x5f, 0xc9, 0x6d, 0x3e, + 0xf7, 0xd1, 0xcd, 0xbf, 0x6c, 0xc1, 0x79, 0x03, 0x6b, 0xcd, 0x49, 0xdc, 0x9d, 0x2b, 0xfb, 0xad, + 0x88, 0xc4, 0xd4, 0x9c, 0x46, 0x2f, 0x18, 0x72, 0xab, 0x3a, 0x2e, 0x28, 0x14, 0x6f, 0x90, 0x0e, + 0x17, 0x62, 0x2f, 0x43, 0x99, 0x4f, 0xce, 0x30, 0x12, 0x23, 0xae, 0xde, 0x6d, 0x5d, 0xb4, 0x63, + 0x85, 0x81, 0x6c, 0x18, 0x65, 0xc2, 0x89, 0x2e, 0x56, 0xba, 0x0d, 0x01, 0xfd, 0x88, 0xb7, 0x59, + 0x0b, 0x16, 0x10, 0xfb, 0xb0, 0xc0, 0x6c, 0x05, 0xb5, 0x0a, 0xc9, 0xa3, 0x30, 0x34, 0xa3, 0x94, + 0xd8, 0xda, 0xc8, 0x4f, 0x86, 0x90, 0xfe, 0xc6, 0xe6, 0xbb, 0x19, 0xc9, 0x85, 0x73, 0xe5, 0xfa, + 0x60, 0x83, 0xf3, 0x0f, 0x0a, 0x30, 0x9b, 0x7e, 0xa0, 0x4b, 0xf0, 0x51, 0xeb, 0xc6, 0x60, 0x94, + 0x3d, 0x4f, 0x30, 0xf0, 0xb1, 0x89, 0xd7, 0x47, 0x76, 0x14, 0x4e, 0x52, 0x76, 0x98, 0xa2, 0xad, + 0x78, 0x84, 0x68, 0xbb, 0x0c, 0x13, 0xe1, 0x36, 0x93, 0x17, 0xb5, 0x6b, 0x4e, 0xbc, 0xc3, 0x24, + 0x77, 0x45, 0x5b, 0x7b, 0xeb, 0x06, 0x0c, 0xa7, 0x30, 0x99, 0x14, 0xe2, 0xdf, 0xab, 0x94, 0x91, + 0x42, 0xe9, 0xb1, 0xfd, 0x93, 0x02, 0x3c, 0x93, 0x1e, 0x5b, 0x2d, 0xa5, 0x3f, 0x92, 0x92, 0xd2, + 0x1f, 0x30, 0xa5, 0xf4, 0xfd, 0x83, 0xd9, 0xe7, 0xfa, 0x3c, 0xf6, 0x97, 0x46, 0x88, 0xa3, 0x65, + 0x35, 0x46, 0x7c, 0x5c, 0xe7, 0xd3, 0x63, 0x74, 0xff, 0x60, 0xf6, 0x85, 0x3e, 0xef, 0x98, 0xd9, + 0x5d, 0xdf, 0x07, 0xa3, 0x11, 0x71, 0xe2, 0x30, 0xc8, 0x0e, 0x36, 0x66, 0xad, 0x58, 0x40, 0xed, + 0x3f, 0x2a, 0x67, 0x07, 0x7b, 0x99, 0x9f, 0x93, 0x85, 0x11, 0xf2, 0x60, 0x84, 0x69, 0xde, 0x5c, + 0x64, 0xdc, 0x38, 0xde, 0xf2, 0xa2, 0x92, 0x5a, 0x91, 0xae, 0x96, 0xe9, 0x57, 0xa3, 0x4d, 0x98, + 0xb1, 0x40, 0xfb, 0x50, 0x76, 0xa5, 0x42, 0x5c, 0xc8, 0xe3, 0xe8, 0x48, 0xa8, 0xc3, 0x9a, 0xe3, + 0x04, 0x15, 0xa9, 0x4a, 0x8b, 0x56, 0xdc, 0x10, 0x81, 0x62, 0xc3, 0x4b, 0xc4, 0x67, 0x3d, 0xa6, + 0xc9, 0xb3, 0xec, 0x19, 0xaf, 0x38, 0x46, 0xe5, 0xfc, 0xb2, 0x97, 0x60, 0x4a, 0x1f, 0xfd, 0x9c, + 0x05, 0xe3, 0xb1, 0xdb, 0xdc, 0x88, 0xc2, 0x3d, 0xaf, 0x46, 0x22, 0xa1, 0xf0, 0x1c, 0x53, 0x64, + 0x6d, 0x2e, 0xae, 0x49, 0x82, 0x9a, 0x2f, 0x37, 0x41, 0x35, 0x04, 0x9b, 0x7c, 0xa9, 0x21, 0xf0, + 0x8c, 0x78, 0xf7, 0x25, 0xe2, 0x7a, 0x74, 0x8b, 0x92, 0x76, 0x0f, 0x9b, 0x29, 0xc7, 0x56, 0x00, + 0x97, 0xda, 0xee, 0x2e, 0x5d, 0x6f, 0xba, 0x43, 0xcf, 0x1d, 0x1e, 0xcc, 0x3e, 0xb3, 0xd8, 0x9b, + 0x27, 0xee, 0xd7, 0x19, 0x36, 0x60, 0xad, 0xb6, 0xef, 0x63, 0xf2, 0x4e, 0x9b, 0xb0, 0x53, 0x8d, + 0x1c, 0x06, 0x6c, 0x43, 0x13, 0xcc, 0x0c, 0x98, 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x0e, 0x8c, 0x36, + 0x9d, 0x24, 0xf2, 0xf6, 0xc5, 0x51, 0xc6, 0x31, 0x55, 0xf2, 0x35, 0x46, 0x4b, 0x33, 0x67, 0x3b, + 0x38, 0x6f, 0xc4, 0x82, 0x11, 0x6a, 0x42, 0xa9, 0x49, 0xa2, 0x06, 0x99, 0x29, 0xe7, 0x71, 0x6c, + 0xbb, 0x46, 0x49, 0x69, 0x86, 0x15, 0xaa, 0xc0, 0xb0, 0x36, 0xcc, 0xb9, 0xa0, 0xb7, 0xa1, 0x1c, + 0x13, 0x9f, 0xb8, 0x54, 0x05, 0xa9, 0x30, 0x8e, 0x1f, 0x1c, 0x50, 0x1d, 0x73, 0xb6, 0x89, 0xbf, + 0x29, 0x1e, 0xe5, 0x0b, 0x4c, 0xfe, 0xc3, 0x8a, 0xa4, 0xfd, 0xdf, 0x2d, 0x40, 0x69, 0x09, 0xf3, + 0x08, 0x94, 0xc0, 0x77, 0xd2, 0x4a, 0xe0, 0x6a, 0x9e, 0xaa, 0x41, 0x1f, 0x3d, 0xf0, 0xdb, 0x65, + 0xc8, 0xc8, 0xe6, 0x9b, 0x24, 0x4e, 0x48, 0xed, 0x3d, 0x79, 0xfa, 0x9e, 0x3c, 0x7d, 0x4f, 0x9e, + 0x2a, 0x79, 0xba, 0x9d, 0x91, 0xa7, 0x6f, 0x18, 0xab, 0x5e, 0x3b, 0x21, 0x3f, 0xa9, 0xbc, 0x94, + 0x66, 0x0f, 0x0c, 0x04, 0x2a, 0x09, 0xae, 0x6f, 0xae, 0xdf, 0xec, 0x29, 0x40, 0x3f, 0x99, 0x16, + 0xa0, 0xc7, 0x65, 0xf1, 0xc8, 0x45, 0xe6, 0xdf, 0x29, 0xc0, 0xb3, 0x69, 0x51, 0x82, 0x43, 0xdf, + 0x0f, 0xdb, 0xc9, 0x66, 0x42, 0x5a, 0xe8, 0x97, 0x2d, 0x38, 0xdd, 0x4c, 0x5b, 0x99, 0xb1, 0x38, + 0xcc, 0xfb, 0x68, 0x6e, 0x72, 0x2e, 0x63, 0xc6, 0x56, 0x67, 0x84, 0xcc, 0x3b, 0x9d, 0x01, 0xc4, + 0xb8, 0xab, 0x2f, 0xe8, 0x6d, 0xa8, 0x34, 0x9d, 0xfd, 0x5b, 0xad, 0x9a, 0x93, 0x48, 0xc3, 0xa5, + 0xbf, 0xbd, 0xd9, 0x4e, 0x3c, 0x7f, 0x8e, 0xbb, 0x68, 0xe7, 0x56, 0x82, 0x64, 0x3d, 0xda, 0x4c, + 0x22, 0x2f, 0x68, 0xf0, 0x23, 0x9c, 0x35, 0x49, 0x06, 0x6b, 0x8a, 0xf6, 0xdf, 0xb3, 0xb2, 0x82, + 0x56, 0x8d, 0x4e, 0xe4, 0x24, 0xa4, 0xd1, 0x41, 0x9f, 0x86, 0x52, 0x9c, 0x90, 0x96, 0x1c, 0x95, + 0x3b, 0x79, 0x4a, 0x7f, 0xe3, 0x4b, 0xe8, 0x8d, 0x80, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0x1f, 0x8e, + 0x64, 0x37, 0x3c, 0xe6, 0xb0, 0xbb, 0x04, 0xd0, 0x08, 0xb7, 0x48, 0xb3, 0xe5, 0xd3, 0x61, 0xb1, + 0xd8, 0xa9, 0xaf, 0x32, 0xaa, 0x97, 0x15, 0x04, 0x1b, 0x58, 0xe8, 0x6f, 0x5a, 0x00, 0x0d, 0xb9, + 0xb0, 0xe4, 0x66, 0x76, 0x2b, 0xcf, 0xd7, 0xd1, 0xcb, 0x56, 0xf7, 0x45, 0x31, 0xc4, 0x06, 0x73, + 0xf4, 0x79, 0x0b, 0xca, 0x89, 0xec, 0x3e, 0x17, 0xef, 0x5b, 0x79, 0xf6, 0x44, 0xbe, 0xb4, 0xde, + 0xd7, 0xd5, 0x90, 0x28, 0xbe, 0xe8, 0x6f, 0x58, 0x00, 0x71, 0x27, 0x70, 0x37, 0x42, 0xdf, 0x73, + 0x3b, 0x42, 0xea, 0xdf, 0xce, 0xd5, 0xf0, 0x57, 0xd4, 0xab, 0x53, 0x74, 0x34, 0xf4, 0x7f, 0x6c, + 0x70, 0x46, 0x9f, 0x81, 0x72, 0x2c, 0xa6, 0x9b, 0x90, 0xf3, 0x5b, 0xf9, 0x1e, 0x3f, 0x70, 0xda, + 0x42, 0x44, 0x88, 0x7f, 0x58, 0xf1, 0xb4, 0x7f, 0xa7, 0x90, 0x3a, 0xc7, 0x54, 0x27, 0x16, 0x6c, + 0xca, 0xb8, 0xd2, 0x28, 0x94, 0x2b, 0x20, 0xd7, 0x29, 0xa3, 0x4c, 0x4e, 0x3d, 0x65, 0x54, 0x53, + 0x8c, 0x0d, 0xe6, 0x74, 0x73, 0x9c, 0x76, 0xb2, 0xe7, 0x22, 0x62, 0x16, 0xbf, 0x9d, 0x67, 0x97, + 0xba, 0x4f, 0x9d, 0x9f, 0x15, 0x5d, 0x9b, 0xee, 0x02, 0xe1, 0xee, 0x2e, 0xd9, 0x87, 0x85, 0xd4, + 0xd9, 0xa9, 0xf1, 0x01, 0x06, 0x38, 0x17, 0xfe, 0x8a, 0x05, 0xe3, 0x51, 0xe8, 0xfb, 0x5e, 0xd0, + 0xa0, 0x93, 0x45, 0x48, 0xbc, 0x8f, 0x9f, 0x88, 0xd0, 0x11, 0xb3, 0x82, 0x6d, 0xb1, 0x58, 0xf3, + 0xc4, 0x66, 0x07, 0xd0, 0x2f, 0x5a, 0x30, 0x29, 0xfe, 0x0b, 0x21, 0x5c, 0x3c, 0xf9, 0x2e, 0x4d, + 0x1f, 0x1e, 0xcc, 0x4e, 0x62, 0x93, 0x2b, 0x4e, 0x77, 0xc2, 0xfe, 0x9c, 0x05, 0x33, 0xfd, 0xd6, + 0x1a, 0x22, 0xf0, 0x1c, 0xdd, 0x40, 0xe8, 0x7e, 0xac, 0x9c, 0xb5, 0xeb, 0xc1, 0x12, 0xf1, 0x89, + 0x3a, 0x3c, 0x2b, 0x57, 0x5f, 0x14, 0xa3, 0xff, 0xdc, 0x46, 0x7f, 0x54, 0xfc, 0x20, 0x3a, 0xf6, + 0xaf, 0x75, 0x7d, 0x68, 0x25, 0x6b, 0xbf, 0x61, 0x75, 0x59, 0x24, 0x1f, 0x3d, 0x09, 0xf9, 0xc6, + 0x6c, 0x17, 0xe5, 0xb3, 0xed, 0x8f, 0xf3, 0x18, 0x9d, 0x42, 0xf6, 0xbf, 0x1f, 0x81, 0x07, 0xf4, + 0x4c, 0x1d, 0xfb, 0x5b, 0xfd, 0x8e, 0xfd, 0x87, 0xf7, 0x24, 0x7c, 0xc9, 0x82, 0x51, 0x9f, 0x2a, + 0x47, 0xfc, 0x68, 0x7b, 0xfc, 0x52, 0xed, 0xa4, 0xc6, 0x9e, 0xeb, 0x60, 0x31, 0x77, 0x4c, 0xaa, + 0x63, 0x31, 0xde, 0x88, 0x45, 0x1f, 0xd0, 0x37, 0x2d, 0x18, 0x77, 0x82, 0x20, 0x4c, 0x44, 0xa4, + 0x0c, 0x8f, 0x34, 0xf1, 0x4e, 0xac, 0x4f, 0x0b, 0x9a, 0x17, 0xef, 0x98, 0x3e, 0x27, 0xd6, 0x10, + 0x6c, 0x76, 0x09, 0xcd, 0x01, 0xd4, 0xbd, 0xc0, 0xf1, 0xbd, 0x77, 0xa9, 0x91, 0x57, 0x62, 0xfe, + 0x00, 0xb6, 0x63, 0x5d, 0x55, 0xad, 0xd8, 0xc0, 0x38, 0xff, 0xd7, 0x61, 0xdc, 0x78, 0xf3, 0x1e, + 0xfe, 0xd4, 0xb3, 0xa6, 0x3f, 0xb5, 0x62, 0xb8, 0x41, 0xcf, 0xbf, 0x01, 0xa7, 0xb3, 0x1d, 0x1c, + 0xe6, 0x79, 0xfb, 0xd7, 0x47, 0xb3, 0xa7, 0xe5, 0x5b, 0x24, 0x6a, 0xd2, 0xae, 0xbd, 0x67, 0x1c, + 0xbf, 0x67, 0x1c, 0xbf, 0x67, 0x1c, 0xcb, 0x3f, 0xf6, 0x6f, 0x97, 0x20, 0xa5, 0xb0, 0xf0, 0xde, + 0xfd, 0x30, 0x8c, 0x45, 0xa4, 0x15, 0xde, 0xc2, 0xab, 0x42, 0xe2, 0xea, 0x08, 0x53, 0xde, 0x8c, + 0x25, 0x9c, 0x4a, 0xe6, 0x96, 0x93, 0xec, 0x08, 0x91, 0xab, 0x24, 0xf3, 0x86, 0x93, 0xec, 0x60, + 0x06, 0x41, 0x6f, 0xc0, 0x54, 0xe2, 0x44, 0x0d, 0x92, 0x60, 0xb2, 0xc7, 0x06, 0x41, 0x78, 0x1a, + 0x9e, 0x16, 0xb8, 0x53, 0x5b, 0x29, 0x28, 0xce, 0x60, 0xa3, 0x77, 0x60, 0x64, 0x87, 0xf8, 0x4d, + 0x61, 0xbd, 0x6f, 0xe6, 0x27, 0x11, 0xd9, 0xbb, 0x5e, 0x23, 0x7e, 0x93, 0xaf, 0x57, 0xfa, 0x0b, + 0x33, 0x56, 0xf4, 0xeb, 0x54, 0x76, 0xdb, 0x71, 0x12, 0x36, 0xbd, 0x77, 0xa5, 0x4d, 0xff, 0xd1, + 0x9c, 0x19, 0xdf, 0x90, 0xf4, 0xb9, 0xe1, 0xa9, 0xfe, 0x62, 0xcd, 0x99, 0xf5, 0xa3, 0xe6, 0x45, + 0xcc, 0x46, 0xef, 0xcc, 0xc0, 0x89, 0xf4, 0x63, 0x49, 0xd2, 0xe7, 0xfd, 0x50, 0x7f, 0xb1, 0xe6, + 0x8c, 0x3a, 0x30, 0xda, 0xf2, 0xdb, 0x0d, 0x2f, 0x98, 0x19, 0x67, 0x7d, 0xb8, 0x95, 0x73, 0x1f, + 0x36, 0x18, 0x71, 0x7e, 0xb2, 0xc2, 0x7f, 0x63, 0xc1, 0x10, 0xbd, 0x08, 0x25, 0x77, 0xc7, 0x89, + 0x92, 0x99, 0x09, 0x36, 0x69, 0x94, 0x01, 0xbc, 0x48, 0x1b, 0x31, 0x87, 0xd9, 0xff, 0xa0, 0x90, + 0xd6, 0x1e, 0xd2, 0x2f, 0xc6, 0xa7, 0xb3, 0xdb, 0x8e, 0x62, 0x69, 0x05, 0x1b, 0xd3, 0x99, 0x35, + 0x63, 0x09, 0x47, 0x9f, 0xb3, 0x60, 0xec, 0x6e, 0x1c, 0x06, 0x01, 0x49, 0x84, 0xa4, 0xbe, 0x9d, + 0xf3, 0xbb, 0x5e, 0xe7, 0xd4, 0x75, 0x1f, 0x44, 0x03, 0x96, 0x7c, 0x69, 0x77, 0xc9, 0xbe, 0xeb, + 0xb7, 0x6b, 0x5d, 0xbe, 0xd1, 0x2b, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0xf5, 0x02, 0x8e, 0x3a, 0x92, + 0x46, 0x5d, 0x09, 0x04, 0xaa, 0x80, 0xdb, 0xff, 0xb4, 0x04, 0xe7, 0x7a, 0xce, 0x7e, 0xba, 0xaf, + 0xb3, 0x9d, 0xf3, 0xaa, 0xe7, 0x13, 0x19, 0xd7, 0xcb, 0xf6, 0xf5, 0xdb, 0xaa, 0x15, 0x1b, 0x18, + 0xe8, 0xa7, 0x01, 0x5a, 0x4e, 0xe4, 0x34, 0x89, 0xd8, 0xcf, 0x8a, 0xc7, 0xdf, 0x3e, 0x69, 0x3f, + 0x36, 0x24, 0x4d, 0x6d, 0xe5, 0xa9, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, 0x87, 0x60, 0x3c, 0x22, 0x3e, + 0x71, 0x62, 0x16, 0xf8, 0x96, 0x8d, 0xe2, 0xc5, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0x3e, 0x15, 0xcb, + 0x30, 0x92, 0xf6, 0x50, 0xa6, 0xe3, 0x19, 0xd0, 0x57, 0x2d, 0x98, 0xaa, 0x7b, 0x3e, 0xd1, 0xdc, + 0x45, 0xcc, 0xed, 0xfa, 0xf1, 0x5f, 0xf2, 0xaa, 0x49, 0x57, 0x8b, 0xc0, 0x54, 0x73, 0x8c, 0x33, + 0xec, 0xe9, 0x67, 0xde, 0x23, 0x11, 0x93, 0x9d, 0xa3, 0xe9, 0xcf, 0x7c, 0x9b, 0x37, 0x63, 0x09, + 0x47, 0x0b, 0x70, 0xaa, 0xe5, 0xc4, 0xf1, 0x62, 0x44, 0x6a, 0x24, 0x48, 0x3c, 0xc7, 0xe7, 0x11, + 0xb1, 0x65, 0x1d, 0x11, 0xb7, 0x91, 0x06, 0xe3, 0x2c, 0x3e, 0xfa, 0x18, 0x3c, 0xe3, 0x35, 0x82, + 0x30, 0x22, 0x6b, 0x5e, 0x1c, 0x7b, 0x41, 0x43, 0x4f, 0x03, 0x26, 0x0a, 0xcb, 0xd5, 0x59, 0x41, + 0xea, 0x99, 0x95, 0xde, 0x68, 0xb8, 0xdf, 0xf3, 0xe8, 0x65, 0x28, 0xc7, 0xbb, 0x5e, 0x6b, 0x31, + 0xaa, 0xc5, 0xec, 0x18, 0xb3, 0xac, 0xcf, 0x5e, 0x36, 0x45, 0x3b, 0x56, 0x18, 0xf6, 0x2f, 0x15, + 0xd2, 0xf6, 0x9b, 0xb9, 0x7e, 0x50, 0x4c, 0x57, 0x49, 0x72, 0xdb, 0x89, 0xe4, 0x91, 0xc3, 0x31, + 0x63, 0x6a, 0x05, 0xdd, 0xdb, 0x4e, 0x64, 0xae, 0x37, 0xc6, 0x00, 0x4b, 0x4e, 0xe8, 0x2e, 0x8c, + 0x24, 0xbe, 0x93, 0x53, 0x10, 0xbe, 0xc1, 0x51, 0x5b, 0xf9, 0xab, 0x0b, 0x31, 0x66, 0x3c, 0xd0, + 0xf3, 0x54, 0x3f, 0xdd, 0x96, 0x81, 0x37, 0x42, 0xa5, 0xdc, 0x8e, 0x31, 0x6b, 0xb5, 0xff, 0xf7, + 0x68, 0x0f, 0x91, 0xa7, 0x36, 0x11, 0x74, 0x09, 0x80, 0x9a, 0x3a, 0x1b, 0x11, 0xa9, 0x7b, 0xfb, + 0x62, 0x13, 0x57, 0xcb, 0xea, 0xa6, 0x82, 0x60, 0x03, 0x4b, 0x3e, 0xb3, 0xd9, 0xae, 0xd3, 0x67, + 0x0a, 0xdd, 0xcf, 0x70, 0x08, 0x36, 0xb0, 0xd0, 0x6b, 0x30, 0xea, 0x35, 0x9d, 0x86, 0x8a, 0x0f, + 0x7a, 0x9e, 0xae, 0xa7, 0x15, 0xd6, 0x72, 0xff, 0x60, 0x76, 0x4a, 0x75, 0x88, 0x35, 0x61, 0x81, + 0x8b, 0x7e, 0xcd, 0x82, 0x09, 0x37, 0x6c, 0x36, 0xc3, 0x80, 0x1b, 0x08, 0xc2, 0xda, 0xb9, 0x7b, + 0x52, 0x5b, 0xec, 0xdc, 0xa2, 0xc1, 0x8c, 0x9b, 0x3b, 0x2a, 0x7e, 0xc4, 0x04, 0xe1, 0x54, 0xaf, + 0xcc, 0x65, 0x57, 0x3a, 0x62, 0xd9, 0xfd, 0x0b, 0x0b, 0xa6, 0xf9, 0xb3, 0x86, 0xdd, 0x22, 0x02, + 0xe3, 0xc3, 0x13, 0x7e, 0xad, 0x2e, 0x53, 0x4e, 0x1d, 0x45, 0x75, 0xc1, 0x71, 0x77, 0x27, 0xd1, + 0x32, 0x4c, 0xd7, 0xc3, 0xc8, 0x25, 0xe6, 0x40, 0x08, 0x99, 0xa1, 0x08, 0x5d, 0xcd, 0x22, 0xe0, + 0xee, 0x67, 0xd0, 0x6d, 0x78, 0xda, 0x68, 0x34, 0xc7, 0x81, 0x8b, 0x8d, 0x0b, 0x82, 0xda, 0xd3, + 0x57, 0x7b, 0x62, 0xe1, 0x3e, 0x4f, 0x9f, 0xff, 0x08, 0x4c, 0x77, 0x7d, 0xbf, 0xa1, 0xac, 0xc9, + 0x25, 0x78, 0xba, 0xf7, 0x48, 0x0d, 0x65, 0x53, 0xfe, 0xb2, 0x95, 0x0e, 0x5c, 0x31, 0x34, 0x97, + 0x01, 0xce, 0x27, 0x1c, 0x28, 0x92, 0x60, 0x4f, 0x08, 0x8e, 0xab, 0xc7, 0x9b, 0x11, 0x57, 0x82, + 0x3d, 0xfe, 0xa1, 0x99, 0x11, 0x76, 0x25, 0xd8, 0xc3, 0x94, 0xb6, 0xfd, 0x8b, 0xa3, 0xa9, 0xc8, + 0xc7, 0x4d, 0x19, 0x6c, 0xcb, 0xcd, 0x1f, 0x2b, 0xef, 0x60, 0x5b, 0x1e, 0xba, 0xae, 0x63, 0xaa, + 0xb8, 0xc5, 0x23, 0xd8, 0xa1, 0x2f, 0x5a, 0x2c, 0xd5, 0x46, 0x46, 0x84, 0x0a, 0x65, 0xea, 0x64, + 0x32, 0x7f, 0xcc, 0x04, 0x1e, 0xd9, 0x88, 0x4d, 0xee, 0x74, 0x25, 0xb7, 0x78, 0xd0, 0x78, 0x56, + 0xa5, 0x92, 0xc9, 0x38, 0x12, 0x8e, 0xf6, 0x7b, 0x9c, 0xf7, 0xe7, 0x90, 0xae, 0x31, 0xc0, 0x09, + 0xff, 0x37, 0x2d, 0x98, 0xe6, 0x1b, 0xe7, 0x92, 0x57, 0xaf, 0x93, 0x88, 0x04, 0x2e, 0x91, 0xaa, + 0xc7, 0x31, 0x3d, 0x4a, 0xd2, 0xee, 0x5c, 0xc9, 0x92, 0xd7, 0x4b, 0xbc, 0x0b, 0x84, 0xbb, 0x3b, + 0x83, 0x6a, 0x30, 0xe2, 0x05, 0xf5, 0x50, 0x08, 0xb6, 0xea, 0xf1, 0x3a, 0xb5, 0x12, 0xd4, 0x43, + 0xbd, 0x56, 0xe8, 0x3f, 0xcc, 0xa8, 0xa3, 0x55, 0x38, 0x1b, 0x09, 0xeb, 0xef, 0x9a, 0x17, 0x53, + 0x15, 0x7e, 0xd5, 0x6b, 0x7a, 0x09, 0x13, 0x4a, 0xc5, 0xea, 0xcc, 0xe1, 0xc1, 0xec, 0x59, 0xdc, + 0x03, 0x8e, 0x7b, 0x3e, 0x65, 0xff, 0x79, 0x05, 0xba, 0xcf, 0xe4, 0xd1, 0x4f, 0x41, 0x25, 0x52, + 0x39, 0x43, 0x56, 0x1e, 0x31, 0x1b, 0x72, 0x8c, 0x85, 0x3f, 0x40, 0x9d, 0x3e, 0xea, 0xec, 0x20, + 0xcd, 0x91, 0x2a, 0x12, 0xb1, 0x3e, 0xba, 0xcf, 0x61, 0x7e, 0x09, 0xae, 0xfa, 0x6c, 0xb5, 0x13, + 0xb8, 0x98, 0xf1, 0x40, 0x11, 0x8c, 0xee, 0x10, 0xc7, 0x4f, 0x76, 0xf2, 0x39, 0x06, 0xba, 0xc6, + 0x68, 0x65, 0xc3, 0x55, 0x79, 0x2b, 0x16, 0x9c, 0xd0, 0x3e, 0x8c, 0xed, 0xf0, 0x8f, 0x20, 0xf6, + 0xf6, 0xb5, 0xe3, 0x0e, 0x6e, 0xea, 0xcb, 0xea, 0xf5, 0x2b, 0x1a, 0xb0, 0x64, 0xc7, 0x1c, 0x76, + 0x86, 0x3b, 0x8a, 0x2f, 0x9f, 0xfc, 0x22, 0x75, 0x07, 0xf7, 0x45, 0x7d, 0x0a, 0x26, 0x22, 0xe2, + 0x86, 0x81, 0xeb, 0xf9, 0xa4, 0xb6, 0x20, 0x8f, 0x78, 0x86, 0x89, 0xe3, 0x3c, 0x4d, 0xf5, 0x13, + 0x6c, 0xd0, 0xc0, 0x29, 0x8a, 0xe8, 0x0b, 0x16, 0x4c, 0xa9, 0x44, 0x03, 0xfa, 0x41, 0x88, 0x38, + 0x24, 0x59, 0xcd, 0x29, 0xad, 0x81, 0xd1, 0xac, 0x22, 0x6a, 0xa1, 0xa4, 0xdb, 0x70, 0x86, 0x2f, + 0x7a, 0x0b, 0x40, 0x86, 0xde, 0x2e, 0x24, 0xe2, 0xc4, 0x64, 0x98, 0x57, 0x9d, 0xe2, 0x81, 0xde, + 0x92, 0x02, 0x36, 0xa8, 0xa1, 0x1b, 0x00, 0x7c, 0xd9, 0x6c, 0x75, 0x5a, 0x84, 0x99, 0x0d, 0x3a, + 0x10, 0x17, 0x36, 0x15, 0xe4, 0xfe, 0xc1, 0x6c, 0xb7, 0x81, 0xcb, 0xbc, 0x66, 0xc6, 0xe3, 0xe8, + 0x27, 0x61, 0x2c, 0x6e, 0x37, 0x9b, 0x8e, 0x3a, 0x4f, 0xc9, 0x31, 0x74, 0x9c, 0xd3, 0xd5, 0x73, + 0x53, 0x34, 0x60, 0xc9, 0x11, 0xdd, 0xa5, 0x82, 0x2d, 0x16, 0x96, 0x37, 0x5b, 0x45, 0x7c, 0x6f, + 0x1e, 0x67, 0xef, 0xf4, 0x61, 0xf1, 0xdc, 0x59, 0xdc, 0x03, 0xe7, 0xfe, 0xc1, 0xec, 0xd3, 0xe9, + 0xf6, 0xd5, 0x50, 0x04, 0x73, 0xf7, 0xa4, 0x69, 0x07, 0xe9, 0x98, 0x00, 0xd1, 0x83, 0xd7, 0x60, + 0x82, 0xec, 0x27, 0x24, 0x0a, 0x1c, 0xff, 0x16, 0x5e, 0x95, 0xd6, 0x3e, 0x9b, 0x68, 0x57, 0x8c, + 0x76, 0x9c, 0xc2, 0x42, 0xb6, 0xd2, 0xf2, 0x0b, 0x3a, 0x0b, 0x80, 0x6b, 0xf9, 0x52, 0xa7, 0xb7, + 0xff, 0x5f, 0x21, 0xa5, 0x7d, 0x6c, 0x45, 0x84, 0xa0, 0x10, 0x4a, 0x41, 0x58, 0x53, 0x02, 0xf6, + 0x7a, 0x3e, 0x02, 0xf6, 0x66, 0x58, 0x33, 0x12, 0x67, 0xe9, 0xbf, 0x18, 0x73, 0x3e, 0x2c, 0xb3, + 0x50, 0xa6, 0x60, 0x32, 0x80, 0x50, 0xb8, 0xf2, 0xe4, 0xac, 0x32, 0x0b, 0xd7, 0x4d, 0x46, 0x38, + 0xcd, 0x17, 0xed, 0x42, 0x69, 0x27, 0x8c, 0x13, 0xe9, 0x5c, 0x3a, 0xa6, 0xc6, 0x77, 0x2d, 0x8c, + 0x13, 0xb6, 0x5d, 0xaa, 0xd7, 0xa6, 0x2d, 0x31, 0xe6, 0x3c, 0xec, 0x3f, 0xb6, 0x52, 0x67, 0x3b, + 0x77, 0x58, 0x7c, 0xcc, 0x1e, 0x09, 0xe8, 0xda, 0x31, 0x9d, 0xc9, 0x7f, 0x2d, 0x13, 0xbe, 0xfe, + 0xfe, 0x7e, 0x65, 0x0c, 0xee, 0x51, 0x0a, 0x73, 0x8c, 0x84, 0xe1, 0x77, 0xfe, 0xac, 0x95, 0x4e, + 0x30, 0xe0, 0x9b, 0x57, 0x8e, 0xf9, 0x2e, 0x47, 0xe6, 0x2a, 0xd8, 0xbf, 0x60, 0xc1, 0x58, 0xd5, + 0x71, 0x77, 0xc3, 0x7a, 0x1d, 0xbd, 0x0c, 0xe5, 0x5a, 0x3b, 0x32, 0x73, 0x1d, 0xd4, 0x61, 0xc2, + 0x92, 0x68, 0xc7, 0x0a, 0x83, 0xce, 0xe1, 0xba, 0xe3, 0xca, 0xac, 0x97, 0x22, 0x9f, 0xc3, 0x57, + 0x59, 0x0b, 0x16, 0x10, 0xf4, 0x21, 0x18, 0x6f, 0x3a, 0xfb, 0xf2, 0xe1, 0xec, 0xc1, 0xd2, 0x9a, + 0x06, 0x61, 0x13, 0xcf, 0xfe, 0xb7, 0x16, 0xcc, 0x54, 0x9d, 0xd8, 0x73, 0x17, 0xda, 0xc9, 0x4e, + 0xd5, 0x4b, 0xb6, 0xdb, 0xee, 0x2e, 0x49, 0x78, 0xaa, 0x13, 0xed, 0x65, 0x3b, 0xa6, 0x4b, 0x49, + 0x99, 0x07, 0xaa, 0x97, 0xb7, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0x5d, 0x18, 0x6f, 0x39, 0x71, 0x7c, + 0x2f, 0x8c, 0x6a, 0x98, 0xd4, 0xf3, 0x49, 0x34, 0xdc, 0x24, 0x6e, 0x44, 0x12, 0x4c, 0xea, 0xc2, + 0x17, 0xa0, 0xe9, 0x63, 0x93, 0x99, 0xfd, 0x9b, 0x15, 0x18, 0x13, 0x8e, 0x8c, 0x81, 0x13, 0xb8, + 0xa4, 0xe1, 0x53, 0xe8, 0x6b, 0xf8, 0xc4, 0x30, 0xea, 0xb2, 0x72, 0x17, 0x42, 0xfb, 0xb8, 0x91, + 0x8b, 0xe7, 0x8b, 0x57, 0xd0, 0xd0, 0xdd, 0xe2, 0xff, 0xb1, 0x60, 0x85, 0xbe, 0x66, 0xc1, 0x29, + 0x37, 0x0c, 0x02, 0xe2, 0xea, 0xad, 0x71, 0x24, 0x0f, 0x5f, 0xf6, 0x62, 0x9a, 0xa8, 0x3e, 0x55, + 0xcb, 0x00, 0x70, 0x96, 0x3d, 0x7a, 0x1d, 0x26, 0xf9, 0x98, 0xdd, 0x4e, 0x1d, 0x29, 0xe8, 0x3c, + 0x65, 0x13, 0x88, 0xd3, 0xb8, 0x68, 0x8e, 0x1f, 0xcd, 0x88, 0x8c, 0xe0, 0x51, 0x7d, 0x44, 0x6b, + 0xe4, 0x02, 0x1b, 0x18, 0x28, 0x02, 0x14, 0x91, 0x7a, 0x44, 0xe2, 0x1d, 0xe1, 0xe8, 0x61, 0xdb, + 0xf2, 0xd8, 0xc3, 0x65, 0x92, 0xe0, 0x2e, 0x4a, 0xb8, 0x07, 0x75, 0xb4, 0x2b, 0x6c, 0x83, 0x72, + 0x1e, 0x52, 0x41, 0x7c, 0xe6, 0xbe, 0x26, 0xc2, 0x2c, 0x94, 0xe2, 0x1d, 0x27, 0xaa, 0x31, 0x75, + 0xa0, 0xc8, 0x03, 0x26, 0x37, 0x69, 0x03, 0xe6, 0xed, 0x68, 0x09, 0x4e, 0x67, 0xb2, 0xac, 0x63, + 0xb6, 0xe1, 0x97, 0x75, 0x60, 0x61, 0x26, 0x3f, 0x3b, 0xc6, 0x5d, 0x4f, 0x98, 0x76, 0xe3, 0xf8, + 0x11, 0x76, 0x63, 0x47, 0x85, 0x13, 0x4c, 0x30, 0x89, 0xff, 0x66, 0x2e, 0x03, 0x30, 0x50, 0xec, + 0xc0, 0x97, 0x33, 0xb1, 0x03, 0x93, 0xac, 0x03, 0xb7, 0xf3, 0xe9, 0xc0, 0xf0, 0x81, 0x02, 0x8f, + 0xd3, 0xf1, 0xff, 0xe7, 0x16, 0xc8, 0xef, 0xba, 0xe8, 0xb8, 0x3b, 0x84, 0x4e, 0x19, 0xf4, 0x06, + 0x4c, 0x29, 0xcb, 0x6b, 0x31, 0x6c, 0x07, 0xdc, 0xe7, 0x5f, 0xd4, 0xc7, 0xef, 0x38, 0x05, 0xc5, + 0x19, 0x6c, 0x34, 0x0f, 0x15, 0x3a, 0x4e, 0xfc, 0x51, 0xbe, 0x7b, 0x28, 0xeb, 0x6e, 0x61, 0x63, + 0x45, 0x3c, 0xa5, 0x71, 0x50, 0x08, 0xd3, 0xbe, 0x13, 0x27, 0xac, 0x07, 0xd4, 0x10, 0x7b, 0xc8, + 0x3c, 0x2e, 0x56, 0x64, 0x62, 0x35, 0x4b, 0x08, 0x77, 0xd3, 0xb6, 0xbf, 0x3b, 0x02, 0x93, 0x29, + 0xc9, 0x38, 0xe4, 0xb6, 0xf3, 0x32, 0x94, 0xe5, 0x4e, 0x90, 0x4d, 0x0a, 0x55, 0xdb, 0x85, 0xc2, + 0xa0, 0xdb, 0xe4, 0x36, 0x71, 0x22, 0x12, 0xb1, 0xfc, 0xf5, 0xec, 0x36, 0x59, 0xd5, 0x20, 0x6c, + 0xe2, 0x31, 0xa1, 0x9c, 0xf8, 0xf1, 0xa2, 0xef, 0x91, 0x20, 0xe1, 0xdd, 0xcc, 0x47, 0x28, 0x6f, + 0xad, 0x6e, 0x9a, 0x44, 0xb5, 0x50, 0xce, 0x00, 0x70, 0x96, 0x3d, 0xfa, 0x59, 0x0b, 0x26, 0x9d, + 0x7b, 0xb1, 0xae, 0xc9, 0x24, 0xa2, 0x04, 0x8e, 0xb9, 0x49, 0xa5, 0xca, 0x3c, 0xf1, 0x40, 0xb5, + 0x54, 0x13, 0x4e, 0x33, 0x45, 0xdf, 0xb0, 0x00, 0x91, 0x7d, 0xe2, 0xca, 0x38, 0x06, 0xd1, 0x97, + 0xd1, 0x3c, 0x0c, 0x94, 0x2b, 0x5d, 0x74, 0xb9, 0x54, 0xef, 0x6e, 0xc7, 0x3d, 0xfa, 0x60, 0xff, + 0xab, 0xa2, 0x5a, 0x50, 0x3a, 0x74, 0xc6, 0x31, 0xa2, 0xd1, 0xad, 0x87, 0x8f, 0x46, 0xd7, 0xbe, + 0x9f, 0xae, 0x88, 0xf4, 0x74, 0xf0, 0x6f, 0xe1, 0x31, 0x05, 0xff, 0x7e, 0xde, 0x4a, 0xa5, 0x3f, + 0x8f, 0x5f, 0x7a, 0x2b, 0xdf, 0xb0, 0x9d, 0x39, 0xee, 0x79, 0xcc, 0x48, 0xf7, 0xb4, 0x3b, 0x92, + 0x4a, 0x53, 0x03, 0x6d, 0x28, 0x69, 0xf8, 0x9f, 0x8a, 0x30, 0x6e, 0xec, 0xa4, 0x3d, 0xd5, 0x22, + 0xeb, 0x09, 0x53, 0x8b, 0x0a, 0x43, 0xa8, 0x45, 0x3f, 0x0d, 0x15, 0x57, 0x4a, 0xf9, 0x7c, 0x0a, + 0x80, 0x65, 0xf7, 0x0e, 0x2d, 0xe8, 0x55, 0x13, 0xd6, 0x3c, 0xd1, 0x72, 0x2a, 0xdc, 0x58, 0xec, + 0x10, 0x23, 0x6c, 0x87, 0xe8, 0x15, 0x0f, 0x2c, 0x76, 0x8a, 0xee, 0x67, 0xd0, 0xab, 0xd4, 0xb2, + 0xf2, 0xc4, 0x7b, 0xc9, 0xe0, 0x3a, 0xa6, 0xae, 0x2f, 0x6c, 0xac, 0xc8, 0x66, 0x6c, 0xe2, 0xd8, + 0xdf, 0xb5, 0xd4, 0xc7, 0x7d, 0x04, 0xf9, 0x6d, 0x77, 0xd3, 0xf9, 0x6d, 0x57, 0x72, 0x19, 0xe6, + 0x3e, 0x89, 0x6d, 0x37, 0x61, 0x6c, 0x31, 0x6c, 0x36, 0x9d, 0xa0, 0x86, 0x7e, 0x08, 0xc6, 0x5c, + 0xfe, 0x53, 0x1c, 0x55, 0x8c, 0x53, 0xe5, 0x4b, 0x40, 0xb1, 0x84, 0xa1, 0xe7, 0x61, 0xc4, 0x89, + 0x1a, 0xf2, 0x78, 0x82, 0xf9, 0x4a, 0x17, 0xa2, 0x46, 0x8c, 0x59, 0xab, 0xfd, 0xf5, 0x02, 0xc0, + 0x62, 0xd8, 0x6c, 0x39, 0x11, 0xa9, 0x6d, 0x85, 0xef, 0xf9, 0x44, 0xb8, 0xd5, 0xfa, 0x25, 0x0b, + 0x10, 0x1d, 0x95, 0x30, 0x20, 0x41, 0xa2, 0x82, 0x0d, 0xa8, 0xb2, 0xe3, 0xca, 0x56, 0xa1, 0x39, + 0xe8, 0x35, 0x20, 0x01, 0x58, 0xe3, 0x0c, 0x60, 0x02, 0xbe, 0x28, 0x05, 0x54, 0x31, 0x1d, 0xc3, + 0xc3, 0xc4, 0x9a, 0x90, 0x57, 0xf6, 0x6f, 0x15, 0xe0, 0x69, 0xbe, 0xe7, 0xac, 0x39, 0x81, 0xd3, + 0x20, 0x4d, 0xda, 0xab, 0x41, 0xbd, 0x6b, 0x2e, 0xb5, 0x3d, 0x3c, 0x19, 0xb2, 0x73, 0xdc, 0xc9, + 0xc9, 0x27, 0x15, 0x9f, 0x46, 0x2b, 0x81, 0x97, 0x60, 0x46, 0x1c, 0xc5, 0x50, 0x96, 0x25, 0x1d, + 0x85, 0xb0, 0xc9, 0x89, 0x91, 0x5a, 0x77, 0x62, 0x63, 0x20, 0x58, 0x31, 0xa2, 0x9a, 0x99, 0x1f, + 0xba, 0xbb, 0x98, 0xb4, 0x42, 0x26, 0x58, 0x8c, 0x88, 0x89, 0x55, 0xd1, 0x8e, 0x15, 0x86, 0xfd, + 0x5b, 0x16, 0x64, 0x45, 0xae, 0x51, 0x05, 0xc1, 0x7a, 0x50, 0x15, 0x84, 0x61, 0x0a, 0x15, 0xfc, + 0x04, 0x8c, 0x3b, 0x09, 0xdd, 0x25, 0xb9, 0x5d, 0x59, 0x7c, 0xb8, 0xe3, 0xde, 0xb5, 0xb0, 0xe6, + 0xd5, 0x3d, 0x66, 0x4f, 0x9a, 0xe4, 0xec, 0x3f, 0x1b, 0x81, 0xe9, 0xae, 0x38, 0x4b, 0x74, 0x19, + 0x26, 0x5c, 0x31, 0x3d, 0x5a, 0x98, 0xd4, 0xc5, 0xcb, 0x18, 0x6e, 0x7c, 0x0d, 0xc3, 0x29, 0xcc, + 0x01, 0x26, 0xe8, 0x0a, 0x9c, 0x89, 0xa8, 0x25, 0xdb, 0x26, 0x0b, 0xf5, 0x84, 0x44, 0x9b, 0xc4, + 0x0d, 0x83, 0x1a, 0xaf, 0xf2, 0x51, 0xac, 0x3e, 0x73, 0x78, 0x30, 0x7b, 0x06, 0x77, 0x83, 0x71, + 0xaf, 0x67, 0x50, 0x0b, 0x26, 0x7d, 0x53, 0xc9, 0x11, 0x1a, 0xee, 0x43, 0xe9, 0x47, 0x6a, 0x13, + 0x4c, 0x35, 0xe3, 0x34, 0x83, 0xb4, 0xa6, 0x54, 0x7a, 0x4c, 0x9a, 0xd2, 0xcf, 0x68, 0x4d, 0x89, + 0xfb, 0x06, 0x3f, 0x9e, 0x73, 0x9c, 0xed, 0x49, 0xab, 0x4a, 0x6f, 0x42, 0x59, 0xba, 0xd5, 0x07, + 0x90, 0x37, 0x2f, 0xa6, 0xe8, 0xf4, 0x91, 0x68, 0xf7, 0x0b, 0xd0, 0x43, 0xcb, 0xa6, 0xeb, 0x4c, + 0x6f, 0x69, 0xa9, 0x75, 0x36, 0xdc, 0xb6, 0x86, 0xf6, 0x79, 0x48, 0x01, 0xd7, 0x4c, 0x3f, 0x96, + 0xb7, 0x95, 0xa0, 0xa3, 0x0c, 0x54, 0x0d, 0x21, 0x19, 0x69, 0x80, 0x2e, 0x01, 0x68, 0x4d, 0x44, + 0x44, 0xd3, 0x29, 0x77, 0x98, 0x56, 0x58, 0xb0, 0x81, 0x45, 0x8d, 0x46, 0x2f, 0x88, 0x13, 0xc7, + 0xf7, 0xaf, 0x79, 0x41, 0x22, 0x4e, 0xbf, 0xd4, 0x2e, 0xb5, 0xa2, 0x41, 0xd8, 0xc4, 0x3b, 0xff, + 0x61, 0xe3, 0xbb, 0x0c, 0xf3, 0x3d, 0x77, 0xe0, 0xd9, 0x65, 0x2f, 0x51, 0x31, 0xa0, 0x6a, 0x1e, + 0x51, 0x45, 0x43, 0x05, 0x2d, 0x5b, 0x7d, 0x83, 0x96, 0x8d, 0x18, 0xcc, 0x42, 0x3a, 0x64, 0x34, + 0x1b, 0x83, 0x69, 0x5f, 0x86, 0xb3, 0xcb, 0x5e, 0x72, 0xd5, 0xf3, 0xc9, 0x90, 0x4c, 0xec, 0xdf, + 0x1c, 0x81, 0x09, 0x33, 0xa8, 0x7e, 0x98, 0xb8, 0xeb, 0xaf, 0x50, 0x5d, 0x42, 0xbc, 0x9d, 0xa7, + 0xfc, 0x1c, 0x77, 0x8e, 0x1d, 0xe1, 0xdf, 0x7b, 0xc4, 0x0c, 0x75, 0x42, 0xf3, 0xc4, 0x66, 0x07, + 0xd0, 0x3d, 0x28, 0xd5, 0x59, 0x8c, 0x60, 0x31, 0x0f, 0x8f, 0x6b, 0xaf, 0x11, 0xd5, 0xcb, 0x8c, + 0x47, 0x19, 0x72, 0x7e, 0x74, 0x87, 0x8c, 0xd2, 0x91, 0xe5, 0x4a, 0x50, 0xa9, 0x98, 0x72, 0x85, + 0xd1, 0x4f, 0xd4, 0x97, 0x1e, 0x42, 0xd4, 0xa7, 0x04, 0xef, 0xe8, 0xe3, 0x11, 0xbc, 0xf6, 0x97, + 0x0a, 0x30, 0xb5, 0x1c, 0xb4, 0x37, 0x96, 0x37, 0xda, 0xdb, 0xbe, 0xe7, 0xde, 0x20, 0x1d, 0x2a, + 0x9c, 0x76, 0x49, 0x67, 0x65, 0x49, 0xcc, 0x21, 0x35, 0x6a, 0x37, 0x68, 0x23, 0xe6, 0x30, 0xba, + 0x1c, 0xeb, 0x5e, 0xd0, 0x20, 0x51, 0x2b, 0xf2, 0xc4, 0xa9, 0x96, 0xb1, 0x1c, 0xaf, 0x6a, 0x10, + 0x36, 0xf1, 0x28, 0xed, 0xf0, 0x5e, 0x40, 0xa2, 0xac, 0x2a, 0xb7, 0x4e, 0x1b, 0x31, 0x87, 0x51, + 0xa4, 0x24, 0x6a, 0xc7, 0x89, 0xf8, 0x1c, 0x0a, 0x69, 0x8b, 0x36, 0x62, 0x0e, 0xa3, 0x73, 0x3d, + 0x6e, 0x6f, 0x33, 0x97, 0x6e, 0x26, 0xb8, 0x6e, 0x93, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0xbb, 0xa4, + 0xb3, 0x44, 0x0d, 0x9b, 0x4c, 0xf8, 0xeb, 0x0d, 0xde, 0x8c, 0x25, 0x9c, 0xd5, 0xfe, 0x48, 0x0f, + 0xc7, 0x5f, 0xba, 0xda, 0x1f, 0xe9, 0xee, 0xf7, 0x31, 0x91, 0x7e, 0xc5, 0x82, 0x09, 0x33, 0x10, + 0x03, 0x35, 0x32, 0x5a, 0xde, 0x7a, 0x57, 0x1d, 0xa7, 0x1f, 0xeb, 0x55, 0x7b, 0xbe, 0xe1, 0x25, + 0x61, 0x2b, 0x7e, 0x85, 0x04, 0x0d, 0x2f, 0x20, 0xcc, 0xf5, 0xc7, 0x03, 0x38, 0x52, 0x51, 0x1e, + 0x8b, 0x61, 0x8d, 0x3c, 0x84, 0x9a, 0x68, 0xdf, 0x81, 0xe9, 0xae, 0x98, 0xe7, 0x01, 0x36, 0xd7, + 0x23, 0x53, 0x4a, 0x6c, 0x0c, 0xe3, 0x94, 0xf0, 0x7a, 0x8b, 0x47, 0x5a, 0x2c, 0xc2, 0x34, 0x57, + 0x00, 0x28, 0xa7, 0x4d, 0x77, 0x87, 0x34, 0x55, 0x1c, 0x3b, 0x3b, 0x42, 0xbd, 0x9d, 0x05, 0xe2, + 0x6e, 0x7c, 0xfb, 0xcb, 0x16, 0x4c, 0xa6, 0xc2, 0xd0, 0x73, 0x52, 0x03, 0xd8, 0x4a, 0x0b, 0x59, + 0x5c, 0x50, 0xe4, 0x05, 0xdc, 0x0b, 0x56, 0x36, 0x56, 0x9a, 0x06, 0x61, 0x13, 0xcf, 0xfe, 0x85, + 0x02, 0x94, 0xa5, 0xdb, 0x77, 0x80, 0xae, 0x7c, 0xd1, 0x82, 0x49, 0x75, 0x6c, 0xcd, 0xce, 0x43, + 0xf8, 0x64, 0xbc, 0x79, 0x7c, 0xc7, 0xb3, 0x0a, 0x1e, 0x0b, 0xea, 0xa1, 0xd6, 0x49, 0xb1, 0xc9, + 0x0c, 0xa7, 0x79, 0xa3, 0xdb, 0x00, 0x71, 0x27, 0x4e, 0x48, 0xd3, 0x38, 0x99, 0xb1, 0x8d, 0x15, + 0x37, 0xe7, 0x86, 0x11, 0xa1, 0xeb, 0xeb, 0x66, 0x58, 0x23, 0x9b, 0x0a, 0x53, 0x2b, 0x11, 0xba, + 0x0d, 0x1b, 0x94, 0xec, 0x7f, 0x52, 0x80, 0xd3, 0xd9, 0x2e, 0xa1, 0x8f, 0xc3, 0x84, 0xe4, 0x6e, + 0xd4, 0xd1, 0x97, 0xbe, 0xee, 0x09, 0x6c, 0xc0, 0xee, 0x1f, 0xcc, 0xce, 0x76, 0xdf, 0x63, 0x30, + 0x67, 0xa2, 0xe0, 0x14, 0x31, 0xee, 0x3b, 0x10, 0x4e, 0xae, 0x6a, 0x67, 0xa1, 0xd5, 0x12, 0x0e, + 0x00, 0xc3, 0x77, 0x60, 0x42, 0x71, 0x06, 0x1b, 0x6d, 0xc0, 0x59, 0xa3, 0xe5, 0x26, 0xf1, 0x1a, + 0x3b, 0xdb, 0x61, 0x24, 0x6d, 0x8b, 0xe7, 0x75, 0xc8, 0x47, 0x37, 0x0e, 0xee, 0xf9, 0x24, 0xdd, + 0xef, 0x5c, 0xa7, 0xe5, 0xb8, 0x5e, 0xd2, 0x11, 0x47, 0x4d, 0x4a, 0x36, 0x2d, 0x8a, 0x76, 0xac, + 0x30, 0xec, 0x35, 0x18, 0x19, 0x70, 0x06, 0x0d, 0xa4, 0xd3, 0xbe, 0x09, 0x65, 0x4a, 0x4e, 0x2a, + 0x38, 0x79, 0x90, 0x0c, 0xa1, 0x2c, 0x4b, 0xe1, 0x22, 0x1b, 0x8a, 0x9e, 0x23, 0xdd, 0x33, 0xea, + 0xb5, 0x56, 0xe2, 0xb8, 0xcd, 0xcc, 0x44, 0x0a, 0x44, 0x2f, 0x42, 0x91, 0xec, 0xb7, 0xb2, 0x7e, + 0x98, 0x2b, 0xfb, 0x2d, 0x2f, 0x22, 0x31, 0x45, 0x22, 0xfb, 0x2d, 0x74, 0x1e, 0x0a, 0x5e, 0x4d, + 0x6c, 0x52, 0x20, 0x70, 0x0a, 0x2b, 0x4b, 0xb8, 0xe0, 0xd5, 0xec, 0x7d, 0xa8, 0xa8, 0xda, 0xbb, + 0x68, 0x57, 0xca, 0x6e, 0x2b, 0x8f, 0x38, 0x0d, 0x49, 0xb7, 0x8f, 0xd4, 0x6e, 0x03, 0xe8, 0xa0, + 0xff, 0xbc, 0xe4, 0xcb, 0x45, 0x18, 0x71, 0x43, 0x91, 0x2b, 0x54, 0xd6, 0x64, 0x98, 0xd0, 0x66, + 0x10, 0xfb, 0x0e, 0x4c, 0xdd, 0x08, 0xc2, 0x7b, 0xac, 0x2a, 0xe1, 0x55, 0x8f, 0xf8, 0x35, 0x4a, + 0xb8, 0x4e, 0x7f, 0x64, 0x55, 0x04, 0x06, 0xc5, 0x1c, 0xa6, 0x0a, 0x11, 0x14, 0xfa, 0x15, 0x22, + 0xb0, 0x3f, 0x6b, 0xc1, 0x69, 0x15, 0x8d, 0x2e, 0xa5, 0xf1, 0x65, 0x98, 0xd8, 0x6e, 0x7b, 0x7e, + 0x4d, 0xfc, 0xcf, 0x1a, 0xea, 0x55, 0x03, 0x86, 0x53, 0x98, 0xd4, 0xac, 0xd8, 0xf6, 0x02, 0x27, + 0xea, 0x6c, 0x68, 0xf1, 0xaf, 0x24, 0x42, 0x55, 0x41, 0xb0, 0x81, 0x65, 0x7f, 0xbe, 0x00, 0x93, + 0xa9, 0xe4, 0x5b, 0xe4, 0x43, 0x99, 0xf8, 0xec, 0xf8, 0x48, 0x7e, 0xd4, 0xe3, 0x96, 0xe3, 0x51, + 0x13, 0xf1, 0x8a, 0xa0, 0x8b, 0x15, 0x87, 0x27, 0xc2, 0x4f, 0x61, 0xff, 0xc3, 0x02, 0x9c, 0xca, + 0xd4, 0x79, 0x43, 0x5f, 0x4d, 0x57, 0x72, 0xb1, 0xf2, 0xb0, 0xca, 0x1f, 0x58, 0x6d, 0x6c, 0xb8, + 0x7a, 0x2e, 0x8f, 0x6b, 0xa8, 0x7e, 0xb7, 0x00, 0x53, 0xe9, 0x02, 0x75, 0x4f, 0xe0, 0x48, 0x7d, + 0x00, 0x2a, 0xac, 0xec, 0x13, 0xab, 0x8d, 0xcf, 0x8d, 0x7f, 0x5e, 0x9d, 0x48, 0x36, 0x62, 0x0d, + 0x7f, 0x22, 0xca, 0xe4, 0xd8, 0xff, 0xc8, 0x82, 0x73, 0xfc, 0x2d, 0xb3, 0xf3, 0xf0, 0x6f, 0xf5, + 0x1a, 0xdd, 0xb7, 0xf3, 0xed, 0x60, 0x26, 0xb5, 0xff, 0xa8, 0xf1, 0x65, 0x35, 0xb9, 0x45, 0x6f, + 0xd3, 0x53, 0xe1, 0x09, 0xec, 0xec, 0x50, 0x93, 0xc1, 0xfe, 0xdd, 0x22, 0xe8, 0x32, 0xe4, 0xc8, + 0x13, 0x51, 0xe6, 0xb9, 0x94, 0x38, 0xd8, 0xec, 0x04, 0xae, 0x2e, 0x78, 0x5e, 0xce, 0x04, 0x99, + 0xff, 0xbc, 0x05, 0xe3, 0x5e, 0xe0, 0x25, 0x9e, 0xc3, 0xd4, 0x95, 0x7c, 0xea, 0x32, 0x2b, 0x76, + 0x2b, 0x9c, 0x72, 0x18, 0x99, 0x27, 0x46, 0x8a, 0x19, 0x36, 0x39, 0xa3, 0x4f, 0x89, 0x38, 0xa4, + 0x62, 0x6e, 0x39, 0x0a, 0xe5, 0x4c, 0xf0, 0x51, 0x0b, 0x4a, 0x11, 0x49, 0x22, 0x99, 0x1d, 0x72, + 0xe3, 0xb8, 0xc1, 0xa5, 0x49, 0xd4, 0x51, 0x55, 0x6d, 0xf4, 0x85, 0x30, 0xb4, 0x19, 0x73, 0x46, + 0x76, 0x0c, 0xa8, 0x7b, 0x2c, 0x86, 0x8c, 0xf1, 0x98, 0x87, 0x8a, 0xd3, 0x4e, 0xc2, 0x26, 0x1d, + 0x26, 0x71, 0xa8, 0xa5, 0xa3, 0x58, 0x24, 0x00, 0x6b, 0x1c, 0xfb, 0xab, 0x25, 0xc8, 0x84, 0x7d, + 0xa3, 0x7d, 0xb3, 0x84, 0xbe, 0x95, 0x6f, 0x09, 0x7d, 0xd5, 0x99, 0x5e, 0x65, 0xf4, 0x51, 0x03, + 0x4a, 0xad, 0x1d, 0x27, 0x96, 0xda, 0xc8, 0x9b, 0x72, 0x98, 0x36, 0x68, 0xe3, 0xfd, 0x83, 0xd9, + 0x1f, 0x1f, 0xcc, 0xba, 0xa5, 0x73, 0x75, 0x9e, 0xe7, 0xc0, 0x69, 0xd6, 0x8c, 0x06, 0xe6, 0xf4, + 0x87, 0xa9, 0x4c, 0xfd, 0x39, 0x51, 0x1b, 0x0c, 0x93, 0xb8, 0xed, 0x27, 0x62, 0x36, 0xbc, 0x99, + 0xe3, 0x2a, 0xe3, 0x84, 0x75, 0xd2, 0x10, 0xff, 0x8f, 0x0d, 0xa6, 0xe8, 0xe3, 0x50, 0x89, 0x13, + 0x27, 0x4a, 0x1e, 0x32, 0xc5, 0x40, 0x0d, 0xfa, 0xa6, 0x24, 0x82, 0x35, 0x3d, 0xf4, 0x16, 0xab, + 0xf8, 0xe2, 0xc5, 0x3b, 0x0f, 0x19, 0x3e, 0x28, 0xab, 0xc3, 0x08, 0x0a, 0xd8, 0xa0, 0x46, 0x95, + 0x3d, 0x36, 0xb7, 0xb9, 0xcf, 0xbc, 0xcc, 0xb4, 0x79, 0x25, 0x0a, 0xb1, 0x82, 0x60, 0x03, 0xcb, + 0xfe, 0x0c, 0x9c, 0xc9, 0xde, 0xb9, 0x23, 0x0e, 0xbc, 0x1a, 0x51, 0xd8, 0x6e, 0x65, 0xb5, 0x59, + 0x76, 0x27, 0x0b, 0xe6, 0x30, 0xaa, 0xcd, 0xee, 0x7a, 0x41, 0x2d, 0xab, 0xcd, 0xde, 0xf0, 0x82, + 0x1a, 0x66, 0x90, 0x01, 0xee, 0x16, 0xf8, 0xd7, 0x16, 0x5c, 0x3c, 0xea, 0x6a, 0x20, 0xf4, 0x3c, + 0x8c, 0xdc, 0x73, 0x22, 0x59, 0x41, 0x8a, 0xc9, 0x8e, 0x3b, 0x4e, 0x14, 0x60, 0xd6, 0x8a, 0x3a, + 0x30, 0xca, 0xd3, 0xaa, 0x84, 0x7d, 0xfe, 0x66, 0xbe, 0x17, 0x15, 0xdd, 0x20, 0x86, 0x77, 0x84, + 0xa7, 0x74, 0x61, 0xc1, 0xd0, 0xfe, 0x9e, 0x05, 0x68, 0x7d, 0x8f, 0x44, 0x91, 0x57, 0x33, 0x12, + 0xc1, 0xd0, 0x6b, 0x30, 0x71, 0x77, 0x73, 0xfd, 0xe6, 0x46, 0xe8, 0x05, 0x2c, 0xd7, 0xdd, 0x48, + 0x09, 0xb8, 0x6e, 0xb4, 0xe3, 0x14, 0x16, 0x5a, 0x84, 0xe9, 0xbb, 0xef, 0x50, 0x0d, 0xdc, 0xac, + 0x09, 0x59, 0xd0, 0x67, 0x2e, 0xd7, 0xdf, 0xcc, 0x00, 0x71, 0x37, 0x3e, 0x5a, 0x87, 0x73, 0x4d, + 0xe6, 0xec, 0xad, 0x31, 0xc3, 0x23, 0xe6, 0x9e, 0xdf, 0x48, 0x26, 0x13, 0x3f, 0x7b, 0x78, 0x30, + 0x7b, 0x6e, 0xad, 0x17, 0x02, 0xee, 0xfd, 0x9c, 0xfd, 0xad, 0x02, 0x8c, 0x1b, 0xd7, 0x6b, 0x0d, + 0x60, 0x62, 0x65, 0x6e, 0x04, 0x2b, 0x0c, 0x78, 0x23, 0xd8, 0x4b, 0x50, 0x6e, 0x85, 0xbe, 0xe7, + 0x7a, 0x2a, 0xf3, 0x99, 0x55, 0xe0, 0xd9, 0x10, 0x6d, 0x58, 0x41, 0xd1, 0x3d, 0xa8, 0xa8, 0x2b, + 0x67, 0x44, 0x2e, 0x54, 0x5e, 0x46, 0xa6, 0x5a, 0xbc, 0xfa, 0x2a, 0x19, 0xcd, 0x0b, 0xd9, 0x30, + 0xca, 0x66, 0xbe, 0x8c, 0x26, 0x61, 0x01, 0xef, 0x6c, 0x49, 0xc4, 0x58, 0x40, 0xec, 0x9f, 0x1b, + 0x83, 0xb3, 0xbd, 0xaa, 0xc6, 0xa0, 0x4f, 0xc3, 0x28, 0xef, 0x63, 0x3e, 0x85, 0xc9, 0x7a, 0xf1, + 0x58, 0x66, 0x04, 0x45, 0xb7, 0xd8, 0x6f, 0x2c, 0x78, 0x0a, 0xee, 0xbe, 0xb3, 0x2d, 0xd4, 0x88, + 0x93, 0xe1, 0xbe, 0xea, 0x68, 0xee, 0xab, 0x0e, 0xe7, 0xee, 0x3b, 0xdb, 0x68, 0x1f, 0x4a, 0x0d, + 0x2f, 0x21, 0x8e, 0x50, 0xa6, 0xef, 0x9c, 0x08, 0x73, 0xe2, 0xf0, 0xa0, 0x65, 0xf6, 0x13, 0x73, + 0x86, 0xe8, 0x9b, 0x16, 0x9c, 0xda, 0x4e, 0xe7, 0x0f, 0x88, 0x5d, 0xc5, 0x39, 0x81, 0xca, 0x40, + 0x69, 0x46, 0xd5, 0x33, 0x87, 0x07, 0xb3, 0xa7, 0x32, 0x8d, 0x38, 0xdb, 0x1d, 0xf4, 0x33, 0x16, + 0x8c, 0xd5, 0x3d, 0xdf, 0xa8, 0x8a, 0x71, 0x02, 0x1f, 0xe7, 0x2a, 0x63, 0xa0, 0x77, 0x5e, 0xfe, + 0x3f, 0xc6, 0x92, 0x73, 0x3f, 0x2f, 0xce, 0xe8, 0x71, 0xbd, 0x38, 0x63, 0x8f, 0xc9, 0x7c, 0xfa, + 0xdb, 0x05, 0x78, 0x71, 0x80, 0x6f, 0x64, 0xc6, 0xa3, 0x5b, 0x47, 0xc4, 0xa3, 0x5f, 0x84, 0x91, + 0x88, 0xb4, 0xc2, 0xec, 0x7e, 0xc7, 0x02, 0x46, 0x18, 0x04, 0xbd, 0x00, 0x45, 0xa7, 0xe5, 0x89, + 0xed, 0x4e, 0x39, 0x79, 0x17, 0x36, 0x56, 0x30, 0x6d, 0xa7, 0x5f, 0xba, 0xb2, 0x2d, 0xb3, 0x5a, + 0xf2, 0x29, 0x7c, 0xda, 0x2f, 0x49, 0x86, 0x1b, 0x34, 0x0a, 0x8a, 0x35, 0x5f, 0x7b, 0x1d, 0xce, + 0xf7, 0x9f, 0x21, 0xe8, 0x55, 0x18, 0xdf, 0x8e, 0x9c, 0xc0, 0xdd, 0x61, 0x45, 0x82, 0xe5, 0x98, + 0xb0, 0x28, 0x64, 0xdd, 0x8c, 0x4d, 0x1c, 0xfb, 0xb7, 0x0b, 0xbd, 0x29, 0x72, 0x21, 0x30, 0xcc, + 0x08, 0x8b, 0xf1, 0x2b, 0xf4, 0x19, 0xbf, 0x77, 0xa0, 0x9c, 0xb0, 0x20, 0x68, 0x52, 0x17, 0x92, + 0x24, 0xb7, 0x3c, 0x1e, 0xb6, 0xd7, 0x6c, 0x09, 0xe2, 0x58, 0xb1, 0xa1, 0x22, 0xdf, 0xd7, 0x05, + 0x35, 0x84, 0xc8, 0xcf, 0x24, 0x0b, 0x2c, 0xc1, 0x69, 0xa3, 0x00, 0x18, 0x8f, 0x01, 0xe5, 0x0e, + 0x38, 0x95, 0x18, 0xb1, 0x91, 0x81, 0xe3, 0xae, 0x27, 0xec, 0x5f, 0x29, 0xc0, 0xb3, 0x7d, 0x25, + 0x9b, 0xf6, 0x12, 0x5a, 0x0f, 0xf0, 0x12, 0x1e, 0x7b, 0x82, 0x9a, 0x03, 0x3c, 0xf2, 0x68, 0x06, + 0xf8, 0x65, 0x28, 0x7b, 0x41, 0x4c, 0xdc, 0x76, 0xc4, 0x07, 0xcd, 0x88, 0xc6, 0x5a, 0x11, 0xed, + 0x58, 0x61, 0xd8, 0xbf, 0xd7, 0x7f, 0xaa, 0xd1, 0x5d, 0xee, 0x07, 0x76, 0x94, 0x5e, 0x87, 0x49, + 0xa7, 0xd5, 0xe2, 0x78, 0xcc, 0x23, 0x93, 0x49, 0x75, 0x5a, 0x30, 0x81, 0x38, 0x8d, 0x6b, 0xcc, + 0xe1, 0xd1, 0x7e, 0x73, 0xd8, 0xfe, 0x93, 0x12, 0x54, 0xe8, 0x08, 0x2c, 0x46, 0xa4, 0x16, 0xd3, + 0x01, 0x68, 0x47, 0x7e, 0xf6, 0xc2, 0xab, 0x5b, 0x78, 0x15, 0xd3, 0xf6, 0x94, 0x95, 0x5c, 0x18, + 0x2a, 0x13, 0xa2, 0x78, 0x64, 0x26, 0xc4, 0xeb, 0x30, 0x19, 0xc7, 0x3b, 0x1b, 0x91, 0xb7, 0xe7, + 0x24, 0x54, 0xf7, 0x16, 0x1e, 0x6f, 0x1d, 0xbd, 0xbc, 0x79, 0x4d, 0x03, 0x71, 0x1a, 0x17, 0x2d, + 0xc3, 0xb4, 0xce, 0x47, 0x20, 0x51, 0xc2, 0x1c, 0xdc, 0x7c, 0xa8, 0x54, 0xf0, 0xb0, 0xce, 0x60, + 0x10, 0x08, 0xb8, 0xfb, 0x19, 0xba, 0xa4, 0x53, 0x8d, 0xb4, 0x23, 0xa3, 0xe9, 0x25, 0x9d, 0xa2, + 0x43, 0xfb, 0xd2, 0xf5, 0x04, 0x5a, 0x83, 0x33, 0x7c, 0x5e, 0xb0, 0x1b, 0x16, 0xd5, 0x1b, 0x8d, + 0x31, 0x42, 0xcf, 0x09, 0x42, 0x67, 0x96, 0xbb, 0x51, 0x70, 0xaf, 0xe7, 0xa8, 0x62, 0xad, 0x9a, + 0x57, 0x96, 0x84, 0x81, 0xa7, 0x14, 0x6b, 0x45, 0x66, 0xa5, 0x86, 0x4d, 0x3c, 0xf4, 0x31, 0x78, + 0x46, 0xff, 0xe5, 0x71, 0x40, 0xfc, 0xd4, 0x63, 0x49, 0xa4, 0x7a, 0xa9, 0xe2, 0x53, 0xcb, 0x3d, + 0xd1, 0x6a, 0xb8, 0xdf, 0xf3, 0x68, 0x1b, 0xce, 0x2b, 0xd0, 0x15, 0x6a, 0xc5, 0xb4, 0x22, 0x2f, + 0x26, 0x55, 0x27, 0x26, 0xb7, 0x22, 0x9f, 0x25, 0x87, 0x55, 0x74, 0x99, 0xdc, 0x65, 0x2f, 0xb9, + 0xd6, 0x0b, 0x13, 0xaf, 0xe2, 0x07, 0x50, 0x41, 0xf3, 0x50, 0x21, 0x81, 0xb3, 0xed, 0x93, 0xf5, + 0xc5, 0x15, 0x96, 0x32, 0x66, 0x1c, 0xb2, 0x5c, 0x91, 0x00, 0xac, 0x71, 0x94, 0x93, 0x65, 0xa2, + 0xaf, 0x93, 0xe5, 0x0f, 0x2d, 0x98, 0x54, 0x93, 0xfd, 0x11, 0x44, 0x33, 0xf8, 0xe9, 0x68, 0x86, + 0xe5, 0xe3, 0x9e, 0x6e, 0x89, 0x9e, 0xf7, 0x71, 0x89, 0xfd, 0x71, 0x05, 0x80, 0x5d, 0x16, 0xed, + 0xb1, 0xea, 0x0d, 0x52, 0xdc, 0x59, 0x7d, 0xc5, 0xdd, 0x13, 0xbb, 0x9c, 0x7b, 0x25, 0x57, 0x94, + 0x1e, 0x6f, 0x72, 0xc5, 0x26, 0x9c, 0x93, 0x9b, 0x11, 0x37, 0xf8, 0xaf, 0x85, 0xb1, 0x92, 0x0e, + 0xe5, 0xea, 0x0b, 0x82, 0xd0, 0xb9, 0x95, 0x5e, 0x48, 0xb8, 0xf7, 0xb3, 0xa9, 0x3d, 0x70, 0xec, + 0xa8, 0x3d, 0x50, 0x2f, 0x88, 0xd5, 0xba, 0xac, 0x03, 0x95, 0x59, 0x10, 0xab, 0x57, 0x37, 0xb1, + 0xc6, 0xe9, 0x2d, 0x15, 0x2b, 0x39, 0x49, 0x45, 0x18, 0x5a, 0x2a, 0xca, 0xf5, 0x39, 0xde, 0xb7, + 0x1a, 0xbb, 0x3c, 0x63, 0x98, 0xe8, 0x7b, 0xc6, 0xf0, 0x06, 0x4c, 0x79, 0xc1, 0x0e, 0x89, 0xbc, + 0x84, 0xd4, 0xd8, 0x5a, 0x10, 0x57, 0xf0, 0xaa, 0x18, 0x82, 0x95, 0x14, 0x14, 0x67, 0xb0, 0xd3, + 0x42, 0x65, 0x6a, 0x00, 0xa1, 0xd2, 0x47, 0x94, 0x9f, 0xca, 0x47, 0x94, 0x9f, 0x3e, 0xbe, 0x28, + 0x9f, 0x3e, 0x51, 0x51, 0x8e, 0x72, 0x11, 0xe5, 0x2f, 0x42, 0xa9, 0x15, 0x85, 0xfb, 0x9d, 0x99, + 0x33, 0x69, 0xf5, 0x6c, 0x83, 0x36, 0x62, 0x0e, 0x33, 0xcd, 0x85, 0xb3, 0x0f, 0x36, 0x17, 0xec, + 0x2f, 0x14, 0xe0, 0x9c, 0x96, 0x74, 0x74, 0x7e, 0x79, 0x75, 0xba, 0xd6, 0x59, 0xb1, 0x3e, 0xee, + 0x88, 0x36, 0xc2, 0x57, 0x74, 0x24, 0x8c, 0x82, 0x60, 0x03, 0x8b, 0x45, 0x81, 0x90, 0x88, 0x55, + 0x67, 0xc8, 0x8a, 0xc1, 0x45, 0xd1, 0x8e, 0x15, 0x06, 0xfd, 0x82, 0xf4, 0xb7, 0x88, 0xac, 0xcb, + 0x66, 0x6c, 0x2e, 0x6a, 0x10, 0x36, 0xf1, 0xd0, 0x4b, 0x9c, 0x09, 0x5b, 0x82, 0x54, 0x14, 0x4e, + 0x88, 0x3a, 0xd3, 0x72, 0xd5, 0x29, 0xa8, 0xec, 0x0e, 0x0b, 0xf7, 0x29, 0x75, 0x77, 0x87, 0x39, + 0x4f, 0x14, 0x86, 0xfd, 0x7f, 0x2d, 0x78, 0xb6, 0xe7, 0x50, 0x3c, 0x82, 0xed, 0x6d, 0x3f, 0xbd, + 0xbd, 0x6d, 0x1e, 0x7f, 0x7b, 0xeb, 0x7a, 0x8b, 0x3e, 0x5b, 0xdd, 0x1f, 0x58, 0x30, 0xa5, 0xf1, + 0x1f, 0xc1, 0xab, 0x7a, 0xe9, 0x57, 0xbd, 0x96, 0xd7, 0xab, 0xf2, 0x93, 0xab, 0xd4, 0xbb, 0xfd, + 0x21, 0x7b, 0x37, 0x7e, 0x06, 0xbd, 0xe0, 0xca, 0xfb, 0x8d, 0x8f, 0x38, 0x7b, 0xed, 0xc0, 0x28, + 0xab, 0xea, 0x1a, 0xe7, 0x73, 0x16, 0x9e, 0xe6, 0xcf, 0xe2, 0xf8, 0xf4, 0x59, 0x38, 0xfb, 0x1b, + 0x63, 0xc1, 0x90, 0xd5, 0x0e, 0xf1, 0x62, 0x2a, 0x2f, 0x6b, 0x22, 0x70, 0x46, 0xd7, 0x0e, 0x11, + 0xed, 0x58, 0x61, 0xd8, 0x4d, 0x98, 0x49, 0x13, 0x5f, 0x22, 0x75, 0xe6, 0x72, 0x1c, 0xe8, 0x35, + 0xe7, 0xa1, 0xe2, 0xb0, 0xa7, 0x56, 0xdb, 0x4e, 0xf6, 0x6a, 0x82, 0x05, 0x09, 0xc0, 0x1a, 0xc7, + 0xfe, 0x0d, 0x0b, 0xce, 0xf4, 0x78, 0x99, 0x1c, 0x03, 0x86, 0x12, 0x2d, 0x05, 0xfa, 0x5c, 0x3c, + 0x5d, 0x23, 0x75, 0x47, 0x3a, 0xb5, 0x0c, 0xa9, 0xb6, 0xc4, 0x9b, 0xb1, 0x84, 0xdb, 0xff, 0xcb, + 0x82, 0x53, 0xe9, 0xbe, 0xc6, 0xe8, 0x3a, 0x20, 0xfe, 0x32, 0x4b, 0x5e, 0xec, 0x86, 0x7b, 0x24, + 0xea, 0xd0, 0x37, 0xe7, 0xbd, 0x3e, 0x2f, 0x28, 0xa1, 0x85, 0x2e, 0x0c, 0xdc, 0xe3, 0x29, 0x56, + 0xdb, 0xa0, 0xa6, 0x46, 0x5b, 0xce, 0x94, 0xdb, 0x79, 0xce, 0x14, 0xfd, 0x31, 0xcd, 0x83, 0x7f, + 0xc5, 0x12, 0x9b, 0xfc, 0xed, 0xef, 0x8d, 0x80, 0x8a, 0x28, 0x64, 0xee, 0x93, 0x9c, 0x9c, 0x4f, + 0xa9, 0xfb, 0x2b, 0x8a, 0x43, 0xdc, 0x84, 0x3d, 0xf2, 0x20, 0xd7, 0x06, 0x2f, 0xa5, 0x6e, 0x1e, + 0xf2, 0xa8, 0x37, 0xdc, 0xd2, 0x20, 0x6c, 0xe2, 0xd1, 0x9e, 0xf8, 0xde, 0x1e, 0xe1, 0x0f, 0x8d, + 0xa6, 0x7b, 0xb2, 0x2a, 0x01, 0x58, 0xe3, 0xd0, 0x9e, 0xd4, 0xbc, 0x7a, 0x5d, 0x58, 0x8a, 0xaa, + 0x27, 0x74, 0x74, 0x30, 0x83, 0x50, 0x8c, 0x9d, 0x30, 0xdc, 0x15, 0xfa, 0x9f, 0xc2, 0xb8, 0x16, + 0x86, 0xbb, 0x98, 0x41, 0xa8, 0xc6, 0x12, 0x84, 0x51, 0x93, 0x5d, 0x1d, 0x51, 0x53, 0x5c, 0x84, + 0xde, 0xa7, 0x34, 0x96, 0x9b, 0xdd, 0x28, 0xb8, 0xd7, 0x73, 0x74, 0x06, 0xb6, 0x22, 0x52, 0xf3, + 0xdc, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xd1, 0x85, 0x81, 0x7b, 0x3c, 0x85, 0x16, 0xe0, 0x94, + 0x8c, 0x08, 0x95, 0x19, 0x2f, 0x5c, 0x19, 0x54, 0x7a, 0x38, 0x4e, 0x83, 0x71, 0x16, 0x9f, 0x4a, + 0x9b, 0xa6, 0x48, 0x76, 0x63, 0x6a, 0xa2, 0x21, 0x6d, 0x64, 0x12, 0x1c, 0x56, 0x18, 0xf6, 0xe7, + 0x8a, 0x74, 0x77, 0xec, 0x53, 0xb0, 0xf1, 0x91, 0x39, 0x3b, 0xd3, 0x33, 0x72, 0x64, 0x80, 0x19, + 0xf9, 0x1a, 0x4c, 0xdc, 0x8d, 0xc3, 0x40, 0x39, 0x12, 0x4b, 0x7d, 0x1d, 0x89, 0x06, 0x56, 0x6f, + 0x47, 0xe2, 0x68, 0x5e, 0x8e, 0xc4, 0xb1, 0x87, 0x74, 0x24, 0xfe, 0x4e, 0x09, 0x54, 0xb9, 0xb5, + 0x9b, 0x24, 0xb9, 0x17, 0x46, 0xbb, 0x5e, 0xd0, 0x60, 0x91, 0xb4, 0xdf, 0xb4, 0x60, 0x82, 0xaf, + 0x17, 0x51, 0x2b, 0x97, 0x47, 0x09, 0xd5, 0x73, 0x2a, 0x31, 0x96, 0x62, 0x36, 0xb7, 0x65, 0x30, + 0xca, 0x14, 0x2e, 0x36, 0x41, 0x38, 0xd5, 0x23, 0xf4, 0x53, 0x00, 0xf2, 0x12, 0x85, 0x7a, 0x4e, + 0xd7, 0xd2, 0xab, 0x2b, 0x2d, 0x48, 0x5d, 0xeb, 0xa6, 0x5b, 0x8a, 0x09, 0x36, 0x18, 0xa2, 0x2f, + 0x64, 0xaf, 0xd6, 0xf9, 0xd4, 0x89, 0x8c, 0xcd, 0x20, 0xa5, 0x71, 0x30, 0x8c, 0x79, 0x41, 0x83, + 0xce, 0x13, 0xe1, 0x7b, 0x7d, 0x7f, 0xaf, 0x28, 0xf4, 0xd5, 0xd0, 0xa9, 0x55, 0x1d, 0xdf, 0x09, + 0x5c, 0x12, 0xad, 0x70, 0x74, 0xb3, 0x92, 0x3e, 0x6b, 0xc0, 0x92, 0x50, 0x57, 0x0d, 0xbd, 0xd2, + 0x20, 0x35, 0xf4, 0xce, 0x7f, 0x04, 0xa6, 0xbb, 0x3e, 0xe6, 0x50, 0xa5, 0x71, 0x1e, 0xbe, 0xaa, + 0x8e, 0xfd, 0x6f, 0x46, 0xf5, 0xa6, 0x75, 0x33, 0xac, 0xf1, 0x4a, 0x6e, 0x91, 0xfe, 0xa2, 0x42, + 0xf7, 0xcc, 0x71, 0x8a, 0x18, 0xd5, 0xf8, 0x55, 0x23, 0x36, 0x59, 0xd2, 0x39, 0xda, 0x72, 0x22, + 0x12, 0x9c, 0xf4, 0x1c, 0xdd, 0x50, 0x4c, 0xb0, 0xc1, 0x10, 0xed, 0xa4, 0xa2, 0xc4, 0xae, 0x1e, + 0x3f, 0x4a, 0x8c, 0x65, 0xa8, 0xf5, 0x2a, 0x55, 0xf5, 0x35, 0x0b, 0xa6, 0x82, 0xd4, 0xcc, 0x15, + 0xe7, 0xf0, 0x5b, 0x27, 0xb1, 0x2a, 0x78, 0xb5, 0xce, 0x74, 0x1b, 0xce, 0xf0, 0xef, 0xb5, 0xa5, + 0x95, 0x86, 0xdc, 0xd2, 0x74, 0x49, 0xc8, 0xd1, 0x7e, 0x25, 0x21, 0x51, 0xa0, 0x0a, 0xcf, 0x8e, + 0xe5, 0x5e, 0x78, 0x16, 0x7a, 0x14, 0x9d, 0xbd, 0x03, 0x15, 0x37, 0x22, 0x4e, 0xf2, 0x90, 0x35, + 0x48, 0x99, 0x13, 0x72, 0x51, 0x12, 0xc0, 0x9a, 0x96, 0xfd, 0x1f, 0x8b, 0x70, 0x5a, 0x8e, 0x88, + 0x8c, 0xa0, 0xa1, 0xfb, 0x23, 0xe7, 0xab, 0x95, 0x5b, 0xb5, 0x3f, 0x5e, 0x93, 0x00, 0xac, 0x71, + 0xa8, 0x3e, 0xd6, 0x8e, 0xc9, 0x7a, 0x8b, 0x04, 0xab, 0xde, 0x76, 0x2c, 0xfc, 0x47, 0x6a, 0xa1, + 0xdc, 0xd2, 0x20, 0x6c, 0xe2, 0x51, 0x65, 0x9c, 0xeb, 0xc5, 0x71, 0x36, 0x20, 0x4d, 0xe8, 0xdb, + 0x58, 0xc2, 0xd1, 0x2f, 0xf5, 0xac, 0x20, 0x9d, 0x4f, 0x28, 0x66, 0x57, 0xe0, 0xd0, 0x90, 0xa5, + 0xa3, 0xbf, 0x6a, 0xc1, 0xa9, 0xdd, 0x54, 0x16, 0x82, 0x14, 0xc9, 0xc7, 0xcc, 0x97, 0x4b, 0xa7, + 0x36, 0xe8, 0x29, 0x9c, 0x6e, 0x8f, 0x71, 0x96, 0xbb, 0xfd, 0x7f, 0x2c, 0x30, 0xc5, 0xd3, 0x60, + 0x9a, 0x95, 0x71, 0x27, 0x40, 0xe1, 0x88, 0x3b, 0x01, 0xa4, 0x12, 0x56, 0x1c, 0x4c, 0xe9, 0x1f, + 0x19, 0x42, 0xe9, 0x2f, 0xf5, 0xd5, 0xda, 0x5e, 0x80, 0x62, 0xdb, 0xab, 0x09, 0xbd, 0x5d, 0x3b, + 0xc3, 0x56, 0x96, 0x30, 0x6d, 0xb7, 0xff, 0x65, 0x49, 0xdb, 0xe9, 0x22, 0x82, 0xf0, 0x07, 0xe2, + 0xb5, 0xeb, 0x2a, 0xfd, 0x91, 0xbf, 0xf9, 0xcd, 0xae, 0xf4, 0xc7, 0x1f, 0x1d, 0x3e, 0x40, 0x94, + 0x0f, 0x50, 0xbf, 0xec, 0xc7, 0xb1, 0x23, 0xa2, 0x43, 0xef, 0x42, 0x99, 0x9a, 0x36, 0xec, 0xc0, + 0xad, 0x9c, 0xea, 0x54, 0xf9, 0x9a, 0x68, 0xbf, 0x7f, 0x30, 0xfb, 0x23, 0xc3, 0x77, 0x4b, 0x3e, + 0x8d, 0x15, 0x7d, 0x14, 0x43, 0x85, 0xfe, 0x66, 0x81, 0xac, 0xc2, 0x68, 0xba, 0xa5, 0x64, 0x91, + 0x04, 0xe4, 0x12, 0x25, 0xab, 0xf9, 0xa0, 0x00, 0x2a, 0xac, 0x7a, 0x3d, 0x63, 0xca, 0x6d, 0xab, + 0x0d, 0x15, 0x4e, 0x2a, 0x01, 0xf7, 0x0f, 0x66, 0x5f, 0x1f, 0x9e, 0xa9, 0x7a, 0x1c, 0x6b, 0x16, + 0xf6, 0x7f, 0x2b, 0xea, 0xb9, 0x2b, 0xb2, 0x5e, 0x7f, 0x20, 0xe6, 0xee, 0xe5, 0xcc, 0xdc, 0xbd, + 0xd8, 0x35, 0x77, 0xa7, 0x74, 0x85, 0xf7, 0xd4, 0x6c, 0x7c, 0xd4, 0x1b, 0xec, 0xd1, 0x76, 0x3c, + 0xd3, 0x2c, 0xde, 0x69, 0x7b, 0x11, 0x89, 0x37, 0xa2, 0x76, 0xe0, 0x05, 0x0d, 0x71, 0xcf, 0x8f, + 0xa1, 0x59, 0xa4, 0xc0, 0x38, 0x8b, 0x6f, 0x7f, 0x8b, 0xf9, 0x3b, 0x8d, 0x98, 0x78, 0xfa, 0x95, + 0x7d, 0x76, 0x01, 0x00, 0xcf, 0x0b, 0x54, 0x5f, 0x99, 0x57, 0xfd, 0xe7, 0x30, 0x74, 0x0f, 0xc6, + 0xb6, 0x79, 0x61, 0xe0, 0x7c, 0xaa, 0x00, 0x89, 0x2a, 0xc3, 0xac, 0x58, 0x9e, 0x2c, 0x39, 0x7c, + 0x5f, 0xff, 0xc4, 0x92, 0x9b, 0xfd, 0xf7, 0x8b, 0x70, 0x2a, 0x53, 0x9e, 0x3e, 0x55, 0x93, 0xa0, + 0x70, 0x64, 0x4d, 0x82, 0x4f, 0x00, 0xd4, 0x48, 0xcb, 0x0f, 0x3b, 0x4c, 0x71, 0x19, 0x19, 0x5a, + 0x71, 0x51, 0xba, 0xee, 0x92, 0xa2, 0x82, 0x0d, 0x8a, 0x22, 0x19, 0x92, 0x97, 0x38, 0xc8, 0x24, + 0x43, 0x1a, 0xc5, 0xb0, 0x46, 0x1f, 0x6d, 0x31, 0x2c, 0x0f, 0x4e, 0xf1, 0x2e, 0xaa, 0xc8, 0xf3, + 0x87, 0x08, 0x30, 0x67, 0x31, 0x8b, 0x4b, 0x69, 0x32, 0x38, 0x4b, 0xd7, 0xfe, 0x4a, 0x81, 0xaa, + 0x6f, 0x7c, 0xb0, 0xd7, 0xe4, 0xe1, 0xf8, 0xfb, 0x60, 0xd4, 0x69, 0x27, 0x3b, 0x61, 0x57, 0x85, + 0xe3, 0x05, 0xd6, 0x8a, 0x05, 0x14, 0xad, 0xc2, 0x88, 0x71, 0xad, 0xfc, 0x30, 0x9d, 0xd3, 0x27, + 0x61, 0x4e, 0x42, 0x30, 0xa3, 0x82, 0x9e, 0x87, 0x91, 0xc4, 0x69, 0xa4, 0x2e, 0x75, 0xda, 0x72, + 0x1a, 0x31, 0x66, 0xad, 0xe6, 0xee, 0x32, 0x72, 0xc4, 0xee, 0xf2, 0x3a, 0x4c, 0xc6, 0x5e, 0x23, + 0x70, 0x92, 0x76, 0x44, 0x0c, 0xaf, 0x8b, 0x76, 0x55, 0x9b, 0x40, 0x9c, 0xc6, 0xb5, 0xbf, 0x57, + 0x81, 0xb3, 0xbd, 0x6e, 0xd7, 0xcc, 0x3b, 0xec, 0xb7, 0x17, 0x8f, 0x47, 0x17, 0xf6, 0xdb, 0x87, + 0xbb, 0x6f, 0x84, 0xfd, 0xfa, 0x46, 0xd8, 0xef, 0x17, 0x2c, 0xa8, 0xa8, 0x68, 0xd7, 0x7c, 0x2e, + 0xb0, 0xee, 0x79, 0x83, 0xa9, 0x64, 0x21, 0x82, 0x1e, 0xe5, 0x5f, 0xac, 0x99, 0x9f, 0x5c, 0x1c, + 0xf0, 0x03, 0x3b, 0x34, 0x54, 0x1c, 0xb0, 0x0a, 0x92, 0x2e, 0xe5, 0x11, 0x24, 0xdd, 0xe7, 0x53, + 0xf5, 0x0c, 0x92, 0xfe, 0x9a, 0x05, 0xe3, 0xce, 0xbb, 0xed, 0x88, 0x2c, 0x91, 0xbd, 0xf5, 0x56, + 0x2c, 0xe4, 0xd6, 0xdb, 0xf9, 0x77, 0x60, 0x41, 0x33, 0x11, 0xa5, 0x18, 0x75, 0x03, 0x36, 0xbb, + 0x90, 0x0a, 0x8a, 0x1e, 0xcb, 0x23, 0x28, 0xba, 0x57, 0x77, 0x8e, 0x0c, 0x8a, 0x7e, 0x1d, 0x26, + 0x5d, 0x3f, 0x0c, 0xc8, 0x46, 0x14, 0x26, 0xa1, 0x1b, 0xfa, 0x42, 0xeb, 0x54, 0x22, 0x61, 0xd1, + 0x04, 0xe2, 0x34, 0x6e, 0xbf, 0x88, 0xea, 0xca, 0x71, 0x23, 0xaa, 0xe1, 0x31, 0x45, 0x54, 0xff, + 0x69, 0x01, 0x66, 0x8f, 0xf8, 0xa8, 0xe8, 0x32, 0x4c, 0x84, 0x51, 0xc3, 0x09, 0xbc, 0x77, 0x79, + 0x42, 0x5b, 0x29, 0x9d, 0xa9, 0xbe, 0x6e, 0xc0, 0x70, 0x0a, 0x53, 0xc6, 0x5c, 0x8e, 0xf6, 0x89, + 0xb9, 0xfc, 0x10, 0x8c, 0x27, 0xc4, 0x69, 0x8a, 0x10, 0x00, 0x61, 0x29, 0x68, 0xcf, 0x8b, 0x06, + 0x61, 0x13, 0x8f, 0x4e, 0xa3, 0x29, 0xc7, 0x75, 0x49, 0x1c, 0xcb, 0xa0, 0x4a, 0x71, 0x8a, 0x91, + 0x5b, 0xc4, 0x26, 0x3b, 0x1c, 0x5a, 0x48, 0xb1, 0xc0, 0x19, 0x96, 0xb4, 0xf3, 0x8e, 0xef, 0xf3, + 0xf8, 0x69, 0x22, 0xaf, 0x69, 0xd4, 0x45, 0xbf, 0x35, 0x08, 0x9b, 0x78, 0xf6, 0xaf, 0x16, 0xe0, + 0x85, 0x07, 0x8a, 0x97, 0x81, 0xe3, 0x5d, 0xdb, 0x31, 0x89, 0xb2, 0x9e, 0x8b, 0x5b, 0x31, 0x89, + 0x30, 0x83, 0xf0, 0x51, 0x6a, 0xb5, 0x8c, 0x6b, 0x0c, 0xf2, 0x0e, 0xaf, 0xe6, 0xa3, 0x94, 0x62, + 0x81, 0x33, 0x2c, 0xb3, 0xa3, 0x34, 0x32, 0xe0, 0x28, 0xfd, 0xe3, 0x02, 0xbc, 0x38, 0x80, 0x10, + 0xce, 0x31, 0x0c, 0x3d, 0x1d, 0xc6, 0x5f, 0x7c, 0x3c, 0x61, 0xfc, 0x0f, 0x3b, 0x5c, 0xdf, 0x2a, + 0xc0, 0xf9, 0xfe, 0xb2, 0x10, 0xfd, 0x18, 0xb5, 0x36, 0x64, 0x54, 0x82, 0x99, 0x02, 0x70, 0x86, + 0x5b, 0x1a, 0x29, 0x10, 0xce, 0xe2, 0xa2, 0x39, 0x80, 0x96, 0x93, 0xec, 0xc4, 0x57, 0xf6, 0xbd, + 0x38, 0x11, 0xc9, 0x6b, 0x53, 0xfc, 0xcc, 0x58, 0xb6, 0x62, 0x03, 0x83, 0xb2, 0x63, 0xff, 0x96, + 0xc2, 0x9b, 0x61, 0xc2, 0x1f, 0xe2, 0x7a, 0xdc, 0x19, 0x7e, 0xaf, 0x6a, 0x0a, 0x84, 0xb3, 0xb8, + 0x94, 0x1d, 0xf3, 0x4a, 0xf0, 0x8e, 0x8a, 0x3b, 0x68, 0x29, 0xbb, 0x55, 0xd5, 0x8a, 0x0d, 0x8c, + 0x6c, 0x72, 0x43, 0x69, 0x80, 0xe4, 0x86, 0x7f, 0x5e, 0x80, 0x67, 0xfb, 0xee, 0xa5, 0x83, 0x2d, + 0xc0, 0x27, 0x2f, 0xab, 0xe1, 0xe1, 0xe6, 0xce, 0x90, 0xb1, 0xfa, 0xff, 0xb9, 0xcf, 0x4c, 0x13, + 0xb1, 0xfa, 0xd9, 0xad, 0xc2, 0x1a, 0x76, 0xab, 0x78, 0x82, 0xc6, 0xb3, 0x2b, 0x3c, 0x7f, 0x64, + 0x88, 0xf0, 0xfc, 0xcc, 0xc7, 0x28, 0x0d, 0xb8, 0x90, 0xbf, 0xd3, 0x7f, 0x78, 0xa9, 0xee, 0x3d, + 0xd0, 0x39, 0xce, 0x12, 0x9c, 0x16, 0x97, 0x59, 0x6f, 0xb6, 0xb7, 0x45, 0x6a, 0x63, 0x21, 0x7d, + 0xa5, 0xc7, 0x4a, 0x06, 0x8e, 0xbb, 0x9e, 0x78, 0x02, 0xd3, 0x25, 0x1e, 0x72, 0x48, 0x3f, 0x01, + 0x15, 0x45, 0x9b, 0x87, 0x10, 0xaa, 0x0f, 0xda, 0x15, 0x42, 0xa8, 0xbe, 0xa6, 0x81, 0x45, 0x47, + 0x62, 0x97, 0x74, 0xb2, 0x33, 0xf3, 0x06, 0xe9, 0x30, 0x77, 0xa2, 0xfd, 0x41, 0x98, 0x50, 0x46, + 0xe4, 0xa0, 0x65, 0x05, 0xed, 0xff, 0x39, 0x02, 0x93, 0xa9, 0x14, 0xf6, 0xd4, 0x51, 0x88, 0x75, + 0xe4, 0x51, 0x08, 0x0b, 0xba, 0x6c, 0x07, 0xb2, 0xea, 0xa6, 0x11, 0x74, 0xd9, 0x0e, 0x08, 0xe6, + 0x30, 0x6a, 0xba, 0xd7, 0xa2, 0x0e, 0x6e, 0x07, 0x22, 0x74, 0x4b, 0x99, 0xee, 0x4b, 0xac, 0x15, + 0x0b, 0x28, 0xfa, 0xac, 0x05, 0x13, 0x31, 0x3b, 0x39, 0xe3, 0x07, 0x49, 0xe2, 0x83, 0x5e, 0xcf, + 0xe3, 0xb6, 0x45, 0x51, 0xae, 0x81, 0x79, 0x7d, 0xcd, 0x16, 0x9c, 0xe2, 0x88, 0x7e, 0xd6, 0x32, + 0xef, 0x99, 0x1c, 0xcd, 0x23, 0xe4, 0x30, 0x5b, 0x21, 0x80, 0x1f, 0xb3, 0x3c, 0xf8, 0xba, 0xc9, + 0x58, 0x9d, 0xf2, 0x8c, 0x9d, 0xcc, 0x29, 0x0f, 0xf4, 0x38, 0xe1, 0xf9, 0x00, 0x54, 0x9a, 0x4e, + 0xe0, 0xd5, 0x49, 0x9c, 0xc4, 0x33, 0x65, 0xa3, 0x70, 0x89, 0x6c, 0xc4, 0x1a, 0x4e, 0x37, 0xbb, + 0x98, 0xbd, 0x18, 0xf7, 0x74, 0x55, 0x74, 0x01, 0xfc, 0x4d, 0xdd, 0x8c, 0x4d, 0x1c, 0xfb, 0x9f, + 0x59, 0x70, 0xae, 0xe7, 0x60, 0x3c, 0xb9, 0x31, 0x32, 0x74, 0x83, 0x3e, 0xd3, 0xa3, 0xc4, 0x03, + 0xea, 0x9c, 0xd8, 0x75, 0xa4, 0xa2, 0x86, 0xc4, 0x64, 0xdf, 0xb9, 0x31, 0xdc, 0x59, 0xa5, 0x3e, + 0x2f, 0x2c, 0x3e, 0xd2, 0xf3, 0x42, 0xaa, 0x0a, 0x1a, 0x17, 0xe7, 0xa2, 0xcf, 0x98, 0xd5, 0x4c, + 0xac, 0xbc, 0x2a, 0x6f, 0x70, 0xe2, 0xaa, 0x1a, 0x0a, 0x1f, 0xb5, 0x5e, 0xc5, 0x51, 0xb2, 0xf3, + 0xb5, 0x70, 0xf4, 0x7c, 0x45, 0xbe, 0x2c, 0x1b, 0x53, 0xcc, 0xbf, 0x6c, 0x4c, 0xa5, 0xab, 0x64, + 0xcc, 0xdf, 0xb5, 0xf8, 0x4c, 0xcb, 0xbc, 0x92, 0x96, 0xb0, 0xd6, 0x03, 0x24, 0xec, 0xcb, 0xec, + 0x82, 0x97, 0xfa, 0x35, 0xe2, 0xf8, 0x42, 0x12, 0x9b, 0x77, 0xb5, 0xb0, 0x76, 0xac, 0x30, 0x58, + 0x39, 0x68, 0xdf, 0x0f, 0xef, 0x5d, 0x69, 0xb6, 0x92, 0x8e, 0x90, 0xc9, 0xba, 0x1c, 0xb4, 0x82, + 0x60, 0x03, 0xcb, 0xfe, 0x33, 0x8b, 0x7f, 0x4e, 0xe1, 0xc8, 0xb9, 0x9c, 0x29, 0x5f, 0x3a, 0xb8, + 0x0f, 0xe4, 0xd3, 0x00, 0xae, 0xba, 0xdb, 0x21, 0x9f, 0xfb, 0x74, 0xf5, 0x5d, 0x11, 0xe6, 0x25, + 0xaf, 0xb2, 0x0d, 0x1b, 0xfc, 0x52, 0x8b, 0xa7, 0x78, 0xd4, 0xe2, 0xb1, 0xff, 0xd4, 0x82, 0xd4, + 0x66, 0x81, 0x5a, 0x50, 0xa2, 0x3d, 0xe8, 0xe4, 0x73, 0x13, 0x85, 0x49, 0x9a, 0x2e, 0x2c, 0x31, + 0x2d, 0xd8, 0x4f, 0xcc, 0x19, 0x21, 0x5f, 0xb8, 0x70, 0x0a, 0x79, 0xdc, 0x96, 0x62, 0x32, 0xbc, + 0x16, 0x86, 0xbb, 0xfc, 0x40, 0x5b, 0xbb, 0x83, 0xec, 0xcb, 0x30, 0xdd, 0xd5, 0x29, 0x56, 0x7c, + 0x30, 0x94, 0xd7, 0x6f, 0x18, 0x33, 0x90, 0x95, 0x42, 0xc5, 0x1c, 0x66, 0x7f, 0xcb, 0x82, 0xd3, + 0x59, 0xf2, 0xe8, 0x1b, 0x16, 0x4c, 0xc7, 0x59, 0x7a, 0x27, 0x35, 0x76, 0x2a, 0xbc, 0xa1, 0x0b, + 0x84, 0xbb, 0x3b, 0x61, 0xff, 0x7f, 0x21, 0x9e, 0xee, 0x78, 0x41, 0x2d, 0xbc, 0xa7, 0x36, 0x17, + 0xab, 0xef, 0xe6, 0x42, 0x97, 0x98, 0xbb, 0x43, 0x6a, 0x6d, 0xbf, 0x2b, 0x81, 0x63, 0x53, 0xb4, + 0x63, 0x85, 0x91, 0xba, 0xeb, 0xb2, 0x78, 0xe4, 0x5d, 0x97, 0xaf, 0xc1, 0x84, 0x79, 0xc5, 0x8c, + 0xc8, 0x06, 0x67, 0xba, 0x8a, 0x79, 0x1b, 0x0d, 0x4e, 0x61, 0x65, 0x2e, 0x19, 0x2c, 0x1d, 0x79, + 0xc9, 0xe0, 0x4b, 0x50, 0x16, 0x17, 0xe6, 0xc9, 0x20, 0x20, 0x9e, 0x1d, 0x22, 0xda, 0xb0, 0x82, + 0x52, 0x01, 0xd1, 0x74, 0x82, 0xb6, 0xe3, 0xd3, 0x11, 0x12, 0x49, 0x63, 0x6a, 0x65, 0xad, 0x29, + 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0x27, 0x5e, 0x93, 0xbc, 0x15, 0x06, 0xd2, 0x7d, 0xae, 0x8f, 0xfb, + 0x44, 0x3b, 0x56, 0x18, 0xf6, 0xff, 0xb0, 0x20, 0x7b, 0xdb, 0x57, 0xca, 0x00, 0xb4, 0x8e, 0x4c, + 0x54, 0x4b, 0x27, 0xe1, 0x14, 0x06, 0x4a, 0xc2, 0x31, 0xf3, 0x63, 0x8a, 0x0f, 0xcc, 0x8f, 0xf9, + 0x21, 0x5d, 0xc2, 0x9a, 0x27, 0xd2, 0x8c, 0xf7, 0x2a, 0x5f, 0x8d, 0x6c, 0x18, 0x75, 0x1d, 0x95, + 0x07, 0x3c, 0xc1, 0xd5, 0xaa, 0xc5, 0x05, 0x86, 0x24, 0x20, 0xd5, 0xed, 0x6f, 0x7f, 0xff, 0xc2, + 0x53, 0xdf, 0xf9, 0xfe, 0x85, 0xa7, 0x7e, 0xff, 0xfb, 0x17, 0x9e, 0xfa, 0xec, 0xe1, 0x05, 0xeb, + 0xdb, 0x87, 0x17, 0xac, 0xef, 0x1c, 0x5e, 0xb0, 0x7e, 0xff, 0xf0, 0x82, 0xf5, 0xbd, 0xc3, 0x0b, + 0xd6, 0xd7, 0xfe, 0xeb, 0x85, 0xa7, 0xde, 0xea, 0x19, 0xee, 0x40, 0x7f, 0xbc, 0xe2, 0xd6, 0xe6, + 0xf7, 0x2e, 0x31, 0x8f, 0x3b, 0x5d, 0x0d, 0xf3, 0xc6, 0x14, 0x98, 0x97, 0xab, 0xe1, 0x2f, 0x02, + 0x00, 0x00, 0xff, 0xff, 0x31, 0xb2, 0xdf, 0x8d, 0xa8, 0xb8, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -4802,6 +4968,48 @@ func (m *ApplicationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ApplicationMatchExpression) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationMatchExpression) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationMatchExpression) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Values) > 0 { + for iNdEx := len(m.Values) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Values[iNdEx]) + copy(dAtA[i:], m.Values[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Operator) + copy(dAtA[i:], m.Operator) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Operator))) + i-- + dAtA[i] = 0x12 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ApplicationSet) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4855,6 +5063,61 @@ func (m *ApplicationSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ApplicationSetApplicationStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationSetApplicationStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationSetApplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x2a + i -= len(m.ObservedHash) + copy(dAtA[i:], m.ObservedHash) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ObservedHash))) + i-- + dAtA[i] = 0x22 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x1a + if m.LastTransitionTime != nil { + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Application) + copy(dAtA[i:], m.Application) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Application))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ApplicationSetCondition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5219,6 +5482,92 @@ func (m *ApplicationSetNestedGenerator) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *ApplicationSetRolloutStep) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationSetRolloutStep) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationSetRolloutStep) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxUpdate != nil { + { + size, err := m.MaxUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.MatchExpressions) > 0 { + for iNdEx := len(m.MatchExpressions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MatchExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ApplicationSetRolloutStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationSetRolloutStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationSetRolloutStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Steps) > 0 { + for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *ApplicationSetSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5239,6 +5588,18 @@ func (m *ApplicationSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Strategy != nil { + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } if m.SyncPolicy != nil { { size, err := m.SyncPolicy.MarshalToSizedBuffer(dAtA[:i]) @@ -5306,6 +5667,20 @@ func (m *ApplicationSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ApplicationStatus) > 0 { + for iNdEx := len(m.ApplicationStatus) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ApplicationStatus[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } if len(m.Conditions) > 0 { for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { { @@ -5323,7 +5698,7 @@ func (m *ApplicationSetStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ApplicationSetSyncPolicy) Marshal() (dAtA []byte, err error) { +func (m *ApplicationSetStrategy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5333,33 +5708,85 @@ func (m *ApplicationSetSyncPolicy) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ApplicationSetSyncPolicy) MarshalTo(dAtA []byte) (int, error) { +func (m *ApplicationSetStrategy) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ApplicationSetSyncPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ApplicationSetStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - i-- - if m.PreserveResourcesOnDeletion { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - -func (m *ApplicationSetTemplate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err + if m.RollingUpdate != nil { + { + size, err := m.RollingUpdate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.RollingSync != nil { + { + size, err := m.RollingSync.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ApplicationSetSyncPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationSetSyncPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationSetSyncPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.PreserveResourcesOnDeletion { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *ApplicationSetTemplate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } return dAtA[:n], nil } @@ -11835,6 +12262,25 @@ func (m *ApplicationList) Size() (n int) { return n } +func (m *ApplicationMatchExpression) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *ApplicationSet) Size() (n int) { if m == nil { return 0 @@ -11850,6 +12296,27 @@ func (m *ApplicationSet) Size() (n int) { return n } +func (m *ApplicationSetApplicationStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Application) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastTransitionTime != nil { + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ObservedHash) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *ApplicationSetCondition) Size() (n int) { if m == nil { return 0 @@ -11978,6 +12445,40 @@ func (m *ApplicationSetNestedGenerator) Size() (n int) { return n } +func (m *ApplicationSetRolloutStep) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MatchExpressions) > 0 { + for _, e := range m.MatchExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.MaxUpdate != nil { + l = m.MaxUpdate.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ApplicationSetRolloutStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Steps) > 0 { + for _, e := range m.Steps { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *ApplicationSetSpec) Size() (n int) { if m == nil { return 0 @@ -11997,6 +12498,10 @@ func (m *ApplicationSetSpec) Size() (n int) { l = m.SyncPolicy.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Strategy != nil { + l = m.Strategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -12012,6 +12517,31 @@ func (m *ApplicationSetStatus) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if len(m.ApplicationStatus) > 0 { + for _, e := range m.ApplicationStatus { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ApplicationSetStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.RollingSync != nil { + l = m.RollingSync.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RollingUpdate != nil { + l = m.RollingUpdate.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -14551,6 +15081,18 @@ func (this *ApplicationList) String() string { }, "") return s } +func (this *ApplicationMatchExpression) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ApplicationMatchExpression{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} func (this *ApplicationSet) String() string { if this == nil { return "nil" @@ -14563,6 +15105,20 @@ func (this *ApplicationSet) String() string { }, "") return s } +func (this *ApplicationSetApplicationStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ApplicationSetApplicationStatus{`, + `Application:` + fmt.Sprintf("%v", this.Application) + `,`, + `LastTransitionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `ObservedHash:` + fmt.Sprintf("%v", this.ObservedHash) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `}`, + }, "") + return s +} func (this *ApplicationSetCondition) String() string { if this == nil { return "nil" @@ -14629,6 +15185,37 @@ func (this *ApplicationSetNestedGenerator) String() string { }, "") return s } +func (this *ApplicationSetRolloutStep) String() string { + if this == nil { + return "nil" + } + repeatedStringForMatchExpressions := "[]ApplicationMatchExpression{" + for _, f := range this.MatchExpressions { + repeatedStringForMatchExpressions += strings.Replace(strings.Replace(f.String(), "ApplicationMatchExpression", "ApplicationMatchExpression", 1), `&`, ``, 1) + "," + } + repeatedStringForMatchExpressions += "}" + s := strings.Join([]string{`&ApplicationSetRolloutStep{`, + `MatchExpressions:` + repeatedStringForMatchExpressions + `,`, + `MaxUpdate:` + strings.Replace(fmt.Sprintf("%v", this.MaxUpdate), "IntOrString", "intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ApplicationSetRolloutStrategy) String() string { + if this == nil { + return "nil" + } + repeatedStringForSteps := "[]ApplicationSetRolloutStep{" + for _, f := range this.Steps { + repeatedStringForSteps += strings.Replace(strings.Replace(f.String(), "ApplicationSetRolloutStep", "ApplicationSetRolloutStep", 1), `&`, ``, 1) + "," + } + repeatedStringForSteps += "}" + s := strings.Join([]string{`&ApplicationSetRolloutStrategy{`, + `Steps:` + repeatedStringForSteps + `,`, + `}`, + }, "") + return s +} func (this *ApplicationSetSpec) String() string { if this == nil { return "nil" @@ -14643,6 +15230,7 @@ func (this *ApplicationSetSpec) String() string { `Generators:` + repeatedStringForGenerators + `,`, `Template:` + strings.Replace(strings.Replace(this.Template.String(), "ApplicationSetTemplate", "ApplicationSetTemplate", 1), `&`, ``, 1) + `,`, `SyncPolicy:` + strings.Replace(this.SyncPolicy.String(), "ApplicationSetSyncPolicy", "ApplicationSetSyncPolicy", 1) + `,`, + `Strategy:` + strings.Replace(this.Strategy.String(), "ApplicationSetStrategy", "ApplicationSetStrategy", 1) + `,`, `}`, }, "") return s @@ -14656,8 +15244,26 @@ func (this *ApplicationSetStatus) String() string { repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "ApplicationSetCondition", "ApplicationSetCondition", 1), `&`, ``, 1) + "," } repeatedStringForConditions += "}" + repeatedStringForApplicationStatus := "[]ApplicationSetApplicationStatus{" + for _, f := range this.ApplicationStatus { + repeatedStringForApplicationStatus += strings.Replace(strings.Replace(f.String(), "ApplicationSetApplicationStatus", "ApplicationSetApplicationStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForApplicationStatus += "}" s := strings.Join([]string{`&ApplicationSetStatus{`, `Conditions:` + repeatedStringForConditions + `,`, + `ApplicationStatus:` + repeatedStringForApplicationStatus + `,`, + `}`, + }, "") + return s +} +func (this *ApplicationSetStrategy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ApplicationSetStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `RollingSync:` + strings.Replace(this.RollingSync.String(), "ApplicationSetRolloutStrategy", "ApplicationSetRolloutStrategy", 1) + `,`, + `RollingUpdate:` + strings.Replace(this.RollingUpdate.String(), "ApplicationSetRolloutStrategy", "ApplicationSetRolloutStrategy", 1) + `,`, `}`, }, "") return s @@ -18060,7 +18666,7 @@ func (m *ApplicationList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSet) Unmarshal(dAtA []byte) error { +func (m *ApplicationMatchExpression) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18083,17 +18689,17 @@ func (m *ApplicationSet) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSet: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationMatchExpression: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSet: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationMatchExpression: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18103,30 +18709,29 @@ func (m *ApplicationSet) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18136,30 +18741,29 @@ func (m *ApplicationSet) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Operator = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18169,24 +18773,23 @@ func (m *ApplicationSet) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Values = append(m.Values, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -18209,7 +18812,7 @@ func (m *ApplicationSet) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { +func (m *ApplicationSet) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18232,17 +18835,17 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetCondition: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSet: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetCondition: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationSet: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18252,29 +18855,30 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Type = ApplicationSetConditionType(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18284,27 +18888,913 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationSetApplicationStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationSetApplicationStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationSetApplicationStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Application", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Application = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastTransitionTime == nil { + m.LastTransitionTime = &v1.Time{} + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ObservedHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationSetCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationSetCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = ApplicationSetConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastTransitionTime == nil { + m.LastTransitionTime = &v1.Time{} + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = ApplicationSetConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationSetGenerator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationSetGenerator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field List", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.List == nil { + m.List = &ListGenerator{} + } + if err := m.List.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Clusters == nil { + m.Clusters = &ClusterGenerator{} + } + if err := m.Clusters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Git == nil { + m.Git = &GitGenerator{} + } + if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SCMProvider", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SCMProvider == nil { + m.SCMProvider = &SCMProviderGenerator{} + } + if err := m.SCMProvider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterDecisionResource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ClusterDecisionResource == nil { + m.ClusterDecisionResource = &DuckTypeGenerator{} + } + if err := m.ClusterDecisionResource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PullRequest", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PullRequest == nil { + m.PullRequest = &PullRequestGenerator{} + } + if err := m.PullRequest.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Matrix", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Matrix == nil { + m.Matrix = &MatrixGenerator{} + } + if err := m.Matrix.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Merge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Merge == nil { + m.Merge = &MergeGenerator{} + } + if err := m.Merge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationSetList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationSetList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -18331,18 +19821,15 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastTransitionTime == nil { - m.LastTransitionTime = &v1.Time{} - } - if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -18352,55 +19839,25 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Status = ApplicationSetConditionStatus(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + m.Items = append(m.Items, ApplicationSet{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Reason = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -18423,7 +19880,7 @@ func (m *ApplicationSetCondition) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { +func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18446,10 +19903,10 @@ func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetGenerator: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSetNestedGenerator: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetGenerator: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationSetNestedGenerator: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -18698,7 +20155,7 @@ func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Matrix == nil { - m.Matrix = &MatrixGenerator{} + m.Matrix = &v11.JSON{} } if err := m.Matrix.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -18734,7 +20191,7 @@ func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Merge == nil { - m.Merge = &MergeGenerator{} + m.Merge = &v11.JSON{} } if err := m.Merge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -18797,7 +20254,7 @@ func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { +func (m *ApplicationSetRolloutStep) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18820,15 +20277,15 @@ func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetList: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSetRolloutStep: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationSetRolloutStep: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchExpressions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -18855,13 +20312,14 @@ func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.MatchExpressions = append(m.MatchExpressions, ApplicationMatchExpression{}) + if err := m.MatchExpressions[len(m.MatchExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxUpdate", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -18888,8 +20346,10 @@ func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, ApplicationSet{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.MaxUpdate == nil { + m.MaxUpdate = &intstr.IntOrString{} + } + if err := m.MaxUpdate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -18914,7 +20374,7 @@ func (m *ApplicationSetList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { +func (m *ApplicationSetRolloutStrategy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18937,159 +20397,15 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetNestedGenerator: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSetRolloutStrategy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetNestedGenerator: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field List", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.List == nil { - m.List = &ListGenerator{} - } - if err := m.List.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Clusters", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Clusters == nil { - m.Clusters = &ClusterGenerator{} - } - if err := m.Clusters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Git == nil { - m.Git = &GitGenerator{} - } - if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SCMProvider", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SCMProvider == nil { - m.SCMProvider = &SCMProviderGenerator{} - } - if err := m.SCMProvider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: + return fmt.Errorf("proto: ApplicationSetRolloutStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClusterDecisionResource", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19116,16 +20432,84 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ClusterDecisionResource == nil { - m.ClusterDecisionResource = &DuckTypeGenerator{} - } - if err := m.ClusterDecisionResource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Steps = append(m.Steps, ApplicationSetRolloutStep{}) + if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 6: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationSetSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationSetSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GoTemplate", 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.GoTemplate = bool(v != 0) + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PullRequest", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Generators", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19152,16 +20536,14 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.PullRequest == nil { - m.PullRequest = &PullRequestGenerator{} - } - if err := m.PullRequest.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Generators = append(m.Generators, ApplicationSetGenerator{}) + if err := m.Generators[len(m.Generators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Matrix", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19188,16 +20570,13 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Matrix == nil { - m.Matrix = &v11.JSON{} - } - if err := m.Matrix.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Merge", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SyncPolicy", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19224,16 +20603,16 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Merge == nil { - m.Merge = &v11.JSON{} + if m.SyncPolicy == nil { + m.SyncPolicy = &ApplicationSetSyncPolicy{} } - if err := m.Merge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SyncPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Strategy", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19260,10 +20639,10 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Selector == nil { - m.Selector = &v1.LabelSelector{} + if m.Strategy == nil { + m.Strategy = &ApplicationSetStrategy{} } - if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Strategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -19288,7 +20667,7 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { +func (m *ApplicationSetStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19311,69 +20690,15 @@ func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetSpec: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSetStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationSetStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field GoTemplate", 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.GoTemplate = bool(v != 0) - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Generators", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Generators = append(m.Generators, ApplicationSetGenerator{}) - if err := m.Generators[len(m.Generators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19400,13 +20725,14 @@ func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Conditions = append(m.Conditions, ApplicationSetCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SyncPolicy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationStatus", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19433,10 +20759,8 @@ func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.SyncPolicy == nil { - m.SyncPolicy = &ApplicationSetSyncPolicy{} - } - if err := m.SyncPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.ApplicationStatus = append(m.ApplicationStatus, ApplicationSetApplicationStatus{}) + if err := m.ApplicationStatus[len(m.ApplicationStatus)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -19461,7 +20785,7 @@ func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *ApplicationSetStatus) Unmarshal(dAtA []byte) error { +func (m *ApplicationSetStrategy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19484,15 +20808,47 @@ func (m *ApplicationSetStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ApplicationSetStatus: wiretype end group for non-group") + return fmt.Errorf("proto: ApplicationSetStrategy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ApplicationSetStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ApplicationSetStrategy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RollingSync", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19519,8 +20875,46 @@ func (m *ApplicationSetStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Conditions = append(m.Conditions, ApplicationSetCondition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.RollingSync == nil { + m.RollingSync = &ApplicationSetRolloutStrategy{} + } + if err := m.RollingSync.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RollingUpdate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RollingUpdate == nil { + m.RollingUpdate = &ApplicationSetRolloutStrategy{} + } + if err := m.RollingUpdate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index d898aff52148f..0b1c9892ef6fa 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -10,6 +10,7 @@ import "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1/generated.proto import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"; @@ -148,6 +149,14 @@ message ApplicationList { repeated Application items = 2; } +message ApplicationMatchExpression { + optional string key = 1; + + optional string operator = 2; + + repeated string values = 3; +} + // ApplicationSet is a set of Application resources // +genclient // +genclient:noStatus @@ -162,6 +171,24 @@ message ApplicationSet { optional ApplicationSetStatus status = 3; } +// ApplicationSetApplicationCondition contains details about each Application managed by the ApplicationSet +message ApplicationSetApplicationStatus { + // Application contains the name of the Application resource + optional string application = 1; + + // LastTransitionTime is the time the status was last updated + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 2; + + // Message contains human-readable message indicating details about the status + optional string message = 3; + + // ObservedHash contains the last applied hash of the generated Application resource + optional string observedHash = 4; + + // Status contains the AppSet's perceived status of the managed Application resource: (Waiting, Pending, Progressing, Healthy) + optional string status = 5; +} + // ApplicationSetCondition contains details about an applicationset condition, which is usally an error or warning message ApplicationSetCondition { // Type is an applicationset condition type @@ -236,6 +263,16 @@ message ApplicationSetNestedGenerator { optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 9; } +message ApplicationSetRolloutStep { + repeated ApplicationMatchExpression matchExpressions = 1; + + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUpdate = 2; +} + +message ApplicationSetRolloutStrategy { + repeated ApplicationSetRolloutStep steps = 1; +} + // ApplicationSetSpec represents a class of application set state. message ApplicationSetSpec { optional bool goTemplate = 1; @@ -245,6 +282,8 @@ message ApplicationSetSpec { optional ApplicationSetTemplate template = 3; optional ApplicationSetSyncPolicy syncPolicy = 4; + + optional ApplicationSetStrategy strategy = 5; } // ApplicationSetStatus defines the observed state of ApplicationSet @@ -252,6 +291,17 @@ message ApplicationSetStatus { // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster // Important: Run "make" to regenerate code after modifying this file repeated ApplicationSetCondition conditions = 1; + + repeated ApplicationSetApplicationStatus applicationStatus = 2; +} + +// ApplicationSetStrategy configures how generated Applications are updated in sequence. +message ApplicationSetStrategy { + optional string type = 1; + + optional ApplicationSetRolloutStrategy rollingSync = 2; + + optional ApplicationSetRolloutStrategy rollingUpdate = 3; } // ApplicationSetSyncPolicy configures how generated Applications will relate to their diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 1c8969e32791b..fbe5ad573710d 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -23,13 +23,18 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationCondition": schema_pkg_apis_application_v1alpha1_ApplicationCondition(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationDestination": schema_pkg_apis_application_v1alpha1_ApplicationDestination(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationList": schema_pkg_apis_application_v1alpha1_ApplicationList(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationMatchExpression": schema_pkg_apis_application_v1alpha1_ApplicationMatchExpression(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSet": schema_pkg_apis_application_v1alpha1_ApplicationSet(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetApplicationStatus": schema_pkg_apis_application_v1alpha1_ApplicationSetApplicationStatus(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetCondition": schema_pkg_apis_application_v1alpha1_ApplicationSetCondition(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetGenerator": schema_pkg_apis_application_v1alpha1_ApplicationSetGenerator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetList": schema_pkg_apis_application_v1alpha1_ApplicationSetList(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetNestedGenerator": schema_pkg_apis_application_v1alpha1_ApplicationSetNestedGenerator(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStep": schema_pkg_apis_application_v1alpha1_ApplicationSetRolloutStep(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStrategy": schema_pkg_apis_application_v1alpha1_ApplicationSetRolloutStrategy(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetSpec": schema_pkg_apis_application_v1alpha1_ApplicationSetSpec(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetStatus": schema_pkg_apis_application_v1alpha1_ApplicationSetStatus(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetStrategy": schema_pkg_apis_application_v1alpha1_ApplicationSetStrategy(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetSyncPolicy": schema_pkg_apis_application_v1alpha1_ApplicationSetSyncPolicy(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate": schema_pkg_apis_application_v1alpha1_ApplicationSetTemplate(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplateMeta": schema_pkg_apis_application_v1alpha1_ApplicationSetTemplateMeta(ref), @@ -648,6 +653,44 @@ func schema_pkg_apis_application_v1alpha1_ApplicationList(ref common.ReferenceCa } } +func schema_pkg_apis_application_v1alpha1_ApplicationMatchExpression(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "operator": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_ApplicationSet(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -696,6 +739,59 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSet(ref common.ReferenceCal } } +func schema_pkg_apis_application_v1alpha1_ApplicationSetApplicationStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplicationSetApplicationCondition contains details about each Application managed by the ApplicationSet", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "application": { + SchemaProps: spec.SchemaProps{ + Description: "Application contains the name of the Application resource", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "LastTransitionTime is the time the status was last updated", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Message contains human-readable message indicating details about the status", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "observedHash": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedHash contains the last applied hash of the generated Application resource", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status contains the AppSet's perceived status of the managed Application resource: (Waiting, Pending, Progressing, Healthy)", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"application", "message", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + func schema_pkg_apis_application_v1alpha1_ApplicationSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -923,6 +1019,65 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetNestedGenerator(ref comm } } +func schema_pkg_apis_application_v1alpha1_ApplicationSetRolloutStep(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "matchExpressions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationMatchExpression"), + }, + }, + }, + }, + }, + "maxUpdate": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationMatchExpression", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_pkg_apis_application_v1alpha1_ApplicationSetRolloutStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "steps": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStep"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStep"}, + } +} + func schema_pkg_apis_application_v1alpha1_ApplicationSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -960,12 +1115,17 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetSpec(ref common.Referenc Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetSyncPolicy"), }, }, + "strategy": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetStrategy"), + }, + }, }, Required: []string{"generators", "template"}, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetSyncPolicy", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetStrategy", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetSyncPolicy", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate"}, } } @@ -990,11 +1150,55 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetStatus(ref common.Refere }, }, }, + "applicationStatus": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetApplicationStatus"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetApplicationStatus", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetCondition"}, + } +} + +func schema_pkg_apis_application_v1alpha1_ApplicationSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplicationSetStrategy configures how generated Applications are updated in sequence.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "rollingSync": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStrategy"), + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStrategy"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetCondition"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetRolloutStrategy"}, } } diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index ef7b43bf4869d..1141ce6f8491a 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -10,6 +10,7 @@ import ( apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" ) // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -293,6 +294,27 @@ func (in *ApplicationList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplicationMatchExpression) DeepCopyInto(out *ApplicationMatchExpression) { + *out = *in + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationMatchExpression. +func (in *ApplicationMatchExpression) DeepCopy() *ApplicationMatchExpression { + if in == nil { + return nil + } + out := new(ApplicationMatchExpression) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApplicationSet) DeepCopyInto(out *ApplicationSet) { *out = *in @@ -321,6 +343,26 @@ func (in *ApplicationSet) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplicationSetApplicationStatus) DeepCopyInto(out *ApplicationSetApplicationStatus) { + *out = *in + if in.LastTransitionTime != nil { + in, out := &in.LastTransitionTime, &out.LastTransitionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationSetApplicationStatus. +func (in *ApplicationSetApplicationStatus) DeepCopy() *ApplicationSetApplicationStatus { + if in == nil { + return nil + } + out := new(ApplicationSetApplicationStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApplicationSetCondition) DeepCopyInto(out *ApplicationSetCondition) { *out = *in @@ -518,6 +560,57 @@ func (in ApplicationSetNestedGenerators) DeepCopy() ApplicationSetNestedGenerato return *out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplicationSetRolloutStep) DeepCopyInto(out *ApplicationSetRolloutStep) { + *out = *in + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]ApplicationMatchExpression, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MaxUpdate != nil { + in, out := &in.MaxUpdate, &out.MaxUpdate + *out = new(intstr.IntOrString) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationSetRolloutStep. +func (in *ApplicationSetRolloutStep) DeepCopy() *ApplicationSetRolloutStep { + if in == nil { + return nil + } + out := new(ApplicationSetRolloutStep) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplicationSetRolloutStrategy) DeepCopyInto(out *ApplicationSetRolloutStrategy) { + *out = *in + if in.Steps != nil { + in, out := &in.Steps, &out.Steps + *out = make([]ApplicationSetRolloutStep, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationSetRolloutStrategy. +func (in *ApplicationSetRolloutStrategy) DeepCopy() *ApplicationSetRolloutStrategy { + if in == nil { + return nil + } + out := new(ApplicationSetRolloutStrategy) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApplicationSetSpec) DeepCopyInto(out *ApplicationSetSpec) { *out = *in @@ -534,6 +627,11 @@ func (in *ApplicationSetSpec) DeepCopyInto(out *ApplicationSetSpec) { *out = new(ApplicationSetSyncPolicy) **out = **in } + if in.Strategy != nil { + in, out := &in.Strategy, &out.Strategy + *out = new(ApplicationSetStrategy) + (*in).DeepCopyInto(*out) + } return } @@ -557,6 +655,13 @@ func (in *ApplicationSetStatus) DeepCopyInto(out *ApplicationSetStatus) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ApplicationStatus != nil { + in, out := &in.ApplicationStatus, &out.ApplicationStatus + *out = make([]ApplicationSetApplicationStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -570,6 +675,32 @@ func (in *ApplicationSetStatus) DeepCopy() *ApplicationSetStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplicationSetStrategy) DeepCopyInto(out *ApplicationSetStrategy) { + *out = *in + if in.RollingSync != nil { + in, out := &in.RollingSync, &out.RollingSync + *out = new(ApplicationSetRolloutStrategy) + (*in).DeepCopyInto(*out) + } + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + *out = new(ApplicationSetRolloutStrategy) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationSetStrategy. +func (in *ApplicationSetStrategy) DeepCopy() *ApplicationSetStrategy { + if in == nil { + return nil + } + out := new(ApplicationSetStrategy) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApplicationSetSyncPolicy) DeepCopyInto(out *ApplicationSetSyncPolicy) { *out = *in