Skip to content

Automate generation of CiliumNode, CiliumIdentity, & CiliumEndpoint CRDs using controller-gen#11476

Merged
aanm merged 8 commits intomasterfrom
pr/reworking-crd-validation
Aug 18, 2020
Merged

Automate generation of CiliumNode, CiliumIdentity, & CiliumEndpoint CRDs using controller-gen#11476
aanm merged 8 commits intomasterfrom
pr/reworking-crd-validation

Conversation

@aanm
Copy link
Copy Markdown
Member

@aanm aanm commented May 11, 2020

See #11476 (comment) for what this PR is about.

Followups are tracked here: #12737

Updates: #11142
Related: #12516


Previous PR body

1/2

With a CRD generator we will generate the CRD automatically based on specific markers across the golang source code.

TODO:

  • Create CRD for CCNP (it seems it's only creating for CNP so far)
  • Double check if the validation for all fields are correct
    • CN
    • CNP
  • Check if all fields of a CRD are generated. It seems shortnames are not present in the generated CRD:
    shortNames:
    - cnp
    - ciliumnp
  • Ensure additional columns is also in the generated CRD yaml
additionalPrinterColumns:
 - JSONPath: .status.id
   description: Cilium endpoint id
   name: Endpoint ID
   type: integer
 - JSONPath: .status.identity.id
   description: Cilium identity id
   name: Identity ID
   type: integer
 - JSONPath: .status.policy.ingress.enforcing
   description: Ingress enforcement in the endpoint
   name: Ingress Enforcement
   type: boolean
 - JSONPath: .status.policy.egress.enforcing
   description: Egress enforcement in the endpoint
   name: Egress Enforcement
   type: boolean
 - JSONPath: .status.state
   description: Endpoint current state
   name: Endpoint State
   type: string
 - JSONPath: .status.networking.addressing[0].ipv4
   description: Endpoint IPv4 address
   name: IPv4
   type: string
 - JSONPath: .status.networking.addressing[0].ipv6
   description: Endpoint IPv6 address
   name: IPv6
   type: string
 conversion:
   strategy: None

Follow ups:

  • Currently the maintenance of a CRD is performed by cilium-agents, we can move this to the cilium-operator. Cilium-Operator will double check if the installed CRD is up-to-date (this is because helm does not provide a mechanism to upgrade CRDs). Currently the up-to-date check of the CRD is being done by Cilium agent upon initialization. Moving this to the Cilium-Operator will likely decrease the size of the Cilium-agent binary because the bindata for the generated CRD will be built into the CIlium Operator binary.

Resources:
https://book.kubebuilder.io/reference/generating-crd.html
https://book.kubebuilder.io/reference/markers/crd-validation.html

@maintainer-s-little-helper

This comment has been minimized.

@christarazi
Copy link
Copy Markdown
Member

Weirdly enough, even after specifying to generate short names, it still doesn't work. No mention of this not working on the upstream issue tracker.

diff --git a/pkg/k8s/apis/cilium.io/v2/types.go b/pkg/k8s/apis/cilium.io/v2/types.go
index 2b1c08a56..3e1120d88 100644
--- a/pkg/k8s/apis/cilium.io/v2/types.go
+++ b/pkg/k8s/apis/cilium.io/v2/types.go
@@ -335,6 +335,7 @@ type CiliumClusterwideNetworkPolicyList struct {
 
 // CiliumEndpoint is a CRD that represents an endpoint managed by Cilium.
 // +k8s:openapi-gen=false
+// +kubebuilder:shortName=cep,ciliumep
 type CiliumEndpoint struct {
 	// +k8s:openapi-gen=false
 	metav1.TypeMeta `json:",inline"`

@aanm
Copy link
Copy Markdown
Member Author

aanm commented May 12, 2020

@christarazi this does the trick:

diff --git a/pkg/k8s/apis/cilium.io/v2/types.go b/pkg/k8s/apis/cilium.io/v2/types.go
index 2b1c08a56..3ec858a8d 100644
--- a/pkg/k8s/apis/cilium.io/v2/types.go
+++ b/pkg/k8s/apis/cilium.io/v2/types.go
@@ -335,6 +335,7 @@ type CiliumClusterwideNetworkPolicyList struct {
 
 // CiliumEndpoint is a CRD that represents an endpoint managed by Cilium.
 // +k8s:openapi-gen=false
+// +kubebuilder:resource:shortName={cep,ciliumep}
 type CiliumEndpoint struct {
        // +k8s:openapi-gen=false
        metav1.TypeMeta `json:",inline"`

@christarazi christarazi force-pushed the pr/reworking-crd-validation branch 8 times, most recently from 6c670cc to ea9d913 Compare May 15, 2020 03:03
@christarazi
Copy link
Copy Markdown
Member

test-me-please

@maintainer-s-little-helper

This comment has been minimized.

@christarazi christarazi added release-note/minor This PR changes functionality that users may find relevant to operating Cilium. and removed dont-merge/needs-release-note labels May 15, 2020
@christarazi christarazi force-pushed the pr/reworking-crd-validation branch 3 times, most recently from 9a11199 to cebb54f Compare May 15, 2020 19:03
@christarazi
Copy link
Copy Markdown
Member

christarazi commented May 20, 2020

#11607 brings in automatically generated CNP and CCNP. When that PR is merged, then it'll be the basis of this PR. The rest of this PR would be to add CiliumEndpoint, CiliumIdentity, and CiliumNode.

@christarazi christarazi added the pinned These issues are not marked stale by our issue bot. label Jul 15, 2020
@christarazi christarazi force-pushed the pr/reworking-crd-validation branch 2 times, most recently from 370bacb to 76f19f6 Compare August 13, 2020 17:55
@christarazi christarazi requested review from a team as code owners August 14, 2020 06:03
@christarazi christarazi requested a review from a team August 14, 2020 06:03
@christarazi christarazi changed the title Use generators for CRD schema Automate generation of CiliumNode, CiliumIdentity, & CiliumEndpoint CRDs using controller-gen Aug 14, 2020
@christarazi christarazi requested a review from a team August 14, 2020 06:05
Copy link
Copy Markdown
Member Author

@aanm aanm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't approve my own PR 😢

Overall looks good, only a small comment

Comment thread pkg/aws/eni/types/types.go
Comment thread pkg/k8s/apis/cilium.io/v2/types.go
Comment thread pkg/aws/eni/types/types.go
Copy link
Copy Markdown
Member

@sayboras sayboras left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One small question only, not a blocker 👍

This commit also adds a missing endpoint state, "invalid"

This CRD is generated using
https://book.kubebuilder.io/reference/generating-crd.html.

Signed-off-by: Chris Tarazi <chris@isovalent.com>
This CRD is generated using
https://book.kubebuilder.io/reference/generating-crd.html.

Signed-off-by: Chris Tarazi <chris@isovalent.com>
This commit adds resource name generation via markers. It also updates
the validation schema via markers which the old method of hardcoding had
a few fields missing / incorrect.

Here's a summary of the main differences in the validation schema:

1) Old schema had eniTypes.ENISpec.MaxAllocate, which doesn't exist. It
   exists under ipamTypes.IPAMSpec.MaxAllocate.
2) Old schema was missing eniTypes.ENISpec.{InstanceID,InstanceType},
   which is now included in this new generated schema.
3) Old schema was missing EncryptionSpec, which is now included in this
   new generated schema.
4) Old schema has azureTypes.AzureSpec.InstanceID, but that was removed
   and deprecated in favor of ipamTypes.IPAMSpec.InstanceID. See PR
   which forgot to remove this from the old validation schema. [1]

This CRD is generated using
https://book.kubebuilder.io/reference/generating-crd.html.

[1]: #10569

Signed-off-by: Chris Tarazi <chris@isovalent.com>
Kubernetes code tends to have very long lines because of package /
variable names, and can make certain lines hard to parse. This commit
attempts to make the code easier to parse. No functional changes were
made.

Signed-off-by: Chris Tarazi <chris@isovalent.com>
Previously, we only wanted to update a CRD when the CRD has an
out-of-date schema version (which is inside the label
"io.cilium.k8s.crd.schema.version".)

Some CRDs like CiliumNode (CN) had a validation schema, but did not have
a schema version (label mentioned above). This commit will allow all
CRDs like CN to be updated, because it removes the check for the
existance of the label.

Signed-off-by: Chris Tarazi <chris@isovalent.com>
This bump is after generating the following CRDs using the
controller-gen tool:

- CiliumNode
- CiliumIdentity
- CiliumEndpoint

Signed-off-by: Chris Tarazi <chris@isovalent.com>
These marker comments have no effect. They are likely leftovers from
when the tooling was not as mature. We are able to generate (`make
generate-k8s-api`) without issue.

Signed-off-by: Chris Tarazi <chris@isovalent.com>
@christarazi
Copy link
Copy Markdown
Member

Thanks for the reviews.

Incremental diff
diff --git a/examples/crds/ciliumnodes.yaml b/examples/crds/ciliumnodes.yaml
index 2f11d21bf..7c4ac4246 100644
--- a/examples/crds/ciliumnodes.yaml
+++ b/examples/crds/ciliumnodes.yaml
@@ -64,7 +64,7 @@ spec:
             description: ENI is the AWS ENI specific configuration.
             properties:
               availability-zone:
-                  description: AvailabilityZone is the availability zone to use when allocating ENIs
+                  description: AvailabilityZone is the availability zone to use when allocating ENIs.
                 type: string
               delete-on-termination:
                 description: DeleteOnTermination defines that the ENI should be deleted when the associated instance is terminated. If the parameter is not set the default behavior is to delete the ENI on instance termination.
@@ -104,10 +104,10 @@ spec:
               subnet-tags:
                 additionalProperties:
                   type: string
-                  description: SubnetTags is the list of tags to use when evaluating what AWS subnets to use for ENI and IP allocation
+                  description: SubnetTags is the list of tags to use when evaluating what AWS subnets to use for ENI and IP allocation.
                 type: object
               vpc-id:
-                  description: VpcID is the VPC ID to use when allocating ENIs
+                  description: VpcID is the VPC ID to use when allocating ENIs.
                 type: string
             type: object
           health:
diff --git a/pkg/aws/eni/types/types.go b/pkg/aws/eni/types/types.go
index e77fca462..8e27cebea 100644
--- a/pkg/aws/eni/types/types.go
+++ b/pkg/aws/eni/types/types.go
@@ -31,9 +31,13 @@ type ENISpec struct {
  // to retrieve AWS metadata for the node.
  //
  // OBSOLETE: This field is obsolete, please use Spec.InstanceID
+	//
+	// +kubebuilder:validation:Optional
  InstanceID string `json:"instance-id,omitempty"`

  // InstanceType is the AWS EC2 instance type, e.g. "m5.large"
+	//
+	// +kubebuilder:validation:Optional
  InstanceType string `json:"instance-type,omitempty"`

  // MinAllocate is the minimum number of IPs that must be allocated when
@@ -45,6 +49,7 @@ type ENISpec struct {
  // OBSOLETE: This field is obsolete, please use Spec.IPAM.MinAllocate
  //
  // +kubebuilder:validation:Minimum=0
+	// +kubebuilder:validation:Optional
  MinAllocate int `json:"min-allocate,omitempty"`

  // PreAllocate defines the number of IP addresses that must be
@@ -55,6 +60,7 @@ type ENISpec struct {
  // OBSOLETE: This field is obsolete, please use Spec.IPAM.PreAllocate
  //
  // +kubebuilder:validation:Minimum=0
+	// +kubebuilder:validation:Optional
  PreAllocate int `json:"pre-allocate,omitempty"`

  // MaxAboveWatermark is the maximum number of addresses to allocate
@@ -67,6 +73,7 @@ type ENISpec struct {
  // OBSOLETE: This field is obsolete, please use Spec.IPAM.MaxAboveWatermark
  //
  // +kubebuilder:validation:Minimum=0
+	// +kubebuilder:validation:Optional
  MaxAboveWatermark int `json:"max-above-watermark,omitempty"`

  // FirstInterfaceIndex is the index of the first ENI to use for IP
@@ -75,6 +82,7 @@ type ENISpec struct {
  // used for IP allocation, eth0 will be ignored for PodIP allocation.
  //
  // +kubebuilder:validation:Minimum=0
+	// +kubebuilder:validation:Optional
  FirstInterfaceIndex *int `json:"first-interface-index,omitempty"`

  // SecurityGroups is the list of security groups to attach to any ENI
@@ -90,16 +98,20 @@ type ENISpec struct {
  SecurityGroupTags map[string]string `json:"security-group-tags,omitempty"`

  // SubnetTags is the list of tags to use when evaluating what AWS
-	// subnets to use for ENI and IP allocation
+	// subnets to use for ENI and IP allocation.
  //
  // +kubebuilder:validation:Optional
  SubnetTags map[string]string `json:"subnet-tags,omitempty"`

-	// VpcID is the VPC ID to use when allocating ENIs
+	// VpcID is the VPC ID to use when allocating ENIs.
+	//
+	// +kubebuilder:validation:Optional
  VpcID string `json:"vpc-id,omitempty"`

  // AvailabilityZone is the availability zone to use when allocating
-	// ENIs
+	// ENIs.
+	//
+	// +kubebuilder:validation:Optional
  AvailabilityZone string `json:"availability-zone,omitempty"`

  // DeleteOnTermination defines that the ENI should be deleted when the
diff --git a/pkg/k8s/apis/cilium.io/v2/ccnp_types.go b/pkg/k8s/apis/cilium.io/v2/ccnp_types.go
index 0eac79083..8a95cb2ac 100644
--- a/pkg/k8s/apis/cilium.io/v2/ccnp_types.go
+++ b/pkg/k8s/apis/cilium.io/v2/ccnp_types.go
@@ -39,10 +39,8 @@ type CiliumClusterwideNetworkPolicy struct {
  // controller-gen code responsible:
  // https://github.com/kubernetes-sigs/controller-tools/blob/4a903ddb7005459a7baf4777c67244a74c91083d/pkg/crd/gen.go#L221

-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.TypeMeta `json:",inline"`
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.ObjectMeta `json:"metadata"`

diff --git a/pkg/k8s/apis/cilium.io/v2/client/bindata.go b/pkg/k8s/apis/cilium.io/v2/client/bindata.go
index 623b3e9de..8c360d48d 100644
--- a/pkg/k8s/apis/cilium.io/v2/client/bindata.go
+++ b/pkg/k8s/apis/cilium.io/v2/client/bindata.go
@@ -162,7 +162,7 @@ func examplesCrdsCiliumnetworkpoliciesYaml() (*asset, error) {
  return a, nil
}

-var _examplesCrdsCiliumnodesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x4b\x73\xdb\x38\x93\x77\xff\x0a\x54\xf6\x30\x17\x8b\x56\x92\x99\xcc\xac\x6f\x5e\xdb\x33\xab\x9a\x89\xa3\x8d\x3d\x49\xd5\xd6\x5e\x40\xa2\x25\x61\x0d\x02\xfc\x00\x50\x8e\xf2\xeb\xbf\xea\x06\xc1\x97\x48\x3d\x6c\x65\xbe\x47\x45\x07\x97\x08\x02\xe8\x46\xbf\xbb\xd1\xd6\xd9\x64\x32\x39\xe3\x85\xfc\x04\xd6\x49\xa3\x2f\x19\x2f\x24\x7c\xf1\xa0\xf1\xc9\x25\x8f\xbf\xb8\x44\x9a\x8b\xf5\xeb\x14\x3c\x7f\x7d\xf6\x28\xb5\xb8\x64\xd7\xa5\xf3\x26\xff\x08\xce\x94\x36\x83\x1b\x58\x48\x2d\xbd\x34\xfa\x2c\x07\xcf\x05\xf7\xfc\xf2\x8c\x31\xae\xb5\xf1\x1c\x87\x1d\x3e\x32\x96\x19\xed\xad\x51\x0a\xec\x64\x09\x3a\x79\x2c\x53\x48\x4b\xa9\x04\x58\x82\x10\xe1\xaf\xa7\xc9\xdb\xe4\xf5\x64\x9a\xbc\x99\xbe\x99\x4e\x7f\x7e\xfd\x6e\x3a\x7d\xfd\xcb\xdb\x9f\x26\x3f\xf2\xff\x9c\xbe\x15\x22\xfd\x79\x3a\xfd\xe9\x8c\xb1\xcc\x02\x6d\xfe\x20\x73\x70\x9e\xe7\xc5\x25\xd3\xa5\x52\x67\x8c\x69\x9e\xc3\x25\xcb\xa4\x92\x65\xae\x8d\x00\x97\x84\xef\x89\x34\x67\xae\x80\x0c\xb1\x59\x5a\x53\x16\x71\x12\xbe\x08\xcb\x2a\x4c\xab\x53\xd2\xcb\x3b\x23\x80\x06\x95\x74\xfe\xf7\xde\x8b\x3f\xa4\xf3\xf4\xb2\x50\xa5\xe5\xaa\x03\x95\xc6\xdd\xca\x58\x7f\xd7\xec\x3c\x61\x99\x8e\x5f\xc2\xd4\x30\x4d\xea\x65\xa9\xb8\x6d\x6f\x70\xc6\x98\xcb\x4c\x01\x97\xec\x5a\x95\xce\x83\x3d\x63\x6c\xcd\x95\x14\x74\xec\xb0\x9d\x29\x40\x5f\xcd\x67\x9f\xde\xde\x67\x2b\xc8\x79\x18\x64\x4c\x80\xcb\xac\x2c\x68\x5e\x0b\x5b\x66\xa1\xb0\xe0\x40\x7b\xc7\x38\x43\x18\x2c\xe7\x9a\x2f\x41\xb0\x74\x53\xcd\x4b\xd8\xcc\x13\xa7\xb8\xd4\x38\x0b\x09\x26\x17\x32\x23\xa0\xcc\x9b\xc8\x45\xb6\xe6\x56\x9a\xd2\x85\x6d\xe2\x2c\x7c\xbb\x90\xcb\xd2\x86\xe9\x1c\xc7\x11\x98\x16\xb8\x95\xe7\xbe\x74\xcc\x41\x16\xf7\xaa\xf1\x61\x7e\x05\xf1\xbd\x59\xd0\x13\xee\x9b\x54\xe7\x29\xac\x29\xc0\x7a\x19\xa9\x88\x9f\x96\xc8\xd6\x63\xbd\x93\xff\x80\xa4\x09\x73\x98\x40\x21\x05\x47\x5b\x57\xa2\x06\x82\x39\x22\x5b\x00\x29\x5d\x83\x4f\x40\xdf\x2c\x18\xd7\xcc\xa4\xff\x0f\x99\x4f\xd8\x3d\x58\x5c\x88\x2c\x2d\x95\xc0\x93\xae\xc1\x7a\x66\x21\x33\x4b\x2d\xbf\xd6\xbb\x39\x3c\x19\x82\x51\xdc\x83\xf3\x4c\x6a\x0f\x56\x73\xa4\x98\x2a\xe1\x9c\x88\x91\xf3\x0d\xb3\x80\xfb\xb2\x52\xb7\x76\xa0\x29\x2e\x61\xef\x8d\x05\x26\xf5\xc2\x5c\xb2\x95\xf7\x85\xbb\xbc\xb8\x58\x4a\x1f\x95\x31\x33\x79\x5e\x6a\xe9\x37\x17\xc4\x0c\x99\x96\xde\x58\x77\x21\x60\x0d\xea\xc2\xc9\xe5\x84\xdb\x6c\x25\x3d\x64\xbe\xb4\x70\xc1\x0b\x39\x21\x64\x35\xe9\x62\x92\x8b\xff\xb0\x95\xe6\xba\x1f\x5a\xa4\xf3\x1b\x94\x35\xe7\xad\xd4\xcb\x7a\x98\x34\x61\x94\xbe\xa8\x0e\x4c\x92\x98\xd0\xb2\x80\x7f\x43\x46\x1c\x42\x4a\x7c\xbc\xbd\x7f\x60\x11\x68\x20\x75\xa0\x6a\x4b\x22\x1b\x02\x23\x71\xa4\x5e\x80\x0d\x33\x17\xd6\xe4\xb4\x0b\x68\x51\x18\x59\x09\x4b\xa6\x24\xca\x8d\x2b\xd3\x5c\x7a\xe4\xdc\xdf\x4a\x70\x1e\x69\x9f\xb0\x6b\x32\x3d\x2c\x05\x56\x16\x82\x7b\x10\x09\x9b\x69\x76\xcd\x73\x50\xd7\xdc\xc1\x37\x27\x2f\x52\xd2\x4d\x90\x74\xfb\x09\xdc\xb6\x98\xdd\x89\x81\x42\xf5\x70\xb4\x5c\x83\x9c\xb8\x2f\x20\xeb\x88\xb8\x00\x27\x2d\x8a\x64\x5b\x7d\x2f\xba\xda\x39\xa0\x68\x63\xca\x46\x0a\x27\x84\x05\xe7\xfa\xc3\x3d\x4c\xae\xe2\x2c\x94\x0b\xd2\x02\xe9\x3c\x69\x92\x52\xc1\x56\xd4\xfb\x24\xbd\x7d\xa4\x87\x7c\x6b\xf3\xde\xf6\x68\xc6\x2a\x10\x41\xf0\xda\x5b\xf6\x37\x1c\x3f\x4b\x05\xb0\x18\x1a\xed\x41\x9c\xcd\x09\x90\xc6\x2f\x78\x0c\xa6\xa3\x43\xe8\x7f\x06\xf9\xdb\x7b\xbd\x1f\xde\xc3\xa6\x80\x48\x3b\x5c\xd2\x66\x53\x3c\xe8\xf1\xe0\x07\x45\xaa\xfd\x8a\x5b\xcb\x37\x5d\x7e\x7f\x2d\xed\x16\xc2\x5d\x5e\xe3\x8c\x88\x6b\x78\x98\xcd\xaf\xde\x8f\x78\x83\x3e\x77\x76\xf1\x86\x6c\xe6\x82\x67\x30\x21\x67\x3e\x70\xde\x2e\x8f\xe2\x74\xf4\xb4\x11\x21\x5c\x19\x89\x57\xef\x17\x6c\x07\x79\xba\x09\x82\xe7\xde\x58\xf6\x24\x95\x62\xa5\x03\x34\xdc\x5c\x29\x93\x71\x0f\x24\xaf\x38\x79\x36\x77\xcc\xe8\x31\x7e\x0e\xd3\x7b\x94\xda\xa0\x33\xbb\x29\x7c\xcf\x69\x6d\x9d\xe7\xb6\x9e\x16\x0f\xd3\x2c\x64\x07\x29\xf1\x3e\x02\x3f\xc2\x66\x2f\x55\x7f\x87\x4d\x04\x2f\xb5\x80\x2f\xd1\xaf\x3d\xc2\x06\xbf\x22\xc1\x16\xc6\xb6\x51\x33\x96\x4d\x99\x5c\xb4\x87\xa4\x63\x42\x3a\x9e\x2a\x10\xdb\xea\x19\x29\x85\xec\x59\x52\x80\x73\x20\x15\xe5\x6e\xf2\xdd\xcd\x6a\xa9\xfc\x7c\x4f\x8f\x2f\x17\x49\xbe\xe6\x52\xf1\x54\x2a\xe9\x37\x93\xaf\x46\xef\x97\xca\xab\xd6\x8a\xff\x35\xba\x16\xcc\xf6\x4e\x0c\x77\x8a\xd4\x7c\x5a\x81\x8e\x02\x88\xae\xf3\xf6\x6e\x36\xa4\xea\x3b\x15\x5d\x80\x02\x0f\x13\xa3\x27\x1e\x6c\x2e\x35\x1f\x12\xb6\x2d\x54\x6f\x68\xd5\x07\xfd\xd0\xac\x69\xb9\x13\x1e\x5c\x2e\xd1\x31\x04\x3f\x29\x54\x80\x44\x40\x9a\x8e\xe5\x9c\xc9\x24\xba\x5b\x26\xb5\xf3\x5c\x67\xe1\xc4\xd5\x96\xe4\x85\x83\xb0\x16\xdc\xf2\x1c\x3c\x58\x7c\x8f\x9e\xda\x81\xaf\xbc\xd6\x82\x97\x0a\x3d\xf7\x8a\xaf\xa5\xa1\xf7\xde\x54\xa0\x6a\x1c\x50\xaa\x22\x80\xd6\x21\xc7\xc5\x2b\x35\x46\x01\xdf\xd6\xe1\x85\xb4\xce\x4f\x1a\x5b\x43\x52\xbe\x97\x56\xbf\xe2\xaa\xda\xe2\xcc\x48\x33\x3a\x6a\x52\xa9\x24\xed\x4e\x08\xb7\x94\x65\x36\xaf\x19\x6c\xf4\x39\x83\x64\x99\xa0\xc2\xd4\x06\x7e\xc5\x1d\x03\xbf\x9a\x9e\xe3\xdf\xd7\xf4\xf7\x0d\x45\x8c\x23\x50\x89\x72\x86\xbd\x3e\xc7\x2d\x34\x33\x5a\x6d\x68\x25\xad\xa1\xc5\x64\xdc\x30\x14\x72\x20\x06\x51\xf0\xab\x69\x3d\x49\x2e\xb5\xb1\xd5\xbc\xb9\x11\x9d\xa9\x43\xf4\xcd\xa5\x96\x79\x99\x5f\xb2\xe9\x91\xba\xcd\x6a\x16\x4e\xa4\xd8\x4b\xf2\x57\xb3\x6a\xf2\xec\xa6\xad\xd8\xf5\xa8\xe8\x98\x41\xf6\x80\x66\xbb\xb3\x82\x0e\x4f\x09\x87\xb7\x12\xd6\x61\x79\x0c\xbd\xe8\xb4\xcd\xea\xff\xd3\xec\xc3\x7f\xdd\x7f\xf8\xe3\xf6\xe1\xf6\x92\x3d\x50\x04\x2a\x41\x51\x9c\x6b\x52\x67\x50\x14\xcf\x59\xa1\x80\x3b\x22\x2a\xc5\x5e\x49\x03\xee\xd5\xb1\x1a\x5b\x13\x62\x2c\x40\xe8\xb9\xba\x30\xbb\x1d\x26\x90\x91\xbb\x7e\xd3\xd2\x8a\x4d\x01\x95\x70\xbd\xca\x7f\x4a\x14\xb7\x4b\x38\x1a\xaf\x9c\x7f\x99\xf0\xd4\xac\x61\xf2\xc4\x51\xcd\xb8\x7d\xdc\xcf\xa8\xf7\xfc\xcb\x15\xae\xf9\x1c\x97\x44\x1c\x73\xfe\x05\x25\x85\xe9\x32\x4f\xc1\x52\x24\x55\x47\x8a\x6d\xb7\x9b\xc2\xc6\x68\x11\x0c\x4a\x3d\x41\x03\x88\xc8\x40\x9e\xad\xe8\xed\xdc\xc2\x55\x5c\x54\x23\x98\xb0\xdf\x0c\x5a\x4e\xc2\x9b\xa6\xd5\xaf\x58\xc6\x35\x5b\x81\x2a\x98\x05\x51\x56\x91\x40\x83\xcd\xd5\x7c\xc6\x32\xae\x54\x17\x9b\xd9\xdc\x55\x74\x0c\xb6\x99\x69\x78\x8a\xee\x25\x4e\x12\xe7\x8c\x63\xd2\xa2\x37\x98\xda\x1a\x2d\xb8\xdd\x50\xd4\xc0\x1d\x2b\x8c\x73\x32\x55\xc0\xb8\x85\x66\x41\xc2\xfe\x90\xb9\xac\xb3\x23\x9e\x9b\x52\xfb\x2d\xfc\x9e\xb8\xf3\x14\xc0\xcc\xe6\xee\xb9\x52\x39\xbf\x7a\x9f\x6c\xb1\x64\x48\x12\x5e\xa0\xc8\xb9\xd4\x93\x78\xb4\x03\x04\x44\xea\x9a\x6d\x51\x34\x02\xec\x16\x33\x90\x7a\xe4\x76\xf2\xd2\x51\x1e\x57\x93\xae\x71\x37\x64\x2e\x89\x0c\x68\x66\x53\x63\xbc\xf3\x96\x17\x05\xf9\x19\xdf\x49\x86\x22\x80\x14\x89\xe3\x4c\xf6\x08\xbe\x27\x80\x1d\x58\xc1\x3d\x2b\x48\xd8\xd5\x02\x9d\x14\xc9\x5c\x60\x96\x74\x8d\x40\x9d\x6f\x89\x21\xda\xdc\x6d\x05\x50\x66\x29\x33\xe6\xf9\x23\x38\x66\xd6\x98\xd5\x86\x22\x8a\xd4\x25\xb4\xbd\xfd\x4b\xd9\xdc\x10\xf6\xc4\x0c\x2e\x2c\x1c\xc1\xe0\x36\x41\xda\x4c\x68\x73\x77\x2f\xe9\xc9\x24\x37\xae\x87\x49\x5d\xc5\xe2\x57\xef\x31\x92\xdb\xe2\x70\x5a\x2e\x16\x7d\xab\xd2\x6c\x26\xf3\x1c\x04\x46\x26\x6a\xc3\x9e\xa4\x5f\x99\xd2\x53\xc1\x40\x52\xcd\xa2\x9f\x0d\x78\xc3\x96\xe0\x99\xd4\x6b\xa3\xd6\x28\x4d\xcf\xe7\x49\x8b\x16\x27\xe6\x89\x83\xac\xb4\x18\x89\x52\x21\x73\xe2\xf9\x72\x30\xc3\xe5\x42\x50\x61\x96\xab\xf9\xce\x4c\x78\x6f\xf2\xda\xad\x36\x54\xc0\x7f\x43\xd8\x0f\x7c\xb9\x95\xeb\x23\x3a\x9d\xa0\x16\xd6\x5c\xc9\x20\xe6\x4f\xc8\x70\xf4\x58\xf1\x08\xa1\x16\xeb\xda\x51\x52\x15\xe9\x8d\x47\x74\x83\x89\x6c\x9f\x2a\x83\x27\x1d\x3f\xc8\xd6\x29\x06\x10\xe4\xde\x93\xff\x31\x0c\xcd\x3d\xc5\x76\x78\x1c\xe9\x42\x39\x1a\x44\x28\x75\xd2\xac\xe0\xb0\x42\x58\x18\xfc\xf2\xd0\x79\x46\x8a\x1e\x07\xb0\x64\x2c\x6f\x27\x42\x94\xa9\x06\xff\x57\x8b\x05\x01\x3d\x58\x1e\xca\xbe\x3c\xd0\xf2\x8e\x1c\x20\x81\x91\xa0\x9d\x38\xf4\x58\xa1\x58\x17\xd9\x21\x31\xe6\xa7\x22\x6b\xa2\xcb\x4f\xf3\x6b\x36\xbb\x39\x5d\x5e\x36\x8a\xe0\x0a\xb8\xf2\xab\x9d\xd9\xec\x7f\xd3\x94\xaa\xe8\x85\xe0\x63\x1a\xd9\x1a\xd1\x0b\x63\xf3\x60\x2a\x91\x6e\x61\x57\xf4\x32\x1a\x32\x2f\xd7\x28\xc4\xd9\x0a\xb2\x47\xa9\x97\x47\x95\x61\x8a\xf5\x8f\xfb\x23\xd2\xf9\xfa\xc7\x88\x13\x7d\xaf\x10\x8b\x31\x39\x8d\x55\x18\xc5\x12\xee\xb8\x66\x8f\x05\xc9\xc5\xfa\xdd\x21\x98\xbc\x6b\x61\xf2\xee\x1b\x60\x32\xca\xc8\x1d\xe9\xcc\x60\xfc\xde\xc8\x9a\x14\xa0\xbd\x5c\xc8\xe0\xbf\xda\x59\x8c\x74\xa1\x7c\x82\xbe\x0d\xb4\x6f\x2a\xe1\x14\xfb\x50\x7d\xeb\x69\x25\xb3\x15\xed\xb4\x29\x24\xc6\xaf\x1b\x9a\xf0\xeb\xff\xdc\xdc\xed\xcc\x89\x9a\xe9\x16\x16\x60\xeb\x3b\x8b\x16\x32\x94\x33\xa5\x9b\xaa\xda\x6e\x4a\x81\xa2\xb2\x96\x02\xf1\xb4\xcc\x99\x1c\x98\xf1\x2b\xb0\x2c\x07\xae\x89\xc6\x71\xf1\x70\xbe\x38\x4a\x55\x59\xf0\x7c\x37\xcd\xe6\x57\xef\x7b\x52\x5f\x5d\x5c\xe5\x74\x07\xd0\xae\x71\x57\x74\x8b\x97\x4c\x18\x54\xa7\xc0\x0a\x53\x94\x8a\xec\x73\xba\x61\x1c\x8f\x46\x87\x90\x3e\x4e\xe0\xa5\x37\xa8\x40\x81\x26\xdd\xe9\x3a\x20\x10\x03\x84\x63\x14\xe8\x39\x39\xd4\xf7\x14\xea\xdb\xa4\x50\x27\xce\x7a\x90\xb3\x87\x06\xc5\xc8\xd2\x7e\xd2\xb3\xc5\xcc\x3a\xe9\x89\x22\x59\xe7\x3c\x95\x6e\x06\x45\xfe\x1c\x13\xa0\xac\xb4\x64\x15\xaa\xb3\x87\x2b\x96\x6a\x05\xee\x45\x35\x1d\x5e\x14\xd6\x04\x7e\x4b\x17\x6f\x20\x69\xb5\xd1\x0e\x75\x39\x5e\x3a\x86\x92\x4f\x5b\x20\x70\xb9\x00\x8c\x6b\x1c\x30\x61\x9e\xe8\xc6\x76\x8a\xa1\xb8\xb1\x22\xa4\x31\xda\x78\x0c\x76\x20\x2f\x7c\x87\xe7\xb9\xb1\xd0\x8d\xf1\x63\x39\x71\xb0\x08\xfc\x57\x25\x9f\xdf\x73\xcf\x5d\xb9\xe7\x89\x93\x46\x23\xae\x67\x37\x1f\xf7\xc7\xe0\xf3\x6a\x62\x3f\x66\x0c\x83\x4d\x12\xd7\x52\x82\x5e\x76\x58\xe9\x44\xb8\xa2\xab\x8a\x7d\xe7\x95\xc3\xaf\x2b\x9b\x5c\x54\xe6\xef\x9e\xba\x0c\x42\x7e\xf6\xa7\x03\xf1\x97\xc5\xe4\x85\x31\xea\x65\xc1\x78\xf7\x76\xa1\x3e\x7f\xfb\x86\xb2\x8e\x07\xc6\x52\xe9\x73\x46\x8f\x16\xb8\xd8\x50\xb5\x39\x85\x26\xb8\x1d\xa4\xc6\xbe\x5b\x54\xfc\x98\x27\x0d\x76\xec\x65\xbf\x42\xf0\x01\x27\x47\x76\xd3\xca\x26\x40\x4b\x7a\x09\xb6\xc3\x4c\x3c\xbe\x1c\xc0\x97\xf4\x2d\xf2\xb8\x2a\x86\xd3\x15\x83\x11\xd5\x05\xa0\x65\x5c\x87\x38\xa5\x15\xdb\x6c\x75\x28\x94\x8e\x2f\xa1\x41\x03\x73\xfe\x87\x1a\xbb\x1a\x1b\x05\x0b\xcf\x52\xc5\xf5\x63\xa0\xaa\x66\xa0\xbd\xdd\xa0\x4d\x6c\x25\xfd\xc6\x28\x52\xc7\x85\x54\x0a\x04\x33\xa5\x47\x3f\x56\x6d\x1c\x8b\xd1\x94\x27\x2a\x67\xc6\x05\x33\x19\x2a\x19\xb4\xc5\x6c\x54\x0a\xf1\x13\xbb\x2d\x0e\x64\x4a\xec\xe5\x8a\x34\xc7\xe3\xa5\xc6\xaf\x5a\x72\x14\x30\x6e\x79\x98\x73\x8c\x9f\x5a\x2d\x45\x94\xc9\xb5\xba\x3c\xe2\x79\x5b\x17\x43\x4f\xd2\xaf\xe2\xad\x87\x66\x99\xc9\xd3\x78\xdb\x84\x6f\xe2\x6d\xdd\x79\x65\xed\x90\xad\x14\x9e\x46\xae\xce\x6e\x22\x8b\x6e\xef\x66\xcf\xa7\xce\xce\x74\x71\xcb\x3c\x19\xd5\x37\x4d\x14\x99\x9c\xc4\x30\x59\xc8\x39\x3a\x54\x1d\x4e\x4c\x00\xd2\xd2\x3f\xcb\x6a\xed\x3c\xd5\x51\x35\xbc\x7f\xbb\x12\xde\x29\x5d\xdb\x08\x99\x87\x7b\x76\x88\x6b\xe3\x5d\x3b\xa1\xe1\xad\x4d\x05\x0b\x5c\x85\x5e\xb2\x1d\x8d\x3b\xa8\x89\xe3\xcd\x72\x6c\x57\x0f\xcf\x73\x7a\x3a\xea\xbb\xf3\xdd\x30\x77\xc1\x65\xed\x9e\x8e\xfd\x31\x41\x7d\xcf\xb9\x15\x15\x34\x9b\x04\xa5\x81\xb1\x76\x9c\x1d\x3e\x7c\xfb\xbc\x35\xbc\x4e\x87\xa4\x8e\x3d\x2d\xf1\xed\x33\x9d\xe3\x68\xe3\xd4\x18\x4a\xbb\x5a\xa8\x42\x56\xd4\x31\xa8\xdd\x0e\x97\x73\x26\x75\xa6\x4a\x41\x39\x9c\x52\xad\x84\xaa\xc6\x63\x14\x8d\x1d\x44\x1b\x23\x5d\xbb\x19\x4b\xb7\xec\x02\x22\x29\x97\x3a\x58\xaf\x48\xca\xdd\x94\x3c\x94\x9e\x15\xae\x23\xcd\x5b\x23\xc8\x06\x0b\x4c\x94\x2a\xfa\x75\xa1\x5d\x5d\x55\xcd\xe7\x00\xa7\x1b\x3e\xa8\x26\x3b\xfc\xee\x00\x72\x68\x08\x6a\xa5\xa3\x2a\x8b\x93\x46\x23\x07\x69\xaf\x6f\x85\x27\x15\x5c\x8f\x43\x94\x96\x44\x4c\xc3\x06\x9d\xb2\x4c\x0a\xca\x68\x2a\xf6\x9e\x06\xcb\x3d\xae\xba\x3d\x69\x38\xea\x0e\x9f\xe1\xfa\xef\xc0\x01\x87\xca\x72\x2f\x09\xc3\x72\x9e\x1d\x08\xf9\xfd\xd5\x75\x53\x1b\xc8\xf6\xf2\xfa\x00\xd8\x63\xad\x73\x03\xc0\xf7\xf6\xcd\xbd\x04\x8f\xee\xad\xcc\x81\x18\x75\xae\x66\x6a\x81\xeb\xdc\xc8\xec\xb6\x83\x2f\xc2\x78\xb7\x06\x1f\xa3\xbb\xdf\x2c\x4a\x1d\x17\xfa\x6f\xd2\x37\xf7\x32\xdf\x0f\x5a\xbe\xf0\x22\xaa\x9b\x42\x22\x6a\x3d\x57\x8d\x08\x2b\xee\xbc\xcc\xd8\x1d\xf8\x27\x63\x1f\x1b\xc7\x8d\xe9\x1c\xf5\x7c\x0b\xf0\x5c\x2a\xd7\xb4\x7d\x0b\x93\xb9\x84\x3f\xb9\x84\xe7\xfc\xab\xd1\x49\x66\xf2\x8b\xab\xcf\xf7\xb7\xd7\x6f\x2e\x42\xfb\xfe\xc5\x9f\x0e\xec\x6f\xa5\x14\x70\x51\x3a\xa9\x97\x13\xd0\x32\x59\xf9\x5c\x0d\x67\x67\xff\x24\xd1\x00\x25\x51\xdf\x30\x0e\x38\xc8\x7a\xef\x37\xcb\x07\xf5\x54\x0e\xd1\xe4\xe0\xce\xca\x53\xa4\x8b\x5d\xe0\x87\x61\x78\xd3\x3c\x44\xe4\x5a\xef\xab\x8a\xc2\x69\x90\x7b\x86\x6f\x43\xf5\x99\xdd\xbc\x08\xe8\xa1\x76\xbc\x89\xbb\x0a\x2b\xf3\x50\xd7\x3f\xd1\xc1\x5f\xea\x5b\x4f\x84\x46\xc8\x8a\x0f\x75\xb4\x21\x85\xae\xfb\x45\xa3\x81\xa2\xce\x51\x2a\xa8\x50\x75\x68\xa8\x38\x32\xd0\x01\xba\x07\xed\xb1\xda\x6c\xf8\x1c\xd0\x2c\x31\x70\x80\x5e\xcb\x04\xb7\x30\xe0\x99\x47\x8d\xd2\x3f\xdc\xe2\xec\x8b\x79\x0f\x8b\x76\xe3\xf5\x55\xf7\x90\xa3\x9b\x1e\x96\xd2\x64\x52\xec\x90\xa2\x2d\xe4\xae\x67\x37\x1f\x23\x6a\xf4\xdd\x72\xbd\x84\x41\xc2\x07\xcc\x77\x6e\x7d\x60\x38\xbe\xcb\xd6\x6c\x61\xd8\xd8\x9b\xa6\x6e\x77\x2a\x54\x0e\xc8\x0b\xd6\xc5\xa1\xe6\xe1\xd3\xfc\xba\xdd\xf8\xd1\xee\xa6\xf0\xa6\x2a\xa9\xb7\xd9\xde\xb4\xf7\x9c\x80\xe5\x7b\xd2\xdc\x2d\x9e\x0f\x5e\x94\x04\xe6\x0f\xab\xdd\xa7\xf9\xf5\xee\x44\x7a\x9f\xea\xb1\x63\x92\xca\xfd\x2a\xc8\x8e\x95\xa3\x8b\x2d\x49\xe2\x7b\x0f\x75\x20\xbe\x95\x4f\x9a\x1c\xa9\x7b\xf3\xb0\xac\xad\x82\xd1\xbb\xd1\x58\x25\xec\x27\x41\x72\xaf\xa4\x1f\x53\xcd\xbe\xbd\x9b\x6d\xc9\x0f\x8d\xed\x2e\xa6\xed\xfd\xef\xb1\xa1\x86\x98\x63\xba\x3a\xc2\xbf\x8d\xbd\x28\xc5\x88\xc5\xdf\xc9\x76\xd1\x75\x10\xfc\x87\x58\x2c\xae\x50\xa8\x9f\xb7\xd1\x18\xd8\x6a\x9f\x7e\x83\xb5\x66\x54\xa2\xba\x2c\xc1\x99\xf5\xbf\x79\xd1\x43\x0e\x8e\xae\xa3\x1c\x78\x96\x6e\xfa\xd5\xed\xa1\x6a\x36\x3b\xf4\x6a\x72\x44\x4c\x30\xe8\xf8\x7e\x37\xf9\xfd\x6e\xf2\xfb\xdd\xe4\xbf\xd2\xdd\x24\x72\x82\xcc\xb8\xab\x8b\x01\xc8\x50\xb3\xe8\x73\x3c\x68\xde\x8a\xaf\xa1\x27\xa2\x81\x70\xf4\xcf\xf0\xc8\xfa\x23\x1b\xae\x0f\xbf\x0a\x0b\x57\x75\x8d\x8d\x99\xd4\xff\x7c\x55\x0f\xb8\x02\xb2\xe6\x81\xe4\xed\x6c\x70\xbf\xe6\x87\x42\xde\x34\x4f\xa4\xfd\x93\xea\xa7\x3f\xe8\x05\x26\x38\x76\x0d\xe2\x92\x79\x5b\x06\x13\xee\xbc\xb1\x7c\x09\xd5\x48\xe3\x27\x78\x96\x41\xe1\x41\xdc\xf5\x7f\x01\xe4\x55\x10\xf3\xf8\xe3\x1e\xf4\x98\x19\x1d\x6c\xa2\xab\x7f\x70\x04\xf7\x05\xf1\x29\x62\x12\x86\xff\x1e\x00\x00\xff\xff\x9b\xc2\xf8\x2e\x58\x45\x00\x00")
+var _examplesCrdsCiliumnodesYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x4b\x73\xdb\x38\x93\x77\xff\x0a\x54\xf6\x30\x17\x8b\x56\x92\x99\xcc\xac\x6f\x5e\xdb\x33\xab\x9a\x89\xa3\x8d\x3d\x49\xd5\xd6\x5e\x40\xa2\x25\x61\x0d\x02\xfc\x00\x50\x8e\xf2\xeb\xbf\xea\x06\xc1\x97\x48\x3d\x6c\x65\xbe\x47\x45\x07\x97\x08\x02\xe8\x46\xbf\xbb\xd1\xd6\xd9\x64\x32\x39\xe3\x85\xfc\x04\xd6\x49\xa3\x2f\x19\x2f\x24\x7c\xf1\xa0\xf1\xc9\x25\x8f\xbf\xb8\x44\x9a\x8b\xf5\xeb\x14\x3c\x7f\x7d\xf6\x28\xb5\xb8\x64\xd7\xa5\xf3\x26\xff\x08\xce\x94\x36\x83\x1b\x58\x48\x2d\xbd\x34\xfa\x2c\x07\xcf\x05\xf7\xfc\xf2\x8c\x31\xae\xb5\xf1\x1c\x87\x1d\x3e\x32\x96\x19\xed\xad\x51\x0a\xec\x64\x09\x3a\x79\x2c\x53\x48\x4b\xa9\x04\x58\x82\x10\xe1\xaf\xa7\xc9\xdb\xe4\xf5\x64\x9a\xbc\x99\xbe\x99\x4e\x7f\x7e\xfd\x6e\x3a\x7d\xfd\xcb\xdb\x9f\x26\x3f\xf2\xff\x9c\xbe\x15\x22\xfd\x79\x3a\xfd\xe9\x8c\xb1\xcc\x02\x6d\xfe\x20\x73\x70\x9e\xe7\xc5\x25\xd3\xa5\x52\x67\x8c\x69\x9e\xc3\x25\xcb\xa4\x92\x65\xae\x8d\x00\x97\x84\xef\x89\x34\x67\xae\x80\x0c\xb1\x59\x5a\x53\x16\x71\x12\xbe\x08\xcb\x2a\x4c\xab\x53\xd2\xcb\x3b\x23\x80\x06\x95\x74\xfe\xf7\xde\x8b\x3f\xa4\xf3\xf4\xb2\x50\xa5\xe5\xaa\x03\x95\xc6\xdd\xca\x58\x7f\xd7\xec\x3c\x61\x99\x8e\x5f\xc2\xd4\x30\x4d\xea\x65\xa9\xb8\x6d\x6f\x70\xc6\x98\xcb\x4c\x01\x97\xec\x5a\x95\xce\x83\x3d\x63\x6c\xcd\x95\x14\x74\xec\xb0\x9d\x29\x40\x5f\xcd\x67\x9f\xde\xde\x67\x2b\xc8\x79\x18\x64\x4c\x80\xcb\xac\x2c\x68\x5e\x0b\x5b\x66\xa1\xb0\xe0\x40\x7b\xc7\x38\x43\x18\x2c\xe7\x9a\x2f\x41\xb0\x74\x53\xcd\x4b\xd8\xcc\x13\xa7\xb8\xd4\x38\x0b\x09\x26\x17\x32\x23\xa0\xcc\x9b\xc8\x45\xb6\xe6\x56\x9a\xd2\x85\x6d\xe2\x2c\x7c\xbb\x90\xcb\xd2\x86\xe9\x1c\xc7\x11\x98\x16\xb8\x95\xe7\xbe\x74\xcc\x41\x16\xf7\xaa\xf1\x61\x7e\x05\xf1\xbd\x59\xd0\x13\xee\x9b\x54\xe7\x29\xac\x29\xc0\x7a\x19\xa9\x88\x9f\x96\xc8\xd6\x63\xbd\x93\xff\x80\xa4\x09\x73\x98\x40\x21\x05\x47\x5b\x57\xa2\x06\x82\x39\x22\x5b\x00\x29\x5d\x83\x4f\x40\xdf\x2c\x18\xd7\xcc\xa4\xff\x0f\x99\x4f\xd8\x3d\x58\x5c\x88\x2c\x2d\x95\xc0\x93\xae\xc1\x7a\x66\x21\x33\x4b\x2d\xbf\xd6\xbb\x39\x3c\x19\x82\x51\xdc\x83\xf3\x4c\x6a\x0f\x56\x73\xa4\x98\x2a\xe1\x9c\x88\x91\xf3\x0d\xb3\x80\xfb\xb2\x52\xb7\x76\xa0\x29\x2e\x61\xef\x8d\x05\x26\xf5\xc2\x5c\xb2\x95\xf7\x85\xbb\xbc\xb8\x58\x4a\x1f\x95\x31\x33\x79\x5e\x6a\xe9\x37\x17\xc4\x0c\x99\x96\xde\x58\x77\x21\x60\x0d\xea\xc2\xc9\xe5\x84\xdb\x6c\x25\x3d\x64\xbe\xb4\x70\xc1\x0b\x39\x21\x64\x35\xe9\x62\x92\x8b\xff\xb0\x95\xe6\xba\x1f\x5a\xa4\xf3\x1b\x94\x35\xe7\xad\xd4\xcb\x7a\x98\x34\x61\x94\xbe\xa8\x0e\x4c\x92\x98\xd0\xb2\x80\x7f\x43\x46\x1c\x42\x4a\x7c\xbc\xbd\x7f\x60\x11\x68\x20\x75\xa0\x6a\x4b\x22\x1b\x02\x23\x71\xa4\x5e\x80\x0d\x33\x17\xd6\xe4\xb4\x0b\x68\x51\x18\x59\x09\x4b\xa6\x24\xca\x8d\x2b\xd3\x5c\x7a\xe4\xdc\xdf\x4a\x70\x1e\x69\x9f\xb0\x6b\x32\x3d\x2c\x05\x56\x16\x82\x7b\x10\x09\x9b\x69\x76\xcd\x73\x50\xd7\xdc\xc1\x37\x27\x2f\x52\xd2\x4d\x90\x74\xfb\x09\xdc\xb6\x98\xdd\x89\x81\x42\xf5\x70\xb4\x5c\x83\x9c\xb8\x2f\x20\xeb\x88\xb8\x00\x27\x2d\x8a\x64\x5b\x7d\x2f\xba\xda\x39\xa0\x68\x63\xca\x46\x0a\x27\x84\x05\xe7\xfa\xc3\x3d\x4c\xae\xe2\x2c\x94\x0b\xd2\x02\xe9\x3c\x69\x92\x52\xc1\x56\xd4\xfb\x24\xbd\x7d\xa4\x87\x7c\x6b\xf3\xde\xf6\x68\xc6\x2a\x10\x41\xf0\xda\x5b\xf6\x37\x1c\x3f\x4b\x05\xb0\x18\x1a\xed\x41\x9c\xcd\x09\x90\xc6\x2f\x78\x0c\xa6\xa3\x43\xe8\x7f\x06\xf9\xdb\x7b\xbd\x1f\xde\xc3\xa6\x80\x48\x3b\x5c\xd2\x66\x53\x3c\xe8\xf1\xe0\x07\x45\xaa\xfd\x8a\x5b\xcb\x37\x5d\x7e\x7f\x2d\xed\x16\xc2\x5d\x5e\xe3\x8c\x88\x6b\x78\x98\xcd\xaf\xde\x8f\x78\x83\x3e\x77\x76\xf1\x86\x6c\xe6\x82\x67\x30\x21\x67\x3e\x70\xde\x2e\x8f\xe2\x74\xf4\xb4\x11\x21\x5c\x19\x89\x57\xef\x17\x6c\x07\x79\xba\x09\x82\xe7\xde\x58\xf6\x24\x95\x62\xa5\x03\x34\xdc\x5c\x29\x93\x71\x0f\x24\xaf\x38\x79\x36\x77\xcc\xe8\x31\x7e\x0e\xd3\x7b\x94\xda\xa0\x33\xbb\x29\x7c\xcf\x69\x6d\x9d\xe7\xb6\x9e\x16\x0f\xd3\x2c\x64\x07\x29\xf1\x3e\x02\x3f\xc2\x66\x2f\x55\x7f\x87\x4d\x04\x2f\xb5\x80\x2f\xd1\xaf\x3d\xc2\x06\xbf\x22\xc1\x16\xc6\xb6\x51\x33\x96\x4d\x99\x5c\xb4\x87\xa4\x63\x42\x3a\x9e\x2a\x10\xdb\xea\x19\x29\x85\xec\x59\x52\x80\x73\x20\x15\xe5\x6e\xf2\xdd\xcd\x6a\xa9\xfc\x7c\x4f\x8f\x2f\x17\x49\xbe\xe6\x52\xf1\x54\x2a\xe9\x37\x93\xaf\x46\xef\x97\xca\xab\xd6\x8a\xff\x35\xba\x16\xcc\xf6\x4e\x0c\x77\x8a\xd4\x7c\x5a\x81\x8e\x02\x88\xae\xf3\xf6\x6e\x36\x60\xd3\xf6\x68\xba\x00\x05\x1e\x26\x46\x4f\x3c\xd8\x5c\x6a\x3e\x24\x6d\x5b\xb8\xde\xd0\xaa\x0f\xfa\xa1\x59\xd3\xf2\x27\x3c\xf8\x5c\x22\x64\x88\x7e\x52\xa8\x00\x89\x80\x35\x9d\xcb\x39\x93\x49\xf4\xb7\x4c\x6a\xe7\xb9\xce\xc2\x91\xab\x2d\xc9\x0d\x07\x69\x2d\xb8\xe5\x39\x78\xb0\xf8\x1e\x5d\xb5\x03\x5f\xb9\xad\x05\x2f\x15\xba\xee\x15\x5f\x4b\x43\xef\xbd\xa9\x40\xd5\x38\xa0\x58\x45\x00\xad\x43\x8e\x93\x2a\x35\x46\x01\xdf\x56\xe2\x85\xb4\xce\x4f\x1a\x63\x43\x62\xbe\x97\x56\xbf\xe2\xaa\xda\xe4\xcc\x48\x35\x3a\x7a\x52\xe9\x24\xed\x4e\x08\xb7\xb4\x65\x36\xaf\x39\x6c\xf4\x39\x83\x64\x99\xa0\xc6\xd4\x16\x7e\xc5\x1d\x03\xbf\x9a\x9e\xe3\xdf\xd7\xf4\xf7\x0d\x85\x8c\x23\x50\x89\x72\x86\xbd\x3e\xc7\x2d\x34\x33\x5a\x6d\x68\x25\xad\xa1\xc5\x64\xdd\x30\x16\x72\x20\x06\x51\xf0\xab\x69\x3d\x49\x2e\xb5\xb1\xd5\xbc\xb9\x11\x9d\xa9\x43\xf4\xcd\xa5\x96\x79\x99\x5f\xb2\xe9\x91\xca\xcd\x6a\x16\x4e\xa4\xd8\x4b\xf2\x57\xb3\x6a\xf2\xec\xa6\xad\xd9\xf5\xa8\xe8\xd8\x41\xf6\x80\x76\xbb\xb3\x82\x0e\x4f\x19\x87\xb7\x12\xd6\x61\x79\x8c\xbd\xe8\xb4\xcd\xea\xff\xd3\xec\xc3\x7f\xdd\x7f\xf8\xe3\xf6\xe1\xf6\x92\x3d\x50\x08\x2a\x41\x51\xa0\x6b\x52\x67\x50\x14\xcf\x59\xa1\x80\x3b\x22\x2a\x05\x5f\x49\x03\xee\xd5\xb1\x1a\x5b\x13\x62\x2c\x42\xe8\xf9\xba\x30\xbb\x1d\x27\x90\x95\xbb\x7e\xd3\xd2\x8a\x4d\x01\x95\x70\xbd\xca\x7f\x4a\x14\xb7\x4b\x38\x1a\xaf\x9c\x7f\x99\xf0\xd4\xac\x61\xf2\xc4\x51\xcd\xb8\x7d\xdc\xcf\xa8\xf7\xfc\xcb\x15\xae\xf9\x1c\x97\x44\x1c\x73\xfe\x05\x25\x85\xe9\x32\x4f\xc1\x52\x28\x55\x87\x8a\x6d\xbf\x9b\xc2\xc6\x68\x11\x0c\x4a\x3d\x41\x03\x88\xc8\x40\x9e\xad\xe8\xed\xdc\xc2\x55\x5c\x54\x23\x98\xb0\xdf\x0c\x9a\x4e\xc2\x9b\xa6\xd5\xaf\x58\xc6\x35\x5b\x81\x2a\x98\x05\x51\x56\xa1\x40\x83\xcd\xd5\x7c\xc6\x32\xae\x54\x17\x9b\xd9\xdc\x55\x74\x0c\xc6\x99\x69\x78\x8a\xfe\x25\x4e\x12\xe7\x8c\x63\xd6\xa2\x37\x98\xdb\x1a\x2d\xb8\xdd\x50\xd8\xc0\x1d\x2b\x8c\x73\x32\x55\xc0\xb8\x85\x66\x41\xc2\xfe\x90\xb9\xac\xd3\x23\x9e\x9b\x52\xfb\x2d\xfc\x9e\xb8\xf3\x14\xc1\xcc\xe6\xee\xb9\x52\x39\xbf\x7a\x9f\x6c\xb1\x64\x48\x12\x5e\xa0\xc8\xb9\xd4\x93\x78\xb4\x03\x04\x44\xea\x9a\x6d\x51\x34\x02\xec\x16\x33\x90\x7a\xe4\x76\xf2\xd2\x51\x22\x57\x93\xae\x71\x37\x64\x2e\x89\x0c\x68\x66\x53\x63\xbc\xf3\x96\x17\x05\xf9\x19\xdf\xc9\x86\x22\x80\x14\x89\xe3\x4c\xf6\x08\xbe\x27\x80\x1d\x58\xc1\x3f\x2b\x48\xd8\xd5\x02\x9d\x14\xc9\x5c\x60\x96\x74\x8d\x40\x9d\x6f\x89\x21\xda\xdc\x6d\x05\x50\x66\x29\x33\xe6\xf9\x23\x38\x66\xd6\x98\xd6\x86\x2a\x8a\xd4\x25\xb4\xdd\xfd\x4b\xd9\xdc\x10\xf6\xc4\x0c\x2e\x2c\x1c\xc1\xe0\x36\x41\xda\x4c\x68\x73\x77\x2f\xe9\xc9\x24\x37\xae\x87\x49\x5d\x05\xe3\x57\xef\x31\x94\xdb\xe2\x70\x5a\x2e\x16\x7d\xab\xd2\x6c\x26\xf3\x1c\x04\x46\x26\x6a\xc3\x9e\xa4\x5f\x99\xd2\x53\xc5\x40\x52\xd1\xa2\x9f\x0e\x78\xc3\x96\xe0\x99\xd4\x6b\xa3\xd6\x28\x4d\xcf\xe7\x49\x8b\x16\x27\xe6\x89\x83\xac\xb4\x18\x8a\x52\x25\x73\xe2\xf9\x72\x30\xc5\xe5\x42\x50\x65\x96\xab\xf9\xce\x54\x78\x6f\xf6\xda\x2d\x37\x54\xc0\x7f\x43\xd8\x0f\x7c\xb9\x95\xec\x23\x3a\x9d\xa8\x16\xd6\x5c\xc9\x20\xe6\x4f\xc8\x70\xf4\x58\xf1\x08\xa1\x18\xeb\xda\x51\x52\x15\xe9\x8d\x47\x74\x83\x99\x6c\x9f\x2a\x83\x27\x1d\x3f\xc8\xd6\x29\x06\x10\xe4\xde\x93\xff\x31\x0c\xcd\x3d\xc5\x76\x78\x1c\xe9\x42\x3d\x1a\x44\xa8\x75\xd2\xac\xe0\xb0\x42\x58\x18\xfc\xf2\xd0\x79\x46\xaa\x1e\x07\xb0\x64\x2c\x71\x27\x42\x94\xa9\x06\xff\x57\x8b\x05\x01\x3d\x58\x1e\xca\xbe\x3c\xd0\xf2\x8e\x1c\x20\x81\x91\xa0\x7b\xe3\xd0\x9d\x52\xb1\x2e\xb2\x43\x82\xcc\x4f\x45\xd6\x84\x97\x9f\xe6\xd7\x6c\x76\x73\xc2\xcc\x6c\x14\xc3\x15\x70\xe5\x57\x3b\x13\xda\xff\xa6\x29\x55\xdd\x0b\xe1\xc7\x4c\xb2\x35\xa2\x17\xc6\xe6\xc1\x58\x22\xe5\xc2\xae\xe8\x67\x34\x64\x5e\xae\x51\x8c\xb3\x15\x64\x8f\x52\x2f\x8f\xaa\xc4\x14\xeb\x1f\xf7\xc7\xa4\xf3\xf5\x8f\x11\x27\xfa\x5e\x21\x16\xa3\x72\x1a\xab\x30\x8a\x55\xdc\xa3\x13\x5b\x59\xac\xdf\x1d\x82\xc9\xbb\x16\x26\xef\xbe\x01\x26\xa3\x8c\xdc\x91\xd0\x0c\x46\xf0\x8d\xb0\x49\x01\xda\xcb\x85\x0c\x1e\xac\x9d\xc7\x48\x17\x2a\x28\xe8\xdd\x40\xfb\xa6\x18\x4e\xd1\x0f\x95\xb8\x9e\x56\x32\x5b\xd1\x4e\x9b\x42\x62\x04\xbb\xa1\x09\xbf\xfe\xcf\xcd\xdd\xce\xac\xa8\x99\x6e\x61\x01\xb6\xbe\xb6\x68\x21\x43\x59\x53\xba\xa9\x0a\xee\xa6\x14\x28\x2a\x6b\x29\x10\x4f\xcb\x9c\xc9\x81\x19\xbf\x02\xcb\x72\xe0\x9a\x68\x1c\x17\x0f\x6b\xea\x28\x55\x65\xc1\xf3\xdd\x34\x9b\x5f\xbd\xef\x49\x7d\x75\x77\x95\xd3\x35\x40\xbb\xcc\x5d\xd1\x2d\xde\x33\x61\x58\x9d\x02\x2b\x4c\x51\x2a\xb2\xd0\xe9\x86\x71\x3c\x1a\x1d\x42\xfa\x38\x81\x97\xde\xa0\x02\x05\x9a\x74\xa7\xeb\x80\x40\x0c\x11\x8e\x51\xa0\xe7\x64\x51\xdf\x93\xa8\x6f\x93\x44\x9d\x38\xef\x41\xce\x1e\x1a\x16\x23\x4b\xfb\x69\xcf\x16\x33\xeb\xb4\x27\x8a\x64\x9d\xf5\x54\xba\x19\x14\xf9\x73\x4c\x81\xb2\xd2\x92\x55\xa8\xce\x1e\x6e\x59\xaa\x15\xb8\x17\x55\x75\x78\x51\x58\x13\xf8\x2d\x5d\xbc\x84\xa4\xd5\x46\x3b\xd4\xe5\x78\xef\x18\x8a\x3e\x6d\x81\xc0\xe5\x02\x30\xb2\x71\xc0\x84\x79\xa2\x4b\xdb\x29\x06\xe3\xc6\x8a\x90\xc8\x68\xe3\x31\xdc\x81\xbc\xf0\x1d\x9e\xe7\xc6\x42\x37\xca\x8f\x05\xc5\xc1\x3a\xf0\x5f\x95\x7e\x7e\xcf\x3e\x77\x65\x9f\x27\x4e\x1b\x8d\xb8\x9e\xdd\x7c\xdc\x1f\x85\xcf\xab\x89\xfd\xa8\x31\x0c\x36\x69\x5c\x4b\x09\x7a\xf9\x61\xa5\x13\xe1\x96\xae\x2a\xf7\x9d\x57\x0e\xbf\xae\x6d\x72\x51\x99\xbf\x7b\x6a\x34\x08\x19\xda\x9f\x0e\xc4\x5f\x16\x95\x17\xc6\xa8\x97\x85\xe3\xdd\x0b\x86\xfa\xfc\xed\x4b\xca\x3a\x1e\x18\x4b\xa6\xcf\x19\x3d\x5a\xe0\x62\x43\xf5\xe6\x14\x9a\xe8\x76\x90\x1a\xfb\x2e\x52\xf1\x63\x9e\x34\xd8\xb1\x97\xfd\x1a\xc1\x07\x9c\x1c\xd9\x4d\x2b\x9b\x00\x2d\xe9\xa5\xd8\x0e\x73\xf1\xf8\x72\x00\x5f\xd2\xb7\xc8\xe3\xaa\x1c\x4e\x97\x0c\x46\x54\x77\x80\x96\x71\x1d\xe2\x94\x56\x6c\xb3\xd5\xa4\x50\x3a\xbe\x84\x06\x0d\xcc\xfa\x1f\x6a\xec\x6a\x6c\x14\x2c\x3c\x4b\x15\xd7\x8f\x81\xaa\x9a\x81\xf6\x76\x83\x36\xb1\x95\xf6\x1b\xa3\x48\x1d\x17\x52\x29\x10\xcc\x94\x1e\xfd\x58\xb5\x71\x2c\x47\x53\xa6\xa8\x9c\x19\x17\xcc\x64\xa8\x68\xd0\x16\xb3\x51\x29\xc4\x4f\x6c\xb8\x38\x90\x29\xb1\x9d\x2b\xd2\x1c\x8f\x97\x1a\xbf\x6a\xc9\x51\xc0\xb8\xe5\x61\xce\x31\x7e\x6a\x75\x15\x51\x2e\xd7\x6a\xf4\x88\xe7\x6d\x5d\x0d\x3d\x49\xbf\x8a\xf7\x1e\x9a\x65\x26\x4f\xe3\x7d\x13\xbe\x89\x17\x76\xe7\x95\xb5\x43\xb6\x52\x78\x1a\xb9\x3a\xbb\x89\x2c\xba\xbd\x9b\x3d\x9f\x3a\x3b\xf3\xc5\x2d\xf3\x64\x54\xdf\x34\x51\x64\x72\x12\xc3\x64\x21\xe7\xe8\x50\x75\x38\x31\x01\x48\x4b\xff\x2c\xab\xb5\xf3\x54\x47\x55\xf1\xfe\xed\x8a\x78\xa7\x74\x6d\x23\x64\x1e\x6e\xdb\x21\xae\x8d\x37\xee\x84\x9e\xb7\x36\x15\x2c\x70\x15\xda\xc9\x76\xf4\xee\xa0\x26\x8e\xf7\xcb\xb1\x5d\x6d\x3c\xcf\x69\xeb\xa8\xaf\xcf\x77\xc3\xdc\x05\x97\xb5\xdb\x3a\xf6\xc7\x04\xf5\x4d\xe7\x56\x54\xd0\x6c\x12\x94\x06\xc6\x3a\x72\x76\xf8\xf0\xed\xf3\xd6\xf0\x3a\x4d\x92\x3a\xb6\xb5\xc4\xb7\xcf\x74\x8e\xa3\xbd\x53\x63\x28\xed\xea\xa2\x0a\x59\x51\xc7\xa0\x76\x9b\x5c\xce\x99\xd4\x99\x2a\x05\xe5\x70\x4a\xb5\x12\xaa\x1a\x8f\x51\x34\x76\x10\x6d\x8c\x74\xed\x7e\x2c\xdd\xb2\x0b\x88\xa4\x5c\xea\x60\xbd\x22\x29\x77\x53\xf2\x50\x7a\x56\xb8\x8e\xf4\x6f\x8d\x20\x1b\x2c\x30\x51\xaa\xe8\xd7\x85\x76\x35\x56\x35\x9f\x03\x9c\x6e\xf8\xa0\x9a\xec\xf0\xbb\x03\xc8\xa1\x21\xa8\x95\x8e\xaa\x2c\x4e\x1a\x8d\x1c\xa4\xbd\xbe\x15\x9e\x54\x72\x3d\x0e\x51\x5a\x12\x31\x0d\x1b\x74\xca\x32\x29\x28\xa3\xa9\xdc\x7b\x1a\x2c\xf7\xb8\xea\xf6\xa4\xe1\xa8\x3b\x7c\x86\x0b\xc0\x03\x07\x1c\x2a\xcb\xbd\x24\x0c\xcb\x79\x76\x20\xe4\xf7\x57\xd7\x4d\x6d\x20\xdb\xcb\xeb\x03\x60\x8f\x75\xcf\x0d\x00\xdf\xdb\x3a\xf7\x12\x3c\xba\xf7\x32\x07\x62\xd4\xb9\x9c\xa9\x05\xae\x73\x27\xb3\xdb\x0e\xbe\x08\xe3\xdd\x1a\x7c\x8c\xee\x7e\xb3\x28\x75\x5c\xe8\xbf\x49\xeb\xdc\xcb\x7c\x3f\x68\xf9\xc2\xab\xa8\x6e\x0a\x89\xa8\xf5\x5c\x35\x22\xac\xb8\xf3\x32\x63\x77\xe0\x9f\x8c\x7d\x6c\x1c\x37\xa6\x73\xd4\xf6\x2d\xc0\x73\xa9\x5c\xd3\xf9\x2d\x4c\xe6\x12\xfe\xe4\x12\x9e\xf3\xaf\x46\x27\x99\xc9\x2f\xae\x3e\xdf\xdf\x5e\xbf\xb9\x08\x1d\xfc\x17\x7f\x3a\xb0\xbf\x95\x52\xc0\x45\xe9\xa4\x5e\x4e\x40\xcb\x64\xe5\x73\x35\x9c\x9d\xfd\x93\x44\x03\x94\x44\x7d\xc3\x38\xe0\x20\xeb\xbd\xdf\x2c\x1f\xd4\x56\x39\x44\x93\x83\x9b\x2b\x4f\x91\x2e\x76\x81\x1f\x86\xe1\x4d\xf3\x10\x91\x6b\xbd\xaf\x2a\x0a\xa7\x41\xee\x19\xbe\x0d\xd5\x67\x76\xf3\x22\xa0\x87\xda\xf1\x26\xee\x2a\xac\xcc\x43\x5d\xff\x44\x07\x7f\xa9\x6f\x3d\x11\x1a\x21\x2b\x3e\xd4\xd1\x86\x14\xba\xee\x18\x8d\x06\x8a\x7a\x47\xa9\xa0\x42\xd5\xa1\xa1\xe2\xc8\x40\x0f\xe8\x1e\xb4\xc7\x6a\xb3\xe1\x73\x40\xbb\xc4\xc0\x01\x7a\x4d\x13\xdc\xc2\x80\x67\x1e\x35\x4a\xff\x70\x8b\xb3\x2f\xe6\x3d\x2c\xda\x8d\xd7\x57\xdd\x43\x8e\x6e\x7a\x58\x4a\x93\x49\xb1\x43\x8a\xb6\x90\xbb\x9e\xdd\x7c\x8c\xa8\xd1\x77\xcb\xf5\x12\x06\x09\x1f\x30\xdf\xb9\xf5\x81\xe1\xf8\x2e\x5b\xb3\x85\x61\x63\x6f\x9a\xba\xdd\xa9\x50\x39\x20\x2f\x58\x17\x87\x9a\x87\x4f\xf3\xeb\x76\xe7\x47\xbb\x9b\xc2\x9b\xaa\xa4\xde\x66\x7b\xd3\xe0\x73\x02\x96\xef\x49\x73\xb7\x78\x3e\x78\x51\x12\x98\x3f\xac\x76\x9f\xe6\xd7\xbb\x13\xe9\x7d\xaa\xc7\x8e\x49\x2a\xf7\xab\x20\x3b\x56\x8e\x2e\xb6\x24\x89\xef\x3d\xd4\x81\xf8\x56\x3e\x69\x72\xa4\xee\xcd\xc3\xb2\xb6\x0a\x46\xef\x46\x63\x95\xb0\x9f\x04\xc9\xbd\x92\x7e\x4c\x35\xfb\xf6\x6e\xb6\x25\x3f\x34\xb6\xbb\x98\xb6\xf7\x1f\xc8\x86\x1a\x62\x8e\xe9\xea\x08\xff\x39\xf6\xa2\x14\x23\x16\x7f\x27\xdb\x45\xd7\x41\xf0\x1f\x62\xb1\xb8\x42\xa1\x7e\xde\x46\x63\x60\xab\x7d\xfa\x0d\xd6\x9a\x51\x89\xea\xb2\x04\x67\xd6\xff\xe9\x45\x0f\x39\x38\xba\x8e\x72\xe0\x59\xba\xe9\x57\xb7\x87\xaa\xd9\xec\xd0\xab\xc9\x11\x31\xc1\xa0\xe3\xfb\xdd\xe4\xf7\xbb\xc9\xef\x77\x93\xff\x4a\x77\x93\xc8\x09\x32\xe3\xae\x2e\x06\x20\x43\xcd\xa2\xcf\xf1\xa0\x79\x2b\xbe\x86\x9e\x88\x06\xc2\xd1\xff\xc3\x23\xeb\x8f\x6c\xae\x3d\xfc\x2a\x2c\x5c\xd5\x35\x36\x66\x52\xff\xfb\x55\x3d\xe0\x0a\xc8\x9a\x07\x92\xb7\xb3\xc1\xfd\x9a\xdf\x0a\x79\xd3\x3c\x91\xf6\x4f\xaa\x5f\xff\xa0\x17\x98\xe0\xd8\x35\x88\x4b\xe6\x6d\x19\x4c\xb8\xf3\xc6\xf2\x25\x54\x23\x8d\x9f\xe0\x59\x06\x85\x07\x71\xd7\xff\x11\x90\x57\x41\xcc\xe3\xef\x7b\xd0\x63\x66\x74\xb0\x89\xae\xfe\xcd\x11\xdc\x17\xc4\xa7\x88\x49\x18\xfe\x7b\x00\x00\x00\xff\xff\x1c\x5f\xb6\x01\x5b\x45\x00\x00")

func examplesCrdsCiliumnodesYamlBytes() ([]byte, error) {
  return bindataRead(
@@ -177,7 +177,7 @@ func examplesCrdsCiliumnodesYaml() (*asset, error) {
  	return nil, err
  }

-	info := bindataFileInfo{name: "examples/crds/ciliumnodes.yaml", size: 17752, mode: os.FileMode(416), modTime: time.Unix(1450269211, 0)}
+	info := bindataFileInfo{name: "examples/crds/ciliumnodes.yaml", size: 17755, mode: os.FileMode(416), modTime: time.Unix(1450269211, 0)}
  a := &asset{bytes: bytes, info: info}
  return a, nil
}
diff --git a/pkg/k8s/apis/cilium.io/v2/cnp_types.go b/pkg/k8s/apis/cilium.io/v2/cnp_types.go
index b5653b44c..44aa065df 100644
--- a/pkg/k8s/apis/cilium.io/v2/cnp_types.go
+++ b/pkg/k8s/apis/cilium.io/v2/cnp_types.go
@@ -40,10 +40,8 @@ import (
// CiliumNetworkPolicy is a Kubernetes third-party resource with an extended
// version of NetworkPolicy.
type CiliumNetworkPolicy struct {
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.TypeMeta `json:",inline"`
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.ObjectMeta `json:"metadata"`

diff --git a/pkg/k8s/apis/cilium.io/v2/types.go b/pkg/k8s/apis/cilium.io/v2/types.go
index 8794f2622..f480d6a33 100644
--- a/pkg/k8s/apis/cilium.io/v2/types.go
+++ b/pkg/k8s/apis/cilium.io/v2/types.go
@@ -42,10 +42,8 @@ import (

// CiliumEndpoint is the status of a Cilium policy rule.
type CiliumEndpoint struct {
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.TypeMeta `json:",inline"`
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.ObjectMeta `json:"metadata"`

@@ -309,10 +307,8 @@ type CiliumEndpointList struct {
// to control various node specific configuration aspects and a status section
// to represent the status of the node.
type CiliumNode struct {
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.TypeMeta `json:",inline"`
-	// +k8s:openapi-gen=false
  // +deepequal-gen=false
  metav1.ObjectMeta `json:"metadata"`

@christarazi christarazi force-pushed the pr/reworking-crd-validation branch from d881c1b to 23750bb Compare August 14, 2020 17:13
@christarazi
Copy link
Copy Markdown
Member

test-me-please

1 similar comment
@christarazi
Copy link
Copy Markdown
Member

test-me-please

@christarazi
Copy link
Copy Markdown
Member

christarazi commented Aug 17, 2020

@aanm (Pinging you because it's your own PR 😉 )

Copy link
Copy Markdown
Member

@fristonio fristonio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome 💯 💯

Copy link
Copy Markdown
Member Author

@aanm aanm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't approve my own PR but LGTM 👍

@christarazi
Copy link
Copy Markdown
Member

Majority code owners approval and CI passing, marking ready to merge.

@christarazi christarazi added the ready-to-merge This PR has passed all tests and received consensus from code owners to merge. label Aug 18, 2020
@aanm aanm merged commit fdf5aac into master Aug 18, 2020
@aanm aanm deleted the pr/reworking-crd-validation branch August 18, 2020 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/k8s Impacts the kubernetes API, or kubernetes -> cilium internals translation layers. kind/enhancement This would improve or streamline existing functionality. ready-to-merge This PR has passed all tests and received consensus from code owners to merge. release-note/minor This PR changes functionality that users may find relevant to operating Cilium.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants