From 32b0898888a7375b0910c45c5a581804fd23556b Mon Sep 17 00:00:00 2001 From: nicolaferraro Date: Wed, 15 Dec 2021 10:36:40 +0100 Subject: [PATCH] Fix #1107: initial trait --- addons/keda/duck/v1alpha1/doc.go | 21 ++ addons/keda/duck/v1alpha1/duck_types.go | 108 ++++++++ .../keda/duck/v1alpha1/duck_types_support.go | 39 +++ addons/keda/duck/v1alpha1/register.go | 57 +++++ .../duck/v1alpha1/zz_generated.deepcopy.go | 235 ++++++++++++++++++ addons/keda/keda.go | 118 ++++++++- docs/modules/ROOT/nav.adoc | 1 + .../modules/ROOT/partials/apis/crds-html.adoc | 10 + docs/modules/traits/pages/keda.adoc | 44 ++++ go.sum | 1 + pkg/cmd/run.go | 7 +- pkg/resources/resources.go | 4 +- resources/traits.yaml | 23 ++ script/Makefile | 8 +- script/gen_client_keda.sh | 32 +++ script/gen_doc.sh | 2 +- 16 files changed, 701 insertions(+), 9 deletions(-) create mode 100644 addons/keda/duck/v1alpha1/doc.go create mode 100644 addons/keda/duck/v1alpha1/duck_types.go create mode 100644 addons/keda/duck/v1alpha1/duck_types_support.go create mode 100644 addons/keda/duck/v1alpha1/register.go create mode 100644 addons/keda/duck/v1alpha1/zz_generated.deepcopy.go create mode 100644 docs/modules/traits/pages/keda.adoc create mode 100755 script/gen_client_keda.sh diff --git a/addons/keda/duck/v1alpha1/doc.go b/addons/keda/duck/v1alpha1/doc.go new file mode 100644 index 0000000000..56d897a12a --- /dev/null +++ b/addons/keda/duck/v1alpha1/doc.go @@ -0,0 +1,21 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package duck contains a partial schema of the Keda APIs +// +kubebuilder:object:generate=true +// +groupName=keda.sh +package v1alpha1 diff --git a/addons/keda/duck/v1alpha1/duck_types.go b/addons/keda/duck/v1alpha1/duck_types.go new file mode 100644 index 0000000000..8504b6c580 --- /dev/null +++ b/addons/keda/duck/v1alpha1/duck_types.go @@ -0,0 +1,108 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:onlyVerbs=get,list,watch +// +genclient:noStatus +// +kubebuilder:object:root=true + +// ScaledObject is a specification for a ScaledObject resource +type ScaledObject struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ScaledObjectSpec `json:"spec"` +} + +// ScaledObjectSpec is the spec for a ScaledObject resource +type ScaledObjectSpec struct { + ScaleTargetRef *v1.ObjectReference `json:"scaleTargetRef"` + + Triggers []ScaleTriggers `json:"triggers"` +} + +// ScaleTriggers reference the scaler that will be used +type ScaleTriggers struct { + Type string `json:"type"` + // +optional + Name string `json:"name,omitempty"` + Metadata map[string]string `json:"metadata"` + // +optional + AuthenticationRef *ScaledObjectAuthRef `json:"authenticationRef,omitempty"` + // +optional + FallbackReplicas *int32 `json:"fallback,omitempty"` +} + +// ScaledObjectAuthRef points to the TriggerAuthentication or ClusterTriggerAuthentication object that +// is used to authenticate the scaler with the environment +type ScaledObjectAuthRef struct { + Name string `json:"name"` + // Kind of the resource being referred to. Defaults to TriggerAuthentication. + // +optional + Kind string `json:"kind,omitempty"` +} + +// +kubebuilder:object:root=true + +// ScaledObjectList contains a list of ScaledObject. +type ScaledObjectList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []ScaledObject `json:"items"` +} + +// +genclient +// +genclient:onlyVerbs=get,list,watch +// +genclient:noStatus +// +kubebuilder:object:root=true + +// TriggerAuthentication defines how a trigger can authenticate +type TriggerAuthentication struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec TriggerAuthenticationSpec `json:"spec"` +} + +// TriggerAuthenticationSpec defines the various ways to authenticate +type TriggerAuthenticationSpec struct { + // +optional + SecretTargetRef []AuthSecretTargetRef `json:"secretTargetRef,omitempty"` +} + +// AuthSecretTargetRef is used to authenticate using a reference to a secret +type AuthSecretTargetRef struct { + Parameter string `json:"parameter"` + Name string `json:"name"` + Key string `json:"key"` +} + +// +kubebuilder:object:root=true + +// TriggerAuthenticationList contains a list of TriggerAuthentication +type TriggerAuthenticationList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + Items []TriggerAuthentication `json:"items"` +} diff --git a/addons/keda/duck/v1alpha1/duck_types_support.go b/addons/keda/duck/v1alpha1/duck_types_support.go new file mode 100644 index 0000000000..c8c2f23263 --- /dev/null +++ b/addons/keda/duck/v1alpha1/duck_types_support.go @@ -0,0 +1,39 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +const ( + ScaledObjectKind = "ScaledObject" +) + +func NewScaledObject(namespace string, name string) ScaledObject { + return ScaledObject{ + TypeMeta: metav1.TypeMeta{ + APIVersion: SchemeGroupVersion.String(), + Kind: ScaledObjectKind, + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace, + Name: name, + }, + } +} diff --git a/addons/keda/duck/v1alpha1/register.go b/addons/keda/duck/v1alpha1/register.go new file mode 100644 index 0000000000..a3814da526 --- /dev/null +++ b/addons/keda/duck/v1alpha1/register.go @@ -0,0 +1,57 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + KedaGroup = "keda.sh" + KedaVersion = "v1alpha1" +) + +var ( + // SchemeGroupVersion is group version used to register these objects. + SchemeGroupVersion = schema.GroupVersion{Group: KedaGroup, Version: KedaVersion} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + + // AddToScheme is a shortcut to SchemeBuilder.AddToScheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Resource takes an unqualified resource and returns a Group qualified GroupResource. +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +// Adds the list of known types to Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ScaledObject{}, + &ScaledObjectList{}, + &TriggerAuthentication{}, + &TriggerAuthenticationList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/addons/keda/duck/v1alpha1/zz_generated.deepcopy.go b/addons/keda/duck/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..b551c7f69c --- /dev/null +++ b/addons/keda/duck/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,235 @@ +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthSecretTargetRef) DeepCopyInto(out *AuthSecretTargetRef) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthSecretTargetRef. +func (in *AuthSecretTargetRef) DeepCopy() *AuthSecretTargetRef { + if in == nil { + return nil + } + out := new(AuthSecretTargetRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaleTriggers) DeepCopyInto(out *ScaleTriggers) { + *out = *in + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.AuthenticationRef != nil { + in, out := &in.AuthenticationRef, &out.AuthenticationRef + *out = new(ScaledObjectAuthRef) + **out = **in + } + if in.FallbackReplicas != nil { + in, out := &in.FallbackReplicas, &out.FallbackReplicas + *out = new(int32) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaleTriggers. +func (in *ScaleTriggers) DeepCopy() *ScaleTriggers { + if in == nil { + return nil + } + out := new(ScaleTriggers) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaledObject) DeepCopyInto(out *ScaledObject) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaledObject. +func (in *ScaledObject) DeepCopy() *ScaledObject { + if in == nil { + return nil + } + out := new(ScaledObject) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ScaledObject) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaledObjectAuthRef) DeepCopyInto(out *ScaledObjectAuthRef) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaledObjectAuthRef. +func (in *ScaledObjectAuthRef) DeepCopy() *ScaledObjectAuthRef { + if in == nil { + return nil + } + out := new(ScaledObjectAuthRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaledObjectList) DeepCopyInto(out *ScaledObjectList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ScaledObject, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaledObjectList. +func (in *ScaledObjectList) DeepCopy() *ScaledObjectList { + if in == nil { + return nil + } + out := new(ScaledObjectList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ScaledObjectList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaledObjectSpec) DeepCopyInto(out *ScaledObjectSpec) { + *out = *in + if in.ScaleTargetRef != nil { + in, out := &in.ScaleTargetRef, &out.ScaleTargetRef + *out = new(v1.ObjectReference) + **out = **in + } + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make([]ScaleTriggers, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaledObjectSpec. +func (in *ScaledObjectSpec) DeepCopy() *ScaledObjectSpec { + if in == nil { + return nil + } + out := new(ScaledObjectSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TriggerAuthentication) DeepCopyInto(out *TriggerAuthentication) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerAuthentication. +func (in *TriggerAuthentication) DeepCopy() *TriggerAuthentication { + if in == nil { + return nil + } + out := new(TriggerAuthentication) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TriggerAuthentication) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TriggerAuthenticationList) DeepCopyInto(out *TriggerAuthenticationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TriggerAuthentication, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerAuthenticationList. +func (in *TriggerAuthenticationList) DeepCopy() *TriggerAuthenticationList { + if in == nil { + return nil + } + out := new(TriggerAuthenticationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TriggerAuthenticationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TriggerAuthenticationSpec) DeepCopyInto(out *TriggerAuthenticationSpec) { + *out = *in + if in.SecretTargetRef != nil { + in, out := &in.SecretTargetRef, &out.SecretTargetRef + *out = make([]AuthSecretTargetRef, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TriggerAuthenticationSpec. +func (in *TriggerAuthenticationSpec) DeepCopy() *TriggerAuthenticationSpec { + if in == nil { + return nil + } + out := new(TriggerAuthenticationSpec) + in.DeepCopyInto(out) + return out +} diff --git a/addons/keda/keda.go b/addons/keda/keda.go index c7942495bd..65a8bd4ffc 100644 --- a/addons/keda/keda.go +++ b/addons/keda/keda.go @@ -18,7 +18,16 @@ limitations under the License. package keda import ( + "strings" + + kedav1alpha1 "github.com/apache/camel-k/addons/keda/duck/v1alpha1" + camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1" + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + camelv1alpha1 "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/trait" + scase "github.com/stoewer/go-strcase" + v1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" ) // The Keda trait can be used for automatic integration with Keda autoscalers. @@ -30,7 +39,16 @@ type kedaTrait struct { trait.BaseTrait `property:",squash"` // Enables automatic configuration of the trait. Auto *bool `property:"auto" json:"auto,omitempty"` - // Metadata + // Convert metadata properties to camelCase (needed because trait properties use kebab-case). Enabled by default. + CamelCaseConversion *bool `property:"camel-case-conversion" json:"camelCaseConversion,omitempty"` + // Set the spec->replicas field on the top level controller to an explicit value if missing, to allow Keda to recognize it as a scalable resource + HackControllerReplicas *bool `property:"hack-controller-replicas" json:"hackControllerReplicas,omitempty"` + // Triggers + Triggers []kedaTrigger `property:"triggers" json:"triggers,omitempty"` +} + +type kedaTrigger struct { + Type string `property:"type" json:"type,omitempty"` Metadata map[string]string `property:"metadata" json:"metadata,omitempty"` } @@ -42,10 +60,106 @@ func NewKedaTrait() trait.Trait { } func (t *kedaTrait) Configure(e *trait.Environment) (bool, error) { + if t.Enabled == nil || !*t.Enabled { + return false, nil + } + + if !e.IntegrationInPhase(camelv1.IntegrationPhaseInitialization) && !e.IntegrationInRunningPhases() { + return false, nil + } - return false, nil + return true, nil } func (t *kedaTrait) Apply(e *trait.Environment) error { + if e.IntegrationInPhase(camelv1.IntegrationPhaseInitialization) { + if t.HackControllerReplicas == nil || *t.HackControllerReplicas { + if err := t.hackControllerReplicas(e); err != nil { + return err + } + } + } else if e.IntegrationInRunningPhases() { + if so, err := t.getScaledObject(e); err != nil { + return err + } else if so != nil { + e.Resources.Add(so) + } + } + return nil } + +func (t *kedaTrait) getScaledObject(e *trait.Environment) (*kedav1alpha1.ScaledObject, error) { + if len(t.Triggers) == 0 { + return nil, nil + } + obj := kedav1alpha1.NewScaledObject(e.Integration.Namespace, e.Integration.Name) + obj.Spec.ScaleTargetRef = t.getTopControllerReference(e) + + for _, trigger := range t.Triggers { + meta := make(map[string]string) + for k, v := range trigger.Metadata { + kk := k + if t.CamelCaseConversion == nil || *t.CamelCaseConversion { + kk = scase.LowerCamelCase(k) + } + meta[kk] = v + } + st := kedav1alpha1.ScaleTriggers{ + Type: trigger.Type, + Metadata: meta, + } + obj.Spec.Triggers = append(obj.Spec.Triggers, st) + } + + return &obj, nil +} + +func (t *kedaTrait) hackControllerReplicas(e *trait.Environment) error { + ctrlRef := t.getTopControllerReference(e) + + if ctrlRef.Kind == camelv1alpha1.KameletBindingKind { + // Update the KameletBinding directly (do not add it to env resources, it's the integration parent) + key := client.ObjectKey{ + Namespace: e.Integration.Namespace, + Name: ctrlRef.Name, + } + klb := camelv1alpha1.KameletBinding{} + if err := e.Client.Get(e.Ctx, key, &klb); err != nil { + return err + } + if klb.Spec.Replicas == nil { + one := int32(1) + klb.Spec.Replicas = &one + if err := e.Client.Update(e.Ctx, &klb); err != nil { + return err + } + } + } else { + if e.Integration.Spec.Replicas == nil { + one := int32(1) + e.Integration.Spec.Replicas = &one + if err := e.Client.Update(e.Ctx, e.Integration); err != nil { + return err + } + } + } + return nil +} + +func (t *kedaTrait) getTopControllerReference(e *trait.Environment) *v1.ObjectReference { + for _, o := range e.Integration.OwnerReferences { + if o.Kind == v1alpha1.KameletBindingKind && strings.HasPrefix(o.APIVersion, v1alpha1.SchemeGroupVersion.Group) { + return &v1.ObjectReference{ + APIVersion: o.APIVersion, + Kind: o.Kind, + Name: o.Name, + } + } + } + return &v1.ObjectReference{ + APIVersion: e.Integration.APIVersion, + Kind: e.Integration.Kind, + Name: e.Integration.Name, + } +} diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 5bc1a65da1..6432af9971 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -63,6 +63,7 @@ ** xref:traits:jolokia.adoc[Jolokia] ** xref:traits:jvm.adoc[Jvm] ** xref:traits:kamelets.adoc[Kamelets] +** xref:traits:keda.adoc[Keda] ** xref:traits:knative-service.adoc[Knative Service] ** xref:traits:knative.adoc[Knative] ** xref:traits:logging.adoc[Logging] diff --git a/docs/modules/ROOT/partials/apis/crds-html.adoc b/docs/modules/ROOT/partials/apis/crds-html.adoc index 4adc58612b..22a61c0028 100644 --- a/docs/modules/ROOT/partials/apis/crds-html.adoc +++ b/docs/modules/ROOT/partials/apis/crds-html.adoc @@ -3090,6 +3090,16 @@ string + + +info
+ +map[string]string + + + + +

IntegrationSpec diff --git a/docs/modules/traits/pages/keda.adoc b/docs/modules/traits/pages/keda.adoc new file mode 100644 index 0000000000..a73dabd758 --- /dev/null +++ b/docs/modules/traits/pages/keda.adoc @@ -0,0 +1,44 @@ += Keda Trait + +// Start of autogenerated code - DO NOT EDIT! (description) +The Keda trait can be used for automatic integration with Keda autoscalers. + +The Keda trait is disabled by default. + + +This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**. + +// End of autogenerated code - DO NOT EDIT! (description) +// Start of autogenerated code - DO NOT EDIT! (configuration) +== Configuration + +Trait properties can be specified when running any integration with the CLI: +[source,console] +---- +$ kamel run --trait keda.[key]=[value] --trait keda.[key2]=[value2] integration.groovy +---- +The following configuration options are available: + +[cols="2m,1m,5a"] +|=== +|Property | Type | Description + +| keda.enabled +| bool +| Can be used to enable or disable a trait. All traits share this common property. + +| keda.auto +| bool +| Enables automatic configuration of the trait. + +| keda.camel-case-conversion +| bool +| Convert metadata properties to camelCase (needed because trait properties use kebab-case). Enabled by default. + +| keda.triggers +| []github.com/apache/camel-k/addons/keda.kedaTrigger +| Triggers + +|=== + +// End of autogenerated code - DO NOT EDIT! (configuration) diff --git a/go.sum b/go.sum index 8e3f6e8814..4ae2e3433f 100644 --- a/go.sum +++ b/go.sum @@ -1827,6 +1827,7 @@ k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRV k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= +k8s.io/code-generator v0.21.4 h1:vO8jVuEGV4UF+/2s/88Qg05MokE/1QUFi/Q2YDgz++A= k8s.io/code-generator v0.21.4/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo= k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14= diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go index b1842a53a3..1e00c122dc 100644 --- a/pkg/cmd/run.go +++ b/pkg/cmd/run.go @@ -285,8 +285,11 @@ func (o *runCmdOptions) run(cmd *cobra.Command, args []string) error { tp := catalog.ComputeTraitsProperties() for _, t := range o.Traits { kv := strings.SplitN(t, "=", 2) - - if !util.StringSliceExists(tp, kv[0]) { + prefix := kv[0] + if strings.Contains(prefix, "[") { + prefix = prefix[0:strings.Index(prefix, "[")] + } + if !util.StringSliceExists(tp, prefix) { fmt.Printf("Error: %s is not a valid trait property\n", t) return nil } diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go index b798a6a69a..a979664845 100644 --- a/pkg/resources/resources.go +++ b/pkg/resources/resources.go @@ -541,9 +541,9 @@ var assets = func() http.FileSystem { "/traits.yaml": &vfsgen۰CompressedFileInfo{ name: "traits.yaml", modTime: time.Time{}, - uncompressedSize: 46896, + uncompressedSize: 47743, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfd\x73\x1c\xb7\xb1\xe0\xef\xfe\x2b\x50\x7c\x57\x25\x92\xb5\xbb\x94\x9d\x97\x3c\x1f\xef\x74\x29\x5a\x92\x13\xda\xfa\xe0\x49\xb2\x73\x29\x9f\x2b\x8b\x9d\xe9\xdd\x85\x38\x0b\x4c\x00\x0c\xa9\xcd\xbd\xfb\xdf\xaf\xd0\xdd\xf8\x98\xd9\x5d\x72\x29\x91\x7e\xe1\xd5\x4b\x7e\xb0\x48\x0e\x80\x46\xa3\xd1\xdf\xdd\xf0\x56\x2a\xef\x4e\xbf\x1a\x0b\x2d\x57\x70\x2a\xe4\x7c\xae\xb4\xf2\xeb\xaf\x84\x68\x1b\xe9\xe7\xc6\xae\x4e\xc5\x5c\x36\x0e\xc2\x6f\xac\x99\xab\x06\xdc\xe9\x57\x42\x8c\xc5\x8f\xdd\x0c\xac\x06\x0f\x8e\x7e\xd4\xd2\xab\x2b\xc0\x7f\xbf\x6d\x41\xbf\x5f\xaa\xb9\xff\x4a\x88\x1a\x5c\x65\x55\xeb\x95\xd1\xa7\xe2\xac\x69\xcc\xb5\x13\x95\xd1\x2e\xac\xac\x95\x5e\x88\xeb\xa5\xaa\x96\x42\x9b\x1a\x9c\xf0\x4b\x10\x4a\x7b\x58\x58\x19\x06\x88\xd6\xd4\x87\xee\x48\x48\x0b\x02\x1a\xb5\x50\xb3\x26\x2c\x20\x84\x37\x62\x06\xc2\x55\x4b\xa8\xbb\x06\x6a\x61\xf4\x48\xcc\xa4\xc3\x7f\x89\x46\xce\xa0\x71\xe1\x5f\x61\xba\x30\xf1\x48\x18\x2b\xae\x95\x5f\xe2\xe4\x76\xdc\x9a\x3a\xed\x54\x48\x5d\xe3\x9c\x52\x7b\x35\x8e\xbf\xdd\x3a\x5d\x6b\xea\x00\xa2\xf4\x08\x90\x6c\x2c\xc8\x7a\x2d\x6c\xa7\x71\x1f\xc5\x7a\x6e\x82\x33\x9e\xfb\x27\x4e\xd4\xca\xc9\x59\x80\x71\xb6\x16\x35\xcc\x65\xd7\xf8\x09\xe1\xb2\x05\xeb\x55\xc4\x26\xa1\x1f\x34\x7e\x4b\x7b\x5c\xb7\x70\x2a\x66\xc6\x34\xf8\x63\x0f\x8f\xcf\xa5\x0e\x08\xe8\x02\x88\xde\xf0\xb0\xb0\x49\x5e\x4d\x48\x81\x27\x3b\x09\x18\xa7\x7f\x3a\xe1\x96\x01\x6c\xbf\x54\xe1\x00\x56\x2b\xa3\x71\xde\x04\xca\x7a\x52\x00\xd2\x9a\x7a\x5c\xd0\xc2\xcd\xd0\x9c\x35\xd7\x72\x1d\x26\x1d\x37\xa6\x92\x1e\x9c\x58\x75\x8d\x57\x6d\x03\xc2\x42\xdb\xa8\x4a\x3a\x61\xe6\x1b\x87\xab\x08\x61\x4e\xae\x80\x21\x09\xb8\x13\x87\x8c\x25\x71\x8c\x74\x77\x7c\xb4\x01\x57\x79\x50\xb7\x02\xf7\x06\xae\xc0\xfe\x26\xb0\x85\x2f\x12\x5c\x63\x22\x9b\x02\xbc\x27\xbf\xfc\xea\xbc\x55\x7a\xf1\x64\x13\xc8\x17\x30\x57\x1a\x9c\x90\xc2\x81\x0f\xf0\xec\x7d\x1d\xe8\x2a\x30\x8c\x7b\x5f\x88\x5d\x47\xfd\x85\x50\xe3\x05\x39\x0c\xd3\x36\x6b\xe1\x97\xc6\x81\x58\x49\x5f\x2d\xc3\xf5\x08\x4b\xe3\xec\xc2\x41\x03\x95\x37\x76\xc4\x50\x5b\x68\x90\x75\x84\xad\x84\xaf\x16\xea\x0a\x34\x02\xe7\x5a\x59\xc1\x11\x5d\x39\xbf\x84\x2d\xa8\x70\x4b\xd3\x35\x75\xb8\x0b\xe9\x84\x6b\x9e\x36\xdc\xf7\x1b\x49\xe7\xb1\x6e\x56\x1b\x7f\xc3\x86\xe3\x76\x67\x9d\x6a\x6a\xb0\x3d\x46\xee\x6d\x77\x3f\x7c\xfc\xc3\x12\xe2\x02\xc4\x5d\x84\x72\xc4\x5b\xb5\x6c\x9a\x75\x62\x4c\x35\x78\xb0\x2b\xa5\x01\xf7\x3a\x03\xe7\x45\x60\xfc\x1e\x16\xeb\xc4\xc7\xc3\x34\x81\x09\x07\xa9\x30\x57\x8b\xce\x82\x38\xcf\x7b\xff\x51\x79\xf7\x08\xf8\xe5\x15\xd8\x99\x71\x70\x2b\x20\x2f\x69\x65\xfe\x5c\x34\x66\xb1\x60\xd9\x41\x78\xa8\xcc\xaa\x35\x1a\xb4\x67\x41\xe3\xba\xb6\x35\xd6\x0b\xe5\xc5\x21\x4c\x16\x13\x06\xe1\x47\xa9\xd5\x65\xc4\x5d\x6b\xea\x3e\x8f\x4c\xa8\xda\x93\xb4\xcf\x44\xa3\x1c\xd1\x74\x1a\xca\x22\xb6\xb5\xe6\x4a\xd5\x84\x35\x1f\x0f\x5d\x78\xe9\x2e\x13\xa1\x55\xe1\x06\x3c\x1c\x99\x3d\x0f\xd3\x33\x91\x55\xfd\x63\xcc\x04\x73\x05\xd6\x29\xa3\x91\x95\x9f\xb5\xb2\x4a\xe3\x7e\xc4\xdd\xda\x4e\x7b\xb5\x02\xa4\x32\xbc\x80\x50\x8b\x46\xcd\xac\xb4\x0a\xdc\x48\xd0\xcc\x7c\xad\xa2\xbc\x7e\x04\x44\xc7\xdb\x1a\xf3\xee\x0b\x80\xe8\xa8\x37\x41\x0a\x08\xc5\xf3\x1a\x5f\x8e\x23\x52\x78\x74\x00\xb1\x73\x20\xe6\xc6\x0e\xe5\xce\x44\x9c\x7b\x61\xae\xc0\x5a\x55\x33\x51\x09\xfc\x26\x4a\xc3\x38\x45\xe0\x8c\x2c\x39\x8b\x2b\x2c\x2e\x98\x32\x7e\x2b\x22\x2d\xd7\xe6\x5d\x66\x6a\x35\xda\x4b\xa5\x1f\x8a\x31\x3e\x41\x92\x8d\x6b\xdc\x46\xb6\xc5\x4e\x58\x07\x29\xc1\x13\xe2\x7a\x09\x16\x36\xb4\x80\x6b\xd5\x34\x61\x5f\x78\x2c\xb2\x71\x26\x22\xc0\xa5\xa9\xe9\xc3\x70\x94\xef\xc1\x5e\xa9\x2a\xc8\x2d\xe7\x4c\xa5\x92\xb8\x60\x54\xa5\xf5\x26\x42\x9b\x46\x69\x7f\x2a\xbc\x5c\x34\xe1\xbb\xa6\x81\x27\xff\xfc\x77\x40\x76\xde\xdc\x0a\xc5\xc1\x41\x79\x6b\xe0\xef\x1d\x38\x3f\xae\xda\x6e\xcf\x1b\xb3\x52\x5a\xad\xba\x95\x90\x2b\xd3\x69\x24\xc1\xe7\x17\x3f\xe1\x3c\xca\x12\xa3\x18\xce\xbd\x82\x95\xb1\xeb\xcf\x9e\x9e\x86\x6f\x5d\xa1\x51\x2b\x75\x27\xd8\xe5\xa7\x3d\x61\xa7\x99\xef\x06\xf9\xc6\xe4\x37\x40\x0e\x9f\xda\x7d\x24\xe4\x56\x8a\x39\x89\xe4\x82\x93\x20\xc7\x57\x52\x5c\xa6\x0b\x1a\xc9\xbc\xaf\xef\x59\x5f\xac\xa6\xb4\xdf\xb2\x89\xf2\x36\x4a\x51\xab\xf9\x1c\x2c\x68\x8f\x83\x19\x62\xb4\xdc\x7a\x77\x25\x9b\x01\xd3\x6f\x9f\x7e\xfb\x74\x7a\x34\x5c\x76\xac\xa3\xdd\x70\x0b\x0e\x6f\x5c\x3e\x4c\x92\xd8\xf1\x8d\x00\xf1\xfd\xc8\x60\x2d\xbd\x6f\xfb\x60\x39\x42\xd0\xf8\xce\x58\xe9\x74\x50\xf2\xc8\x48\xe7\x49\x08\x98\x3e\x4a\x48\x4b\x71\x3d\x73\x24\x82\x5b\xa2\x6b\x37\x54\x9f\x85\xb4\x9d\xd0\x21\xf2\xb6\x82\x18\xe5\x17\x8a\x8e\x4d\x10\x37\x51\xb7\x2f\x5c\x78\x21\x94\x2e\x56\x0c\x23\x27\xe4\x06\x08\xff\xac\xc5\xb4\xe0\xe3\xd3\x81\x47\x20\x2e\xa7\x56\x72\xf1\x99\xeb\xc5\xa1\xbd\xa9\xc6\x6d\xd7\x34\xe3\xd6\x34\xaa\x2a\xef\xf5\x45\xd7\x34\x17\xf9\x97\x9b\x52\x2c\x0c\x13\x34\x2c\x9a\xf8\xff\x8e\xc6\xf4\xbf\x9f\xcf\xdf\x18\x7f\x61\xc1\x81\xf6\x4f\xfa\x32\x7d\x06\x6e\xbc\xaf\x6c\x78\xf2\x02\x5a\x0b\x68\xc1\x5c\xe0\x48\x52\x8e\xeb\xe1\x9d\xa7\x69\xa3\xf9\xba\x79\x0b\xf9\x40\xa7\x68\x92\x4f\x8f\xf2\xac\xa7\x68\xe2\xcb\x2a\xdf\x98\x25\xc8\xc6\x2f\x59\xe4\x3c\xe9\x31\xbf\x2b\xd0\xe0\xdc\x38\x98\xd0\x7b\x1d\xf7\x93\xf7\xf8\x65\x54\x9b\xae\x97\x80\x27\xa1\xa1\xf2\x4a\x2f\x26\xc1\x5e\x0c\xc0\xe1\x8d\xf8\xf3\x87\x0f\x17\x13\x71\xd6\xb6\x0d\x2b\x2d\x7e\x19\xef\x48\x5c\x98\x76\x39\xf9\x32\xe0\x83\x59\xab\x64\x33\xae\xa1\x91\xeb\xfe\x2d\xff\xdd\x37\x5b\xb6\xf0\xa6\x5b\xcd\xc0\x06\xbe\xed\xa0\x32\xba\x76\x42\xce\x3d\xd8\x01\x9e\x97\xd2\x09\xe7\xa5\x0d\x5a\xf3\x0c\xe6\xc6\x42\x5a\x31\x0b\xe6\x70\x42\x41\x6a\x13\x08\x1e\xea\x2f\xdc\x4a\x50\xda\x4c\xe7\xbf\x60\x13\xc4\x14\x90\x77\x06\xf0\x44\x98\xd1\x09\xd3\xf9\xdf\xe2\x24\x5a\xb0\xca\xd4\x7b\x40\xff\x67\x73\x2d\xcc\xdc\x03\xea\xdf\x2d\xd8\xa0\x8f\x66\xa0\x87\xa0\xde\x00\x64\xf2\x2f\xdc\x99\xe2\xbb\xaa\x42\x8c\x2f\x2d\xb8\xa5\x69\xf6\x81\xfa\x35\xab\x2c\x95\xd1\x0e\xaa\x0e\x1d\x1a\x3c\x0f\xb8\x2c\xb3\x08\xef\x86\xbc\x15\xda\xa9\x1a\x2c\xd4\xf1\xc3\x79\xd7\x30\xcc\x74\x5e\x4b\x79\x15\x4c\xe1\xb9\x54\xc1\xfa\xda\x7b\xdf\xc3\x1d\xf3\x9c\xb7\xef\x3b\x2c\xd4\x59\xf8\xe2\x7d\xf3\x3c\xb7\x6e\x9b\x36\xb6\x6d\xcb\x88\x10\xa8\x3f\x77\xd7\x85\x41\xb6\x73\xd7\x16\x64\xad\xfe\x43\x18\x5c\x5a\xf9\x4b\xee\x55\x06\xff\x37\x63\x71\x69\xc9\x7b\xe7\x71\x79\x33\xbf\x3d\x93\xbb\xe7\xd3\x78\x28\x36\x77\x03\x98\x77\xe5\x73\x05\xe5\x3f\x06\x46\x77\x87\x03\xba\x8d\xd3\xe5\x9d\x3f\x02\x56\xb7\xe7\xbe\x77\xf3\xba\xe4\xe0\xb1\xe8\x2f\x78\x88\xe8\x25\x39\x77\x6c\x50\x44\xb7\xfa\x75\x3a\xe7\xcd\x4a\xfd\x23\x3a\xbb\xc3\x96\x4d\x87\x97\x96\xee\x89\xaa\x08\xef\x6a\x05\xf6\x24\xc0\xc9\x21\x9a\xc2\x28\x70\x13\xf1\x97\xa5\x6a\x40\x68\x63\x57\xe8\x4a\x97\xba\xe7\xfc\x61\xcb\xda\x09\x29\x5a\x13\x96\xc5\x29\x67\x20\x24\x05\xe1\xba\x96\xbc\x9c\x14\x94\x1c\x09\x67\x56\x90\x96\x47\xc7\xad\x1b\x85\x53\x58\x0a\xe9\xc4\x4c\xfa\x6a\x29\x3e\x9a\x99\x1b\xc5\x89\xcb\x19\x2b\xaf\xae\xd0\x57\x2a\xbd\x70\x2d\x54\x6a\xae\x2a\xb1\x34\x9d\x4d\xee\xaa\x5a\xae\x53\x68\x55\xe6\x65\x90\x39\xa3\x3b\x40\xe9\xce\xc7\x70\xe8\xf7\xc6\xd2\xca\x0c\x05\xb2\xe0\x3e\x36\x57\xd2\x83\x55\xb2\x89\x48\x2c\x77\x2e\xc3\x9e\x7b\xc7\x26\xf0\x30\x7e\x30\x33\xa1\xb4\xf3\x20\xeb\xb0\xa4\x0c\x8c\x5c\xd7\xd2\xd6\xa2\x86\xb6\x31\xeb\x15\x68\x3f\x12\x4a\x0b\x63\x31\x5c\x61\x84\x93\x57\x81\xe0\x9c\xe9\x6c\x05\x8e\x24\x5b\xbc\x4f\xe5\x8a\xb5\x01\x87\xd1\x16\x0d\x74\xc2\x68\x30\x86\xcb\x00\xf5\xa4\xf4\x32\x46\x67\x7d\x90\x20\x62\x6e\x0d\xb1\xb6\xb9\x69\x1a\x73\x1d\x65\x6b\xe1\xd9\xc7\xf8\xdd\x95\x6c\x3a\x44\x6e\x34\xe6\x13\x26\x4e\xc5\x14\x49\x64\x3a\x12\xd3\xf0\xdb\xf0\xdf\xbf\x77\xd2\xfa\x7f\x4c\x27\x68\xf5\xd9\xae\xe1\xfd\x87\x7b\xd8\xb9\x70\xb1\x4a\xd4\x24\xb4\x48\xf6\x1e\x26\x48\x4e\xc5\x38\x4e\x7e\x4a\xfb\xa6\x33\x73\x01\xfb\xf1\xdc\xaf\xad\xf2\x81\x53\x4b\x47\x40\xc1\xa7\xd6\x82\x73\x44\x9d\x2f\x27\x8b\x09\x4f\x71\xea\x55\x75\xf9\x47\x9a\xe0\xd9\x1f\x9e\x3e\x7d\xfa\x74\x3a\x09\xf3\x0f\x60\x3e\x8d\xae\x4c\x9d\xf7\x99\xa7\xcc\x48\x66\x69\x9c\x04\xdc\x21\xf3\x98\x03\xfe\xc5\x81\x68\x25\xf9\x18\x1c\xf8\xe8\xc3\x7c\x7a\x14\x41\x0a\xf3\x9e\x7a\x39\xfb\x63\x0c\x82\x3e\x7b\x7a\xf2\xcd\x7f\xf9\x3f\x6d\xd3\xb9\xff\x7b\xbc\xed\x3f\x7f\x9c\x06\xd2\x65\x28\x4f\xbd\x55\x8b\x05\xd8\x3f\x86\x69\x9e\x3d\xa5\x2f\x9e\x9e\x7c\x73\xe3\xf8\xc9\x23\xf0\x8f\x46\x6c\xec\xe9\x50\x88\x94\x13\x87\x25\x4e\x7f\xbd\x34\xcd\x30\x28\x30\x2f\x62\xe9\xa6\xf3\x29\x34\x10\xa0\xab\xa1\x6a\xa4\x85\x1a\xaf\xf9\x5a\xac\x3a\xe7\x83\x0c\x80\x14\x56\x1f\x2e\xa1\xdc\x0a\xaa\xa5\xd4\xca\xad\x02\x26\xae\x8d\xbd\x14\x95\xb1\x16\x2a\xdf\xf4\x76\x94\x2f\xd2\x3e\x4a\xec\x19\xa2\x48\x0a\x07\xad\xb4\x1c\xf8\xa1\x30\x82\x4f\x41\xa2\x61\xd0\xad\xb8\xee\x89\xa7\x47\x69\x96\xf8\x08\x23\x26\x03\x9b\x28\x3c\x6d\x4c\x39\xc1\x64\x05\xb5\x80\x4f\x29\x3a\x3a\x5b\x17\x97\x75\x72\x16\x83\xf7\x91\xc3\xa6\x35\x6d\x98\x21\x73\xe1\xb0\x22\xc8\x6a\x19\xbf\x84\x22\x5c\xc8\xb7\x80\x81\x8a\x1e\x11\xba\xe9\xf9\x2b\xe2\xb9\x78\x55\xc6\xf1\x6f\xe5\x62\x79\xad\x43\xe5\x9f\x3c\x09\xb2\x18\x9d\x3c\x42\xe9\x42\xf0\x4e\x8d\x5d\x4c\x24\x46\xd9\x26\x18\x4c\x9a\x5c\x9e\xc6\xa0\x12\xde\x7d\x8e\xad\xad\x8f\x26\xef\x29\x7c\x09\xf5\x90\xfd\x55\x9d\xb5\xa0\x7d\xb3\x8e\xfa\x5c\xe2\x1a\x0c\x57\x10\x62\x89\xeb\x95\x5a\xcd\x5c\x36\xcd\x4c\x56\x97\xb7\x5e\xad\x9f\x1c\xf4\x82\x54\x74\xd6\x6a\xd5\x36\x10\x44\x02\xb1\x78\xa6\x03\x5a\x5d\x80\xae\x5b\xa3\xb4\x17\x87\x71\xe9\xa3\x74\xec\x49\xc0\x78\xbb\xc6\x10\xbf\xb9\x49\x5a\x49\xb7\x85\x1f\xf7\xa9\x58\x13\x0e\xaa\xf5\xa6\x6f\x6e\xb7\x49\xc6\x27\xef\xc4\xd2\x5c\xa3\xea\x64\x41\xfa\x3c\x99\x67\xf9\x14\x63\xa1\x52\x84\x65\x7f\x96\x8d\xaa\x45\x10\x38\xe5\x15\x3d\x1d\x8b\x03\xcc\xc7\x3a\x38\x15\x92\xf2\xb2\x18\x4e\x54\xca\x6c\xa7\x8b\x79\x9b\xf5\x7f\x1b\x8b\x83\xef\x8d\x9d\xa9\xfa\x20\x79\xde\x8e\x4e\x03\xc5\xcd\x54\x1d\xa7\x2d\x00\xb1\x9d\x0e\x9a\xc6\xa5\x6a\xdb\x80\x2e\x0d\x9f\xf0\x77\x42\xcd\x03\x55\x05\xcd\xc8\xe1\xcf\x4b\xe9\xf4\x93\x27\x5e\xcc\x95\x56\x6e\x09\xb5\x58\x83\x0f\x6b\xbd\x23\xa5\xef\x20\x12\x48\x25\x75\x05\x8d\xcb\x94\x93\x12\xaf\x3e\x06\x49\x87\x91\x5d\x1c\xe1\x84\xf2\x51\x23\xd1\x70\x2d\x8c\x86\x27\x77\x0d\x18\x9d\x75\xde\xac\xa4\x57\x15\xde\x57\xd2\x23\xb6\x29\x24\x91\x5d\xe2\xdd\x97\x4d\xc3\x7c\x30\xa0\x17\x94\x5f\x26\xcf\x3c\x6a\x06\xa8\xf4\x07\xe5\xa0\xd0\x94\x82\xd2\xdc\xad\xc0\x8a\x43\xa3\x9b\xf5\x8d\xb7\x00\xef\x8d\x8b\x17\x2a\x12\xa6\xb1\x61\x3a\xe9\x5c\xd0\xcf\xf3\x6c\x80\x32\xb1\x56\x81\x7d\x4e\x91\x8d\x6c\x7c\x74\x34\x41\xc7\x74\x0c\xd5\x20\xeb\x8b\xd4\xd1\x34\x9b\x20\xba\x01\xff\xa6\x0f\x10\xc4\xac\x0b\xb3\x60\x0f\x3a\xa3\x8b\xaa\xb8\x28\x32\x93\x22\x64\x5f\xaf\xa6\x5b\x87\x4c\x9f\x9e\x7c\x2d\x8e\xe9\xff\xd3\xd1\x35\xaa\xc2\xd3\xdf\xfd\x7e\x45\xb2\xfa\xf7\x4f\xdd\x94\x43\xf5\xfd\x30\x02\xa3\x77\x5c\x83\xac\x1b\xa5\x61\xcc\x3a\x43\xdf\xce\xf9\xc3\xbf\x6e\x9e\xf4\x5b\xfc\xaf\x6c\x44\x1c\x2a\x0a\x15\x24\xb0\xd3\x74\x74\x61\xe3\x81\xd4\xd4\x3c\xec\x77\xa5\xd0\x02\x4c\x19\x57\x18\x64\xa6\xbd\x86\x51\x52\xaf\x83\x49\xe3\x82\x9c\x14\xaf\x15\x6e\x2f\xe8\xd9\xe5\xfd\xc4\x38\x2e\x1a\x4e\x9d\xf6\xb4\x7d\x32\x9c\x02\xc9\xba\x5e\x90\x33\xf0\x65\xf8\x8c\xdd\x65\x7e\x81\x9c\xb0\xcb\xd9\x6d\x3c\xc5\x68\x23\x21\x89\x94\xd8\xb0\x9d\x51\x49\x12\xbc\xfb\x95\x5c\xb3\xad\xe7\x95\xee\x4c\xe7\x82\x85\x82\xd0\x45\xbf\x09\xe5\x02\x15\xc6\x20\x09\x52\xb6\x76\xcf\x7d\xe4\xc7\x45\x1c\xe6\x0f\x4f\x7b\xbb\x0d\xdc\xdd\xcc\xe7\x63\x0c\x48\xde\x6e\xa9\xf6\xf7\xa8\x93\xa3\xc4\x82\xb7\xe1\xb7\x0c\xd7\x4a\xda\xcb\xf2\x18\x13\x40\x0c\x47\x5d\xb8\xb3\xbe\xc9\x69\x54\x35\xb4\xa0\x6b\xd0\x15\x65\x2a\x3c\x50\x92\xcb\x8b\x62\x95\x1b\x13\xaa\x64\x8f\x31\xc9\xba\x4e\x09\x0e\xb4\x87\x62\x9a\x94\xfe\x37\xe4\x5b\x31\xc3\x2c\x4c\x6a\xc5\xb5\xd4\x3e\x32\xfc\x41\xce\x8b\xf8\xe5\xd7\x12\x0f\x8d\x59\x3f\x64\x3e\x59\x5c\x21\xef\xdf\x82\x6b\x03\x1d\xcd\x58\x49\xa4\x2f\xe2\x21\x66\x03\xce\x5c\x6b\xd6\xcf\x66\x1b\x5c\x7a\x44\xa9\x65\x03\x35\xfb\x53\xdb\xa8\x4a\x05\x21\x42\xf9\x79\x84\x0e\x5d\x83\x6d\x70\xfe\x40\xdf\xd6\x34\x0d\x33\x70\xc4\x18\x5e\xd7\x95\xd4\x72\xb1\x69\x9b\xb6\xa6\x7e\x0c\x59\x6a\x97\x4a\xd7\x7b\xa8\x19\x9c\xa5\xbd\x13\x51\x35\x38\x94\x18\xd9\xbe\xc6\x99\xc5\x0c\xfc\x35\x80\x16\xd3\xfc\x87\xe9\xa8\xd4\xef\xc6\x1f\xcd\x8c\x38\xf9\x25\x51\xc5\x98\x63\xb6\x53\x76\x2f\x07\x6d\x66\xf3\x7c\xc3\xd9\x47\x61\x9f\xb5\xdb\xd2\x16\x19\x90\x69\x58\xf9\x41\x2f\x6b\xdc\xf6\x4e\x52\x5d\x80\x06\x9b\xf7\x52\xe8\x82\x3d\x08\xfb\xa4\x75\x19\xe4\xfb\x0d\x09\x3f\x31\xb7\xaa\x6a\x3a\xe7\xc1\x3e\x02\x82\x6b\xad\x59\x04\xe1\x7e\x8b\xe8\xda\xc6\xd6\xcb\xfc\x12\xcc\x53\x1b\xc8\x65\x9f\x58\x06\x9d\x84\x21\x04\xc6\x15\x99\xed\x47\x5a\xf1\x37\xc8\x24\x51\x08\xa5\x24\x8e\x32\x2a\xaf\x94\x35\xfa\x61\x29\xaa\x58\x24\x93\x54\x17\x5d\x83\x2c\x02\xbc\x11\x4a\x7f\x0c\x77\x30\x39\xb8\xfa\xc0\x09\x71\x25\xad\x0a\xe7\xe6\x22\xa5\x94\x54\x94\xa2\x1d\xd9\xff\x37\x7d\x73\xf6\xfa\xe5\xfb\x8b\xb3\xe7\x2f\x83\xce\x79\xf1\xf6\xc5\xdf\xc2\x2f\x48\xed\x34\x41\x7d\x7d\x0c\x4c\x2d\xed\x6b\xbc\x02\x2f\x6f\x85\x87\x92\x0c\x1c\xe3\x92\x6d\xc0\x02\x11\xa4\x73\x67\x5c\x94\x67\x93\xf0\xbb\x91\x70\x13\xc8\x01\x8d\xc5\x94\x10\x2c\xed\xdd\x33\x1b\xf3\xf9\xb1\xf7\x21\xf0\xc3\x2c\xc4\x2f\x4c\x3d\x11\xaf\x93\x27\xe5\xc7\x97\x7f\x7d\xf6\xf3\xd9\xab\x9f\x5e\x46\x1d\x7b\xad\xbd\xfc\x24\x0e\x15\x8c\xc4\xeb\xbf\xfe\xed\xe7\xb3\x77\xcf\x0e\x56\x6b\xb2\xfb\x0e\x8e\x0a\x92\xb6\xd6\xd8\xf1\x52\xea\xba\x79\x48\x79\xde\x5b\x86\x4d\x10\x5e\x89\x89\x3c\xd2\x04\x93\xf5\xcb\x30\x40\xfc\x39\xc1\x25\x04\x09\x80\x40\xc5\x66\x83\x9c\x59\xef\x79\x04\x04\x6a\x61\xbe\xa7\xf7\x0d\x51\x26\x22\xca\x2c\xcc\x29\x8d\x29\xe5\xb7\x1a\x2b\xe6\xa6\x0b\x06\x97\x16\xb2\xc5\xea\x15\x52\x3f\x72\x32\x6d\x5c\x74\x51\x3d\x50\x10\x24\xc0\xf9\xa7\xe7\xe2\x03\x9e\xe0\x42\xda\x99\x5c\xc0\xb8\x0a\xba\x52\xe5\x1d\xd9\xc0\x49\x70\xa7\x5a\x29\x6d\x44\x63\xf4\x02\xac\xd0\x50\x81\x73\x92\x53\x0c\xbb\xd6\xf4\xc3\x1b\x5d\x5b\x4b\x0e\x18\xfc\x93\x9f\x6a\xad\x5c\x65\xae\xc0\xae\xc7\x95\xac\x96\xa5\x7f\x75\x72\xd2\x5e\x2e\x4e\x68\xf6\xf4\xd5\xf3\xf0\xd1\x87\x75\x0b\x9b\xa0\xbe\x88\xdf\x88\xaa\x51\x81\xcd\xe0\x84\xcc\x02\xc2\x06\x46\x82\x9c\x09\xc1\xa0\xa7\xe4\xf4\xc0\xae\x6b\xe5\x2e\x49\x99\xa2\xa4\xcb\xe9\x06\x53\xe2\xdf\x1f\x25\xa2\xa0\x90\xd9\x03\x12\x46\x19\x93\xdb\xa6\x16\xc5\xc4\xbd\xa8\x17\xf1\xf7\x29\xc3\xeb\xab\x68\x6a\x6e\x15\x5c\x93\xc7\x5c\x51\x97\x53\x83\xc2\x66\xf7\x4e\x92\x7b\x1e\x53\x1d\xdd\x96\x8c\x90\x6d\xc9\xfa\xb7\x27\xc8\x6d\x85\x6a\xef\xb4\x90\x1b\xb3\x42\xb6\x27\xae\x14\x24\xf9\xe7\x0f\x1f\x2e\x76\x40\x70\xc7\xcc\x8e\xcf\x4e\xec\x28\xe1\x2b\x73\x3b\xc8\xe2\x8e\x99\x1d\x5f\x94\x93\x76\x7b\xb6\xc6\x00\x41\x39\x6d\xe3\x4b\x92\xc9\x76\x26\x59\x0c\xf2\x88\xee\x29\x0b\x6c\xbf\xdc\x88\xe1\x4e\x07\xb9\x02\x51\x77\x49\xa9\x12\x5b\x93\x24\xee\x29\x7f\x6b\xaf\x9c\x86\xfd\x00\x66\x4f\xdd\x8e\xe4\x86\xed\xc9\x32\x5f\x72\xf1\x07\xf9\x11\x77\xbc\xf9\xa4\x9e\x6e\x07\xeb\x7e\x6f\xfe\x10\xce\x9b\xae\xfe\x67\x67\x75\x7d\xd1\xdd\xdf\x9a\xd8\xb5\xf3\xf2\x7f\x46\xb2\xd6\xed\xb7\x7f\x88\xa4\xad\xd7\xff\xee\x59\x56\x3b\xef\xff\x30\xb9\xe6\xbe\xd2\xa3\xf6\xe3\x00\x1b\xbb\xfd\x52\x16\xf0\x45\x89\x4d\x7b\xf1\x80\x3d\x41\xbe\x85\x09\xa4\x34\x7c\x8d\x2e\x89\xbb\xea\x5d\x1b\xda\xd5\x39\xcd\xb3\x3d\xfb\x88\x2a\x19\xc8\x85\xcf\x85\x10\xb9\xe4\x0b\xe3\x61\x5b\x95\x2b\xbe\xb6\xa6\xf3\x61\x6b\xe2\xda\xd8\xa6\x8e\xd1\xb3\xc2\x6b\xc5\x4b\xb3\x06\xc6\x3c\x2c\xe6\x63\xc5\x2b\x1e\x58\x02\x56\xdb\xcb\x58\x8f\x83\x66\x5f\x5d\x94\xe6\x95\x4b\x1f\xfa\xa5\x35\xdd\x82\xae\xc4\x34\x7a\x02\x09\xca\xb0\xc3\xa3\x47\xa0\xd5\x2d\x8d\xf3\xfb\x04\x6e\x8f\x8f\xdf\x71\x9c\xed\xf8\x78\xd2\x2f\x61\x41\x3d\xd8\xb8\x8d\xea\x1e\xa6\x9a\xc9\x9d\x83\x97\x1f\xb6\x85\x09\x30\x8d\x8c\xc8\x27\x1d\xd3\xf0\x40\x3a\x87\x79\x65\x81\x51\xf3\x96\x53\x40\x3c\x06\x01\x0b\xa2\x76\x5e\x99\x07\x34\x25\xce\xc3\xfc\x4c\xea\x32\xb5\x0d\x49\xd6\x43\x51\x3a\x19\x2b\x7a\x63\xf5\x27\x03\x26\xd2\x3d\x58\x81\x5b\x66\xa7\x57\xa0\xf3\x4a\xda\xc2\x01\x84\xee\xae\xce\xcf\xd0\xb4\x3e\xbf\x10\x56\xea\xc5\xa3\xb0\x41\x11\x2f\x7b\x90\x5f\xa1\x4b\x48\x71\x88\x09\x31\xe3\x94\x10\x73\x94\xdc\x4f\xcf\xcf\x5f\xbc\x13\xae\x9b\x69\x48\xe5\xe7\xa9\xe3\x00\x43\x31\x23\x8a\xb1\x15\xb4\x45\xee\x1a\x9d\x55\x6b\xcd\xa7\xb5\x38\x9c\x7e\xfd\x74\x82\xff\x3f\xf9\x76\xf4\xf5\xbf\x7d\x33\xf9\xfa\x0f\xf8\xc3\xd7\xdf\x8c\xbe\xfe\xaf\xe1\xa7\x6f\xe9\xc7\x3f\x44\x7b\x35\x5b\x71\x3d\xe5\x80\x8e\xe7\x56\x1c\x7f\x6f\xd8\xd3\x00\xe4\xe8\x42\x16\xce\x0d\x2f\xa6\x7c\xd4\x13\xa4\xd5\x89\x32\x27\x34\xe9\x74\x22\xbe\x4b\x8b\x16\xf1\x4d\xea\xd8\x40\x09\x66\xe1\xc0\x48\x6d\x12\x46\x97\x8e\xe6\x40\x2c\xda\x78\xea\x02\xa1\x23\x3d\xe7\x02\xc4\x08\xff\x47\xd3\x98\x4b\x25\x1f\x32\x15\xf5\x07\x5a\x22\x5e\x12\x4e\xde\x71\xfd\x66\x0a\x84\x9b\xf8\xe9\x0f\xf2\x4a\x0a\xb9\x00\xed\x29\x27\xf3\x3d\x80\x58\x7a\xdf\xba\xd3\x93\x13\x86\x78\x62\xec\xe2\xc4\x02\x56\x22\x56\x70\xb2\xf4\xab\xe6\x04\x47\xb8\x49\xf8\xf7\x23\xad\x13\xae\xe4\xb8\x02\xbb\x0f\xaf\x0e\x98\xbd\x78\xf9\x5a\x80\xae\x4c\x90\x5c\xcf\xcf\x44\x18\xa9\xe6\xd1\xdb\x16\x8e\x4e\xb4\xd2\x2f\x47\x09\xde\x2b\xb0\x6a\x1e\xfd\x37\x31\x61\x25\x0d\x02\x37\x62\x6f\x5d\xd8\x09\x2a\xce\xd3\xd6\x1a\x6f\x2a\xd3\x60\x72\x06\x16\x1d\x3a\x76\x3d\x77\x0e\xc6\xce\x35\x63\x9a\x6c\x2c\x3b\xbf\x04\xed\x79\xf1\x78\x69\xc2\x20\xa4\xce\xac\x5f\x9f\x5c\x49\x7b\x62\x3b\x7d\xe2\xa0\xb2\xe0\xdd\x49\x2e\x8f\x0d\xa4\xcf\xcc\x50\x56\x98\x6e\x10\x7f\x1c\x57\x72\x52\x59\x3f\x2d\x52\x17\x12\xcd\xf5\xae\x23\x43\xd3\x5a\xa5\x2b\xd5\xca\x66\x4f\xdf\x36\x16\x12\xc6\x31\x87\xee\x88\x95\x60\x4c\x07\x9c\xc5\xee\x27\x4a\x0b\x99\x7c\x5f\x19\x6b\x18\xef\x4e\x1c\x4e\x08\x89\xfa\x61\x64\xf3\x91\xa2\xa3\x88\xfa\x2d\x50\x4c\xdf\x5f\xc4\xfd\x3c\xab\xf4\x33\xb7\x76\x1e\x56\xa7\x2b\xe9\xb0\xb1\x54\x60\x81\x98\xb7\xab\x9f\x2d\xe5\xb5\x57\x66\x6c\x74\xa3\x34\x4c\xe8\xa7\x89\xbb\xaa\xe2\xfc\x08\x49\xa5\x9f\xcd\x03\x34\x41\xbe\x9a\x06\x26\xe1\x07\xfc\xe8\x86\xa3\xc8\x9e\xc7\x7d\x6f\xd7\x2b\xe5\x82\x55\x10\xa6\xc4\x8c\xcd\x4a\x3a\x1f\x6b\xd5\x5d\x61\xa2\xb1\x83\xa8\x57\xb4\xed\x41\xd7\x50\x47\x54\x55\x4b\xd8\x23\xf5\xee\xb5\xd4\x35\x1e\x20\x06\x2b\x37\xce\x95\x4d\x34\x97\x4f\x7d\xde\xc8\x45\x8c\x59\xc5\x25\x19\x4d\x97\xb0\x16\x9d\x93\x8b\xa0\xd6\xa2\xb8\xfe\x2d\x0e\x9a\x18\xff\xee\x23\xd8\x53\xed\x0b\xd4\xff\xe7\xa0\xda\xc9\xba\xb6\x4c\xbb\xd9\x0a\x8c\x14\x8c\xcc\x35\x75\x32\x52\x3a\x70\x14\xcc\xae\x9d\x1e\xfc\xef\xe3\x83\x08\xa5\xb1\x62\x7a\xc0\x92\xf5\x00\x77\x8a\x97\x67\x14\x15\x7e\xb0\x0e\x07\x53\xdc\x1e\xdd\xc9\x1a\x3c\x66\xa6\xa2\xc4\x9e\xcb\x0a\x36\xfc\x02\x07\xc7\x07\x83\xea\x75\xe9\xdc\xb5\xb1\xfb\x64\x09\xe0\xd5\xe6\xcf\x89\x11\x62\xe2\x53\x0f\xc5\x23\x31\x3c\x2c\xd4\xf5\x3b\x07\x36\xed\xab\xa5\x94\x24\x94\xba\x77\xae\xdf\xdf\xc2\x08\xa8\xce\xbb\xa8\x39\xff\xb7\x7f\xfb\x76\x3a\x6c\x90\x83\xf4\xb2\xef\x26\xf9\x73\xf6\x7c\x64\x6f\x3c\x96\x8a\xe3\xc1\x30\xcd\xf5\xab\xc8\x1d\x52\x10\x6f\x33\xd3\x51\x01\x48\xc0\xc3\x9e\x40\x60\xae\x4e\x0e\x09\x6c\xc1\x75\x7f\xde\xdd\x64\x7f\xeb\xed\xfd\xcb\x12\x70\x7f\x9b\x37\xd7\x15\xfd\xb6\x76\x40\xb1\xdd\xf5\x74\xc3\x55\xa2\xf3\xbf\x7b\xac\x54\xd6\xb5\xe2\xd4\xbd\x48\x01\x3c\x55\x50\xf2\x6b\xec\xd6\x55\x2b\x7d\x47\xed\xe6\x5f\xf0\xdf\xe3\x8f\x57\xab\x31\x69\x50\xbf\xfc\xf0\xf3\xeb\xc8\xb0\xf1\x9e\xf6\x5b\xac\xf0\x92\x39\x4f\xea\xe3\xd5\xea\xe1\x42\xaa\x3f\xfc\xfc\x7a\x90\x1f\xe0\x87\x96\x24\x7e\x12\x54\x77\xdb\xe9\x8d\x06\x72\x8f\xc0\xa4\xa9\x61\xd6\x2d\x6e\x05\xe3\x2c\xe9\xba\x16\x56\xc6\x03\x0d\x5b\x70\xc5\x13\xc7\x1d\xf9\x97\x81\x92\x09\x6a\xe9\xbd\xac\x96\x90\xaa\xa6\x44\xc4\xd8\x48\xc0\x64\x31\x19\x71\x29\x0d\x36\xa3\x98\x1b\x7b\x2d\x6d\x4d\xf7\xb1\x07\xdc\xd8\x75\xae\x05\x7d\x3b\xae\xde\xd3\x77\x74\x0a\x5e\xda\x05\x78\x3c\x1e\xb5\x5a\x41\x8d\x9a\xf3\xba\xf4\x4b\x52\x2f\x87\x46\x3a\x17\x4e\xb7\x31\x92\x64\x60\x66\x5a\x2a\xc8\xdf\x60\xbb\xed\xb1\x76\xd0\x51\xbc\x63\x87\x28\x0e\xe1\x33\xcb\x19\x9e\x4c\x2c\x6a\xd8\x56\xa1\x31\x0b\xb7\xc3\x81\xbc\x81\x0a\x96\x6b\xfb\xf0\x30\x2b\xb5\x43\xce\x1c\x65\xa1\xf4\x51\x16\x1a\xbc\xd4\xac\xa0\x60\x12\x27\x5c\x37\x6b\xd1\xc8\x4e\xe3\x71\x05\x30\x87\x00\x1d\x9f\xfe\xfe\xe9\xd3\xdf\xf7\x40\xfa\x5c\x4e\x12\xa6\xcf\x63\xb3\xc2\x2b\x9d\x0b\x5a\xfe\x1e\x9b\x3b\x2b\x78\xd1\xcf\xaf\xf3\x50\x71\xd8\x39\x10\xd3\x57\x4a\x77\x9f\xa6\xc5\xaf\xd9\xf6\x36\x36\x87\x66\x2f\xe5\x0a\x1a\xf0\x0f\x98\x63\x1a\x57\xc8\x1c\xe4\xb6\x84\x8c\x1f\xe3\x08\xa5\xa3\xdb\xe9\xd1\x26\x61\x7c\x46\xda\x3f\x63\x81\x52\x1a\x58\x60\xd4\x19\x29\xe1\x4e\xf9\x25\x28\x9b\xfc\x9f\x3d\xd1\x10\xa3\xf1\xd9\x57\x9a\xdc\x1c\xbd\x68\xd6\x5e\x8a\xe4\xf3\x1d\x35\x4c\x0c\x0c\xf5\x8f\xc4\x8b\x64\x64\x9d\xf3\x65\x62\x2d\x46\x71\x64\x99\xe0\xfa\x19\x98\xfb\xf8\x29\x12\xa5\x6d\xd0\xd6\xc0\x0b\xb2\xdb\x6d\x17\x45\x34\xea\x82\xc3\x9c\xce\xf3\x8d\x6a\x4f\x9e\x96\x61\x1c\xed\xa8\xf3\x2c\xfc\xd4\x39\x37\x93\xfc\x1b\xef\x78\x09\xa9\x77\xcf\x1e\x81\x06\xce\x0c\x0b\xa4\x32\x76\x95\x6c\xc2\xc0\xc3\x70\xcc\xfc\xc3\xd8\x9b\xf1\x3f\xc0\x9a\x23\x4a\x6a\x9d\x75\x9e\xfb\x7e\xce\x41\x7a\xf2\xae\x59\x10\x58\xc8\x61\xa1\x81\x2b\xa9\x7d\x56\x7a\xa9\xfc\x08\xeb\x43\x82\x1d\xdc\x39\xfc\x8f\xd4\xe8\x6e\x4d\xca\x2b\x4e\x9c\x9d\xad\x8f\xe2\x5a\x45\xec\x20\x7f\xbb\x9b\x37\xd2\x17\xb4\x53\x4c\xc5\x62\x30\x2e\xc8\x45\x23\xde\xa0\xd3\x6d\xba\x6c\xe5\xa4\xf8\x78\xc2\x94\x3c\xa9\xe1\xaa\x34\x96\x2e\x6f\xf8\xac\x5c\xec\x68\xf2\x2e\xdc\xee\xe8\x57\x88\xe0\xd4\xa6\xea\x52\x9d\x58\xe1\x1e\x59\x61\x91\x83\x0e\x17\x25\xe9\x54\xdb\xb0\xb1\x02\x6f\x63\xc1\xf7\x97\xa2\x83\xe6\xda\x85\x8f\xa2\x94\x2c\xf9\x54\x29\xf7\xdf\x8a\x69\xd5\x76\x53\xfe\xf1\x8e\x7b\x4e\xbb\x8d\x66\xf2\xed\x7b\x26\x25\xe7\x36\xa3\xed\x3d\xb0\x66\x82\xfc\x01\x6b\x03\xd3\x06\x44\x03\x57\xd0\x04\xc8\x9f\x5f\xfc\x24\x5a\xb0\x55\x00\x67\x81\x96\x6b\x50\xa6\xa8\x59\x6a\xa1\xbd\x6d\xa2\xe9\x28\x17\x4a\x5e\x98\x7a\xcf\x8d\xf2\x8c\x37\x1d\xee\x4a\x69\xe4\x0a\xb0\x8f\x51\x1a\x7b\xfa\xe5\x72\x94\x8b\xd4\x3c\x3c\xdb\x50\x91\x01\x06\x6d\x55\xaf\x29\xcd\x39\x03\x33\x54\xde\x29\xf6\x76\x7c\x1c\x58\xd0\xf1\x71\x21\x50\x46\x62\x05\x92\x39\xa9\xf4\x43\x19\x1d\x2c\xeb\x00\x76\x74\xa8\xd4\xe6\x1a\xc3\x7e\x61\x1a\x62\x4f\xda\xf8\xc2\x9c\xcb\x06\x45\x5d\x34\xf6\x43\x31\xbf\x0d\x97\x69\xd6\x6d\xa4\xb3\x13\x97\xf2\xd3\x7e\xb8\x3c\xd3\xa2\x6b\x5b\xb0\x82\x82\x33\x49\x41\xdc\x82\x56\x56\xf2\x23\x4e\x95\x16\x41\x5a\x36\x0d\x34\xc5\xed\x1d\xe2\x34\x12\xc4\x52\x3a\x11\x78\x5f\xc0\x4d\x25\x5b\x8e\x25\xe0\xbc\x44\x78\x2e\x57\xd2\x38\x2f\x9b\x86\x86\x23\x42\xe2\x71\xed\x73\x97\x76\x21\xc4\x9a\xa6\x31\x9d\x1f\xd7\xa5\xf6\x70\x33\xdf\x88\x89\xcc\xde\x88\x85\x95\x75\x87\x3a\x8b\x0b\xda\x5f\x60\xe4\xf3\xb9\xaa\x52\x36\x56\xb0\x94\xbc\x78\x07\x57\xca\xc5\x78\x97\x03\x5f\x76\x72\xe5\xf5\x53\x89\xd8\x64\x57\xa6\x1d\x0e\x8e\xee\xdb\x5e\xe9\x9e\x14\x7f\x32\x8d\x64\x48\xb9\xf8\x78\xf2\xa2\x8b\xcd\xee\x68\x1b\xc2\x02\xd7\x14\x93\x7f\xc8\x86\x63\xe5\xd2\x26\x4e\x97\x10\xad\x85\x0a\x01\xfd\x42\xfd\x6d\x77\xd9\xe6\x40\xaf\x48\xe5\x9b\xd1\x73\x6f\x34\xe9\xf3\x4e\x2c\x4d\x53\x9f\x1e\xf7\x74\x07\x34\xbd\x53\x61\x07\xcf\xc4\x9a\xd2\x31\xca\xd1\x5c\x04\x2a\x6e\xac\x02\x45\xc9\x4f\xbc\x39\x55\x6e\xee\x59\xcf\x19\x5d\x12\x9b\x55\x9d\x43\x05\xef\x7e\x14\x3b\x56\xe8\xfa\xf8\x65\x3f\xb4\x8b\x26\x1d\xb5\xb1\x8d\x43\x52\x1a\x30\xc2\x8a\x65\xa2\xa4\x50\x63\xd5\x7c\xd2\x51\xf3\x7d\x2d\x38\x5d\x58\x7a\xde\x35\x4d\x9a\xac\xef\x75\xe1\xfd\xd3\x7c\x58\x25\x41\x2a\xd6\xd9\xeb\x97\xaf\xfe\xf6\xe3\x9b\xb3\x0f\xe7\x3f\xbf\xfc\xdb\xf3\xb7\x6f\xbe\x3f\xff\xd3\x4f\xef\xce\x3e\x9c\xbf\x7d\x13\x3e\xf9\xe1\xfd\xdb\x37\x82\x6e\xdf\xa4\x68\x2d\x5d\xf2\xb1\x54\xa5\x4e\x35\x37\x3e\xd0\x45\xc7\x59\x15\x08\x4f\x1f\x8e\x0d\xef\x0b\x9d\x3c\xcd\x8e\x28\x23\x38\xcb\x8c\x89\x5e\xb6\xc4\x36\x1a\x4a\x45\xff\x8f\xc1\xac\xda\x34\x79\x6e\x51\x76\xfa\x00\x45\x13\xab\x38\xe7\x55\xdb\x80\xdf\x38\xf0\xfe\xe9\x95\x00\x2c\xa5\xd6\xd0\x8c\x4b\x5a\xbb\xdd\xf8\x7f\xc5\xf6\x13\x8f\x66\x67\x9a\x74\xb1\xe2\xc0\xcc\xfb\x66\x2e\x1d\x6b\x00\x9e\xfd\x24\xf1\x46\x63\x3b\x81\x38\x0d\x9b\x61\xc6\x12\xad\x10\x79\xfd\xf4\xee\xdc\x6d\x05\x58\xe9\xcb\x2f\x06\xb7\x06\xe7\x95\x4e\xad\x0c\x1e\x0a\xe6\x68\x9d\xfc\x26\x58\xde\xba\xee\x67\x20\x2b\x0e\xbe\x17\x6c\xa5\xe0\xc2\x5e\xe8\xba\x82\xcf\xc6\x15\x8e\xc5\xef\x5d\x2e\xd4\xdd\x28\x06\x9c\x81\x70\xdd\x2c\x0c\x9f\xe1\x45\x0a\x80\x67\xe1\x45\x6d\x74\x18\xf0\x62\xbe\x4d\xa8\xc5\x21\x67\x73\xca\xdc\x7e\x64\x66\xcd\x25\xd8\xdc\x8c\x38\x6a\x4f\x41\x66\x1d\x30\xf3\x3a\x38\xda\xb2\xdf\xcf\x39\xa3\xbd\x76\xdb\x5a\x53\x77\x15\xdc\x70\x3a\x9f\xb9\xc9\xde\x2e\xe6\xaa\xf1\x60\xf9\xd8\xc6\x91\x66\x6f\x65\xb1\x51\x0d\xa3\xe1\xfc\x98\x03\x02\x34\x28\xc1\x5e\x82\xac\xc1\x8a\x83\x0a\xc6\x2c\x9a\x97\xca\x79\x63\xd7\x07\xf1\x55\x87\xf7\x4a\x57\xcc\x78\xf9\xe3\xa0\x96\xce\x00\x34\xba\xb9\xaf\x48\xd2\x69\xb8\x06\x5b\xbe\x78\xc0\xbc\x73\x54\x80\x90\x14\x84\x1d\xb5\x12\xa9\x71\x82\xd2\x97\xe3\x99\xd2\x75\x64\xd6\x37\x3f\xf3\x83\xee\x1c\xfe\x7c\x5b\x26\xa1\xc4\x09\xb1\x37\x77\xe1\x5e\x51\xfa\xf2\xbb\x62\x09\x91\x34\x83\xc9\x07\x94\x31\x85\x48\x48\x32\xb1\x37\x31\x5a\x95\x8e\x66\x5f\x34\x80\x8b\x4c\xca\x44\xc4\x68\xf5\x6e\x11\xae\xb7\x4e\x74\x08\x9f\x2a\x68\xb7\x8f\xc8\x01\x62\x2c\x31\x0f\x0b\x14\x4e\x29\xdc\xc3\xd1\x9d\x95\x54\x7e\x02\x24\xe9\x52\x39\x9e\x8f\x6e\xad\x28\x87\x0b\xc9\x9f\x93\x8a\xf8\xbd\x90\x07\x4c\xbb\x7b\xc5\x2f\x92\xdc\x10\x66\xda\xf2\xbc\x42\x01\x98\x48\x3e\xbe\xc3\x98\x71\x57\x99\x06\x5b\x62\xd4\x2c\xbf\x8f\x48\x41\x8a\x8f\x9f\xcc\x64\x75\x09\x41\x3d\x74\xb9\xd2\x6d\xb6\x16\xff\xb3\x93\xf6\xb2\x73\xe4\x6b\xbb\x46\x3f\xdb\x50\x0b\x4c\x46\x16\xf5\xa8\x8b\xa1\xbe\xbf\xd3\xc8\x89\x32\x27\x8b\x4e\xd5\xe0\x4e\x78\xa9\x47\xa1\x50\x35\xc6\xde\x0e\x46\xf8\x2a\xb6\x1d\x6a\xcc\x42\x98\xce\xb7\x98\x9b\x9e\xb8\x19\x62\x7a\x0f\x8d\xec\x95\x59\x38\xb1\x02\x87\x29\x16\x69\x54\x22\x38\xb8\x82\x7d\xe2\xe4\x67\xf5\xc7\x60\x13\xfa\xe2\x58\xc9\x93\x73\x58\x56\x56\x9f\xbf\xf9\xfe\x6d\xe9\xfd\xfe\xe8\xf6\x08\x47\xbf\xc5\xad\xc5\xa9\x5d\xd4\x05\x07\xd3\x8c\x5b\x0b\xde\xaf\x31\x41\xe9\xf6\xac\x41\xbe\x83\x07\x34\x88\x62\x6b\x4a\x2f\x0e\x62\x3f\x28\x54\x36\xc3\x6a\x5f\x65\x8f\x85\xf3\x83\x6a\xd9\x7b\xce\xe6\x7b\x8d\x2b\xf4\x5d\xe7\x1b\x06\xc6\x90\xe1\x96\x06\x19\x6e\x33\x60\xdd\x86\xa3\x2c\x9c\xe2\xfd\x4e\x0a\xb5\xa1\xd3\x41\x01\x83\x4d\x1d\x92\x4f\x20\xda\xa7\xc7\xb4\xdb\x63\x9c\x91\xad\x59\x74\x6b\x1b\x8d\xe9\x00\x41\xbf\x40\x3f\x88\xae\x80\x72\xc2\x9f\x94\x8d\xca\xfa\x66\xe2\x35\x19\x51\xa5\xa3\x9f\xa6\xcf\x4a\x15\x26\x80\xe1\x3a\x14\x89\x15\xd3\xa0\x6d\x1c\x1e\xd0\x77\xa7\x8d\xa9\x2e\xf1\x14\x3c\x34\x61\xf7\xab\xd3\x99\xf1\xee\xe0\x68\x32\x99\x4c\x27\xe2\xcd\xdb\x0f\x2f\x4f\x39\x3a\xa5\x62\x74\x4b\xd6\xb5\x23\x69\x2f\xb1\x95\xd1\x4a\x51\x03\xc3\x6d\x79\xe8\x29\x5d\x9e\x52\xe3\x52\x8b\xb7\xaf\xd8\xab\x63\x41\xd6\x27\xd7\x56\x25\xab\x64\x25\x5b\xc7\x1d\xa7\x64\x4d\xbd\x3f\x18\x07\x16\xc2\x05\x87\xe8\xd2\x20\xa5\x23\x3f\xeb\x90\x63\x2d\x22\xad\xe6\x97\x52\x67\xbd\x6a\x23\x30\xd2\xb3\x8b\x1f\x41\x9e\xe5\x1d\x44\xa0\x2b\x64\xe0\x20\xab\x82\x6e\x21\x41\xd2\xcb\x09\xae\x9a\xae\x86\x71\x1d\xe8\x40\xfa\xf0\x8f\x5e\x77\x9e\x5b\xf3\x5a\x34\xed\x82\xd2\xcd\xa2\x99\x4d\x5d\xf1\xc2\x56\xa4\x47\x39\x25\x9b\xf5\x3f\xd8\x1b\xcf\x96\x4a\x65\x6a\xc8\x59\x03\xb2\xae\xfb\xad\x76\x52\x0f\x2d\xd4\x40\x08\xb6\x6c\x7f\x4c\xb0\x35\x5f\x71\x0d\xa6\x1b\x74\x4d\xed\x3e\xb3\x3f\x4e\x8b\x29\x76\xd4\xe3\xbf\x20\xac\xc3\x94\xfe\x9c\xf1\xce\x0f\xd2\x95\x20\xdd\xac\x1e\x6d\x5a\xf0\x2b\xd9\xee\xc1\xe5\x9f\xbc\x91\x2b\x28\x9e\x2a\xa2\x81\x45\x0f\x93\x82\xb4\x82\x6a\x1b\xe5\x53\x75\x99\xdb\x85\x67\x6f\xe9\xc1\x7f\x2f\x68\x1b\x5f\xff\xf8\x1f\xe3\xf0\xed\xc1\xce\xa6\xc7\x07\x91\x93\xe1\xd7\x07\x83\x6e\xc7\xc5\x9f\xf6\xd8\xcb\xd6\xad\x9c\x34\x20\x5d\x76\x5d\xdd\xb2\x33\xde\x4a\x7f\x7f\x37\xef\x6c\x1b\xc0\x3e\x56\x85\xdf\x92\x41\xb1\x6e\x11\xe0\x2d\x8c\xbd\x7c\xbb\x2b\xac\x83\x81\xcb\x03\x0a\x2c\xbd\x96\xed\x41\xb8\xe0\x07\xaf\xc2\xd6\xc8\x70\x0b\xff\xeb\xc1\x4b\x7f\xeb\x95\x59\xca\x19\x34\xe3\x4b\xd8\xa7\x2d\xe1\x2b\xcc\x9b\xdf\x8a\x2b\x55\x83\xf6\x6a\xbe\xa6\x96\x72\xd8\x68\xd6\x68\x0f\xd9\x82\x40\xe4\x6d\x03\x89\x3a\x4b\x72\x9b\x49\x63\x17\x27\x05\x4a\xb7\x40\x8a\x0e\xfb\xbd\x61\x2d\xdc\xfb\x77\x85\x78\xe7\xa1\x0f\xc5\x4a\x80\x2e\x6b\xee\xa6\x05\x2d\x5b\xf5\x70\xe9\x1d\xe1\x8f\x67\x17\xe7\xe2\xc5\xfb\x57\x37\x77\x10\x0b\x9a\x45\xee\xb4\x54\xf6\x9e\xfe\x2a\xd9\xf9\x32\x4d\x17\x64\xe8\xb0\x14\xa6\xec\x0b\x16\x0c\xa3\x07\x6c\x22\xf2\xf6\x3a\x3f\xa3\x06\xda\x71\x94\x54\x52\x56\x46\x6c\x8f\x92\xf5\x9b\x19\x34\x26\xd7\xa2\x0e\x2d\xb9\x19\x60\x6c\x99\x47\x61\xfe\x86\x95\xda\xcd\xd1\x85\xad\xb5\xf1\xdc\xcc\x39\xfc\xa5\xff\x66\x6a\x79\xae\x86\x3d\xd7\xfc\x96\x15\x59\x86\x09\x84\x47\x60\x62\x90\x19\x3c\x2e\x76\xbc\xa7\xd7\xe6\x43\x96\x35\x25\xba\x28\x2b\x35\xa2\xd2\xf6\xb2\xd6\x78\xad\x3b\xbd\xb4\x5a\x2c\xc3\xa7\xb0\xb9\x42\xca\x8a\xab\x67\x0f\x68\x0c\x5f\xbc\xf8\xee\x16\x7d\xfc\xc2\xd4\x2f\x94\xb3\x1d\x0e\xfa\xae\xab\x17\xe0\x13\x2d\xd0\x75\xe2\xa0\xe3\xf9\xe3\xeb\x16\xb7\x52\x7a\x2c\xaf\xa4\x6a\xe4\x6c\xef\xfe\xd1\x39\x30\x8b\xac\x73\xdb\xee\xf1\xfa\x62\x04\xd1\x79\xe6\xbd\xfd\x55\xe2\x93\x01\x52\x0b\xb8\x52\x15\x87\x23\x53\xbb\x50\x4a\xbe\x96\x5a\xc8\x99\x33\x4d\xe7\xf3\xa2\x96\x3a\xab\x72\xca\xc0\xe4\x2d\x59\x2c\x71\x52\x33\x17\xd3\xde\x96\xb8\x46\x60\x25\x3f\x8d\x3b\x5d\xfc\x96\x17\x4a\x5d\x96\x87\x81\xeb\xe2\xe3\x7b\xc6\x4a\x74\x85\xe5\x05\x08\x15\x11\x2d\x5f\x86\x90\x22\x3d\xfd\xeb\x54\xfb\xb0\x89\x94\xa0\x6b\x36\xce\xc4\x22\xb7\xa3\x84\x47\xc2\xe0\x10\x5b\x84\xc3\xde\x14\xd1\x13\xbd\x81\xc7\x74\x6b\xf9\xbe\x3e\x9c\xdc\x18\x24\x36\x62\xb2\xe3\x2c\xa8\x76\xf4\x33\x62\xbb\x70\x6e\x49\xe7\xd4\x42\x0f\xde\x5a\xc0\x6d\xe4\x89\xcc\xe0\xcf\x13\x71\xae\x45\x25\x39\x3a\x98\xbe\x53\x0e\x7b\xc3\x62\x2a\x72\x32\x62\x08\xa9\x98\xed\x12\xad\x4a\x12\x43\x98\xa5\x4c\x87\x12\x67\x98\x08\x74\x8b\x72\x4e\x19\x06\x0f\xd9\x90\x25\x29\x3e\xef\x1a\xc1\xaf\xbe\xc1\x27\xef\xe8\x91\x50\xb6\x7f\xc1\xc2\x13\x27\xb4\x49\x2d\xcc\xd9\xa1\x26\x24\x37\xfa\xde\xf2\x42\x68\x0f\x7a\x0a\x34\x1b\xdd\xc3\x6e\xff\xb1\x57\x07\x3e\x68\x0e\x0e\xbb\x9e\x8f\x84\x63\xa7\x35\x2d\x1d\x48\x74\x35\x03\xb4\x4e\x06\xef\xd2\x09\x0b\x0b\xe5\xbc\x5d\x3f\x86\xba\x6e\x3a\x9d\x71\x99\x74\x7c\x4b\xc9\xf5\xc6\x79\x1e\xc2\xaa\xf5\xeb\xa3\x8c\xdb\xe4\x61\xde\x42\x2b\xe5\xda\x8b\xc6\xcc\x7a\x05\x76\xdb\xd7\x3c\xd7\x35\x17\x65\xa8\x79\x7f\xda\xe2\x51\x74\xd6\x75\x68\x4a\xcc\x69\x25\x83\x47\xba\x82\x2d\xd2\x5f\xb3\x05\x9c\xf8\x44\xb8\x92\x77\x77\x70\x6f\xd4\x9f\xd7\xe0\xa1\x2a\x1e\xc6\x28\x5b\xea\xa9\xf9\x96\x2b\xd0\x67\x20\x71\x13\x87\x2a\x6b\xeb\x45\x67\xbc\x44\xa9\xe8\xa2\x2a\xfa\xdc\xb5\xd8\x33\xe3\xa1\x74\x03\x7c\x7d\xa5\xa7\x1b\x2c\xf3\x73\x01\x3d\x37\xc6\x86\xe8\x17\xdc\x74\x58\xc6\x27\x70\x96\x20\xa6\x17\xa6\x7e\xdf\x42\xf5\x01\x56\x01\x62\xc0\x84\x99\xae\x4a\xcf\x62\xe4\x2c\x87\x72\xba\xe9\x24\xb0\x86\x49\x6b\xea\x34\x8e\xb4\x0e\x05\x4d\x3d\xca\x49\x16\xe5\x98\xa2\x96\x99\x92\xa7\x78\x64\x2c\x7f\xe0\x07\xda\x55\x25\x56\x60\x17\x58\xe9\x5a\x2d\xc9\x44\xdb\x88\xd7\x6c\xbc\x7a\x93\xef\x3c\xbd\x5d\x5c\x64\xbd\xc6\xde\xd7\x30\x0a\xa6\x3c\xae\x95\x78\x4b\xff\x5d\xcc\xc1\x03\x9a\xbb\x8d\x8f\xd6\x9a\x15\xf8\x25\x74\x77\xee\xad\x71\x17\xc7\xec\x45\x5a\x25\x76\xde\x28\xcb\xe9\xf3\x5f\xc7\x95\x59\xb5\xd2\x63\xb3\xb3\xe8\xfc\x21\xbc\xc5\x77\x9a\x89\x6a\xc3\xa8\x70\xdc\xaf\x8d\x56\xde\xd8\x69\x52\x18\x73\xed\x0a\xdd\x92\xd8\x7b\x81\xe5\x68\x65\x65\x3b\xf4\xae\xc6\xe8\x48\xe9\x62\x2d\x01\x8e\x77\x9a\x22\x2e\x94\x20\xc9\x99\x49\xdc\x6d\x82\x86\xbd\x56\x95\x35\x17\x84\x2f\x9c\xf2\x35\x7d\x3a\x11\x7f\x39\x7b\xf7\xe6\xfc\xcd\x9f\xf8\xed\x70\x34\x1b\x8b\x77\x13\xb6\x6d\x23\xbf\x51\x84\x61\x4f\x0e\xca\x2c\x94\x5f\x76\xb3\x49\x65\x56\x27\x95\xb1\x60\xdc\x49\x3e\xbd\x71\x04\xf3\x97\x8b\xf2\x44\xb1\x6a\x0e\x7f\xff\x6b\x14\x5f\x69\x0d\x2c\xf0\x52\xd1\x0f\x3e\x4b\x79\x79\x50\x4f\xc4\x5f\x4d\x87\x48\xc3\xec\xd8\xd6\xd4\xe3\x15\x83\x18\x65\x2f\x17\xba\x26\xf1\xb7\x71\xc2\xe9\x4d\x0f\xe5\x97\x86\x83\x0f\xc5\x47\x6f\x4b\xac\xe2\xa4\x1b\x33\xa8\xed\x7d\xea\x1e\x81\x07\xb7\x40\xd8\x3e\x2e\x55\x52\x3e\x77\x50\x42\x58\x2f\x72\xef\x41\xaf\xd4\x1d\x4b\xde\xdd\x54\xdc\xbe\x32\x4d\xb3\x59\x7f\xda\xa3\x87\x1c\x27\x27\xa0\x0a\xd9\xd1\x35\xcd\x98\x0a\xe9\x1f\xd2\xbe\xec\x9a\x46\xbc\xc7\x55\x98\x6c\x1c\xc5\xa7\xf1\xed\x5d\x5a\x3e\xba\x20\x5a\x53\x8f\xb2\xff\x66\xf0\x0e\x16\x46\x29\xbc\x55\x70\x35\x64\xc3\xa4\x7a\x91\x53\x47\xa7\x47\x68\x92\x2e\x46\x7c\xa1\x5c\xae\x78\x08\x2a\xbf\x33\xb3\x92\x9a\xf2\x4b\x8d\xc5\xa7\xb4\x50\xed\x5d\x9b\xee\x49\x91\x9a\x47\xac\xa9\x2c\x05\xa5\x87\x10\xd2\xa2\x38\x6d\x86\x2c\x82\x10\x37\x38\x2d\x84\xd4\x05\x23\x7c\x4a\x3a\x34\xbd\x17\x44\xf0\x15\x5a\x7b\x00\x1b\x27\xc5\x4d\x6e\x36\x27\xda\x6c\x4c\xb4\x0e\x9c\x21\xbf\xb8\xfd\x39\xe0\x22\x93\x0e\x52\xdf\xb9\x6e\x15\xbd\x51\x43\xbc\x2a\x4e\xff\x6c\x2d\x86\xc4\xb0\x9a\x7b\x6d\x3a\xba\x50\x69\xe3\xfd\xf7\xc5\xb6\x40\x13\x36\x88\x4e\x3a\xdc\xdf\x88\xc0\x97\x3a\x5d\xf5\x70\xa1\xe9\xfc\x63\xa4\xe4\x9f\x9c\xb7\xd0\x19\xee\xfd\xd2\xf7\x80\x34\xb1\x19\x2e\x57\x3d\x94\x2d\x91\xcf\xe7\xa2\x81\xb9\x17\xa8\x70\x13\x24\xc3\x80\x49\x8c\x3a\xc8\x4b\xd0\x59\x11\xdd\x4a\x72\xf9\x7c\x7a\xb6\xd2\xc6\x13\xdd\xf8\xae\x36\xd8\x18\x8c\xda\xb3\xb2\x5a\xa7\xf7\xda\x86\x5a\x37\x37\xdd\x42\x74\xd6\x89\xe5\x8c\x68\x3f\x5c\x9b\x14\xb3\x7a\xd2\x92\x49\x10\x73\x1f\x8a\x12\xb2\x69\x6c\x14\x2f\xac\x09\xc7\xa8\xfb\x71\x2e\xcc\x64\x6b\x65\x05\x39\x22\x73\x4b\x64\xf4\x0b\xf3\xb1\x07\x2d\x69\x92\xb9\x92\xf0\xbd\xc1\xf0\xb2\x93\x82\x24\x6a\xd8\xec\xba\x05\x31\xed\xb7\x36\xa9\x4d\x75\x09\x96\xa6\xff\xe8\x8c\x2e\xf8\x38\xa7\x82\x3c\x8c\xa3\x01\xb5\x43\x4e\x53\xd9\x54\x0d\x7d\xf1\xc7\x58\x27\xc9\x61\xe2\xed\xfd\xd3\x38\x94\x2d\x9e\x9b\x55\xab\x1a\xee\xa9\x28\x05\xa7\x1b\x91\xf2\x1c\xc6\x8d\x84\x9a\x40\x3f\xa0\xd8\xca\xea\x32\x1c\x7c\xc0\xce\x33\x1a\xc0\xe1\x44\xc5\x91\xfb\xf4\x70\x10\x32\x96\x58\x0b\x3a\x12\xd2\x89\x6b\x68\x9a\xf0\xdf\xbf\x9e\xbd\x7e\x85\xee\x9c\xff\xf5\xfa\xd5\xe0\x4d\x4a\x56\x60\x99\x7d\xc5\x17\x28\xbd\x68\x40\x3a\x2f\xfe\xf5\x4f\xea\x3b\x7c\xed\x11\xfb\x0d\xb3\x16\x8b\x77\xb3\x17\xc9\xe6\x8d\xcc\x3a\xd5\xd4\xa3\xe8\x82\xc1\x29\xd9\x85\xd5\x23\xcf\x8b\x20\xef\x58\x3f\xc3\x21\x38\x5f\xaf\x0c\xa8\xf8\x1b\x1b\x2d\x05\x91\xd5\x3d\xf7\x6b\x3c\xfd\xa3\x51\xf1\x14\x1d\x68\x6c\x3f\x47\x60\x67\x27\xe4\xa3\x50\xd2\x8a\x03\xef\xeb\x4a\x65\xf7\x69\xa6\xfe\x0b\xfa\xf8\xc3\xba\x85\x1d\x3a\x54\xa4\x53\x9e\x96\x52\x29\x73\xa3\x8b\xb9\x74\x7e\xfc\x51\x5a\x6a\x76\xc1\xf4\xb5\xa5\xbd\x30\x7f\x75\x34\x89\x9e\xb1\x99\xf1\xcb\x72\x38\x3a\x0b\xe3\x78\x7c\xcf\x2a\xaa\x18\x23\xe1\xaf\x4d\x8f\x21\xff\xa8\x52\x5b\xa2\x1c\xe0\xc1\xb7\xe3\x48\xa3\x1c\x21\xc3\x44\xe6\x17\x67\xbc\x54\x3e\xb6\x61\x6c\x2d\x54\x50\x83\xae\x40\x98\xd8\xeb\x2e\x03\x12\x7d\x1f\x3a\xb0\xc5\x8a\xfa\x3d\xae\x27\x01\x13\xf4\xb8\x9f\xd2\xf3\xa6\x0b\x83\x63\xf3\x55\x74\xac\x16\xfc\x36\x56\xd6\x86\x15\xfb\x8f\xee\x95\x1e\x42\x2c\xbb\x46\xae\x60\xa9\x13\x76\x5d\x74\x4a\x9d\x2b\xeb\x7c\x0f\xe3\xc9\xbb\x41\xee\xc8\x14\xb8\xa7\x01\xbd\x9a\x2e\xc6\xaf\x36\x02\x3e\x29\x87\x91\xbc\xcb\xe8\xd7\x5c\x05\x83\x1d\x36\x9a\x3f\xd0\x97\x45\x32\x21\x5a\xe5\x7b\x68\xb7\x37\xf3\xbf\x77\x61\x96\x1d\x0f\xe2\xf6\x42\x25\xa5\xed\xd8\xf7\x2e\xb2\x7b\x60\x5b\x7d\x16\x59\x9d\x45\xef\xa0\x40\x41\x97\xb0\xe6\xa0\xac\x77\x82\x5f\xa4\x22\x02\xa9\xcb\x82\x9b\x24\xe6\x1b\x53\xc9\x06\xdb\x76\x91\x94\x0c\x54\x8c\x29\x47\x01\x0c\xaa\x98\x9a\x92\xec\x99\x0a\x33\xfb\x08\x15\xd7\x87\x60\xcf\x95\x30\x7f\xe7\x92\x83\x15\x8b\xca\x56\xe0\xc1\x06\x36\x5e\x73\xa5\xd9\x74\x1c\xc7\x1f\xc2\x27\xb9\x6a\x1b\x38\x15\x53\xdf\xb8\x71\x01\x7a\xfc\xe4\x88\xb4\x75\x2e\x28\x27\x47\x50\x6f\x8b\x98\x5f\x40\x3d\xfe\x13\x5c\x13\x71\x71\xf3\xba\xc8\xd0\x96\x6a\x11\x37\xdf\x5a\x65\xac\xc2\xfe\x88\x54\x7a\x93\x5d\xd5\xa8\x4d\x23\xce\xf3\x66\xb8\xff\xce\x88\x6a\x27\x7b\x5b\xb8\x84\x75\x5c\x85\x80\x0d\x77\x98\xff\x40\xfa\xb9\xde\xf8\x30\x6a\xe9\xfc\x5e\x6d\x91\x15\x25\xdb\xd6\x1a\x49\x5d\x1f\xd2\x3b\xae\xe1\x9a\xc0\x9a\xfa\xd6\x95\xdd\x66\x94\x8b\x99\x0d\x8c\x07\x37\xed\x25\x60\x28\x9b\xe9\x80\x5b\x5c\xa4\x9b\x98\xde\xbc\x2d\x4f\xac\xc4\x3c\xd6\x21\xed\x3e\xa6\xd1\xc6\xa6\x48\xa0\xd2\xf7\xf2\x86\x21\x45\x99\xc1\x8e\x0f\xb1\xed\x1e\xf5\xba\x42\x4c\x93\x14\x74\x31\x15\x2f\xf9\x7f\x88\xdb\xa8\xc0\x97\x17\xac\xf9\xc6\x0e\xaf\xbe\x6b\x63\xa2\xed\xe4\x91\xb6\xe4\xdb\xb7\x89\xd6\x3e\xcd\x52\x91\x9c\x7b\x41\xee\xc6\x8d\x3d\xd8\x15\x1f\xc4\x9e\xd6\xc6\x87\x57\xef\x45\x31\x0a\x47\x8c\x44\xa3\x2e\x41\x4c\xa1\x5e\x40\x38\xe2\x56\x3a\xc7\x9d\x6b\x49\x1e\x5a\x00\x5d\xd9\x75\xeb\xa7\xdb\xea\x41\xb3\x7b\x9a\xae\xdc\x66\x5d\x68\xd1\xc9\x68\x47\x75\xe8\x80\x44\xef\xb0\x99\x61\xdb\x35\x6c\x74\xd4\x2b\xe3\xbd\x11\x3e\xde\xca\x67\x41\x99\xdd\x27\xfb\x00\x5b\x9a\x78\x91\xc7\x17\x57\x95\x60\x1d\xec\x88\xeb\x04\x73\xa6\x33\xaa\xbb\x07\x85\x91\xf9\xcb\x49\xb8\xbf\xe1\x5f\xbf\x1e\x90\x2b\x81\x32\x7f\x52\x15\x2a\x67\xf9\xe5\xc5\x47\x1c\x4d\xc9\x65\xef\x29\xf5\x95\x98\x14\x7b\xe1\xa3\x37\x22\x87\x24\x82\x0e\x31\xa2\x67\x93\xae\x15\xb9\x47\x92\x17\x52\xe2\xd0\x64\xf6\x8a\xa2\x95\x07\x9b\x7d\x07\x27\x07\x77\x38\x97\xc1\x89\x24\xd5\x63\xe7\xb9\xec\x97\xc8\xb5\x8d\x6a\x4a\x61\xfb\x90\x94\x93\x19\xed\x03\x52\x4c\xf8\x28\x3b\x6d\x05\xd3\xce\xfd\x50\x4d\xbc\xf6\x18\xf7\xb8\x1f\xaa\xe1\x29\x23\xed\xdc\x07\xd5\xc4\x54\x82\xfd\x6e\xb3\xfc\x4c\xb6\xd3\xeb\x99\xfa\x1b\x71\x9e\x6d\x92\xf6\xbe\x49\xa9\xbf\xaf\xff\xa4\xa4\xbd\x29\x69\xb7\x4e\xb4\xe7\x11\x95\xb5\x9b\x03\xea\xe2\x1c\x07\x97\x3c\xdf\x88\xd7\x68\xa8\xf5\x74\xeb\x1c\xf3\x26\x0b\x8c\x1e\xfe\x4d\x33\x4f\x44\xe9\xa2\x4b\x72\xbd\xa7\x11\x60\x6e\x86\x6a\x80\xa3\xec\x3c\xe3\xac\x78\xa5\x2b\x3d\x11\xef\x0d\xa9\xe5\x88\x40\x8b\x1a\xb1\x60\x7b\x91\x1f\x3e\xc2\x76\xaa\x29\xcb\xd0\x41\xd5\x25\xb9\x13\x9f\xd6\x30\x7a\x72\x3e\x8f\xcb\x42\x83\x65\x52\x98\x9a\x53\x58\xce\x51\x01\x22\x6b\x25\xe6\x7c\xc4\x7e\x16\xc5\x06\x79\xee\xe7\x67\x48\xe6\xf1\x89\x88\xa0\x50\x21\x55\x5c\xc9\x46\xd5\xb1\x17\xbc\xd2\x0b\x04\x6a\x69\x6c\xaa\x5c\x20\xe2\x39\xe4\x9f\x26\xc9\x85\x38\x71\x57\xd5\x51\xcc\x5f\xa7\xae\x6e\x1c\x15\x57\x7a\x6e\x25\x85\xb2\x83\xfe\xc6\xef\x62\xc2\x40\xd1\x1f\x96\xb2\x50\x3f\xe5\x87\x54\xa7\x6e\x55\xd2\xef\x93\x75\xec\x26\xde\x98\xfa\x9c\x15\x99\x7b\x60\x21\xd9\x6d\x7a\x7f\x2c\x24\xde\xf6\xff\x38\x16\xa2\x34\xdd\x8f\x71\x50\xc4\x4b\xdd\x7e\xff\xf7\xf3\x7b\xa6\x04\xbf\xa0\x5f\x83\x6c\x68\x07\x71\x81\xd8\x3e\x25\xd6\x22\x61\xdd\x6b\xd0\xfc\x5f\x90\xe1\x53\x36\x99\x7a\x07\xb1\x27\x07\x0f\xba\x5f\x25\x2e\xc7\x4d\xa8\x5b\x77\x2e\xd5\x7d\xb0\x6c\x87\xd8\x0d\xed\xbb\x58\xe6\x5b\xe6\xb8\x74\x8e\xad\x68\xe6\x4e\xe1\x9f\x3c\x00\x0b\xf3\xf2\xaa\x54\x91\xb5\x25\xf8\x7f\xf9\xad\x1b\x0f\xb6\xe3\x4e\x02\x33\xfb\x97\xc1\x6f\xc5\x19\x53\x36\xd7\x6c\x67\x06\xa6\x1c\xa7\x8e\xc2\x95\x69\xae\xc8\xbd\x4c\x31\x1f\xd7\xcd\x3e\x32\x58\xd5\x52\xea\xc5\x63\x30\x83\x79\xdb\x77\x2d\x9d\x2f\xd1\xee\x99\x7b\x88\x5f\x7e\x91\xad\x5a\x58\xd3\xb5\x27\xbf\x72\x85\xf8\xe9\xaf\x97\x4a\xd7\xa7\xbf\x24\x5e\x7d\xf2\x2b\xda\x21\x83\xe5\xef\x4e\x52\x37\x46\xb6\xfb\x8d\x00\xc9\x58\xdf\xf4\x48\x32\xe3\x88\x1f\xa7\xe0\xbd\x8b\xdd\x26\x25\xb2\xa7\xd8\xbe\x95\x1e\x16\x42\x9b\xdf\x50\xda\x41\x7e\x03\xd3\x89\x43\xf4\xea\xe5\xa8\xc5\x51\xe2\x73\x81\x5b\x65\x51\xc5\x19\x39\xdb\x23\xc5\x9c\x4a\xa7\xfa\xf9\x52\xb1\xff\x93\xe4\x7c\xa6\xdc\x26\x26\xa6\xed\x52\x18\x83\x9e\xe0\x91\xfd\x96\x7e\x8f\x20\x2c\x7b\x3f\x69\x7d\x58\x24\x87\xf9\x7c\xf1\x40\x35\x40\x3d\x78\xcb\xb6\x5c\x56\x9b\x1a\xc6\x83\x36\xdf\x37\xd6\xeb\x26\xaa\x32\xdc\x7d\xca\x70\x67\x8f\x37\xa6\x86\x8b\x30\x51\x9c\xfa\x77\xb1\xbb\xd8\x43\xa5\x6e\xd0\x02\xdb\xfd\xde\x7d\x34\xc5\xc4\xd0\xb2\x62\x62\xc9\x0e\x0b\x4a\xe6\x88\x73\x99\xd4\x0a\x00\xf1\x99\x75\xa5\x14\x87\xd5\x35\xbd\x72\x1d\x38\x72\x4a\x11\x0f\x62\xe4\xec\xe2\x9c\xdf\xa6\xcf\xbd\x2f\x37\xc0\xdc\x91\x93\xf4\xff\x09\x7d\x7e\x6e\x51\xe9\xde\xef\xdf\xa1\xba\xd7\x7b\x03\x8f\x04\xa1\x97\xfc\x2e\x7e\x3c\xa6\x7e\x1b\xf8\x5e\x8f\xe2\x3d\x1b\x0a\x53\x6f\x7d\xbf\xe4\x2c\xca\x30\x79\x38\x61\xe5\x44\xdb\xcd\x1a\xe5\x96\xbd\x84\xaa\x93\xfe\x12\x7b\xf6\xcd\xc7\x66\xcc\x79\x7e\x97\x5f\xec\x8a\x17\xab\xe8\xa1\xff\x74\xd0\xfc\x39\xcd\x35\xfe\xfc\x1d\x85\xfb\x35\x8e\x35\x66\xf9\x79\x95\x5d\x9b\xe4\x0a\xba\x09\x46\xf8\x73\x9b\x33\x6f\x1a\x48\xf9\xfa\x0f\xa4\x15\xa5\xb2\x72\x4c\xcf\xfa\x90\x56\x74\x14\x5b\xdc\x4c\xf0\x2d\x3f\xc9\x4f\x98\x1c\xce\x3a\x2f\x6a\xaa\xac\xe0\x28\xfa\x51\x4c\x75\x40\x36\x19\xa8\xab\xee\x30\x57\xc3\x1b\x64\x8f\x8e\x64\x24\x86\xf4\x50\xd1\x91\x58\x51\x2c\xde\x03\xf4\x14\xac\x8d\x84\x08\x77\x52\x19\x5d\x41\xeb\xdd\x09\xcf\xaa\xf4\x62\x1c\xcb\x47\x4e\x70\x9e\xb1\xd4\xf5\x38\xe3\xef\x24\x45\xcc\xb1\x53\x61\x0d\x5e\xaa\x26\x36\x33\x4b\x5f\x15\xd9\xe5\xb9\xfd\x1f\xc6\xaa\x9c\x5a\xa9\x46\x06\x1b\x54\x63\xd1\x5e\x64\x72\xe1\xe2\x21\xd8\x94\xb8\x30\x12\xd3\x1f\x61\xfd\xcb\xb3\x9f\x83\x19\xf3\xeb\xe9\xcb\xf9\x1c\x2a\xff\xcb\xe9\x7b\x7a\x2b\xf1\xd7\xe9\x88\x49\x04\xcd\x1c\x54\x6f\xdc\xdf\xbb\xc0\x2b\x66\x56\x56\x97\xb1\x6d\x21\x76\xda\x6d\x49\x73\x9e\x88\xef\x73\xd4\xca\x9d\x8a\xb1\x98\xa2\x68\xb1\xa6\x81\x49\x1f\x33\x5c\x79\xfd\xc6\xbc\x67\x54\x4f\xe3\xd7\x83\x0f\xf9\xed\x8c\xb2\xd6\xe5\xf4\x8d\x79\x49\x19\xcc\xa7\xbf\x7b\xfa\xf4\x29\x99\x01\x63\x7a\x88\x19\x13\x2f\x9c\xab\x4f\x2f\xd0\xf8\x2b\xe7\xa7\x94\x8f\x47\x9a\x0c\x4a\x07\xb7\xa7\x6a\x8a\x4d\x5d\x58\x3d\xa5\x81\x68\x07\x11\xe9\x60\xf7\xe6\xac\xa9\xde\x4c\x03\xf9\x76\x5b\x59\x3d\x6c\xc3\x9b\x0f\xb4\xc2\x3e\x92\x9c\xd9\x52\x04\xaa\x34\xd5\xbe\x62\x17\x85\xa4\x7a\x84\x38\x69\x91\x11\xce\x4f\xa4\xc7\x54\xec\x5c\x16\x34\x23\xd1\xbf\xbd\xb7\x62\x8a\x8f\xc6\x35\x53\x56\x78\x96\xff\x8c\xd6\xa4\xe1\x8a\x43\x4e\xf6\x71\xe2\xf8\xf8\x07\x09\x0b\xb0\xc7\xc7\xdc\x73\xe7\x43\xc2\xa7\xf8\x4f\xa5\x60\xa0\x14\x8c\xb8\xbf\x04\xa6\xe7\xc5\xef\x19\x80\x5e\x8f\xa6\x6d\xe7\xb1\xc5\xa2\xbb\x4b\x9a\xa3\x2e\xba\x11\x44\x49\x8c\xb6\x45\x14\x85\x2e\xad\x58\x4b\x2f\x7b\x6d\x75\xb2\xbb\x78\xa3\xfe\xfc\x68\x4b\x33\xbd\x3d\x21\xe2\x07\x2b\x12\xbd\x31\x70\x25\x75\x27\x7d\x67\x3b\xed\x6e\x69\x3c\x51\xc2\xe3\x90\x5d\xdb\xbd\xdb\x1f\x90\x25\x17\x86\x50\xb2\x4c\x52\x0d\x0e\x2a\xa3\x9d\x3f\xd8\x36\x37\x86\xfe\xef\x38\x79\xea\x11\x87\x83\x8b\x65\xbe\x3e\x38\xfa\xea\xff\x05\x00\x00\xff\xff\x89\x35\x36\xf0\x30\xb7\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfd\x73\x1c\xb7\xb1\xe0\xef\xfe\x2b\x50\x7c\x57\x25\x92\xb5\xbb\x94\x9d\x97\xc4\xc7\x3b\x5d\x8a\x96\xe4\x98\xb6\x3e\x78\x92\xec\x5c\x4a\xe7\xca\x62\x67\x7a\x77\x21\x62\x80\x09\x80\x21\xb5\xb9\x77\xff\xfb\x2b\x74\xe3\x6b\x66\x77\xc9\xa1\x24\xfa\x85\x55\x79\xa9\x7a\x16\xc9\x01\xd0\xdd\x68\x34\xfa\x1b\xce\x70\xe1\xec\xe9\x57\x53\xa6\x78\x03\xa7\x8c\x2f\x97\x42\x09\xb7\xf9\x8a\xb1\x56\x72\xb7\xd4\xa6\x39\x65\x4b\x2e\x2d\xf8\xdf\x18\xbd\x14\x12\xec\xe9\x57\x8c\x4d\xd9\x4f\xdd\x02\x8c\x02\x07\x96\x7e\x54\xdc\x89\x2b\xc0\x7f\xbf\x6e\x41\xbd\x5d\x8b\xa5\xfb\x8a\xb1\x1a\x6c\x65\x44\xeb\x84\x56\xa7\xec\x4c\x4a\x7d\x6d\x59\xa5\x95\xf5\x2b\x2b\xa1\x56\xec\x7a\x2d\xaa\x35\x53\xba\x06\xcb\xdc\x1a\x98\x50\x0e\x56\x86\xfb\x01\xac\xd5\xf5\xa1\x3d\x62\xdc\x00\x03\x29\x56\x62\x21\xfd\x02\x8c\x39\xcd\x16\xc0\x6c\xb5\x86\xba\x93\x50\x33\xad\x26\x6c\xc1\x2d\xfe\x8b\x49\xbe\x00\x69\xfd\xbf\xfc\x74\x7e\xe2\x09\xd3\x86\x5d\x0b\xb7\xc6\xc9\xcd\xb4\xd5\x75\xc2\x94\x71\x55\xe3\x9c\x5c\x39\x31\x8d\xbf\xdd\x39\x5d\xab\x6b\x0f\x22\x77\x08\x10\x97\x06\x78\xbd\x61\xa6\x53\x88\x47\xb1\x9e\x9d\xe1\x8c\xe7\xee\x91\x65\xb5\xb0\x7c\xe1\x61\x5c\x6c\x58\x0d\x4b\xde\x49\x37\x23\x5a\xb6\x60\x9c\x88\xd4\x24\xf2\x83\xc2\x6f\x09\xc7\x4d\x0b\xa7\x6c\xa1\xb5\xc4\x1f\x7b\x74\x7c\xca\x95\x27\x40\xe7\x41\x74\x3a\x0c\xf3\x48\x86\xd5\x18\x67\xb8\xb3\x33\x4f\x71\xfa\xa7\x65\x76\xed\xc1\x76\x6b\xe1\x37\xa0\x69\xb4\xc2\x79\x13\x28\x9b\x59\x01\x48\xab\xeb\x69\xc1\x0b\x37\x43\x73\x26\xaf\xf9\xc6\x4f\x3a\x95\xba\xe2\x0e\x2c\x6b\x3a\xe9\x44\x2b\x81\x19\x68\xa5\xa8\xb8\x65\x7a\xb9\xb5\xb9\x82\x08\x66\x79\x03\x01\x12\x4f\x3b\x76\x18\xa8\xc4\x8e\x91\xef\x8e\x8f\xb6\xe0\x2a\x37\xea\x56\xe0\x5e\xc1\x15\x98\xdf\x04\x36\xff\x45\x82\x6b\x4a\x6c\x53\x80\xf7\xe8\xfd\xaf\xd6\x19\xa1\x56\x8f\xb6\x81\x7c\x06\x4b\xa1\xc0\x32\xce\x2c\x38\x0f\xcf\xe8\xe3\x40\x47\x21\xc0\x38\xfa\x40\xec\xdb\xea\xcf\x84\x1a\x0f\xc8\xa1\x9f\x56\x6e\x98\x5b\x6b\x0b\xac\xe1\xae\x5a\xfb\xe3\xe1\x97\xc6\xd9\x99\x05\x09\x95\xd3\x66\x12\xa0\x36\x20\x51\x74\x78\x54\xfc\x57\x2b\x71\x05\x0a\x81\xb3\x2d\xaf\xe0\x88\x8e\x9c\x5b\xc3\x0e\x52\xd8\xb5\xee\x64\xed\xcf\x42\xda\xe1\x3a\x4c\xeb\xcf\xfb\x8d\xac\xf3\x50\x91\x55\xda\xdd\x80\x70\x44\x77\xd1\x09\x59\x83\xe9\x09\x72\x67\xba\x2f\x23\xc7\xdf\xad\x21\x2e\x40\xd2\x85\x09\x4b\xb2\x55\x71\x29\x37\x49\x30\xd5\xe0\xc0\x34\x42\x01\xe2\xba\x00\xeb\x98\x17\xfc\x0e\x56\x9b\x24\xc7\xfd\x34\x5e\x08\xfb\x5b\x61\x29\x56\x9d\x01\x76\x9e\x71\xff\x49\x38\xfb\x00\xe4\xe5\x15\x98\x85\xb6\x70\x2b\x20\xcf\x69\xe5\xf0\x39\x93\x7a\xb5\x0a\x77\x07\xd1\xa1\xd2\x4d\xab\x15\x28\x17\x2e\x1a\xdb\xb5\xad\x36\x8e\x09\xc7\x0e\x61\xb6\x9a\x05\x10\x7e\xe2\x4a\x5c\x46\xda\xb5\xba\xee\xcb\xc8\x44\xaa\x91\xac\x7d\xc6\xa4\xb0\xc4\xd3\x69\x68\xb8\x62\x5b\xa3\xaf\x44\x4d\x54\x73\x71\xd3\x99\xe3\xf6\x32\x31\x5a\xe5\x4f\xc0\xfd\xb1\xd9\x53\x3f\x7d\x60\xb2\xaa\xbf\x8d\x99\x61\xae\xc0\x58\xa1\x15\x8a\xf2\xb3\x96\x57\x69\xdc\x4f\x88\xad\xe9\x94\x13\x0d\x20\x97\xe1\x01\x84\x9a\x49\xb1\x30\xdc\x08\xb0\x13\x46\x33\x87\x63\x15\xef\xeb\x07\xc0\x74\x01\xad\x69\xc0\xbe\x00\x88\xb6\x7a\x1b\x24\x4f\x50\xdc\xaf\xe9\xe5\x34\x12\x25\x8c\xf6\x20\x76\x16\xd8\x52\x9b\xe1\xbd\x33\x63\xe7\x8e\xe9\x2b\x30\x46\xd4\x81\xa9\x18\x7e\x13\x6f\xc3\x38\x85\x97\x8c\xe1\xe6\x2c\x8e\x30\xbb\x08\x9c\xf1\x5b\x31\x69\xb9\x76\xc0\x32\x73\xab\x56\x8e\x0b\x75\x5f\x82\xf1\x11\xb2\x6c\x5c\xe3\x36\xb6\x2d\x30\x09\x3a\x48\x09\x1e\x63\xd7\x6b\x30\xb0\xa5\x05\x5c\x0b\x29\x3d\x5e\xb8\x2d\x5c\x5a\x1d\x09\x60\xd3\xd4\xf4\xa1\xdf\xca\xb7\x60\xae\x44\xe5\xef\x2d\x6b\x75\x25\xd2\x75\x11\x48\x95\xd6\x9b\x31\xa5\xa5\x50\xee\x94\x39\xbe\x92\xfe\x3b\x29\xe1\xd1\x3f\xff\x19\xe0\x9d\xd3\xb7\x42\x71\x70\x50\x9e\x1a\xf8\x7b\x07\xd6\x4d\xab\xb6\x1b\x79\x62\x1a\xa1\x44\xd3\x35\x8c\x37\xba\x53\xc8\x82\x4f\x2f\x7e\xc6\x79\x84\x21\x41\x31\x9c\xbb\x81\x46\x9b\xcd\x27\x4f\x4f\xc3\x77\xae\x20\x45\x23\xee\x04\x3b\xff\x38\x12\x76\x9a\xf9\x6e\x90\x6f\x4d\x7e\x03\xe4\xf0\xb1\x1d\x73\x43\xee\xe4\x98\x93\xc8\x2e\x38\x09\x4a\x7c\xc1\xd9\x65\x3a\xa0\x91\xcd\xfb\xfa\x9e\x71\xc5\x6a\x42\xb9\x1d\x48\x94\xa7\x91\xb3\x5a\x2c\x97\x60\x40\x39\x1c\x1c\x20\x46\xcb\xad\x77\x56\xb2\x19\x30\xff\xf6\xf1\xb7\x8f\xe7\x47\xc3\x65\xa7\x2a\xda\x0d\xb7\xd0\xf0\xc6\xe5\xfd\x24\x49\x1c\xdf\x08\x50\x54\x0b\xce\x5d\x14\xc9\x28\x1a\xe7\x6b\xe7\xda\x39\xd3\x4a\x6e\xbc\x28\x21\xc1\x3c\xa7\x49\xe6\xac\xe5\x86\x37\x5e\x3f\xf3\xba\x9b\x17\x80\x25\x16\x96\xe8\x39\xbd\x33\x11\x3b\xe5\x75\x42\xb2\xe9\xc3\x24\x04\x7b\x9f\x82\xa4\xd4\xd8\x9e\xf5\x12\xb1\x2b\xa9\xdb\xa7\x6d\x09\xd5\x27\xd1\x78\x2f\x74\x48\xeb\x9d\x20\xc6\xeb\x0e\x6f\x9a\x6d\x10\x91\xc4\x7d\x33\x70\x24\x5c\x78\x7e\x84\x2a\x56\xf4\x23\x67\xe4\x35\xf0\xff\xac\xd9\xbc\x10\xfb\xf3\x81\x03\x21\x2e\x27\x1a\xbe\xfa\xc4\xf5\xe2\xd0\xde\x54\xd3\xb6\x93\x72\xda\x6a\x29\xaa\x52\x0c\x5c\x74\x52\x5e\xe4\x5f\x6e\x5f\x7a\x7e\x18\xa3\x61\xd1\x23\xf0\x1f\x68\x7b\xff\xc7\xf9\xf2\x95\x76\x17\x06\x2c\x28\xf7\xa8\xaf\x02\x2c\xc0\x4e\xc7\x5e\x25\x8f\x9e\x41\x6b\x00\x0d\x9e\x0b\x1c\x49\xba\x74\x3d\x14\x11\x34\x6d\xb4\x76\xb7\x0f\x6d\xd8\xd0\x39\x5a\xf0\xf3\xa3\x3c\xeb\x29\x7a\x04\x78\x95\x0f\xd8\x1a\xb8\x74\xeb\x70\x43\x3d\xea\xc9\xca\x2b\x50\x60\xed\xd4\x5b\xdc\xa3\xb6\xfb\xd1\x5b\xfc\x32\x6a\x59\x78\x1c\x2b\xad\x14\x54\x4e\xa8\xd5\xcc\x9b\x97\xe9\xdc\xfe\xf0\xee\xdd\xc5\x8c\x9d\xb5\xad\x0c\x3a\x8e\x5b\xc7\x33\x12\x17\x26\x2c\x67\x9f\x07\xbc\xb7\x82\x05\x97\xd3\x1a\x24\xdf\xf4\x4f\xf9\xef\xbe\xd9\x81\xc2\xab\xae\x59\x80\xf1\x62\xde\x42\xa5\x55\x6d\x19\x5f\x7a\xf9\xd1\xa7\xf3\x9a\x5b\x66\x1d\x37\x5e\xc9\x5e\xc0\x52\x1b\x48\x2b\xe6\x7b\xdc\xef\x90\xbf\xe4\x09\x04\x07\xf5\x67\xa2\xe2\x75\x3c\xdd\xb9\xcf\x40\x82\x84\x02\x8a\x5a\x0f\x1e\xf3\x33\x5a\xa6\x3b\xf7\x5b\xec\x44\x0b\x46\xe8\x7a\x04\xf4\x3f\xe8\x6b\xa6\x97\x0e\x50\x5d\x6f\xc1\x78\xf5\x35\x03\x3d\x04\xf5\x06\x20\x93\x3b\xe2\xce\x1c\xdf\x55\x15\x52\x7c\x6d\xc0\xae\xb5\x1c\x03\xf5\xcb\xa0\xe1\x54\x5a\x59\xa8\x3a\xf4\x7f\x84\x79\xc0\xe6\x2b\x8e\xe8\xae\xc9\xb9\xa1\xac\xa8\xc1\x40\x1d\x3f\x5c\x76\x32\xc0\x4c\xfb\xb5\xe6\x57\xde\x72\x5e\x72\xe1\x8d\xb5\xd1\x78\x0f\x31\x0e\x73\xde\x8e\xb7\x5f\xa8\x33\xf0\xd9\x78\x87\x79\x6e\x45\x9b\x10\xdb\x85\x32\x12\x04\xea\x4f\xc5\xba\xb0\xdf\xf6\x62\x6d\x80\xd7\xe2\xbf\x44\xc0\xa5\x95\x3f\xe7\x5c\x65\xf0\x7f\x33\x11\x97\x96\xfc\xe2\x32\x2e\x23\xf3\xdb\x0b\xb9\x2f\xbc\x1b\xf7\x25\xe6\x6e\x00\xf3\xae\x72\xae\xe0\xfc\x87\x20\xe8\xee\xb0\x41\xb7\x49\xba\x8c\xf9\x03\x10\x75\x23\xf1\xde\x2f\xeb\x92\x3f\xc8\xa0\x7b\xe1\x3e\x82\x9d\xe4\x0b\x32\x5e\x11\xdd\xe9\x06\xea\xac\xd3\x8d\xf8\x47\xf4\x8d\x7b\x94\x75\x87\x87\x96\xce\x89\xa8\x88\xee\xa2\x01\x73\xe2\xe1\x0c\x11\x9d\xc2\x28\xb0\x33\xf6\x97\xb5\x90\xc0\x94\x36\x0d\x7a\xde\xb9\xea\xf9\x8a\x82\x21\x6e\x19\x67\xad\xf6\xcb\xe2\x94\x0b\x60\x9c\x62\x76\x5d\x4b\x4e\x51\x8a\x61\x4e\x98\xd5\x0d\xa4\xe5\xd1\xcf\x6b\x27\x7e\x17\xd6\x8c\x5b\xb6\xe0\xae\x5a\xb3\x0f\x7a\x61\x27\x71\xe2\x72\xc6\xca\x89\x2b\x74\xad\x72\xc7\x6c\x0b\x95\x58\x8a\x8a\xad\x75\x67\x92\x77\xab\xe6\x9b\x14\x89\xe5\x79\x19\x14\xce\xe8\x3d\x10\xaa\x73\x31\x7a\xfa\xbd\x36\xb4\x72\x80\x02\x45\x70\x9f\x9a\x0d\x77\x60\x04\x97\x91\x88\x25\xe6\xdc\xe3\xdc\xdb\x36\x86\x9b\xf1\xa3\x5e\x30\xa1\xac\x03\x5e\xfb\x25\xb9\x17\xe4\xaa\xe6\xa6\x66\x35\xb4\x52\x6f\x1a\x50\x6e\xc2\x84\x62\xda\x60\x74\x43\x33\xcb\xaf\x3c\xc3\x59\xdd\x99\x0a\x6c\xb2\xa4\x71\xc6\x72\xc5\x5a\x83\xc5\xe0\x8c\x02\xda\x61\x34\x18\xfd\x61\x80\x7a\x56\x3a\x25\xa3\x6f\xdf\xdf\x20\x6c\x69\x34\x89\xb6\xa5\x96\x52\x5f\xc7\xbb\xb5\x08\x04\x60\xb8\xef\x8a\xcb\x0e\x89\x1b\x6d\xff\x44\x89\x53\x36\x47\x16\x99\x4f\xd8\xdc\xff\xd6\xff\xf7\xef\x1d\x37\xee\x1f\xf3\x19\x5a\x7d\xa6\x93\x01\x7f\x7f\x0e\x3b\xeb\x0f\x56\x49\x9a\x44\x16\x1e\x9c\x8d\x09\x92\x53\x36\x8d\x93\x9f\x12\xde\xb4\x67\xd6\x53\x3f\xee\xfb\xb5\x11\xce\x4b\x6a\x6e\x09\x28\xf8\xd8\x1a\xb0\x96\xb8\xf3\xf9\x6c\x35\x0b\x53\x9c\x3a\x51\x5d\xfe\x89\x26\x78\xf2\x87\xc7\x8f\x1f\x3f\x9e\xcf\xfc\xfc\x03\x98\x4f\xa3\xe7\x53\x65\x3c\xf3\x94\x99\xc8\xe1\x36\x4e\x17\xdc\x61\x90\x31\x07\xe1\x17\x07\xac\xe5\xe4\x63\xb0\xe0\xa2\xcb\xf3\xf1\x51\x04\xc9\xcf\x7b\xea\xf8\xe2\x4f\x31\x66\xfa\xe4\xf1\xc9\x37\xff\xed\xff\xb5\xb2\xb3\xff\xff\x78\xd7\x7f\xfe\x34\xf7\xac\x1b\xa0\x3c\x75\x46\xac\x56\x60\xfe\xe4\xa7\x79\xf2\x98\xbe\x78\x7c\xf2\xcd\x8d\xe3\x67\x0f\xc0\x9d\x1a\xa9\x31\xd2\xa1\x10\x39\x27\x0e\x4b\x92\xfe\x7a\xad\xe5\x30\x86\xb0\x2c\x42\xef\xba\x73\x29\x92\xe0\xa1\xab\xa1\x92\xdc\x40\x8d\xc7\x7c\xc3\x9a\xce\x3a\x7f\x07\x40\x8a\xc2\x0f\x97\x10\xb6\x81\x6a\xcd\x95\xb0\x8d\xa7\xc4\xb5\x36\x97\xac\xd2\xc6\x40\xe5\x64\x0f\xa3\x7c\x90\xc6\x28\xb1\x67\x48\x22\xce\x2c\xb4\xdc\x84\x38\x11\x45\x1d\x5c\x8a\x29\x0d\x63\x74\xc5\x71\x4f\x32\x3d\xde\x66\x49\x8e\x04\xc2\x64\x60\x13\x87\x27\xc4\xd0\x0d\x87\x6c\x05\x35\x83\x8f\x29\x98\xba\xd8\x14\x87\x75\x76\x16\x63\xfd\x51\xc2\xa6\x35\xd1\x91\x97\xa5\xb0\x5f\x11\x78\xb5\x8e\x5f\x42\x11\x5d\x0c\xa7\x20\x00\x15\x3d\x22\x74\xd2\xf3\x57\x24\x73\xf1\xa8\x4c\xe3\xdf\xca\xc5\xf2\x5a\x87\xc2\x3d\x7a\xe4\xef\x62\x74\xf2\x30\xa1\x8a\x8b\x77\xae\xcd\x6a\xc6\x31\x28\x37\xc3\xd8\xd3\xec\xf2\x34\xc6\xa0\xf0\xec\x87\x50\xdc\xe6\x68\xf6\x96\xa2\x9d\x50\x0f\xc5\x5f\xd5\x19\x03\xca\xc9\x4d\xd4\xe7\x92\xd4\x08\x70\xf9\x4b\x2c\x49\xbd\x52\xab\x59\x72\x29\x17\xbc\xba\xbc\xf5\x68\xfd\x6c\xa1\x17\xd3\xa2\xbd\x16\x4d\x2b\xc1\x5f\x09\x24\xe2\x03\x1f\xd0\xea\x0c\x54\xdd\x6a\xa1\x1c\x3b\x8c\x4b\x1f\xa5\x6d\x4f\x17\x8c\x33\x1b\xcc\x08\xd0\x37\xdd\x56\xdc\xee\x90\xc7\x7d\x2e\x56\x44\x83\x6a\xb3\xed\x9b\xdb\x6f\x92\x85\x9d\xb7\x6c\xad\xaf\x51\x75\x32\xc0\x5d\x9e\xcc\x85\xfb\x29\x86\x4e\x39\xf3\xcb\xfe\xc2\xa5\xa8\x99\xbf\x70\xca\x23\x7a\x3a\x65\x07\x98\xbe\x75\x70\xca\x38\xa5\x71\x05\x38\x51\x29\x33\x9d\x2a\xe6\x95\x9b\xff\x31\x65\x07\xdf\x6b\xb3\x10\xf5\x41\xf2\xbc\x1d\x9d\x7a\x8e\x5b\x88\x3a\x4e\x5b\x00\x62\x3a\xe5\x35\x8d\x4b\xd1\xb6\x9e\x5c\x0a\x3e\xe2\xef\x98\x58\x7a\xae\xf2\x9a\x91\xc5\x9f\xd7\xdc\xaa\x47\x8f\x1c\x5b\x0a\x25\xec\x1a\x6a\xb6\x01\xe7\xd7\x7a\x43\x4a\xdf\x41\x64\x90\x8a\xab\x0a\xa4\xcd\x9c\x93\xf2\xb4\x3e\xf8\x9b\x0e\x03\xc1\x38\xc2\x32\xe1\xa2\x46\xa2\xe0\x9a\x69\x05\x8f\xee\x1a\x5f\x3a\xeb\x9c\x6e\xb8\x13\x15\x9e\x57\xd2\x23\x76\x29\x24\x51\x5c\xe2\xd9\xe7\x52\x06\x39\xe8\xc9\x0b\xc2\xad\x43\xd4\x8f\x91\x66\x80\x4a\xbf\x57\x0e\x0a\x4d\xc9\x2b\xcd\x5d\x03\x86\x1d\xa2\x53\xff\xa6\x53\x80\xe7\xc6\xc6\x03\x15\x19\x53\x1b\x3f\x1d\xb7\xd6\xeb\xe7\x79\x36\xc0\x3b\xb1\x16\x5e\x7c\xce\x51\x8c\x6c\x7d\x74\x34\x43\xc7\x74\x8c\xec\xa0\xe8\x8b\xdc\x21\xe5\x36\x88\x76\x20\xbf\xe9\x03\x04\x31\xeb\xc2\xe1\x62\xf7\x3a\xa3\x8d\xaa\x38\x2b\x12\x99\x22\x64\x5f\x37\xf3\x9d\x43\xe6\x8f\x4f\xbe\x66\xc7\xf4\xbf\xf9\xe4\x1a\x55\xe1\xf9\xef\x7e\xdf\xd0\x5d\xfd\xfb\xc7\x76\x1e\x22\xfb\xfd\x30\x42\x20\xef\xb4\x06\x5e\x4b\xa1\x60\x1a\x74\x86\xbe\x9d\xf3\x87\x7f\xdf\xde\xe9\xd7\xf8\x5f\x2e\x59\x1c\xca\x0a\x15\xc4\x8b\xd3\xb4\x75\x1e\x71\xcf\x6a\x62\xe9\xf1\x6d\x04\x5a\x80\x29\x41\x0b\x63\xd2\x84\xab\x1f\xc5\xd5\xc6\x9b\x34\xd6\xdf\x93\xec\xa5\x40\xf4\xbc\x9e\x5d\x9e\x4f\x0c\xfb\xa2\xe1\xd4\x29\x47\xe8\x93\xe1\xe4\x59\xd6\xf6\x62\xa2\x5e\x2e\xc3\x27\x60\x97\xe5\x05\x4a\xc2\x2e\x27\xc3\x85\x29\x26\x5b\xf9\x4b\xa4\xc4\x7a\x74\x26\x25\x4b\x04\xec\x1b\xbe\x09\xb6\x9e\x13\xaa\xd3\x9d\xf5\x16\x0a\x42\x17\xfd\x26\x94\x3a\x54\x18\x83\x74\x91\x06\x6b\xb7\x08\x68\xe5\x38\xcc\x1f\x1e\xf7\xb0\xf5\xd2\x5d\x2f\x97\x53\x8c\x5f\xde\x6e\xa9\xf6\x71\x54\xc9\x51\x62\xc0\x19\xff\xdb\x00\x57\xc3\xcd\x65\xb9\x8d\x09\xa0\x00\x47\x19\x67\xfb\x26\x67\x5d\xd5\xd0\x82\xaa\x41\x55\x94\xd8\x70\x4f\x39\x31\xcf\x8a\x55\x6e\xcc\xbf\xe2\x3d\xc1\xc4\xeb\x3a\xe5\x43\x10\x0e\xc5\x34\x29\x5b\x70\x28\xb7\x62\x42\x9a\x9f\xd4\xb0\x6b\xae\x5c\x14\xf8\x83\x14\x19\xf6\xfe\xd7\x92\x0e\x52\x6f\xee\x33\xfd\x2c\xae\x90\xf1\x37\x60\x5b\xcf\x47\x8b\xa0\x24\xd2\x17\x71\x13\xb3\x01\xa7\xaf\x55\xd0\xcf\x16\x5b\x52\x7a\x42\x99\x68\x03\x35\xfb\x63\x2b\x45\x25\xfc\x25\x42\xe9\x7c\x44\x0e\x55\x83\x91\x38\xbf\xe7\x6f\xa3\xa5\x0c\x02\x1c\x29\x86\xc7\xb5\xe1\x8a\xaf\xb6\x6d\xd3\x56\xd7\x0f\x21\xa9\xed\x52\xa8\x7a\x84\x9a\x11\x92\xba\xf7\x12\xaa\x06\x8b\x37\x46\xb6\xaf\x71\x66\xb6\x00\x77\x0d\xa0\xd8\x3c\xff\x61\x3e\x29\xf5\xbb\xe9\x07\xbd\x20\x49\x7e\x49\x5c\x31\x0d\x31\xdb\x79\x70\x2f\x7b\x6d\x66\x7b\x7f\xfd\xde\xc7\xcb\x3e\x6b\xb7\xa5\x2d\x32\x60\x53\xbf\xf2\xbd\x1e\xd6\x88\xf6\x5e\x56\x5d\x81\x02\x93\x71\x29\x74\xc1\x1e\x84\x7d\xd6\xba\xf4\xf7\xfb\x0d\xf9\x41\x31\x15\xab\x92\x9d\x75\x94\x24\xf0\x4f\xce\x70\xad\xd1\x2b\x7f\xb9\xdf\x72\x75\xed\x12\xeb\x65\x3a\x0a\xa6\xb5\x0d\xee\x65\x97\x44\x06\xed\x84\x26\x02\xc6\x15\x83\xd8\x8f\xbc\xe2\x6e\xb8\x93\x86\x59\x16\x78\x1d\x65\x52\x5e\x09\xa3\xd5\xfd\x72\x54\xb1\x48\x66\xa9\x2e\xba\x06\xc3\x15\xe0\x34\x13\xea\x83\x3f\x83\xc9\xc1\xd5\x07\x8e\xb1\x2b\x6e\x84\xdf\x37\x1b\x39\xa5\xe4\xa2\x14\xed\xc8\xfe\xbf\xf9\xab\xb3\x97\xcf\xdf\x5e\x9c\x3d\x7d\xee\x75\xce\x8b\xd7\xcf\xfe\xe6\x7f\x41\x6a\xa7\xf6\xea\xeb\x43\x10\x6a\x09\xaf\x69\x03\x8e\xdf\x0a\x0f\x25\x19\xd8\x40\xcb\x60\x03\x16\x84\x20\x9d\x3b\xd3\xa2\xdc\x9b\x44\xdf\x00\x4e\xce\x1a\xf1\xec\x80\xc6\x62\xca\x1f\xe6\xe6\xee\x89\x90\x79\xff\x82\xf7\xc1\xcb\xc3\x7c\x89\x5f\xe8\x7a\xc6\x5e\x26\x4f\xca\x4f\xcf\xff\xfa\xe4\x97\xb3\x17\x3f\x3f\x8f\x3a\xf6\x46\x39\xfe\x91\x1d\x0a\x98\xb0\x97\x7f\xfd\xdb\x2f\x67\x6f\x9e\x1c\x34\x1b\xb2\xfb\x0e\x8e\x0a\x96\x36\x46\x9b\xe9\x9a\xab\x5a\xde\xe7\x7d\xde\x5b\x26\x98\x20\x61\xa5\xc0\xe4\x91\x27\x02\x5b\x3f\xf7\x03\xd8\x0f\x09\x2e\xc6\xe8\x02\xf0\x5c\xac\xb7\xd8\x39\xe8\x3d\x0f\x80\x41\x0d\x2c\x47\x7a\xdf\x90\x64\x2c\x92\xcc\xc0\x92\xd2\x98\x52\x3a\xac\x36\x6c\xa9\x3b\x6f\x70\x29\xc6\x5b\x2c\x76\x21\xf5\x23\xe7\xde\xc6\x45\x57\xd5\x3d\x05\x41\x3c\x9c\x7f\x7e\xca\xde\xe1\x0e\xae\xb8\x59\xf0\x15\x4c\x2b\xaf\x2b\x55\xce\x92\x0d\x9c\x2e\xee\x54\x5a\xa5\x34\x93\x5a\xad\xc0\x30\x05\x15\x58\xcb\x43\x46\x62\xd7\xea\x7e\x78\xa3\x6b\x6b\x1e\x02\x06\xff\xe4\xbb\x5a\x0b\x5b\xe9\x2b\x30\x9b\x69\xc5\xab\x75\xe9\x5f\x5d\x09\xb7\xee\x16\xb3\x4a\x37\x27\xe4\x25\x3b\x09\xde\xb1\x93\xf6\x72\x75\x42\xab\xa6\xd1\x4f\xfd\x07\xef\x36\x2d\x6c\xa3\xf0\x2c\x7e\xc3\x2a\x29\xbc\xf8\xc1\x85\x82\x68\xf0\x88\x4d\x18\x39\x19\xbc\xa1\x4f\x39\xee\x5e\x8c\xd7\xc2\x5e\x92\x92\x45\xb9\x9b\xf3\x2d\x61\x15\x7e\x7f\x94\x98\x85\x42\x69\xf7\xc8\x30\x65\xac\x6e\x97\xba\x14\x13\xfa\xa2\xbe\x14\xbe\x4f\x99\x5f\x5f\x45\x13\x74\xe7\x85\x36\x7b\xc8\x85\x79\x39\x65\xc8\x23\x3b\x3a\x79\xee\x69\x4c\x81\xb4\x3b\x32\x45\x76\xe5\xfc\xdf\x9e\x38\xb7\x13\xaa\xd1\xe9\x22\x37\x66\x8b\xec\x4e\x68\x29\x58\xf2\x87\x77\xef\x2e\xf6\x40\x70\xc7\x8c\x8f\x4f\x4e\xf8\x28\xe1\x2b\x73\x3e\xc8\x12\x8f\x19\x1f\x9f\x95\xab\x76\x7b\x16\xc7\x80\x40\x39\x9d\xe3\x73\x92\xcc\xf6\x26\x5f\x0c\xf2\x8b\xbe\x50\x76\xd8\xb8\x9c\x89\x21\xa6\x83\x1c\x82\xa8\xd3\xa4\x14\x8a\x9d\xc9\x13\x5f\x28\xaf\x6b\x54\xae\xc3\x38\x80\x83\x07\x6f\x4f\xd2\xc3\xee\x24\x9a\xcf\x39\xf8\x83\xbc\x89\x3b\x9e\x7c\x52\x5b\x77\x83\xf5\x65\x4f\xfe\x10\xce\x9b\x8e\xfe\x27\x67\x7b\x7d\xd6\xd9\xdf\x99\xf0\xb5\xf7\xf0\x7f\x42\x12\xd7\xed\xa7\x7f\x48\xa4\x9d\xc7\xff\xee\xd9\x57\x7b\xcf\xff\x30\xe9\xe6\x4b\xa5\x4d\x8d\x93\x00\x5b\xd8\x7e\xae\x08\xf8\xac\x84\xa7\x51\x32\x60\x24\xc8\xb7\x08\x81\x94\x9e\xaf\xd0\x55\x71\x57\xbd\x6b\x4b\xbb\x3a\xa7\x79\x76\x67\x25\x51\x85\x03\xb9\xf6\x43\x81\x44\xae\x1c\xc3\x38\xd9\x4e\xe5\x2a\x1c\x5b\xdd\x39\x8f\x1a\xbb\xd6\x46\xd6\x31\xaa\x56\x78\xb3\xc2\xd2\x41\x03\x0b\x32\x2c\xe6\x69\xc5\x23\xee\x45\x02\x16\xed\xf3\x58\xd6\x83\xe6\x60\x5d\x54\xf8\x95\x4b\x1f\xba\xb5\xd1\xdd\x8a\x8e\xc4\x3c\x7a\x08\x09\x4a\x8f\xe1\xd1\x03\xd0\xea\xd6\xda\xba\x31\x01\xdd\xe3\xe3\x37\x21\xfe\x76\x7c\x3c\xeb\x97\xb6\xa0\x1e\xac\xed\x56\x91\x50\xe0\x9a\xd9\x9d\x83\x9a\xef\x76\x85\x0f\x30\xbd\x8c\xd8\x27\x6d\xd3\x70\x43\x3a\x8b\xf9\x66\x5e\x50\x07\x94\x53\xa0\x3c\x06\x07\x0b\xa6\xb6\x4e\xe8\x7b\x34\x25\xce\xfd\xfc\x81\xd5\x79\xea\x3e\x92\xac\x87\xa2\x02\x33\x16\x06\xc7\x22\xd2\x00\x18\x4b\xe7\xa0\x01\xbb\xce\xce\x30\xcf\xe7\x15\x37\x85\x63\x08\xdd\x60\x9d\x5b\xa0\xc9\x7d\x7e\xc1\x0c\x57\xab\x07\x61\x9b\x22\x5d\x46\xb0\x5f\xa1\x4b\x70\x76\x88\x89\x32\xd3\x94\x28\x73\x94\xdc\x52\x4f\xcf\x9f\xbd\x61\xb6\x5b\x28\x48\x55\xec\xa9\x71\x41\x80\x62\x41\x1c\x63\x2a\x68\x8b\x9c\x36\xda\xab\xd6\xe8\x8f\x1b\x76\x38\xff\xfa\xf1\x0c\xff\x77\xf2\xed\xe4\xeb\x3f\x7e\x33\xfb\xfa\x0f\xf8\xc3\xd7\xdf\x4c\xbe\xfe\xef\xfe\xa7\x6f\xe9\xc7\x3f\x44\x7b\x35\x5b\x71\x3d\xe5\x80\xb6\xe7\x56\x1a\x7f\xaf\x83\x07\x02\xc8\x01\x86\x22\x3c\xf4\xcd\x98\x87\xad\x9e\x21\xaf\xce\x84\x3e\xa1\x49\xe7\x33\xf6\x5d\x5a\xb4\x88\x7b\x52\xe3\x07\x4a\x3c\xc3\x32\x3c\x54\x9b\x98\x56\xa5\x03\xda\x33\x8b\xd2\x8e\x9a\x49\xa8\xc8\xcf\xb9\x8e\x31\xc2\xff\x41\x4b\x7d\x29\xf8\x7d\xa6\xa8\xfe\x48\x4b\xc4\x43\x12\x92\x7a\x6c\xbf\x27\x03\xd1\x26\x7e\xfa\x23\xbf\xe2\x8c\xaf\x40\x39\xca\xd5\x7c\x0b\xc0\xd6\xce\xb5\xf6\xf4\xe4\x24\x40\x3c\xd3\x66\x75\x62\x00\x0b\x1a\x2b\x38\x59\xbb\x46\x9e\xe0\x08\x3b\xf3\xff\x7e\xa0\xe5\xc6\x15\x9f\x56\x60\xc6\xc8\x6a\x4f\xd9\x8b\xe7\x2f\x19\xa8\x4a\xfb\x9b\xeb\xe9\x19\xf3\x23\xc5\x32\x7a\xe1\xfc\xd6\xb1\x96\xbb\xf5\x24\xc1\x7b\x05\x46\x2c\xa3\xff\x26\x26\xb2\xa4\x41\x60\x27\xc1\x8b\xe7\x31\x41\xc5\x79\xde\x1a\xed\x74\xa5\x25\x26\x6d\x60\x31\xa2\x0d\x2e\xe9\xce\xc2\xd4\x5a\x39\xa5\xc9\xa6\xbc\x73\x6b\x50\x2e\x2c\x1e\x0f\x8d\x1f\x84\xdc\x99\xf5\xeb\x93\x2b\x6e\x4e\x4c\xa7\x4e\x2c\x54\x06\x9c\x3d\xc9\x55\xb6\x9e\xf5\x83\x30\xe4\x15\xa6\x21\xc4\x1f\xa7\x15\x9f\x55\xc6\xcd\x8b\x94\x86\xc4\x73\xbd\xe3\x18\xa0\x69\x8d\x50\x95\x68\xb9\x1c\xe9\xf3\xc6\x02\xc3\x38\xe6\xd0\x1e\x05\x25\x18\xd3\x04\x17\xb1\x89\x8a\x50\x8c\x27\xdf\x57\xa6\x1a\xc6\xc1\x93\x84\x63\x8c\xa3\x7e\x18\xc5\x7c\xe4\xe8\x78\x45\xfd\x16\x24\xa6\xef\x2f\x22\x3e\x4f\x2a\xf5\xc4\x6e\xac\x83\xe6\xb4\xe1\x16\xfb\x53\x79\x11\x88\xf9\xbc\xea\xc9\x9a\x5f\x3b\xa1\xa7\x5a\x49\xa1\x60\x46\x3f\xcd\xec\x55\x15\xe7\x47\x48\x2a\xf5\x64\xe9\xa1\xf1\xf7\xab\x96\x30\xf3\x3f\xe0\x47\x37\x6c\x45\xf6\x48\x8e\x3d\x5d\x2f\x84\xf5\x56\x81\x9f\x12\x33\x39\x2b\x6e\x5d\x2c\x79\xb7\x85\x89\x16\x1c\x44\xbd\xda\x6f\x07\xaa\x86\x3a\x92\xaa\x5a\xc3\x88\x94\xbc\x97\x5c\xd5\xb8\x81\x18\xc4\xdc\xda\xd7\x60\xa2\xd9\xbc\xeb\x4b\xc9\x57\x31\x96\x15\x97\x0c\x64\xba\x84\x0d\xeb\x2c\x5f\x79\xb5\x16\xaf\xeb\xdf\x62\xa3\x49\xf0\xef\xdf\x82\x91\x6a\x9f\xe7\xfe\x1f\xbc\x6a\xc7\xeb\xda\x04\xde\xcd\x56\x60\xe4\x60\x14\xae\xa9\x21\x92\x50\x5e\xa2\x60\xd6\xed\xfc\xe0\xff\x1e\x1f\x44\x28\xb5\x61\xf3\x83\x70\xb3\x1e\x20\xa6\x78\x78\x26\x51\xe1\x07\x63\x71\x30\xc5\xf3\xd1\x9d\xac\xc0\x61\xc6\x2a\xde\xd8\x4b\x5e\xc1\x96\x5f\xe0\xe0\xf8\x60\x50\x04\xcf\xad\xbd\xd6\x66\x4c\xf6\x00\x1e\xed\xf0\x39\x09\x42\x4c\x88\xea\x91\x78\xc2\x86\x9b\x85\xba\x7e\x67\xc1\x24\xbc\x5a\x4a\x55\xc2\x5b\xf7\xce\x6d\x00\x76\x08\x02\xaa\xff\x2e\x6a\xd1\xff\xf8\xc7\x6f\xe7\xc3\x3e\x3b\xc8\x2f\x63\x91\x0c\x9f\x07\xcf\x47\xf6\xc6\x87\x2a\x7d\x93\x78\xae\x5f\x5d\x6e\x91\x83\x02\x9a\x99\x8f\x0a\x40\x3c\x1d\x46\x02\x81\x39\x3c\x39\x24\xb0\x83\xd6\xfd\x79\xf7\xb3\xfd\xad\xa7\xf7\x2f\x6b\x40\xfc\xb6\x4f\xae\x2d\xda\x76\xed\x81\x62\xb7\xeb\xe9\x86\xa3\x44\xfb\x7f\xf7\x18\x2a\xaf\x6b\x11\x52\xfa\x22\x07\x84\xa9\xbc\x92\x5f\x63\xd3\xaf\x5a\xa8\x3b\x6a\x37\xff\x86\xff\x9e\x7e\xb8\x6a\xa6\xa4\x41\xbd\xff\xf1\x97\x97\x51\x60\xe3\x39\xed\x77\x6a\x09\x4b\xe6\xfc\xa9\x0f\x57\xcd\xfd\x85\x5a\x7f\xfc\xe5\xe5\x20\x6f\xc0\x0d\x2d\x49\xfc\xc4\xab\xee\xa6\x53\x5b\x7d\xe8\x1e\x80\x49\x53\xc3\xa2\x5b\xdd\x0a\xc6\x59\xd2\x75\x0d\x34\xda\x01\x0d\x5b\x85\x4a\xa8\x10\x8f\x0c\xbf\xf4\x9c\x4c\x50\x73\xe7\x78\xb5\x86\x54\x4d\xc5\x22\xc5\x26\x0c\x66\xab\xd9\x24\x94\xd8\x60\x93\x8a\xa5\x36\xd7\xdc\xd4\x74\x1e\x7b\xc0\x4d\x6d\x67\x5b\x50\xb7\xd3\xea\x2d\x7d\x47\xbb\xe0\xb8\x59\x81\xc3\xed\x11\x4d\x03\x35\x6a\xce\x9b\xd2\x2f\x49\x3d\x1e\x24\xb7\xd6\xef\xae\xd4\x9c\xee\xc0\x2c\xb4\x84\xbf\x7f\xbd\xed\x36\x62\x6d\xaf\xa3\x38\x1b\x1c\xa2\x38\x24\xec\x59\xce\xfc\x0c\xcc\x22\x86\xed\x16\xa4\x5e\xd9\x3d\x0e\xe4\x2d\x52\x84\x7b\x6d\x8c\x0c\x33\x5c\x59\x94\xcc\xf1\x2e\xe4\x2e\xde\x85\x1a\x0f\x75\x50\x50\x30\xb9\x13\xae\xe5\x86\x49\xde\x29\xdc\x2e\x0f\xe6\x10\xa0\xe3\xd3\xdf\x3f\x7e\xfc\xfb\x1e\x48\x9f\x2a\x49\xfc\xf4\x79\x6c\x56\x78\xb9\xb5\x5e\xcb\x1f\x81\xdc\x59\x21\x8b\x7e\x79\x99\x87\xb2\xc3\xce\x02\x9b\xbf\x10\xaa\xfb\x38\x2f\x7e\x1d\x6c\x6f\x6d\x72\x68\xf6\x92\x37\x20\xc1\xdd\x63\xee\x69\x5c\x21\x4b\x90\xdb\x12\x35\x7e\x8a\x23\x84\x8a\x6e\xa7\x07\x9b\x9c\xf1\x09\xe5\x00\x81\x0a\x94\xea\x10\x2e\x8c\x3a\x13\xc5\x9f\x29\xb7\x06\x61\x92\xff\xb3\x77\x35\xc4\x68\x7c\xf6\x95\x26\x37\x47\x2f\x9a\x35\x4a\x91\x7c\xba\xa7\xb6\x29\x00\x43\x6d\x28\xf1\x20\x69\x5e\xe7\x3c\x9a\x58\xa3\x51\x6c\x59\x66\x38\xa8\xef\xcb\x39\xe1\xb9\xed\x27\xa8\xf9\x0e\x47\x75\x50\x18\x88\xca\x83\xe4\x47\xb7\xa6\x51\xfe\xef\xb6\xe2\x32\xa4\xa5\xb1\xe1\x7c\xe2\xa1\xa6\x00\x8c\xe2\xc1\x98\xb7\x96\xa9\x34\xd0\x38\xa8\x92\x89\x20\xe9\x39\x38\x1a\x90\xd3\x8a\x93\x31\xb9\xdd\x59\x70\x6f\x94\xf1\x0a\x8c\x63\x0d\x38\x5e\x73\xc7\x07\x3d\xfa\x70\xd2\xa7\xdc\x02\x3b\x54\x18\xd4\x60\x0b\xa8\xb8\x17\x6a\xb4\x15\x83\x66\x80\x0c\x23\x83\x97\xb0\xe0\x0b\x84\xe4\x68\xc6\x9e\x6f\xb1\x7f\x09\x74\x28\x9b\x1b\xc8\xec\xfd\x89\x35\xbc\xae\xb5\xb2\x27\x9e\x77\x67\xfe\xff\xbd\xa3\xf1\xbb\x1c\x0f\x71\xe6\xc4\xef\xfd\x4c\xe4\x31\xac\x9f\x78\x7d\x9b\xbb\xfb\x5e\xbf\xfd\x6e\xea\xa8\x92\xa2\xed\x33\xcc\x6d\x3e\xdf\xaa\x7a\x0e\xd3\x06\x18\x27\x7b\xea\x9d\x8b\xb8\x4c\xce\x51\xa6\xa3\xf2\x26\x2c\xc1\xd5\xfe\xd9\x23\xd0\x50\x70\xda\xd4\x1f\x38\x3f\xf0\xd0\x8b\xb5\xf0\xc3\xd4\xe9\xe9\x3f\xc0\xe8\x23\x4a\xee\x5e\x74\x2e\xb4\xcb\x5d\x02\x77\xe4\x4d\x36\x40\x5d\xca\x0c\x48\xb8\xe2\xca\x65\x23\x8f\xca\xf0\xb0\x4e\xea\xd0\x1e\x79\xc6\xc0\x0e\xc8\x0a\xc3\x0b\xc9\x58\xc3\x89\x73\x70\xe1\x41\x1c\xe1\x48\x1d\xbc\xcf\xef\xe6\x7d\x77\x05\xef\x14\x53\x05\xb5\x2f\x2e\x18\x8a\xa7\x9c\x46\x27\xf3\x7c\xdd\xf2\x59\xf1\xf1\x2c\x70\xf2\xac\x86\xab\xd2\x39\x70\x79\xc3\x67\xe5\x62\x47\xb3\x37\xfe\x36\x8b\x7e\xb4\x08\x4e\xad\xab\x2e\xd5\x4b\x16\xee\xc0\x06\x8b\x7d\x94\x3f\x28\xc9\x86\xd8\x45\x8d\x06\x9c\x89\x8d\x0f\x3e\x97\x1c\x34\xd7\x3e\x7a\x14\x25\x95\x29\x86\x40\x35\x30\x86\xcd\xab\xb6\x9b\x87\x1f\xef\x88\x73\xc2\x36\xba\x85\x6e\xc7\x99\x94\xfa\xdb\x9c\x14\x6f\x21\x68\xe2\x28\x1f\xb0\x46\x36\x21\xc0\x24\x5c\x81\xf4\x90\x3f\xbd\xf8\x99\xb5\x60\x2a\x0f\xce\x0a\x3d\x35\xde\x78\xa0\x1e\xc3\x85\xb5\xb2\x4d\xa6\xa3\x5c\x30\x7c\xa1\xeb\x91\x88\x86\x19\x6f\xda\xdc\x46\x28\x94\x0a\x30\xc6\x09\x13\x5b\x61\xe6\xb2\xac\x8b\xd4\x73\x3f\xfb\x0c\xa2\x00\xf4\xd6\x99\xda\x50\xba\x7f\x06\x66\x68\xac\x52\xac\xf9\xf8\xd8\x8b\xa0\xe3\xe3\xe2\x06\x99\xb0\x06\x78\x90\xa4\xdc\x0d\x75\x52\x61\x51\x7e\x25\x07\x62\xad\xaf\x31\xcc\xed\xa7\x21\xf1\xa4\xb4\x2b\xb4\x91\x6c\x40\xd7\x45\x3f\x4c\x54\x6b\x77\xd1\x32\xcd\xba\x8b\x75\xf6\xd2\x92\x7f\x1c\x47\xcb\x33\xc5\xba\xb6\x05\xc3\x28\x18\x99\x0c\xa2\x1d\x64\x0d\x6a\x55\xa4\xa9\x50\xd8\x18\x52\x4a\x90\xc5\xe9\x1d\xd2\x34\x32\xc4\x9a\x5b\xe6\x65\x9f\xa7\x4d\xc5\xdb\x10\x3b\xc3\x79\x89\xf1\x6c\xae\x28\xb3\x8e\x4b\x49\xc3\x91\x20\x71\xbb\xc6\x9c\xa5\x7d\x04\x31\x5a\x4a\xdd\xb9\x69\x5d\x6a\xcb\x37\xcb\x8d\xa8\x18\x39\xcd\x56\x86\xd7\x1d\xea\xe8\xd6\xeb\x9f\x5e\x90\x2f\x97\xa2\x4a\xd9\x87\xdc\x81\x75\xec\x0d\x5c\x09\x1b\xe3\xbb\x16\x5c\xd9\x00\x39\xac\x9f\x4a\x25\x67\xfb\x32\x4b\x71\x70\x0c\x57\xf4\x4a\x58\x39\xfb\xb3\x96\x3c\x40\x1a\x8a\xf0\x67\xcf\xba\xd8\xf4\x91\xd0\x60\x06\x42\x6d\x3d\xf9\x43\x8d\xdf\xd6\x50\xe2\x17\xd2\x83\x58\x6b\xa0\x42\x40\x3f\xd3\x5e\xd9\x5f\xbe\x3c\xd0\x2b\x52\x19\x73\x8c\x54\x69\x45\xf6\xab\x65\x6b\x2d\xeb\xd3\xe3\x9e\xee\x80\xae\xa6\x54\xe0\x14\x66\x0a\x9a\xd2\x31\xde\xa3\xb9\x18\x9a\xdd\x58\x0d\x8d\x37\x3f\xc9\xe6\x54\xc1\x3c\xb2\xae\x39\xba\xe0\xb6\xab\x9b\x87\x0a\xde\x97\x51\xec\x82\x42\xd7\xa7\x6f\x88\xbb\xd8\xe8\xc2\xa0\xee\xcf\x71\x48\x4a\x87\x47\x58\xb1\x5c\x9a\x0c\x48\xec\x1e\x91\x6c\xb2\x7c\x5e\x0b\x49\xe7\x97\x5e\x76\x52\xa6\xc9\xfa\x3a\x7f\xc0\x9f\xe6\xc3\x6a\x21\x52\xb1\xce\x5e\x3e\x7f\xf1\xb7\x9f\x5e\x9d\xbd\x3b\xff\xe5\xf9\xdf\x9e\xbe\x7e\xf5\xfd\xf9\x9f\x7f\x7e\x73\xf6\xee\xfc\xf5\x2b\xff\xc9\x8f\x6f\x5f\xbf\x62\x74\xfa\x66\x45\x47\xf6\x52\x8e\xa5\x6e\x0d\x54\x7b\xe6\x3c\x5f\x74\x21\x8b\x08\xe1\xe9\xc3\xb1\xe5\x6d\xa4\x9d\xa7\xd9\x91\x64\x04\x67\x99\x21\xd4\xcb\x0e\xda\xc5\x43\xa9\xf9\xc5\x43\x70\x23\x6c\x9b\xf8\xb7\x28\x3b\x7d\x80\xa2\x4b\xa1\xd8\xe7\xa6\x95\xe0\xb6\x36\xbc\xbf\x7b\x25\x00\x6b\xae\x14\xc8\x69\xc9\x6b\xb7\x3b\xbb\x5e\x04\x7f\x41\x18\x1d\x9c\xc7\xdc\xc6\xca\x1b\xbd\xec\xbb\x75\x68\x5b\x3d\xf0\xc1\x2f\x18\x4f\x34\xb6\xd5\x88\xd3\x04\xb7\x83\x36\xc4\x2b\xc4\x5e\x3f\xbf\x39\xb7\x3b\x01\x16\xea\xf2\xb3\xc1\xad\xc1\x3a\xa1\x92\x21\x7c\x5f\x30\x47\xeb\xe4\x37\xa1\xf2\xce\x75\x3f\x81\x58\x71\xf0\x17\xa1\x56\x0a\xa6\x8d\x22\xd7\x15\x7c\x32\xad\x70\x2c\x7e\x6f\x73\xc1\xfa\x56\x51\xec\x02\x98\xed\x16\x7e\xf8\x02\x0f\x92\x07\x3c\x5f\x5e\xd4\x4e\x2a\x00\x5e\xcc\xb7\x0d\x35\x3b\x0c\xd9\xcb\x3c\xb7\xe1\x59\x18\x7d\x09\x26\xf7\xf0\x8e\xda\x93\xbf\xb3\x0e\x82\xf0\x3a\x38\xda\x81\xef\xa7\xec\xd1\x28\x6c\x5b\xa3\xeb\xae\x82\x1b\x76\xe7\x13\x91\xec\x61\xb1\x14\xd2\x81\x09\xdb\x36\x8d\x3c\x3b\xda\x3f\x45\xc3\xc3\x1b\x28\x08\xd0\xa0\x15\xc1\x1a\x78\x0d\x86\x1d\x54\x30\x0d\x57\xf3\x5a\x58\xa7\xcd\xe6\x20\x76\x3d\x7f\x2b\x54\x15\x04\x6f\xf8\xd8\xab\xa5\x0b\x00\x85\x61\x9d\x2b\xba\xe9\x14\x5c\x83\x29\x1f\x0a\x09\xb2\x73\x52\x80\x90\x14\x84\x3d\x8e\xc1\xd4\x40\x44\xa8\xcb\xe9\x42\xa8\x3a\x0a\xeb\x9b\x5f\xc7\x42\x77\x4e\xf8\x7c\x57\xe6\x2c\xc7\x09\xb1\xa5\x7d\xe1\x5e\x11\xea\xf2\xbb\x62\x09\x96\x34\x83\xd9\x3b\xbc\x63\x8a\x2b\x21\xdd\x89\xbd\x89\xd1\xaa\xb4\x34\xfb\x4a\x02\x2e\x32\x2b\x13\x6f\xa3\xd5\xbb\xe3\x72\xbd\x75\xa2\x43\xf8\x58\x41\xbb\x7b\x44\xb4\x7c\x43\xab\x05\xbf\x40\xe1\x94\x42\x1c\x8e\x3e\xd1\xa1\x59\xf8\x33\x53\xfe\x0a\xba\xb5\xe2\x3d\x5c\xdc\xfc\x39\x89\x2e\x3c\xb3\x73\x8f\x7e\xea\x17\xe1\x21\x9f\x1b\xc2\xaa\x3b\x5e\x25\x29\x00\x63\xc9\xc7\x77\x18\x33\x4c\x2b\x2d\xb1\x35\x4c\x1d\xee\xef\x23\x52\x90\xe2\x9b\x41\x0b\x5e\x5d\x82\x57\x0f\x6d\xae\xf8\x5c\x6c\xd8\xff\xee\xb8\xb9\xec\x2c\xf9\xda\xae\xd1\xcf\x36\xd4\x02\x93\x91\x45\xbd\x1a\x63\x68\xfb\xef\x34\x72\x26\xf4\xc9\xaa\x13\x35\xd8\x93\xb0\xd4\x83\x50\xa8\xa4\x36\x23\xdc\xd4\x52\x9b\xd8\x7e\x4b\xea\x15\xd3\x9d\x6b\xb1\x16\x23\x49\x33\xa4\xf4\x08\x8d\xec\x85\x5e\x59\xd6\x80\xc5\x94\xa2\x34\x2a\x31\x1c\x5c\xc1\x98\xbc\x90\xb3\xfa\x83\xb7\x09\x5d\xb1\xad\xe4\xc9\x39\x2c\x3b\x0c\x9c\xbf\xfa\xfe\x75\x19\xed\xf9\x60\x47\xb8\xe4\x5f\x23\x6a\x71\x6a\x1b\x75\xc1\xc1\x34\xd3\xd6\x80\x73\x1b\x4c\xc8\xbb\x3d\x4b\x36\x9c\xc1\x03\x1a\x44\xb1\x64\xa1\x56\x07\x31\x9a\x80\xca\xa6\x5f\xed\xab\xec\xb1\xb0\x6e\x50\x35\xfe\x85\xb3\x57\x5f\xe2\x0a\x7d\xd7\xf9\x96\x81\x31\x14\xb8\xa5\x41\x86\x68\x7a\xaa\x1b\xbf\x95\x85\x53\xbc\xdf\x51\xa4\xd6\xb4\x3b\x78\xc1\x60\x73\x93\xe4\x13\x88\xf6\xe9\x31\x61\x7b\x8c\x33\x06\x6b\x16\xdd\xda\x5a\x61\xfa\x8b\xd7\x2f\xd0\x0f\xa2\x2a\xa0\x1a\x88\x47\x65\xc3\xbe\xbe\x99\x78\x4d\x46\x54\xe9\xe8\xa7\xe9\xb3\x52\x85\x09\x8f\xb8\x0e\x65\x1e\xb0\xb9\xd7\x36\x0e\x0f\xe8\xbb\x53\xa9\xab\x4b\xdc\x05\x07\xd2\x63\xdf\x9c\x2e\xb4\xb3\x07\x47\xb3\xd9\x6c\x3e\x63\xaf\x5e\xbf\x7b\x7e\x1a\xa2\xb1\x22\x46\x73\x79\x5d\x5b\xba\xed\x39\xb6\xf4\x6a\x04\x35\xf2\xdc\x55\x77\x91\xca\x43\x28\x15\x34\xb5\x3a\xfc\x2a\x78\x75\x0c\xf0\xfa\xe4\xda\x88\x64\x95\x34\xbc\xb5\xa1\xf3\x1a\xaf\xa9\x07\x4e\xa0\x81\x01\x7f\xc0\x21\xba\x34\x48\xe9\xc8\xaf\xa1\xe4\x58\x0b\x4b\xab\xb9\x35\x57\x59\xaf\xda\x0a\x8c\xf4\xec\xe2\x07\x90\x57\x7c\xaf\x31\x3d\xa1\x2a\xd9\xd5\x30\xad\x3d\x1f\x70\xe7\xff\xd1\xeb\x52\x75\x6b\x1e\x97\x22\x2c\x28\xbd\x32\x9a\xd9\xd4\x1d\xd2\xa3\xc2\x1d\xde\x53\x5c\x6e\xfe\x11\xbc\xf1\xc1\x52\xa9\x74\x0d\x39\x4b\x86\xd7\x75\xbf\xe5\x54\xea\x25\x87\x1a\x08\xc1\x96\xed\x8f\x19\xb6\xa8\x2c\x8e\xc1\x7c\x8b\xaf\xa9\xed\x6d\xf6\xc7\x29\x36\xc7\x10\x5f\xf8\x0b\xc2\x3a\x2c\x61\xc9\x15\x1e\xe1\x1d\xc7\x12\xa4\x9b\xd5\xa3\x6d\x0b\xbe\xe1\xed\x08\x29\xff\xe8\x15\x6f\xa0\x78\xe1\x8b\x06\x16\xbd\x7c\x0a\xd6\xf2\xaa\x6d\xbc\x9f\xaa\xcb\xdc\x36\x3f\x7b\x4b\x0f\xfe\x67\xc1\xdb\xf8\x0a\xce\xff\x9a\xfa\x6f\x0f\xf6\x36\xff\x3e\x88\x92\x0c\xbf\x3e\x18\x74\xfd\x2e\xfe\x34\x02\x97\x9d\xa8\x9c\x48\xe0\x36\xbb\xae\x6e\xc1\x2c\xa0\xd2\xc7\xef\x66\xcc\x76\x01\xec\x62\x17\x84\x5b\x32\x86\x36\x2d\x02\xbc\x43\xb0\x97\x4f\xde\xf9\x75\x30\x70\x79\x40\x81\xa5\x97\xbc\x3d\xf0\x07\xfc\xe0\x85\x47\x8d\x0c\x37\xff\x7f\x3d\x78\xe9\x6f\xbd\xb2\x62\xbe\x00\x39\xbd\x84\x31\xed\x39\x5f\x60\x9d\xc8\x4e\x5a\x89\x1a\x94\x13\xcb\x0d\xb5\x56\xc4\x86\xcb\x5a\x39\xc8\x16\x04\x12\x6f\x17\x48\xd4\x61\x35\xb4\x5b\xd5\x66\x75\x52\x90\x74\x07\xa4\xe8\xb0\x1f\x0d\x6b\xe1\xde\xbf\x2b\xc4\x7b\x37\x7d\x78\xad\x78\xe8\xb2\xe6\xae\x5b\x50\xbc\x15\xf7\x97\xce\xe4\xff\x78\x76\x71\xce\x9e\xbd\x7d\x71\x73\x27\x3d\xaf\x59\xe4\x8e\x63\x65\x0f\xf6\xaf\x92\x9d\xcf\xd3\x74\xfe\x0e\x1d\x96\x7e\x95\xfd\xf1\xbc\x61\x74\x8f\xcd\x74\x5e\x5f\xe7\xd7\x07\x41\xd9\x10\x25\xe5\x94\x85\x14\xdb\x04\x65\xfd\x66\x01\x52\xe7\xda\xeb\xa1\x25\xb7\x00\x8c\x2d\x87\x51\x98\xaf\x64\xb8\xb2\x4b\x74\x61\x2b\xa5\x5d\x68\x6a\xee\xff\xd2\x7f\x6a\xb8\xdc\x57\x1d\x3c\xd7\xe1\x09\x38\xb2\x0c\x13\x08\x0f\xc0\xc4\x20\x33\x78\x5a\x60\x3c\xd2\x6b\xf3\x2e\xdf\x35\x25\xb9\x28\x0b\x3b\x92\xd2\xf4\xb2\x34\xc3\x5a\x77\x7a\xa0\xb8\x58\x26\xec\xc2\xf6\x0a\x29\x0b\xb4\x5e\xdc\xa3\x31\x7c\xf1\xec\xbb\x5b\xf4\xf1\x0b\x5d\x3f\x13\xd6\x74\x38\xe8\xbb\xae\x5e\x81\x4b\xbc\x40\xc7\x29\x04\x1d\xcf\x1f\x5e\xd7\xc4\x46\xa8\x29\xbf\xe2\x42\xf2\xc5\xe8\x3e\xea\x39\x30\x8b\xa2\x73\x17\xf6\x78\x7c\x31\x82\x68\x5d\x90\xbd\xfd\x55\xe2\xd3\x19\x5c\x31\xb8\x12\x55\x08\x47\xa6\xb6\xb9\x54\x6c\xc0\x15\xe3\x0b\xab\x65\xe7\xf2\xa2\x86\x3a\x0c\x87\x94\x81\xd9\x6b\xb2\x58\xe2\xa4\x7a\xc9\xe6\x3d\x94\x42\x4d\x4c\xc3\x3f\x4e\x3b\x55\xfc\x36\x2c\x94\xba\x8d\x0f\x03\xd7\xc5\xc7\x5f\x98\x2a\xd1\x15\x96\x17\x20\x52\x44\xb2\x7c\x1e\x41\x8a\x72\x8c\xaf\x53\xad\xcf\x36\x51\xbc\xae\x29\xad\x8e\x45\x9d\x47\x89\x8e\x44\xc1\x21\xb5\x88\x86\xbd\x29\xa2\x27\x7a\x8b\x8e\xe9\xd4\x86\xf3\x7a\x7f\xf7\xc6\x20\x91\x17\x93\x7b\x17\x3c\xe5\xe9\x21\xb5\x0b\xe7\x16\xb7\x56\xac\xd4\xe0\xcd\x11\x44\x23\x4f\xa4\x07\x7f\x9e\xb1\x73\xc5\x2a\x1e\xa2\x83\xe9\x3b\x61\xb1\x47\x32\xa6\xde\x27\x23\x86\x88\x8a\xd9\x2e\xd1\xaa\xa4\x6b\x08\xb3\xf2\x69\x53\xe2\x0c\x33\x86\x6e\xd1\x90\x53\x86\xc1\xc3\x60\xc8\xd2\x2d\xbe\xec\x24\x0b\xaf\x1f\xc2\x47\x67\xe9\x6d\xdd\x60\xff\x82\x81\x47\x96\x29\x9d\x5a\xf9\x07\x87\x1a\xe3\xa1\xe1\xfd\x8e\x87\x75\x7b\xd0\x53\xa0\x59\xab\x1e\x75\xfb\x6f\x24\x5b\x70\x5e\x73\xb0\xd8\xfd\x7f\xc2\x6c\x70\x5a\xd3\xd2\x9e\x45\x9b\x05\xa0\x75\x32\x78\x9f\x91\x19\x58\x09\xeb\xcc\xe6\x21\xf4\x31\xa0\xdd\x99\x96\x49\xf6\xb7\xb4\x18\xd8\xda\xcf\x43\x68\x5a\xb7\x39\xca\xb4\x4d\x1e\xe6\x1d\xbc\x52\xae\xbd\x92\x7a\xd1\x2b\x28\xdd\xbd\xe6\xb9\xaa\x43\x11\x92\x58\xf6\xa7\xcd\x09\x46\x51\xd7\xa1\x29\x31\x87\x9b\x0c\x1e\x6e\x0b\xb1\x48\x7f\xcd\x16\x70\x92\x13\xfe\x48\xde\xdd\xc1\xbd\xd5\x6f\xa1\x06\x07\x55\xf1\x40\x4c\xd9\x5a\x52\x2c\x77\x1c\x81\xbe\x00\x89\x48\x1c\x8a\xac\xad\x17\x1d\x22\x13\xa7\xa2\x8b\xaa\xe8\xf7\xd8\x62\x8f\x98\xfb\xd2\x0d\xf0\x15\xa2\x9e\x6e\xb0\xce\xcf\x66\xf4\xdc\x18\x5b\x57\x3f\x0b\xcd\xb7\x79\x7c\x0a\x6a\x0d\x6c\x7e\xa1\xeb\xb7\x2d\x54\xef\xa0\xf1\x10\x03\x26\xcc\x74\x55\x7a\x1e\x26\x67\x39\x94\xd3\xcd\x67\x5e\x34\xcc\x5a\x5d\xa7\x71\xa4\x75\x08\x90\xf5\x24\x27\x59\x94\x63\x8a\xda\x7d\x4a\x9e\x0a\x23\x63\xb9\x8f\x75\x86\x3b\x58\x89\x8a\x35\x60\x56\x58\xd9\x5d\xad\x63\xe2\xf9\x20\x5e\xb3\xf5\xfa\x53\x3e\xf3\xf4\xe4\x77\x91\xf5\x1a\x7b\xc0\xc3\xc4\x9b\xf2\xb8\x56\x92\x2d\xfd\xf7\x61\x07\x0f\xc9\xee\x37\x3e\x5a\xa3\x1b\x70\x6b\xe8\xee\xdc\x4b\xe6\x2e\x8e\xd9\x8b\xb4\x4a\x4c\xe0\x2f\xdb\x47\xe4\xbf\x4e\x2b\xdd\xb4\xdc\x61\x73\xbf\xe8\xfc\x21\xba\xc5\xe7\xcd\x89\x6b\xfd\x28\xbf\xdd\x2f\xb5\x12\x4e\x9b\x79\x52\x18\x73\xad\x16\x9d\x92\xd8\x6b\x24\xdc\xa3\x95\xe1\xed\xd0\xbb\x1a\xa3\x23\xa5\x8b\xb5\x04\x38\x9e\x69\x8a\xb8\x50\x82\x64\xc8\x4c\x0a\xdd\x55\x68\xd8\x4b\x51\x19\x7d\x41\xf4\xc2\x29\x5f\xd2\xa7\x33\xf6\x97\xb3\x37\xaf\xce\x5f\xfd\x39\x3c\xb9\x8f\x66\x63\xf1\x7e\xc8\x2e\x34\xf2\x5b\x5d\x18\xf6\x0c\x41\x99\x22\x89\xbd\xd2\x06\xb4\x3d\xc9\xbb\x37\x8d\x60\xbe\xbf\x28\x77\x14\xab\x44\xf1\xf7\xbf\xc6\xeb\x2b\xad\x81\x05\x8d\x22\xfa\xc1\x17\x29\x2f\x0f\xea\x19\xfb\xab\xee\x90\x68\x98\x1d\xdb\xea\x7a\xda\x04\x10\xe3\xdd\x1b\x0a\xbb\xd3\xf5\xb7\xb5\xc3\xe9\x6d\x1b\xe1\xd6\x3a\x04\x1f\x8a\x8f\x5e\x97\x54\xc5\x49\xb7\x66\xd8\x53\x94\xf1\x00\x3c\xb8\x05\xc1\xc6\xb8\x54\x49\xf9\xdc\xc3\x09\x7e\xbd\x28\xbd\x07\x3d\x83\xf7\x2c\x79\x77\x53\x71\xf7\xca\x34\xcd\x76\xbd\x75\x8f\x1f\x72\x9c\x9c\x80\x2a\xee\x8e\x4e\xca\x29\x35\x8e\xb8\x4f\xfb\xb2\x93\x92\xbd\xc5\x55\x02\xdb\x58\x8a\x4f\xe3\x1b\xd4\xb4\x7c\x74\x41\xb4\xba\x9e\x64\xff\xcd\xe0\x3d\x38\x8c\x52\x38\x23\xe0\x6a\x28\x86\x49\xf5\x22\xa7\x8e\x4a\x8f\x31\x25\x5d\x8c\xe4\x42\xb9\x5c\xf1\x20\x5a\x7e\x6f\xa9\xe1\x8a\xf2\x4b\xb5\xc1\x27\xe5\x50\xed\xdd\xe8\xee\x51\x91\x9a\x47\xa2\xa9\x2c\x7d\xa6\x07\x41\xd2\xa2\x38\x6d\x86\x2c\x82\x10\x11\x9c\x17\x97\xd4\x45\x20\xf8\x9c\x74\x68\x7a\x37\x8b\xe0\x2b\xb4\x76\x0f\x36\x4e\x8a\x48\x6e\x37\xe3\xda\x6e\xc4\xb5\xf1\x92\x21\x3f\x54\xff\x29\xe0\xa2\x90\xf6\xb7\xbe\xb5\x5d\x13\xbd\x51\x43\xba\x8a\x90\xfe\xd9\x1a\x0c\x89\x61\xf7\x82\x8d\xee\xe8\x40\x25\xc4\xfb\xef\xec\xed\x80\xc6\x23\x88\x4e\x3a\xc4\x6f\x42\xe0\x73\x95\x8e\xba\x3f\xd0\xb4\xff\x31\x52\xf2\x4f\x2e\x5b\x68\x0f\x47\xbf\x78\x3f\x60\x4d\xc5\xa9\xdd\xa2\xcd\xa7\x02\x5b\x83\x9f\x2f\x99\x84\xa5\x63\xa8\x70\x13\x24\xc3\x80\x49\x8c\x3a\xf0\x4b\x50\x59\x11\xdd\xc9\x72\x79\x7f\x7a\xb6\xd2\xd6\x53\xf5\xf8\xbe\x3c\x98\x18\x8c\x1a\xd9\x49\x40\xa5\x77\x0b\x87\x5a\x77\x68\x32\x87\xe4\xac\x93\xc8\x99\x10\x3e\xa1\x36\x29\x66\xf5\xa4\x25\xd3\x45\x1c\xfa\xae\x94\x90\xcd\xe3\x83\x09\xcc\x68\xbf\x8d\xaa\x1f\xe7\xc2\x4c\xb6\x96\x57\x90\x23\x32\xb7\x44\x46\x3f\x33\x1f\x7b\xd0\x82\x29\x99\x2b\x89\xde\x5b\x02\x2f\x3b\x29\xe8\x46\xf5\xc8\x6e\x5a\x60\xf3\x7e\x2b\x9f\x5a\x57\x97\x60\x68\xfa\x0f\x56\xab\x42\x8e\x87\x54\x90\xfb\x71\x34\xa0\x76\x18\xd2\x54\xb6\x55\x43\x57\xfc\x31\xd6\x05\x87\x30\xf1\xee\x7e\x81\x21\x94\xcd\x9e\xea\xa6\x15\x32\xf4\x10\xe5\x2c\xa4\x1b\x91\xf2\xec\xc7\x4d\x98\x98\x41\x3f\xa0\xd8\xf2\xea\xd2\x6f\xbc\xa7\xce\x13\x1a\x10\xc2\x89\x22\x44\xee\xd3\x03\x5a\x28\x58\x62\xed\xf3\x84\x71\xcb\xae\x41\x4a\xff\xdf\xbf\x9e\xbd\x7c\x81\xee\x9c\xff\xf3\xf2\xc5\xe0\x6d\xd6\xa0\xc0\x06\xf1\x15\x5f\x62\x75\x4c\x02\xb7\x8e\xfd\xfb\x9f\xc5\x77\xf8\xea\x29\xf6\xd7\x0e\x5a\x2c\x9e\xcd\x5e\x24\x3b\x20\xb2\xe8\x84\xac\x27\xd1\x05\x83\x53\x06\x17\x56\x8f\x3d\x2f\xfc\x7d\x17\xf4\x33\x1c\x82\xf3\xf5\xca\x80\x8a\xbf\x05\xa3\xa5\x60\xb2\xba\xe7\x7e\x8d\xbb\x7f\x34\x29\x9e\x64\x04\x85\xed\x16\x09\xec\xec\x84\x7c\x10\x4a\x5a\xb1\xe1\x7d\x5d\x69\x4c\x17\xf6\x70\x2a\x2e\x68\x92\x77\x9b\x16\xf6\xe8\x56\x91\x7f\xc3\x72\x94\x62\x99\x1b\xbe\x2c\xb9\x75\xd3\x0f\xdc\x50\xd3\x97\xc0\x77\x3b\xda\x6c\x87\xaf\x8e\x66\xd1\x63\xb6\xd0\x6e\x5d\x0e\x47\x27\x62\x1c\x8f\xef\xbd\x45\xd5\x63\xc2\xdc\xb5\xee\x09\xea\x9f\x44\x6a\xcf\x95\x03\x3f\xf8\xb6\x22\x69\x9a\x13\x14\xa4\x28\x14\xe3\x8c\x97\xc2\xc5\x76\xa4\xad\x81\x0a\x6a\x50\x15\x30\x1d\x7b\x3e\x66\x40\xa2\x4f\x44\x79\x71\x59\x51\xdf\xd3\xcd\xcc\x53\x82\x1e\xbf\x14\x6a\x29\x3b\x3f\x38\x36\x21\x46\x87\x6b\x21\x87\x63\x85\xb9\x5f\xb1\xff\x28\x65\xe9\x39\xc4\xf6\x03\x28\x2d\x0c\x75\x84\xaf\x8b\x8e\xc1\x4b\x61\xac\xeb\x51\x3c\x79\x3d\xc8\x4d\x99\x02\xfa\x34\xa0\x57\xeb\x15\xe8\xab\x34\x83\x8f\xc2\x62\x84\xef\x32\xfa\x3b\x1b\x6f\xc8\xc3\x56\x13\x14\xfa\xb2\x48\x32\x44\x6b\x7d\x84\xd6\x7b\xb3\x5c\x7c\xe3\x67\xd9\xf3\x60\x74\x2f\x84\x52\xda\x94\x7d\xaf\x63\x70\x1b\xec\xaa\xdb\x22\x6b\xb4\xe8\xa1\xe5\x39\xe8\x12\x36\x21\x58\xeb\x2c\x0b\x2f\xb6\x11\x83\xd4\x65\x21\x4e\xba\xfe\xa5\xae\xb8\xc4\xf6\x75\x74\x7b\x7a\x2e\xc6\x54\x24\x0f\x06\x55\x52\xcd\xe9\x4e\x9a\x33\xbd\xf8\x00\x55\xa8\x1b\xc1\xde\x43\x7e\xfe\xce\x26\xc7\x2b\x16\x9b\x35\xe0\xc0\x78\xf1\x5e\x87\x0a\xb4\xf9\x34\x8e\x3f\x84\x8f\xbc\x69\x25\x9c\xb2\xb9\x93\x76\x5a\x80\x1e\x3f\x39\x22\x2d\x3e\x34\x56\x20\x07\x51\x0f\x45\xcc\x3b\xa0\x37\x30\x12\x5c\x33\x76\x71\xf3\xba\x28\xe8\xd6\x62\x15\x91\x6f\x8d\xd0\x46\x60\x3d\x3b\x95\xe4\x64\x17\x36\x6a\xd9\x48\xf3\x8c\x4c\xe8\x43\x35\xa1\x9a\xca\x1e\x0a\x97\xb0\x89\xab\x10\xb0\xfe\x0c\x87\x3f\x90\xde\xae\xb6\x3e\x8c\xda\x7b\x78\xcf\xb9\xc8\x96\xe2\x6d\x6b\x34\xa7\xee\x27\xe9\x9d\x63\x7f\x4c\x60\x43\xfd\x1b\xcb\xae\x4b\xc2\xc6\x8c\x87\x40\x07\x3b\xef\x25\x66\x08\x93\xf9\x20\xb4\x7a\x49\x27\x31\xbd\x09\x5d\xee\x58\x49\x79\xac\x4f\xda\xbf\x4d\x93\x2d\xa4\xe8\xa2\xa5\xef\xf9\x0d\x43\x8a\xf2\x83\x3d\x1f\x62\xfb\x49\xea\xf9\x86\x94\xa6\xdb\xd1\xc6\x14\xbd\xe4\x17\x22\x69\x23\xbc\x5c\x5e\x05\x8d\x38\x76\x3a\x76\x5d\x1b\x13\x70\x67\x0f\xb4\x35\xe5\xd8\x66\x72\x63\x9a\x06\x23\x3b\xf7\x82\xdf\xd2\x4e\x1d\x98\x26\x6c\xc4\x48\x2b\xe4\xdd\x8b\xb7\xac\x18\x85\x23\x26\x4c\x8a\x4b\x60\x73\xa8\x57\xe0\xb7\xb8\xe5\xd6\x86\x0e\xce\x74\x1f\x1a\x00\x55\x99\x4d\xeb\xe6\xbb\xea\x44\xb3\xdb\x9a\x8e\xdc\x76\xbd\x68\xd1\xd1\x6b\x4f\xd5\xe8\x80\x45\xef\x80\xcc\xb0\xfd\x20\x36\xfc\xea\x95\xf7\xde\x08\x5f\x40\xe5\x93\xa0\xcc\x6e\x95\x31\xc0\x96\xa6\x5f\x94\xf1\xc5\x51\x25\x58\x07\x18\x85\xfa\xc1\x9c\x01\x8d\x6a\xf0\x41\x61\x7c\xbe\x3f\xf1\xe7\xd7\xff\xeb\xd7\x03\x72\x31\x50\x46\x50\xaa\x4e\x0d\xd9\x7f\x79\xf1\x49\x88\xb2\xe4\x72\xf8\x94\x12\x4b\x42\x2a\x78\xe7\xa3\x97\x22\x87\x2a\xbc\x0e\x31\xa1\x67\xc5\xae\x05\xb9\x4d\x92\x77\x92\xe3\xd0\x64\x0e\xb3\xa2\xa5\x4d\x30\x07\x0f\x4e\x0e\xee\xb0\x2f\x83\x1d\x49\xaa\xc7\xde\x7d\x19\x97\xe0\xb5\x8b\x6b\xca\xcb\xf6\x3e\x39\x27\x0b\xda\x7b\xe4\x18\xff\x51\x76\xe6\xb2\xc0\x3b\x5f\x86\x6b\xe2\xb1\xc7\x78\xc8\x97\xe1\x9a\x30\x65\xe4\x9d\x2f\xc1\x35\x31\xc5\x60\xdc\x69\xe6\x9f\x28\x76\x7a\xbd\x83\x7f\x23\xc9\xb3\xeb\xa6\xfd\xd2\xac\xd4\xc7\xeb\x5f\x9c\x34\x9a\x93\xf6\xeb\x44\x23\xb7\xa8\xac\xe9\x1c\x70\x57\xc8\x7d\xb0\xc9\x23\x8e\x74\x8d\x86\x5a\x4f\xb7\xce\xb1\x70\xb2\xc0\xe8\x61\xec\x34\xf3\x8c\x95\xae\xbb\x74\xaf\xf7\x34\x02\xcc\xd9\x10\x12\x42\xf4\x3d\xcc\xb8\x28\x5e\xb1\x8b\x75\x05\x9e\x92\xa8\x96\x23\x01\x0d\x6a\xc4\x2c\xd8\x8b\xe1\x01\x30\x6c\x2b\x9c\xb2\x0f\x2d\x54\x5d\xba\x77\xe2\x13\x33\x5a\xcd\xce\x97\x71\x59\x90\x58\x3e\x85\x29\x3b\x85\xe5\x1c\x15\x20\xb2\x56\x62\x2e\x48\xec\x73\x51\x20\x18\xe6\x7e\x7a\x86\x6c\x1e\x9f\x4a\xf1\x0a\x15\x72\xc5\x15\x97\xa2\x8e\x6f\x22\x08\xb5\x42\xa0\xd6\xda\xa4\x8a\x06\x62\x9e\xc3\xf0\xd3\x2c\xb9\x16\x67\xf6\xaa\x3a\x8a\x79\xed\xd4\xdd\x30\x44\xcb\x85\x5a\x1a\x4e\x21\x6e\xaf\xbf\x85\x77\x63\x61\xa0\xe8\x0f\x4b\x5c\xa8\xaf\xf8\x7d\xaa\x53\xb7\x2a\xe9\x5f\x52\x74\xec\x67\xde\x98\x12\x9d\x15\x99\x2f\x20\x42\xb2\x3b\xf5\xcb\x89\x90\x78\xda\xff\xeb\x44\x88\x50\x74\x3e\xa6\x5e\x11\x2f\x75\xfb\x69\xab\xa5\xa8\x46\xe9\x37\xa5\x29\xb1\xd6\xd7\x1e\xd0\x1a\xb8\x24\x0c\xe2\x02\xb1\xad\x4a\xac\x51\xc2\x7a\x58\xaf\xf9\x3f\x23\xc3\xa7\x6c\x3e\xf5\x06\x62\xaf\x8e\x30\xe8\xcb\x2a\x71\x39\x9e\x42\x5d\xeb\x73\x09\xef\xbd\x65\x41\xc4\x2e\x69\xdf\xc5\xf2\xdf\x32\xf7\xa5\xb3\xc1\x8a\x0e\xd2\xc9\xff\x33\x0c\xc0\x82\xbd\xbc\x2a\x55\x6a\xed\x48\x0a\xb8\xfc\xd6\x4e\x07\xe8\xd8\x13\x2f\xcc\xfe\x6d\xf0\x5b\x76\x16\x38\x3b\xd4\x72\x67\x01\x26\x6c\x48\x29\x85\x2b\x2d\xaf\xc8\xed\x4c\xb1\x20\xdb\x2d\x3e\x04\xb0\xaa\x35\x57\xab\x87\x60\x06\x07\xb4\xef\x5a\x52\x5f\x92\xdd\x05\xe9\xc1\xde\xbf\xe7\xad\x58\x19\xdd\xb5\x27\xbf\x86\xca\xf1\xd3\x5f\x2f\x85\xaa\x4f\xdf\x27\x59\x7d\xf2\x2b\xda\x21\x83\xe5\xef\xce\x52\x37\x46\xbc\xfb\x0d\x02\xc9\x58\xdf\xf6\x48\x06\xc1\x11\x3f\x4e\x41\x7d\x1b\xbb\xae\x72\x14\x4f\xb1\x8d\x31\x3d\xb0\x85\x36\xbf\xa6\x74\x84\xfc\x46\xac\x65\x87\xe8\xd5\xcb\xd1\x8c\xa3\x24\xe7\xbc\xb4\xca\x57\x55\xc8\xd4\xd9\x1d\x41\x0e\x29\x76\xa2\x9f\x47\x15\xfb\x42\xf1\x90\xe7\x94\xdb\xc7\xc4\x74\x5e\x0a\x6f\xd0\x53\x54\xbc\xdf\xea\xef\x01\x84\x6b\xbf\x4c\xba\x1f\x16\xcf\x61\x9e\x5f\xdc\x50\x05\x50\x0f\xde\x7a\x2e\x97\x55\xba\x86\xe9\xa0\xdd\xfd\x8d\x75\xbc\x89\xab\x74\xe8\x4a\xa5\x43\xc7\x8f\x57\xba\x86\x0b\x3f\x51\x9c\xfa\x77\xb1\xeb\xd8\x7d\xa5\x74\xd0\x02\xbb\xfd\xde\x7d\x32\xc5\x84\xd1\xb2\x92\x62\x1d\x1c\x16\x94\xe4\x11\xe7\xd2\xa9\x45\x00\xd2\x33\xeb\x4a\x29\x3e\xab\x6a\x7a\x05\xde\x4b\xe4\x94\x3a\xee\xaf\x91\xb3\x8b\x73\xd6\x70\xc5\x57\x90\x7b\x62\x6e\x81\xf9\xaf\x06\xb2\xbb\x8a\x4d\x47\xbf\x03\x89\xea\x5e\xef\x2d\x48\xba\x08\x1d\xa7\x66\x57\x69\x9b\xfa\xcf\x21\xf4\x7a\x75\x8f\x6c\xac\x4d\x6f\x4c\xb8\x75\xc8\xae\xf4\x93\xfb\x1d\x16\x96\xb5\xdd\x42\x0a\xbb\xee\x25\x5a\x9d\xf4\x97\x18\xf9\x7e\x04\x36\x25\xcf\xf3\xdb\xfc\x72\x5d\x3c\x58\xc5\x5b\x12\x8f\x07\x4d\xd0\xd3\x5c\xd3\x4f\xc7\xc8\x9f\xaf\x69\xac\x3d\xcb\xcf\x0c\xed\x43\x32\x54\xd6\xcd\x30\xf2\x9f\xdb\x9f\x39\x2d\x21\xe5\xf1\xdf\x93\x56\x94\xca\xcd\x31\x6d\xeb\x5d\x5a\xd1\x52\x6c\x71\x3b\xf1\xb7\xfc\x24\x3f\xe5\x73\xb8\xe8\x1c\xab\xa9\xe2\x22\x44\xd7\x8f\x62\x0a\x04\x8a\x49\xcf\x5d\x75\x87\x39\x1c\x4e\xa3\x78\xb4\x74\x47\x62\x48\x0f\x15\x1d\x8e\x95\xc6\xec\x2d\x40\x4f\xc1\xda\x4a\x94\xb0\x27\x95\x56\x15\xb4\xce\x9e\x84\x59\x85\x5a\x4d\x63\x59\xc9\x09\xce\x33\xe5\xaa\x9e\x66\xfa\x9d\xa4\x48\x3a\x76\x30\xac\xc1\x71\x21\x63\x93\xb3\xf4\x55\x91\x75\x9e\xdb\x02\x62\xac\xca\x8a\x46\x48\xee\x6d\x50\x85\xc5\x7c\x51\xc8\xf9\x83\x87\x60\x53\x42\xc3\x84\xcd\x7f\x82\xcd\xfb\x27\xbf\x78\x33\xe6\xd7\xd3\xe7\xcb\x25\x54\xee\xfd\xe9\x5b\x7a\x33\xf4\xd7\xf9\x24\xb0\x08\x9a\x39\xa8\xde\xd8\xbf\x77\x5e\x56\x2c\x0c\xaf\x2e\x63\x3b\x43\xec\xc0\xdb\x92\xe6\x3c\x63\xdf\xe7\xa8\x95\x3d\x65\x53\x36\xc7\xab\xc5\x68\x09\xb3\x3e\x65\x42\x45\xf6\x2b\xfd\x36\x90\x7a\x1e\xbf\x1e\x7c\x18\xde\x90\x29\x6b\x60\x4e\x5f\xe9\xe7\x94\xd9\x7c\xfa\xbb\xc7\x8f\x1f\x93\x19\x30\xa5\x07\xc9\x31\x21\xc3\xda\xfa\xf4\x02\x8d\xbf\x72\x7e\x4a\x05\x79\xa0\x49\xa2\xb4\x71\x23\x55\x53\x6c\xf6\x12\xd4\x53\x1a\x88\x76\x10\xb1\x0e\x76\x75\xce\x9a\xea\xcd\x3c\x90\x4f\xb7\xe1\xd5\xfd\x36\xc2\x79\x47\x2b\x8c\xb9\xc9\x83\x58\x8a\x40\x95\xa6\xda\x57\xc1\x45\xc1\xa9\x4e\x21\x4e\x5a\x64\x8a\x57\x5a\x4a\xa8\x52\x8a\x76\x2e\x17\x5a\xd0\xd5\xbf\xbb\xe7\x62\x8a\x8f\xc6\x35\x53\xb6\x78\xbe\xff\x03\x59\x93\x86\xcb\x0e\x43\x12\x90\x65\xc7\xc7\x3f\x72\x58\x81\x39\x3e\x0e\xbd\x78\xde\x25\x7a\xb2\x7f\x29\x05\x03\xa5\x60\x12\xfa\x4e\x60\xda\x5e\xfc\x3e\x00\xd0\xeb\xdd\xb4\x6b\x3f\x76\x58\x74\x77\x49\x7f\x54\x45\x97\x82\x78\x13\xa3\x6d\x11\xaf\x42\x9b\x56\xc4\x76\xf5\x65\xbb\x9d\xec\x2e\xde\xaa\x4b\x3f\xda\xd1\x64\x6f\x24\x44\xe1\xe1\x96\xc4\x6f\x01\xb8\x92\xbb\x93\xbe\xb3\x9b\x77\x77\x34\xa4\x28\xe1\xb1\x28\xae\xcd\xe8\xb6\x08\x64\xc9\xf9\x21\x94\x2c\x93\x54\x83\x83\x4a\x2b\xeb\x0e\x76\xcd\x8d\xa1\xff\x3b\x4e\x9e\x7a\xc7\xe1\xe0\x62\x99\xaf\x0f\x8e\xbe\xfa\xcf\x00\x00\x00\xff\xff\xb6\x76\xa9\x63\x7f\xba\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ diff --git a/resources/traits.yaml b/resources/traits.yaml index b2041ba6bb..30356c11f3 100755 --- a/resources/traits.yaml +++ b/resources/traits.yaml @@ -570,6 +570,29 @@ traits: - name: list type: string description: Comma separated list of Kamelet names to load into the current integration +- name: keda + platform: false + profiles: + - Kubernetes + - Knative + - OpenShift + description: The Keda trait can be used for automatic integration with Keda autoscalers. + The Keda trait is disabled by default. + properties: + - name: enabled + type: bool + description: Can be used to enable or disable a trait. All traits share this common + property. + - name: auto + type: bool + description: Enables automatic configuration of the trait. + - name: camel-case-conversion + type: bool + description: Convert metadata properties to camelCase (needed because trait properties + use kebab-case). Enabled by default. + - name: triggers + type: '[]github.com/apache/camel-k/addons/keda.kedaTrigger' + description: Triggers - name: knative-service platform: false profiles: diff --git a/script/Makefile b/script/Makefile index be57f3b4b3..af0307702f 100644 --- a/script/Makefile +++ b/script/Makefile @@ -155,7 +155,7 @@ codegen: gofmt -w pkg/util/defaults/defaults.go -generate: generate-deepcopy generate-crd generate-client generate-doc generate-json-schema generate-strimzi +generate: generate-deepcopy generate-crd generate-client generate-doc generate-json-schema generate-keda generate-strimzi generate-client: ./script/gen_client.sh @@ -173,6 +173,10 @@ generate-json-schema: # Skip since the YAML DSL schema has been moved to apache/camel #./script/gen_json_schema.sh $(RUNTIME_VERSION) $(STAGING_RUNTIME_REPO) +generate-keda: + cd addons/keda/duck && $(CONTROLLER_GEN) paths="./..." object + ./script/gen_client_keda.sh + generate-strimzi: cd addons/strimzi/duck && $(CONTROLLER_GEN) paths="./..." object ./script/gen_client_strimzi.sh @@ -359,7 +363,7 @@ install-minikube: get-staging-repo: @echo $(or ${STAGING_RUNTIME_REPO},https://repository.apache.org/content/repositories/snapshots@id=apache-snapshots@snapshots) -.PHONY: build build-kamel build-resources dep codegen images images-dev images-push images-push-staging test check test-integration clean release cross-compile package-examples set-version git-tag release-notes check-licenses generate-deepcopy generate-client generate-doc build-resources release-helm release-staging release-nightly get-staging-repo get-version build-submodules set-module-version bundle-kamelets generate-strimzi +.PHONY: build build-kamel build-resources dep codegen images images-dev images-push images-push-staging test check test-integration clean release cross-compile package-examples set-version git-tag release-notes check-licenses generate-deepcopy generate-client generate-doc build-resources release-helm release-staging release-nightly get-staging-repo get-version build-submodules set-module-version bundle-kamelets generate-keda generate-strimzi # find or download controller-gen if necessary controller-gen: diff --git a/script/gen_client_keda.sh b/script/gen_client_keda.sh new file mode 100755 index 0000000000..e5dd2caf91 --- /dev/null +++ b/script/gen_client_keda.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +location=$(dirname $0) +rootdir=$location/.. + +unset GOPATH +GO111MODULE=on + +echo "Generating boilerplate code for Keda addon..." + +cd $rootdir + +go run k8s.io/code-generator/cmd/deepcopy-gen \ + -h ./script/headers/default.txt \ + --input-dirs=github.com/apache/camel-k/addons/keda diff --git a/script/gen_doc.sh b/script/gen_doc.sh index d4d6aab0ef..028ec44034 100755 --- a/script/gen_doc.sh +++ b/script/gen_doc.sh @@ -24,5 +24,5 @@ echo "Generating API documentation... done!" echo "Generating traits documentation..." cd $rootdir -go run ./cmd/util/doc-gen --input-dirs ./pkg/trait --input-dirs ./addons/master --input-dirs ./addons/threescale --input-dirs ./addons/tracing +go run ./cmd/util/doc-gen --input-dirs github.com/apache/camel-k/pkg/trait --input-dirs github.com/apache/camel-k/addons/keda --input-dirs github.com/apache/camel-k/addons/master --input-dirs github.com/apache/camel-k/addons/threescale --input-dirs github.com/apache/camel-k/addons/tracing echo "Generating traits documentation... done!"