Add support for enforcing read only host paths in PSPs.

This commit is contained in:
Josh Horwitz 2018-05-10 15:54:09 -04:00
parent 86ae84b10e
commit c7fbcf35da
20 changed files with 593 additions and 342 deletions

View File

@ -81304,6 +81304,10 @@
"pathPrefix": { "pathPrefix": {
"description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`",
"type": "string" "type": "string"
},
"readOnly": {
"description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.",
"type": "boolean"
} }
} }
}, },
@ -82848,6 +82852,10 @@
"pathPrefix": { "pathPrefix": {
"description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`",
"type": "string" "type": "string"
},
"readOnly": {
"description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.",
"type": "boolean"
} }
} }
}, },

View File

@ -10517,6 +10517,10 @@
"pathPrefix": { "pathPrefix": {
"type": "string", "type": "string",
"description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`" "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`"
},
"readOnly": {
"type": "boolean",
"description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly."
} }
} }
}, },

View File

@ -2650,6 +2650,10 @@
"pathPrefix": { "pathPrefix": {
"type": "string", "type": "string",
"description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`" "description": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`"
},
"readOnly": {
"type": "boolean",
"description": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly."
} }
} }
}, },

View File

@ -450,6 +450,13 @@ Examples: <code>/foo</code> would allow <code>/foo</code>, <code>/foo/</code> an
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readOnly</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
</tr>
</tbody> </tbody>
</table> </table>

View File

@ -420,6 +420,13 @@ Examples: <code>/foo</code> would allow <code>/foo</code>, <code>/foo/</code> an
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">readOnly</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
</tr>
</tbody> </tbody>
</table> </table>

View File

@ -168,6 +168,7 @@ func Convert_policy_AllowedFlexVolume_To_v1beta1_AllowedFlexVolume(in *policy.Al
func autoConvert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.AllowedHostPath, out *policy.AllowedHostPath, s conversion.Scope) error { func autoConvert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.AllowedHostPath, out *policy.AllowedHostPath, s conversion.Scope) error {
out.PathPrefix = in.PathPrefix out.PathPrefix = in.PathPrefix
out.ReadOnly = in.ReadOnly
return nil return nil
} }
@ -178,6 +179,7 @@ func Convert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.Allow
func autoConvert_policy_AllowedHostPath_To_v1beta1_AllowedHostPath(in *policy.AllowedHostPath, out *v1beta1.AllowedHostPath, s conversion.Scope) error { func autoConvert_policy_AllowedHostPath_To_v1beta1_AllowedHostPath(in *policy.AllowedHostPath, out *v1beta1.AllowedHostPath, s conversion.Scope) error {
out.PathPrefix = in.PathPrefix out.PathPrefix = in.PathPrefix
out.ReadOnly = in.ReadOnly
return nil return nil
} }

View File

@ -228,6 +228,9 @@ type AllowedHostPath struct {
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
// `/foo` would not allow `/food` or `/etc/foo` // `/foo` would not allow `/food` or `/etc/foo`
PathPrefix string PathPrefix string
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
ReadOnly bool
} }
// HostPortRange defines a range of host ports that will be enabled by a policy // HostPortRange defines a range of host ports that will be enabled by a policy

View File

@ -98,6 +98,7 @@ func Convert_policy_AllowedFlexVolume_To_v1beta1_AllowedFlexVolume(in *policy.Al
func autoConvert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.AllowedHostPath, out *policy.AllowedHostPath, s conversion.Scope) error { func autoConvert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.AllowedHostPath, out *policy.AllowedHostPath, s conversion.Scope) error {
out.PathPrefix = in.PathPrefix out.PathPrefix = in.PathPrefix
out.ReadOnly = in.ReadOnly
return nil return nil
} }
@ -108,6 +109,7 @@ func Convert_v1beta1_AllowedHostPath_To_policy_AllowedHostPath(in *v1beta1.Allow
func autoConvert_policy_AllowedHostPath_To_v1beta1_AllowedHostPath(in *policy.AllowedHostPath, out *v1beta1.AllowedHostPath, s conversion.Scope) error { func autoConvert_policy_AllowedHostPath_To_v1beta1_AllowedHostPath(in *policy.AllowedHostPath, out *v1beta1.AllowedHostPath, s conversion.Scope) error {
out.PathPrefix = in.PathPrefix out.PathPrefix = in.PathPrefix
out.ReadOnly = in.ReadOnly
return nil return nil
} }

View File

@ -227,10 +227,33 @@ func (s *simpleProvider) ValidatePod(pod *api.Pod, fldPath *field.Path) field.Er
} }
if fsType == policy.HostPath { if fsType == policy.HostPath {
if !psputil.AllowsHostVolumePath(s.psp, v.HostPath.Path) { allows, mustBeReadOnly := psputil.AllowsHostVolumePath(s.psp, v.HostPath.Path)
if !allows {
allErrs = append(allErrs, field.Invalid( allErrs = append(allErrs, field.Invalid(
field.NewPath("spec", "volumes").Index(i).Child("hostPath", "pathPrefix"), v.HostPath.Path, field.NewPath("spec", "volumes").Index(i).Child("hostPath", "pathPrefix"), v.HostPath.Path,
fmt.Sprintf("is not allowed to be used"))) fmt.Sprintf("is not allowed to be used")))
} else if mustBeReadOnly {
// Ensure all the VolumeMounts that use this volume are read-only
for i, c := range pod.Spec.InitContainers {
for j, cv := range c.VolumeMounts {
if cv.Name == v.Name && !cv.ReadOnly {
allErrs = append(allErrs, field.Invalid(
field.NewPath("spec", "initContainers").Index(i).Child("volumeMounts").Index(j).Child("readOnly"),
cv.ReadOnly, "must be read-only"),
)
}
}
}
for i, c := range pod.Spec.Containers {
for j, cv := range c.VolumeMounts {
if cv.Name == v.Name && !cv.ReadOnly {
allErrs = append(allErrs, field.Invalid(
field.NewPath("spec", "containers").Index(i).Child("volumeMounts").Index(j).Child("readOnly"),
cv.ReadOnly, "must be read-only"),
)
}
}
}
} }
} }

View File

@ -241,6 +241,32 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
{PathPrefix: "/foo/bar"}, {PathPrefix: "/foo/bar"},
} }
failHostPathReadOnlyPod := defaultPod()
failHostPathReadOnlyPod.Spec.Containers[0].VolumeMounts = []api.VolumeMount{
{
Name: "bad volume",
ReadOnly: false,
},
}
failHostPathReadOnlyPod.Spec.Volumes = []api.Volume{
{
Name: "bad volume",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/foo",
},
},
},
}
failHostPathReadOnlyPSP := defaultPSP()
failHostPathReadOnlyPSP.Spec.Volumes = []policy.FSType{policy.HostPath}
failHostPathReadOnlyPSP.Spec.AllowedHostPaths = []policy.AllowedHostPath{
{
PathPrefix: "/foo",
ReadOnly: true,
},
}
failOtherSysctlsAllowedPSP := defaultPSP() failOtherSysctlsAllowedPSP := defaultPSP()
failOtherSysctlsAllowedPSP.Annotations[policy.SysctlsPodSecurityPolicyAnnotationKey] = "bar,abc" failOtherSysctlsAllowedPSP.Annotations[policy.SysctlsPodSecurityPolicyAnnotationKey] = "bar,abc"
@ -328,6 +354,11 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
psp: failHostPathDirPSP, psp: failHostPathDirPSP,
expectedError: "is not allowed to be used", expectedError: "is not allowed to be used",
}, },
"failHostPathReadOnlyPSP": {
pod: failHostPathReadOnlyPod,
psp: failHostPathReadOnlyPSP,
expectedError: "must be read-only",
},
"failSafeSysctlFooPod with failNoSysctlAllowedSCC": { "failSafeSysctlFooPod with failNoSysctlAllowedSCC": {
pod: failSafeSysctlFooPod, pod: failSafeSysctlFooPod,
psp: failNoSysctlAllowedPSP, psp: failNoSysctlAllowedPSP,
@ -598,28 +629,82 @@ func TestValidatePodSecurityContextSuccess(t *testing.T) {
Level: "level", Level: "level",
} }
hostPathDirPodVolumeMounts := []api.VolumeMount{
{
Name: "writeable /foo/bar",
ReadOnly: false,
},
{
Name: "read only /foo/bar/baz",
ReadOnly: true,
},
{
Name: "parent read only volume",
ReadOnly: true,
},
{
Name: "read only child volume",
ReadOnly: true,
},
}
hostPathDirPod := defaultPod() hostPathDirPod := defaultPod()
hostPathDirPod.Spec.InitContainers = []api.Container{
{
Name: defaultContainerName,
VolumeMounts: hostPathDirPodVolumeMounts,
},
}
hostPathDirPod.Spec.Containers[0].VolumeMounts = hostPathDirPodVolumeMounts
hostPathDirPod.Spec.Volumes = []api.Volume{ hostPathDirPod.Spec.Volumes = []api.Volume{
{ {
Name: "good volume", Name: "writeable /foo/bar",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/foo/bar",
},
},
},
{
Name: "read only /foo/bar/baz",
VolumeSource: api.VolumeSource{ VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{ HostPath: &api.HostPathVolumeSource{
Path: "/foo/bar/baz", Path: "/foo/bar/baz",
}, },
}, },
}, },
{
Name: "parent read only volume",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/foo/",
},
},
},
{
Name: "read only child volume",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/foo/readonly/child",
},
},
},
} }
hostPathDirPSP := defaultPSP() hostPathDirPSP := defaultPSP()
hostPathDirPSP.Spec.Volumes = []policy.FSType{policy.HostPath} hostPathDirPSP.Spec.Volumes = []policy.FSType{policy.HostPath}
hostPathDirPSP.Spec.AllowedHostPaths = []policy.AllowedHostPath{ hostPathDirPSP.Spec.AllowedHostPaths = []policy.AllowedHostPath{
{PathPrefix: "/foo/bar"}, // overlapping test case where child is different than parent directory.
{PathPrefix: "/foo/bar/baz", ReadOnly: true},
{PathPrefix: "/foo", ReadOnly: true},
{PathPrefix: "/foo/bar", ReadOnly: false},
} }
hostPathDirAsterisksPSP := defaultPSP() hostPathDirAsterisksPSP := defaultPSP()
hostPathDirAsterisksPSP.Spec.Volumes = []policy.FSType{policy.All} hostPathDirAsterisksPSP.Spec.Volumes = []policy.FSType{policy.All}
hostPathDirAsterisksPSP.Spec.AllowedHostPaths = []policy.AllowedHostPath{ hostPathDirAsterisksPSP.Spec.AllowedHostPaths = []policy.AllowedHostPath{
{PathPrefix: "/foo/bar"}, {PathPrefix: "/foo"},
} }
sysctlAllowFooPSP := defaultPSP() sysctlAllowFooPSP := defaultPSP()

View File

@ -175,23 +175,27 @@ func GroupFallsInRange(id int64, rng policy.IDRange) bool {
// AllowsHostVolumePath is a utility for checking if a PSP allows the host volume path. // AllowsHostVolumePath is a utility for checking if a PSP allows the host volume path.
// This only checks the path. You should still check to make sure the host volume fs type is allowed. // This only checks the path. You should still check to make sure the host volume fs type is allowed.
func AllowsHostVolumePath(psp *policy.PodSecurityPolicy, hostPath string) bool { func AllowsHostVolumePath(psp *policy.PodSecurityPolicy, hostPath string) (pathIsAllowed, mustBeReadOnly bool) {
if psp == nil { if psp == nil {
return false return false, false
} }
// If no allowed paths are specified then allow any path // If no allowed paths are specified then allow any path
if len(psp.Spec.AllowedHostPaths) == 0 { if len(psp.Spec.AllowedHostPaths) == 0 {
return true return true, false
} }
for _, allowedPath := range psp.Spec.AllowedHostPaths { for _, allowedPath := range psp.Spec.AllowedHostPaths {
if hasPathPrefix(hostPath, allowedPath.PathPrefix) { if hasPathPrefix(hostPath, allowedPath.PathPrefix) {
return true if !allowedPath.ReadOnly {
return true, allowedPath.ReadOnly
}
pathIsAllowed = true
mustBeReadOnly = true
} }
} }
return false return pathIsAllowed, mustBeReadOnly
} }
// hasPathPrefix returns true if the string matches pathPrefix exactly, or if is prefixed with pathPrefix at a path segment boundary // hasPathPrefix returns true if the string matches pathPrefix exactly, or if is prefixed with pathPrefix at a path segment boundary

View File

@ -17,10 +17,11 @@ limitations under the License.
package util package util
import ( import (
api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/policy"
"reflect" "reflect"
"testing" "testing"
api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/policy"
) )
// TestVolumeSourceFSTypeDrift ensures that for every known type of volume source (by the fields on // TestVolumeSourceFSTypeDrift ensures that for every known type of volume source (by the fields on
@ -105,41 +106,52 @@ func TestPSPAllowsFSType(t *testing.T) {
func TestAllowsHostVolumePath(t *testing.T) { func TestAllowsHostVolumePath(t *testing.T) {
tests := map[string]struct { tests := map[string]struct {
psp *policy.PodSecurityPolicy psp *policy.PodSecurityPolicy
path string path string
allows bool allows bool
mustBeReadOnly bool
}{ }{
"nil psp": { "nil psp": {
psp: nil, psp: nil,
path: "/test", path: "/test",
allows: false, allows: false,
mustBeReadOnly: false,
}, },
"empty allowed paths": { "empty allowed paths": {
psp: &policy.PodSecurityPolicy{}, psp: &policy.PodSecurityPolicy{},
path: "/test", path: "/test",
allows: true, allows: true,
mustBeReadOnly: false,
}, },
"non-matching": { "non-matching": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
Spec: policy.PodSecurityPolicySpec{ Spec: policy.PodSecurityPolicySpec{
AllowedHostPaths: []policy.AllowedHostPath{ AllowedHostPaths: []policy.AllowedHostPath{
{PathPrefix: "/foo"}, {
PathPrefix: "/foo",
ReadOnly: true,
},
}, },
}, },
}, },
path: "/foobar", path: "/foobar",
allows: false, allows: false,
mustBeReadOnly: false,
}, },
"match on direct match": { "match on direct match": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
Spec: policy.PodSecurityPolicySpec{ Spec: policy.PodSecurityPolicySpec{
AllowedHostPaths: []policy.AllowedHostPath{ AllowedHostPaths: []policy.AllowedHostPath{
{PathPrefix: "/foo"}, {
PathPrefix: "/foo",
ReadOnly: true,
},
}, },
}, },
}, },
path: "/foo", path: "/foo",
allows: true, allows: true,
mustBeReadOnly: true,
}, },
"match with trailing slash on host path": { "match with trailing slash on host path": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
@ -149,8 +161,9 @@ func TestAllowsHostVolumePath(t *testing.T) {
}, },
}, },
}, },
path: "/foo/", path: "/foo/",
allows: true, allows: true,
mustBeReadOnly: false,
}, },
"match with trailing slash on allowed path": { "match with trailing slash on allowed path": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
@ -160,19 +173,24 @@ func TestAllowsHostVolumePath(t *testing.T) {
}, },
}, },
}, },
path: "/foo", path: "/foo",
allows: true, allows: true,
mustBeReadOnly: false,
}, },
"match child directory": { "match child directory": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
Spec: policy.PodSecurityPolicySpec{ Spec: policy.PodSecurityPolicySpec{
AllowedHostPaths: []policy.AllowedHostPath{ AllowedHostPaths: []policy.AllowedHostPath{
{PathPrefix: "/foo/"}, {
PathPrefix: "/foo/",
ReadOnly: true,
},
}, },
}, },
}, },
path: "/foo/bar", path: "/foo/bar",
allows: true, allows: true,
mustBeReadOnly: true,
}, },
"non-matching parent directory": { "non-matching parent directory": {
psp: &policy.PodSecurityPolicy{ psp: &policy.PodSecurityPolicy{
@ -182,15 +200,19 @@ func TestAllowsHostVolumePath(t *testing.T) {
}, },
}, },
}, },
path: "/foo", path: "/foo",
allows: false, allows: false,
mustBeReadOnly: false,
}, },
} }
for k, v := range tests { for k, v := range tests {
allows := AllowsHostVolumePath(v.psp, v.path) allows, mustBeReadOnly := AllowsHostVolumePath(v.psp, v.path)
if v.allows != allows { if v.allows != allows {
t.Errorf("%s expected %t but got %t", k, v.allows, allows) t.Errorf("allows: %s expected %t but got %t", k, v.allows, allows)
}
if v.mustBeReadOnly != mustBeReadOnly {
t.Errorf("mustBeReadOnly: %s expected %t but got %t", k, v.mustBeReadOnly, mustBeReadOnly)
} }
} }
} }

View File

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

View File

@ -51,6 +51,10 @@ message AllowedHostPath {
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
// `/foo` would not allow `/food` or `/etc/foo` // `/foo` would not allow `/food` or `/etc/foo`
optional string pathPrefix = 1; optional string pathPrefix = 1;
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
// +optional
optional bool readOnly = 2;
} }
message CustomMetricCurrentStatus { message CustomMetricCurrentStatus {

View File

@ -960,6 +960,10 @@ type AllowedHostPath struct {
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
// `/foo` would not allow `/food` or `/etc/foo` // `/foo` would not allow `/food` or `/etc/foo`
PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"` PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"`
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
// +optional
ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"`
} }
// FSType gives strong typing to different file systems that are used by volumes. // FSType gives strong typing to different file systems that are used by volumes.

View File

@ -39,6 +39,7 @@ func (AllowedFlexVolume) SwaggerDoc() map[string]string {
var map_AllowedHostPath = map[string]string{ var map_AllowedHostPath = map[string]string{
"": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.", "": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.",
"pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", "pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`",
"readOnly": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.",
} }
func (AllowedHostPath) SwaggerDoc() map[string]string { func (AllowedHostPath) SwaggerDoc() map[string]string {

View File

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

View File

@ -47,6 +47,10 @@ message AllowedHostPath {
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
// `/foo` would not allow `/food` or `/etc/foo` // `/foo` would not allow `/food` or `/etc/foo`
optional string pathPrefix = 1; optional string pathPrefix = 1;
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
// +optional
optional bool readOnly = 2;
} }
// Eviction evicts a pod from its node subject to certain policies and safety constraints. // Eviction evicts a pod from its node subject to certain policies and safety constraints.

View File

@ -214,6 +214,10 @@ type AllowedHostPath struct {
// `/foo` would allow `/foo`, `/foo/` and `/foo/bar` // `/foo` would allow `/foo`, `/foo/` and `/foo/bar`
// `/foo` would not allow `/food` or `/etc/foo` // `/foo` would not allow `/food` or `/etc/foo`
PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"` PathPrefix string `json:"pathPrefix,omitempty" protobuf:"bytes,1,rep,name=pathPrefix"`
// when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.
// +optional
ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"`
} }
// FSType gives strong typing to different file systems that are used by volumes. // FSType gives strong typing to different file systems that are used by volumes.

View File

@ -39,6 +39,7 @@ func (AllowedFlexVolume) SwaggerDoc() map[string]string {
var map_AllowedHostPath = map[string]string{ var map_AllowedHostPath = map[string]string{
"": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.", "": "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.",
"pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", "pathPrefix": "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`",
"readOnly": "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.",
} }
func (AllowedHostPath) SwaggerDoc() map[string]string { func (AllowedHostPath) SwaggerDoc() map[string]string {