Add EndPort to Network Policy - Alpha (#97058)

* Fix merge conflict in kube_features

* Add alpha support for EndPort in Network Policy

Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@gmail.com>

* Add alpha support for EndPort in Network Policy

Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@gmail.com>

* Add alpha support for EndPort in Network Policy

Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@gmail.com>

* Correct some nits

Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@gmail.com>

* Add alpha support for EndPort in Network Policy

* Add alpha support for EndPort in Network Policy

* Add alpha support for EndPort in Network Policy

* Add alpha support for EndPort in Network Policy
This commit is contained in:
Ricardo Katz 2021-02-02 00:24:28 -03:00 committed by GitHub
parent 7e6ef0efb6
commit b7c82bb83c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 1181 additions and 427 deletions

View File

@ -13118,9 +13118,14 @@
"io.k8s.api.networking.v1.NetworkPolicyPort": {
"description": "NetworkPolicyPort describes a port to allow traffic on",
"properties": {
"endPort": {
"description": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".",
"format": "int32",
"type": "integer"
},
"port": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString",
"description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers."
"description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched."
},
"protocol": {
"description": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.",

View File

@ -1689,6 +1689,7 @@ func Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(in *netwo
func autoConvert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1beta1.NetworkPolicyPort, out *networking.NetworkPolicyPort, s conversion.Scope) error {
out.Protocol = (*core.Protocol)(unsafe.Pointer(in.Protocol))
out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port))
out.EndPort = (*int32)(unsafe.Pointer(in.EndPort))
return nil
}
@ -1700,6 +1701,7 @@ func Convert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1bet
func autoConvert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(in *networking.NetworkPolicyPort, out *v1beta1.NetworkPolicyPort, s conversion.Scope) error {
out.Protocol = (*v1.Protocol)(unsafe.Pointer(in.Protocol))
out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port))
out.EndPort = (*int32)(unsafe.Pointer(in.EndPort))
return nil
}

View File

@ -138,10 +138,21 @@ type NetworkPolicyPort struct {
// +optional
Protocol *api.Protocol
// The port on the given protocol. This can either be a numerical or named port on
// a pod. If this field is not provided, this matches all port names and numbers.
// The port on the given protocol. This can either be a numerical or named
// port on a pod. If this field is not provided, this matches all port names and
// numbers.
// If present, only traffic on the specified protocol AND port will be matched.
// +optional
Port *intstr.IntOrString
// If set, indicates that the range of ports from port to endPort, inclusive,
// should be allowed by the policy. This field cannot be defined if the port field
// is not defined or if the port field is defined as a named (string) port.
// The endPort must be equal or greater than port.
// This feature is in Alpha state and should be enabled using the Feature Gate
// "NetworkPolicyEndPort".
// +optional
EndPort *int32
}
// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is allowed

View File

@ -773,6 +773,7 @@ func Convert_networking_NetworkPolicyPeer_To_v1_NetworkPolicyPeer(in *networking
func autoConvert_v1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1.NetworkPolicyPort, out *networking.NetworkPolicyPort, s conversion.Scope) error {
out.Protocol = (*core.Protocol)(unsafe.Pointer(in.Protocol))
out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port))
out.EndPort = (*int32)(unsafe.Pointer(in.EndPort))
return nil
}
@ -784,6 +785,7 @@ func Convert_v1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1.Network
func autoConvert_networking_NetworkPolicyPort_To_v1_NetworkPolicyPort(in *networking.NetworkPolicyPort, out *v1.NetworkPolicyPort, s conversion.Scope) error {
out.Protocol = (*corev1.Protocol)(unsafe.Pointer(in.Protocol))
out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port))
out.EndPort = (*int32)(unsafe.Pointer(in.EndPort))
return nil
}

View File

@ -68,11 +68,21 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie
for _, msg := range validation.IsValidPortNum(int(port.Port.IntVal)) {
allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.IntVal, msg))
}
if port.EndPort != nil && *port.EndPort < port.Port.IntVal {
allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "must be greater than or equal to `port`"))
}
} else {
if port.EndPort != nil {
allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "may not be specified when `port` is non-numeric"))
}
for _, msg := range validation.IsValidPortName(port.Port.StrVal) {
allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.StrVal, msg))
}
}
} else {
if port.EndPort != nil {
allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "may not be specified when `port` is not specified"))
}
}
return allErrs

View File

@ -38,7 +38,7 @@ func TestValidateNetworkPolicy(t *testing.T) {
protocolUDP := api.ProtocolUDP
protocolICMP := api.Protocol("ICMP")
protocolSCTP := api.ProtocolSCTP
endPort := int32(32768)
successCases := []networking.NetworkPolicy{
{
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
@ -377,6 +377,78 @@ func TestValidateNetworkPolicy(t *testing.T) {
PolicyTypes: []networking.PolicyType{networking.PolicyTypeIngress, networking.PolicyTypeEgress},
},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
Ports: []networking.NetworkPolicyPort{
{
Protocol: nil,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000},
EndPort: &endPort,
},
{
Protocol: &protocolUDP,
Port: &intstr.IntOrString{Type: intstr.String, StrVal: "dns"},
},
},
},
},
},
},
{
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: nil,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 30000},
EndPort: &endPort,
},
{
Protocol: nil,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000},
EndPort: &endPort,
},
},
},
},
Ingress: []networking.NetworkPolicyIngressRule{
{
From: []networking.NetworkPolicyPeer{
{
PodSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"e": "f"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolTCP,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32768},
EndPort: &endPort,
},
},
},
},
},
},
}
// Success cases are expected to pass validation.
@ -798,6 +870,154 @@ func TestValidateNetworkPolicy(t *testing.T) {
PolicyTypes: []networking.PolicyType{"foo", "bar", "baz"},
},
},
"multiple ports defined, one port range is invalid": {
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolUDP,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 35000},
EndPort: &endPort,
},
{
Protocol: nil,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000},
EndPort: &endPort,
},
},
},
},
},
},
"endPort defined with named/string port": {
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolUDP,
Port: &intstr.IntOrString{Type: intstr.String, StrVal: "dns"},
EndPort: &endPort,
},
{
Protocol: nil,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000},
EndPort: &endPort,
},
},
},
},
},
},
"endPort defined without port defined": {
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolTCP,
EndPort: &endPort,
},
},
},
},
},
},
"port is greater than endPort": {
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolSCTP,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 33000},
EndPort: &endPort,
},
},
},
},
},
},
"multiple invalid port ranges defined": {
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
Egress: []networking.NetworkPolicyEgressRule{
{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
Ports: []networking.NetworkPolicyPort{
{
Protocol: &protocolUDP,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 35000},
EndPort: &endPort,
},
{
Protocol: &protocolTCP,
EndPort: &endPort,
},
{
Protocol: &protocolTCP,
Port: &intstr.IntOrString{Type: intstr.String, StrVal: "https"},
EndPort: &endPort,
},
},
},
},
},
},
}
// Error cases are not expected to pass validation.

View File

@ -558,6 +558,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) {
*out = new(intstr.IntOrString)
**out = **in
}
if in.EndPort != nil {
in, out := &in.EndPort, &out.EndPort
*out = new(int32)
**out = **in
}
return
}

View File

@ -298,6 +298,12 @@ const (
// Enables SCTP as new protocol for Service ports, NetworkPolicy, and ContainerPort in Pod/Containers definition
SCTPSupport featuregate.Feature = "SCTPSupport"
// owner: @rikatz
// alpha: v1.21
//
// Enables the endPort field in NetworkPolicy to enable a Port Range behavior in Network Policies.
NetworkPolicyEndPort featuregate.Feature = "NetworkPolicyEndPort"
// owner: @xing-yang
// alpha: v1.12
// beta: v1.17
@ -729,6 +735,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
RuntimeClass: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.23
NodeLease: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
SCTPSupport: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.22
NetworkPolicyEndPort: {Default: false, PreRelease: featuregate.Alpha},
VolumeSnapshotDataSource: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21
ProcMountType: {Default: false, PreRelease: featuregate.Alpha},
TTLAfterFinished: {Default: false, PreRelease: featuregate.Alpha},

View File

@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
@ -16,9 +17,11 @@ go_library(
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/networking:go_default_library",
"//pkg/apis/networking/validation:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
@ -37,3 +40,18 @@ filegroup(
],
tags = ["automanaged"],
)
go_test(
name = "go_default_test",
srcs = ["strategy_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/networking:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
],
)

View File

@ -23,9 +23,11 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/apiserver/pkg/storage/names"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/apis/networking"
"k8s.io/kubernetes/pkg/apis/networking/validation"
"k8s.io/kubernetes/pkg/features"
)
// networkPolicyStrategy implements verification logic for NetworkPolicies
@ -46,6 +48,10 @@ func (networkPolicyStrategy) NamespaceScoped() bool {
func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) {
networkPolicy := obj.(*networking.NetworkPolicy)
networkPolicy.Generation = 1
if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) {
dropNetworkPolicyEndPort(networkPolicy)
}
}
// PrepareForUpdate clears fields that are not allowed to be set by end users on update.
@ -53,6 +59,10 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt
newNetworkPolicy := obj.(*networking.NetworkPolicy)
oldNetworkPolicy := old.(*networking.NetworkPolicy)
if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) && !endPortInUse(oldNetworkPolicy) {
dropNetworkPolicyEndPort(newNetworkPolicy)
}
// Any changes to the spec increment the generation number, any changes to the
// status should reflect the generation number of the corresponding object.
// See metav1.ObjectMeta description for more information on Generation.
@ -86,3 +96,42 @@ func (networkPolicyStrategy) ValidateUpdate(ctx context.Context, obj, old runtim
func (networkPolicyStrategy) AllowUnconditionalUpdate() bool {
return true
}
// Drops Network Policy EndPort fields if Feature Gate is also disabled.
// This should be used in future Network Policy evolutions
func dropNetworkPolicyEndPort(netPol *networking.NetworkPolicy) {
for idx, ingressSpec := range netPol.Spec.Ingress {
for idxPort, port := range ingressSpec.Ports {
if port.EndPort != nil {
netPol.Spec.Ingress[idx].Ports[idxPort].EndPort = nil
}
}
}
for idx, egressSpec := range netPol.Spec.Egress {
for idxPort, port := range egressSpec.Ports {
if port.EndPort != nil {
netPol.Spec.Egress[idx].Ports[idxPort].EndPort = nil
}
}
}
}
func endPortInUse(netPol *networking.NetworkPolicy) bool {
for _, ingressSpec := range netPol.Spec.Ingress {
for _, port := range ingressSpec.Ports {
if port.EndPort != nil {
return true
}
}
}
for _, egressSpec := range netPol.Spec.Egress {
for _, port := range egressSpec.Ports {
if port.EndPort != nil {
return true
}
}
}
return false
}

View File

@ -0,0 +1,319 @@
/*
Copyright 2021 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package networkpolicy
import (
"context"
"fmt"
"reflect"
"testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/networking"
"k8s.io/kubernetes/pkg/features"
utilfeature "k8s.io/apiserver/pkg/util/feature"
featuregatetesting "k8s.io/component-base/featuregate/testing"
)
func makeNetworkPolicy(isIngress, isEgress, hasEndPort bool) *networking.NetworkPolicy {
protocolTCP := api.ProtocolTCP
endPort := int32(32000)
netPol := &networking.NetworkPolicy{
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar", Generation: 0},
Spec: networking.NetworkPolicySpec{
PodSelector: metav1.LabelSelector{
MatchLabels: map[string]string{"a": "b"},
},
},
}
egress := networking.NetworkPolicyEgressRule{
To: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
}
ingress := networking.NetworkPolicyIngressRule{
From: []networking.NetworkPolicyPeer{
{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"c": "d"},
},
},
},
}
ports := []networking.NetworkPolicyPort{
{
Protocol: &protocolTCP,
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 31000},
},
}
ingress.Ports = ports
egress.Ports = ports
if hasEndPort {
ingress.Ports[0].EndPort = &endPort
egress.Ports[0].EndPort = &endPort
}
if isIngress {
netPol.Spec.Ingress = append(netPol.Spec.Ingress, ingress)
}
if isEgress {
netPol.Spec.Egress = append(netPol.Spec.Egress, egress)
}
return netPol
}
func TestNetworkPolicyStrategy(t *testing.T) {
for _, tc := range []struct {
name string
hasEndPort bool
enableFeatureGate bool
isIngress bool
isEgress bool
}{
{
name: "Create Ingress Rule with EndPort Feature Gate enabled and with EndPort defined",
hasEndPort: true,
enableFeatureGate: true,
isIngress: true,
isEgress: false,
},
{
name: "Create Ingress Rule with EndPort Feature Gate disabled and with EndPort defined",
hasEndPort: true,
enableFeatureGate: false,
isIngress: true,
isEgress: false,
},
{
name: "Create Ingress Rule with EndPort Feature Gate enabled and with endPort undefined",
hasEndPort: false,
enableFeatureGate: true,
isIngress: true,
isEgress: false,
},
{
name: "Create Ingress Rule with EndPort Feature Gate disabled and with endPort undefined",
hasEndPort: false,
enableFeatureGate: false,
isIngress: true,
isEgress: false,
},
{
name: "Create Egress Rule with EndPort Feature Gate enabled and with endPort defined",
hasEndPort: true,
enableFeatureGate: true,
isIngress: false,
isEgress: true,
},
{
name: "Create Egress Rule with EndPort Feature Gate enabled and with endPort defined",
hasEndPort: true,
enableFeatureGate: false,
isIngress: false,
isEgress: true,
},
{
name: "Create Egress Rule with EndPort Feature Gate true and with endPort undefined",
hasEndPort: false,
enableFeatureGate: true,
isIngress: false,
isEgress: true,
},
{
name: "Create Egress Rule with EndPort Feature Gate disabled and with endPort undefined",
hasEndPort: false,
enableFeatureGate: false,
isIngress: false,
isEgress: true,
},
{
name: "Create Ingress and Egress Rule with EndPort Feature Gate enabled and endPort defined",
hasEndPort: true,
enableFeatureGate: true,
isIngress: true,
isEgress: true,
},
{
name: "Create Ingress and Egress Rule with EndPort Feature Gate disabled and endPort defined",
hasEndPort: true,
enableFeatureGate: false,
isIngress: true,
isEgress: true,
},
{
name: "Create Ingress and Egress Rule with EndPort Feature Gate enabled and endPort undefined",
hasEndPort: false,
enableFeatureGate: true,
isIngress: true,
isEgress: true,
},
{
name: "Create Ingress and Egress Rule with EndPort Feature Gate disabled and endPort undefined",
hasEndPort: false,
enableFeatureGate: false,
isIngress: true,
isEgress: true,
},
{
name: "Create a null rule with EndPort Feature Gate enabled",
hasEndPort: false,
enableFeatureGate: true,
isIngress: false,
isEgress: false,
},
{
name: "Create a null rule with EndPort Feature Gate disabled",
hasEndPort: false,
enableFeatureGate: false,
isIngress: false,
isEgress: false,
},
} {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, tc.enableFeatureGate)()
// Create a Network Policy containing EndPort defined to compare with the generated by the tests
expectedNewNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress,
(tc.hasEndPort && tc.enableFeatureGate))
netPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort)
Strategy.PrepareForCreate(context.Background(), netPol)
if !reflect.DeepEqual(netPol.Spec, expectedNewNetPol.Spec) {
t.Errorf("Create: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v",
tc.name, netPol, expectedNewNetPol)
}
if netPol.Generation != 1 {
t.Errorf("Create: Test %s failed. Network Policy Generation should be 1, got %d",
tc.name, netPol.Generation)
}
errs := Strategy.Validate(context.Background(), netPol)
if len(errs) != 0 {
t.Errorf("Unexpected error from validation for created Network Policy: %v", errs)
}
// Test when an updated Network Policy drops the EndPort field even if the FG has been disabled
// but the field is present
oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort)
updatedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort)
expectedUpdatedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort)
Strategy.PrepareForUpdate(context.Background(), updatedNetPol, oldNetPol)
if !reflect.DeepEqual(updatedNetPol.Spec, expectedUpdatedNetPol.Spec) {
t.Errorf("Update: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v",
tc.name, updatedNetPol, expectedUpdatedNetPol)
}
if updatedNetPol.Generation != 0 && !tc.enableFeatureGate {
t.Errorf("Update: Test %s failed. Network Policy Generation should be 1, got %d",
tc.name, updatedNetPol.Generation)
}
errs = Strategy.Validate(context.Background(), updatedNetPol)
if len(errs) != 0 {
t.Errorf("Unexpected error from validation for updated Network Policy: %v", errs)
}
}
}
func TestNetworkPolicyEndPortEnablement(t *testing.T) {
// Enable the Feature Gate during the first rule creation
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true)()
netPol := makeNetworkPolicy(true, true, true)
// We always expect the EndPort to be present, even if the FG is disabled later
expectedNetPol := makeNetworkPolicy(true, true, true)
Strategy.PrepareForCreate(context.Background(), netPol)
if !reflect.DeepEqual(netPol.Spec, expectedNetPol.Spec) {
t.Errorf("Create with enabled FG failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v",
netPol, expectedNetPol)
}
if netPol.Generation != 1 {
t.Errorf("Create with enabled FG failed. Network Policy Generation should be 1, got %d",
netPol.Generation)
}
errs := Strategy.Validate(context.Background(), netPol)
if len(errs) != 0 {
t.Errorf("Unexpected error from validation for created Network Policy: %v", errs)
}
// Now let's disable the Feature Gate, update some other field from NetPol and expect the EndPort is already present
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, false)()
updateNetPol, err := testUpdateEndPort(netPol)
if err != nil {
t.Errorf("Update with disabled FG failed. %v", err)
}
// And let's enable the FG again, add another from and check if the EndPort field is still present
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true)()
_, err = testUpdateEndPort(updateNetPol)
if err != nil {
t.Errorf("Update with enabled FG failed. %v", err)
}
}
func testUpdateEndPort(oldNetPol *networking.NetworkPolicy) (*networking.NetworkPolicy, error) {
updatedNetPol := makeNetworkPolicy(true, true, true)
expectedNetPol := makeNetworkPolicy(true, true, true)
if oldNetPol == nil {
return nil, fmt.Errorf("Nil Network Policy received")
}
expectedGeneration := oldNetPol.GetGeneration() + 1
labelValue := fmt.Sprintf("bla%d", expectedGeneration)
updateFrom := networking.NetworkPolicyPeer{
NamespaceSelector: &metav1.LabelSelector{
MatchLabels: map[string]string{"e": labelValue},
},
}
updatedNetPol.Spec.Ingress[0].From = append(updatedNetPol.Spec.Ingress[0].From, updateFrom)
expectedNetPol.Spec.Ingress[0].From = append(expectedNetPol.Spec.Ingress[0].From, updateFrom)
Strategy.PrepareForUpdate(context.Background(), updatedNetPol, oldNetPol)
if !reflect.DeepEqual(updatedNetPol.Spec, expectedNetPol.Spec) {
return nil, fmt.Errorf("Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v",
updatedNetPol, expectedNetPol)
}
if updatedNetPol.Generation != expectedGeneration {
return nil, fmt.Errorf("Network Policy Generation should be %d, got %d",
expectedGeneration, updatedNetPol.Generation)
}
errs := Strategy.Validate(context.Background(), updatedNetPol)
if len(errs) != 0 {
return nil, fmt.Errorf("Unexpected error from validation for created Network Policy: %v", errs)
}
return updatedNetPol, nil
}

View File

@ -1683,241 +1683,243 @@ func init() {
}
var fileDescriptor_cdc93917efc28165 = []byte{
// 3742 bytes of a gzipped FileDescriptorProto
// 3761 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x1c, 0xc7,
0x72, 0xd6, 0xec, 0x2e, 0xb9, 0xcb, 0xe2, 0x7f, 0x93, 0x22, 0xf7, 0x49, 0x4f, 0x5c, 0xbd, 0x31,
0xa0, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f,
0xa2, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f,
0xf8, 0xb3, 0xee, 0x25, 0x65, 0xc3, 0x88, 0x1d, 0x0f, 0x77, 0x9b, 0xcb, 0x11, 0x67, 0x67, 0xc6,
0xd3, 0xb3, 0x34, 0x17, 0xc8, 0x21, 0x87, 0x5c, 0x0c, 0x04, 0x48, 0x2e, 0x4e, 0x72, 0x8c, 0x11,
0x20, 0xa7, 0x04, 0x39, 0x26, 0x07, 0xc3, 0x48, 0x10, 0x07, 0x10, 0x02, 0x27, 0xf0, 0x2d, 0x3e,
0x11, 0x31, 0x7d, 0x0a, 0x72, 0xca, 0x2d, 0xd0, 0x29, 0xe8, 0x9e, 0x9e, 0xff, 0x19, 0xee, 0x90,
0x96, 0x88, 0x38, 0x78, 0x27, 0x71, 0xbb, 0xaa, 0xbe, 0xaa, 0xee, 0xae, 0xae, 0xaa, 0xee, 0x29,
0xc1, 0xca, 0xfe, 0x7d, 0x5a, 0x55, 0x8d, 0xda, 0x7e, 0x6f, 0x87, 0x58, 0x3a, 0xb1, 0x09, 0xad,
0x1d, 0x10, 0xbd, 0x6d, 0x58, 0x35, 0x41, 0x50, 0x4c, 0xb5, 0x46, 0x0e, 0x6d, 0xa2, 0x53, 0xd5,
0xd0, 0x69, 0xed, 0xe0, 0xd6, 0x0e, 0xb1, 0x95, 0x5b, 0xb5, 0x0e, 0xd1, 0x89, 0xa5, 0xd8, 0xa4,
0x5d, 0x35, 0x2d, 0xc3, 0x36, 0xd0, 0x15, 0x87, 0xbd, 0xaa, 0x98, 0x6a, 0xd5, 0x67, 0xaf, 0x0a,
0xf6, 0x4b, 0x37, 0x3b, 0xaa, 0xbd, 0xd7, 0xdb, 0xa9, 0xb6, 0x8c, 0x6e, 0xad, 0x63, 0x74, 0x8c,
0x1a, 0x97, 0xda, 0xe9, 0xed, 0xf2, 0x5f, 0xfc, 0x07, 0xff, 0xcb, 0x41, 0xbb, 0x24, 0x07, 0x94,
0xb7, 0x0c, 0x8b, 0xd4, 0x0e, 0x62, 0x1a, 0x2f, 0xdd, 0xf1, 0x79, 0xba, 0x4a, 0x6b, 0x4f, 0xd5,
0x89, 0xd5, 0xaf, 0x99, 0xfb, 0x1d, 0x36, 0x40, 0x6b, 0x5d, 0x62, 0x2b, 0x49, 0x52, 0xb5, 0x34,
0x29, 0xab, 0xa7, 0xdb, 0x6a, 0x97, 0xc4, 0x04, 0xee, 0x0d, 0x12, 0xa0, 0xad, 0x3d, 0xd2, 0x55,
0x62, 0x72, 0x6f, 0xa5, 0xc9, 0xf5, 0x6c, 0x55, 0xab, 0xa9, 0xba, 0x4d, 0x6d, 0x2b, 0x2a, 0x24,
0xdf, 0x81, 0xa9, 0x45, 0x4d, 0x33, 0x3e, 0x21, 0xed, 0xa5, 0xe6, 0xea, 0xb2, 0xa5, 0x1e, 0x10,
0x0b, 0x5d, 0x85, 0x82, 0xae, 0x74, 0x49, 0x59, 0xba, 0x2a, 0x5d, 0x1f, 0xa9, 0x8f, 0x3d, 0x3f,
0xaa, 0x5c, 0x38, 0x3e, 0xaa, 0x14, 0x36, 0x94, 0x2e, 0xc1, 0x9c, 0x22, 0x3f, 0x84, 0x69, 0x21,
0xb5, 0xa2, 0x91, 0xc3, 0xa7, 0x86, 0xd6, 0xeb, 0x12, 0x74, 0x0d, 0x86, 0xdb, 0x1c, 0x40, 0x08,
0x4e, 0x08, 0xc1, 0x61, 0x07, 0x16, 0x0b, 0xaa, 0x4c, 0x61, 0x52, 0x08, 0x3f, 0x31, 0xa8, 0xdd,
0x50, 0xec, 0x3d, 0x74, 0x1b, 0xc0, 0x54, 0xec, 0xbd, 0x86, 0x45, 0x76, 0xd5, 0x43, 0x21, 0x8e,
0x84, 0x38, 0x34, 0x3c, 0x0a, 0x0e, 0x70, 0xa1, 0x1b, 0x50, 0xb2, 0x88, 0xd2, 0xde, 0xd4, 0xb5,
0x7e, 0x39, 0x77, 0x55, 0xba, 0x5e, 0xaa, 0x4f, 0x09, 0x89, 0x12, 0x16, 0xe3, 0xd8, 0xe3, 0x90,
0x3f, 0xcb, 0xc1, 0xc8, 0xb2, 0x42, 0xba, 0x86, 0xde, 0x24, 0x36, 0xfa, 0x08, 0x4a, 0x6c, 0xbb,
0xda, 0x8a, 0xad, 0x70, 0x6d, 0xa3, 0xb7, 0xdf, 0xac, 0xfa, 0xee, 0xe4, 0xad, 0x5e, 0xd5, 0xdc,
0xef, 0xb0, 0x01, 0x5a, 0x65, 0xdc, 0xd5, 0x83, 0x5b, 0xd5, 0xcd, 0x9d, 0x67, 0xa4, 0x65, 0xaf,
0x13, 0x5b, 0xf1, 0xed, 0xf3, 0xc7, 0xb0, 0x87, 0x8a, 0x36, 0xa0, 0x40, 0x4d, 0xd2, 0xe2, 0x96,
0x8d, 0xde, 0xbe, 0x51, 0x3d, 0xd1, 0x59, 0xab, 0x9e, 0x65, 0x4d, 0x93, 0xb4, 0xfc, 0x15, 0x67,
0xbf, 0x30, 0xc7, 0x41, 0x4f, 0x61, 0x98, 0xda, 0x8a, 0xdd, 0xa3, 0xe5, 0x3c, 0x47, 0xac, 0x66,
0x46, 0xe4, 0x52, 0xfe, 0x66, 0x38, 0xbf, 0xb1, 0x40, 0x93, 0xff, 0x33, 0x07, 0xc8, 0xe3, 0x5d,
0x32, 0xf4, 0xb6, 0x6a, 0xab, 0x86, 0x8e, 0x1e, 0x40, 0xc1, 0xee, 0x9b, 0xae, 0x0b, 0x5c, 0x73,
0x0d, 0xda, 0xea, 0x9b, 0xe4, 0xc5, 0x51, 0x65, 0x2e, 0x2e, 0xc1, 0x28, 0x98, 0xcb, 0xa0, 0x35,
0xcf, 0xd4, 0x1c, 0x97, 0xbe, 0x13, 0x56, 0xfd, 0xe2, 0xa8, 0x92, 0x70, 0xd8, 0xaa, 0x1e, 0x52,
0xd8, 0x40, 0x74, 0x00, 0x48, 0x53, 0xa8, 0xbd, 0x65, 0x29, 0x3a, 0x75, 0x34, 0xa9, 0x5d, 0x22,
0x16, 0xe1, 0x8d, 0x6c, 0x9b, 0xc6, 0x24, 0xea, 0x97, 0x84, 0x15, 0x68, 0x2d, 0x86, 0x86, 0x13,
0x34, 0x30, 0x6f, 0xb6, 0x88, 0x42, 0x0d, 0xbd, 0x5c, 0x08, 0x7b, 0x33, 0xe6, 0xa3, 0x58, 0x50,
0xd1, 0xeb, 0x50, 0xec, 0x12, 0x4a, 0x95, 0x0e, 0x29, 0x0f, 0x71, 0xc6, 0x49, 0xc1, 0x58, 0x5c,
0x77, 0x86, 0xb1, 0x4b, 0x97, 0xbf, 0x90, 0x60, 0xdc, 0x5b, 0xb9, 0x35, 0x95, 0xda, 0xe8, 0x77,
0x63, 0x7e, 0x58, 0xcd, 0x36, 0x25, 0x26, 0xcd, 0xbd, 0xd0, 0xf3, 0x79, 0x77, 0x24, 0xe0, 0x83,
0xeb, 0x30, 0xa4, 0xda, 0xa4, 0xcb, 0xf6, 0x21, 0x7f, 0x7d, 0xf4, 0xf6, 0xf5, 0xac, 0x2e, 0x53,
0x1f, 0x17, 0xa0, 0x43, 0xab, 0x4c, 0x1c, 0x3b, 0x28, 0xf2, 0x9f, 0x16, 0x02, 0xe6, 0x33, 0xd7,
0x44, 0x1f, 0x40, 0x89, 0x12, 0x8d, 0xb4, 0x6c, 0xc3, 0x12, 0xe6, 0xbf, 0x95, 0xd1, 0x7c, 0x65,
0x87, 0x68, 0x4d, 0x21, 0x5a, 0x1f, 0x63, 0xf6, 0xbb, 0xbf, 0xb0, 0x07, 0x89, 0xde, 0x81, 0x92,
0x4d, 0xba, 0xa6, 0xa6, 0xd8, 0x44, 0x9c, 0xa3, 0xd7, 0x82, 0x53, 0x60, 0x9e, 0xc3, 0xc0, 0x1a,
0x46, 0x7b, 0x4b, 0xb0, 0xf1, 0xe3, 0xe3, 0x2d, 0x89, 0x3b, 0x8a, 0x3d, 0x18, 0x74, 0x00, 0x13,
0x3d, 0xb3, 0xcd, 0x38, 0x6d, 0x16, 0x05, 0x3b, 0x7d, 0xe1, 0x49, 0xf7, 0xb2, 0xae, 0xcd, 0x76,
0x48, 0xba, 0x3e, 0x27, 0x74, 0x4d, 0x84, 0xc7, 0x71, 0x44, 0x0b, 0x5a, 0x84, 0xc9, 0xae, 0xaa,
0xb3, 0xb8, 0xd4, 0x6f, 0x92, 0x96, 0xa1, 0xb7, 0x29, 0x77, 0xab, 0xa1, 0xfa, 0xbc, 0x00, 0x98,
0x5c, 0x0f, 0x93, 0x71, 0x94, 0x1f, 0xfd, 0x0a, 0x90, 0x3b, 0x8d, 0xc7, 0x4e, 0x10, 0x57, 0x0d,
0x9d, 0xfb, 0x5c, 0xde, 0x77, 0xee, 0xad, 0x18, 0x07, 0x4e, 0x90, 0x42, 0x6b, 0x30, 0x6b, 0x91,
0x03, 0x95, 0xcd, 0xf1, 0x89, 0x4a, 0x6d, 0xc3, 0xea, 0xaf, 0xa9, 0x5d, 0xd5, 0x2e, 0x0f, 0x73,
0x9b, 0xca, 0xc7, 0x47, 0x95, 0x59, 0x9c, 0x40, 0xc7, 0x89, 0x52, 0xf2, 0x9f, 0x0d, 0xc3, 0x64,
0x24, 0xde, 0xa0, 0xa7, 0x30, 0xd7, 0xea, 0x59, 0x16, 0xd1, 0xed, 0x8d, 0x5e, 0x77, 0x87, 0x58,
0xcd, 0xd6, 0x1e, 0x69, 0xf7, 0x34, 0xd2, 0xe6, 0x8e, 0x32, 0x54, 0x5f, 0x10, 0x16, 0xcf, 0x2d,
0x25, 0x72, 0xe1, 0x14, 0x69, 0xb6, 0x0a, 0x3a, 0x1f, 0x5a, 0x57, 0x29, 0xf5, 0x30, 0x73, 0x1c,
0xd3, 0x5b, 0x85, 0x8d, 0x18, 0x07, 0x4e, 0x90, 0x62, 0x36, 0xb6, 0x09, 0x55, 0x2d, 0xd2, 0x8e,
0xda, 0x98, 0x0f, 0xdb, 0xb8, 0x9c, 0xc8, 0x85, 0x53, 0xa4, 0xd1, 0x5d, 0x18, 0x75, 0xb4, 0xf1,
0xfd, 0x13, 0x1b, 0x3d, 0x23, 0xc0, 0x46, 0x37, 0x7c, 0x12, 0x0e, 0xf2, 0xb1, 0xa9, 0x19, 0x3b,
0x94, 0x58, 0x07, 0xa4, 0x9d, 0xbe, 0xc1, 0x9b, 0x31, 0x0e, 0x9c, 0x20, 0xc5, 0xa6, 0xe6, 0x78,
0x60, 0x6c, 0x6a, 0xc3, 0xe1, 0xa9, 0x6d, 0x27, 0x72, 0xe1, 0x14, 0x69, 0xe6, 0xc7, 0x8e, 0xc9,
0x8b, 0x07, 0x8a, 0xaa, 0x29, 0x3b, 0x1a, 0x29, 0x17, 0xc3, 0x7e, 0xbc, 0x11, 0x26, 0xe3, 0x28,
0x3f, 0x7a, 0x0c, 0xd3, 0xce, 0xd0, 0xb6, 0xae, 0x78, 0x20, 0x25, 0x0e, 0xf2, 0x13, 0x01, 0x32,
0xbd, 0x11, 0x65, 0xc0, 0x71, 0x19, 0xf4, 0x00, 0x26, 0x5a, 0x86, 0xa6, 0x71, 0x7f, 0x5c, 0x32,
0x7a, 0xba, 0x5d, 0x1e, 0xe1, 0x28, 0x88, 0x9d, 0xc7, 0xa5, 0x10, 0x05, 0x47, 0x38, 0x11, 0x01,
0x68, 0xb9, 0x09, 0x87, 0x96, 0x81, 0xc7, 0xc7, 0x5b, 0x59, 0x63, 0x80, 0x97, 0xaa, 0xfc, 0x1a,
0xc0, 0x1b, 0xa2, 0x38, 0x00, 0x2c, 0xff, 0x8b, 0x04, 0xf3, 0x29, 0xa1, 0x03, 0xfd, 0x32, 0x94,
0x62, 0x7f, 0x33, 0x92, 0x62, 0x2f, 0xa7, 0x88, 0x05, 0xf2, 0xac, 0x0e, 0xe3, 0x16, 0x9b, 0x95,
0xde, 0x71, 0x58, 0x44, 0x8c, 0xbc, 0x3b, 0x60, 0x1a, 0x38, 0x28, 0xe3, 0xc7, 0xfc, 0xe9, 0xe3,
0xa3, 0xca, 0x78, 0x88, 0x86, 0xc3, 0xf0, 0xf2, 0x9f, 0xe7, 0x00, 0x96, 0x89, 0xa9, 0x19, 0xfd,
0x2e, 0xd1, 0xcf, 0xa3, 0x86, 0xda, 0x0c, 0xd5, 0x50, 0x37, 0x07, 0x6d, 0x8f, 0x67, 0x5a, 0x6a,
0x11, 0xf5, 0x6e, 0xa4, 0x88, 0xaa, 0x65, 0x87, 0x3c, 0xb9, 0x8a, 0xfa, 0xf7, 0x3c, 0xcc, 0xf8,
0xcc, 0x7e, 0x19, 0xf5, 0x30, 0xb4, 0xc7, 0xbf, 0x11, 0xd9, 0xe3, 0xf9, 0x04, 0x91, 0x57, 0x56,
0x47, 0x3d, 0x83, 0x09, 0x56, 0xe5, 0x38, 0x7b, 0xc9, 0x6b, 0xa8, 0xe1, 0x53, 0xd7, 0x50, 0x5e,
0xb6, 0x5b, 0x0b, 0x21, 0xe1, 0x08, 0x72, 0x4a, 0xcd, 0x56, 0xfc, 0x31, 0xd6, 0x6c, 0x5f, 0x4a,
0x30, 0xe1, 0x6f, 0xd3, 0x39, 0x14, 0x6d, 0x1b, 0xe1, 0xa2, 0xed, 0xf5, 0xcc, 0x2e, 0x9a, 0x52,
0xb5, 0xfd, 0x0f, 0x2b, 0xf0, 0x3d, 0x26, 0x76, 0xc0, 0x77, 0x94, 0xd6, 0xfe, 0xe0, 0x3b, 0x1e,
0xfa, 0x4c, 0x02, 0x24, 0xb2, 0xc0, 0xa2, 0xae, 0x1b, 0xb6, 0xe2, 0xc4, 0x4a, 0xc7, 0xac, 0xd5,
0xcc, 0x66, 0xb9, 0x1a, 0xab, 0xdb, 0x31, 0xac, 0x47, 0xba, 0x6d, 0xf5, 0xfd, 0x4d, 0x8e, 0x33,
0xe0, 0x04, 0x03, 0x90, 0x02, 0x60, 0x09, 0xcc, 0x2d, 0x43, 0x1c, 0xe4, 0x9b, 0x19, 0x62, 0x1e,
0x13, 0x58, 0x32, 0xf4, 0x5d, 0xb5, 0xe3, 0x87, 0x1d, 0xec, 0x01, 0xe1, 0x00, 0xe8, 0xa5, 0x47,
0x30, 0x9f, 0x62, 0x2d, 0x9a, 0x82, 0xfc, 0x3e, 0xe9, 0x3b, 0xcb, 0x86, 0xd9, 0x9f, 0x68, 0x16,
0x86, 0x0e, 0x14, 0xad, 0xe7, 0x84, 0xdf, 0x11, 0xec, 0xfc, 0x78, 0x90, 0xbb, 0x2f, 0xc9, 0x5f,
0x0c, 0x05, 0x7d, 0x87, 0x57, 0xcc, 0xd7, 0xd9, 0xa5, 0xd5, 0xd4, 0xd4, 0x96, 0x42, 0x45, 0x21,
0x34, 0xe6, 0x5c, 0x58, 0x9d, 0x31, 0xec, 0x51, 0x43, 0xb5, 0x75, 0xee, 0xd5, 0xd6, 0xd6, 0xf9,
0x97, 0x53, 0x5b, 0xff, 0x1e, 0x94, 0xa8, 0x5b, 0x55, 0x17, 0x38, 0xe4, 0xad, 0x53, 0xc4, 0x57,
0x51, 0x50, 0x7b, 0x0a, 0xbc, 0x52, 0xda, 0x03, 0x4d, 0x2a, 0xa2, 0x87, 0x4e, 0x59, 0x44, 0xbf,
0xd4, 0xc2, 0x97, 0xc5, 0x1b, 0x53, 0xe9, 0x51, 0xd2, 0xe6, 0xb1, 0xad, 0xe4, 0xc7, 0x9b, 0x06,
0x1f, 0xc5, 0x82, 0x8a, 0x3e, 0x08, 0xb9, 0x6c, 0xe9, 0x2c, 0x2e, 0x3b, 0x91, 0xee, 0xae, 0x68,
0x1b, 0xe6, 0x4d, 0xcb, 0xe8, 0x58, 0x84, 0xd2, 0x65, 0xa2, 0xb4, 0x35, 0x55, 0x27, 0xee, 0xfa,
0x38, 0x15, 0xd1, 0xe5, 0xe3, 0xa3, 0xca, 0x7c, 0x23, 0x99, 0x05, 0xa7, 0xc9, 0xca, 0xcf, 0x0b,
0x30, 0x15, 0xcd, 0x80, 0x29, 0x45, 0xaa, 0x74, 0xa6, 0x22, 0xf5, 0x46, 0xe0, 0x30, 0x38, 0x15,
0x7c, 0xe0, 0x05, 0x27, 0x76, 0x20, 0x16, 0x61, 0x52, 0x44, 0x03, 0x97, 0x28, 0xca, 0x74, 0x6f,
0xf7, 0xb7, 0xc3, 0x64, 0x1c, 0xe5, 0x47, 0x0f, 0x61, 0xdc, 0xe2, 0x75, 0xb7, 0x0b, 0xe0, 0xd4,
0xae, 0x17, 0x05, 0xc0, 0x38, 0x0e, 0x12, 0x71, 0x98, 0x97, 0xd5, 0xad, 0x7e, 0x39, 0xea, 0x02,
0x14, 0xc2, 0x75, 0xeb, 0x62, 0x94, 0x01, 0xc7, 0x65, 0xd0, 0x3a, 0xcc, 0xf4, 0xf4, 0x38, 0x94,
0xe3, 0xca, 0x97, 0x05, 0xd4, 0xcc, 0x76, 0x9c, 0x05, 0x27, 0xc9, 0xa1, 0xdd, 0x50, 0x29, 0x3b,
0xcc, 0xc3, 0xf3, 0xed, 0xcc, 0x07, 0x2f, 0x73, 0x2d, 0x9b, 0x50, 0x6e, 0x97, 0xb2, 0x96, 0xdb,
0xf2, 0x3f, 0x4a, 0xc1, 0x24, 0xe4, 0x95, 0xc0, 0x83, 0x5e, 0x99, 0x62, 0x12, 0x81, 0xea, 0xc8,
0x48, 0xae, 0x7e, 0xef, 0x9d, 0xaa, 0xfa, 0xf5, 0x93, 0xe7, 0xe0, 0xf2, 0xf7, 0x73, 0x09, 0xe6,
0x56, 0x9a, 0x8f, 0x2d, 0xa3, 0x67, 0xba, 0xe6, 0x6c, 0x9a, 0xce, 0xd2, 0xfc, 0x1c, 0x0a, 0x56,
0x4f, 0x73, 0xe7, 0xf1, 0x9a, 0x3b, 0x0f, 0xdc, 0xd3, 0xd8, 0x3c, 0x66, 0x22, 0x52, 0xce, 0x24,
0x98, 0x00, 0xda, 0x80, 0x61, 0x4b, 0xd1, 0x3b, 0xc4, 0x4d, 0xab, 0xd7, 0x06, 0x58, 0xbf, 0xba,
0x8c, 0x19, 0x7b, 0xa0, 0xb0, 0xe1, 0xd2, 0x58, 0xa0, 0xc8, 0xff, 0x24, 0xc1, 0xe4, 0x93, 0xad,
0xad, 0xc6, 0xaa, 0xce, 0x4f, 0x34, 0x7f, 0x5b, 0xbd, 0x0a, 0x05, 0x53, 0xb1, 0xf7, 0xa2, 0x99,
0x9e, 0xd1, 0x30, 0xa7, 0xa0, 0x3b, 0x50, 0x62, 0xff, 0x32, 0xbb, 0xf8, 0x91, 0x1a, 0xe1, 0x81,
0xb0, 0xd4, 0x10, 0x63, 0x2f, 0x02, 0x7f, 0x63, 0x8f, 0x13, 0xbd, 0x07, 0x45, 0x16, 0x7f, 0x88,
0xde, 0xce, 0x58, 0xa0, 0x0b, 0xa3, 0xea, 0x8e, 0x90, 0x5f, 0x73, 0x89, 0x01, 0xec, 0xc2, 0xc9,
0xfb, 0x30, 0x1b, 0x98, 0x04, 0x5b, 0xc5, 0xa7, 0x2c, 0xa7, 0xa2, 0x26, 0x0c, 0x31, 0xed, 0x2c,
0x73, 0xe6, 0x33, 0x3c, 0x81, 0x46, 0x16, 0xc2, 0xaf, 0x8f, 0xd8, 0x2f, 0x8a, 0x1d, 0x2c, 0x79,
0x1d, 0xc6, 0xf9, 0x33, 0xb4, 0x61, 0xd9, 0x7c, 0x31, 0xd1, 0x15, 0xc8, 0x77, 0x55, 0x5d, 0x64,
0xe7, 0x51, 0x21, 0x93, 0x67, 0x99, 0x85, 0x8d, 0x73, 0xb2, 0x72, 0x28, 0xe2, 0x95, 0x4f, 0x56,
0x0e, 0x31, 0x1b, 0x97, 0x1f, 0x43, 0x51, 0x6c, 0x52, 0x10, 0x28, 0x7f, 0x32, 0x50, 0x3e, 0x01,
0x68, 0x13, 0x8a, 0xab, 0x8d, 0xba, 0x66, 0x38, 0xb5, 0x5a, 0x4b, 0x6d, 0x5b, 0xd1, 0x1d, 0x5c,
0x5a, 0x5d, 0xc6, 0x98, 0x53, 0x90, 0x0c, 0xc3, 0xe4, 0xb0, 0x45, 0x4c, 0x9b, 0xfb, 0xd1, 0x48,
0x1d, 0x98, 0x6f, 0x3c, 0xe2, 0x23, 0x58, 0x50, 0xe4, 0x3f, 0xce, 0x41, 0x51, 0x2c, 0xc7, 0x39,
0xdc, 0xdd, 0xd6, 0x42, 0x77, 0xb7, 0x37, 0xb2, 0xb9, 0x46, 0xea, 0xc5, 0x6d, 0x2b, 0x72, 0x71,
0xbb, 0x91, 0x11, 0xef, 0xe4, 0x5b, 0xdb, 0xa7, 0x39, 0x98, 0x08, 0x3b, 0x25, 0xba, 0x0b, 0xa3,
0x2c, 0x4d, 0xa9, 0x2d, 0xb2, 0xe1, 0x57, 0xc7, 0xde, 0xd3, 0x4d, 0xd3, 0x27, 0xe1, 0x20, 0x1f,
0xea, 0x78, 0x62, 0xcc, 0x8f, 0xc4, 0xa4, 0xd3, 0x97, 0xb4, 0x67, 0xab, 0x5a, 0xd5, 0xf9, 0x20,
0x53, 0x5d, 0xd5, 0xed, 0x4d, 0xab, 0x69, 0x5b, 0xaa, 0xde, 0x89, 0x29, 0xe2, 0x4e, 0x19, 0x44,
0x46, 0xef, 0xb2, 0x94, 0x49, 0x8d, 0x9e, 0xd5, 0x22, 0x49, 0xa5, 0xaf, 0x5b, 0xb6, 0xb1, 0x03,
0xda, 0x5e, 0x33, 0x5a, 0x8a, 0xe6, 0x6c, 0x0e, 0x26, 0xbb, 0xc4, 0x22, 0x7a, 0x8b, 0xb8, 0xe5,
0xa6, 0x03, 0x81, 0x3d, 0x30, 0xf9, 0xef, 0x25, 0x18, 0x15, 0x6b, 0x71, 0x0e, 0x97, 0x9c, 0xdf,
0x09, 0x5f, 0x72, 0xae, 0x65, 0x8c, 0x1c, 0xc9, 0x37, 0x9c, 0xbf, 0xf2, 0x4d, 0x67, 0xb1, 0x82,
0x1d, 0x97, 0x3d, 0x83, 0xda, 0xd1, 0xe3, 0xc2, 0x4e, 0x39, 0xe6, 0x14, 0xd4, 0x83, 0x29, 0x35,
0x12, 0x5c, 0xc4, 0x9e, 0xd5, 0xb2, 0x59, 0xe2, 0x89, 0xd5, 0xcb, 0x02, 0x7e, 0x2a, 0x4a, 0xc1,
0x31, 0x15, 0x32, 0x81, 0x18, 0x17, 0x7a, 0x07, 0x0a, 0x7b, 0xb6, 0x6d, 0x26, 0x3c, 0x9f, 0x0f,
0x08, 0x69, 0xbe, 0x09, 0x25, 0x3e, 0xbb, 0xad, 0xad, 0x06, 0xe6, 0x50, 0xf2, 0x3f, 0xe4, 0xbc,
0xf5, 0xe0, 0x77, 0x8e, 0xb7, 0xbd, 0xd9, 0x2e, 0x69, 0x0a, 0xa5, 0xdc, 0xb1, 0x9d, 0xfb, 0xf1,
0x6c, 0xc0, 0x70, 0x8f, 0x86, 0x63, 0xdc, 0x68, 0xcb, 0x0f, 0xf5, 0xd2, 0x59, 0x42, 0xfd, 0x68,
0x52, 0x98, 0x47, 0x4f, 0x20, 0x6f, 0x6b, 0x59, 0xef, 0xb9, 0x02, 0x71, 0x6b, 0xad, 0xe9, 0xc7,
0xca, 0xad, 0xb5, 0x26, 0x66, 0x10, 0x68, 0x13, 0x86, 0x58, 0x3a, 0x65, 0xd1, 0x21, 0x9f, 0x3d,
0xda, 0xb0, 0x15, 0xf4, 0x5d, 0x8a, 0xfd, 0xa2, 0xd8, 0xc1, 0x91, 0x3f, 0x86, 0xf1, 0x50, 0x08,
0x41, 0x1f, 0xc1, 0x98, 0x66, 0x28, 0xed, 0xba, 0xa2, 0x29, 0x7a, 0x8b, 0xb8, 0x5f, 0x3b, 0xae,
0x25, 0x9d, 0xbd, 0xb5, 0x00, 0x9f, 0x08, 0x40, 0xb3, 0x42, 0xc9, 0x58, 0x90, 0x86, 0x43, 0x88,
0xb2, 0x02, 0xe0, 0xcf, 0x11, 0x55, 0x60, 0x88, 0x79, 0xaa, 0x93, 0xea, 0x46, 0xea, 0x23, 0xcc,
0x42, 0xe6, 0xc0, 0x14, 0x3b, 0xe3, 0xe8, 0x36, 0x00, 0x25, 0x2d, 0x8b, 0xd8, 0x7c, 0x3b, 0x73,
0xe1, 0x2f, 0xa6, 0x4d, 0x8f, 0x82, 0x03, 0x5c, 0xf2, 0x3f, 0x4b, 0x30, 0xbe, 0x41, 0xec, 0x4f,
0x0c, 0x6b, 0xbf, 0x61, 0x68, 0x6a, 0xab, 0x7f, 0x0e, 0x79, 0x00, 0x87, 0xf2, 0xc0, 0x9b, 0x03,
0x76, 0x26, 0x64, 0x5d, 0x5a, 0x36, 0x90, 0xbf, 0x94, 0x60, 0x3e, 0xc4, 0xf9, 0xc8, 0x3f, 0xfc,
0xdb, 0x30, 0x64, 0x1a, 0x96, 0xed, 0xd6, 0x08, 0xa7, 0x52, 0xc8, 0x22, 0x6c, 0xa0, 0x4a, 0x60,
0x30, 0xd8, 0x41, 0x43, 0x6b, 0x90, 0xb3, 0x0d, 0xe1, 0xaa, 0xa7, 0xc3, 0x24, 0xc4, 0xaa, 0x83,
0xc0, 0xcc, 0x6d, 0x19, 0x38, 0x67, 0x1b, 0x6c, 0x23, 0xca, 0x21, 0xae, 0x60, 0xf8, 0x7a, 0x45,
0x33, 0xc0, 0x50, 0xd8, 0xb5, 0x8c, 0xee, 0x99, 0xe7, 0xe0, 0x6d, 0xc4, 0x8a, 0x65, 0x74, 0x31,
0xc7, 0x92, 0xbf, 0x92, 0x60, 0x3a, 0xc4, 0x79, 0x0e, 0xa9, 0xe3, 0x9d, 0x70, 0xea, 0xb8, 0x71,
0x9a, 0x89, 0xa4, 0x24, 0x90, 0xaf, 0x72, 0x91, 0x69, 0xb0, 0x09, 0xa3, 0x5d, 0x18, 0x35, 0x8d,
0x76, 0xf3, 0x25, 0x7c, 0xdf, 0x9c, 0x64, 0x29, 0xbd, 0xe1, 0x63, 0xe1, 0x20, 0x30, 0x3a, 0x84,
0x69, 0x5d, 0xe9, 0x12, 0x6a, 0x2a, 0x2d, 0xd2, 0x7c, 0x09, 0x2f, 0x3e, 0x17, 0xf9, 0x07, 0x94,
0x28, 0x22, 0x8e, 0x2b, 0x41, 0xeb, 0x50, 0x54, 0x4d, 0x5e, 0x62, 0x8a, 0x5a, 0x62, 0x60, 0x1e,
0x76, 0x0a, 0x52, 0x27, 0x9e, 0x8b, 0x1f, 0xd8, 0xc5, 0x90, 0xff, 0x3a, 0xea, 0x0d, 0xbc, 0x62,
0x79, 0x0c, 0x25, 0xde, 0x69, 0xd2, 0x32, 0x34, 0xf7, 0x53, 0x07, 0xbf, 0x5c, 0x88, 0xb1, 0x17,
0x47, 0x95, 0xcb, 0x09, 0xaf, 0xd8, 0x2e, 0x19, 0x7b, 0xc2, 0x68, 0x03, 0x0a, 0xe6, 0x0f, 0x29,
0xae, 0x78, 0x9a, 0xe4, 0x15, 0x15, 0xc7, 0x91, 0xff, 0x30, 0x1f, 0x31, 0x97, 0x27, 0xcb, 0x67,
0x2f, 0x6d, 0xd7, 0xbd, 0x62, 0x2e, 0x75, 0xe7, 0x77, 0xa0, 0x28, 0x52, 0xad, 0x70, 0xe6, 0x9f,
0x9f, 0xc6, 0x99, 0x83, 0x59, 0xcc, 0xbb, 0x4b, 0xb9, 0x83, 0x2e, 0x30, 0xfa, 0x10, 0x86, 0x89,
0xa3, 0xc2, 0xc9, 0x8d, 0xf7, 0x4e, 0xa3, 0xc2, 0x8f, 0xab, 0x7e, 0x0d, 0x2d, 0xc6, 0x04, 0x2a,
0xfa, 0x25, 0x5b, 0x2f, 0xc6, 0xcb, 0x4a, 0x4e, 0x5a, 0x2e, 0xf0, 0x74, 0x75, 0xc5, 0x99, 0xb6,
0x37, 0xfc, 0xe2, 0xa8, 0x02, 0xfe, 0x4f, 0x1c, 0x94, 0x90, 0xff, 0x55, 0x82, 0x69, 0xbe, 0x42,
0xad, 0x9e, 0xa5, 0xda, 0xfd, 0x73, 0x4b, 0x4c, 0x4f, 0x43, 0x89, 0xe9, 0xce, 0x80, 0x65, 0x89,
0x59, 0x98, 0x9a, 0x9c, 0xbe, 0x96, 0xe0, 0x62, 0x8c, 0xfb, 0x1c, 0xe2, 0xe2, 0x76, 0x38, 0x2e,
0xbe, 0x79, 0xda, 0x09, 0xa5, 0xc4, 0xc6, 0xff, 0x9e, 0x4e, 0x98, 0x0e, 0x3f, 0x29, 0xb7, 0x01,
0x4c, 0x4b, 0x3d, 0x50, 0x35, 0xd2, 0x11, 0x5f, 0xf5, 0x4b, 0x81, 0x9e, 0x2d, 0x8f, 0x82, 0x03,
0x5c, 0x88, 0xc2, 0x5c, 0x9b, 0xec, 0x2a, 0x3d, 0xcd, 0x5e, 0x6c, 0xb7, 0x97, 0x14, 0x53, 0xd9,
0x51, 0x35, 0xd5, 0x56, 0xc5, 0xfb, 0xc7, 0x48, 0xfd, 0xa1, 0xf3, 0xb5, 0x3d, 0x89, 0xe3, 0xc5,
0x51, 0xe5, 0x4a, 0xd2, 0xe7, 0x2e, 0x97, 0xa5, 0x8f, 0x53, 0xa0, 0x51, 0x1f, 0xca, 0x16, 0xf9,
0xb8, 0xa7, 0x5a, 0xa4, 0xbd, 0x6c, 0x19, 0x66, 0x48, 0x6d, 0x9e, 0xab, 0xfd, 0xed, 0xe3, 0xa3,
0x4a, 0x19, 0xa7, 0xf0, 0x0c, 0x56, 0x9c, 0x0a, 0x8f, 0x9e, 0xc1, 0x8c, 0x22, 0xba, 0xeb, 0x82,
0x5a, 0x9d, 0x53, 0x72, 0xff, 0xf8, 0xa8, 0x32, 0xb3, 0x18, 0x27, 0x0f, 0x56, 0x98, 0x04, 0x8a,
0x6a, 0x50, 0x3c, 0xe0, 0x8d, 0x78, 0xb4, 0x3c, 0xc4, 0xf1, 0x59, 0x22, 0x28, 0x3a, 0xbd, 0x79,
0x0c, 0x73, 0x78, 0xa5, 0xc9, 0x4f, 0x9f, 0xcb, 0xc5, 0xee, 0xba, 0xac, 0x96, 0x14, 0x27, 0x9e,
0x3f, 0x81, 0x97, 0xfc, 0xa8, 0xf5, 0xc4, 0x27, 0xe1, 0x20, 0x1f, 0xfa, 0x00, 0x46, 0xf6, 0xc4,
0x83, 0x09, 0x2d, 0x17, 0x33, 0x25, 0xe1, 0xd0, 0x03, 0x4b, 0x7d, 0x5a, 0xa8, 0x18, 0x71, 0x87,
0x29, 0xf6, 0x11, 0xd1, 0xeb, 0x50, 0xe4, 0x3f, 0x56, 0x97, 0xf9, 0xfb, 0x62, 0xc9, 0x8f, 0x6d,
0x4f, 0x9c, 0x61, 0xec, 0xd2, 0x5d, 0xd6, 0xd5, 0xc6, 0x12, 0x7f, 0xe7, 0x8e, 0xb0, 0xae, 0x36,
0x96, 0xb0, 0x4b, 0x47, 0x1f, 0x41, 0x91, 0x92, 0x35, 0x55, 0xef, 0x1d, 0x96, 0x21, 0xd3, 0x57,
0xf2, 0xe6, 0x23, 0xce, 0x1d, 0x79, 0xe9, 0xf3, 0x35, 0x08, 0x3a, 0x76, 0x61, 0xd1, 0x1e, 0x8c,
0x58, 0x3d, 0x7d, 0x91, 0x6e, 0x53, 0x62, 0x95, 0x47, 0xb9, 0x8e, 0x41, 0xe1, 0x1c, 0xbb, 0xfc,
0x51, 0x2d, 0xde, 0x0a, 0x79, 0x1c, 0xd8, 0x07, 0x47, 0x7b, 0x00, 0xfc, 0x07, 0x7f, 0x54, 0x2c,
0xcf, 0x71, 0x55, 0xf7, 0xb3, 0xa8, 0x4a, 0x7a, 0xbb, 0x14, 0x1f, 0x16, 0x3c, 0x32, 0x0e, 0x60,
0xa3, 0x3f, 0x92, 0x00, 0xd1, 0x9e, 0x69, 0x6a, 0xa4, 0x4b, 0x74, 0x5b, 0xd1, 0xf8, 0x28, 0x2d,
0x8f, 0x71, 0x95, 0x6f, 0x0f, 0x5a, 0xc1, 0x98, 0x60, 0x54, 0xb5, 0xf7, 0xbd, 0x20, 0xce, 0x8a,
0x13, 0xf4, 0xb2, 0x4d, 0xdc, 0x15, 0xb3, 0x1e, 0xcf, 0xb4, 0x89, 0xc9, 0xcf, 0xb5, 0xfe, 0x26,
0x0a, 0x3a, 0x76, 0x61, 0xd1, 0x53, 0x98, 0x73, 0x3b, 0x46, 0xb1, 0x61, 0xd8, 0x2b, 0xaa, 0x46,
0x68, 0x9f, 0xda, 0xa4, 0x5b, 0x9e, 0xe0, 0x0e, 0xe6, 0xb5, 0xcd, 0xe0, 0x44, 0x2e, 0x9c, 0x22,
0x8d, 0xba, 0x50, 0x71, 0x83, 0x13, 0x3b, 0xb9, 0x5e, 0x74, 0x7c, 0x44, 0x5b, 0x8a, 0xe6, 0x7c,
0x42, 0x99, 0xe4, 0x0a, 0x5e, 0x3b, 0x3e, 0xaa, 0x54, 0x96, 0x4f, 0x66, 0xc5, 0x83, 0xb0, 0xd0,
0x7b, 0x50, 0x56, 0xd2, 0xf4, 0x4c, 0x71, 0x3d, 0x3f, 0x65, 0x11, 0x2f, 0x55, 0x41, 0xaa, 0x34,
0xb2, 0x61, 0x4a, 0x09, 0xf7, 0xee, 0xd2, 0xf2, 0x74, 0xa6, 0xd7, 0xd8, 0x48, 0xcb, 0xaf, 0xff,
0x70, 0x12, 0x21, 0x50, 0x1c, 0xd3, 0x80, 0x7e, 0x1f, 0x90, 0x12, 0x6d, 0x37, 0xa6, 0x65, 0x94,
0x29, 0xd1, 0xc5, 0xfa, 0x94, 0x7d, 0xb7, 0x8b, 0x91, 0x28, 0x4e, 0xd0, 0xc3, 0x0a, 0x74, 0x25,
0xd2, 0x22, 0x4d, 0xcb, 0xf3, 0x5c, 0x79, 0x2d, 0x9b, 0x72, 0x4f, 0x2e, 0xf0, 0xa5, 0x28, 0x8a,
0x88, 0xe3, 0x4a, 0xd0, 0x1a, 0xcc, 0x8a, 0xc1, 0x6d, 0x9d, 0x2a, 0xbb, 0xa4, 0xd9, 0xa7, 0x2d,
0x5b, 0xa3, 0xe5, 0x19, 0x1e, 0xdf, 0xf9, 0xd7, 0xca, 0xc5, 0x04, 0x3a, 0x4e, 0x94, 0x42, 0x6f,
0xc3, 0xd4, 0xae, 0x61, 0xed, 0xa8, 0xed, 0x36, 0xd1, 0x5d, 0xa4, 0x59, 0x8e, 0xc4, 0xdf, 0x81,
0x56, 0x22, 0x34, 0x1c, 0xe3, 0x46, 0x14, 0x2e, 0x0a, 0xe4, 0x86, 0x65, 0xb4, 0xd6, 0x8d, 0x9e,
0x6e, 0x3b, 0x65, 0xdf, 0x45, 0x2f, 0x8d, 0x5e, 0x5c, 0x4c, 0x62, 0x78, 0x71, 0x54, 0xb9, 0x9a,
0x5c, 0xe5, 0xfb, 0x4c, 0x38, 0x19, 0x1b, 0x99, 0x30, 0x26, 0x1a, 0xdf, 0xf9, 0x83, 0x54, 0xb9,
0xcc, 0x8f, 0xfe, 0x83, 0xc1, 0x01, 0xcf, 0x13, 0x89, 0x9e, 0xff, 0xa9, 0xe3, 0xa3, 0xca, 0x58,
0x90, 0x01, 0x87, 0x34, 0xf0, 0x46, 0x27, 0xf1, 0x79, 0xed, 0x7c, 0x9a, 0xc5, 0x4f, 0xd7, 0xe8,
0xe4, 0x9b, 0xf6, 0xd2, 0x1a, 0x9d, 0x02, 0x90, 0x27, 0x3f, 0x99, 0xff, 0x57, 0x0e, 0x66, 0x7c,
0xe6, 0xcc, 0x8d, 0x4e, 0x09, 0x22, 0xbf, 0x6e, 0x18, 0xcf, 0xd6, 0x7c, 0xe4, 0x2f, 0xdd, 0xff,
0xbd, 0xe6, 0x23, 0xdf, 0xb6, 0x94, 0xdb, 0xc3, 0xdf, 0xe6, 0x82, 0x13, 0x38, 0x65, 0x07, 0xcc,
0x4b, 0xe8, 0x99, 0xfe, 0xd1, 0x35, 0xd1, 0xc8, 0x5f, 0xe7, 0x61, 0x2a, 0x7a, 0x1a, 0x43, 0x8d,
0x12, 0xd2, 0xc0, 0x46, 0x89, 0x06, 0xcc, 0xee, 0xf6, 0x34, 0xad, 0xcf, 0xe7, 0x10, 0xe8, 0x96,
0x70, 0x3e, 0x59, 0xfe, 0x54, 0x48, 0xce, 0xae, 0x24, 0xf0, 0xe0, 0x44, 0xc9, 0x78, 0xdf, 0x44,
0xe1, 0x87, 0xf6, 0x4d, 0x0c, 0x9d, 0xa1, 0x6f, 0x22, 0xb9, 0xf5, 0x24, 0x7f, 0xa6, 0xd6, 0x93,
0xb3, 0x34, 0x4d, 0x24, 0x04, 0xb1, 0x81, 0x0d, 0xc0, 0xbf, 0x80, 0x89, 0x70, 0x23, 0x8f, 0xb3,
0x97, 0x4e, 0x2f, 0x91, 0xf8, 0x34, 0x1c, 0xd8, 0x4b, 0x67, 0x1c, 0x7b, 0x1c, 0xf2, 0xb1, 0x04,
0x73, 0xc9, 0x0d, 0xbb, 0x48, 0x83, 0x89, 0xae, 0x72, 0x18, 0x6c, 0xa2, 0x96, 0xce, 0xf8, 0x32,
0xc6, 0x3b, 0x38, 0xd6, 0x43, 0x58, 0x38, 0x82, 0x8d, 0xde, 0x87, 0x52, 0x57, 0x39, 0x6c, 0xf6,
0xac, 0x0e, 0x39, 0xf3, 0x0b, 0x1c, 0x3f, 0x46, 0xeb, 0x02, 0x05, 0x7b, 0x78, 0xf2, 0xf7, 0x12,
0xcc, 0xa7, 0xf4, 0x65, 0xfc, 0x3f, 0x9a, 0xe5, 0x5f, 0x4a, 0xf0, 0x93, 0xd4, 0x6b, 0x18, 0xba,
0x17, 0x6a, 0x21, 0x91, 0x23, 0x2d, 0x24, 0x28, 0x2e, 0xf8, 0x8a, 0x3a, 0x48, 0x3e, 0x97, 0xa0,
0x9c, 0x76, 0x2f, 0x45, 0x77, 0x43, 0x46, 0xfe, 0x2c, 0x62, 0xe4, 0x74, 0x4c, 0xee, 0x15, 0xd9,
0xf8, 0x6f, 0x12, 0x5c, 0x3e, 0xa1, 0xbe, 0xf3, 0xae, 0x3f, 0xa4, 0x1d, 0xe4, 0xe2, 0x4f, 0xe2,
0xe2, 0x7b, 0x9a, 0x7f, 0xfd, 0x49, 0xe0, 0xc1, 0xa9, 0xd2, 0x68, 0x1b, 0xe6, 0xc5, 0xdd, 0x2b,
0x4a, 0x13, 0xa5, 0x0b, 0xef, 0xb4, 0x5b, 0x4e, 0x66, 0xc1, 0x69, 0xb2, 0xf2, 0xdf, 0x48, 0x30,
0x97, 0xfc, 0xe0, 0x80, 0xde, 0x0a, 0x2d, 0x79, 0x25, 0xb2, 0xe4, 0x93, 0x11, 0x29, 0xb1, 0xe0,
0x1f, 0xc2, 0x84, 0x78, 0x96, 0x10, 0x30, 0xc2, 0x99, 0xe5, 0xa4, 0xec, 0x24, 0x20, 0xdc, 0xe2,
0x98, 0x1f, 0x93, 0xf0, 0x18, 0x8e, 0xa0, 0xc9, 0x9f, 0xe6, 0x60, 0xa8, 0xd9, 0x52, 0x34, 0x72,
0x0e, 0xb5, 0xf1, 0xaf, 0x42, 0xb5, 0xf1, 0xa0, 0xff, 0xc3, 0xc6, 0xad, 0x4a, 0x2d, 0x8b, 0x71,
0xa4, 0x2c, 0x7e, 0x23, 0x13, 0xda, 0xc9, 0x15, 0xf1, 0x6f, 0xc1, 0x88, 0xa7, 0xf4, 0x74, 0x89,
0x5a, 0xfe, 0x8b, 0x1c, 0x8c, 0x06, 0x54, 0x9c, 0x32, 0xcd, 0xef, 0x86, 0x6a, 0x9b, 0x7c, 0x86,
0x47, 0xa0, 0x80, 0xae, 0xaa, 0x5b, 0xcd, 0x38, 0x3d, 0xd8, 0x7e, 0xd7, 0x6d, 0xbc, 0xc8, 0xf9,
0x05, 0x4c, 0xd8, 0x8a, 0xd5, 0x21, 0xb6, 0xf7, 0x51, 0xc4, 0xe9, 0x11, 0xf3, 0xfe, 0x33, 0xc0,
0x56, 0x88, 0x8a, 0x23, 0xdc, 0x97, 0x1e, 0xc2, 0x78, 0x48, 0xd9, 0xa9, 0x5a, 0xa8, 0xff, 0x4e,
0x82, 0x9f, 0x0d, 0x7c, 0x48, 0x42, 0xf5, 0xd0, 0x21, 0xa9, 0x46, 0x0e, 0xc9, 0x42, 0x3a, 0xc0,
0xab, 0x6b, 0xc5, 0xab, 0xdf, 0x7c, 0xfe, 0xdd, 0xc2, 0x85, 0x6f, 0xbe, 0x5b, 0xb8, 0xf0, 0xed,
0x77, 0x0b, 0x17, 0xfe, 0xe0, 0x78, 0x41, 0x7a, 0x7e, 0xbc, 0x20, 0x7d, 0x73, 0xbc, 0x20, 0x7d,
0x7b, 0xbc, 0x20, 0xfd, 0xc7, 0xf1, 0x82, 0xf4, 0x27, 0xdf, 0x2f, 0x5c, 0x78, 0xbf, 0x28, 0xe0,
0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x2f, 0x59, 0xc3, 0x16, 0x3f, 0x00, 0x00,
0x20, 0xb7, 0x20, 0xc7, 0xe4, 0x60, 0x18, 0x09, 0xe2, 0x00, 0x42, 0xe0, 0x04, 0x06, 0x72, 0x88,
0x4f, 0x44, 0x4c, 0x9f, 0x82, 0x9c, 0x72, 0x0b, 0x74, 0x0a, 0xba, 0xa7, 0xe7, 0x7f, 0x86, 0x3b,
0xa4, 0x25, 0x22, 0x0e, 0x72, 0x12, 0xb7, 0xab, 0xea, 0xab, 0xea, 0xee, 0xea, 0xaa, 0xea, 0x9e,
0x12, 0xac, 0xec, 0xdf, 0xa7, 0x55, 0xd5, 0xa8, 0xed, 0xf7, 0x76, 0x88, 0xa5, 0x13, 0x9b, 0xd0,
0xda, 0x01, 0xd1, 0xdb, 0x86, 0x55, 0x13, 0x04, 0xc5, 0x54, 0x6b, 0xe4, 0xd0, 0x26, 0x3a, 0x55,
0x0d, 0x9d, 0xd6, 0x0e, 0x6e, 0xed, 0x10, 0x5b, 0xb9, 0x55, 0xeb, 0x10, 0x9d, 0x58, 0x8a, 0x4d,
0xda, 0x55, 0xd3, 0x32, 0x6c, 0x03, 0x5d, 0x71, 0xd8, 0xab, 0x8a, 0xa9, 0x56, 0x7d, 0xf6, 0xaa,
0x60, 0xbf, 0x74, 0xb3, 0xa3, 0xda, 0x7b, 0xbd, 0x9d, 0x6a, 0xcb, 0xe8, 0xd6, 0x3a, 0x46, 0xc7,
0xa8, 0x71, 0xa9, 0x9d, 0xde, 0x2e, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x1c, 0xb4, 0x4b, 0x72, 0x40,
0x79, 0xcb, 0xb0, 0x48, 0xed, 0x20, 0xa6, 0xf1, 0xd2, 0x1d, 0x9f, 0xa7, 0xab, 0xb4, 0xf6, 0x54,
0x9d, 0x58, 0xfd, 0x9a, 0xb9, 0xdf, 0x61, 0x03, 0xb4, 0xd6, 0x25, 0xb6, 0x92, 0x24, 0x55, 0x4b,
0x93, 0xb2, 0x7a, 0xba, 0xad, 0x76, 0x49, 0x4c, 0xe0, 0xde, 0x20, 0x01, 0xda, 0xda, 0x23, 0x5d,
0x25, 0x26, 0xf7, 0x56, 0x9a, 0x5c, 0xcf, 0x56, 0xb5, 0x9a, 0xaa, 0xdb, 0xd4, 0xb6, 0xa2, 0x42,
0xf2, 0x1d, 0x98, 0x5a, 0xd4, 0x34, 0xe3, 0x13, 0xd2, 0x5e, 0x6a, 0xae, 0x2e, 0x5b, 0xea, 0x01,
0xb1, 0xd0, 0x55, 0x28, 0xe8, 0x4a, 0x97, 0x94, 0xa5, 0xab, 0xd2, 0xf5, 0x91, 0xfa, 0xd8, 0xf3,
0xa3, 0xca, 0x85, 0xe3, 0xa3, 0x4a, 0x61, 0x43, 0xe9, 0x12, 0xcc, 0x29, 0xf2, 0x43, 0x98, 0x16,
0x52, 0x2b, 0x1a, 0x39, 0x7c, 0x6a, 0x68, 0xbd, 0x2e, 0x41, 0xd7, 0x60, 0xb8, 0xcd, 0x01, 0x84,
0xe0, 0x84, 0x10, 0x1c, 0x76, 0x60, 0xb1, 0xa0, 0xca, 0x14, 0x26, 0x85, 0xf0, 0x13, 0x83, 0xda,
0x0d, 0xc5, 0xde, 0x43, 0xb7, 0x01, 0x4c, 0xc5, 0xde, 0x6b, 0x58, 0x64, 0x57, 0x3d, 0x14, 0xe2,
0x48, 0x88, 0x43, 0xc3, 0xa3, 0xe0, 0x00, 0x17, 0xba, 0x01, 0x25, 0x8b, 0x28, 0xed, 0x4d, 0x5d,
0xeb, 0x97, 0x73, 0x57, 0xa5, 0xeb, 0xa5, 0xfa, 0x94, 0x90, 0x28, 0x61, 0x31, 0x8e, 0x3d, 0x0e,
0xf9, 0xb3, 0x1c, 0x8c, 0x2c, 0x2b, 0xa4, 0x6b, 0xe8, 0x4d, 0x62, 0xa3, 0x8f, 0xa0, 0xc4, 0xb6,
0xab, 0xad, 0xd8, 0x0a, 0xd7, 0x36, 0x7a, 0xfb, 0xcd, 0xaa, 0xef, 0x4e, 0xde, 0xea, 0x55, 0xcd,
0xfd, 0x0e, 0x1b, 0xa0, 0x55, 0xc6, 0x5d, 0x3d, 0xb8, 0x55, 0xdd, 0xdc, 0x79, 0x46, 0x5a, 0xf6,
0x3a, 0xb1, 0x15, 0xdf, 0x3e, 0x7f, 0x0c, 0x7b, 0xa8, 0x68, 0x03, 0x0a, 0xd4, 0x24, 0x2d, 0x6e,
0xd9, 0xe8, 0xed, 0x1b, 0xd5, 0x13, 0x9d, 0xb5, 0xea, 0x59, 0xd6, 0x34, 0x49, 0xcb, 0x5f, 0x71,
0xf6, 0x0b, 0x73, 0x1c, 0xf4, 0x14, 0x86, 0xa9, 0xad, 0xd8, 0x3d, 0x5a, 0xce, 0x73, 0xc4, 0x6a,
0x66, 0x44, 0x2e, 0xe5, 0x6f, 0x86, 0xf3, 0x1b, 0x0b, 0x34, 0xf9, 0x3f, 0x72, 0x80, 0x3c, 0xde,
0x25, 0x43, 0x6f, 0xab, 0xb6, 0x6a, 0xe8, 0xe8, 0x01, 0x14, 0xec, 0xbe, 0xe9, 0xba, 0xc0, 0x35,
0xd7, 0xa0, 0xad, 0xbe, 0x49, 0x5e, 0x1c, 0x55, 0xe6, 0xe2, 0x12, 0x8c, 0x82, 0xb9, 0x0c, 0x5a,
0xf3, 0x4c, 0xcd, 0x71, 0xe9, 0x3b, 0x61, 0xd5, 0x2f, 0x8e, 0x2a, 0x09, 0x87, 0xad, 0xea, 0x21,
0x85, 0x0d, 0x44, 0x07, 0x80, 0x34, 0x85, 0xda, 0x5b, 0x96, 0xa2, 0x53, 0x47, 0x93, 0xda, 0x25,
0x62, 0x11, 0xde, 0xc8, 0xb6, 0x69, 0x4c, 0xa2, 0x7e, 0x49, 0x58, 0x81, 0xd6, 0x62, 0x68, 0x38,
0x41, 0x03, 0xf3, 0x66, 0x8b, 0x28, 0xd4, 0xd0, 0xcb, 0x85, 0xb0, 0x37, 0x63, 0x3e, 0x8a, 0x05,
0x15, 0xbd, 0x0e, 0xc5, 0x2e, 0xa1, 0x54, 0xe9, 0x90, 0xf2, 0x10, 0x67, 0x9c, 0x14, 0x8c, 0xc5,
0x75, 0x67, 0x18, 0xbb, 0x74, 0xf9, 0x0b, 0x09, 0xc6, 0xbd, 0x95, 0x5b, 0x53, 0xa9, 0x8d, 0x7e,
0x27, 0xe6, 0x87, 0xd5, 0x6c, 0x53, 0x62, 0xd2, 0xdc, 0x0b, 0x3d, 0x9f, 0x77, 0x47, 0x02, 0x3e,
0xb8, 0x0e, 0x43, 0xaa, 0x4d, 0xba, 0x6c, 0x1f, 0xf2, 0xd7, 0x47, 0x6f, 0x5f, 0xcf, 0xea, 0x32,
0xf5, 0x71, 0x01, 0x3a, 0xb4, 0xca, 0xc4, 0xb1, 0x83, 0x22, 0xff, 0x49, 0x21, 0x60, 0x3e, 0x73,
0x4d, 0xf4, 0x01, 0x94, 0x28, 0xd1, 0x48, 0xcb, 0x36, 0x2c, 0x61, 0xfe, 0x5b, 0x19, 0xcd, 0x57,
0x76, 0x88, 0xd6, 0x14, 0xa2, 0xf5, 0x31, 0x66, 0xbf, 0xfb, 0x0b, 0x7b, 0x90, 0xe8, 0x1d, 0x28,
0xd9, 0xa4, 0x6b, 0x6a, 0x8a, 0x4d, 0xc4, 0x39, 0x7a, 0x2d, 0x38, 0x05, 0xe6, 0x39, 0x0c, 0xac,
0x61, 0xb4, 0xb7, 0x04, 0x1b, 0x3f, 0x3e, 0xde, 0x92, 0xb8, 0xa3, 0xd8, 0x83, 0x41, 0x07, 0x30,
0xd1, 0x33, 0xdb, 0x8c, 0xd3, 0x66, 0x51, 0xb0, 0xd3, 0x17, 0x9e, 0x74, 0x2f, 0xeb, 0xda, 0x6c,
0x87, 0xa4, 0xeb, 0x73, 0x42, 0xd7, 0x44, 0x78, 0x1c, 0x47, 0xb4, 0xa0, 0x45, 0x98, 0xec, 0xaa,
0x3a, 0x8b, 0x4b, 0xfd, 0x26, 0x69, 0x19, 0x7a, 0x9b, 0x72, 0xb7, 0x1a, 0xaa, 0xcf, 0x0b, 0x80,
0xc9, 0xf5, 0x30, 0x19, 0x47, 0xf9, 0xd1, 0xaf, 0x00, 0xb9, 0xd3, 0x78, 0xec, 0x04, 0x71, 0xd5,
0xd0, 0xb9, 0xcf, 0xe5, 0x7d, 0xe7, 0xde, 0x8a, 0x71, 0xe0, 0x04, 0x29, 0xb4, 0x06, 0xb3, 0x16,
0x39, 0x50, 0xd9, 0x1c, 0x9f, 0xa8, 0xd4, 0x36, 0xac, 0xfe, 0x9a, 0xda, 0x55, 0xed, 0xf2, 0x30,
0xb7, 0xa9, 0x7c, 0x7c, 0x54, 0x99, 0xc5, 0x09, 0x74, 0x9c, 0x28, 0x25, 0xff, 0xe9, 0x30, 0x4c,
0x46, 0xe2, 0x0d, 0x7a, 0x0a, 0x73, 0xad, 0x9e, 0x65, 0x11, 0xdd, 0xde, 0xe8, 0x75, 0x77, 0x88,
0xd5, 0x6c, 0xed, 0x91, 0x76, 0x4f, 0x23, 0x6d, 0xee, 0x28, 0x43, 0xf5, 0x05, 0x61, 0xf1, 0xdc,
0x52, 0x22, 0x17, 0x4e, 0x91, 0x66, 0xab, 0xa0, 0xf3, 0xa1, 0x75, 0x95, 0x52, 0x0f, 0x33, 0xc7,
0x31, 0xbd, 0x55, 0xd8, 0x88, 0x71, 0xe0, 0x04, 0x29, 0x66, 0x63, 0x9b, 0x50, 0xd5, 0x22, 0xed,
0xa8, 0x8d, 0xf9, 0xb0, 0x8d, 0xcb, 0x89, 0x5c, 0x38, 0x45, 0x1a, 0xdd, 0x85, 0x51, 0x47, 0x1b,
0xdf, 0x3f, 0xb1, 0xd1, 0x33, 0x02, 0x6c, 0x74, 0xc3, 0x27, 0xe1, 0x20, 0x1f, 0x9b, 0x9a, 0xb1,
0x43, 0x89, 0x75, 0x40, 0xda, 0xe9, 0x1b, 0xbc, 0x19, 0xe3, 0xc0, 0x09, 0x52, 0x6c, 0x6a, 0x8e,
0x07, 0xc6, 0xa6, 0x36, 0x1c, 0x9e, 0xda, 0x76, 0x22, 0x17, 0x4e, 0x91, 0x66, 0x7e, 0xec, 0x98,
0xbc, 0x78, 0xa0, 0xa8, 0x9a, 0xb2, 0xa3, 0x91, 0x72, 0x31, 0xec, 0xc7, 0x1b, 0x61, 0x32, 0x8e,
0xf2, 0xa3, 0xc7, 0x30, 0xed, 0x0c, 0x6d, 0xeb, 0x8a, 0x07, 0x52, 0xe2, 0x20, 0x3f, 0x11, 0x20,
0xd3, 0x1b, 0x51, 0x06, 0x1c, 0x97, 0x41, 0x0f, 0x60, 0xa2, 0x65, 0x68, 0x1a, 0xf7, 0xc7, 0x25,
0xa3, 0xa7, 0xdb, 0xe5, 0x11, 0x8e, 0x82, 0xd8, 0x79, 0x5c, 0x0a, 0x51, 0x70, 0x84, 0x13, 0x11,
0x80, 0x96, 0x9b, 0x70, 0x68, 0x19, 0x78, 0x7c, 0xbc, 0x95, 0x35, 0x06, 0x78, 0xa9, 0xca, 0xaf,
0x01, 0xbc, 0x21, 0x8a, 0x03, 0xc0, 0xf2, 0x3f, 0x49, 0x30, 0x9f, 0x12, 0x3a, 0xd0, 0x2f, 0x43,
0x29, 0xf6, 0x37, 0x22, 0x29, 0xf6, 0x72, 0x8a, 0x58, 0x20, 0xcf, 0xea, 0x30, 0x6e, 0xb1, 0x59,
0xe9, 0x1d, 0x87, 0x45, 0xc4, 0xc8, 0xbb, 0x03, 0xa6, 0x81, 0x83, 0x32, 0x7e, 0xcc, 0x9f, 0x3e,
0x3e, 0xaa, 0x8c, 0x87, 0x68, 0x38, 0x0c, 0x2f, 0xff, 0x59, 0x0e, 0x60, 0x99, 0x98, 0x9a, 0xd1,
0xef, 0x12, 0xfd, 0x3c, 0x6a, 0xa8, 0xcd, 0x50, 0x0d, 0x75, 0x73, 0xd0, 0xf6, 0x78, 0xa6, 0xa5,
0x16, 0x51, 0xef, 0x46, 0x8a, 0xa8, 0x5a, 0x76, 0xc8, 0x93, 0xab, 0xa8, 0x7f, 0xcb, 0xc3, 0x8c,
0xcf, 0xec, 0x97, 0x51, 0x0f, 0x43, 0x7b, 0xfc, 0xeb, 0x91, 0x3d, 0x9e, 0x4f, 0x10, 0x79, 0x65,
0x75, 0xd4, 0x33, 0x98, 0x60, 0x55, 0x8e, 0xb3, 0x97, 0xbc, 0x86, 0x1a, 0x3e, 0x75, 0x0d, 0xe5,
0x65, 0xbb, 0xb5, 0x10, 0x12, 0x8e, 0x20, 0xa7, 0xd4, 0x6c, 0xc5, 0x1f, 0x63, 0xcd, 0xf6, 0xa5,
0x04, 0x13, 0xfe, 0x36, 0x9d, 0x43, 0xd1, 0xb6, 0x11, 0x2e, 0xda, 0x5e, 0xcf, 0xec, 0xa2, 0x29,
0x55, 0xdb, 0x7f, 0xb3, 0x02, 0xdf, 0x63, 0x62, 0x07, 0x7c, 0x47, 0x69, 0xed, 0x0f, 0xbe, 0xe3,
0xa1, 0xcf, 0x24, 0x40, 0x22, 0x0b, 0x2c, 0xea, 0xba, 0x61, 0x2b, 0x4e, 0xac, 0x74, 0xcc, 0x5a,
0xcd, 0x6c, 0x96, 0xab, 0xb1, 0xba, 0x1d, 0xc3, 0x7a, 0xa4, 0xdb, 0x56, 0xdf, 0xdf, 0xe4, 0x38,
0x03, 0x4e, 0x30, 0x00, 0x29, 0x00, 0x96, 0xc0, 0xdc, 0x32, 0xc4, 0x41, 0xbe, 0x99, 0x21, 0xe6,
0x31, 0x81, 0x25, 0x43, 0xdf, 0x55, 0x3b, 0x7e, 0xd8, 0xc1, 0x1e, 0x10, 0x0e, 0x80, 0x5e, 0x7a,
0x04, 0xf3, 0x29, 0xd6, 0xa2, 0x29, 0xc8, 0xef, 0x93, 0xbe, 0xb3, 0x6c, 0x98, 0xfd, 0x89, 0x66,
0x61, 0xe8, 0x40, 0xd1, 0x7a, 0x4e, 0xf8, 0x1d, 0xc1, 0xce, 0x8f, 0x07, 0xb9, 0xfb, 0x92, 0xfc,
0xc5, 0x50, 0xd0, 0x77, 0x78, 0xc5, 0x7c, 0x9d, 0x5d, 0x5a, 0x4d, 0x4d, 0x6d, 0x29, 0x54, 0x14,
0x42, 0x63, 0xce, 0x85, 0xd5, 0x19, 0xc3, 0x1e, 0x35, 0x54, 0x5b, 0xe7, 0x5e, 0x6d, 0x6d, 0x9d,
0x7f, 0x39, 0xb5, 0xf5, 0xef, 0x42, 0x89, 0xba, 0x55, 0x75, 0x81, 0x43, 0xde, 0x3a, 0x45, 0x7c,
0x15, 0x05, 0xb5, 0xa7, 0xc0, 0x2b, 0xa5, 0x3d, 0xd0, 0xa4, 0x22, 0x7a, 0xe8, 0x94, 0x45, 0xf4,
0x4b, 0x2d, 0x7c, 0x59, 0xbc, 0x31, 0x95, 0x1e, 0x25, 0x6d, 0x1e, 0xdb, 0x4a, 0x7e, 0xbc, 0x69,
0xf0, 0x51, 0x2c, 0xa8, 0xe8, 0x83, 0x90, 0xcb, 0x96, 0xce, 0xe2, 0xb2, 0x13, 0xe9, 0xee, 0x8a,
0xb6, 0x61, 0xde, 0xb4, 0x8c, 0x8e, 0x45, 0x28, 0x5d, 0x26, 0x4a, 0x5b, 0x53, 0x75, 0xe2, 0xae,
0x8f, 0x53, 0x11, 0x5d, 0x3e, 0x3e, 0xaa, 0xcc, 0x37, 0x92, 0x59, 0x70, 0x9a, 0xac, 0xfc, 0xbc,
0x00, 0x53, 0xd1, 0x0c, 0x98, 0x52, 0xa4, 0x4a, 0x67, 0x2a, 0x52, 0x6f, 0x04, 0x0e, 0x83, 0x53,
0xc1, 0x07, 0x5e, 0x70, 0x62, 0x07, 0x62, 0x11, 0x26, 0x45, 0x34, 0x70, 0x89, 0xa2, 0x4c, 0xf7,
0x76, 0x7f, 0x3b, 0x4c, 0xc6, 0x51, 0x7e, 0xf4, 0x10, 0xc6, 0x2d, 0x5e, 0x77, 0xbb, 0x00, 0x4e,
0xed, 0x7a, 0x51, 0x00, 0x8c, 0xe3, 0x20, 0x11, 0x87, 0x79, 0x59, 0xdd, 0xea, 0x97, 0xa3, 0x2e,
0x40, 0x21, 0x5c, 0xb7, 0x2e, 0x46, 0x19, 0x70, 0x5c, 0x06, 0xad, 0xc3, 0x4c, 0x4f, 0x8f, 0x43,
0x39, 0xae, 0x7c, 0x59, 0x40, 0xcd, 0x6c, 0xc7, 0x59, 0x70, 0x92, 0x1c, 0xda, 0x0d, 0x95, 0xb2,
0xc3, 0x3c, 0x3c, 0xdf, 0xce, 0x7c, 0xf0, 0x32, 0xd7, 0xb2, 0x09, 0xe5, 0x76, 0x29, 0x6b, 0xb9,
0x2d, 0xff, 0xbd, 0x14, 0x4c, 0x42, 0x5e, 0x09, 0x3c, 0xe8, 0x95, 0x29, 0x26, 0x11, 0xa8, 0x8e,
0x8c, 0xe4, 0xea, 0xf7, 0xde, 0xa9, 0xaa, 0x5f, 0x3f, 0x79, 0x0e, 0x2e, 0x7f, 0x3f, 0x97, 0x60,
0x6e, 0xa5, 0xf9, 0xd8, 0x32, 0x7a, 0xa6, 0x6b, 0xce, 0xa6, 0xe9, 0x2c, 0xcd, 0xcf, 0xa1, 0x60,
0xf5, 0x34, 0x77, 0x1e, 0xaf, 0xb9, 0xf3, 0xc0, 0x3d, 0x8d, 0xcd, 0x63, 0x26, 0x22, 0xe5, 0x4c,
0x82, 0x09, 0xa0, 0x0d, 0x18, 0xb6, 0x14, 0xbd, 0x43, 0xdc, 0xb4, 0x7a, 0x6d, 0x80, 0xf5, 0xab,
0xcb, 0x98, 0xb1, 0x07, 0x0a, 0x1b, 0x2e, 0x8d, 0x05, 0x8a, 0xfc, 0x0f, 0x12, 0x4c, 0x3e, 0xd9,
0xda, 0x6a, 0xac, 0xea, 0xfc, 0x44, 0xf3, 0xb7, 0xd5, 0xab, 0x50, 0x30, 0x15, 0x7b, 0x2f, 0x9a,
0xe9, 0x19, 0x0d, 0x73, 0x0a, 0xba, 0x03, 0x25, 0xf6, 0x2f, 0xb3, 0x8b, 0x1f, 0xa9, 0x11, 0x1e,
0x08, 0x4b, 0x0d, 0x31, 0xf6, 0x22, 0xf0, 0x37, 0xf6, 0x38, 0xd1, 0x7b, 0x50, 0x64, 0xf1, 0x87,
0xe8, 0xed, 0x8c, 0x05, 0xba, 0x30, 0xaa, 0xee, 0x08, 0xf9, 0x35, 0x97, 0x18, 0xc0, 0x2e, 0x9c,
0xbc, 0x0f, 0xb3, 0x81, 0x49, 0xb0, 0x55, 0x7c, 0xca, 0x72, 0x2a, 0x6a, 0xc2, 0x10, 0xd3, 0xce,
0x32, 0x67, 0x3e, 0xc3, 0x13, 0x68, 0x64, 0x21, 0xfc, 0xfa, 0x88, 0xfd, 0xa2, 0xd8, 0xc1, 0x92,
0xd7, 0x61, 0x9c, 0x3f, 0x43, 0x1b, 0x96, 0xcd, 0x17, 0x13, 0x5d, 0x81, 0x7c, 0x57, 0xd5, 0x45,
0x76, 0x1e, 0x15, 0x32, 0x79, 0x96, 0x59, 0xd8, 0x38, 0x27, 0x2b, 0x87, 0x22, 0x5e, 0xf9, 0x64,
0xe5, 0x10, 0xb3, 0x71, 0xf9, 0x31, 0x14, 0xc5, 0x26, 0x05, 0x81, 0xf2, 0x27, 0x03, 0xe5, 0x13,
0x80, 0x36, 0xa1, 0xb8, 0xda, 0xa8, 0x6b, 0x86, 0x53, 0xab, 0xb5, 0xd4, 0xb6, 0x15, 0xdd, 0xc1,
0xa5, 0xd5, 0x65, 0x8c, 0x39, 0x05, 0xc9, 0x30, 0x4c, 0x0e, 0x5b, 0xc4, 0xb4, 0xb9, 0x1f, 0x8d,
0xd4, 0x81, 0xf9, 0xc6, 0x23, 0x3e, 0x82, 0x05, 0x45, 0xfe, 0xa3, 0x1c, 0x14, 0xc5, 0x72, 0x9c,
0xc3, 0xdd, 0x6d, 0x2d, 0x74, 0x77, 0x7b, 0x23, 0x9b, 0x6b, 0xa4, 0x5e, 0xdc, 0xb6, 0x22, 0x17,
0xb7, 0x1b, 0x19, 0xf1, 0x4e, 0xbe, 0xb5, 0x7d, 0x9a, 0x83, 0x89, 0xb0, 0x53, 0xa2, 0xbb, 0x30,
0xca, 0xd2, 0x94, 0xda, 0x22, 0x1b, 0x7e, 0x75, 0xec, 0x3d, 0xdd, 0x34, 0x7d, 0x12, 0x0e, 0xf2,
0xa1, 0x8e, 0x27, 0xc6, 0xfc, 0x48, 0x4c, 0x3a, 0x7d, 0x49, 0x7b, 0xb6, 0xaa, 0x55, 0x9d, 0x0f,
0x32, 0xd5, 0x55, 0xdd, 0xde, 0xb4, 0x9a, 0xb6, 0xa5, 0xea, 0x9d, 0x98, 0x22, 0xee, 0x94, 0x41,
0x64, 0xf4, 0x2e, 0x4b, 0x99, 0xd4, 0xe8, 0x59, 0x2d, 0x92, 0x54, 0xfa, 0xba, 0x65, 0x1b, 0x3b,
0xa0, 0xed, 0x35, 0xa3, 0xa5, 0x68, 0xce, 0xe6, 0x60, 0xb2, 0x4b, 0x2c, 0xa2, 0xb7, 0x88, 0x5b,
0x6e, 0x3a, 0x10, 0xd8, 0x03, 0x93, 0xff, 0x56, 0x82, 0x51, 0xb1, 0x16, 0xe7, 0x70, 0xc9, 0xf9,
0xed, 0xf0, 0x25, 0xe7, 0x5a, 0xc6, 0xc8, 0x91, 0x7c, 0xc3, 0xf9, 0x4b, 0xdf, 0x74, 0x16, 0x2b,
0xd8, 0x71, 0xd9, 0x33, 0xa8, 0x1d, 0x3d, 0x2e, 0xec, 0x94, 0x63, 0x4e, 0x41, 0x3d, 0x98, 0x52,
0x23, 0xc1, 0x45, 0xec, 0x59, 0x2d, 0x9b, 0x25, 0x9e, 0x58, 0xbd, 0x2c, 0xe0, 0xa7, 0xa2, 0x14,
0x1c, 0x53, 0x21, 0x13, 0x88, 0x71, 0xa1, 0x77, 0xa0, 0xb0, 0x67, 0xdb, 0x66, 0xc2, 0xf3, 0xf9,
0x80, 0x90, 0xe6, 0x9b, 0x50, 0xe2, 0xb3, 0xdb, 0xda, 0x6a, 0x60, 0x0e, 0x25, 0xff, 0x5d, 0xce,
0x5b, 0x0f, 0x7e, 0xe7, 0x78, 0xdb, 0x9b, 0xed, 0x92, 0xa6, 0x50, 0xca, 0x1d, 0xdb, 0xb9, 0x1f,
0xcf, 0x06, 0x0c, 0xf7, 0x68, 0x38, 0xc6, 0x8d, 0xb6, 0xfc, 0x50, 0x2f, 0x9d, 0x25, 0xd4, 0x8f,
0x26, 0x85, 0x79, 0xf4, 0x04, 0xf2, 0xb6, 0x96, 0xf5, 0x9e, 0x2b, 0x10, 0xb7, 0xd6, 0x9a, 0x7e,
0xac, 0xdc, 0x5a, 0x6b, 0x62, 0x06, 0x81, 0x36, 0x61, 0x88, 0xa5, 0x53, 0x16, 0x1d, 0xf2, 0xd9,
0xa3, 0x0d, 0x5b, 0x41, 0xdf, 0xa5, 0xd8, 0x2f, 0x8a, 0x1d, 0x1c, 0xf9, 0x63, 0x18, 0x0f, 0x85,
0x10, 0xf4, 0x11, 0x8c, 0x69, 0x86, 0xd2, 0xae, 0x2b, 0x9a, 0xa2, 0xb7, 0x88, 0xfb, 0xb5, 0xe3,
0x5a, 0xd2, 0xd9, 0x5b, 0x0b, 0xf0, 0x89, 0x00, 0x34, 0x2b, 0x94, 0x8c, 0x05, 0x69, 0x38, 0x84,
0x28, 0x2b, 0x00, 0xfe, 0x1c, 0x51, 0x05, 0x86, 0x98, 0xa7, 0x3a, 0xa9, 0x6e, 0xa4, 0x3e, 0xc2,
0x2c, 0x64, 0x0e, 0x4c, 0xb1, 0x33, 0x8e, 0x6e, 0x03, 0x50, 0xd2, 0xb2, 0x88, 0xcd, 0xb7, 0x33,
0x17, 0xfe, 0x62, 0xda, 0xf4, 0x28, 0x38, 0xc0, 0x25, 0xff, 0xa3, 0x04, 0xe3, 0x1b, 0xc4, 0xfe,
0xc4, 0xb0, 0xf6, 0x1b, 0x86, 0xa6, 0xb6, 0xfa, 0xe7, 0x90, 0x07, 0x70, 0x28, 0x0f, 0xbc, 0x39,
0x60, 0x67, 0x42, 0xd6, 0xa5, 0x65, 0x03, 0xf9, 0x4b, 0x09, 0xe6, 0x43, 0x9c, 0x8f, 0xfc, 0xc3,
0xbf, 0x0d, 0x43, 0xa6, 0x61, 0xd9, 0x6e, 0x8d, 0x70, 0x2a, 0x85, 0x2c, 0xc2, 0x06, 0xaa, 0x04,
0x06, 0x83, 0x1d, 0x34, 0xb4, 0x06, 0x39, 0xdb, 0x10, 0xae, 0x7a, 0x3a, 0x4c, 0x42, 0xac, 0x3a,
0x08, 0xcc, 0xdc, 0x96, 0x81, 0x73, 0xb6, 0xc1, 0x36, 0xa2, 0x1c, 0xe2, 0x0a, 0x86, 0xaf, 0x57,
0x34, 0x03, 0x0c, 0x85, 0x5d, 0xcb, 0xe8, 0x9e, 0x79, 0x0e, 0xde, 0x46, 0xac, 0x58, 0x46, 0x17,
0x73, 0x2c, 0xf9, 0x2b, 0x09, 0xa6, 0x43, 0x9c, 0xe7, 0x90, 0x3a, 0xde, 0x09, 0xa7, 0x8e, 0x1b,
0xa7, 0x99, 0x48, 0x4a, 0x02, 0xf9, 0x2a, 0x17, 0x99, 0x06, 0x9b, 0x30, 0xda, 0x85, 0x51, 0xd3,
0x68, 0x37, 0x5f, 0xc2, 0xf7, 0xcd, 0x49, 0x96, 0xd2, 0x1b, 0x3e, 0x16, 0x0e, 0x02, 0xa3, 0x43,
0x98, 0xd6, 0x95, 0x2e, 0xa1, 0xa6, 0xd2, 0x22, 0xcd, 0x97, 0xf0, 0xe2, 0x73, 0x91, 0x7f, 0x40,
0x89, 0x22, 0xe2, 0xb8, 0x12, 0xb4, 0x0e, 0x45, 0xd5, 0xe4, 0x25, 0xa6, 0xa8, 0x25, 0x06, 0xe6,
0x61, 0xa7, 0x20, 0x75, 0xe2, 0xb9, 0xf8, 0x81, 0x5d, 0x0c, 0xf9, 0x5f, 0xa3, 0xde, 0xc0, 0x2b,
0x96, 0xc7, 0x50, 0xe2, 0x9d, 0x26, 0x2d, 0x43, 0x73, 0x3f, 0x75, 0xf0, 0xcb, 0x85, 0x18, 0x7b,
0x71, 0x54, 0xb9, 0x9c, 0xf0, 0x8a, 0xed, 0x92, 0xb1, 0x27, 0x8c, 0x36, 0xa0, 0x60, 0xfe, 0x90,
0xe2, 0x8a, 0xa7, 0x49, 0x5e, 0x51, 0x71, 0x1c, 0xf4, 0x6b, 0x50, 0x24, 0x7a, 0x9b, 0xd7, 0x6b,
0xce, 0x3b, 0x02, 0x9f, 0xd5, 0x23, 0x67, 0x08, 0xbb, 0x34, 0xf9, 0x0f, 0xf2, 0x91, 0x59, 0xf1,
0x9c, 0xfa, 0xec, 0xa5, 0x39, 0x87, 0x57, 0xf3, 0xa5, 0x3a, 0xc8, 0x0e, 0x14, 0x45, 0x46, 0x16,
0x3e, 0xff, 0xf3, 0xd3, 0xf8, 0x7c, 0x30, 0xd9, 0x79, 0x57, 0x2e, 0x77, 0xd0, 0x05, 0x46, 0x1f,
0xc2, 0x30, 0x71, 0x54, 0x38, 0x29, 0xf4, 0xde, 0x69, 0x54, 0xf8, 0xe1, 0xd7, 0x2f, 0xb5, 0xc5,
0x98, 0x40, 0x45, 0xbf, 0x64, 0xeb, 0xc5, 0x78, 0x59, 0x65, 0x4a, 0xcb, 0x05, 0x9e, 0xd5, 0xae,
0x38, 0xd3, 0xf6, 0x86, 0x5f, 0x1c, 0x55, 0xc0, 0xff, 0x89, 0x83, 0x12, 0xf2, 0x3f, 0x4b, 0x30,
0xcd, 0x57, 0xa8, 0xd5, 0xb3, 0x54, 0xbb, 0x7f, 0x6e, 0xf9, 0xeb, 0x69, 0x28, 0x7f, 0xdd, 0x19,
0xb0, 0x2c, 0x31, 0x0b, 0x53, 0x73, 0xd8, 0xd7, 0x12, 0x5c, 0x8c, 0x71, 0x9f, 0x43, 0xf8, 0xdc,
0x0e, 0x87, 0xcf, 0x37, 0x4f, 0x3b, 0xa1, 0x94, 0x10, 0xfa, 0x5f, 0xd3, 0x09, 0xd3, 0xe1, 0x27,
0xe5, 0x36, 0x80, 0x69, 0xa9, 0x07, 0xaa, 0x46, 0x3a, 0xe2, 0xe3, 0x7f, 0x29, 0xd0, 0xda, 0xe5,
0x51, 0x70, 0x80, 0x0b, 0x51, 0x98, 0x6b, 0x93, 0x5d, 0xa5, 0xa7, 0xd9, 0x8b, 0xed, 0xf6, 0x92,
0x62, 0x2a, 0x3b, 0xaa, 0xa6, 0xda, 0xaa, 0x78, 0x26, 0x19, 0xa9, 0x3f, 0x74, 0x3e, 0xca, 0x27,
0x71, 0xbc, 0x38, 0xaa, 0x5c, 0x49, 0xfa, 0x2a, 0xe6, 0xb2, 0xf4, 0x71, 0x0a, 0x34, 0xea, 0x43,
0xd9, 0x22, 0x1f, 0xf7, 0x54, 0x8b, 0xb4, 0x97, 0x2d, 0xc3, 0x0c, 0xa9, 0xcd, 0x73, 0xb5, 0xbf,
0x75, 0x7c, 0x54, 0x29, 0xe3, 0x14, 0x9e, 0xc1, 0x8a, 0x53, 0xe1, 0xd1, 0x33, 0x98, 0x51, 0x44,
0x13, 0x5e, 0x50, 0xab, 0x73, 0x4a, 0xee, 0x1f, 0x1f, 0x55, 0x66, 0x16, 0xe3, 0xe4, 0xc1, 0x0a,
0x93, 0x40, 0x51, 0x0d, 0x8a, 0x07, 0xbc, 0x5f, 0x8f, 0x96, 0x87, 0x38, 0x3e, 0xcb, 0x17, 0x45,
0xa7, 0x85, 0x8f, 0x61, 0x0e, 0xaf, 0x34, 0xf9, 0xe9, 0x73, 0xb9, 0xd8, 0x95, 0x98, 0x95, 0x9c,
0xe2, 0xc4, 0xf3, 0x97, 0xf2, 0x92, 0x1f, 0xb5, 0x9e, 0xf8, 0x24, 0x1c, 0xe4, 0x43, 0x1f, 0xc0,
0xc8, 0x9e, 0x78, 0x57, 0xa1, 0xe5, 0x62, 0xa6, 0x5c, 0x1d, 0x7a, 0x87, 0xa9, 0x4f, 0x0b, 0x15,
0x23, 0xee, 0x30, 0xc5, 0x3e, 0x22, 0x7a, 0x1d, 0x8a, 0xfc, 0xc7, 0xea, 0x32, 0x7f, 0x86, 0x2c,
0xf9, 0xb1, 0xed, 0x89, 0x33, 0x8c, 0x5d, 0xba, 0xcb, 0xba, 0xda, 0x58, 0xe2, 0xcf, 0xe1, 0x11,
0xd6, 0xd5, 0xc6, 0x12, 0x76, 0xe9, 0xe8, 0x23, 0x28, 0x52, 0xb2, 0xa6, 0xea, 0xbd, 0xc3, 0x32,
0x64, 0xfa, 0x98, 0xde, 0x7c, 0xc4, 0xb9, 0x23, 0x0f, 0x82, 0xbe, 0x06, 0x41, 0xc7, 0x2e, 0x2c,
0xda, 0x83, 0x11, 0xab, 0xa7, 0x2f, 0xd2, 0x6d, 0x4a, 0xac, 0xf2, 0x28, 0xd7, 0x31, 0x28, 0x9c,
0x63, 0x97, 0x3f, 0xaa, 0xc5, 0x5b, 0x21, 0x8f, 0x03, 0xfb, 0xe0, 0x68, 0x0f, 0x80, 0xff, 0xe0,
0x6f, 0x8f, 0xe5, 0x39, 0xae, 0xea, 0x7e, 0x16, 0x55, 0x49, 0x4f, 0x9c, 0xe2, 0xfb, 0x83, 0x47,
0xc6, 0x01, 0x6c, 0xf4, 0x87, 0x12, 0x20, 0xda, 0x33, 0x4d, 0x8d, 0x74, 0x89, 0x6e, 0x2b, 0x1a,
0x1f, 0xa5, 0xe5, 0x31, 0xae, 0xf2, 0xed, 0x41, 0x2b, 0x18, 0x13, 0x8c, 0xaa, 0xf6, 0x3e, 0x2b,
0xc4, 0x59, 0x71, 0x82, 0x5e, 0xb6, 0x89, 0xbb, 0x62, 0xd6, 0xe3, 0x99, 0x36, 0x31, 0xf9, 0x55,
0xd7, 0xdf, 0x44, 0x41, 0xc7, 0x2e, 0x2c, 0x7a, 0x0a, 0x73, 0x6e, 0x63, 0x29, 0x36, 0x0c, 0x7b,
0x45, 0xd5, 0x08, 0xed, 0x53, 0x9b, 0x74, 0xcb, 0x13, 0xdc, 0xc1, 0xbc, 0xee, 0x1a, 0x9c, 0xc8,
0x85, 0x53, 0xa4, 0x51, 0x17, 0x2a, 0x6e, 0x70, 0x62, 0x27, 0xd7, 0x8b, 0x8e, 0x8f, 0x68, 0x4b,
0xd1, 0x9c, 0x2f, 0x2d, 0x93, 0x5c, 0xc1, 0x6b, 0xc7, 0x47, 0x95, 0xca, 0xf2, 0xc9, 0xac, 0x78,
0x10, 0x16, 0x7a, 0x0f, 0xca, 0x4a, 0x9a, 0x9e, 0x29, 0xae, 0xe7, 0xa7, 0x2c, 0xe2, 0xa5, 0x2a,
0x48, 0x95, 0x46, 0x36, 0x4c, 0x29, 0xe1, 0x16, 0x5f, 0x5a, 0x9e, 0xce, 0xf4, 0x68, 0x1b, 0xe9,
0x0c, 0xf6, 0xdf, 0x57, 0x22, 0x04, 0x8a, 0x63, 0x1a, 0xd0, 0xef, 0x01, 0x52, 0xa2, 0x5d, 0xc9,
0xb4, 0x8c, 0x32, 0x25, 0xba, 0x58, 0x3b, 0xb3, 0xef, 0x76, 0x31, 0x12, 0xc5, 0x09, 0x7a, 0x58,
0x1d, 0xaf, 0x44, 0x3a, 0xa9, 0x69, 0x79, 0x9e, 0x2b, 0xaf, 0x65, 0x53, 0xee, 0xc9, 0x05, 0x3e,
0x28, 0x45, 0x11, 0x71, 0x5c, 0x09, 0x5a, 0x83, 0x59, 0x31, 0xb8, 0xad, 0x53, 0x65, 0x97, 0x34,
0xfb, 0xb4, 0x65, 0x6b, 0xb4, 0x3c, 0xc3, 0xe3, 0x3b, 0xff, 0xa8, 0xb9, 0x98, 0x40, 0xc7, 0x89,
0x52, 0xe8, 0x6d, 0x98, 0xda, 0x35, 0xac, 0x1d, 0xb5, 0xdd, 0x26, 0xba, 0x8b, 0x34, 0xcb, 0x91,
0xf8, 0x73, 0xd1, 0x4a, 0x84, 0x86, 0x63, 0xdc, 0x88, 0xc2, 0x45, 0x81, 0xdc, 0xb0, 0x8c, 0xd6,
0xba, 0xd1, 0xd3, 0x6d, 0xa7, 0xec, 0xbb, 0xe8, 0xa5, 0xd1, 0x8b, 0x8b, 0x49, 0x0c, 0x2f, 0x8e,
0x2a, 0x57, 0x93, 0x2f, 0x03, 0x3e, 0x13, 0x4e, 0xc6, 0x46, 0x26, 0x8c, 0x89, 0xfe, 0x78, 0xfe,
0x6e, 0x55, 0x2e, 0xf3, 0xa3, 0xff, 0x60, 0x70, 0xc0, 0xf3, 0x44, 0xa2, 0xe7, 0x7f, 0xea, 0xf8,
0xa8, 0x32, 0x16, 0x64, 0xc0, 0x21, 0x0d, 0xbc, 0x1f, 0x4a, 0x7c, 0x85, 0x3b, 0x9f, 0x9e, 0xf2,
0xd3, 0xf5, 0x43, 0xf9, 0xa6, 0xbd, 0xb4, 0x7e, 0xa8, 0x00, 0xe4, 0xc9, 0x2f, 0xeb, 0xff, 0x99,
0x83, 0x19, 0x9f, 0x39, 0x73, 0x3f, 0x54, 0x82, 0xc8, 0xff, 0xf7, 0x95, 0x67, 0xeb, 0x51, 0xf2,
0x97, 0xee, 0x7f, 0x5f, 0x8f, 0x92, 0x6f, 0x5b, 0xca, 0xed, 0xe1, 0xaf, 0x73, 0xc1, 0x09, 0x9c,
0xb2, 0x51, 0xe6, 0x25, 0xb4, 0x56, 0xff, 0xe8, 0x7a, 0x6d, 0xe4, 0xaf, 0xf3, 0x30, 0x15, 0x3d,
0x8d, 0xa1, 0x7e, 0x0a, 0x69, 0x60, 0x3f, 0x45, 0x03, 0x66, 0x77, 0x7b, 0x9a, 0xd6, 0xe7, 0x73,
0x08, 0x34, 0x55, 0x38, 0x5f, 0x36, 0x7f, 0x2a, 0x24, 0x67, 0x57, 0x12, 0x78, 0x70, 0xa2, 0x64,
0xbc, 0xbd, 0xa2, 0xf0, 0x43, 0xdb, 0x2b, 0x86, 0xce, 0xd0, 0x5e, 0x91, 0xdc, 0xa1, 0x92, 0x3f,
0x53, 0x87, 0xca, 0x59, 0x7a, 0x2b, 0x12, 0x82, 0xd8, 0xc0, 0x3e, 0xe1, 0x5f, 0xc0, 0x44, 0xb8,
0xdf, 0xc7, 0xd9, 0x4b, 0xa7, 0xe5, 0x48, 0x7c, 0x41, 0x0e, 0xec, 0xa5, 0x33, 0x8e, 0x3d, 0x0e,
0xf9, 0x58, 0x82, 0xb9, 0xe4, 0xbe, 0x5e, 0xa4, 0xc1, 0x44, 0x57, 0x39, 0x0c, 0xf6, 0x5a, 0x4b,
0x67, 0x7c, 0x40, 0xe3, 0x8d, 0x1e, 0xeb, 0x21, 0x2c, 0x1c, 0xc1, 0x46, 0xef, 0x43, 0xa9, 0xab,
0x1c, 0x36, 0x7b, 0x56, 0x87, 0x9c, 0xf9, 0xa1, 0x8e, 0x1f, 0xa3, 0x75, 0x81, 0x82, 0x3d, 0x3c,
0xf9, 0x7b, 0x09, 0xe6, 0x53, 0xda, 0x37, 0xfe, 0x0f, 0xcd, 0xf2, 0x2f, 0x24, 0xf8, 0x49, 0xea,
0x35, 0x0c, 0xdd, 0x0b, 0x75, 0x9a, 0xc8, 0x91, 0x4e, 0x13, 0x14, 0x17, 0x7c, 0x45, 0x8d, 0x26,
0x9f, 0x4b, 0x50, 0x4e, 0xbb, 0x97, 0xa2, 0xbb, 0x21, 0x23, 0x7f, 0x16, 0x31, 0x72, 0x3a, 0x26,
0xf7, 0x8a, 0x6c, 0xfc, 0x17, 0x09, 0x2e, 0x9f, 0x50, 0xdf, 0x79, 0xd7, 0x1f, 0xd2, 0x0e, 0x72,
0xf1, 0x97, 0x73, 0xf1, 0xd9, 0xcd, 0xbf, 0xfe, 0x24, 0xf0, 0xe0, 0x54, 0x69, 0xb4, 0x0d, 0xf3,
0xe2, 0xee, 0x15, 0xa5, 0x89, 0xd2, 0x85, 0x37, 0xe4, 0x2d, 0x27, 0xb3, 0xe0, 0x34, 0x59, 0xf9,
0xaf, 0x24, 0x98, 0x4b, 0x7e, 0x70, 0x40, 0x6f, 0x85, 0x96, 0xbc, 0x12, 0x59, 0xf2, 0xc9, 0x88,
0x94, 0x58, 0xf0, 0x0f, 0x61, 0x42, 0x3c, 0x4b, 0x08, 0x18, 0xe1, 0xcc, 0x72, 0x52, 0x76, 0x12,
0x10, 0x6e, 0x71, 0xcc, 0x8f, 0x49, 0x78, 0x0c, 0x47, 0xd0, 0xe4, 0x4f, 0x73, 0x30, 0xd4, 0x6c,
0x29, 0x1a, 0x39, 0x87, 0xda, 0xf8, 0x57, 0xa1, 0xda, 0x78, 0xd0, 0x7f, 0x75, 0xe3, 0x56, 0xa5,
0x96, 0xc5, 0x38, 0x52, 0x16, 0xbf, 0x91, 0x09, 0xed, 0xe4, 0x8a, 0xf8, 0x37, 0x61, 0xc4, 0x53,
0x7a, 0xba, 0x44, 0x2d, 0xff, 0x79, 0x0e, 0x46, 0x03, 0x2a, 0x4e, 0x99, 0xe6, 0x77, 0x43, 0xb5,
0x4d, 0x3e, 0xc3, 0x23, 0x50, 0x40, 0x57, 0xd5, 0xad, 0x66, 0x9c, 0x56, 0x6d, 0xbf, 0x39, 0x37,
0x5e, 0xe4, 0xfc, 0x02, 0x26, 0x6c, 0xc5, 0xea, 0x10, 0xdb, 0xfb, 0x28, 0xe2, 0xb4, 0x92, 0x79,
0xff, 0x67, 0x60, 0x2b, 0x44, 0xc5, 0x11, 0xee, 0x4b, 0x0f, 0x61, 0x3c, 0xa4, 0xec, 0x54, 0x9d,
0xd6, 0x7f, 0x23, 0xc1, 0xcf, 0x06, 0x3e, 0x24, 0xa1, 0x7a, 0xe8, 0x90, 0x54, 0x23, 0x87, 0x64,
0x21, 0x1d, 0xe0, 0xd5, 0x75, 0xec, 0xd5, 0x6f, 0x3e, 0xff, 0x6e, 0xe1, 0xc2, 0x37, 0xdf, 0x2d,
0x5c, 0xf8, 0xf6, 0xbb, 0x85, 0x0b, 0xbf, 0x7f, 0xbc, 0x20, 0x3d, 0x3f, 0x5e, 0x90, 0xbe, 0x39,
0x5e, 0x90, 0xbe, 0x3d, 0x5e, 0x90, 0xfe, 0xfd, 0x78, 0x41, 0xfa, 0xe3, 0xef, 0x17, 0x2e, 0xbc,
0x5f, 0x14, 0x70, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9d, 0xa0, 0x1e, 0x3d, 0x3f, 0x00,
0x00,
}
func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) {
@ -3608,6 +3610,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.EndPort != nil {
i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort))
i--
dAtA[i] = 0x18
}
if m.Port != nil {
{
size, err := m.Port.MarshalToSizedBuffer(dAtA[:i])
@ -5422,6 +5429,9 @@ func (m *NetworkPolicyPort) Size() (n int) {
l = m.Port.Size()
n += 1 + l + sovGenerated(uint64(l))
}
if m.EndPort != nil {
n += 1 + sovGenerated(uint64(*m.EndPort))
}
return n
}
@ -6364,6 +6374,7 @@ func (this *NetworkPolicyPort) String() string {
s := strings.Join([]string{`&NetworkPolicyPort{`,
`Protocol:` + valueToStringGenerated(this.Protocol) + `,`,
`Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`,
`EndPort:` + valueToStringGenerated(this.EndPort) + `,`,
`}`,
}, "")
return s
@ -11872,6 +11883,26 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType)
}
var v int32
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int32(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.EndPort = &v
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])

View File

@ -745,13 +745,21 @@ message NetworkPolicyPort {
// +optional
optional string protocol = 1;
// If specified, the port on the given protocol. This can
// either be a numerical or named port on a pod. If this field is not provided,
// this matches all port names and numbers.
// If present, only traffic on the specified protocol AND port
// will be matched.
// The port on the given protocol. This can either be a numerical or named
// port on a pod. If this field is not provided, this matches all port names and
// numbers.
// If present, only traffic on the specified protocol AND port will be matched.
// +optional
optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2;
// If set, indicates that the range of ports from port to endPort, inclusive,
// should be allowed by the policy. This field cannot be defined if the port field
// is not defined or if the port field is defined as a named (string) port.
// The endPort must be equal or greater than port.
// This feature is in Alpha state and should be enabled using the Feature Gate
// "NetworkPolicyEndPort".
// +optional
optional int32 endPort = 3;
}
// DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.

View File

@ -1471,13 +1471,21 @@ type NetworkPolicyPort struct {
// +optional
Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"`
// If specified, the port on the given protocol. This can
// either be a numerical or named port on a pod. If this field is not provided,
// this matches all port names and numbers.
// If present, only traffic on the specified protocol AND port
// will be matched.
// The port on the given protocol. This can either be a numerical or named
// port on a pod. If this field is not provided, this matches all port names and
// numbers.
// If present, only traffic on the specified protocol AND port will be matched.
// +optional
Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"`
// If set, indicates that the range of ports from port to endPort, inclusive,
// should be allowed by the policy. This field cannot be defined if the port field
// is not defined or if the port field is defined as a named (string) port.
// The endPort must be equal or greater than port.
// This feature is in Alpha state and should be enabled using the Feature Gate
// "NetworkPolicyEndPort".
// +optional
EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"`
}
// DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock.

View File

@ -413,7 +413,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string {
var map_NetworkPolicyPort = map[string]string{
"": "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.",
"protocol": "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.",
"port": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.",
"port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.",
"endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".",
}
func (NetworkPolicyPort) SwaggerDoc() map[string]string {

View File

@ -916,6 +916,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) {
*out = new(intstr.IntOrString)
**out = **in
}
if in.EndPort != nil {
in, out := &in.EndPort, &out.EndPort
*out = new(int32)
**out = **in
}
return
}

View File

@ -723,98 +723,98 @@ func init() {
}
var fileDescriptor_1c72867a70a7cc90 = []byte{
// 1441 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6f, 0x1b, 0x45,
0x1b, 0xcf, 0x3a, 0x71, 0xec, 0x8c, 0xd3, 0x34, 0x9d, 0xb7, 0xd5, 0x6b, 0xf5, 0xd5, 0x6b, 0xe7,
0x5d, 0xbd, 0xb4, 0x81, 0xd2, 0x35, 0x71, 0x2b, 0xc4, 0x0d, 0xd8, 0xf4, 0x2b, 0xe0, 0x26, 0xd6,
0xd8, 0x2a, 0x02, 0x51, 0xd4, 0xf1, 0x7a, 0x62, 0x6f, 0xbd, 0xde, 0x59, 0x66, 0xc7, 0xa1, 0xbd,
0x71, 0xe1, 0xc0, 0x8d, 0x7f, 0x81, 0x03, 0x37, 0x6e, 0x70, 0x43, 0x50, 0xb8, 0xa0, 0x1e, 0x7b,
0xec, 0xc9, 0xa2, 0xe6, 0xbf, 0xc8, 0x09, 0xcd, 0xec, 0xec, 0xa7, 0x63, 0x6c, 0xaa, 0x2a, 0x27,
0x7b, 0x9f, 0x8f, 0xdf, 0xf3, 0x39, 0xcf, 0x33, 0x03, 0xde, 0x1f, 0xbc, 0xe3, 0x1b, 0x36, 0xad,
0x0d, 0x46, 0x1d, 0xc2, 0x5c, 0xc2, 0x89, 0x5f, 0x3b, 0x22, 0x6e, 0x97, 0xb2, 0x9a, 0x62, 0x60,
0xcf, 0xae, 0xb9, 0x84, 0x7f, 0x41, 0xd9, 0xc0, 0x76, 0x7b, 0xb5, 0xa3, 0x9d, 0x5a, 0x8f, 0xb8,
0x84, 0x61, 0x4e, 0xba, 0x86, 0xc7, 0x28, 0xa7, 0xb0, 0x1c, 0x48, 0x1a, 0xd8, 0xb3, 0x8d, 0x58,
0xd2, 0x38, 0xda, 0xb9, 0x78, 0xb5, 0x67, 0xf3, 0xfe, 0xa8, 0x63, 0x58, 0x74, 0x58, 0xeb, 0xd1,
0x1e, 0xad, 0x49, 0x85, 0xce, 0xe8, 0x50, 0x7e, 0xc9, 0x0f, 0xf9, 0x2f, 0x00, 0xba, 0xa8, 0x27,
0x4c, 0x5a, 0x94, 0x91, 0x13, 0x8c, 0x5d, 0xbc, 0x1e, 0xcb, 0x0c, 0xb1, 0xd5, 0xb7, 0x5d, 0xc2,
0x1e, 0xd7, 0xbc, 0x41, 0x4f, 0x10, 0xfc, 0xda, 0x90, 0x70, 0x7c, 0x92, 0x56, 0x6d, 0x96, 0x16,
0x1b, 0xb9, 0xdc, 0x1e, 0x92, 0x29, 0x85, 0xb7, 0xe7, 0x29, 0xf8, 0x56, 0x9f, 0x0c, 0xf1, 0x94,
0xde, 0xb5, 0x59, 0x7a, 0x23, 0x6e, 0x3b, 0x35, 0xdb, 0xe5, 0x3e, 0x67, 0x59, 0x25, 0xfd, 0x17,
0x0d, 0x9c, 0xbd, 0xd3, 0x6e, 0x37, 0xf7, 0xdc, 0x1e, 0x23, 0xbe, 0xdf, 0xc4, 0xbc, 0x0f, 0xb7,
0xc0, 0x8a, 0x87, 0x79, 0xbf, 0xac, 0x6d, 0x69, 0xdb, 0x6b, 0xe6, 0xfa, 0xd3, 0x71, 0x75, 0x69,
0x32, 0xae, 0xae, 0x08, 0x1e, 0x92, 0x1c, 0x78, 0x1d, 0x14, 0xc5, 0x6f, 0xfb, 0xb1, 0x47, 0xca,
0xcb, 0x52, 0xaa, 0x3c, 0x19, 0x57, 0x8b, 0x4d, 0x45, 0x3b, 0x4e, 0xfc, 0x47, 0x91, 0x24, 0x6c,
0x81, 0x42, 0x07, 0x5b, 0x03, 0xe2, 0x76, 0xcb, 0xb9, 0x2d, 0x6d, 0xbb, 0x54, 0xdf, 0x36, 0x66,
0x95, 0xcf, 0x50, 0xfe, 0x98, 0x81, 0xbc, 0x79, 0x56, 0x39, 0x51, 0x50, 0x04, 0x14, 0x22, 0xe9,
0x87, 0xe0, 0x7c, 0xc2, 0x7f, 0x34, 0x72, 0xc8, 0x3d, 0xec, 0x8c, 0x08, 0xdc, 0x07, 0x79, 0x61,
0xd8, 0x2f, 0x6b, 0x5b, 0xcb, 0xdb, 0xa5, 0xfa, 0xeb, 0xb3, 0x4d, 0x65, 0xc2, 0x37, 0xcf, 0x28,
0x5b, 0x79, 0xf1, 0xe5, 0xa3, 0x00, 0x46, 0x3f, 0x00, 0x85, 0xbd, 0xa6, 0xe9, 0x50, 0x6b, 0x20,
0xf2, 0x63, 0xd9, 0x5d, 0x96, 0xcd, 0xcf, 0xee, 0xde, 0x0d, 0x84, 0x24, 0x07, 0xea, 0x60, 0x95,
0x3c, 0xb2, 0x88, 0xc7, 0xcb, 0xb9, 0xad, 0xe5, 0xed, 0x35, 0x13, 0x4c, 0xc6, 0xd5, 0xd5, 0x9b,
0x92, 0x82, 0x14, 0x47, 0xff, 0x2a, 0x07, 0x0a, 0xca, 0x2c, 0x7c, 0x00, 0x8a, 0xa2, 0x7d, 0xba,
0x98, 0x63, 0x89, 0x5a, 0xaa, 0xbf, 0x95, 0xf0, 0x37, 0xaa, 0xa6, 0xe1, 0x0d, 0x7a, 0x82, 0xe0,
0x1b, 0x42, 0x5a, 0xf8, 0x7e, 0xd0, 0x79, 0x48, 0x2c, 0x7e, 0x97, 0x70, 0x6c, 0x42, 0xe5, 0x07,
0x88, 0x69, 0x28, 0x42, 0x85, 0xb7, 0xc1, 0x8a, 0xef, 0x11, 0x4b, 0x25, 0xfe, 0xb5, 0xb9, 0x89,
0x6f, 0x79, 0xc4, 0x8a, 0x43, 0x13, 0x5f, 0x48, 0x02, 0xc0, 0x03, 0xb0, 0xea, 0x73, 0xcc, 0x47,
0xbe, 0x2c, 0x7c, 0xa9, 0x7e, 0x79, 0x3e, 0x94, 0x14, 0x37, 0x37, 0x14, 0xd8, 0x6a, 0xf0, 0x8d,
0x14, 0x8c, 0xfe, 0x9b, 0x06, 0x36, 0xd2, 0xd5, 0x86, 0xf7, 0x40, 0xc1, 0x27, 0xec, 0xc8, 0xb6,
0x48, 0x79, 0x45, 0x1a, 0xa9, 0xcd, 0x37, 0x12, 0xc8, 0x87, 0xfd, 0x52, 0x12, 0xbd, 0xa2, 0x68,
0x28, 0x04, 0x83, 0x1f, 0x81, 0x22, 0x23, 0x3e, 0x1d, 0x31, 0x8b, 0x28, 0xef, 0xaf, 0x26, 0x81,
0xc5, 0xb9, 0x17, 0x90, 0xa2, 0x59, 0xbb, 0x0d, 0x6a, 0x61, 0x27, 0x48, 0x25, 0x22, 0x87, 0x84,
0x11, 0xd7, 0x22, 0xe6, 0xba, 0xe8, 0x72, 0xa4, 0x20, 0x50, 0x04, 0x26, 0x4e, 0xd1, 0xba, 0x72,
0x64, 0xd7, 0xc1, 0xa7, 0x52, 0xd0, 0x46, 0xaa, 0xa0, 0x6f, 0xcc, 0x4d, 0x90, 0xf4, 0x6b, 0x56,
0x55, 0xf5, 0x9f, 0x35, 0xb0, 0x99, 0x14, 0x6c, 0xd8, 0x3e, 0x87, 0x9f, 0x4e, 0x05, 0x61, 0x2c,
0x16, 0x84, 0xd0, 0x96, 0x21, 0x6c, 0x2a, 0x53, 0xc5, 0x90, 0x92, 0x08, 0xe0, 0x43, 0x90, 0xb7,
0x39, 0x19, 0xfa, 0xf2, 0x88, 0x94, 0xea, 0x97, 0x16, 0x8b, 0x20, 0x3e, 0x9d, 0x7b, 0x42, 0x19,
0x05, 0x18, 0xfa, 0x77, 0x19, 0xff, 0x45, 0x68, 0xb0, 0x0e, 0x80, 0x45, 0x5d, 0xce, 0xa8, 0xe3,
0x90, 0xf0, 0xb4, 0x46, 0x49, 0xdd, 0x8d, 0x38, 0x28, 0x21, 0x05, 0xef, 0x03, 0xe0, 0x61, 0x86,
0x87, 0x84, 0x13, 0xe6, 0xab, 0xe4, 0xfe, 0xc3, 0x26, 0xd9, 0x10, 0xf0, 0xcd, 0x08, 0x04, 0x25,
0x00, 0xf5, 0x1f, 0x34, 0x50, 0x52, 0x7e, 0x9e, 0x42, 0x8a, 0x6f, 0xa5, 0x53, 0xfc, 0xbf, 0xf9,
0xe3, 0xf6, 0xe4, 0xec, 0x7e, 0x1b, 0x7b, 0x2d, 0x06, 0xac, 0x18, 0x80, 0x7d, 0xea, 0xf3, 0xec,
0x00, 0xbc, 0x43, 0x7d, 0x8e, 0x24, 0x07, 0x7a, 0x60, 0xd3, 0xce, 0x4c, 0xe4, 0x85, 0x3b, 0x35,
0xd2, 0x30, 0xcb, 0x0a, 0x79, 0x33, 0xcb, 0x41, 0x53, 0xe8, 0xfa, 0x03, 0x30, 0x25, 0x25, 0xce,
0x48, 0x9f, 0x73, 0xef, 0x84, 0xcc, 0xce, 0x5e, 0x01, 0xb1, 0xf5, 0xa2, 0x8c, 0xa9, 0xdd, 0x6e,
0x22, 0x89, 0xa2, 0x7f, 0xad, 0x81, 0x0b, 0x27, 0x4e, 0x1b, 0x91, 0x0f, 0x17, 0x0f, 0x49, 0x36,
0x1f, 0xfb, 0x78, 0x48, 0x90, 0xe4, 0xc0, 0x7d, 0xb0, 0xe2, 0x51, 0xc6, 0x55, 0x0e, 0xde, 0x9c,
0xed, 0x49, 0x1a, 0xb9, 0x49, 0x19, 0x4f, 0x2c, 0x60, 0xca, 0x38, 0x92, 0x38, 0xfa, 0xef, 0xb9,
0xa8, 0x22, 0xb2, 0xd5, 0xdf, 0x8b, 0xf2, 0x2d, 0xdb, 0x5f, 0x58, 0x96, 0xa3, 0x73, 0xcd, 0x3c,
0x9f, 0xc8, 0x5f, 0xc4, 0x43, 0x53, 0xd2, 0xb0, 0x0b, 0x36, 0xba, 0xe4, 0x10, 0x8f, 0x1c, 0xae,
0x6c, 0xab, 0xac, 0x2d, 0xbe, 0xa3, 0xe1, 0x64, 0x5c, 0xdd, 0xb8, 0x91, 0xc2, 0x40, 0x19, 0x4c,
0xb8, 0x0b, 0x96, 0xb9, 0x13, 0xf6, 0xe3, 0xff, 0xe7, 0x42, 0xb7, 0x1b, 0x2d, 0xb3, 0xa4, 0xc2,
0x5f, 0x6e, 0x37, 0x5a, 0x48, 0x68, 0xc3, 0x0f, 0x40, 0x9e, 0x8d, 0x1c, 0x22, 0x36, 0xd0, 0xf2,
0x42, 0xcb, 0x4c, 0xd4, 0x34, 0x6e, 0x6d, 0xf1, 0xe5, 0xa3, 0x00, 0x42, 0xff, 0x1c, 0x9c, 0x49,
0xad, 0x29, 0xf8, 0x00, 0xac, 0x3b, 0x14, 0x77, 0x4d, 0xec, 0x60, 0xd7, 0x52, 0x63, 0x23, 0x33,
0x9d, 0xc2, 0x11, 0xd0, 0x48, 0xc8, 0xa9, 0x25, 0x77, 0x5e, 0x19, 0x59, 0x4f, 0xf2, 0x50, 0x0a,
0x51, 0xc7, 0x00, 0xc4, 0xe1, 0xc1, 0x2a, 0xc8, 0x8b, 0x13, 0x13, 0xdc, 0x53, 0xd6, 0xcc, 0x35,
0xe1, 0xa1, 0x38, 0x48, 0x3e, 0x0a, 0xe8, 0x62, 0x8a, 0xf9, 0xc4, 0x62, 0x84, 0xcb, 0xa2, 0xe6,
0xd2, 0x53, 0xac, 0x15, 0x71, 0x50, 0x42, 0x4a, 0xff, 0x55, 0x03, 0x67, 0xf6, 0x83, 0x4c, 0x34,
0xa9, 0x63, 0x5b, 0x8f, 0x4f, 0x61, 0x21, 0xdd, 0x4d, 0x2d, 0xa4, 0x2b, 0xb3, 0x8b, 0x92, 0x72,
0x6c, 0xe6, 0x46, 0xfa, 0x51, 0x03, 0xff, 0x4e, 0x49, 0xde, 0x8c, 0xe7, 0x4f, 0x13, 0xe4, 0xc5,
0x29, 0x08, 0xef, 0x76, 0x8b, 0xda, 0x92, 0xa7, 0x29, 0xbe, 0xdd, 0x09, 0x04, 0x14, 0x00, 0xc1,
0xdb, 0x20, 0xc7, 0xa9, 0x6a, 0xcb, 0x85, 0xe1, 0x08, 0x61, 0x26, 0x50, 0x70, 0xb9, 0x36, 0x45,
0x39, 0x4e, 0xf5, 0x9f, 0x34, 0x50, 0x4e, 0x49, 0x25, 0xe7, 0xe6, 0xab, 0xf7, 0xfb, 0x2e, 0x58,
0x39, 0x64, 0x74, 0xf8, 0x32, 0x9e, 0x47, 0x49, 0xbf, 0xc5, 0xe8, 0x10, 0x49, 0x18, 0xfd, 0x89,
0x06, 0xce, 0xa5, 0x24, 0x4f, 0x61, 0x49, 0x35, 0xd2, 0x4b, 0xea, 0xf2, 0x82, 0x31, 0xcc, 0x58,
0x55, 0x4f, 0x72, 0x99, 0x08, 0x44, 0xac, 0xf0, 0x10, 0x94, 0x3c, 0xda, 0x6d, 0x11, 0x87, 0x58,
0x9c, 0x86, 0x67, 0xfa, 0xda, 0x82, 0x41, 0xe0, 0x0e, 0x71, 0x42, 0x55, 0xf3, 0xec, 0x64, 0x5c,
0x2d, 0x35, 0x63, 0x2c, 0x94, 0x04, 0x86, 0x8f, 0xc0, 0x39, 0x31, 0xee, 0x7d, 0x0f, 0x5b, 0x24,
0xb2, 0x96, 0x7b, 0x79, 0x6b, 0x17, 0x26, 0xe3, 0xea, 0xb9, 0xfd, 0x2c, 0x22, 0x9a, 0x36, 0x02,
0xef, 0x80, 0x82, 0xed, 0xc9, 0xe7, 0x89, 0xba, 0xd9, 0xfe, 0xdd, 0xb2, 0x0f, 0xde, 0x31, 0xc1,
0x25, 0x59, 0x7d, 0xa0, 0x50, 0x5d, 0xff, 0x3e, 0xdb, 0x03, 0xa2, 0xe1, 0xe0, 0x6d, 0x50, 0x94,
0x0f, 0x46, 0x8b, 0x3a, 0x6a, 0xcd, 0x5d, 0x91, 0x2f, 0x3e, 0x45, 0x3b, 0x1e, 0x57, 0xff, 0x33,
0xfd, 0x82, 0x36, 0x42, 0x36, 0x8a, 0x94, 0x33, 0x9b, 0x70, 0xf6, 0x10, 0x12, 0x8f, 0x56, 0x23,
0x78, 0xb4, 0x1a, 0x7b, 0x2e, 0x3f, 0x60, 0x2d, 0xce, 0x6c, 0xb7, 0x17, 0x6c, 0xe5, 0xc4, 0x26,
0x3c, 0xce, 0x16, 0x5c, 0xee, 0xc3, 0x87, 0xaf, 0xac, 0xe0, 0xff, 0x52, 0x6d, 0x36, 0xbb, 0xe8,
0xf7, 0x41, 0x41, 0x6d, 0x53, 0xd5, 0xc2, 0xf5, 0x05, 0x5b, 0x38, 0xb9, 0x9d, 0xa2, 0x07, 0x6e,
0x48, 0x0c, 0x31, 0xe1, 0xc7, 0x60, 0x95, 0x04, 0xe8, 0xc1, 0xba, 0xdb, 0x59, 0x10, 0x3d, 0x9e,
0x97, 0xf1, 0xd3, 0x4b, 0xd1, 0x14, 0x20, 0x7c, 0x57, 0x64, 0x49, 0xc8, 0x8a, 0xcb, 0xac, 0x5f,
0x5e, 0x91, 0x1b, 0xe8, 0xbf, 0x41, 0xb0, 0x11, 0xf9, 0x58, 0xdc, 0x66, 0xa3, 0x4f, 0x94, 0xd4,
0xd0, 0x3f, 0x03, 0x70, 0xfa, 0xc2, 0xb2, 0xc0, 0x75, 0xe8, 0x12, 0x58, 0x75, 0x47, 0xc3, 0x0e,
0x09, 0x0e, 0x47, 0x3e, 0x76, 0x70, 0x5f, 0x52, 0x91, 0xe2, 0x9a, 0xdb, 0x4f, 0x5f, 0x54, 0x96,
0x9e, 0xbd, 0xa8, 0x2c, 0x3d, 0x7f, 0x51, 0x59, 0xfa, 0x72, 0x52, 0xd1, 0x9e, 0x4e, 0x2a, 0xda,
0xb3, 0x49, 0x45, 0x7b, 0x3e, 0xa9, 0x68, 0x7f, 0x4c, 0x2a, 0xda, 0x37, 0x7f, 0x56, 0x96, 0x3e,
0xc9, 0x1d, 0xed, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x87, 0xf6, 0x28, 0x4c, 0x12, 0x00,
0x00,
// 1455 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4b, 0x6f, 0x1b, 0x45,
0x1c, 0xcf, 0x3a, 0x71, 0x9c, 0x8c, 0xd3, 0x34, 0x1d, 0x5a, 0x61, 0x15, 0x61, 0x87, 0x15, 0x6d,
0x03, 0xa5, 0x6b, 0xe2, 0x56, 0x88, 0x1b, 0xb0, 0xe9, 0x2b, 0xe0, 0x26, 0xd6, 0xd8, 0x2a, 0x02,
0x51, 0xd4, 0xf1, 0x7a, 0x62, 0x6f, 0xbd, 0xde, 0x59, 0x66, 0xc7, 0xa1, 0xbd, 0x71, 0xe1, 0xc0,
0x8d, 0xaf, 0xc0, 0x81, 0x4f, 0x00, 0x37, 0x04, 0x85, 0x0b, 0xea, 0xb1, 0x12, 0x97, 0x9e, 0x2c,
0x6a, 0xbe, 0x45, 0x4e, 0x68, 0x66, 0x67, 0x9f, 0x8e, 0xb1, 0xa9, 0xaa, 0x9c, 0xec, 0xfd, 0x3f,
0x7e, 0xff, 0xc7, 0xfc, 0x1f, 0x33, 0xe0, 0xa3, 0xfe, 0xfb, 0xbe, 0x61, 0xd3, 0x6a, 0x7f, 0xd8,
0x26, 0xcc, 0x25, 0x9c, 0xf8, 0xd5, 0x43, 0xe2, 0x76, 0x28, 0xab, 0x2a, 0x06, 0xf6, 0xec, 0xaa,
0x4b, 0xf8, 0xd7, 0x94, 0xf5, 0x6d, 0xb7, 0x5b, 0x3d, 0xdc, 0xae, 0x76, 0x89, 0x4b, 0x18, 0xe6,
0xa4, 0x63, 0x78, 0x8c, 0x72, 0x0a, 0x4b, 0x81, 0xa4, 0x81, 0x3d, 0xdb, 0x88, 0x25, 0x8d, 0xc3,
0xed, 0xf3, 0x57, 0xba, 0x36, 0xef, 0x0d, 0xdb, 0x86, 0x45, 0x07, 0xd5, 0x2e, 0xed, 0xd2, 0xaa,
0x54, 0x68, 0x0f, 0x0f, 0xe4, 0x97, 0xfc, 0x90, 0xff, 0x02, 0xa0, 0xf3, 0x7a, 0xc2, 0xa4, 0x45,
0x19, 0x39, 0xc6, 0xd8, 0xf9, 0x6b, 0xb1, 0xcc, 0x00, 0x5b, 0x3d, 0xdb, 0x25, 0xec, 0x51, 0xd5,
0xeb, 0x77, 0x05, 0xc1, 0xaf, 0x0e, 0x08, 0xc7, 0xc7, 0x69, 0x55, 0xa7, 0x69, 0xb1, 0xa1, 0xcb,
0xed, 0x01, 0x99, 0x50, 0x78, 0x6f, 0x96, 0x82, 0x6f, 0xf5, 0xc8, 0x00, 0x4f, 0xe8, 0x5d, 0x9d,
0xa6, 0x37, 0xe4, 0xb6, 0x53, 0xb5, 0x5d, 0xee, 0x73, 0x96, 0x55, 0xd2, 0x7f, 0xd3, 0xc0, 0xe9,
0xdb, 0xad, 0x56, 0x63, 0xd7, 0xed, 0x32, 0xe2, 0xfb, 0x0d, 0xcc, 0x7b, 0x70, 0x13, 0x2c, 0x79,
0x98, 0xf7, 0x4a, 0xda, 0xa6, 0xb6, 0xb5, 0x6a, 0xae, 0x3d, 0x19, 0x55, 0x16, 0xc6, 0xa3, 0xca,
0x92, 0xe0, 0x21, 0xc9, 0x81, 0xd7, 0xc0, 0x8a, 0xf8, 0x6d, 0x3d, 0xf2, 0x48, 0x69, 0x51, 0x4a,
0x95, 0xc6, 0xa3, 0xca, 0x4a, 0x43, 0xd1, 0x8e, 0x12, 0xff, 0x51, 0x24, 0x09, 0x9b, 0xa0, 0xd0,
0xc6, 0x56, 0x9f, 0xb8, 0x9d, 0x52, 0x6e, 0x53, 0xdb, 0x2a, 0xd6, 0xb6, 0x8c, 0x69, 0xc7, 0x67,
0x28, 0x7f, 0xcc, 0x40, 0xde, 0x3c, 0xad, 0x9c, 0x28, 0x28, 0x02, 0x0a, 0x91, 0xf4, 0x03, 0x70,
0x36, 0xe1, 0x3f, 0x1a, 0x3a, 0xe4, 0x2e, 0x76, 0x86, 0x04, 0xee, 0x81, 0xbc, 0x30, 0xec, 0x97,
0xb4, 0xcd, 0xc5, 0xad, 0x62, 0xed, 0xad, 0xe9, 0xa6, 0x32, 0xe1, 0x9b, 0xa7, 0x94, 0xad, 0xbc,
0xf8, 0xf2, 0x51, 0x00, 0xa3, 0xef, 0x83, 0xc2, 0x6e, 0xc3, 0x74, 0xa8, 0xd5, 0x17, 0xf9, 0xb1,
0xec, 0x0e, 0xcb, 0xe6, 0x67, 0x67, 0xf7, 0x3a, 0x42, 0x92, 0x03, 0x75, 0xb0, 0x4c, 0x1e, 0x5a,
0xc4, 0xe3, 0xa5, 0xdc, 0xe6, 0xe2, 0xd6, 0xaa, 0x09, 0xc6, 0xa3, 0xca, 0xf2, 0x0d, 0x49, 0x41,
0x8a, 0xa3, 0x7f, 0x9b, 0x03, 0x05, 0x65, 0x16, 0xde, 0x07, 0x2b, 0xa2, 0x7c, 0x3a, 0x98, 0x63,
0x89, 0x5a, 0xac, 0xbd, 0x9b, 0xf0, 0x37, 0x3a, 0x4d, 0xc3, 0xeb, 0x77, 0x05, 0xc1, 0x37, 0x84,
0xb4, 0xf0, 0x7d, 0xbf, 0xfd, 0x80, 0x58, 0xfc, 0x0e, 0xe1, 0xd8, 0x84, 0xca, 0x0f, 0x10, 0xd3,
0x50, 0x84, 0x0a, 0x6f, 0x81, 0x25, 0xdf, 0x23, 0x96, 0x4a, 0xfc, 0x85, 0x99, 0x89, 0x6f, 0x7a,
0xc4, 0x8a, 0x43, 0x13, 0x5f, 0x48, 0x02, 0xc0, 0x7d, 0xb0, 0xec, 0x73, 0xcc, 0x87, 0xbe, 0x3c,
0xf8, 0x62, 0xed, 0xd2, 0x6c, 0x28, 0x29, 0x6e, 0xae, 0x2b, 0xb0, 0xe5, 0xe0, 0x1b, 0x29, 0x18,
0xfd, 0x0f, 0x0d, 0xac, 0xa7, 0x4f, 0x1b, 0xde, 0x05, 0x05, 0x9f, 0xb0, 0x43, 0xdb, 0x22, 0xa5,
0x25, 0x69, 0xa4, 0x3a, 0xdb, 0x48, 0x20, 0x1f, 0xd6, 0x4b, 0x51, 0xd4, 0x8a, 0xa2, 0xa1, 0x10,
0x0c, 0x7e, 0x0a, 0x56, 0x18, 0xf1, 0xe9, 0x90, 0x59, 0x44, 0x79, 0x7f, 0x25, 0x09, 0x2c, 0xfa,
0x5e, 0x40, 0x8a, 0x62, 0xed, 0xd4, 0xa9, 0x85, 0x9d, 0x20, 0x95, 0x88, 0x1c, 0x10, 0x46, 0x5c,
0x8b, 0x98, 0x6b, 0xa2, 0xca, 0x91, 0x82, 0x40, 0x11, 0x98, 0xe8, 0xa2, 0x35, 0xe5, 0xc8, 0x8e,
0x83, 0x4f, 0xe4, 0x40, 0xeb, 0xa9, 0x03, 0x7d, 0x7b, 0x66, 0x82, 0xa4, 0x5f, 0xd3, 0x4e, 0x55,
0xff, 0x55, 0x03, 0x1b, 0x49, 0xc1, 0xba, 0xed, 0x73, 0xf8, 0xc5, 0x44, 0x10, 0xc6, 0x7c, 0x41,
0x08, 0x6d, 0x19, 0xc2, 0x86, 0x32, 0xb5, 0x12, 0x52, 0x12, 0x01, 0x7c, 0x02, 0xf2, 0x36, 0x27,
0x03, 0x5f, 0xb6, 0x48, 0xb1, 0x76, 0x71, 0xbe, 0x08, 0xe2, 0xee, 0xdc, 0x15, 0xca, 0x28, 0xc0,
0xd0, 0x7f, 0xcc, 0xf8, 0x2f, 0x42, 0x83, 0x35, 0x00, 0x2c, 0xea, 0x72, 0x46, 0x1d, 0x87, 0x84,
0xdd, 0x1a, 0x25, 0x75, 0x27, 0xe2, 0xa0, 0x84, 0x14, 0xbc, 0x07, 0x80, 0x87, 0x19, 0x1e, 0x10,
0x4e, 0x98, 0xaf, 0x92, 0xfb, 0x3f, 0x8b, 0x64, 0x5d, 0xc0, 0x37, 0x22, 0x10, 0x94, 0x00, 0xd4,
0x7f, 0xd2, 0x40, 0x51, 0xf9, 0x79, 0x02, 0x29, 0xbe, 0x99, 0x4e, 0xf1, 0x1b, 0xb3, 0xc7, 0xed,
0xf1, 0xd9, 0xfd, 0x21, 0xf6, 0x5a, 0x0c, 0x58, 0x31, 0x00, 0x7b, 0xd4, 0xe7, 0xd9, 0x01, 0x78,
0x9b, 0xfa, 0x1c, 0x49, 0x0e, 0xf4, 0xc0, 0x86, 0x9d, 0x99, 0xc8, 0x73, 0x57, 0x6a, 0xa4, 0x61,
0x96, 0x14, 0xf2, 0x46, 0x96, 0x83, 0x26, 0xd0, 0xf5, 0xfb, 0x60, 0x42, 0x4a, 0xf4, 0x48, 0x8f,
0x73, 0xef, 0x98, 0xcc, 0x4e, 0x5f, 0x01, 0xb1, 0xf5, 0x15, 0x19, 0x53, 0xab, 0xd5, 0x40, 0x12,
0x45, 0xff, 0x4e, 0x03, 0xe7, 0x8e, 0x9d, 0x36, 0x22, 0x1f, 0x2e, 0x1e, 0x90, 0x6c, 0x3e, 0xf6,
0xf0, 0x80, 0x20, 0xc9, 0x81, 0x7b, 0x60, 0xc9, 0xa3, 0x8c, 0xab, 0x1c, 0xbc, 0x33, 0xdd, 0x93,
0x34, 0x72, 0x83, 0x32, 0x9e, 0x58, 0xc0, 0x94, 0x71, 0x24, 0x71, 0xf4, 0x3f, 0x73, 0xd1, 0x89,
0xc8, 0x52, 0xff, 0x30, 0xca, 0xb7, 0x2c, 0x7f, 0x61, 0x59, 0x8e, 0xce, 0x55, 0xf3, 0x6c, 0x22,
0x7f, 0x11, 0x0f, 0x4d, 0x48, 0xc3, 0x0e, 0x58, 0xef, 0x90, 0x03, 0x3c, 0x74, 0xb8, 0xb2, 0xad,
0xb2, 0x36, 0xff, 0x8e, 0x86, 0xe3, 0x51, 0x65, 0xfd, 0x7a, 0x0a, 0x03, 0x65, 0x30, 0xe1, 0x0e,
0x58, 0xe4, 0x4e, 0x58, 0x8f, 0x6f, 0xce, 0x84, 0x6e, 0xd5, 0x9b, 0x66, 0x51, 0x85, 0xbf, 0xd8,
0xaa, 0x37, 0x91, 0xd0, 0x86, 0x1f, 0x83, 0x3c, 0x1b, 0x3a, 0x44, 0x6c, 0xa0, 0xc5, 0xb9, 0x96,
0x99, 0x38, 0xd3, 0xb8, 0xb4, 0xc5, 0x97, 0x8f, 0x02, 0x08, 0xfd, 0x2b, 0x70, 0x2a, 0xb5, 0xa6,
0xe0, 0x7d, 0xb0, 0xe6, 0x50, 0xdc, 0x31, 0xb1, 0x83, 0x5d, 0x4b, 0x8d, 0x8d, 0xcc, 0x74, 0x0a,
0x47, 0x40, 0x3d, 0x21, 0xa7, 0x96, 0xdc, 0x59, 0x65, 0x64, 0x2d, 0xc9, 0x43, 0x29, 0x44, 0x1d,
0x03, 0x10, 0x87, 0x07, 0x2b, 0x20, 0x2f, 0x3a, 0x26, 0xb8, 0xa7, 0xac, 0x9a, 0xab, 0xc2, 0x43,
0xd1, 0x48, 0x3e, 0x0a, 0xe8, 0x62, 0x8a, 0xf9, 0xc4, 0x62, 0x84, 0xcb, 0x43, 0xcd, 0xa5, 0xa7,
0x58, 0x33, 0xe2, 0xa0, 0x84, 0x94, 0xfe, 0xbb, 0x06, 0x4e, 0xed, 0x05, 0x99, 0x68, 0x50, 0xc7,
0xb6, 0x1e, 0x9d, 0xc0, 0x42, 0xba, 0x93, 0x5a, 0x48, 0x97, 0xa7, 0x1f, 0x4a, 0xca, 0xb1, 0xa9,
0x1b, 0xe9, 0x67, 0x0d, 0xbc, 0x9a, 0x92, 0xbc, 0x11, 0xcf, 0x9f, 0x06, 0xc8, 0x8b, 0x2e, 0x08,
0xef, 0x76, 0xf3, 0xda, 0x92, 0xdd, 0x14, 0xdf, 0xee, 0x04, 0x02, 0x0a, 0x80, 0xe0, 0x2d, 0x90,
0xe3, 0x54, 0x95, 0xe5, 0xdc, 0x70, 0x84, 0x30, 0x13, 0x28, 0xb8, 0x5c, 0x8b, 0xa2, 0x1c, 0xa7,
0xfa, 0x2f, 0x1a, 0x28, 0xa5, 0xa4, 0x92, 0x73, 0xf3, 0xe5, 0xfb, 0x7d, 0x07, 0x2c, 0x1d, 0x30,
0x3a, 0x78, 0x11, 0xcf, 0xa3, 0xa4, 0xdf, 0x64, 0x74, 0x80, 0x24, 0x8c, 0xfe, 0x58, 0x03, 0x67,
0x52, 0x92, 0x27, 0xb0, 0xa4, 0xea, 0xe9, 0x25, 0x75, 0x69, 0xce, 0x18, 0xa6, 0xac, 0xaa, 0xc7,
0xb9, 0x4c, 0x04, 0x22, 0x56, 0x78, 0x00, 0x8a, 0x1e, 0xed, 0x34, 0x89, 0x43, 0x2c, 0x4e, 0xc3,
0x9e, 0xbe, 0x3a, 0x67, 0x10, 0xb8, 0x4d, 0x9c, 0x50, 0xd5, 0x3c, 0x3d, 0x1e, 0x55, 0x8a, 0x8d,
0x18, 0x0b, 0x25, 0x81, 0xe1, 0x43, 0x70, 0x46, 0x8c, 0x7b, 0xdf, 0xc3, 0x16, 0x89, 0xac, 0xe5,
0x5e, 0xdc, 0xda, 0xb9, 0xf1, 0xa8, 0x72, 0x66, 0x2f, 0x8b, 0x88, 0x26, 0x8d, 0xc0, 0xdb, 0xa0,
0x60, 0x7b, 0xf2, 0x79, 0xa2, 0x6e, 0xb6, 0xff, 0xb5, 0xec, 0x83, 0x77, 0x4c, 0x70, 0x49, 0x56,
0x1f, 0x28, 0x54, 0xd7, 0xff, 0xca, 0xd6, 0x80, 0x28, 0x38, 0x78, 0x0b, 0xac, 0xc8, 0x07, 0xa3,
0x45, 0x1d, 0xb5, 0xe6, 0x2e, 0xcb, 0x17, 0x9f, 0xa2, 0x1d, 0x8d, 0x2a, 0xaf, 0x4d, 0xbe, 0xa0,
0x8d, 0x90, 0x8d, 0x22, 0xe5, 0xcc, 0x26, 0x9c, 0x3e, 0x84, 0xc4, 0xa3, 0xd5, 0x08, 0x1e, 0xad,
0xc6, 0xae, 0xcb, 0xf7, 0x59, 0x93, 0x33, 0xdb, 0xed, 0x06, 0x5b, 0x39, 0xde, 0x84, 0xf0, 0x02,
0x28, 0xa8, 0x45, 0x29, 0x03, 0xcf, 0x07, 0x51, 0xdd, 0x08, 0x48, 0x28, 0xe4, 0xe9, 0x47, 0xd9,
0xba, 0x90, 0x6b, 0xf3, 0xc1, 0x4b, 0xab, 0x8b, 0x57, 0x54, 0x35, 0x4e, 0xaf, 0x8d, 0x7b, 0xa0,
0xa0, 0x96, 0xae, 0xaa, 0xf4, 0xda, 0x9c, 0x95, 0x9e, 0x5c, 0x62, 0xd1, 0x3b, 0x38, 0x24, 0x86,
0x98, 0xf0, 0x33, 0xb0, 0x4c, 0x02, 0xf4, 0x60, 0x2b, 0x6e, 0xcf, 0x89, 0x1e, 0x8f, 0xd5, 0xf8,
0x85, 0xa6, 0x68, 0x0a, 0x10, 0x7e, 0x20, 0xb2, 0x24, 0x64, 0xc5, 0x9d, 0xd7, 0x2f, 0x2d, 0xc9,
0x45, 0xf5, 0x7a, 0x10, 0x6c, 0x44, 0x3e, 0x12, 0x97, 0xde, 0xe8, 0x13, 0x25, 0x35, 0xf4, 0x2f,
0x01, 0x9c, 0xbc, 0xd7, 0xcc, 0x71, 0x6b, 0xba, 0x08, 0x96, 0xdd, 0xe1, 0xa0, 0x4d, 0x82, 0x1e,
0xca, 0xc7, 0x0e, 0xee, 0x49, 0x2a, 0x52, 0x5c, 0x73, 0xeb, 0xc9, 0xf3, 0xf2, 0xc2, 0xd3, 0xe7,
0xe5, 0x85, 0x67, 0xcf, 0xcb, 0x0b, 0xdf, 0x8c, 0xcb, 0xda, 0x93, 0x71, 0x59, 0x7b, 0x3a, 0x2e,
0x6b, 0xcf, 0xc6, 0x65, 0xed, 0xef, 0x71, 0x59, 0xfb, 0xfe, 0x9f, 0xf2, 0xc2, 0xe7, 0xb9, 0xc3,
0xed, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb2, 0x4c, 0xf7, 0x73, 0x12, 0x00, 0x00,
}
func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) {
@ -1735,6 +1735,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.EndPort != nil {
i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort))
i--
dAtA[i] = 0x18
}
if m.Port != nil {
{
size, err := m.Port.MarshalToSizedBuffer(dAtA[:i])
@ -2215,6 +2220,9 @@ func (m *NetworkPolicyPort) Size() (n int) {
l = m.Port.Size()
n += 1 + l + sovGenerated(uint64(l))
}
if m.EndPort != nil {
n += 1 + sovGenerated(uint64(*m.EndPort))
}
return n
}
@ -2544,6 +2552,7 @@ func (this *NetworkPolicyPort) String() string {
s := strings.Join([]string{`&NetworkPolicyPort{`,
`Protocol:` + valueToStringGenerated(this.Protocol) + `,`,
`Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`,
`EndPort:` + valueToStringGenerated(this.EndPort) + `,`,
`}`,
}, "")
return s
@ -5160,6 +5169,26 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType)
}
var v int32
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int32(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.EndPort = &v
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])

View File

@ -398,10 +398,21 @@ message NetworkPolicyPort {
// +optional
optional string protocol = 1;
// The port on the given protocol. This can either be a numerical or named port on
// a pod. If this field is not provided, this matches all port names and numbers.
// The port on the given protocol. This can either be a numerical or named
// port on a pod. If this field is not provided, this matches all port names and
// numbers.
// If present, only traffic on the specified protocol AND port will be matched.
// +optional
optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2;
// If set, indicates that the range of ports from port to endPort, inclusive,
// should be allowed by the policy. This field cannot be defined if the port field
// is not defined or if the port field is defined as a named (string) port.
// The endPort must be equal or greater than port.
// This feature is in Alpha state and should be enabled using the Feature Gate
// "NetworkPolicyEndPort".
// +optional
optional int32 endPort = 3;
}
// NetworkPolicySpec provides the specification of a NetworkPolicy

View File

@ -17,7 +17,7 @@ limitations under the License.
package v1
import (
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)
@ -38,7 +38,7 @@ type NetworkPolicy struct {
Spec NetworkPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
}
// Policy Type string describes the NetworkPolicy type
// PolicyType string describes the NetworkPolicy type
// This type is beta-level in 1.8
type PolicyType string
@ -141,10 +141,21 @@ type NetworkPolicyPort struct {
// +optional
Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"`
// The port on the given protocol. This can either be a numerical or named port on
// a pod. If this field is not provided, this matches all port names and numbers.
// The port on the given protocol. This can either be a numerical or named
// port on a pod. If this field is not provided, this matches all port names and
// numbers.
// If present, only traffic on the specified protocol AND port will be matched.
// +optional
Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"`
// If set, indicates that the range of ports from port to endPort, inclusive,
// should be allowed by the policy. This field cannot be defined if the port field
// is not defined or if the port field is defined as a named (string) port.
// The endPort must be equal or greater than port.
// This feature is in Alpha state and should be enabled using the Feature Gate
// "NetworkPolicyEndPort".
// +optional
EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"`
}
// IPBlock describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is allowed

View File

@ -230,7 +230,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string {
var map_NetworkPolicyPort = map[string]string{
"": "NetworkPolicyPort describes a port to allow traffic on",
"protocol": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.",
"port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.",
"port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.",
"endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".",
}
func (NetworkPolicyPort) SwaggerDoc() map[string]string {

View File

@ -558,6 +558,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) {
*out = new(intstr.IntOrString)
**out = **in
}
if in.EndPort != nil {
in, out := &in.EndPort, &out.EndPort
*out = new(int32)
**out = **in
}
return
}

View File

@ -60,30 +60,34 @@
"ports": [
{
"protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ",
"port": 2
"port": 2,
"endPort": -420211493
}
],
"from": [
{
"podSelector": {
"matchLabels": {
"yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O": "17_.8CnT"
"5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g"
},
"matchExpressions": [
{
"key": "3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V",
"key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v",
"operator": "Exists"
}
]
},
"namespaceSelector": {
"matchLabels": {
"g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7": "9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R"
"pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y"
},
"matchExpressions": [
{
"key": "2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051",
"operator": "DoesNotExist"
"key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X",
"operator": "In",
"values": [
"g4"
]
}
]
},
@ -101,37 +105,32 @@
{
"ports": [
{
"protocol": "ɗ",
"port": 3
"protocol": "s3!Zɾģ毋",
"port": 3,
"endPort": -630252364
}
],
"to": [
{
"podSelector": {
"matchLabels": {
"hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX": "f-AH-Q.GM72_-c-.-.6--3-___t-8"
"P1s-V.9.3": "9..c_uo3a"
},
"matchExpressions": [
{
"key": "b_2_-8-----yY",
"operator": "NotIn",
"values": [
"M24"
]
"key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy",
"operator": "DoesNotExist"
}
]
},
"namespaceSelector": {
"matchLabels": {
"P____K_1": "Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv"
"5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz"
},
"matchExpressions": [
{
"key": "4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5",
"operator": "NotIn",
"values": [
"7-.p_3_J_SA995IKCR.sm"
]
"key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8",
"operator": "DoesNotExist"
}
]
},
@ -146,7 +145,7 @@
}
],
"policyTypes": [
"ĨǔvÄ"
"(dŊiɢz"
]
}
}

View File

@ -32,8 +32,9 @@ metadata:
spec:
egress:
- ports:
- port: 3
protocol: ɗ
- endPort: -630252364
port: 3
protocol: s3!Zɾģ毋
to:
- ipBlock:
cidr: "51"
@ -41,21 +42,16 @@ spec:
- "52"
namespaceSelector:
matchExpressions:
- key: 4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5
operator: NotIn
values:
- 7-.p_3_J_SA995IKCR.sm
- key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8
operator: DoesNotExist
matchLabels:
P____K_1: Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv
5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz
podSelector:
matchExpressions:
- key: b_2_-8-----yY
operator: NotIn
values:
- M24
- key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy
operator: DoesNotExist
matchLabels:
? hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX
: f-AH-Q.GM72_-c-.-.6--3-___t-8
P1s-V.9.3: 9..c_uo3a
ingress:
- from:
- ipBlock:
@ -64,18 +60,21 @@ spec:
- "38"
namespaceSelector:
matchExpressions:
- key: 2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051
operator: DoesNotExist
- key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X
operator: In
values:
- g4
matchLabels:
g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7: 9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R
pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y
podSelector:
matchExpressions:
- key: 3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V
- key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v
operator: Exists
matchLabels:
yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O: 17_.8CnT
5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g
ports:
- port: 2
- endPort: -420211493
port: 2
protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ
podSelector:
matchExpressions:
@ -86,4 +85,4 @@ spec:
matchLabels:
8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4
policyTypes:
- ĨǔvÄ
- (dŊiɢz

View File

@ -60,30 +60,34 @@
"ports": [
{
"protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ",
"port": 2
"port": 2,
"endPort": -420211493
}
],
"from": [
{
"podSelector": {
"matchLabels": {
"yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O": "17_.8CnT"
"5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g"
},
"matchExpressions": [
{
"key": "3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V",
"key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v",
"operator": "Exists"
}
]
},
"namespaceSelector": {
"matchLabels": {
"g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7": "9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R"
"pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y"
},
"matchExpressions": [
{
"key": "2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051",
"operator": "DoesNotExist"
"key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X",
"operator": "In",
"values": [
"g4"
]
}
]
},
@ -101,37 +105,32 @@
{
"ports": [
{
"protocol": "ɗ",
"port": 3
"protocol": "s3!Zɾģ毋",
"port": 3,
"endPort": -630252364
}
],
"to": [
{
"podSelector": {
"matchLabels": {
"hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX": "f-AH-Q.GM72_-c-.-.6--3-___t-8"
"P1s-V.9.3": "9..c_uo3a"
},
"matchExpressions": [
{
"key": "b_2_-8-----yY",
"operator": "NotIn",
"values": [
"M24"
]
"key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy",
"operator": "DoesNotExist"
}
]
},
"namespaceSelector": {
"matchLabels": {
"P____K_1": "Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv"
"5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz"
},
"matchExpressions": [
{
"key": "4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5",
"operator": "NotIn",
"values": [
"7-.p_3_J_SA995IKCR.sm"
]
"key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8",
"operator": "DoesNotExist"
}
]
},
@ -146,7 +145,7 @@
}
],
"policyTypes": [
"ĨǔvÄ"
"(dŊiɢz"
]
}
}

View File

@ -32,8 +32,9 @@ metadata:
spec:
egress:
- ports:
- port: 3
protocol: ɗ
- endPort: -630252364
port: 3
protocol: s3!Zɾģ毋
to:
- ipBlock:
cidr: "51"
@ -41,21 +42,16 @@ spec:
- "52"
namespaceSelector:
matchExpressions:
- key: 4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5
operator: NotIn
values:
- 7-.p_3_J_SA995IKCR.sm
- key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8
operator: DoesNotExist
matchLabels:
P____K_1: Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv
5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz
podSelector:
matchExpressions:
- key: b_2_-8-----yY
operator: NotIn
values:
- M24
- key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy
operator: DoesNotExist
matchLabels:
? hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX
: f-AH-Q.GM72_-c-.-.6--3-___t-8
P1s-V.9.3: 9..c_uo3a
ingress:
- from:
- ipBlock:
@ -64,18 +60,21 @@ spec:
- "38"
namespaceSelector:
matchExpressions:
- key: 2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051
operator: DoesNotExist
- key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X
operator: In
values:
- g4
matchLabels:
g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7: 9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R
pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y
podSelector:
matchExpressions:
- key: 3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V
- key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v
operator: Exists
matchLabels:
yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O: 17_.8CnT
5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g
ports:
- port: 2
- endPort: -420211493
port: 2
protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ
podSelector:
matchExpressions:
@ -86,4 +85,4 @@ spec:
matchLabels:
8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4
policyTypes:
- ĨǔvÄ
- (dŊiɢz