diff --git a/api/event-source.html b/api/event-source.html
index de319fcbd2..d1956a18d8 100644
--- a/api/event-source.html
+++ b/api/event-source.html
@@ -2179,6 +2179,19 @@
EventSource
AzureQueueStorage event source
+
+
+sftp
+
+
+map[string]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource
+
+
+ |
+
+ SFTP event sources
+ |
+
@@ -2222,6 +2235,7 @@ AzureQueueStorage event source
+
+
+sftp
+
+
+map[string]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource
+
+
+ |
+
+ SFTP event sources
+ |
+
EventSourceStatus
@@ -5087,6 +5114,128 @@ ResourceFilter
+SFTPEventSource
+
+
+(Appears on:
+EventSourceSpec)
+
+
+
SFTPEventSource describes an event-source for sftp related events.
+
+
SNSEventSource
@@ -6034,7 +6183,8 @@
WatchPathConfig
(Appears on:
FileEventSource,
-HDFSEventSource)
+HDFSEventSource,
+SFTPEventSource)
diff --git a/api/event-source.md b/api/event-source.md
index 3a22eff490..0345e36d06 100644
--- a/api/event-source.md
+++ b/api/event-source.md
@@ -2258,6 +2258,19 @@ AzureQueueStorage event source
+
+
+sftp
+
+map\[string\]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource
+
+ |
+
+
+SFTP event sources
+
+ |
+
@@ -2299,6 +2312,7 @@ EventSourceFilter
PulsarEventSource,
RedisEventSource,
RedisStreamEventSource,
+SFTPEventSource,
SNSEventSource,
SQSEventSource,
SlackEventSource,
@@ -2772,6 +2786,19 @@ AzureQueueStorage event source
+
+
+sftp
+
+map\[string\]github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource
+
+ |
+
+
+SFTP event sources
+
+ |
+
@@ -5197,6 +5224,129 @@ treated as valid.
+
+SFTPEventSource
+
+
+(Appears on:
+EventSourceSpec)
+
+
+
+SFTPEventSource describes an event-source for sftp related events.
+
+
+
SNSEventSource
@@ -6165,7 +6315,8 @@ WatchPathConfig
(Appears on:
FileEventSource,
-HDFSEventSource)
+HDFSEventSource,
+SFTPEventSource)
diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json
index 5fe741174c..92159a984e 100644
--- a/api/jsonschema/schema.json
+++ b/api/jsonschema/schema.json
@@ -1602,6 +1602,13 @@
"$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.Service",
"description": "Service is the specifications of the service to expose the event source"
},
+ "sftp": {
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.SFTPEventSource"
+ },
+ "description": "SFTP event sources",
+ "type": "object"
+ },
"slack": {
"additionalProperties": {
"$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.SlackEventSource"
@@ -2579,6 +2586,51 @@
},
"type": "object"
},
+ "io.argoproj.eventsource.v1alpha1.SFTPEventSource": {
+ "description": "SFTPEventSource describes an event-source for sftp related events.",
+ "properties": {
+ "address": {
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector",
+ "description": "Address sftp address."
+ },
+ "eventType": {
+ "description": "Type of file operations to watch Refer https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go for more information",
+ "type": "string"
+ },
+ "filter": {
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.EventSourceFilter",
+ "description": "Filter"
+ },
+ "metadata": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Metadata holds the user defined metadata which will passed along the event payload.",
+ "type": "object"
+ },
+ "password": {
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector",
+ "description": "Password required for authentication if any."
+ },
+ "pollIntervalDuration": {
+ "description": "PollIntervalDuration the interval at which to poll the SFTP server defaults to 10 seconds",
+ "type": "string"
+ },
+ "username": {
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector",
+ "description": "Username required for authentication if any."
+ },
+ "watchPathConfig": {
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.WatchPathConfig",
+ "description": "WatchPathConfig contains configuration about the file path to watch"
+ }
+ },
+ "required": [
+ "eventType",
+ "watchPathConfig"
+ ],
+ "type": "object"
+ },
"io.argoproj.eventsource.v1alpha1.SNSEventSource": {
"description": "SNSEventSource refers to event-source for AWS SNS related events",
"properties": {
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 27f948163e..b3aab781e6 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -1586,6 +1586,13 @@
"description": "Service is the specifications of the service to expose the event source",
"$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.Service"
},
+ "sftp": {
+ "description": "SFTP event sources",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.SFTPEventSource"
+ }
+ },
"slack": {
"description": "Slack event sources",
"type": "object",
@@ -2562,6 +2569,51 @@
}
}
},
+ "io.argoproj.eventsource.v1alpha1.SFTPEventSource": {
+ "description": "SFTPEventSource describes an event-source for sftp related events.",
+ "type": "object",
+ "required": [
+ "eventType",
+ "watchPathConfig"
+ ],
+ "properties": {
+ "address": {
+ "description": "Address sftp address.",
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector"
+ },
+ "eventType": {
+ "description": "Type of file operations to watch Refer https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go for more information",
+ "type": "string"
+ },
+ "filter": {
+ "description": "Filter",
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.EventSourceFilter"
+ },
+ "metadata": {
+ "description": "Metadata holds the user defined metadata which will passed along the event payload.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "password": {
+ "description": "Password required for authentication if any.",
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector"
+ },
+ "pollIntervalDuration": {
+ "description": "PollIntervalDuration the interval at which to poll the SFTP server defaults to 10 seconds",
+ "type": "string"
+ },
+ "username": {
+ "description": "Username required for authentication if any.",
+ "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector"
+ },
+ "watchPathConfig": {
+ "description": "WatchPathConfig contains configuration about the file path to watch",
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.WatchPathConfig"
+ }
+ }
+ },
"io.argoproj.eventsource.v1alpha1.SNSEventSource": {
"description": "SNSEventSource refers to event-source for AWS SNS related events",
"type": "object",
diff --git a/docs/eventsources/setup/sftp.md b/docs/eventsources/setup/sftp.md
new file mode 100644
index 0000000000..bf211e6840
--- /dev/null
+++ b/docs/eventsources/setup/sftp.md
@@ -0,0 +1,53 @@
+# SFTP
+
+SFTP event-source polls an SFTP server to identify changes and helps sensor trigger workloads.
+
+## Event Structure
+
+The structure of an event dispatched by the event-source over the eventbus looks like following,
+
+ {
+ "context": {
+ "type": "type_of_event_source",
+ "specversion": "cloud_events_version",
+ "source": "name_of_the_event_source",
+ "id": "unique_event_id",
+ "time": "event_time",
+ "datacontenttype": "type_of_data",
+ "subject": "name_of_the_configuration_within_event_source"
+ },
+ "data": {
+ "name": "Relative path to the file or directory",
+ "op": "File operation that triggered the event" // Create, Remove
+ }
+ }
+
+## Specification
+
+SFTP event-source specification is available [here](https://github.com/argoproj/argo-events/blob/master/api/event-source.md#sftpeventsource).
+
+## Setup
+
+1. Create the event source by running the following command.
+
+ kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/event-sources/sftp.yaml
+
+1. The event source has configuration to poll the sftp server every 10 seconds for `test-data` directory and file(s) called `x.txt`.
+
+1. Create the sensor by running the following command.
+
+ kubectl apply -n argo-events -f https://raw.githubusercontent.com/argoproj/argo-events/stable/examples/sensors/sftp.yaml
+
+1. Log into the event-source pod by running following command.
+
+ kubectl -n argo-events exec -it -c sftp-events -- /bin/bash
+
+1. Create a file called `x.txt` under `test-data` directory on the SFTP server.
+
+1. Once you create file `x.txt`, the sensor will trigger argo workflow. Run `argo list` to find the workflow.
+
+1. For real-world use cases, you should use PersistentVolumeClaim.
+
+## Troubleshoot
+
+Please read the [FAQ](https://argoproj.github.io/argo-events/FAQ/).
diff --git a/eventsources/eventing.go b/eventsources/eventing.go
index 5364c47c0e..06a8f5ce1b 100644
--- a/eventsources/eventing.go
+++ b/eventsources/eventing.go
@@ -46,6 +46,7 @@ import (
"github.com/argoproj/argo-events/eventsources/sources/redis"
redisstream "github.com/argoproj/argo-events/eventsources/sources/redis_stream"
"github.com/argoproj/argo-events/eventsources/sources/resource"
+ "github.com/argoproj/argo-events/eventsources/sources/sftp"
"github.com/argoproj/argo-events/eventsources/sources/slack"
"github.com/argoproj/argo-events/eventsources/sources/storagegrid"
"github.com/argoproj/argo-events/eventsources/sources/stripe"
@@ -166,6 +167,16 @@ func GetEventingServers(eventSource *v1alpha1.EventSource, metrics *eventsourcem
}
result[apicommon.FileEvent] = servers
}
+ if len(eventSource.Spec.SFTP) != 0 {
+ servers := []EventingServer{}
+ for k, v := range eventSource.Spec.SFTP {
+ if v.Filter != nil {
+ filters[k] = v.Filter
+ }
+ servers = append(servers, &sftp.EventListener{EventSourceName: eventSource.Name, EventName: k, SFTPEventSource: v, Metrics: metrics})
+ }
+ result[apicommon.SFTPEvent] = servers
+ }
if len(eventSource.Spec.Github) != 0 {
servers := []EventingServer{}
for k, v := range eventSource.Spec.Github {
diff --git a/eventsources/sources/sftp/start.go b/eventsources/sources/sftp/start.go
new file mode 100644
index 0000000000..e0ac2aa642
--- /dev/null
+++ b/eventsources/sources/sftp/start.go
@@ -0,0 +1,282 @@
+/*
+Copyright 2018 BlackRock, Inc.
+
+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 sftp
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "io/fs"
+ "regexp"
+ "strings"
+ "time"
+
+ "github.com/fsnotify/fsnotify"
+ "github.com/pkg/sftp"
+ "go.uber.org/zap"
+ "golang.org/x/crypto/ssh"
+
+ "github.com/argoproj/argo-events/common"
+ "github.com/argoproj/argo-events/common/logging"
+ eventsourcecommon "github.com/argoproj/argo-events/eventsources/common"
+ "github.com/argoproj/argo-events/eventsources/common/fsevent"
+ "github.com/argoproj/argo-events/eventsources/sources"
+ metrics "github.com/argoproj/argo-events/metrics"
+ apicommon "github.com/argoproj/argo-events/pkg/apis/common"
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+)
+
+// EventListener implements Eventing for sftp event source
+type EventListener struct {
+ EventSourceName string
+ EventName string
+ SFTPEventSource v1alpha1.SFTPEventSource
+ Metrics *metrics.Metrics
+}
+
+// GetEventSourceName returns name of event source
+func (el *EventListener) GetEventSourceName() string {
+ return el.EventSourceName
+}
+
+// GetEventName returns name of event
+func (el *EventListener) GetEventName() string {
+ return el.EventName
+}
+
+// GetEventSourceType return type of event server
+func (el *EventListener) GetEventSourceType() apicommon.EventSourceType {
+ return apicommon.SFTPEvent
+}
+
+// StartListening starts listening events
+func (el *EventListener) StartListening(ctx context.Context, dispatch func([]byte, ...eventsourcecommon.Option) error) error {
+ log := logging.FromContext(ctx).
+ With(logging.LabelEventSourceType, el.GetEventSourceType(), logging.LabelEventName, el.GetEventName())
+ defer sources.Recover(el.GetEventName())
+
+ username, err := common.GetSecretFromVolume(el.SFTPEventSource.Username)
+ if err != nil {
+ return fmt.Errorf("username not found, %w", err)
+ }
+ password, err := common.GetSecretFromVolume(el.SFTPEventSource.Password)
+ if err != nil {
+ return fmt.Errorf("password not found, %w", err)
+ }
+ address, err := common.GetSecretFromVolume(el.SFTPEventSource.Address)
+ if err != nil {
+ return fmt.Errorf("address not found, %w", err)
+ }
+
+ sftpConfig := &ssh.ClientConfig{
+ User: username,
+ Auth: []ssh.AuthMethod{ssh.Password(password)},
+ HostKeyCallback: ssh.InsecureIgnoreHostKey(), // TODO: enable host key callback
+ }
+
+ var sshClient *ssh.Client
+ err = common.DoWithRetry(nil, func() error {
+ var err error
+ sshClient, err = ssh.Dial("tcp", address, sftpConfig)
+ return err
+ })
+ if err != nil {
+ return fmt.Errorf("dialing sftp address %s: %w", address, err)
+ }
+
+ sftpClient, err := sftp.NewClient(sshClient)
+ if err != nil {
+ return fmt.Errorf("new sftp client: %w", err)
+ }
+ defer sftpClient.Close()
+
+ if err := el.listenEvents(ctx, sftpClient, dispatch, log); err != nil {
+ log.Error("failed to listen to events", zap.Error(err))
+ return err
+ }
+ return nil
+}
+
+// listenEvents listen to sftp related events.
+func (el *EventListener) listenEvents(ctx context.Context, sftpClient *sftp.Client, dispatch func([]byte, ...eventsourcecommon.Option) error, log *zap.SugaredLogger) error {
+ sftpEventSource := &el.SFTPEventSource
+
+ log.Info("identifying new files in sftp...")
+ startingFiles, err := sftpNonDirFiles(sftpClient, sftpEventSource.WatchPathConfig.Directory)
+ if err != nil {
+ return fmt.Errorf("failed to read directory %s for %s, %w", sftpEventSource.WatchPathConfig.Directory, el.GetEventName(), err)
+ }
+
+ // TODO: do we need some sort of stateful mechanism to capture changes between event source restarts?
+ // This would allow loading startingFiles from store/cache rather than initializing starting files from remote sftp source
+
+ var pathRegexp *regexp.Regexp
+ if sftpEventSource.WatchPathConfig.PathRegexp != "" {
+ log.Infow("matching file path with configured regex...", zap.Any("regex", sftpEventSource.WatchPathConfig.PathRegexp))
+ pathRegexp, err = regexp.Compile(sftpEventSource.WatchPathConfig.PathRegexp)
+ if err != nil {
+ return fmt.Errorf("failed to match file path with configured regex %s for %s, %w", sftpEventSource.WatchPathConfig.PathRegexp, el.GetEventName(), err)
+ }
+ }
+
+ processOne := func(event fsnotify.Event) error {
+ defer func(start time.Time) {
+ el.Metrics.EventProcessingDuration(el.GetEventSourceName(), el.GetEventName(), float64(time.Since(start)/time.Millisecond))
+ }(time.Now())
+
+ log.Infow("sftp event", zap.Any("event-type", event.Op.String()), zap.Any("descriptor-name", event.Name))
+
+ fileEvent := fsevent.Event{Name: event.Name, Op: fsevent.NewOp(event.Op.String()), Metadata: el.SFTPEventSource.Metadata}
+ payload, err := json.Marshal(fileEvent)
+ if err != nil {
+ return fmt.Errorf("failed to marshal the event to the fs event, %w", err)
+ }
+ log.Infow("dispatching sftp event on data channel...", zap.Any("event-type", event.Op.String()), zap.Any("descriptor-name", event.Name))
+ if err = dispatch(payload); err != nil {
+ return fmt.Errorf("failed to dispatch an sftp event, %w", err)
+ }
+ return nil
+ }
+
+ maybeProcess := func(fi fs.FileInfo, op fsnotify.Op) error {
+ matched := false
+ relPath := strings.TrimPrefix(fi.Name(), sftpEventSource.WatchPathConfig.Directory)
+ if sftpEventSource.WatchPathConfig.Path != "" && sftpEventSource.WatchPathConfig.Path == relPath {
+ matched = true
+ } else if pathRegexp != nil && pathRegexp.MatchString(relPath) {
+ matched = true
+ }
+ if matched && sftpEventSource.EventType == op.String() {
+ if err = processOne(fsnotify.Event{
+ Name: fi.Name(),
+ Op: op,
+ }); err != nil {
+ log.Errorw("failed to process a sftp event", zap.Error(err))
+ el.Metrics.EventProcessingFailed(el.GetEventSourceName(), el.GetEventName())
+ }
+ }
+
+ return nil
+ }
+
+ pollIntervalDuration := time.Second * 10
+ if d, err := time.ParseDuration(sftpEventSource.PollIntervalDuration); err != nil {
+ pollIntervalDuration = d
+ } else {
+ log.Errorw("failed parsing poll interval duration.. falling back to %s: %w", pollIntervalDuration.String(), err)
+ }
+
+ log.Info("listening to sftp notifications... polling interval %s", pollIntervalDuration.String())
+ for {
+ select {
+ case <-time.After(pollIntervalDuration):
+
+ files, err := sftpNonDirFiles(sftpClient, sftpEventSource.WatchPathConfig.Directory)
+ if err != nil {
+ return fmt.Errorf("failed to read directory %s for %s, %w", sftpEventSource.WatchPathConfig.Directory, el.GetEventName(), err)
+ }
+
+ fileDiff := diffFiles(startingFiles, files)
+ if fileDiff.isEmpty() {
+ continue
+ }
+
+ log.Infof("found %d new files and %d removed files", len(fileDiff.new), len(fileDiff.removed))
+
+ for _, fi := range fileDiff.removed {
+ if err = maybeProcess(fi, fsnotify.Remove); err != nil {
+ log.Errorw("failed to process a file event", zap.Error(err))
+ el.Metrics.EventProcessingFailed(el.GetEventSourceName(), el.GetEventName())
+ }
+ }
+ for _, fi := range fileDiff.new {
+ if err = maybeProcess(fi, fsnotify.Create); err != nil {
+ log.Errorw("failed to process a file event", zap.Error(err))
+ el.Metrics.EventProcessingFailed(el.GetEventSourceName(), el.GetEventName())
+ }
+ }
+
+ // TODO: errors processing files will result in dropped events
+ // adjusting the logic for overwriting startingFiles could enable the next tick
+ // to capture the event
+ startingFiles = files
+
+ case <-ctx.Done():
+ log.Info("event source has been stopped")
+ return nil
+ }
+ }
+}
+
+func sftpNonDirFiles(sftpClient *sftp.Client, dir string) ([]fs.FileInfo, error) {
+ var files []fs.FileInfo
+ err := common.DoWithRetry(nil, func() error {
+ var err error
+ files, err = sftpClient.ReadDir(dir)
+ return err
+ })
+ if err != nil {
+ return nil, err
+ }
+ var nonDirFiles []fs.FileInfo
+ for _, f := range files {
+ if !f.IsDir() {
+ nonDirFiles = append(nonDirFiles, f)
+ }
+ }
+
+ files = nonDirFiles
+ return files, nil
+}
+
+type fileDiff struct {
+ new []fs.FileInfo
+ removed []fs.FileInfo
+}
+
+func (f fileDiff) isEmpty() bool {
+ return (len(f.new) + len(f.removed)) == 0
+}
+
+func diffFiles(startingFiles, currentFiles []fs.FileInfo) fileDiff {
+ fileMap := make(map[string]fs.FileInfo)
+ for _, file := range currentFiles {
+ fileMap[file.Name()] = file
+ }
+
+ var diff fileDiff
+
+ for _, startingFile := range startingFiles {
+ name := startingFile.Name()
+
+ if newFile, ok := fileMap[name]; !ok {
+ diff.removed = append(diff.removed, startingFile)
+ } else {
+ delete(fileMap, name)
+
+ if newFile.Size() != startingFile.Size() || newFile.ModTime() != startingFile.ModTime() {
+ diff.new = append(diff.new, newFile)
+ }
+ }
+ }
+
+ for _, newFile := range fileMap {
+ diff.new = append(diff.new, newFile)
+ }
+
+ return diff
+}
diff --git a/eventsources/sources/sftp/validate.go b/eventsources/sources/sftp/validate.go
new file mode 100644
index 0000000000..da8df9b512
--- /dev/null
+++ b/eventsources/sources/sftp/validate.go
@@ -0,0 +1,41 @@
+/*
+Copyright 2018 BlackRock, Inc.
+
+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 sftp
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/argoproj/argo-events/common"
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+)
+
+// ValidateEventSource validates sftp event source
+func (listener *EventListener) ValidateEventSource(ctx context.Context) error {
+ return validate(&listener.SFTPEventSource)
+}
+
+func validate(sftpEventSource *v1alpha1.SFTPEventSource) error {
+ if sftpEventSource == nil {
+ return common.ErrNilEventSource
+ }
+ if sftpEventSource.EventType == "" {
+ return fmt.Errorf("type must be specified")
+ }
+ err := sftpEventSource.WatchPathConfig.Validate()
+ return err
+}
diff --git a/eventsources/sources/sftp/validate_test.go b/eventsources/sources/sftp/validate_test.go
new file mode 100644
index 0000000000..0f56f1b113
--- /dev/null
+++ b/eventsources/sources/sftp/validate_test.go
@@ -0,0 +1,54 @@
+/*
+Copyright 2018 BlackRock, Inc.
+
+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 sftp
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/ghodss/yaml"
+ "github.com/stretchr/testify/assert"
+
+ "github.com/argoproj/argo-events/eventsources/sources"
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+)
+
+func TestValidateEventSource(t *testing.T) {
+ listener := &EventListener{}
+
+ err := listener.ValidateEventSource(context.Background())
+ assert.Error(t, err)
+ assert.Equal(t, "type must be specified", err.Error())
+
+ content, err := os.ReadFile(fmt.Sprintf("%s/%s", sources.EventSourceDir, "sftp.yaml"))
+ assert.Nil(t, err)
+
+ var eventSource *v1alpha1.EventSource
+ err = yaml.Unmarshal(content, &eventSource)
+ assert.Nil(t, err)
+ assert.NotNil(t, eventSource.Spec.SFTP)
+
+ for _, value := range eventSource.Spec.SFTP {
+ l := &EventListener{
+ SFTPEventSource: value,
+ }
+ err := l.ValidateEventSource(context.Background())
+ assert.NoError(t, err)
+ }
+}
diff --git a/examples/event-sources/sftp.yaml b/examples/event-sources/sftp.yaml
new file mode 100644
index 0000000000..7458acaeef
--- /dev/null
+++ b/examples/event-sources/sftp.yaml
@@ -0,0 +1,40 @@
+apiVersion: argoproj.io/v1alpha1
+kind: EventSource
+metadata:
+ name: sftp
+spec:
+ template:
+ container:
+ volumeMounts:
+ - mountPath: /test-data
+ name: test-data
+ volumes:
+ - name: test-data
+ emptyDir: {}
+ sftp:
+ example:
+ username:
+ key: username
+ name: username
+ password:
+ key: password
+ name: password
+ address:
+ key: address
+ name: address
+ watchPathConfig:
+ # directory to watch
+ directory: /test-data/
+ # path to watch
+ path: x.txt
+ pollIntervalDuration: 10s
+ # type of the event
+ # supported types are: CREATE, REMOVE
+ eventType: CREATE
+
+# example-with-path-regex:
+# watchPathConfig:
+# directory: "/bin/"
+# # the eventsource will watch events for path that matches following regex
+# pathRegexp: "([a-z]+).txt"
+# eventType: "CREATE"
diff --git a/examples/sensors/sftp.yaml b/examples/sensors/sftp.yaml
new file mode 100644
index 0000000000..03c2168d46
--- /dev/null
+++ b/examples/sensors/sftp.yaml
@@ -0,0 +1,40 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Sensor
+metadata:
+ name: sftp
+spec:
+ template:
+ serviceAccountName: operate-workflow-sa
+ dependencies:
+ - name: test-dep
+ eventSourceName: sftp
+ eventName: example
+ triggers:
+ - template:
+ name: sftp-workflow-trigger
+ k8s:
+ operation: create
+ source:
+ resource:
+ apiVersion: argoproj.io/v1alpha1
+ kind: Workflow
+ metadata:
+ generateName: sftp-watcher-
+ spec:
+ entrypoint: whalesay
+ templates:
+ -
+ container:
+ args:
+ - "hello" # it will get replaced by the event payload
+ command:
+ - cowsay
+ image: "docker/whalesay:latest"
+ name: whalesay
+ parameters:
+ - src:
+ dependencyName: test-dep
+ dataKey: name
+ dest: spec.templates.0.container.args.0
+ retryStrategy:
+ steps: 3
diff --git a/go.mod b/go.mod
index ccdd71d238..ca13c28f92 100644
--- a/go.mod
+++ b/go.mod
@@ -59,6 +59,7 @@ require (
github.com/nats-io/nats.go v1.25.0
github.com/nats-io/stan.go v0.10.4
github.com/nsqio/go-nsq v1.1.0
+ github.com/pkg/sftp v1.13.5
github.com/prometheus/client_golang v1.15.1
github.com/rabbitmq/amqp091-go v1.8.1
github.com/radovskyb/watcher v1.0.7
@@ -126,6 +127,7 @@ require (
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+ github.com/kr/fs v0.1.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/linkedin/goavro/v2 v2.11.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
diff --git a/go.sum b/go.sum
index 9e929f3853..cb19dc17fc 100644
--- a/go.sum
+++ b/go.sum
@@ -772,6 +772,7 @@ github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8t
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -973,6 +974,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
+github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
+github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -1270,6 +1273,7 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
diff --git a/pkg/apis/common/common.go b/pkg/apis/common/common.go
index 593da55fe0..8c762c85b3 100644
--- a/pkg/apis/common/common.go
+++ b/pkg/apis/common/common.go
@@ -28,6 +28,7 @@ var (
MinioEvent EventSourceType = "minio"
CalendarEvent EventSourceType = "calendar"
FileEvent EventSourceType = "file"
+ SFTPEvent EventSourceType = "sftp"
ResourceEvent EventSourceType = "resource"
WebhookEvent EventSourceType = "webhook"
AMQPEvent EventSourceType = "amqp"
@@ -77,6 +78,7 @@ var (
ResourceEvent,
HDFSEvent,
FileEvent,
+ SFTPEvent,
GenericEvent,
}
)
diff --git a/pkg/apis/eventsource/v1alpha1/generated.pb.go b/pkg/apis/eventsource/v1alpha1/generated.pb.go
index b08c2896c1..e59fc4e828 100644
--- a/pkg/apis/eventsource/v1alpha1/generated.pb.go
+++ b/pkg/apis/eventsource/v1alpha1/generated.pb.go
@@ -1250,10 +1250,38 @@ func (m *ResourceFilter) XXX_DiscardUnknown() {
var xxx_messageInfo_ResourceFilter proto.InternalMessageInfo
+func (m *SFTPEventSource) Reset() { *m = SFTPEventSource{} }
+func (*SFTPEventSource) ProtoMessage() {}
+func (*SFTPEventSource) Descriptor() ([]byte, []int) {
+ return fileDescriptor_c9ac5d6cd016403b, []int{43}
+}
+func (m *SFTPEventSource) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SFTPEventSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+}
+func (m *SFTPEventSource) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SFTPEventSource.Merge(m, src)
+}
+func (m *SFTPEventSource) XXX_Size() int {
+ return m.Size()
+}
+func (m *SFTPEventSource) XXX_DiscardUnknown() {
+ xxx_messageInfo_SFTPEventSource.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SFTPEventSource proto.InternalMessageInfo
+
func (m *SNSEventSource) Reset() { *m = SNSEventSource{} }
func (*SNSEventSource) ProtoMessage() {}
func (*SNSEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{43}
+ return fileDescriptor_c9ac5d6cd016403b, []int{44}
}
func (m *SNSEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1281,7 +1309,7 @@ var xxx_messageInfo_SNSEventSource proto.InternalMessageInfo
func (m *SQSEventSource) Reset() { *m = SQSEventSource{} }
func (*SQSEventSource) ProtoMessage() {}
func (*SQSEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{44}
+ return fileDescriptor_c9ac5d6cd016403b, []int{45}
}
func (m *SQSEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1309,7 +1337,7 @@ var xxx_messageInfo_SQSEventSource proto.InternalMessageInfo
func (m *Selector) Reset() { *m = Selector{} }
func (*Selector) ProtoMessage() {}
func (*Selector) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{45}
+ return fileDescriptor_c9ac5d6cd016403b, []int{46}
}
func (m *Selector) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1337,7 +1365,7 @@ var xxx_messageInfo_Selector proto.InternalMessageInfo
func (m *Service) Reset() { *m = Service{} }
func (*Service) ProtoMessage() {}
func (*Service) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{46}
+ return fileDescriptor_c9ac5d6cd016403b, []int{47}
}
func (m *Service) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1365,7 +1393,7 @@ var xxx_messageInfo_Service proto.InternalMessageInfo
func (m *SlackEventSource) Reset() { *m = SlackEventSource{} }
func (*SlackEventSource) ProtoMessage() {}
func (*SlackEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{47}
+ return fileDescriptor_c9ac5d6cd016403b, []int{48}
}
func (m *SlackEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1393,7 +1421,7 @@ var xxx_messageInfo_SlackEventSource proto.InternalMessageInfo
func (m *StorageGridEventSource) Reset() { *m = StorageGridEventSource{} }
func (*StorageGridEventSource) ProtoMessage() {}
func (*StorageGridEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{48}
+ return fileDescriptor_c9ac5d6cd016403b, []int{49}
}
func (m *StorageGridEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1421,7 +1449,7 @@ var xxx_messageInfo_StorageGridEventSource proto.InternalMessageInfo
func (m *StorageGridFilter) Reset() { *m = StorageGridFilter{} }
func (*StorageGridFilter) ProtoMessage() {}
func (*StorageGridFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{49}
+ return fileDescriptor_c9ac5d6cd016403b, []int{50}
}
func (m *StorageGridFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1449,7 +1477,7 @@ var xxx_messageInfo_StorageGridFilter proto.InternalMessageInfo
func (m *StripeEventSource) Reset() { *m = StripeEventSource{} }
func (*StripeEventSource) ProtoMessage() {}
func (*StripeEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{50}
+ return fileDescriptor_c9ac5d6cd016403b, []int{51}
}
func (m *StripeEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1477,7 +1505,7 @@ var xxx_messageInfo_StripeEventSource proto.InternalMessageInfo
func (m *Template) Reset() { *m = Template{} }
func (*Template) ProtoMessage() {}
func (*Template) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{51}
+ return fileDescriptor_c9ac5d6cd016403b, []int{52}
}
func (m *Template) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1505,7 +1533,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo
func (m *WatchPathConfig) Reset() { *m = WatchPathConfig{} }
func (*WatchPathConfig) ProtoMessage() {}
func (*WatchPathConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{52}
+ return fileDescriptor_c9ac5d6cd016403b, []int{53}
}
func (m *WatchPathConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1533,7 +1561,7 @@ var xxx_messageInfo_WatchPathConfig proto.InternalMessageInfo
func (m *WebhookContext) Reset() { *m = WebhookContext{} }
func (*WebhookContext) ProtoMessage() {}
func (*WebhookContext) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{53}
+ return fileDescriptor_c9ac5d6cd016403b, []int{54}
}
func (m *WebhookContext) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1561,7 +1589,7 @@ var xxx_messageInfo_WebhookContext proto.InternalMessageInfo
func (m *WebhookEventSource) Reset() { *m = WebhookEventSource{} }
func (*WebhookEventSource) ProtoMessage() {}
func (*WebhookEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{54}
+ return fileDescriptor_c9ac5d6cd016403b, []int{55}
}
func (m *WebhookEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1641,6 +1669,7 @@ func init() {
proto.RegisterMapType((map[string]RedisEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.RedisEntry")
proto.RegisterMapType((map[string]RedisStreamEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.RedisStreamEntry")
proto.RegisterMapType((map[string]ResourceEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.ResourceEntry")
+ proto.RegisterMapType((map[string]SFTPEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SftpEntry")
proto.RegisterMapType((map[string]SlackEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SlackEntry")
proto.RegisterMapType((map[string]SNSEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SnsEntry")
proto.RegisterMapType((map[string]SQSEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec.SqsEntry")
@@ -1682,6 +1711,8 @@ func init() {
proto.RegisterType((*ResourceEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceEventSource")
proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceEventSource.MetadataEntry")
proto.RegisterType((*ResourceFilter)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ResourceFilter")
+ proto.RegisterType((*SFTPEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.SFTPEventSource")
+ proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.SFTPEventSource.MetadataEntry")
proto.RegisterType((*SNSEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.SNSEventSource")
proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.SNSEventSource.MetadataEntry")
proto.RegisterType((*SQSEventSource)(nil), "github.com.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.SQSEventSource")
@@ -1708,442 +1739,449 @@ func init() {
}
var fileDescriptor_c9ac5d6cd016403b = []byte{
- // 6951 bytes of a gzipped FileDescriptorProto
+ // 7064 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x4d, 0x6c, 0x24, 0xc7,
- 0x75, 0xb0, 0x9a, 0x9c, 0x19, 0xce, 0x3c, 0xfe, 0xd7, 0xae, 0x56, 0x23, 0x5a, 0xda, 0xdd, 0x8f,
- 0x82, 0x17, 0xab, 0xef, 0x93, 0xb9, 0x9f, 0xf4, 0x7d, 0x8e, 0x65, 0x29, 0x96, 0x31, 0x43, 0xee,
- 0x0f, 0xb5, 0x24, 0x97, 0xac, 0xe6, 0xea, 0xc7, 0xb2, 0x24, 0xf7, 0xf4, 0x14, 0x87, 0x6d, 0xf6,
- 0x74, 0x0f, 0xbb, 0x7b, 0xb8, 0xcb, 0x05, 0x62, 0x1b, 0x06, 0x9c, 0xd8, 0xfa, 0xb1, 0xad, 0x24,
- 0x4e, 0x82, 0x04, 0x3e, 0x38, 0x09, 0x7c, 0x48, 0x82, 0x1c, 0x8d, 0x5c, 0x03, 0xe4, 0x60, 0x24,
- 0x39, 0x38, 0xc9, 0xc5, 0xb1, 0x81, 0x85, 0xbd, 0x41, 0x6e, 0xb9, 0x04, 0x3e, 0x25, 0xa7, 0xa0,
- 0x7e, 0xba, 0xba, 0xfa, 0x67, 0xb8, 0x33, 0x9c, 0x1e, 0x52, 0x1b, 0xe4, 0x36, 0x53, 0xef, 0xd5,
- 0x7b, 0xaf, 0xab, 0x5e, 0xbd, 0xaa, 0x57, 0xf5, 0x5e, 0x15, 0xac, 0xb7, 0xac, 0x60, 0xb7, 0xdb,
- 0x58, 0x32, 0xdd, 0xf6, 0x15, 0xc3, 0x6b, 0xb9, 0x1d, 0xcf, 0xfd, 0x32, 0xfb, 0xf1, 0x29, 0x72,
- 0x40, 0x9c, 0xc0, 0xbf, 0xd2, 0xd9, 0x6b, 0x5d, 0x31, 0x3a, 0x96, 0x7f, 0x85, 0xff, 0x77, 0xbb,
- 0x9e, 0x49, 0xae, 0x1c, 0x3c, 0x6f, 0xd8, 0x9d, 0x5d, 0xe3, 0xf9, 0x2b, 0x2d, 0xe2, 0x10, 0xcf,
- 0x08, 0x48, 0x73, 0xa9, 0xe3, 0xb9, 0x81, 0x8b, 0x3e, 0x17, 0x91, 0x5b, 0x0a, 0xc9, 0xb1, 0x1f,
- 0xef, 0xf2, 0xea, 0x4b, 0x9d, 0xbd, 0xd6, 0x12, 0x25, 0xb7, 0xa4, 0x90, 0x5b, 0x0a, 0xc9, 0x2d,
- 0x7c, 0xbe, 0x6f, 0x69, 0x4c, 0xb7, 0xdd, 0x76, 0x9d, 0x24, 0xff, 0x85, 0x4f, 0x29, 0x04, 0x5a,
- 0x6e, 0xcb, 0xbd, 0xc2, 0x8a, 0x1b, 0xdd, 0x1d, 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0x04, 0xfa, 0xe2,
- 0xde, 0x8b, 0xfe, 0x92, 0xe5, 0x52, 0x92, 0x57, 0x4c, 0xd7, 0xa3, 0x1f, 0x96, 0x22, 0xf9, 0xff,
- 0x23, 0x9c, 0xb6, 0x61, 0xee, 0x5a, 0x0e, 0xf1, 0x0e, 0x23, 0x39, 0xda, 0x24, 0x30, 0xb2, 0x6a,
- 0x5d, 0xe9, 0x55, 0xcb, 0xeb, 0x3a, 0x81, 0xd5, 0x26, 0xa9, 0x0a, 0xbf, 0xf6, 0xb0, 0x0a, 0xbe,
- 0xb9, 0x4b, 0xda, 0x46, 0xb2, 0xde, 0xe2, 0x7f, 0x68, 0x30, 0x5f, 0x5b, 0xdf, 0xda, 0x5c, 0x76,
- 0x1d, 0xbf, 0xdb, 0x26, 0xcb, 0xae, 0xb3, 0x63, 0xb5, 0xd0, 0xa7, 0x61, 0xd2, 0xe4, 0x05, 0xde,
- 0xb6, 0xd1, 0xaa, 0x6a, 0x17, 0xb5, 0xcb, 0x95, 0xfa, 0x99, 0x1f, 0xdf, 0xbf, 0xf0, 0xd8, 0x83,
- 0xfb, 0x17, 0x26, 0x97, 0x23, 0x10, 0x56, 0xf1, 0xd0, 0xb3, 0x30, 0x61, 0x74, 0x03, 0xb7, 0x66,
- 0xee, 0x55, 0xc7, 0x2e, 0x6a, 0x97, 0xcb, 0xf5, 0x59, 0x51, 0x65, 0xa2, 0xc6, 0x8b, 0x71, 0x08,
- 0x47, 0x57, 0xa0, 0x42, 0xee, 0x9a, 0x76, 0xd7, 0xb7, 0x0e, 0x48, 0x75, 0x9c, 0x21, 0xcf, 0x0b,
- 0xe4, 0xca, 0xd5, 0x10, 0x80, 0x23, 0x1c, 0x4a, 0xdb, 0x71, 0xd7, 0x5c, 0xd3, 0xb0, 0xab, 0x85,
- 0x38, 0xed, 0x0d, 0x5e, 0x8c, 0x43, 0x38, 0xba, 0x04, 0x25, 0xc7, 0x7d, 0xdd, 0xb0, 0x82, 0x6a,
- 0x91, 0x61, 0xce, 0x08, 0xcc, 0xd2, 0x06, 0x2b, 0xc5, 0x02, 0xba, 0xf8, 0x6f, 0x93, 0x30, 0x4b,
- 0xbf, 0xfd, 0x2a, 0x55, 0x0e, 0x9d, 0xe9, 0x12, 0x7a, 0x1a, 0xc6, 0xbb, 0x9e, 0x2d, 0xbe, 0x78,
- 0x52, 0x54, 0x1c, 0xbf, 0x8d, 0xd7, 0x30, 0x2d, 0x47, 0x2f, 0xc2, 0x14, 0xb9, 0x6b, 0xee, 0x1a,
- 0x4e, 0x8b, 0x6c, 0x18, 0x6d, 0xc2, 0x3e, 0xb3, 0x52, 0x3f, 0x2b, 0xf0, 0xa6, 0xae, 0x2a, 0x30,
- 0x1c, 0xc3, 0x54, 0x6b, 0x6e, 0x1f, 0x76, 0xf8, 0x37, 0x67, 0xd4, 0xa4, 0x30, 0x1c, 0xc3, 0x44,
- 0x2f, 0x00, 0x78, 0x6e, 0x37, 0xb0, 0x9c, 0xd6, 0x4d, 0x72, 0xc8, 0x3e, 0xbe, 0x52, 0x47, 0xa2,
- 0x1e, 0x60, 0x09, 0xc1, 0x0a, 0x16, 0xfa, 0x0d, 0x98, 0x37, 0x5d, 0xc7, 0x21, 0x66, 0x60, 0xb9,
- 0x4e, 0xdd, 0x30, 0xf7, 0xdc, 0x9d, 0x1d, 0xd6, 0x1a, 0x93, 0x2f, 0xbc, 0xb8, 0xd4, 0xf7, 0x20,
- 0xe3, 0xa3, 0x64, 0x49, 0xd4, 0xaf, 0x3f, 0xfe, 0xe0, 0xfe, 0x85, 0xf9, 0xe5, 0x24, 0x59, 0x9c,
- 0xe6, 0x84, 0x9e, 0x83, 0xf2, 0x97, 0x7d, 0xd7, 0xa9, 0xbb, 0xcd, 0xc3, 0x6a, 0x89, 0xf5, 0xc1,
- 0x9c, 0x10, 0xb8, 0xfc, 0xaa, 0x7e, 0x6b, 0x83, 0x96, 0x63, 0x89, 0x81, 0x6e, 0xc3, 0x78, 0x60,
- 0xfb, 0xd5, 0x09, 0x26, 0xde, 0x4b, 0x03, 0x8b, 0xb7, 0xbd, 0xa6, 0x73, 0xb5, 0xad, 0x4f, 0xd0,
- 0xbe, 0xda, 0x5e, 0xd3, 0x31, 0xa5, 0x87, 0xde, 0xd3, 0xa0, 0x4c, 0xc7, 0x57, 0xd3, 0x08, 0x8c,
- 0x6a, 0xf9, 0xe2, 0xf8, 0xe5, 0xc9, 0x17, 0xbe, 0xb8, 0x34, 0x94, 0x81, 0x59, 0x4a, 0x68, 0xcb,
- 0xd2, 0xba, 0x20, 0x7f, 0xd5, 0x09, 0xbc, 0xc3, 0xe8, 0x1b, 0xc3, 0x62, 0x2c, 0xf9, 0xa3, 0xdf,
- 0xd7, 0x60, 0x36, 0xec, 0xd5, 0x15, 0x62, 0xda, 0x86, 0x47, 0xaa, 0x15, 0xf6, 0xc1, 0x6f, 0xe4,
- 0x21, 0x53, 0x9c, 0xb2, 0x68, 0x8e, 0x33, 0x0f, 0xee, 0x5f, 0x98, 0x4d, 0x80, 0x70, 0x52, 0x0a,
- 0xf4, 0xbe, 0x06, 0x53, 0xfb, 0x5d, 0xd2, 0x95, 0x62, 0x01, 0x13, 0xeb, 0x76, 0x0e, 0x62, 0x6d,
- 0x29, 0x64, 0x85, 0x4c, 0x73, 0x54, 0xd9, 0xd5, 0x72, 0x1c, 0x63, 0x8e, 0xbe, 0x0a, 0x15, 0xf6,
- 0xbf, 0x6e, 0x39, 0xcd, 0xea, 0x24, 0x93, 0x04, 0xe7, 0x25, 0x09, 0xa5, 0x29, 0xc4, 0x98, 0xa6,
- 0x76, 0x46, 0x16, 0xe2, 0x88, 0x27, 0xba, 0x03, 0x13, 0xc2, 0xa4, 0x55, 0xa7, 0x18, 0xfb, 0xcd,
- 0x1c, 0xd8, 0xc7, 0xac, 0x6b, 0x7d, 0x92, 0x5a, 0x2d, 0x51, 0x84, 0x43, 0x6e, 0xe8, 0x0d, 0x28,
- 0x18, 0xdd, 0x60, 0xb7, 0x3a, 0x7d, 0xcc, 0x61, 0x50, 0x37, 0x7c, 0xcb, 0xac, 0x75, 0x83, 0xdd,
- 0x7a, 0xf9, 0xc1, 0xfd, 0x0b, 0x05, 0xfa, 0x0b, 0x33, 0x8a, 0x08, 0x43, 0xa5, 0xeb, 0xd9, 0x3a,
- 0x31, 0x3d, 0x12, 0x54, 0x67, 0x18, 0xf9, 0x4f, 0x2e, 0xf1, 0xf9, 0x82, 0x52, 0x58, 0xa2, 0x53,
- 0xd7, 0xd2, 0xc1, 0xf3, 0x4b, 0x1c, 0xe3, 0x26, 0x39, 0xd4, 0x89, 0x4d, 0xcc, 0xc0, 0xf5, 0x78,
- 0x33, 0xdd, 0xc6, 0x6b, 0x1c, 0x82, 0x23, 0x32, 0x28, 0x80, 0xd2, 0x8e, 0x65, 0x07, 0xc4, 0xab,
- 0xce, 0xe6, 0xd2, 0x4a, 0xca, 0xa8, 0xba, 0xc6, 0xe8, 0xd6, 0x81, 0x5a, 0x6c, 0xfe, 0x1b, 0x0b,
- 0x5e, 0x0b, 0x2f, 0xc3, 0x74, 0x6c, 0xc8, 0xa1, 0x39, 0x18, 0xdf, 0x23, 0x87, 0xdc, 0x5c, 0x63,
- 0xfa, 0x13, 0x9d, 0x85, 0xe2, 0x81, 0x61, 0x77, 0x85, 0x69, 0xc6, 0xfc, 0xcf, 0x4b, 0x63, 0x2f,
- 0x6a, 0x8b, 0x3f, 0xd1, 0xe0, 0xc9, 0x9e, 0x83, 0x85, 0xce, 0x2f, 0xcd, 0xae, 0x67, 0x34, 0x6c,
- 0xc2, 0xa8, 0x29, 0xf3, 0xcb, 0x0a, 0x2f, 0xc6, 0x21, 0x9c, 0x1a, 0x64, 0x3a, 0x8d, 0xad, 0x10,
- 0x9b, 0x04, 0x44, 0xcc, 0x74, 0xd2, 0x20, 0xd7, 0x24, 0x04, 0x2b, 0x58, 0xd4, 0x22, 0x5a, 0x4e,
- 0x40, 0x3c, 0xc7, 0xb0, 0xc5, 0x74, 0x27, 0xad, 0xc5, 0xaa, 0x28, 0xc7, 0x12, 0x43, 0x99, 0xc1,
- 0x0a, 0x47, 0xce, 0x60, 0x9f, 0x83, 0x33, 0x19, 0xda, 0xad, 0x54, 0xd7, 0x8e, 0xac, 0xfe, 0x27,
- 0x63, 0x70, 0x2e, 0x7b, 0x9c, 0xa2, 0x8b, 0x50, 0x70, 0xe8, 0x04, 0xc7, 0x27, 0xc2, 0x29, 0x41,
- 0xa0, 0xc0, 0x26, 0x36, 0x06, 0x51, 0x1b, 0x6c, 0x6c, 0xa0, 0x06, 0x1b, 0xef, 0xab, 0xc1, 0x62,
- 0x0b, 0x84, 0x42, 0x1f, 0x0b, 0x84, 0x3e, 0x67, 0x7d, 0x4a, 0xd8, 0xf0, 0x5a, 0xdd, 0x36, 0x55,
- 0x42, 0x36, 0x39, 0x55, 0x22, 0xc2, 0xb5, 0x10, 0x80, 0x23, 0x9c, 0xc5, 0xf7, 0x8a, 0xf0, 0x64,
- 0xed, 0x5e, 0xd7, 0x23, 0x4c, 0x47, 0xfd, 0x1b, 0xdd, 0x86, 0xba, 0x60, 0xb8, 0x08, 0x85, 0x9d,
- 0xfd, 0xa6, 0x93, 0x6c, 0xa8, 0x6b, 0x5b, 0x2b, 0x1b, 0x98, 0x41, 0x50, 0x07, 0xce, 0xf8, 0xbb,
- 0x86, 0x47, 0x9a, 0x35, 0xd3, 0x24, 0xbe, 0x7f, 0x93, 0x1c, 0xca, 0xa5, 0x43, 0xdf, 0x03, 0xf1,
- 0x89, 0x07, 0xf7, 0x2f, 0x9c, 0xd1, 0xd3, 0x54, 0x70, 0x16, 0x69, 0xd4, 0x84, 0xd9, 0x44, 0x31,
- 0x6b, 0xf4, 0xbe, 0xb9, 0xb1, 0x89, 0x23, 0xc1, 0x0d, 0x27, 0x49, 0x52, 0x05, 0xd8, 0xed, 0x36,
- 0xd8, 0xb7, 0xf0, 0x45, 0x89, 0x54, 0x80, 0x1b, 0xbc, 0x18, 0x87, 0x70, 0xf4, 0xbb, 0xea, 0x54,
- 0x5c, 0x64, 0x53, 0xf1, 0xce, 0xb0, 0x66, 0xb5, 0x57, 0x8f, 0x0c, 0x30, 0x29, 0x47, 0x46, 0xac,
- 0xf4, 0xa8, 0x18, 0xb1, 0x9f, 0x17, 0xe1, 0x29, 0xf6, 0xe9, 0x6c, 0xcc, 0xea, 0x81, 0xeb, 0x19,
- 0x2d, 0xa2, 0xea, 0xe3, 0xab, 0x80, 0x7c, 0x5e, 0x5a, 0x33, 0x4d, 0xb7, 0xeb, 0x04, 0x1b, 0xd1,
- 0x30, 0x5e, 0x10, 0x6d, 0x81, 0xf4, 0x14, 0x06, 0xce, 0xa8, 0x85, 0x5a, 0x30, 0x17, 0xad, 0xed,
- 0xf4, 0xc0, 0xb3, 0x9c, 0xd6, 0x60, 0x6a, 0x7b, 0xf6, 0xc1, 0xfd, 0x0b, 0x73, 0xcb, 0x09, 0x12,
- 0x38, 0x45, 0x94, 0x8e, 0x49, 0x36, 0x03, 0x33, 0x59, 0xc7, 0xe3, 0x63, 0x72, 0x2b, 0x04, 0xe0,
- 0x08, 0x27, 0xb6, 0xc0, 0x2c, 0x3c, 0x74, 0x81, 0xf9, 0x34, 0x8c, 0x37, 0xed, 0x7d, 0x61, 0x17,
- 0xe4, 0xa2, 0x7e, 0x65, 0x6d, 0x0b, 0xd3, 0x72, 0xba, 0x36, 0x8b, 0xb4, 0xb3, 0xc4, 0xb4, 0xd3,
- 0xca, 0x43, 0x3b, 0x7b, 0x74, 0xd1, 0xb1, 0x14, 0x74, 0xe2, 0xe4, 0x14, 0x14, 0xbd, 0x0c, 0xd3,
- 0x4d, 0x62, 0xba, 0x4d, 0xb2, 0x4e, 0x7c, 0xdf, 0x68, 0x91, 0x6a, 0x99, 0x35, 0xdc, 0xe3, 0x42,
- 0xd0, 0xe9, 0x15, 0x15, 0x88, 0xe3, 0xb8, 0xc3, 0x69, 0xf7, 0x4f, 0x4b, 0xb0, 0xc0, 0x9a, 0x4e,
- 0x27, 0xde, 0x81, 0x65, 0x92, 0x7a, 0xd7, 0x57, 0x75, 0x3b, 0x4b, 0x1f, 0xb5, 0x91, 0xeb, 0xe3,
- 0x58, 0x1f, 0xfa, 0x78, 0x05, 0x2a, 0x81, 0xdb, 0xb1, 0xcc, 0x2c, 0x05, 0xde, 0x0e, 0x01, 0x38,
- 0xc2, 0x41, 0x2b, 0x30, 0xe7, 0x77, 0x1b, 0xbe, 0xe9, 0x59, 0x1d, 0xca, 0x57, 0xb1, 0xa2, 0x55,
- 0x51, 0x6f, 0x4e, 0x4f, 0xc0, 0x71, 0xaa, 0x46, 0xe8, 0x39, 0x15, 0x73, 0xf6, 0x9c, 0x06, 0x73,
- 0xdf, 0xbe, 0xa7, 0x0e, 0x9f, 0x09, 0x36, 0x7c, 0x5a, 0x79, 0x0c, 0x9f, 0x4c, 0x1d, 0x38, 0xd6,
- 0xe0, 0x29, 0x9f, 0xe0, 0xe0, 0x79, 0x13, 0x9e, 0xd8, 0xe9, 0xda, 0xf6, 0xe1, 0x56, 0xd7, 0xb0,
- 0xad, 0x1d, 0x8b, 0x34, 0x69, 0x47, 0xf9, 0x1d, 0xc3, 0xe4, 0xfe, 0x5e, 0xa5, 0x7e, 0x41, 0x88,
- 0xfc, 0xc4, 0xb5, 0x6c, 0x34, 0xdc, 0xab, 0xfe, 0x70, 0x43, 0xeb, 0x67, 0x1a, 0x4c, 0xd7, 0xad,
- 0xa0, 0xd1, 0x35, 0xf7, 0x48, 0x40, 0x9d, 0x03, 0xe4, 0x41, 0xb1, 0x41, 0x7d, 0x06, 0x31, 0x84,
- 0xb6, 0x86, 0x6c, 0x1e, 0x49, 0x3c, 0x72, 0x44, 0x2a, 0x0f, 0xee, 0x5f, 0x28, 0xb2, 0xbf, 0x98,
- 0xb3, 0x42, 0xb7, 0x01, 0x5c, 0xea, 0x93, 0x6c, 0xbb, 0x7b, 0xc4, 0x19, 0x6c, 0x2e, 0x99, 0xa1,
- 0x8b, 0xc5, 0x5b, 0xb5, 0xb0, 0x32, 0x56, 0x08, 0x2d, 0xfe, 0x48, 0x03, 0x94, 0xe6, 0x8f, 0x6e,
- 0x41, 0xb9, 0xeb, 0xd3, 0x15, 0xb5, 0x98, 0x01, 0xfb, 0xe6, 0x35, 0x45, 0x55, 0xea, 0xb6, 0xa8,
- 0x8a, 0x25, 0x11, 0x4a, 0xb0, 0x63, 0xf8, 0xfe, 0x1d, 0xd7, 0x6b, 0x0e, 0x26, 0x3c, 0x23, 0xb8,
- 0x29, 0xaa, 0x62, 0x49, 0x64, 0xf1, 0x57, 0x13, 0x70, 0x56, 0x0a, 0x9e, 0x98, 0xc6, 0x9b, 0x6c,
- 0x21, 0x7c, 0xc3, 0x75, 0xf7, 0x6e, 0x39, 0xd7, 0x2c, 0xc7, 0xf2, 0x77, 0xc5, 0x72, 0x5e, 0x4e,
- 0xe3, 0x2b, 0x29, 0x0c, 0x9c, 0x51, 0x0b, 0x7d, 0x47, 0x1d, 0xa0, 0x63, 0x6c, 0x80, 0x1a, 0x79,
- 0x75, 0xf6, 0x71, 0x87, 0xe6, 0xc4, 0x1d, 0xd2, 0xd8, 0x75, 0xdd, 0x3d, 0xb1, 0x30, 0x5d, 0x1f,
- 0x52, 0x9e, 0xd7, 0x39, 0xb5, 0x65, 0xd7, 0x09, 0xc8, 0xdd, 0x80, 0x7b, 0xd8, 0xa2, 0x0c, 0x87,
- 0xac, 0xd0, 0x97, 0x85, 0x87, 0x5d, 0x60, 0x2c, 0xd7, 0xf2, 0x6a, 0x82, 0x4c, 0x9f, 0x7b, 0x11,
- 0x4a, 0xbc, 0x16, 0x5b, 0xee, 0x56, 0xb8, 0xa9, 0xe0, 0xcb, 0x55, 0x2c, 0x20, 0xe8, 0x53, 0x50,
- 0x74, 0xef, 0x38, 0x62, 0xf5, 0x59, 0xa9, 0x3f, 0x21, 0x1a, 0x6c, 0x76, 0x85, 0x74, 0x3c, 0x62,
- 0x1a, 0x01, 0x69, 0xde, 0xa2, 0x60, 0xcc, 0xb1, 0xd0, 0xaf, 0x03, 0x50, 0x11, 0x89, 0x49, 0x35,
- 0x8b, 0x2d, 0x08, 0x2a, 0xf5, 0xa7, 0x44, 0x9d, 0xb3, 0x51, 0x9d, 0x4d, 0x89, 0x83, 0x15, 0x7c,
- 0x74, 0x03, 0x66, 0x3c, 0xd2, 0x71, 0x7d, 0x2b, 0x70, 0xbd, 0x43, 0xdd, 0xee, 0xb6, 0x98, 0x55,
- 0xac, 0xd4, 0x2f, 0x0a, 0x0a, 0xd5, 0x88, 0x02, 0x8e, 0xe1, 0xe1, 0x44, 0x3d, 0xf4, 0x81, 0x06,
- 0x53, 0xb2, 0xc8, 0x22, 0x7e, 0xb5, 0xc2, 0x54, 0x0a, 0xe7, 0xd5, 0x9e, 0x11, 0xfb, 0x68, 0x7b,
- 0x14, 0x2b, 0xfc, 0x70, 0x8c, 0xbb, 0x62, 0xe6, 0xe1, 0x51, 0x59, 0xc4, 0xdf, 0x83, 0x33, 0x19,
- 0x5f, 0x8b, 0x9e, 0x09, 0xf5, 0x81, 0xaf, 0xd6, 0xa7, 0xc5, 0xc7, 0x17, 0x63, 0x5a, 0xf0, 0x4a,
- 0xaa, 0x1f, 0xf9, 0xfa, 0xe4, 0x9c, 0xc0, 0x9e, 0x39, 0xba, 0xf7, 0x16, 0xff, 0xa9, 0x02, 0x0b,
- 0x92, 0x39, 0x9d, 0x62, 0x89, 0xa7, 0xda, 0x1d, 0x65, 0x64, 0x6a, 0x27, 0x37, 0x32, 0xe3, 0xaa,
- 0x3d, 0x36, 0xb4, 0x6a, 0x8f, 0x1f, 0x53, 0xb5, 0x7f, 0x3b, 0xa9, 0xda, 0x05, 0xa6, 0xda, 0x6f,
- 0xe4, 0xa5, 0xda, 0xbc, 0xbd, 0x07, 0x54, 0xf0, 0x7e, 0x4c, 0xc9, 0x1b, 0x30, 0x69, 0x30, 0xc7,
- 0x9c, 0x4f, 0xac, 0xa5, 0x41, 0xe6, 0xa6, 0xd9, 0x07, 0xf7, 0x2f, 0x4c, 0xd6, 0xa2, 0xda, 0x58,
- 0x25, 0x85, 0xde, 0x81, 0x69, 0xd1, 0x4b, 0x62, 0x03, 0x71, 0x62, 0x10, 0xda, 0xf3, 0xd4, 0x5f,
- 0x78, 0x5d, 0xad, 0x8f, 0xe3, 0xe4, 0xd0, 0x6b, 0x70, 0xae, 0x11, 0x36, 0x8f, 0xcf, 0x9a, 0xa7,
- 0x6e, 0xf8, 0xe4, 0x36, 0x5e, 0x13, 0xf6, 0xe9, 0xbc, 0x68, 0xa1, 0x73, 0x89, 0x46, 0x14, 0x58,
- 0xb8, 0x47, 0xed, 0x1e, 0x13, 0x68, 0xe5, 0x58, 0x13, 0x68, 0x6c, 0x85, 0x0b, 0xb9, 0xac, 0x70,
- 0x7b, 0x0f, 0xc1, 0x63, 0xad, 0x70, 0x27, 0x4f, 0x70, 0x85, 0x2b, 0x9c, 0x8e, 0xa9, 0x7c, 0x9d,
- 0x8e, 0xe1, 0x2c, 0xea, 0x77, 0x34, 0x78, 0xb2, 0xe7, 0x28, 0x43, 0x2f, 0xc4, 0xcc, 0x8b, 0x16,
- 0x3f, 0x41, 0xeb, 0x61, 0x54, 0x86, 0xb5, 0xb3, 0x7f, 0x5a, 0x84, 0x33, 0xcb, 0x86, 0x4d, 0x9c,
- 0xa6, 0x11, 0x33, 0xb0, 0xcf, 0x41, 0xd9, 0x37, 0x77, 0x49, 0xb3, 0x6b, 0x87, 0xbb, 0x32, 0xb2,
- 0x87, 0x75, 0x51, 0x8e, 0x25, 0x86, 0xdc, 0x36, 0x3e, 0x30, 0x6c, 0xc1, 0x3f, 0xbe, 0x6d, 0x7c,
- 0x20, 0xb7, 0x8d, 0x0f, 0x0c, 0x1b, 0xbd, 0x04, 0x33, 0x62, 0x3f, 0xd4, 0x75, 0x56, 0x8c, 0x80,
- 0xf8, 0xd5, 0x71, 0x66, 0x31, 0x10, 0x95, 0xf7, 0x6a, 0x0c, 0x82, 0x13, 0x98, 0x94, 0x53, 0x60,
- 0xb5, 0xc9, 0x3d, 0xd7, 0x09, 0x1d, 0x51, 0xc9, 0x69, 0x5b, 0x94, 0x63, 0x89, 0x81, 0xbe, 0x9d,
- 0xde, 0xd0, 0xfb, 0xd2, 0x90, 0xca, 0x97, 0xd1, 0x58, 0x03, 0x0c, 0x85, 0xaf, 0x6b, 0x30, 0xd9,
- 0x21, 0x9e, 0x6f, 0xf9, 0x01, 0x71, 0x4c, 0x22, 0x2c, 0xe0, 0xad, 0x3c, 0x06, 0xc4, 0x66, 0x44,
- 0x96, 0xdb, 0x4a, 0xa5, 0x00, 0xab, 0x4c, 0x4f, 0xc7, 0xe3, 0x1c, 0x6e, 0xe0, 0xdc, 0x85, 0xb3,
- 0xcb, 0x46, 0x60, 0xee, 0x76, 0x3b, 0x7c, 0x50, 0x76, 0x3d, 0x23, 0xb0, 0x5c, 0x07, 0x3d, 0x0b,
- 0x13, 0xc4, 0x31, 0x1a, 0x36, 0x69, 0x26, 0x8f, 0x43, 0xae, 0xf2, 0x62, 0x1c, 0xc2, 0xd1, 0xa7,
- 0x61, 0xb2, 0x6d, 0xdc, 0x5d, 0x11, 0x35, 0x85, 0x9a, 0xca, 0x60, 0x81, 0xf5, 0x08, 0x84, 0x55,
- 0xbc, 0xc5, 0xaf, 0xc0, 0x59, 0xce, 0x72, 0xdd, 0xe8, 0x28, 0x2d, 0xda, 0xc7, 0xc9, 0xc3, 0x0a,
- 0xcc, 0x99, 0x1e, 0x31, 0x02, 0xb2, 0xba, 0xb3, 0xe1, 0x06, 0x57, 0xef, 0x5a, 0x7e, 0x20, 0x8e,
- 0x20, 0xe4, 0xde, 0xc9, 0x72, 0x02, 0x8e, 0x53, 0x35, 0x16, 0xbf, 0x3b, 0x01, 0xe8, 0x6a, 0xdb,
- 0x0a, 0x82, 0xf8, 0x02, 0xe8, 0x12, 0x94, 0x1a, 0x9e, 0xbb, 0x27, 0x57, 0x61, 0xf2, 0x18, 0xa1,
- 0xce, 0x4a, 0xb1, 0x80, 0x52, 0x9b, 0x62, 0xee, 0x1a, 0x8e, 0x43, 0xec, 0x68, 0xc9, 0x22, 0x6d,
- 0xca, 0xb2, 0x84, 0x60, 0x05, 0x8b, 0x85, 0x55, 0xf0, 0x7f, 0xca, 0x3e, 0x51, 0x14, 0x56, 0x11,
- 0x81, 0xb0, 0x8a, 0x17, 0x73, 0x63, 0x0b, 0x79, 0xbb, 0xb1, 0xc5, 0x1c, 0xdc, 0xd8, 0xec, 0x70,
- 0x83, 0xd2, 0xa9, 0x84, 0x1b, 0x4c, 0xf4, 0x1b, 0x6e, 0x50, 0xce, 0x79, 0xd3, 0xec, 0x43, 0xd5,
- 0x24, 0x72, 0x97, 0xe8, 0xdd, 0x61, 0xc7, 0x7f, 0x4a, 0x3d, 0x8f, 0xb5, 0x38, 0x78, 0x64, 0xfc,
- 0xa2, 0x8f, 0xc6, 0x60, 0x2e, 0x69, 0x72, 0xd1, 0x3d, 0x98, 0x30, 0xb9, 0x85, 0x12, 0x1e, 0x89,
- 0x3e, 0xf4, 0x44, 0x93, 0xb6, 0x77, 0xe2, 0x4c, 0x9e, 0x43, 0x70, 0xc8, 0x10, 0x7d, 0x4d, 0x83,
- 0x8a, 0x19, 0x1a, 0x29, 0xb1, 0xe3, 0x33, 0x34, 0xfb, 0x0c, 0xa3, 0xc7, 0x0f, 0xda, 0x25, 0x04,
- 0x47, 0x4c, 0x17, 0x7f, 0x3e, 0x06, 0x93, 0xaa, 0x7d, 0xfa, 0x92, 0xa2, 0x65, 0xbc, 0x3d, 0xfe,
- 0xaf, 0x32, 0x76, 0x65, 0xec, 0x57, 0x24, 0x04, 0xc5, 0xa6, 0xa3, 0xf9, 0x56, 0x83, 0x2e, 0x6d,
- 0x68, 0xe7, 0x44, 0x76, 0x2a, 0x2a, 0x53, 0x14, 0xa7, 0x03, 0x05, 0xbf, 0x43, 0x4c, 0xf1, 0xb9,
- 0x1b, 0xf9, 0xa9, 0x8d, 0xde, 0x21, 0x66, 0x64, 0xd0, 0xe9, 0x3f, 0xcc, 0x38, 0xa1, 0xbb, 0x50,
- 0xf2, 0x03, 0x23, 0xe8, 0xfa, 0x62, 0x37, 0x28, 0x47, 0x55, 0xd5, 0x19, 0xdd, 0xc8, 0x8a, 0xf3,
- 0xff, 0x58, 0xf0, 0x5b, 0xbc, 0x0e, 0xf3, 0x29, 0xbd, 0xa6, 0xa6, 0x9d, 0xdc, 0xed, 0x78, 0xc4,
- 0xa7, 0xab, 0xa3, 0xe4, 0x72, 0xf1, 0xaa, 0x84, 0x60, 0x05, 0x6b, 0xf1, 0x17, 0x1a, 0xcc, 0x2a,
- 0x94, 0xd6, 0x2c, 0x3f, 0x40, 0x5f, 0x4c, 0x75, 0xd5, 0x52, 0x7f, 0x5d, 0x45, 0x6b, 0xb3, 0x8e,
- 0x92, 0xe3, 0x3b, 0x2c, 0x51, 0xba, 0xc9, 0x85, 0xa2, 0x15, 0x90, 0xb6, 0x2f, 0x76, 0xf4, 0x5e,
- 0xcd, 0xaf, 0xcd, 0xa2, 0x9d, 0x87, 0x55, 0xca, 0x00, 0x73, 0x3e, 0x8b, 0x7f, 0x56, 0x8f, 0x7d,
- 0x22, 0xed, 0x3f, 0x16, 0xd5, 0x46, 0x8b, 0xea, 0x5d, 0x5f, 0x39, 0x67, 0x8c, 0xa2, 0xda, 0x14,
- 0x18, 0x8e, 0x61, 0xa2, 0x7d, 0x28, 0x07, 0xa4, 0xdd, 0xb1, 0x8d, 0x20, 0x3c, 0x0a, 0xbf, 0x3e,
- 0xe4, 0x17, 0x6c, 0x0b, 0x72, 0x7c, 0x96, 0x0a, 0xff, 0x61, 0xc9, 0x06, 0xb5, 0x61, 0xc2, 0xe7,
- 0x67, 0x0a, 0x42, 0xcf, 0xae, 0x0d, 0xc9, 0x31, 0x3c, 0xa1, 0x60, 0xc6, 0x43, 0xfc, 0xc1, 0x21,
- 0x0f, 0xf4, 0x15, 0x28, 0xb6, 0x2d, 0xc7, 0x72, 0xc5, 0x26, 0xc2, 0x9b, 0xf9, 0x0e, 0xa4, 0xa5,
- 0x75, 0x4a, 0x9b, 0x4f, 0x03, 0xb2, 0xbf, 0x58, 0x19, 0xe6, 0x6c, 0x59, 0xfc, 0x9b, 0x29, 0x16,
- 0xd5, 0x62, 0x8d, 0xfe, 0xc5, 0x9c, 0x65, 0x90, 0x6b, 0xf6, 0xf8, 0x6c, 0x14, 0x16, 0x63, 0xc9,
- 0x1f, 0xdd, 0x83, 0xc2, 0x8e, 0x65, 0x13, 0x71, 0xbc, 0xfa, 0x46, 0xce, 0x72, 0x5c, 0xb3, 0x6c,
- 0xc2, 0x65, 0x88, 0x02, 0x30, 0x2c, 0x9b, 0x60, 0xc6, 0x93, 0x35, 0x84, 0x47, 0x38, 0x0d, 0x71,
- 0x40, 0x95, 0x77, 0x43, 0x60, 0x41, 0x3e, 0xd1, 0x10, 0x61, 0x31, 0x96, 0xfc, 0xd1, 0x6f, 0x6a,
- 0xd1, 0x0e, 0x1b, 0x0f, 0x4a, 0x7c, 0x2b, 0x67, 0x59, 0xc4, 0x76, 0x0b, 0x17, 0x45, 0x2e, 0xdb,
- 0x53, 0x7b, 0x6e, 0xf7, 0xa0, 0x60, 0xb4, 0xf7, 0x3b, 0x62, 0xa9, 0x92, 0x77, 0x8f, 0xd4, 0xda,
- 0xfb, 0x9d, 0x44, 0x8f, 0xd4, 0xd6, 0xb7, 0x36, 0x31, 0xe3, 0x49, 0x87, 0xc6, 0x9e, 0xb1, 0xb3,
- 0x17, 0x6e, 0xa6, 0xe4, 0x3d, 0x34, 0x6e, 0x52, 0xda, 0x89, 0xa1, 0xc1, 0xca, 0x30, 0x67, 0x4b,
- 0xbf, 0xbd, 0xbd, 0x1f, 0x04, 0xd5, 0xc9, 0x91, 0x7c, 0xfb, 0xfa, 0x7e, 0x10, 0x24, 0xbe, 0x7d,
- 0x7d, 0x6b, 0x7b, 0x1b, 0x33, 0x9e, 0x94, 0xb7, 0x63, 0x04, 0x7e, 0x75, 0x6a, 0x24, 0xbc, 0x37,
- 0x8c, 0xc0, 0x4f, 0xf0, 0xde, 0xa8, 0x6d, 0xeb, 0x98, 0xf1, 0x44, 0x07, 0x30, 0xee, 0x3b, 0x7e,
- 0x75, 0x9a, 0xb1, 0x7e, 0x3d, 0x67, 0xd6, 0xba, 0x23, 0x38, 0xcb, 0x08, 0x0b, 0x7d, 0x43, 0xc7,
- 0x94, 0x21, 0xe3, 0xbb, 0xef, 0x57, 0x67, 0x46, 0xc3, 0x77, 0x3f, 0xc5, 0x77, 0x8b, 0xf2, 0xdd,
- 0xf7, 0xd1, 0xd7, 0x35, 0x28, 0x75, 0xba, 0x0d, 0xbd, 0xdb, 0xa8, 0xce, 0x32, 0xde, 0x5f, 0xc8,
- 0x99, 0xf7, 0x26, 0x23, 0xce, 0xd9, 0xcb, 0x35, 0x06, 0x2f, 0xc4, 0x82, 0x33, 0x13, 0x82, 0x73,
- 0xad, 0xce, 0x8d, 0x44, 0x88, 0xeb, 0x8c, 0x5a, 0x42, 0x08, 0x5e, 0x88, 0x05, 0xe7, 0x50, 0x08,
- 0xdb, 0x68, 0x54, 0xe7, 0x47, 0x25, 0x84, 0x6d, 0x64, 0x08, 0x61, 0x1b, 0x5c, 0x08, 0xdb, 0x68,
- 0x50, 0xd5, 0xdf, 0x6d, 0xee, 0xf8, 0x55, 0x34, 0x12, 0xd5, 0xbf, 0xd1, 0xdc, 0x49, 0xaa, 0xfe,
- 0x8d, 0x95, 0x6b, 0x3a, 0x66, 0x3c, 0xa9, 0xc9, 0xf1, 0x6d, 0xc3, 0xdc, 0xab, 0x9e, 0x19, 0x89,
- 0xc9, 0xd1, 0x29, 0xed, 0x84, 0xc9, 0x61, 0x65, 0x98, 0xb3, 0x45, 0xbf, 0xa7, 0xc1, 0xa4, 0x08,
- 0xb1, 0xba, 0xee, 0x59, 0xcd, 0xea, 0xd9, 0x7c, 0x3c, 0xc4, 0xa4, 0x18, 0x11, 0x07, 0x2e, 0x8c,
- 0xdc, 0x5d, 0x50, 0x20, 0x58, 0x15, 0x04, 0xfd, 0xb1, 0x06, 0x33, 0x46, 0x2c, 0x98, 0xae, 0xfa,
- 0x38, 0x93, 0xad, 0x91, 0xf7, 0x94, 0x10, 0x8f, 0xd8, 0x63, 0xe2, 0xc9, 0xdd, 0xd4, 0x38, 0x10,
- 0x27, 0x24, 0x62, 0xea, 0xeb, 0x07, 0x9e, 0xd5, 0x21, 0xd5, 0x73, 0x23, 0x51, 0x5f, 0x9d, 0x11,
- 0x4f, 0xa8, 0x2f, 0x2f, 0xc4, 0x82, 0x33, 0x9b, 0xba, 0x09, 0x77, 0xc9, 0xab, 0x4f, 0x8c, 0x64,
- 0xea, 0x0e, 0x1d, 0xfe, 0xf8, 0xd4, 0x2d, 0x4a, 0x71, 0xc8, 0x9c, 0xea, 0xb2, 0x47, 0x9a, 0x96,
- 0x5f, 0xad, 0x8e, 0x44, 0x97, 0x31, 0xa5, 0x9d, 0xd0, 0x65, 0x56, 0x86, 0x39, 0x5b, 0x6a, 0xce,
- 0x1d, 0x7f, 0xbf, 0xfa, 0xe4, 0x48, 0xcc, 0xf9, 0x86, 0xbf, 0x9f, 0x30, 0xe7, 0x1b, 0xfa, 0x16,
- 0xa6, 0x0c, 0x85, 0x39, 0xb7, 0x7d, 0xc3, 0xab, 0x2e, 0x8c, 0xc8, 0x9c, 0x53, 0xe2, 0x29, 0x73,
- 0x4e, 0x0b, 0xb1, 0xe0, 0xcc, 0xb4, 0x80, 0x65, 0x51, 0x59, 0x66, 0xf5, 0x13, 0x23, 0xd1, 0x82,
- 0xeb, 0x9c, 0x7a, 0x42, 0x0b, 0x44, 0x29, 0x0e, 0x99, 0xa3, 0xcb, 0x74, 0x55, 0xdb, 0xb1, 0x2d,
- 0xd3, 0xf0, 0xab, 0x4f, 0x5d, 0xd4, 0x2e, 0x17, 0xb9, 0xe3, 0x83, 0x45, 0x19, 0x96, 0x50, 0xf4,
- 0x43, 0x0d, 0x66, 0x13, 0xc7, 0x64, 0xd5, 0xa7, 0x99, 0xe8, 0x66, 0xce, 0xa2, 0xd7, 0xe3, 0x5c,
- 0xf8, 0x27, 0xc8, 0xc0, 0x86, 0xe4, 0x09, 0x4d, 0x52, 0x28, 0xf4, 0x6d, 0x0d, 0x2a, 0xb2, 0xac,
- 0x7a, 0x9e, 0x89, 0xf8, 0xf6, 0xa8, 0x44, 0xe4, 0xc2, 0xc9, 0x30, 0xbd, 0xe8, 0x44, 0x3e, 0x12,
- 0x81, 0x59, 0x6d, 0xa6, 0xf3, 0x7a, 0xe0, 0x11, 0xa3, 0x5d, 0xbd, 0x30, 0x12, 0xab, 0x8d, 0x23,
- 0x0e, 0x09, 0xab, 0xad, 0x40, 0xb0, 0x2a, 0x08, 0xeb, 0x52, 0x23, 0x1e, 0x25, 0x57, 0xbd, 0x38,
- 0x92, 0x2e, 0x4d, 0xc6, 0xe2, 0xc5, 0xbb, 0x34, 0x01, 0xc5, 0x49, 0xa1, 0xd0, 0x5f, 0x6a, 0x30,
- 0x6f, 0x24, 0xa3, 0x61, 0xab, 0xff, 0x8b, 0x89, 0x4a, 0x46, 0x21, 0x6a, 0x2c, 0xea, 0x96, 0x09,
- 0xfb, 0xa4, 0x10, 0x76, 0x3e, 0x05, 0xc7, 0x69, 0xd1, 0x16, 0xba, 0x00, 0x91, 0x6b, 0x9d, 0xb1,
- 0x7d, 0xb9, 0xa5, 0x6e, 0x5f, 0x4e, 0xbe, 0xf0, 0xf2, 0xc0, 0x1b, 0xc8, 0xfa, 0xff, 0xab, 0x79,
- 0x81, 0xb5, 0x63, 0x98, 0x81, 0xb2, 0xf7, 0xb9, 0xf0, 0x1d, 0x0d, 0xa6, 0x63, 0xee, 0x74, 0x06,
- 0xeb, 0xdd, 0x38, 0x6b, 0x9c, 0xff, 0x89, 0x9b, 0x2a, 0xd1, 0x6f, 0x69, 0x50, 0x91, 0x8e, 0x75,
- 0x86, 0x34, 0xcd, 0xb8, 0x34, 0xc3, 0x6e, 0x14, 0x32, 0x56, 0xd9, 0x92, 0xd0, 0xb6, 0x89, 0x79,
- 0xd8, 0xa3, 0x6f, 0x1b, 0xc9, 0x2e, 0x5b, 0xa2, 0x0f, 0x35, 0x98, 0x52, 0xfd, 0xec, 0x0c, 0x81,
- 0x5a, 0x71, 0x81, 0xb6, 0xf2, 0x89, 0xa3, 0x39, 0xa2, 0xaf, 0xa4, 0xcb, 0x3d, 0xfa, 0xbe, 0x4a,
- 0xe4, 0x41, 0xaa, 0x92, 0x7c, 0x4b, 0x03, 0x88, 0xfc, 0xef, 0x0c, 0x51, 0x48, 0x5c, 0x94, 0x61,
- 0x8f, 0x68, 0x39, 0xaf, 0xde, 0xad, 0x22, 0x9d, 0xf1, 0xd1, 0xb7, 0x0a, 0x75, 0xf2, 0x7b, 0x48,
- 0xf2, 0x4d, 0x0d, 0x2a, 0xd2, 0x35, 0x1f, 0x7d, 0xa3, 0x50, 0x97, 0x9f, 0x2f, 0x9e, 0xd3, 0xa2,
- 0x7c, 0x43, 0x83, 0x72, 0xe8, 0xaa, 0x67, 0x48, 0x62, 0xc6, 0x25, 0x19, 0x36, 0xfc, 0x4b, 0xdf,
- 0xd0, 0x7b, 0x34, 0x09, 0x93, 0x63, 0xff, 0xc4, 0xe4, 0xd8, 0xea, 0x25, 0xc7, 0xfb, 0x1a, 0x4c,
- 0x2a, 0x6e, 0x7c, 0x86, 0x28, 0x3b, 0x71, 0x51, 0x86, 0x3d, 0x9d, 0x10, 0xcc, 0x7a, 0x4b, 0xa3,
- 0xf8, 0xf3, 0xa3, 0x97, 0x46, 0x30, 0x3b, 0x52, 0x9a, 0xd0, 0xb1, 0x3f, 0x11, 0x69, 0x28, 0xb3,
- 0xde, 0xc3, 0x59, 0x3a, 0xf9, 0xa3, 0x1f, 0xce, 0x37, 0x56, 0xae, 0xe9, 0x47, 0x18, 0xb9, 0xc8,
- 0xe3, 0x1f, 0xfd, 0x78, 0xe6, 0xbc, 0xb2, 0x65, 0xf9, 0x9e, 0x06, 0x73, 0x49, 0xb7, 0x3f, 0x43,
- 0xa2, 0xbd, 0xb8, 0x44, 0xc3, 0xa6, 0x77, 0xab, 0x1c, 0xb3, 0xe5, 0xfa, 0x23, 0x0d, 0xce, 0x64,
- 0xb8, 0xfc, 0x19, 0xa2, 0x39, 0x71, 0xd1, 0xde, 0x18, 0x55, 0x66, 0x60, 0x52, 0xb3, 0x15, 0x9f,
- 0x7f, 0xf4, 0x9a, 0x2d, 0x98, 0xf5, 0x5e, 0x4e, 0xa8, 0xbe, 0xff, 0xe8, 0x97, 0x13, 0xe9, 0xd0,
- 0x82, 0xa4, 0x7e, 0x47, 0xbb, 0x00, 0xa3, 0xd7, 0x6f, 0xce, 0xab, 0xf7, 0x3c, 0x11, 0xee, 0x09,
- 0x8c, 0x7e, 0x9e, 0xd8, 0xd0, 0xb7, 0x8e, 0x9c, 0x27, 0xe4, 0xfe, 0xc0, 0x49, 0xcc, 0x13, 0x8c,
- 0x59, 0x6f, 0x8d, 0x51, 0xf7, 0x09, 0x46, 0xaf, 0x31, 0x21, 0xb7, 0x6c, 0x79, 0xbe, 0xaf, 0x29,
- 0x89, 0x2c, 0x8a, 0xf3, 0x9f, 0x21, 0x97, 0x1b, 0x97, 0xeb, 0xcd, 0x91, 0x45, 0xd2, 0xaa, 0xf2,
- 0x7d, 0xa4, 0xc1, 0x4c, 0xdc, 0xf3, 0xcf, 0x90, 0xcc, 0x8a, 0x4b, 0xa6, 0x8f, 0x20, 0x49, 0x26,
- 0x69, 0xb9, 0x93, 0xae, 0xff, 0xe8, 0x2d, 0xb7, 0xca, 0xb1, 0x77, 0x5f, 0x66, 0x79, 0xfd, 0xa3,
- 0xef, 0xcb, 0xde, 0x79, 0x7f, 0xaa, 0x7c, 0x3f, 0xd0, 0xe0, 0x5c, 0xb6, 0xab, 0x9f, 0x21, 0xe1,
- 0x7e, 0x5c, 0xc2, 0xb7, 0x46, 0x98, 0xd8, 0xab, 0x86, 0x32, 0x05, 0xb1, 0xc0, 0x12, 0x1e, 0x75,
- 0x82, 0xde, 0x95, 0x71, 0x2e, 0x3c, 0x1c, 0xe4, 0x33, 0x83, 0xef, 0x1d, 0x1c, 0x1d, 0xce, 0xf2,
- 0xd7, 0x05, 0x98, 0x4d, 0xf8, 0xd1, 0xec, 0x22, 0x05, 0xfa, 0x97, 0xdd, 0x3a, 0xa4, 0xc5, 0x53,
- 0x53, 0xaf, 0x86, 0x00, 0x1c, 0xe1, 0xa0, 0x8f, 0x34, 0x98, 0xbd, 0x63, 0x04, 0xe6, 0xee, 0xa6,
- 0x11, 0xec, 0xf2, 0x98, 0xa4, 0x9c, 0x56, 0x54, 0xaf, 0xc7, 0xa9, 0x46, 0xbb, 0x48, 0x09, 0x00,
- 0x4e, 0xf2, 0x47, 0xcf, 0xc2, 0x44, 0xc7, 0xb5, 0x6d, 0xcb, 0x69, 0x89, 0xeb, 0x23, 0xe4, 0xb6,
- 0xe8, 0x26, 0x2f, 0xc6, 0x21, 0x3c, 0x7e, 0xed, 0x4f, 0x21, 0x97, 0xd3, 0xfe, 0x44, 0x93, 0x1e,
- 0x2b, 0x08, 0xaf, 0xf8, 0xa8, 0x04, 0xe1, 0xfd, 0x43, 0x01, 0x50, 0xda, 0xd6, 0x3f, 0xec, 0x62,
- 0xac, 0x4b, 0x50, 0x32, 0x23, 0x55, 0x51, 0xc2, 0x66, 0x45, 0x8f, 0x0a, 0x28, 0x0f, 0x68, 0xf7,
- 0x89, 0xd9, 0xf5, 0x48, 0xfa, 0x1e, 0x14, 0x5e, 0x8e, 0x25, 0xc6, 0x80, 0x69, 0xfe, 0x1f, 0xa6,
- 0x83, 0xd2, 0xdf, 0xcd, 0x7d, 0xd2, 0x1b, 0xa0, 0xf3, 0x6f, 0xb3, 0x6b, 0x4f, 0x76, 0x45, 0xde,
- 0x4c, 0x69, 0xe0, 0x64, 0xd7, 0x9a, 0xac, 0x8c, 0x15, 0x42, 0xa7, 0x73, 0x29, 0xc0, 0x70, 0x3a,
- 0xf5, 0xf7, 0x1a, 0xcc, 0x70, 0x47, 0xb3, 0xd6, 0xe9, 0x2c, 0x7b, 0xa4, 0xe9, 0xd3, 0xc6, 0xe9,
- 0x78, 0xd6, 0x81, 0x11, 0x90, 0x30, 0x27, 0x63, 0xb0, 0xc6, 0xd9, 0x94, 0x95, 0xb1, 0x42, 0x08,
- 0x3d, 0x03, 0x45, 0xa3, 0xd3, 0x59, 0x5d, 0x61, 0x32, 0x8c, 0x47, 0xe7, 0x57, 0x35, 0x5a, 0x88,
- 0x39, 0x0c, 0xbd, 0x02, 0x33, 0x96, 0xe3, 0x07, 0x86, 0x6d, 0xb3, 0xe0, 0xcf, 0xd5, 0x15, 0xa6,
- 0x8a, 0xe3, 0xd1, 0x69, 0xe4, 0x6a, 0x0c, 0x8a, 0x13, 0xd8, 0x8b, 0x7f, 0x33, 0x09, 0xf3, 0x29,
- 0xbf, 0x19, 0x2d, 0xc0, 0x98, 0xc5, 0xa3, 0xe5, 0xc7, 0xeb, 0x20, 0x28, 0x8d, 0xad, 0xae, 0xe0,
- 0x31, 0xab, 0xa9, 0xa6, 0xd5, 0x8d, 0x9d, 0x5c, 0x5a, 0x9d, 0x4c, 0x30, 0x1d, 0xef, 0x37, 0xc1,
- 0x34, 0x4a, 0x62, 0x11, 0x49, 0x20, 0x19, 0x59, 0x78, 0x51, 0xe2, 0x0b, 0x56, 0xf0, 0xfb, 0x4a,
- 0x53, 0xbb, 0x05, 0x65, 0xa3, 0x63, 0x1d, 0x23, 0x47, 0x8d, 0x9d, 0x6c, 0xd5, 0x36, 0x57, 0x79,
- 0x82, 0x9a, 0x24, 0x32, 0xf2, 0xec, 0x34, 0xd5, 0x5c, 0x95, 0x1f, 0x6a, 0xae, 0x2e, 0x41, 0xc9,
- 0x30, 0x03, 0xeb, 0x80, 0x88, 0x3c, 0x33, 0x69, 0x04, 0x6b, 0xac, 0x14, 0x0b, 0xa8, 0xb8, 0x5e,
- 0x31, 0x08, 0x27, 0x65, 0x48, 0x5d, 0xaf, 0x18, 0x82, 0xb0, 0x8a, 0x87, 0x5e, 0x86, 0x69, 0xae,
- 0x34, 0x61, 0x86, 0xdc, 0x24, 0xab, 0x28, 0xef, 0xe5, 0xb8, 0xae, 0x02, 0x71, 0x1c, 0x17, 0xd5,
- 0x60, 0x96, 0x17, 0xdc, 0xee, 0xd8, 0xae, 0xd1, 0xa4, 0xd5, 0xa7, 0xe2, 0x5a, 0x71, 0x3d, 0x0e,
- 0xc6, 0x49, 0xfc, 0x1e, 0x29, 0x75, 0xd3, 0xc7, 0x4a, 0xa9, 0xfb, 0x40, 0xb5, 0xd5, 0x3c, 0x2e,
- 0xe8, 0x9d, 0xbc, 0x77, 0xb2, 0x06, 0x30, 0xd5, 0xef, 0x25, 0x13, 0x3f, 0x79, 0xb8, 0xd0, 0xb0,
- 0xa6, 0x95, 0x0e, 0xaf, 0xa6, 0x9a, 0xda, 0xd9, 0x57, 0xc2, 0xe7, 0x67, 0x60, 0xda, 0xf5, 0x5a,
- 0x86, 0x63, 0xdd, 0x63, 0x06, 0xc7, 0x67, 0x61, 0x43, 0x15, 0xae, 0xad, 0xb7, 0x54, 0x00, 0x8e,
- 0xe3, 0xa1, 0x7b, 0x50, 0x69, 0x85, 0x56, 0xb6, 0x3a, 0x9f, 0x8b, 0x9d, 0x89, 0x5b, 0x6d, 0x1e,
- 0xa7, 0x2e, 0xcb, 0x70, 0xc4, 0x4e, 0x99, 0x95, 0xd0, 0xa3, 0x32, 0x2b, 0xbd, 0x57, 0x66, 0x66,
- 0x3c, 0xbe, 0xe1, 0x78, 0x4a, 0x19, 0xd0, 0x9f, 0x85, 0x8a, 0x48, 0x3e, 0x14, 0x73, 0x57, 0xa5,
- 0xfe, 0x09, 0xa1, 0x2a, 0x67, 0x52, 0x09, 0xd0, 0xab, 0x2b, 0x38, 0xc2, 0x56, 0x0c, 0xef, 0x78,
- 0xbf, 0xf9, 0xc1, 0x85, 0xfc, 0xf2, 0x83, 0x75, 0x78, 0x9c, 0x27, 0x82, 0xe9, 0xfa, 0xda, 0x6b,
- 0xc4, 0xb3, 0x76, 0x2c, 0x93, 0xe7, 0x81, 0xf1, 0xdb, 0x96, 0x9e, 0x16, 0x1f, 0xf1, 0xf8, 0xd5,
- 0x2c, 0x24, 0x9c, 0x5d, 0x57, 0x58, 0x3a, 0xdb, 0x90, 0x96, 0xae, 0x94, 0xb2, 0x74, 0x11, 0x10,
- 0xc7, 0x71, 0x7b, 0x98, 0xa9, 0xf2, 0xf0, 0x66, 0xaa, 0x92, 0x97, 0x99, 0x8a, 0x6b, 0xdc, 0x00,
- 0x66, 0xea, 0x32, 0x94, 0x45, 0xbf, 0xfb, 0x2c, 0x74, 0xb6, 0x22, 0x32, 0xb2, 0x44, 0x19, 0x96,
- 0x50, 0xda, 0xe1, 0x3e, 0xeb, 0x49, 0xde, 0xe1, 0x93, 0x03, 0x77, 0xb8, 0x1e, 0xd5, 0xc6, 0x2a,
- 0x29, 0x65, 0xa0, 0x4f, 0x9d, 0x60, 0xd2, 0xf1, 0x22, 0x94, 0x5a, 0x9e, 0xdb, 0xed, 0xf0, 0xe0,
- 0x55, 0xa1, 0xe4, 0xd7, 0x59, 0x09, 0x16, 0x90, 0xe1, 0x8c, 0xc1, 0xf7, 0x2b, 0x30, 0x9b, 0xd8,
- 0xf1, 0xcf, 0xf4, 0x84, 0xb5, 0x53, 0xf6, 0x84, 0x2f, 0x42, 0x21, 0xa0, 0x8b, 0x86, 0xb1, 0x78,
- 0x7a, 0x24, 0x5b, 0x2d, 0x30, 0x08, 0x1d, 0x3c, 0xe6, 0x2e, 0x31, 0xf7, 0xc2, 0x04, 0x61, 0xb1,
- 0xfa, 0x93, 0x83, 0x67, 0x59, 0x05, 0xe2, 0x38, 0x2e, 0xfa, 0x3f, 0x50, 0x31, 0x9a, 0x4d, 0x8f,
- 0xf8, 0xbe, 0xb8, 0xfd, 0xa0, 0xc2, 0x6d, 0x7e, 0x2d, 0x2c, 0xc4, 0x11, 0x9c, 0xae, 0x8e, 0x76,
- 0x9b, 0x3b, 0xfe, 0x6d, 0x5f, 0xf8, 0xb7, 0x4a, 0xce, 0x30, 0x6d, 0x4a, 0x5a, 0x8e, 0x25, 0x06,
- 0x6a, 0xc2, 0xec, 0x9e, 0xd7, 0x58, 0x5e, 0x36, 0xcc, 0x5d, 0x72, 0x1c, 0x9f, 0x88, 0xdd, 0x4a,
- 0x78, 0x33, 0x4e, 0x01, 0x27, 0x49, 0x0a, 0x2e, 0x37, 0xc9, 0x61, 0x60, 0x34, 0x8e, 0xb3, 0x26,
- 0x0c, 0xb9, 0xa8, 0x14, 0x70, 0x92, 0x24, 0x5d, 0xc1, 0xed, 0x79, 0x8d, 0x30, 0xb5, 0x52, 0x5c,
- 0x55, 0x20, 0x57, 0x70, 0x37, 0x23, 0x10, 0x56, 0xf1, 0x68, 0x83, 0xed, 0x79, 0x0d, 0x4c, 0x0c,
- 0xbb, 0x2d, 0x6e, 0x83, 0x92, 0x0d, 0x76, 0x53, 0x94, 0x63, 0x89, 0x81, 0x3a, 0x80, 0xe8, 0xd7,
- 0xb1, 0x7e, 0x97, 0xb9, 0x61, 0x22, 0x9b, 0xef, 0x72, 0xd6, 0xd7, 0x48, 0x24, 0xf5, 0x83, 0xce,
- 0x51, 0x73, 0x77, 0x33, 0x45, 0x07, 0x67, 0xd0, 0x46, 0x6f, 0xc2, 0x13, 0x7b, 0x5e, 0x43, 0x6c,
- 0xc0, 0x6d, 0x7a, 0x96, 0x63, 0x5a, 0x1d, 0x83, 0x27, 0xab, 0x4e, 0xc6, 0x2f, 0xaf, 0xba, 0x99,
- 0x8d, 0x86, 0x7b, 0xd5, 0x8f, 0x6f, 0xcb, 0x4c, 0xe5, 0xb2, 0x2d, 0x93, 0x18, 0xae, 0xc7, 0xda,
- 0x96, 0x99, 0x7e, 0x54, 0x16, 0x2b, 0x3f, 0xd2, 0x00, 0xb1, 0x58, 0x87, 0xf0, 0xf6, 0x75, 0x66,
- 0xfc, 0xd0, 0x15, 0xa8, 0x30, 0xeb, 0xa7, 0x64, 0x5f, 0xc9, 0xdd, 0xbd, 0xeb, 0x21, 0x00, 0x47,
- 0x38, 0xd4, 0x47, 0x71, 0xed, 0x26, 0x91, 0x29, 0xd3, 0xd2, 0x47, 0xb9, 0xc5, 0x4a, 0xb1, 0x80,
- 0xa2, 0xeb, 0x30, 0xef, 0x91, 0x86, 0x61, 0x1b, 0x8e, 0x49, 0xf4, 0xc0, 0x33, 0x02, 0xd2, 0x3a,
- 0x14, 0x96, 0x44, 0xc6, 0x53, 0xe1, 0x24, 0x02, 0x4e, 0xd7, 0x59, 0xfc, 0xe7, 0x32, 0xcc, 0x25,
- 0x83, 0x34, 0x1e, 0xb6, 0x9b, 0x74, 0x05, 0x2a, 0x1d, 0xc3, 0x0b, 0x2c, 0x25, 0xa1, 0x5c, 0x7e,
- 0xd5, 0x66, 0x08, 0xc0, 0x11, 0x0e, 0x75, 0xfb, 0xd9, 0xdd, 0x7a, 0x42, 0x42, 0xe9, 0xf6, 0xb3,
- 0xbb, 0xf7, 0x30, 0x87, 0x65, 0x67, 0x29, 0x17, 0x4e, 0x2c, 0x4b, 0xf9, 0x63, 0x71, 0x59, 0xdf,
- 0xfb, 0xe9, 0xcb, 0xfa, 0xde, 0xce, 0x39, 0x02, 0x67, 0x30, 0xb7, 0x6b, 0xda, 0x54, 0xf5, 0x59,
- 0x64, 0x65, 0x6f, 0xe5, 0x21, 0x52, 0x6c, 0xa0, 0x70, 0xef, 0x29, 0x56, 0x84, 0xe3, 0xac, 0xd1,
- 0x26, 0x9c, 0xb5, 0xad, 0xb6, 0xc5, 0x4f, 0x6b, 0xfc, 0x4d, 0xe2, 0xe9, 0xc4, 0x74, 0x9d, 0x26,
- 0x33, 0xd4, 0xe3, 0xd1, 0x46, 0xc8, 0x5a, 0x06, 0x0e, 0xce, 0xac, 0x89, 0x9e, 0x85, 0x89, 0x03,
- 0xe2, 0xb1, 0x2c, 0x52, 0x88, 0xdf, 0x90, 0xfb, 0x1a, 0x2f, 0xc6, 0x21, 0x1c, 0xbd, 0x09, 0x05,
- 0xdf, 0xf0, 0x6d, 0xb1, 0x50, 0x3b, 0x46, 0x50, 0x61, 0x4d, 0x5f, 0x13, 0xea, 0xc1, 0xae, 0x22,
- 0xa3, 0xff, 0x31, 0x23, 0x79, 0x4a, 0x0b, 0xb6, 0x68, 0x43, 0x78, 0xfa, 0xa8, 0x0d, 0xe1, 0xe1,
- 0x8c, 0xe2, 0x0f, 0x4a, 0x30, 0x9b, 0x88, 0xba, 0x7a, 0x98, 0x69, 0x91, 0x96, 0x62, 0xec, 0x08,
- 0x4b, 0xf1, 0x1c, 0x94, 0x4d, 0xdb, 0x22, 0x4e, 0xb0, 0xda, 0x14, 0x16, 0x25, 0xca, 0x6d, 0xe4,
- 0xe5, 0x2b, 0x58, 0x62, 0x9c, 0xb6, 0x5d, 0x51, 0x0d, 0x40, 0xb1, 0xdf, 0xdb, 0x0f, 0x4a, 0xa3,
- 0x7c, 0x6c, 0x21, 0x9f, 0x1c, 0xcb, 0x44, 0xc7, 0x7e, 0xec, 0x6f, 0xfe, 0x0c, 0x2f, 0xf0, 0xaf,
- 0xe4, 0x7d, 0x81, 0xff, 0x70, 0x63, 0xe4, 0xef, 0xc6, 0xa0, 0xbc, 0x51, 0xdb, 0xd6, 0xd9, 0x8d,
- 0x98, 0x6f, 0xc5, 0xef, 0xfc, 0x1c, 0x46, 0xc8, 0xf4, 0xe5, 0x9e, 0xd7, 0xe8, 0xd0, 0x1a, 0xf8,
- 0x5e, 0xcf, 0x0a, 0x1f, 0x7d, 0xd4, 0xcf, 0xe4, 0xd5, 0xd1, 0x32, 0x14, 0x9c, 0xbd, 0x41, 0xef,
- 0x2c, 0x67, 0x6d, 0xb6, 0x71, 0x93, 0x1c, 0x62, 0x56, 0x19, 0xdd, 0x06, 0x30, 0x3d, 0xd2, 0x24,
- 0x4e, 0x60, 0x89, 0x27, 0x63, 0x06, 0x3b, 0x5f, 0x58, 0x96, 0x95, 0xb1, 0x42, 0x68, 0xf1, 0x9b,
- 0x25, 0x98, 0x4b, 0x46, 0x57, 0x3e, 0xcc, 0xe4, 0x3c, 0x0b, 0x13, 0x7e, 0x97, 0xdd, 0xb4, 0x20,
- 0x8c, 0x8e, 0x9c, 0x06, 0x74, 0x5e, 0x8c, 0x43, 0x78, 0xb6, 0x29, 0x19, 0x3f, 0x15, 0x53, 0x52,
- 0xe8, 0xd7, 0x94, 0xe4, 0xbd, 0xa0, 0x79, 0x3f, 0x7d, 0x1d, 0xf7, 0xdb, 0x39, 0xc7, 0xc3, 0x0e,
- 0x60, 0x4b, 0x88, 0x18, 0xd5, 0x13, 0xb9, 0xdc, 0x51, 0x10, 0x0e, 0xc4, 0xd4, 0x7d, 0xa1, 0x8f,
- 0xe0, 0xd5, 0x51, 0x3f, 0x2b, 0xc2, 0x4c, 0x3c, 0x5c, 0x8a, 0xba, 0xc5, 0xbb, 0xae, 0x1f, 0x88,
- 0xcd, 0x82, 0xe4, 0xbb, 0x51, 0x37, 0x22, 0x10, 0x56, 0xf1, 0xfa, 0x9b, 0x93, 0x9f, 0x85, 0x09,
- 0x71, 0x29, 0x92, 0x98, 0x92, 0xe5, 0x28, 0x12, 0x17, 0x27, 0xe1, 0x10, 0xfe, 0x3f, 0x13, 0xb2,
- 0xed, 0xa3, 0x6f, 0xa5, 0x27, 0xe4, 0xb7, 0x72, 0x8d, 0x8d, 0xfb, 0xb8, 0xcf, 0xc7, 0xc3, 0x29,
- 0xf7, 0x9b, 0x30, 0x9f, 0x3a, 0xbc, 0xe9, 0xef, 0x82, 0xd6, 0x0b, 0x50, 0x74, 0x8c, 0x36, 0xe1,
- 0xf7, 0xb2, 0x54, 0xf8, 0xf4, 0xc6, 0xee, 0xf0, 0xc6, 0xbc, 0x7c, 0xf1, 0x87, 0x25, 0x98, 0x4f,
- 0xc5, 0x80, 0x33, 0x97, 0x57, 0x1e, 0x00, 0x24, 0x1c, 0xf9, 0xcc, 0x6d, 0xff, 0x57, 0x60, 0x86,
- 0x0d, 0x8c, 0xcd, 0xc4, 0xb1, 0x81, 0x3c, 0xc4, 0xde, 0x8e, 0x41, 0x71, 0x02, 0xbb, 0x3f, 0x97,
- 0xf9, 0x15, 0x98, 0x51, 0x2f, 0x9d, 0x5f, 0x5d, 0x11, 0xc7, 0xc2, 0x92, 0x89, 0x1e, 0x83, 0xe2,
- 0x04, 0x36, 0xbb, 0xb1, 0x5f, 0x4e, 0x9e, 0x62, 0x3b, 0xae, 0x38, 0xf8, 0x8d, 0xfd, 0x09, 0x12,
- 0x38, 0x45, 0x14, 0x35, 0x60, 0x81, 0x6f, 0xdf, 0xab, 0x02, 0xc9, 0xcd, 0x7f, 0xee, 0x17, 0x2f,
- 0x0a, 0xa1, 0x17, 0x56, 0x7a, 0x62, 0xe2, 0x23, 0xa8, 0x0c, 0x78, 0xcd, 0xd8, 0x07, 0xe9, 0xe7,
- 0xc7, 0xde, 0xc9, 0x3b, 0x73, 0xe0, 0x58, 0x63, 0xb0, 0xf2, 0xa8, 0x8c, 0xc1, 0x1f, 0x4e, 0xd2,
- 0x81, 0x92, 0x08, 0x82, 0x45, 0x8b, 0x50, 0x62, 0xba, 0x49, 0xa7, 0x17, 0x79, 0x12, 0xc0, 0x94,
- 0xd6, 0xc7, 0x02, 0xd2, 0xc7, 0x26, 0xb9, 0x58, 0xb2, 0x8d, 0xf7, 0x58, 0xb2, 0x75, 0xe0, 0x4c,
- 0x60, 0xfb, 0xdb, 0x5e, 0xd7, 0x0f, 0x96, 0x89, 0x17, 0xf8, 0x42, 0x75, 0x0b, 0x03, 0xbf, 0xd9,
- 0xb3, 0xbd, 0xa6, 0x27, 0xa9, 0xe0, 0x2c, 0xd2, 0x54, 0x81, 0x03, 0xdb, 0xaf, 0xd9, 0xb6, 0x7b,
- 0x27, 0x8c, 0x2c, 0x88, 0x26, 0x1b, 0x31, 0x8d, 0x48, 0x05, 0xde, 0x5e, 0xd3, 0x7b, 0x60, 0xe2,
- 0x23, 0xa8, 0xa0, 0x75, 0xf6, 0x55, 0xaf, 0x19, 0xb6, 0xd5, 0x34, 0x02, 0x42, 0xa7, 0x63, 0xb6,
- 0x7b, 0xcd, 0x47, 0x87, 0x3c, 0x6e, 0xdc, 0x5e, 0xd3, 0x93, 0x28, 0x38, 0xab, 0xde, 0xa8, 0xde,
- 0xed, 0xcb, 0x9c, 0xbd, 0xcb, 0xa7, 0x32, 0x7b, 0x57, 0x06, 0x1b, 0xe5, 0x90, 0xd3, 0x28, 0x4f,
- 0xa8, 0xfc, 0x00, 0xa3, 0xbc, 0x09, 0xb3, 0xf2, 0x55, 0x04, 0xa1, 0xb3, 0x93, 0x03, 0x9f, 0x7e,
- 0xd4, 0xe2, 0x14, 0x70, 0x92, 0xe4, 0x29, 0xed, 0x28, 0xfd, 0x85, 0x06, 0x73, 0x54, 0x92, 0x5a,
- 0xb0, 0x4b, 0x9c, 0x7b, 0x9b, 0x86, 0x67, 0xb4, 0xc3, 0xab, 0x6c, 0x76, 0x72, 0x6f, 0xf2, 0x5a,
- 0x82, 0x11, 0x6f, 0x7a, 0x79, 0xbf, 0x68, 0x12, 0x8c, 0x53, 0x92, 0xd1, 0xa9, 0x2f, 0x2a, 0x3b,
- 0xce, 0xe3, 0x7b, 0x67, 0xe3, 0x8c, 0xc2, 0xa9, 0x2f, 0x49, 0x74, 0x28, 0x1b, 0xbb, 0xb0, 0x0c,
- 0x8f, 0x67, 0x7e, 0xea, 0x40, 0x86, 0xfa, 0x1b, 0x25, 0x11, 0xc8, 0x9e, 0x83, 0x2f, 0x90, 0xf7,
- 0x13, 0x1b, 0x74, 0x61, 0xe5, 0xc8, 0x27, 0x58, 0x12, 0x4f, 0xf3, 0x44, 0x8f, 0xae, 0x44, 0x38,
- 0x68, 0x01, 0xc6, 0x9a, 0x0d, 0x66, 0xea, 0x8b, 0x51, 0x1c, 0xdf, 0x4a, 0x1d, 0x8f, 0x35, 0x1b,
- 0xe8, 0x32, 0x94, 0x85, 0x93, 0x11, 0x86, 0xb9, 0x31, 0xb6, 0xc2, 0x03, 0xf1, 0xb1, 0x84, 0x8e,
- 0x6a, 0x59, 0x3f, 0x82, 0xfd, 0xfb, 0x64, 0xcf, 0x7d, 0xec, 0x37, 0xda, 0x06, 0xb3, 0xd0, 0xcf,
- 0x29, 0xb7, 0xe7, 0x42, 0x7c, 0x2f, 0x37, 0x7d, 0x35, 0xee, 0x70, 0x0b, 0x96, 0xbf, 0x2a, 0xc1,
- 0xb9, 0xec, 0xf4, 0x8a, 0x8f, 0xcd, 0x68, 0xe0, 0xca, 0x3d, 0x9e, 0xa9, 0xdc, 0x9f, 0x84, 0x09,
- 0x9f, 0x09, 0x1e, 0x9e, 0xfc, 0xf3, 0x7b, 0x0d, 0x79, 0x11, 0x0e, 0x61, 0xe8, 0x55, 0x40, 0x6d,
- 0xe3, 0xee, 0xba, 0xdf, 0x5a, 0x76, 0xbb, 0xec, 0xaa, 0x56, 0x4c, 0x0c, 0x7e, 0x8f, 0x70, 0x31,
- 0x8a, 0xaf, 0x59, 0x4f, 0x61, 0xe0, 0x8c, 0x5a, 0x2c, 0x56, 0x21, 0x76, 0xfe, 0x93, 0x08, 0xf4,
- 0x39, 0xf2, 0xc0, 0x66, 0x44, 0xeb, 0x8f, 0x8f, 0xd2, 0x0b, 0x77, 0x73, 0x24, 0x39, 0x37, 0x1f,
- 0xf7, 0xd5, 0xfb, 0x49, 0x0e, 0x9d, 0x9f, 0x17, 0xe0, 0x4c, 0xc6, 0x9d, 0x0b, 0x71, 0xeb, 0xad,
- 0xf5, 0x61, 0xbd, 0xf7, 0x65, 0x4b, 0xe5, 0x13, 0x68, 0x1d, 0x0a, 0x75, 0x44, 0x33, 0x7d, 0xa0,
- 0xc1, 0x59, 0x76, 0xc0, 0x1e, 0x9e, 0xea, 0x85, 0x77, 0x4d, 0x8e, 0x0b, 0xcd, 0xec, 0xeb, 0xd2,
- 0xd7, 0xeb, 0x19, 0x14, 0xa2, 0x53, 0xc7, 0x2c, 0x28, 0xce, 0xe4, 0x8a, 0x96, 0x01, 0x64, 0x32,
- 0x4f, 0x38, 0x92, 0x9f, 0x61, 0x57, 0xd7, 0xca, 0xd2, 0xff, 0x64, 0x87, 0xf7, 0x4a, 0x6b, 0x33,
- 0xcf, 0x48, 0xa9, 0x36, 0x8a, 0x0b, 0xfe, 0x33, 0xba, 0xb7, 0xff, 0x11, 0x30, 0x9c, 0x76, 0xfd,
- 0xf9, 0x38, 0xcc, 0xc4, 0x3b, 0x12, 0x5d, 0x82, 0x52, 0xc7, 0x23, 0x3b, 0xd6, 0xdd, 0xe4, 0x3d,
- 0xef, 0x9b, 0xac, 0x14, 0x0b, 0x28, 0x72, 0xa1, 0x64, 0x1b, 0x0d, 0x3a, 0xdf, 0xf3, 0x7b, 0x76,
- 0xaf, 0x0f, 0x7d, 0x67, 0x6c, 0x78, 0xca, 0x10, 0x32, 0x5c, 0x63, 0xe4, 0xb1, 0x60, 0x43, 0x19,
- 0xee, 0x58, 0xc4, 0x6e, 0xf2, 0x70, 0xce, 0x51, 0x30, 0xbc, 0xc6, 0xc8, 0x63, 0xc1, 0x06, 0xbd,
- 0x05, 0x15, 0x7e, 0x39, 0x7e, 0xb3, 0x7e, 0x28, 0x3c, 0xdc, 0xff, 0xdd, 0x9f, 0xca, 0x6e, 0x5b,
- 0x6d, 0x12, 0x0d, 0xc7, 0xe5, 0x90, 0x08, 0x8e, 0xe8, 0xb1, 0xa7, 0x7f, 0x77, 0x02, 0xe2, 0xe9,
- 0x81, 0xe1, 0x85, 0x2f, 0xf3, 0x46, 0x4f, 0xff, 0x4a, 0x08, 0x56, 0xb0, 0x16, 0xff, 0xb5, 0x04,
- 0x33, 0xf1, 0x7b, 0x23, 0x4e, 0x29, 0x28, 0xf7, 0x39, 0x28, 0xb3, 0x0d, 0x85, 0x9a, 0xe7, 0x24,
- 0x5f, 0xdf, 0xd8, 0x16, 0xe5, 0x58, 0x62, 0x20, 0x0c, 0x15, 0xe3, 0x78, 0xef, 0xed, 0xf2, 0x08,
- 0x3b, 0xf9, 0xd2, 0x6e, 0x44, 0x86, 0xd2, 0xf4, 0x43, 0xf4, 0xc1, 0x76, 0x1f, 0x18, 0x4d, 0x59,
- 0x8c, 0x23, 0x32, 0x54, 0xf3, 0x3d, 0xd2, 0x0a, 0x77, 0x15, 0x14, 0xcd, 0xc7, 0xac, 0x14, 0x0b,
- 0x28, 0x7a, 0x16, 0x26, 0x3c, 0xd7, 0x26, 0x35, 0xbc, 0x21, 0x66, 0x65, 0xb9, 0xe1, 0x8e, 0x79,
- 0x31, 0x0e, 0xe1, 0xa3, 0xd8, 0x6c, 0x8e, 0x2b, 0xc0, 0x00, 0x53, 0xe5, 0x75, 0x98, 0x3f, 0x10,
- 0x3b, 0x15, 0xba, 0xd5, 0x72, 0x8c, 0x20, 0xca, 0xdd, 0x90, 0x81, 0x4b, 0xaf, 0x25, 0x11, 0x70,
- 0xba, 0xce, 0xe9, 0xcd, 0xb9, 0xc4, 0x69, 0x76, 0x5c, 0xcb, 0x09, 0x92, 0x73, 0xee, 0x55, 0x51,
- 0x8e, 0x25, 0xc6, 0x70, 0x56, 0xf1, 0x6f, 0x27, 0x60, 0x26, 0x7e, 0x2f, 0x4a, 0x5c, 0x87, 0xb5,
- 0x11, 0xe8, 0xf0, 0x58, 0xde, 0x3a, 0x3c, 0x7e, 0xa4, 0x0e, 0x3f, 0x03, 0x45, 0xf6, 0x48, 0xab,
- 0xd8, 0xb6, 0x96, 0x9b, 0xdc, 0x2c, 0x83, 0x17, 0x73, 0x18, 0xaa, 0xc1, 0xec, 0x1d, 0xc3, 0x0a,
- 0xa8, 0x35, 0xe3, 0x81, 0x3b, 0xfc, 0x4c, 0x73, 0x5c, 0x8d, 0xca, 0x8d, 0x81, 0x71, 0x12, 0x7f,
- 0x90, 0xb1, 0x32, 0xd8, 0x2e, 0xf2, 0x2b, 0x30, 0xc3, 0x84, 0x14, 0xcf, 0x32, 0xaf, 0x36, 0x45,
- 0xac, 0xa9, 0xdc, 0x80, 0xdf, 0x52, 0xa1, 0x2b, 0x38, 0x81, 0x1d, 0x1f, 0x99, 0x95, 0x7c, 0x46,
- 0xe6, 0xd6, 0x31, 0x47, 0xa6, 0x78, 0x86, 0x19, 0x7a, 0x3c, 0xc3, 0x7c, 0x3a, 0xaf, 0x59, 0xa9,
- 0xe3, 0x6d, 0xea, 0x61, 0xe3, 0x0d, 0xbd, 0x05, 0x53, 0x3e, 0xbf, 0xf1, 0x9f, 0xc7, 0xd5, 0x4f,
- 0x0f, 0xa2, 0xce, 0x73, 0x0f, 0xee, 0x5f, 0x98, 0xd2, 0x95, 0xea, 0x38, 0x46, 0x6c, 0xb8, 0xc1,
- 0xfc, 0x55, 0x28, 0x87, 0x8c, 0x68, 0x43, 0xcb, 0x7a, 0x51, 0x43, 0xd3, 0x21, 0xc4, 0x88, 0x5c,
- 0x81, 0x8a, 0xdb, 0x21, 0xb1, 0xe7, 0x7a, 0xe4, 0x24, 0x7e, 0x2b, 0x04, 0xe0, 0x08, 0x87, 0x8e,
- 0x22, 0xce, 0x35, 0x71, 0x54, 0xf4, 0x1a, 0x2d, 0x14, 0x42, 0x2c, 0x7e, 0x4d, 0x83, 0xf0, 0x0e,
- 0x7c, 0xb4, 0x02, 0xc5, 0x8e, 0xeb, 0x05, 0x7c, 0x8b, 0x7e, 0xf2, 0x85, 0x0b, 0xd9, 0xed, 0xc3,
- 0xa3, 0x84, 0x5d, 0x2f, 0x88, 0x28, 0xd2, 0x7f, 0x3e, 0xe6, 0x95, 0xa9, 0x9c, 0xa6, 0xdd, 0xf5,
- 0x03, 0xe2, 0xad, 0x6e, 0x26, 0xe5, 0x5c, 0x0e, 0x01, 0x38, 0xc2, 0x59, 0xfc, 0xf7, 0x02, 0xcc,
- 0x25, 0xaf, 0xca, 0x41, 0xef, 0xc0, 0xb4, 0x6f, 0xb5, 0x1c, 0xcb, 0x69, 0x89, 0x4d, 0x38, 0x6d,
- 0xe0, 0x14, 0x41, 0x5d, 0xad, 0x8f, 0xe3, 0xe4, 0x72, 0x8b, 0x7a, 0x39, 0x9d, 0x37, 0x51, 0xdf,
- 0x4f, 0x67, 0xcb, 0xbf, 0x9d, 0xf3, 0x65, 0x45, 0xff, 0xbd, 0xd3, 0xe5, 0x7f, 0x55, 0x84, 0x73,
- 0xd9, 0x97, 0x21, 0x9d, 0xd2, 0xa2, 0x35, 0x4a, 0x07, 0x1b, 0xeb, 0x99, 0x0e, 0x16, 0xb5, 0xf3,
- 0x78, 0x4e, 0x97, 0x1b, 0xc9, 0x06, 0x38, 0xda, 0xd4, 0xca, 0xe5, 0x74, 0xe1, 0xa1, 0xcb, 0xe9,
- 0x4b, 0x50, 0x12, 0xf7, 0xc0, 0x26, 0x96, 0xa9, 0x75, 0x7e, 0x4b, 0xab, 0x80, 0x2a, 0x4b, 0x81,
- 0xd2, 0x91, 0x4b, 0x01, 0xba, 0xb4, 0x91, 0x2f, 0x4f, 0x4f, 0x0c, 0xbe, 0xb4, 0x91, 0x0f, 0x4f,
- 0x47, 0x64, 0x58, 0xc2, 0x6f, 0xc7, 0x8a, 0x1e, 0xab, 0x8c, 0x12, 0x7e, 0x37, 0x57, 0x6f, 0xe3,
- 0x35, 0x2c, 0xa0, 0xf1, 0x2d, 0xa5, 0x4a, 0x2e, 0x5b, 0x4a, 0xd9, 0x3a, 0x77, 0x52, 0x0e, 0xb5,
- 0x09, 0xf3, 0xa9, 0x3e, 0xef, 0xdb, 0xa5, 0xbe, 0x04, 0x25, 0xbf, 0xbb, 0x43, 0xf1, 0x12, 0x77,
- 0x45, 0xe8, 0xac, 0x14, 0x0b, 0xe8, 0xe2, 0x77, 0x0b, 0x94, 0x4b, 0xe2, 0xda, 0xac, 0x53, 0x1a,
- 0x55, 0x2f, 0xc3, 0x34, 0x77, 0x6a, 0x5f, 0x57, 0xd2, 0xf8, 0xcb, 0xca, 0x46, 0xa5, 0x0a, 0xc4,
- 0x71, 0x5c, 0xb4, 0xca, 0xd4, 0x64, 0x60, 0xb7, 0x10, 0x84, 0x26, 0xd1, 0x89, 0x5b, 0x10, 0x40,
- 0xcf, 0xc3, 0x24, 0xfb, 0x08, 0xde, 0xe4, 0x62, 0x77, 0x87, 0x25, 0xec, 0x5d, 0x8d, 0x8a, 0xb1,
- 0x8a, 0x13, 0x3f, 0xa2, 0x2c, 0xe6, 0x72, 0x44, 0x99, 0xea, 0x95, 0x93, 0xd2, 0xbb, 0x6f, 0x97,
- 0x41, 0xbe, 0xec, 0x83, 0xcc, 0xd4, 0xfb, 0x4a, 0x9f, 0x1d, 0x78, 0x13, 0x38, 0x14, 0x85, 0x6f,
- 0x98, 0x67, 0x4c, 0x49, 0xaf, 0x02, 0x12, 0x0f, 0xfa, 0x88, 0x45, 0x35, 0xcb, 0xb4, 0xe1, 0x8a,
- 0x2b, 0x77, 0xbb, 0xf5, 0x14, 0x06, 0xce, 0xa8, 0x85, 0x5e, 0x65, 0xaf, 0x89, 0x05, 0x86, 0xe5,
- 0x48, 0xcb, 0xfb, 0x74, 0x8f, 0x3c, 0x2e, 0x8e, 0x24, 0xdf, 0x05, 0xe3, 0x7f, 0x71, 0x54, 0x1d,
- 0x5d, 0x85, 0x89, 0x03, 0xd7, 0xee, 0xb6, 0xe5, 0x23, 0xc5, 0x0b, 0x59, 0x94, 0x5e, 0x63, 0x28,
- 0x4a, 0xde, 0x01, 0xaf, 0x82, 0xc3, 0xba, 0x88, 0xc0, 0x2c, 0x0b, 0x13, 0xb0, 0x82, 0x43, 0x31,
- 0x00, 0xc4, 0xd4, 0x7b, 0x29, 0x8b, 0xdc, 0xa6, 0xdb, 0xd4, 0xe3, 0xd8, 0xfc, 0xc4, 0x38, 0x51,
- 0x88, 0x93, 0x34, 0xd1, 0x35, 0x28, 0x1b, 0x3b, 0x3b, 0x96, 0x63, 0x05, 0x87, 0xe2, 0x48, 0xec,
- 0xa9, 0x2c, 0xfa, 0x35, 0x81, 0x23, 0xee, 0x7b, 0x10, 0xff, 0xb0, 0xac, 0x8b, 0x6e, 0xc3, 0x64,
- 0xe0, 0xda, 0x62, 0x5d, 0xea, 0x8b, 0xad, 0x86, 0xf3, 0x59, 0xa4, 0xb6, 0x25, 0x5a, 0x74, 0xcc,
- 0x12, 0x95, 0xf9, 0x58, 0xa5, 0x83, 0x7e, 0x47, 0x83, 0x29, 0xc7, 0x6d, 0x92, 0x70, 0xe8, 0x89,
- 0x6d, 0xff, 0x37, 0x73, 0x7a, 0x91, 0x6a, 0x69, 0x43, 0xa1, 0xcd, 0x47, 0x88, 0xbc, 0x07, 0x40,
- 0x05, 0xe1, 0x98, 0x10, 0xc8, 0x81, 0x39, 0xab, 0x6d, 0xb4, 0xc8, 0x66, 0xd7, 0x16, 0x61, 0x4e,
- 0xe1, 0x5b, 0xeb, 0x99, 0xd9, 0x7f, 0x6b, 0xae, 0x69, 0xd8, 0xfc, 0x45, 0x37, 0x4c, 0x76, 0x88,
- 0xc7, 0x1e, 0x96, 0x93, 0x27, 0xd6, 0xab, 0x09, 0x4a, 0x38, 0x45, 0x1b, 0x5d, 0x87, 0xf9, 0x8e,
- 0x67, 0xb9, 0xac, 0xdf, 0x6c, 0xc3, 0xe7, 0x2f, 0x7a, 0x41, 0x3c, 0xe5, 0x6b, 0x33, 0x89, 0x80,
- 0xd3, 0x75, 0x78, 0x9a, 0x32, 0x2f, 0x64, 0xbe, 0x5c, 0x31, 0x4c, 0x53, 0xe6, 0x65, 0x58, 0x42,
- 0x17, 0x3e, 0x0f, 0xf3, 0xa9, 0xb6, 0x19, 0xc8, 0x20, 0xfc, 0x81, 0x06, 0xc9, 0x9c, 0x59, 0xea,
- 0x37, 0x34, 0x2d, 0x8f, 0x11, 0x3c, 0x4c, 0x9e, 0x19, 0xac, 0x84, 0x00, 0x1c, 0xe1, 0xa0, 0x8b,
- 0x50, 0xe8, 0x18, 0xc1, 0x6e, 0x32, 0x5c, 0x88, 0x92, 0xc4, 0x0c, 0xc2, 0x5e, 0x10, 0xa6, 0xff,
- 0x48, 0x8b, 0xdc, 0xed, 0x08, 0x37, 0x28, 0x7a, 0x41, 0x58, 0x42, 0xb0, 0x82, 0xb5, 0xf8, 0x8f,
- 0x45, 0x98, 0x89, 0xcf, 0x2d, 0x31, 0x67, 0x53, 0x7b, 0xa8, 0xb3, 0x79, 0x09, 0x4a, 0x6d, 0x12,
- 0xec, 0xba, 0xcd, 0xe4, 0x3c, 0xb9, 0xce, 0x4a, 0xb1, 0x80, 0x32, 0xf1, 0x5d, 0x2f, 0x10, 0x62,
- 0x45, 0xe2, 0xbb, 0x5e, 0x80, 0x19, 0x24, 0x8c, 0x76, 0x2a, 0xf4, 0x88, 0x76, 0x6a, 0xc1, 0x1c,
- 0xbf, 0xb2, 0x6f, 0x99, 0x78, 0xc1, 0xb1, 0xa3, 0xf4, 0xf4, 0x04, 0x09, 0x9c, 0x22, 0x8a, 0x9a,
- 0xd4, 0xda, 0xd0, 0x32, 0x56, 0xf9, 0x98, 0x29, 0xc0, 0x7a, 0x9c, 0x02, 0x4e, 0x92, 0x1c, 0xc5,
- 0x6e, 0x64, 0xbc, 0x1f, 0x8f, 0x7d, 0x07, 0x54, 0x39, 0xaf, 0x3b, 0xa0, 0x5e, 0x82, 0x99, 0xb6,
- 0x71, 0x77, 0xd3, 0x38, 0xb4, 0x5d, 0xa3, 0xa9, 0x5b, 0xf7, 0x88, 0xc8, 0x52, 0x63, 0x2f, 0x3d,
- 0xaf, 0xc7, 0x20, 0x38, 0x81, 0x39, 0xdc, 0x04, 0xfc, 0x87, 0x63, 0x80, 0xd2, 0x57, 0x91, 0xa3,
- 0x0f, 0x35, 0x98, 0xb9, 0x13, 0x6b, 0xa3, 0xd1, 0x2c, 0xce, 0xe4, 0xb6, 0x57, 0xbc, 0x1c, 0x27,
- 0x98, 0x2b, 0x0e, 0xce, 0xd8, 0xc9, 0x39, 0x92, 0xf5, 0xa5, 0x1f, 0xff, 0xf2, 0xfc, 0x63, 0x3f,
- 0xf9, 0xe5, 0xf9, 0xc7, 0x7e, 0xfa, 0xcb, 0xf3, 0x8f, 0x7d, 0xed, 0xc1, 0x79, 0xed, 0xc7, 0x0f,
- 0xce, 0x6b, 0x3f, 0x79, 0x70, 0x5e, 0xfb, 0xe9, 0x83, 0xf3, 0xda, 0x2f, 0x1e, 0x9c, 0xd7, 0xbe,
- 0xfb, 0x2f, 0xe7, 0x1f, 0xfb, 0x42, 0x39, 0xa4, 0xfa, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8e,
- 0xf5, 0x35, 0x2f, 0x3e, 0x9b, 0x00, 0x00,
+ 0x75, 0xb0, 0x9a, 0x9c, 0x19, 0xce, 0x3c, 0xfe, 0xd7, 0xae, 0x56, 0x23, 0x5a, 0xda, 0xdd, 0x6f,
+ 0x04, 0x2f, 0x56, 0xdf, 0x27, 0x73, 0x3f, 0x29, 0x71, 0x2c, 0x4b, 0xb1, 0x8c, 0x19, 0x72, 0x7f,
+ 0xa8, 0x25, 0xb9, 0x64, 0x35, 0x57, 0x3f, 0x96, 0x25, 0xb9, 0xd9, 0x53, 0x1c, 0xb6, 0xd9, 0xd3,
+ 0x3d, 0xec, 0xee, 0xa1, 0x96, 0x0b, 0xc4, 0x36, 0x0c, 0x38, 0xb1, 0xf5, 0x63, 0x5b, 0x49, 0x9c,
+ 0x04, 0x09, 0x7c, 0x70, 0x12, 0xf8, 0x92, 0x20, 0xc8, 0xc9, 0xc8, 0x35, 0x40, 0x0e, 0x46, 0x92,
+ 0x83, 0x93, 0x5c, 0x14, 0x1b, 0x58, 0xd8, 0x1b, 0xe4, 0x96, 0x4b, 0xe0, 0x53, 0x72, 0x0a, 0xea,
+ 0xa7, 0xab, 0xab, 0x7f, 0x86, 0x3b, 0xc3, 0xe9, 0x21, 0xb5, 0x46, 0x6e, 0x33, 0xf5, 0x5e, 0xbd,
+ 0xf7, 0xba, 0xea, 0xbd, 0x57, 0xaf, 0x5e, 0xfd, 0xc1, 0x5a, 0xcb, 0x0a, 0x76, 0xbb, 0xdb, 0x8b,
+ 0xa6, 0xdb, 0xbe, 0x62, 0x78, 0x2d, 0xb7, 0xe3, 0xb9, 0x5f, 0x66, 0x3f, 0x3e, 0x45, 0x0e, 0x88,
+ 0x13, 0xf8, 0x57, 0x3a, 0x7b, 0xad, 0x2b, 0x46, 0xc7, 0xf2, 0xaf, 0xf0, 0xff, 0x6e, 0xd7, 0x33,
+ 0xc9, 0x95, 0x83, 0x67, 0x0d, 0xbb, 0xb3, 0x6b, 0x3c, 0x7b, 0xa5, 0x45, 0x1c, 0xe2, 0x19, 0x01,
+ 0x69, 0x2e, 0x76, 0x3c, 0x37, 0x70, 0xd1, 0xe7, 0x22, 0x72, 0x8b, 0x21, 0x39, 0xf6, 0xe3, 0x6d,
+ 0x5e, 0x7d, 0xb1, 0xb3, 0xd7, 0x5a, 0xa4, 0xe4, 0x16, 0x15, 0x72, 0x8b, 0x21, 0xb9, 0x85, 0xcf,
+ 0xf7, 0x2d, 0x8d, 0xe9, 0xb6, 0xdb, 0xae, 0x93, 0xe4, 0xbf, 0xf0, 0x29, 0x85, 0x40, 0xcb, 0x6d,
+ 0xb9, 0x57, 0x58, 0xf1, 0x76, 0x77, 0x87, 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0x81, 0x5e, 0xdb, 0x7b,
+ 0xde, 0x5f, 0xb4, 0x5c, 0x4a, 0xf2, 0x8a, 0xe9, 0x7a, 0xf4, 0xc3, 0x52, 0x24, 0x7f, 0x3d, 0xc2,
+ 0x69, 0x1b, 0xe6, 0xae, 0xe5, 0x10, 0xef, 0x30, 0x92, 0xa3, 0x4d, 0x02, 0x23, 0xab, 0xd6, 0x95,
+ 0x5e, 0xb5, 0xbc, 0xae, 0x13, 0x58, 0x6d, 0x92, 0xaa, 0xf0, 0x1b, 0x0f, 0xaa, 0xe0, 0x9b, 0xbb,
+ 0xa4, 0x6d, 0x24, 0xeb, 0xd5, 0xfe, 0x4b, 0x83, 0xf9, 0xfa, 0xda, 0xe6, 0xc6, 0x92, 0xeb, 0xf8,
+ 0xdd, 0x36, 0x59, 0x72, 0x9d, 0x1d, 0xab, 0x85, 0x3e, 0x0d, 0x93, 0x26, 0x2f, 0xf0, 0xb6, 0x8c,
+ 0x56, 0x55, 0xbb, 0xa8, 0x5d, 0xae, 0x34, 0xce, 0xfc, 0xf8, 0xde, 0x85, 0x47, 0xee, 0xdf, 0xbb,
+ 0x30, 0xb9, 0x14, 0x81, 0xb0, 0x8a, 0x87, 0x9e, 0x86, 0x09, 0xa3, 0x1b, 0xb8, 0x75, 0x73, 0xaf,
+ 0x3a, 0x76, 0x51, 0xbb, 0x5c, 0x6e, 0xcc, 0x8a, 0x2a, 0x13, 0x75, 0x5e, 0x8c, 0x43, 0x38, 0xba,
+ 0x02, 0x15, 0x72, 0xc7, 0xb4, 0xbb, 0xbe, 0x75, 0x40, 0xaa, 0xe3, 0x0c, 0x79, 0x5e, 0x20, 0x57,
+ 0xae, 0x86, 0x00, 0x1c, 0xe1, 0x50, 0xda, 0x8e, 0xbb, 0xea, 0x9a, 0x86, 0x5d, 0x2d, 0xc4, 0x69,
+ 0xaf, 0xf3, 0x62, 0x1c, 0xc2, 0xd1, 0x25, 0x28, 0x39, 0xee, 0xab, 0x86, 0x15, 0x54, 0x8b, 0x0c,
+ 0x73, 0x46, 0x60, 0x96, 0xd6, 0x59, 0x29, 0x16, 0xd0, 0xda, 0x7f, 0x4c, 0xc2, 0x2c, 0xfd, 0xf6,
+ 0xab, 0x54, 0x39, 0x74, 0xa6, 0x4b, 0xe8, 0x49, 0x18, 0xef, 0x7a, 0xb6, 0xf8, 0xe2, 0x49, 0x51,
+ 0x71, 0xfc, 0x36, 0x5e, 0xc5, 0xb4, 0x1c, 0x3d, 0x0f, 0x53, 0xe4, 0x8e, 0xb9, 0x6b, 0x38, 0x2d,
+ 0xb2, 0x6e, 0xb4, 0x09, 0xfb, 0xcc, 0x4a, 0xe3, 0xac, 0xc0, 0x9b, 0xba, 0xaa, 0xc0, 0x70, 0x0c,
+ 0x53, 0xad, 0xb9, 0x75, 0xd8, 0xe1, 0xdf, 0x9c, 0x51, 0x93, 0xc2, 0x70, 0x0c, 0x13, 0x3d, 0x07,
+ 0xe0, 0xb9, 0xdd, 0xc0, 0x72, 0x5a, 0x37, 0xc9, 0x21, 0xfb, 0xf8, 0x4a, 0x03, 0x89, 0x7a, 0x80,
+ 0x25, 0x04, 0x2b, 0x58, 0xe8, 0xb7, 0x60, 0xde, 0x74, 0x1d, 0x87, 0x98, 0x81, 0xe5, 0x3a, 0x0d,
+ 0xc3, 0xdc, 0x73, 0x77, 0x76, 0x58, 0x6b, 0x4c, 0x3e, 0xf7, 0xfc, 0x62, 0xdf, 0x46, 0xc6, 0xad,
+ 0x64, 0x51, 0xd4, 0x6f, 0x3c, 0x7a, 0xff, 0xde, 0x85, 0xf9, 0xa5, 0x24, 0x59, 0x9c, 0xe6, 0x84,
+ 0x9e, 0x81, 0xf2, 0x97, 0x7d, 0xd7, 0x69, 0xb8, 0xcd, 0xc3, 0x6a, 0x89, 0xf5, 0xc1, 0x9c, 0x10,
+ 0xb8, 0xfc, 0xb2, 0x7e, 0x6b, 0x9d, 0x96, 0x63, 0x89, 0x81, 0x6e, 0xc3, 0x78, 0x60, 0xfb, 0xd5,
+ 0x09, 0x26, 0xde, 0x0b, 0x03, 0x8b, 0xb7, 0xb5, 0xaa, 0x73, 0xb5, 0x6d, 0x4c, 0xd0, 0xbe, 0xda,
+ 0x5a, 0xd5, 0x31, 0xa5, 0x87, 0xde, 0xd5, 0xa0, 0x4c, 0xed, 0xab, 0x69, 0x04, 0x46, 0xb5, 0x7c,
+ 0x71, 0xfc, 0xf2, 0xe4, 0x73, 0x5f, 0x5c, 0x1c, 0xca, 0xc1, 0x2c, 0x26, 0xb4, 0x65, 0x71, 0x4d,
+ 0x90, 0xbf, 0xea, 0x04, 0xde, 0x61, 0xf4, 0x8d, 0x61, 0x31, 0x96, 0xfc, 0xd1, 0x1f, 0x6a, 0x30,
+ 0x1b, 0xf6, 0xea, 0x32, 0x31, 0x6d, 0xc3, 0x23, 0xd5, 0x0a, 0xfb, 0xe0, 0xd7, 0xf2, 0x90, 0x29,
+ 0x4e, 0x59, 0x34, 0xc7, 0x99, 0xfb, 0xf7, 0x2e, 0xcc, 0x26, 0x40, 0x38, 0x29, 0x05, 0x7a, 0x4f,
+ 0x83, 0xa9, 0xfd, 0x2e, 0xe9, 0x4a, 0xb1, 0x80, 0x89, 0x75, 0x3b, 0x07, 0xb1, 0x36, 0x15, 0xb2,
+ 0x42, 0xa6, 0x39, 0xaa, 0xec, 0x6a, 0x39, 0x8e, 0x31, 0x47, 0x5f, 0x85, 0x0a, 0xfb, 0xdf, 0xb0,
+ 0x9c, 0x66, 0x75, 0x92, 0x49, 0x82, 0xf3, 0x92, 0x84, 0xd2, 0x14, 0x62, 0x4c, 0x53, 0x3f, 0x23,
+ 0x0b, 0x71, 0xc4, 0x13, 0xbd, 0x03, 0x13, 0xc2, 0xa5, 0x55, 0xa7, 0x18, 0xfb, 0x8d, 0x1c, 0xd8,
+ 0xc7, 0xbc, 0x6b, 0x63, 0x92, 0x7a, 0x2d, 0x51, 0x84, 0x43, 0x6e, 0xe8, 0x35, 0x28, 0x18, 0xdd,
+ 0x60, 0xb7, 0x3a, 0x7d, 0x4c, 0x33, 0x68, 0x18, 0xbe, 0x65, 0xd6, 0xbb, 0xc1, 0x6e, 0xa3, 0x7c,
+ 0xff, 0xde, 0x85, 0x02, 0xfd, 0x85, 0x19, 0x45, 0x84, 0xa1, 0xd2, 0xf5, 0x6c, 0x9d, 0x98, 0x1e,
+ 0x09, 0xaa, 0x33, 0x8c, 0xfc, 0x27, 0x17, 0xf9, 0x78, 0x41, 0x29, 0x2c, 0xd2, 0xa1, 0x6b, 0xf1,
+ 0xe0, 0xd9, 0x45, 0x8e, 0x71, 0x93, 0x1c, 0xea, 0xc4, 0x26, 0x66, 0xe0, 0x7a, 0xbc, 0x99, 0x6e,
+ 0xe3, 0x55, 0x0e, 0xc1, 0x11, 0x19, 0x14, 0x40, 0x69, 0xc7, 0xb2, 0x03, 0xe2, 0x55, 0x67, 0x73,
+ 0x69, 0x25, 0xc5, 0xaa, 0xae, 0x31, 0xba, 0x0d, 0xa0, 0x1e, 0x9b, 0xff, 0xc6, 0x82, 0xd7, 0xc2,
+ 0x8b, 0x30, 0x1d, 0x33, 0x39, 0x34, 0x07, 0xe3, 0x7b, 0xe4, 0x90, 0xbb, 0x6b, 0x4c, 0x7f, 0xa2,
+ 0xb3, 0x50, 0x3c, 0x30, 0xec, 0xae, 0x70, 0xcd, 0x98, 0xff, 0x79, 0x61, 0xec, 0x79, 0xad, 0xf6,
+ 0x13, 0x0d, 0x1e, 0xef, 0x69, 0x2c, 0x74, 0x7c, 0x69, 0x76, 0x3d, 0x63, 0xdb, 0x26, 0x8c, 0x9a,
+ 0x32, 0xbe, 0x2c, 0xf3, 0x62, 0x1c, 0xc2, 0xa9, 0x43, 0xa6, 0xc3, 0xd8, 0x32, 0xb1, 0x49, 0x40,
+ 0xc4, 0x48, 0x27, 0x1d, 0x72, 0x5d, 0x42, 0xb0, 0x82, 0x45, 0x3d, 0xa2, 0xe5, 0x04, 0xc4, 0x73,
+ 0x0c, 0x5b, 0x0c, 0x77, 0xd2, 0x5b, 0xac, 0x88, 0x72, 0x2c, 0x31, 0x94, 0x11, 0xac, 0x70, 0xe4,
+ 0x08, 0xf6, 0x39, 0x38, 0x93, 0xa1, 0xdd, 0x4a, 0x75, 0xed, 0xc8, 0xea, 0x7f, 0x36, 0x06, 0xe7,
+ 0xb2, 0xed, 0x14, 0x5d, 0x84, 0x82, 0x43, 0x07, 0x38, 0x3e, 0x10, 0x4e, 0x09, 0x02, 0x05, 0x36,
+ 0xb0, 0x31, 0x88, 0xda, 0x60, 0x63, 0x03, 0x35, 0xd8, 0x78, 0x5f, 0x0d, 0x16, 0x0b, 0x10, 0x0a,
+ 0x7d, 0x04, 0x08, 0x7d, 0x8e, 0xfa, 0x94, 0xb0, 0xe1, 0xb5, 0xba, 0x6d, 0xaa, 0x84, 0x6c, 0x70,
+ 0xaa, 0x44, 0x84, 0xeb, 0x21, 0x00, 0x47, 0x38, 0xb5, 0x77, 0x8b, 0xf0, 0x78, 0xfd, 0x6e, 0xd7,
+ 0x23, 0x4c, 0x47, 0xfd, 0x1b, 0xdd, 0x6d, 0x35, 0x60, 0xb8, 0x08, 0x85, 0x9d, 0xfd, 0xa6, 0x93,
+ 0x6c, 0xa8, 0x6b, 0x9b, 0xcb, 0xeb, 0x98, 0x41, 0x50, 0x07, 0xce, 0xf8, 0xbb, 0x86, 0x47, 0x9a,
+ 0x75, 0xd3, 0x24, 0xbe, 0x7f, 0x93, 0x1c, 0xca, 0xd0, 0xa1, 0x6f, 0x43, 0x7c, 0xec, 0xfe, 0xbd,
+ 0x0b, 0x67, 0xf4, 0x34, 0x15, 0x9c, 0x45, 0x1a, 0x35, 0x61, 0x36, 0x51, 0xcc, 0x1a, 0xbd, 0x6f,
+ 0x6e, 0x6c, 0xe0, 0x48, 0x70, 0xc3, 0x49, 0x92, 0x54, 0x01, 0x76, 0xbb, 0xdb, 0xec, 0x5b, 0x78,
+ 0x50, 0x22, 0x15, 0xe0, 0x06, 0x2f, 0xc6, 0x21, 0x1c, 0xfd, 0xbe, 0x3a, 0x14, 0x17, 0xd9, 0x50,
+ 0xbc, 0x33, 0xac, 0x5b, 0xed, 0xd5, 0x23, 0x03, 0x0c, 0xca, 0x91, 0x13, 0x2b, 0x3d, 0x2c, 0x4e,
+ 0xec, 0x67, 0x45, 0x78, 0x82, 0x7d, 0x3a, 0xb3, 0x59, 0x3d, 0x70, 0x3d, 0xa3, 0x45, 0x54, 0x7d,
+ 0x7c, 0x19, 0x90, 0xcf, 0x4b, 0xeb, 0xa6, 0xe9, 0x76, 0x9d, 0x60, 0x3d, 0x32, 0xe3, 0x05, 0xd1,
+ 0x16, 0x48, 0x4f, 0x61, 0xe0, 0x8c, 0x5a, 0xa8, 0x05, 0x73, 0x51, 0x6c, 0xa7, 0x07, 0x9e, 0xe5,
+ 0xb4, 0x06, 0x53, 0xdb, 0xb3, 0xf7, 0xef, 0x5d, 0x98, 0x5b, 0x4a, 0x90, 0xc0, 0x29, 0xa2, 0xd4,
+ 0x26, 0xd9, 0x08, 0xcc, 0x64, 0x1d, 0x8f, 0xdb, 0xe4, 0x66, 0x08, 0xc0, 0x11, 0x4e, 0x2c, 0xc0,
+ 0x2c, 0x3c, 0x30, 0xc0, 0x7c, 0x12, 0xc6, 0x9b, 0xf6, 0xbe, 0xf0, 0x0b, 0x32, 0xa8, 0x5f, 0x5e,
+ 0xdd, 0xc4, 0xb4, 0x9c, 0xc6, 0x66, 0x91, 0x76, 0x96, 0x98, 0x76, 0x5a, 0x79, 0x68, 0x67, 0x8f,
+ 0x2e, 0x3a, 0x96, 0x82, 0x4e, 0x9c, 0x9c, 0x82, 0xa2, 0x17, 0x61, 0xba, 0x49, 0x4c, 0xb7, 0x49,
+ 0xd6, 0x88, 0xef, 0x1b, 0x2d, 0x52, 0x2d, 0xb3, 0x86, 0x7b, 0x54, 0x08, 0x3a, 0xbd, 0xac, 0x02,
+ 0x71, 0x1c, 0x77, 0x38, 0xed, 0xfe, 0xa8, 0x04, 0x0b, 0xac, 0xe9, 0x74, 0xe2, 0x1d, 0x58, 0x26,
+ 0x69, 0x74, 0x7d, 0x55, 0xb7, 0xb3, 0xf4, 0x51, 0x1b, 0xb9, 0x3e, 0x8e, 0xf5, 0xa1, 0x8f, 0x57,
+ 0xa0, 0x12, 0xb8, 0x1d, 0xcb, 0xcc, 0x52, 0xe0, 0xad, 0x10, 0x80, 0x23, 0x1c, 0xb4, 0x0c, 0x73,
+ 0x7e, 0x77, 0xdb, 0x37, 0x3d, 0xab, 0x43, 0xf9, 0x2a, 0x5e, 0xb4, 0x2a, 0xea, 0xcd, 0xe9, 0x09,
+ 0x38, 0x4e, 0xd5, 0x08, 0x67, 0x4e, 0xc5, 0x9c, 0x67, 0x4e, 0x83, 0x4d, 0xdf, 0xbe, 0xa7, 0x9a,
+ 0xcf, 0x04, 0x33, 0x9f, 0x56, 0x1e, 0xe6, 0x93, 0xa9, 0x03, 0xc7, 0x32, 0x9e, 0xf2, 0x09, 0x1a,
+ 0xcf, 0xeb, 0xf0, 0xd8, 0x4e, 0xd7, 0xb6, 0x0f, 0x37, 0xbb, 0x86, 0x6d, 0xed, 0x58, 0xa4, 0x49,
+ 0x3b, 0xca, 0xef, 0x18, 0x26, 0x9f, 0xef, 0x55, 0x1a, 0x17, 0x84, 0xc8, 0x8f, 0x5d, 0xcb, 0x46,
+ 0xc3, 0xbd, 0xea, 0x0f, 0x67, 0x5a, 0x3f, 0xd5, 0x60, 0xba, 0x61, 0x05, 0xdb, 0x5d, 0x73, 0x8f,
+ 0x04, 0x74, 0x72, 0x80, 0x3c, 0x28, 0x6e, 0xd3, 0x39, 0x83, 0x30, 0xa1, 0xcd, 0x21, 0x9b, 0x47,
+ 0x12, 0x8f, 0x26, 0x22, 0x95, 0xfb, 0xf7, 0x2e, 0x14, 0xd9, 0x5f, 0xcc, 0x59, 0xa1, 0xdb, 0x00,
+ 0x2e, 0x9d, 0x93, 0x6c, 0xb9, 0x7b, 0xc4, 0x19, 0x6c, 0x2c, 0x99, 0xa1, 0xc1, 0xe2, 0xad, 0x7a,
+ 0x58, 0x19, 0x2b, 0x84, 0x6a, 0x3f, 0xd2, 0x00, 0xa5, 0xf9, 0xa3, 0x5b, 0x50, 0xee, 0xfa, 0x34,
+ 0xa2, 0x16, 0x23, 0x60, 0xdf, 0xbc, 0xa6, 0xa8, 0x4a, 0xdd, 0x16, 0x55, 0xb1, 0x24, 0x42, 0x09,
+ 0x76, 0x0c, 0xdf, 0x7f, 0xc7, 0xf5, 0x9a, 0x83, 0x09, 0xcf, 0x08, 0x6e, 0x88, 0xaa, 0x58, 0x12,
+ 0xa9, 0xfd, 0x72, 0x02, 0xce, 0x4a, 0xc1, 0x13, 0xc3, 0x78, 0x93, 0x05, 0xc2, 0x37, 0x5c, 0x77,
+ 0xef, 0x96, 0x73, 0xcd, 0x72, 0x2c, 0x7f, 0x57, 0x84, 0xf3, 0x72, 0x18, 0x5f, 0x4e, 0x61, 0xe0,
+ 0x8c, 0x5a, 0xe8, 0x3b, 0xaa, 0x81, 0x8e, 0x31, 0x03, 0x35, 0xf2, 0xea, 0xec, 0xe3, 0x9a, 0xe6,
+ 0xc4, 0x3b, 0x64, 0x7b, 0xd7, 0x75, 0xf7, 0x44, 0x60, 0xba, 0x36, 0xa4, 0x3c, 0xaf, 0x72, 0x6a,
+ 0x4b, 0xae, 0x13, 0x90, 0x3b, 0x01, 0x9f, 0x61, 0x8b, 0x32, 0x1c, 0xb2, 0x42, 0x5f, 0x16, 0x33,
+ 0xec, 0x02, 0x63, 0xb9, 0x9a, 0x57, 0x13, 0x64, 0xce, 0xb9, 0x6b, 0x50, 0xe2, 0xb5, 0x58, 0xb8,
+ 0x5b, 0xe1, 0xae, 0x82, 0x87, 0xab, 0x58, 0x40, 0xd0, 0xa7, 0xa0, 0xe8, 0xbe, 0xe3, 0x88, 0xe8,
+ 0xb3, 0xd2, 0x78, 0x4c, 0x34, 0xd8, 0xec, 0x32, 0xe9, 0x78, 0xc4, 0x34, 0x02, 0xd2, 0xbc, 0x45,
+ 0xc1, 0x98, 0x63, 0xa1, 0xdf, 0x04, 0xa0, 0x22, 0x12, 0x93, 0x6a, 0x16, 0x0b, 0x08, 0x2a, 0x8d,
+ 0x27, 0x44, 0x9d, 0xb3, 0x51, 0x9d, 0x0d, 0x89, 0x83, 0x15, 0x7c, 0x74, 0x03, 0x66, 0x3c, 0xd2,
+ 0x71, 0x7d, 0x2b, 0x70, 0xbd, 0x43, 0xdd, 0xee, 0xb6, 0x98, 0x57, 0xac, 0x34, 0x2e, 0x0a, 0x0a,
+ 0xd5, 0x88, 0x02, 0x8e, 0xe1, 0xe1, 0x44, 0x3d, 0xf4, 0xbe, 0x06, 0x53, 0xb2, 0xc8, 0x22, 0x7e,
+ 0xb5, 0xc2, 0x54, 0x0a, 0xe7, 0xd5, 0x9e, 0x11, 0xfb, 0x28, 0x3d, 0x8a, 0x15, 0x7e, 0x38, 0xc6,
+ 0x5d, 0x71, 0xf3, 0xf0, 0xb0, 0x04, 0xf1, 0x77, 0xe1, 0x4c, 0xc6, 0xd7, 0xa2, 0xa7, 0x42, 0x7d,
+ 0xe0, 0xd1, 0xfa, 0xb4, 0xf8, 0xf8, 0x62, 0x4c, 0x0b, 0x5e, 0x4a, 0xf5, 0x23, 0x8f, 0x4f, 0xce,
+ 0x09, 0xec, 0x99, 0xa3, 0x7b, 0xaf, 0xf6, 0x2f, 0x15, 0x58, 0x90, 0xcc, 0xe9, 0x10, 0x4b, 0x3c,
+ 0xd5, 0xef, 0x28, 0x96, 0xa9, 0x9d, 0x9c, 0x65, 0xc6, 0x55, 0x7b, 0x6c, 0x68, 0xd5, 0x1e, 0x3f,
+ 0xa6, 0x6a, 0xff, 0x6e, 0x52, 0xb5, 0x0b, 0x4c, 0xb5, 0x5f, 0xcb, 0x4b, 0xb5, 0x79, 0x7b, 0x0f,
+ 0xa8, 0xe0, 0xfd, 0xb8, 0x92, 0xd7, 0x60, 0xd2, 0x60, 0x13, 0x73, 0x3e, 0xb0, 0x96, 0x06, 0x19,
+ 0x9b, 0x66, 0xef, 0xdf, 0xbb, 0x30, 0x59, 0x8f, 0x6a, 0x63, 0x95, 0x14, 0x7a, 0x0b, 0xa6, 0x45,
+ 0x2f, 0x89, 0x04, 0xe2, 0xc4, 0x20, 0xb4, 0xe7, 0xe9, 0x7c, 0xe1, 0x55, 0xb5, 0x3e, 0x8e, 0x93,
+ 0x43, 0xaf, 0xc0, 0xb9, 0xed, 0xb0, 0x79, 0x7c, 0xd6, 0x3c, 0x0d, 0xc3, 0x27, 0xb7, 0xf1, 0xaa,
+ 0xf0, 0x4f, 0xe7, 0x45, 0x0b, 0x9d, 0x4b, 0x34, 0xa2, 0xc0, 0xc2, 0x3d, 0x6a, 0xf7, 0x18, 0x40,
+ 0x2b, 0xc7, 0x1a, 0x40, 0x63, 0x11, 0x2e, 0xe4, 0x12, 0xe1, 0xf6, 0x36, 0xc1, 0x63, 0x45, 0xb8,
+ 0x93, 0x27, 0x18, 0xe1, 0x8a, 0x49, 0xc7, 0x54, 0xbe, 0x93, 0x8e, 0xe1, 0x3c, 0xea, 0x77, 0x34,
+ 0x78, 0xbc, 0xa7, 0x95, 0xa1, 0xe7, 0x62, 0xee, 0x45, 0x8b, 0xaf, 0xa0, 0xf5, 0x70, 0x2a, 0xc3,
+ 0xfa, 0xd9, 0x3f, 0x2f, 0xc2, 0x99, 0x25, 0xc3, 0x26, 0x4e, 0xd3, 0x88, 0x39, 0xd8, 0x67, 0xa0,
+ 0xec, 0x9b, 0xbb, 0xa4, 0xd9, 0xb5, 0xc3, 0xac, 0x8c, 0xec, 0x61, 0x5d, 0x94, 0x63, 0x89, 0x21,
+ 0xd3, 0xc6, 0x07, 0x86, 0x2d, 0xf8, 0xc7, 0xd3, 0xc6, 0x07, 0x32, 0x6d, 0x7c, 0x60, 0xd8, 0xe8,
+ 0x05, 0x98, 0x11, 0xf9, 0x50, 0xd7, 0x59, 0x36, 0x02, 0xe2, 0x57, 0xc7, 0x99, 0xc7, 0x40, 0x54,
+ 0xde, 0xab, 0x31, 0x08, 0x4e, 0x60, 0x52, 0x4e, 0x81, 0xd5, 0x26, 0x77, 0x5d, 0x27, 0x9c, 0x88,
+ 0x4a, 0x4e, 0x5b, 0xa2, 0x1c, 0x4b, 0x0c, 0xf4, 0xed, 0x74, 0x42, 0xef, 0x4b, 0x43, 0x2a, 0x5f,
+ 0x46, 0x63, 0x0d, 0x60, 0x0a, 0x5f, 0xd7, 0x60, 0xb2, 0x43, 0x3c, 0xdf, 0xf2, 0x03, 0xe2, 0x98,
+ 0x44, 0x78, 0xc0, 0x5b, 0x79, 0x18, 0xc4, 0x46, 0x44, 0x96, 0xfb, 0x4a, 0xa5, 0x00, 0xab, 0x4c,
+ 0x4f, 0x67, 0xc6, 0x39, 0x9c, 0xe1, 0xdc, 0x81, 0xb3, 0x4b, 0x46, 0x60, 0xee, 0x76, 0x3b, 0xdc,
+ 0x28, 0xbb, 0x9e, 0x11, 0x58, 0xae, 0x83, 0x9e, 0x86, 0x09, 0xe2, 0x18, 0xdb, 0x36, 0x69, 0x26,
+ 0x97, 0x43, 0xae, 0xf2, 0x62, 0x1c, 0xc2, 0xd1, 0xa7, 0x61, 0xb2, 0x6d, 0xdc, 0x59, 0x16, 0x35,
+ 0x85, 0x9a, 0xca, 0xcd, 0x02, 0x6b, 0x11, 0x08, 0xab, 0x78, 0xb5, 0xaf, 0xc0, 0x59, 0xce, 0x72,
+ 0xcd, 0xe8, 0x28, 0x2d, 0xda, 0xc7, 0xca, 0xc3, 0x32, 0xcc, 0x99, 0x1e, 0x31, 0x02, 0xb2, 0xb2,
+ 0xb3, 0xee, 0x06, 0x57, 0xef, 0x58, 0x7e, 0x20, 0x96, 0x20, 0x64, 0xee, 0x64, 0x29, 0x01, 0xc7,
+ 0xa9, 0x1a, 0xb5, 0xef, 0x4e, 0x00, 0xba, 0xda, 0xb6, 0x82, 0x20, 0x1e, 0x00, 0x5d, 0x82, 0xd2,
+ 0xb6, 0xe7, 0xee, 0xc9, 0x28, 0x4c, 0x2e, 0x23, 0x34, 0x58, 0x29, 0x16, 0x50, 0xea, 0x53, 0xcc,
+ 0x5d, 0xc3, 0x71, 0x88, 0x1d, 0x85, 0x2c, 0xd2, 0xa7, 0x2c, 0x49, 0x08, 0x56, 0xb0, 0xd8, 0xb6,
+ 0x0a, 0xfe, 0x4f, 0xc9, 0x13, 0x45, 0xdb, 0x2a, 0x22, 0x10, 0x56, 0xf1, 0x62, 0xd3, 0xd8, 0x42,
+ 0xde, 0xd3, 0xd8, 0x62, 0x0e, 0xd3, 0xd8, 0xec, 0xed, 0x06, 0xa5, 0x53, 0xd9, 0x6e, 0x30, 0xd1,
+ 0xef, 0x76, 0x83, 0x72, 0xce, 0x49, 0xb3, 0x0f, 0x54, 0x97, 0xc8, 0xa7, 0x44, 0x6f, 0x0f, 0x6b,
+ 0xff, 0x29, 0xf5, 0x3c, 0x56, 0x70, 0xf0, 0xd0, 0xcc, 0x8b, 0x3e, 0x1c, 0x83, 0xb9, 0xa4, 0xcb,
+ 0x45, 0x77, 0x61, 0xc2, 0xe4, 0x1e, 0x4a, 0xcc, 0x48, 0xf4, 0xa1, 0x07, 0x9a, 0xb4, 0xbf, 0x13,
+ 0x6b, 0xf2, 0x1c, 0x82, 0x43, 0x86, 0xe8, 0x6b, 0x1a, 0x54, 0xcc, 0xd0, 0x49, 0x89, 0x8c, 0xcf,
+ 0xd0, 0xec, 0x33, 0x9c, 0x1e, 0x5f, 0x68, 0x97, 0x10, 0x1c, 0x31, 0xad, 0xfd, 0x6c, 0x0c, 0x26,
+ 0x55, 0xff, 0xf4, 0x25, 0x45, 0xcb, 0x78, 0x7b, 0xfc, 0x7f, 0xc5, 0x76, 0xe5, 0xde, 0xaf, 0x48,
+ 0x08, 0x8a, 0x4d, 0xad, 0xf9, 0xd6, 0x36, 0x0d, 0x6d, 0x68, 0xe7, 0x44, 0x7e, 0x2a, 0x2a, 0x53,
+ 0x14, 0xa7, 0x03, 0x05, 0xbf, 0x43, 0x4c, 0xf1, 0xb9, 0xeb, 0xf9, 0xa9, 0x8d, 0xde, 0x21, 0x66,
+ 0xe4, 0xd0, 0xe9, 0x3f, 0xcc, 0x38, 0xa1, 0x3b, 0x50, 0xf2, 0x03, 0x23, 0xe8, 0xfa, 0x22, 0x1b,
+ 0x94, 0xa3, 0xaa, 0xea, 0x8c, 0x6e, 0xe4, 0xc5, 0xf9, 0x7f, 0x2c, 0xf8, 0xd5, 0xae, 0xc3, 0x7c,
+ 0x4a, 0xaf, 0xa9, 0x6b, 0x27, 0x77, 0x3a, 0x1e, 0xf1, 0x69, 0x74, 0x94, 0x0c, 0x17, 0xaf, 0x4a,
+ 0x08, 0x56, 0xb0, 0x6a, 0x3f, 0xd7, 0x60, 0x56, 0xa1, 0xb4, 0x6a, 0xf9, 0x01, 0xfa, 0x62, 0xaa,
+ 0xab, 0x16, 0xfb, 0xeb, 0x2a, 0x5a, 0x9b, 0x75, 0x94, 0xb4, 0xef, 0xb0, 0x44, 0xe9, 0x26, 0x17,
+ 0x8a, 0x56, 0x40, 0xda, 0xbe, 0xc8, 0xe8, 0xbd, 0x9c, 0x5f, 0x9b, 0x45, 0x99, 0x87, 0x15, 0xca,
+ 0x00, 0x73, 0x3e, 0xb5, 0xbf, 0x5e, 0x8e, 0x7d, 0x22, 0xed, 0x3f, 0xb6, 0xab, 0x8d, 0x16, 0x35,
+ 0xba, 0xbe, 0xb2, 0xce, 0x18, 0xed, 0x6a, 0x53, 0x60, 0x38, 0x86, 0x89, 0xf6, 0xa1, 0x1c, 0x90,
+ 0x76, 0xc7, 0x36, 0x82, 0x70, 0x29, 0xfc, 0xfa, 0x90, 0x5f, 0xb0, 0x25, 0xc8, 0xf1, 0x51, 0x2a,
+ 0xfc, 0x87, 0x25, 0x1b, 0xd4, 0x86, 0x09, 0x9f, 0xaf, 0x29, 0x08, 0x3d, 0xbb, 0x36, 0x24, 0xc7,
+ 0x70, 0x85, 0x82, 0x39, 0x0f, 0xf1, 0x07, 0x87, 0x3c, 0xd0, 0x57, 0xa0, 0xd8, 0xb6, 0x1c, 0xcb,
+ 0x15, 0x49, 0x84, 0xd7, 0xf3, 0x35, 0xa4, 0xc5, 0x35, 0x4a, 0x9b, 0x0f, 0x03, 0xb2, 0xbf, 0x58,
+ 0x19, 0xe6, 0x6c, 0xd9, 0xfe, 0x37, 0x53, 0x04, 0xd5, 0x22, 0x46, 0xff, 0x62, 0xce, 0x32, 0xc8,
+ 0x98, 0x3d, 0x3e, 0x1a, 0x85, 0xc5, 0x58, 0xf2, 0x47, 0x77, 0xa1, 0xb0, 0x63, 0xd9, 0x44, 0x2c,
+ 0xaf, 0xbe, 0x96, 0xb3, 0x1c, 0xd7, 0x2c, 0x9b, 0x70, 0x19, 0xa2, 0x0d, 0x18, 0x96, 0x4d, 0x30,
+ 0xe3, 0xc9, 0x1a, 0xc2, 0x23, 0x9c, 0x86, 0x58, 0xa0, 0xca, 0xbb, 0x21, 0xb0, 0x20, 0x9f, 0x68,
+ 0x88, 0xb0, 0x18, 0x4b, 0xfe, 0xe8, 0xb7, 0xb5, 0x28, 0xc3, 0xc6, 0x37, 0x25, 0xbe, 0x91, 0xb3,
+ 0x2c, 0x22, 0xdd, 0xc2, 0x45, 0x91, 0x61, 0x7b, 0x2a, 0xe7, 0x76, 0x17, 0x0a, 0x46, 0x7b, 0xbf,
+ 0x23, 0x42, 0x95, 0xbc, 0x7b, 0xa4, 0xde, 0xde, 0xef, 0x24, 0x7a, 0xa4, 0xbe, 0xb6, 0xb9, 0x81,
+ 0x19, 0x4f, 0x6a, 0x1a, 0x7b, 0xc6, 0xce, 0x5e, 0x98, 0x4c, 0xc9, 0xdb, 0x34, 0x6e, 0x52, 0xda,
+ 0x09, 0xd3, 0x60, 0x65, 0x98, 0xb3, 0xa5, 0xdf, 0xde, 0xde, 0x0f, 0x82, 0xea, 0xe4, 0x48, 0xbe,
+ 0x7d, 0x6d, 0x3f, 0x08, 0x12, 0xdf, 0xbe, 0xb6, 0xb9, 0xb5, 0x85, 0x19, 0x4f, 0xca, 0xdb, 0x31,
+ 0x02, 0xbf, 0x3a, 0x35, 0x12, 0xde, 0xeb, 0x46, 0xe0, 0x27, 0x78, 0xaf, 0xd7, 0xb7, 0x74, 0xcc,
+ 0x78, 0xa2, 0x03, 0x18, 0xf7, 0x1d, 0xbf, 0x3a, 0xcd, 0x58, 0xbf, 0x9a, 0x33, 0x6b, 0xdd, 0x11,
+ 0x9c, 0xe5, 0x0e, 0x0b, 0x7d, 0x5d, 0xc7, 0x94, 0x21, 0xe3, 0xbb, 0xef, 0x57, 0x67, 0x46, 0xc3,
+ 0x77, 0x3f, 0xc5, 0x77, 0x93, 0xf2, 0xdd, 0xf7, 0xd1, 0xd7, 0x35, 0x28, 0x75, 0xba, 0xdb, 0x7a,
+ 0x77, 0xbb, 0x3a, 0xcb, 0x78, 0x7f, 0x21, 0x67, 0xde, 0x1b, 0x8c, 0x38, 0x67, 0x2f, 0x63, 0x0c,
+ 0x5e, 0x88, 0x05, 0x67, 0x26, 0x04, 0xe7, 0x5a, 0x9d, 0x1b, 0x89, 0x10, 0xd7, 0x19, 0xb5, 0x84,
+ 0x10, 0xbc, 0x10, 0x0b, 0xce, 0xa1, 0x10, 0xb6, 0xb1, 0x5d, 0x9d, 0x1f, 0x95, 0x10, 0xb6, 0x91,
+ 0x21, 0x84, 0x6d, 0x70, 0x21, 0x6c, 0x63, 0x9b, 0xaa, 0xfe, 0x6e, 0x73, 0xc7, 0xaf, 0xa2, 0x91,
+ 0xa8, 0xfe, 0x8d, 0xe6, 0x4e, 0x52, 0xf5, 0x6f, 0x2c, 0x5f, 0xd3, 0x31, 0xe3, 0x49, 0x5d, 0x8e,
+ 0x6f, 0x1b, 0xe6, 0x5e, 0xf5, 0xcc, 0x48, 0x5c, 0x8e, 0x4e, 0x69, 0x27, 0x5c, 0x0e, 0x2b, 0xc3,
+ 0x9c, 0x2d, 0xfa, 0x03, 0x0d, 0x26, 0xc5, 0x16, 0xab, 0xeb, 0x9e, 0xd5, 0xac, 0x9e, 0xcd, 0x67,
+ 0x86, 0x98, 0x14, 0x23, 0xe2, 0xc0, 0x85, 0x91, 0xd9, 0x05, 0x05, 0x82, 0x55, 0x41, 0xd0, 0x9f,
+ 0x6a, 0x30, 0x63, 0xc4, 0x36, 0xd3, 0x55, 0x1f, 0x65, 0xb2, 0x6d, 0xe7, 0x3d, 0x24, 0xc4, 0x77,
+ 0xec, 0x31, 0xf1, 0x64, 0x36, 0x35, 0x0e, 0xc4, 0x09, 0x89, 0x98, 0xfa, 0xfa, 0x81, 0x67, 0x75,
+ 0x48, 0xf5, 0xdc, 0x48, 0xd4, 0x57, 0x67, 0xc4, 0x13, 0xea, 0xcb, 0x0b, 0xb1, 0xe0, 0xcc, 0x86,
+ 0x6e, 0xc2, 0xa7, 0xe4, 0xd5, 0xc7, 0x46, 0x32, 0x74, 0x87, 0x13, 0xfe, 0xf8, 0xd0, 0x2d, 0x4a,
+ 0x71, 0xc8, 0x9c, 0xea, 0xb2, 0x47, 0x9a, 0x96, 0x5f, 0xad, 0x8e, 0x44, 0x97, 0x31, 0xa5, 0x9d,
+ 0xd0, 0x65, 0x56, 0x86, 0x39, 0x5b, 0xea, 0xce, 0x1d, 0x7f, 0xbf, 0xfa, 0xf8, 0x48, 0xdc, 0xf9,
+ 0xba, 0xbf, 0x9f, 0x70, 0xe7, 0xeb, 0xfa, 0x26, 0xa6, 0x0c, 0x85, 0x3b, 0xb7, 0x7d, 0xc3, 0xab,
+ 0x2e, 0x8c, 0xc8, 0x9d, 0x53, 0xe2, 0x29, 0x77, 0x4e, 0x0b, 0xb1, 0xe0, 0xcc, 0xb4, 0x80, 0x9d,
+ 0xa2, 0xb2, 0xcc, 0xea, 0x27, 0x46, 0xa2, 0x05, 0xd7, 0x39, 0xf5, 0x84, 0x16, 0x88, 0x52, 0x1c,
+ 0x32, 0x47, 0x97, 0x69, 0x54, 0xdb, 0xb1, 0x2d, 0xd3, 0xf0, 0xab, 0x4f, 0x5c, 0xd4, 0x2e, 0x17,
+ 0xf9, 0xc4, 0x07, 0x8b, 0x32, 0x2c, 0xa1, 0xe8, 0x87, 0x1a, 0xcc, 0x26, 0x96, 0xc9, 0xaa, 0x4f,
+ 0x32, 0xd1, 0xcd, 0x9c, 0x45, 0x6f, 0xc4, 0xb9, 0xf0, 0x4f, 0x90, 0x1b, 0x1b, 0x92, 0x2b, 0x34,
+ 0x49, 0xa1, 0xd0, 0xb7, 0x35, 0xa8, 0xc8, 0xb2, 0xea, 0x79, 0x26, 0xe2, 0x9b, 0xa3, 0x12, 0x91,
+ 0x0b, 0x27, 0xb7, 0xe9, 0x45, 0x2b, 0xf2, 0x91, 0x08, 0xcc, 0x6b, 0x33, 0x9d, 0xd7, 0x03, 0x8f,
+ 0x18, 0xed, 0xea, 0x85, 0x91, 0x78, 0x6d, 0x1c, 0x71, 0x48, 0x78, 0x6d, 0x05, 0x82, 0x55, 0x41,
+ 0x58, 0x97, 0x1a, 0xf1, 0x5d, 0x72, 0xd5, 0x8b, 0x23, 0xe9, 0xd2, 0xe4, 0x5e, 0xbc, 0x78, 0x97,
+ 0x26, 0xa0, 0x38, 0x29, 0x14, 0xfa, 0x2b, 0x0d, 0xe6, 0x8d, 0xe4, 0x6e, 0xd8, 0xea, 0xff, 0x61,
+ 0xa2, 0x92, 0x51, 0x88, 0x1a, 0xdb, 0x75, 0xcb, 0x84, 0x7d, 0x5c, 0x08, 0x3b, 0x9f, 0x82, 0xe3,
+ 0xb4, 0x68, 0x34, 0x48, 0xf1, 0x77, 0x82, 0x4e, 0xb5, 0x36, 0x92, 0x20, 0x45, 0xdf, 0x09, 0x92,
+ 0xf3, 0x22, 0xfd, 0xda, 0xd6, 0x06, 0x66, 0x3c, 0x17, 0xba, 0x00, 0xd1, 0xb4, 0x3e, 0x23, 0x75,
+ 0xba, 0xa9, 0xa6, 0x4e, 0x27, 0x9f, 0x7b, 0x71, 0xe0, 0xe4, 0xb5, 0xfe, 0x6b, 0x75, 0x2f, 0xb0,
+ 0x76, 0x0c, 0x33, 0x50, 0xf2, 0xae, 0x0b, 0xdf, 0xd1, 0x60, 0x3a, 0x36, 0x95, 0xcf, 0x60, 0xbd,
+ 0x1b, 0x67, 0x8d, 0xf3, 0x5f, 0xed, 0x53, 0x25, 0xfa, 0x1d, 0x0d, 0x2a, 0x72, 0x52, 0x9f, 0x21,
+ 0x4d, 0x33, 0x2e, 0xcd, 0xb0, 0x49, 0x4a, 0xc6, 0x2a, 0x5b, 0x12, 0xda, 0x36, 0xb1, 0xd9, 0xfd,
+ 0xe8, 0xdb, 0x46, 0xb2, 0xcb, 0x96, 0xe8, 0x03, 0x0d, 0xa6, 0xd4, 0x39, 0x7e, 0x86, 0x40, 0xad,
+ 0xb8, 0x40, 0x9b, 0xf9, 0xec, 0xe1, 0x39, 0xa2, 0xaf, 0xe4, 0x74, 0x7f, 0xf4, 0x7d, 0x95, 0x38,
+ 0x83, 0xa9, 0x4a, 0xf2, 0x2d, 0x0d, 0x20, 0x9a, 0xfb, 0x67, 0x88, 0x42, 0xe2, 0xa2, 0x0c, 0xbb,
+ 0x3c, 0xcc, 0x79, 0xf5, 0x6e, 0x15, 0x99, 0x08, 0x18, 0x7d, 0xab, 0xac, 0x6d, 0x6e, 0x6d, 0xf5,
+ 0x90, 0xe4, 0x9b, 0x1a, 0x54, 0x64, 0x5a, 0x60, 0xf4, 0x8d, 0xb2, 0x5e, 0xdf, 0xd2, 0x79, 0xe0,
+ 0x9e, 0x16, 0xe5, 0x1b, 0x1a, 0x94, 0xc3, 0x34, 0x41, 0x86, 0x24, 0x66, 0x5c, 0x92, 0x61, 0xb7,
+ 0x9e, 0xe9, 0xeb, 0x7a, 0x8f, 0x26, 0x61, 0x72, 0xec, 0x9f, 0x98, 0x1c, 0x9b, 0xbd, 0xe4, 0x78,
+ 0x4f, 0x83, 0x49, 0x25, 0x85, 0x90, 0x21, 0xca, 0x4e, 0x5c, 0x94, 0x61, 0x57, 0x46, 0x04, 0xb3,
+ 0xde, 0xd2, 0x28, 0xb9, 0x84, 0xd1, 0x4b, 0x23, 0x98, 0x1d, 0x29, 0x4d, 0x98, 0x54, 0x38, 0x11,
+ 0x69, 0x28, 0xb3, 0xde, 0xe6, 0x2c, 0x13, 0x0c, 0xa3, 0x37, 0xe7, 0x1b, 0xcb, 0xd7, 0xf4, 0x23,
+ 0x9c, 0x5c, 0x94, 0x6d, 0x18, 0xbd, 0x3d, 0x73, 0x5e, 0xd9, 0xb2, 0x7c, 0x4f, 0x83, 0xb9, 0x64,
+ 0xca, 0x21, 0x43, 0xa2, 0xbd, 0xb8, 0x44, 0xc3, 0x1e, 0x2d, 0x57, 0x39, 0x66, 0xcb, 0xf5, 0x27,
+ 0x1a, 0x9c, 0xc9, 0x48, 0x37, 0x64, 0x88, 0xe6, 0xc4, 0x45, 0x7b, 0x6d, 0x54, 0xa7, 0x12, 0x93,
+ 0x9a, 0xad, 0xe4, 0x1b, 0x46, 0xaf, 0xd9, 0x82, 0x59, 0xef, 0x70, 0x42, 0xcd, 0x3b, 0x8c, 0x3e,
+ 0x9c, 0x48, 0x6f, 0x6b, 0x48, 0xea, 0x77, 0x94, 0x81, 0x18, 0xbd, 0x7e, 0x73, 0x5e, 0xbd, 0xc7,
+ 0x89, 0x30, 0x1f, 0x31, 0xfa, 0x71, 0x62, 0x5d, 0xdf, 0x3c, 0x72, 0x9c, 0x90, 0xb9, 0x89, 0x93,
+ 0x18, 0x27, 0x18, 0xb3, 0xde, 0x1a, 0xa3, 0xe6, 0x28, 0x46, 0xaf, 0x31, 0x21, 0xb7, 0x6c, 0x79,
+ 0xbe, 0xaf, 0x29, 0x87, 0x68, 0x94, 0xc4, 0x43, 0x86, 0x5c, 0x6e, 0x5c, 0xae, 0xd7, 0x47, 0xb6,
+ 0x8b, 0x57, 0x95, 0xef, 0x43, 0x0d, 0x66, 0xe2, 0x59, 0x87, 0x0c, 0xc9, 0xac, 0xb8, 0x64, 0xfa,
+ 0x08, 0x0e, 0xe8, 0x24, 0x3d, 0x77, 0x32, 0xed, 0x30, 0x7a, 0xcf, 0xad, 0x72, 0xec, 0xdd, 0x97,
+ 0x59, 0x19, 0x87, 0xd1, 0xf7, 0x65, 0xef, 0x33, 0x87, 0xaa, 0x7c, 0x3f, 0xd0, 0xe0, 0x5c, 0x76,
+ 0x9a, 0x21, 0x43, 0xc2, 0xfd, 0xb8, 0x84, 0x6f, 0x8c, 0xf0, 0x50, 0x71, 0x32, 0x56, 0x91, 0x79,
+ 0x86, 0xd1, 0xc7, 0x2a, 0xfa, 0xb5, 0xad, 0x1e, 0x13, 0xb2, 0x5a, 0x10, 0xdb, 0x5e, 0xc3, 0xf7,
+ 0xde, 0xa0, 0xb7, 0xe5, 0x6e, 0x1f, 0xbe, 0x29, 0xe6, 0x33, 0x83, 0x67, 0x31, 0x8e, 0xde, 0xd4,
+ 0xf3, 0xb7, 0x05, 0x98, 0x4d, 0xcc, 0xe8, 0xd9, 0x75, 0x12, 0xf4, 0x2f, 0xbb, 0x7b, 0x49, 0x8b,
+ 0x1f, 0xd0, 0xbd, 0x1a, 0x02, 0x70, 0x84, 0x83, 0x3e, 0xd4, 0x60, 0xf6, 0x1d, 0x23, 0x30, 0x77,
+ 0x37, 0x8c, 0x60, 0x97, 0xef, 0xcc, 0xca, 0xa9, 0xbd, 0x5e, 0x8d, 0x53, 0x8d, 0x72, 0x69, 0x09,
+ 0x00, 0x4e, 0xf2, 0x47, 0x4f, 0xc3, 0x44, 0xc7, 0xb5, 0x6d, 0xcb, 0x69, 0x89, 0x4b, 0x34, 0x64,
+ 0x72, 0x78, 0x83, 0x17, 0xe3, 0x10, 0x1e, 0xbf, 0xfc, 0xa8, 0x90, 0xcb, 0x9e, 0x87, 0x44, 0x93,
+ 0x1e, 0x6b, 0x2b, 0x62, 0xf1, 0x61, 0xd9, 0x8a, 0xf8, 0x4f, 0x05, 0x40, 0xe9, 0x51, 0xe7, 0x41,
+ 0xd7, 0x83, 0x5d, 0x82, 0x92, 0x19, 0xa9, 0x8a, 0xb2, 0x79, 0x58, 0xf4, 0xa8, 0x80, 0xf2, 0x6d,
+ 0xfd, 0x3e, 0x31, 0xbb, 0x1e, 0x49, 0xdf, 0x06, 0xc3, 0xcb, 0xb1, 0xc4, 0x18, 0xf0, 0xb2, 0x83,
+ 0x0f, 0xd2, 0x5b, 0xf3, 0xdf, 0xce, 0x7d, 0xf8, 0x1d, 0xa0, 0xf3, 0x6f, 0xb3, 0xcb, 0x5f, 0x76,
+ 0xc5, 0xe9, 0xa1, 0xd2, 0xc0, 0x47, 0x7e, 0xeb, 0xb2, 0x32, 0x56, 0x08, 0x9d, 0xce, 0xd5, 0x08,
+ 0xc3, 0xe9, 0xd4, 0x3f, 0x6a, 0x30, 0xc3, 0xa7, 0xbc, 0xf5, 0x4e, 0x67, 0xc9, 0x23, 0x4d, 0x9f,
+ 0x36, 0x4e, 0xc7, 0xb3, 0x0e, 0x8c, 0x80, 0x84, 0x27, 0x53, 0x06, 0x6b, 0x9c, 0x0d, 0x59, 0x19,
+ 0x2b, 0x84, 0xd0, 0x53, 0x50, 0x34, 0x3a, 0x9d, 0x95, 0x65, 0x26, 0xc3, 0x78, 0xb4, 0x8a, 0x57,
+ 0xa7, 0x85, 0x98, 0xc3, 0xd0, 0x4b, 0x30, 0x63, 0x39, 0x7e, 0x60, 0xd8, 0x36, 0xdb, 0x02, 0xbb,
+ 0xb2, 0xcc, 0x54, 0x71, 0x3c, 0x5a, 0x93, 0x5d, 0x89, 0x41, 0x71, 0x02, 0xbb, 0xf6, 0x77, 0x93,
+ 0x30, 0x9f, 0x9a, 0xc1, 0xa3, 0x05, 0x18, 0xb3, 0xf8, 0x99, 0x81, 0xf1, 0x06, 0x08, 0x4a, 0x63,
+ 0x2b, 0xcb, 0x78, 0xcc, 0x6a, 0xaa, 0x87, 0x0b, 0xc7, 0x4e, 0xee, 0x70, 0xa1, 0x3c, 0x66, 0x3b,
+ 0xde, 0xef, 0x31, 0xdb, 0xe8, 0x28, 0x8f, 0x38, 0x0a, 0x93, 0x71, 0x16, 0x31, 0x3a, 0xfe, 0x83,
+ 0x15, 0xfc, 0xbe, 0x0e, 0xeb, 0xdd, 0x82, 0xb2, 0xd1, 0xb1, 0x8e, 0x71, 0x52, 0x8f, 0xad, 0xef,
+ 0xd5, 0x37, 0x56, 0xf8, 0x31, 0x3d, 0x49, 0x64, 0xe4, 0x67, 0xf4, 0x54, 0x77, 0x55, 0x7e, 0xa0,
+ 0xbb, 0xba, 0x04, 0x25, 0xc3, 0x0c, 0xac, 0x03, 0x22, 0x4e, 0xdb, 0x49, 0x27, 0x58, 0x67, 0xa5,
+ 0x58, 0x40, 0xc5, 0x25, 0x93, 0x41, 0x38, 0x28, 0x43, 0xea, 0x92, 0xc9, 0x10, 0x84, 0x55, 0x3c,
+ 0xf4, 0x22, 0x4c, 0x73, 0xa5, 0x09, 0xcf, 0x09, 0x4e, 0xb2, 0x8a, 0xf2, 0x76, 0x92, 0xeb, 0x2a,
+ 0x10, 0xc7, 0x71, 0x51, 0x1d, 0x66, 0x79, 0xc1, 0xed, 0x8e, 0xed, 0x1a, 0x4d, 0x5a, 0x7d, 0x2a,
+ 0xae, 0x15, 0xd7, 0xe3, 0x60, 0x9c, 0xc4, 0xef, 0x71, 0xb0, 0x70, 0xfa, 0x58, 0x07, 0x0b, 0xdf,
+ 0x57, 0x7d, 0x35, 0xdf, 0x1d, 0xf5, 0x56, 0xde, 0x39, 0xb5, 0x01, 0x5c, 0xf5, 0xbb, 0xc9, 0xe3,
+ 0xaf, 0x7c, 0xd3, 0xd4, 0xb0, 0xae, 0x95, 0x9a, 0x57, 0x53, 0x3d, 0xe0, 0xda, 0xd7, 0xb1, 0xd7,
+ 0xcf, 0xc0, 0xb4, 0xeb, 0xb5, 0x0c, 0xc7, 0xba, 0xcb, 0x1c, 0x8e, 0xcf, 0x36, 0x4f, 0x55, 0xb8,
+ 0xb6, 0xde, 0x52, 0x01, 0x38, 0x8e, 0x87, 0xee, 0x42, 0xa5, 0x15, 0x7a, 0xd9, 0xea, 0x7c, 0x2e,
+ 0x7e, 0x26, 0xee, 0xb5, 0xf9, 0x6e, 0x7d, 0x59, 0x86, 0x23, 0x76, 0xca, 0xa8, 0x84, 0x1e, 0x96,
+ 0x51, 0xe9, 0xdd, 0x32, 0x73, 0xe3, 0xf1, 0xd4, 0xe7, 0x29, 0x9d, 0x03, 0xff, 0x2c, 0x54, 0xc4,
+ 0x11, 0x4c, 0x31, 0x76, 0x55, 0x1a, 0x9f, 0x10, 0xaa, 0x72, 0x26, 0x75, 0x0c, 0x7c, 0x65, 0x19,
+ 0x47, 0xd8, 0x8a, 0xe3, 0x1d, 0xef, 0xf7, 0x94, 0x74, 0x21, 0xbf, 0x53, 0xd2, 0x3a, 0x3c, 0xca,
+ 0x8f, 0xc3, 0xe9, 0xfa, 0xea, 0x2b, 0xc4, 0xb3, 0x76, 0x2c, 0x93, 0x9f, 0x86, 0xe3, 0x77, 0x4e,
+ 0x3d, 0x29, 0x3e, 0xe2, 0xd1, 0xab, 0x59, 0x48, 0x38, 0xbb, 0xae, 0xf0, 0x74, 0xb6, 0x21, 0x3d,
+ 0x5d, 0x29, 0xe5, 0xe9, 0x22, 0x20, 0x8e, 0xe3, 0xf6, 0x70, 0x53, 0xe5, 0xe1, 0xdd, 0x54, 0x25,
+ 0x2f, 0x37, 0x15, 0xd7, 0xb8, 0x01, 0xdc, 0xd4, 0x65, 0x28, 0x8b, 0x7e, 0xf7, 0xd9, 0x06, 0xe2,
+ 0x8a, 0x38, 0x97, 0x26, 0xca, 0xb0, 0x84, 0xd2, 0x0e, 0xf7, 0x59, 0x4f, 0xf2, 0x0e, 0x9f, 0x1c,
+ 0xb8, 0xc3, 0xf5, 0xa8, 0x36, 0x56, 0x49, 0x29, 0x86, 0x3e, 0x75, 0x82, 0x47, 0xaf, 0x6b, 0x50,
+ 0x6a, 0x79, 0x6e, 0xb7, 0xc3, 0xb7, 0xf0, 0x0a, 0x25, 0xbf, 0xce, 0x4a, 0xb0, 0x80, 0x0c, 0xe7,
+ 0x0c, 0xbe, 0x5f, 0x81, 0xd9, 0xc4, 0xda, 0x43, 0xe6, 0x4c, 0x58, 0x3b, 0xe5, 0x99, 0xf0, 0x45,
+ 0x28, 0x04, 0x34, 0x68, 0x18, 0x8b, 0x1f, 0x12, 0x65, 0xd1, 0x02, 0x83, 0x50, 0xe3, 0x31, 0x77,
+ 0x89, 0xb9, 0x17, 0x1e, 0x93, 0x16, 0xd1, 0x9f, 0x34, 0x9e, 0x25, 0x15, 0x88, 0xe3, 0xb8, 0xe8,
+ 0xff, 0x41, 0xc5, 0x68, 0x36, 0x3d, 0xe2, 0xfb, 0xe2, 0x0e, 0x88, 0x0a, 0xf7, 0xf9, 0xf5, 0xb0,
+ 0x10, 0x47, 0x70, 0x1a, 0x1d, 0xed, 0x36, 0x77, 0xfc, 0xdb, 0xbe, 0x98, 0xdf, 0x2a, 0x27, 0xa7,
+ 0x69, 0x53, 0xd2, 0x72, 0x2c, 0x31, 0x50, 0x13, 0x66, 0xf7, 0xbc, 0xed, 0xa5, 0x25, 0xc3, 0xdc,
+ 0x25, 0xc7, 0x99, 0x13, 0xb1, 0xbb, 0x19, 0x6f, 0xc6, 0x29, 0xe0, 0x24, 0x49, 0xc1, 0xe5, 0x26,
+ 0x39, 0x0c, 0x8c, 0xed, 0xe3, 0xc4, 0x84, 0x21, 0x17, 0x95, 0x02, 0x4e, 0x92, 0xa4, 0x11, 0xdc,
+ 0x9e, 0xb7, 0x1d, 0x1e, 0x30, 0x15, 0x17, 0x36, 0xc8, 0x08, 0xee, 0x66, 0x04, 0xc2, 0x2a, 0x1e,
+ 0x6d, 0xb0, 0x3d, 0x6f, 0x1b, 0x13, 0xc3, 0x6e, 0x8b, 0x3b, 0xb1, 0x64, 0x83, 0xdd, 0x14, 0xe5,
+ 0x58, 0x62, 0xa0, 0x0e, 0x20, 0xfa, 0x75, 0xac, 0xdf, 0xe5, 0x09, 0x39, 0x71, 0xa6, 0xf1, 0x72,
+ 0xd6, 0xd7, 0x48, 0x24, 0xf5, 0x83, 0xce, 0x51, 0x77, 0x77, 0x33, 0x45, 0x07, 0x67, 0xd0, 0x46,
+ 0xaf, 0xc3, 0x63, 0x7b, 0xde, 0xb6, 0x48, 0x05, 0x6e, 0x78, 0x96, 0x63, 0x5a, 0x1d, 0x83, 0x1f,
+ 0xd9, 0x9d, 0x8c, 0x5f, 0xe1, 0x75, 0x33, 0x1b, 0x0d, 0xf7, 0xaa, 0x1f, 0x4f, 0xcb, 0x4c, 0xe5,
+ 0x92, 0x96, 0x49, 0x98, 0xeb, 0xb1, 0xd2, 0x32, 0xd3, 0x0f, 0x4b, 0xb0, 0xf2, 0x23, 0x0d, 0x10,
+ 0xdb, 0x75, 0x11, 0xde, 0x41, 0xcf, 0x9c, 0x1f, 0xba, 0x02, 0x15, 0xe6, 0xfd, 0x94, 0x33, 0x68,
+ 0x32, 0xbb, 0x77, 0x3d, 0x04, 0xe0, 0x08, 0x87, 0xce, 0x51, 0x5c, 0xbb, 0x49, 0xe4, 0xc1, 0x71,
+ 0x39, 0x47, 0xb9, 0xc5, 0x4a, 0xb1, 0x80, 0xa2, 0xeb, 0x30, 0xef, 0x91, 0x6d, 0xc3, 0x36, 0x1c,
+ 0x93, 0xe8, 0x81, 0x67, 0x04, 0xa4, 0x75, 0x28, 0x3c, 0x89, 0xdc, 0x55, 0x86, 0x93, 0x08, 0x38,
+ 0x5d, 0xa7, 0xf6, 0xaf, 0x65, 0x98, 0x4b, 0x6e, 0x17, 0x79, 0x50, 0x36, 0xe9, 0x0a, 0x54, 0x3a,
+ 0x86, 0x17, 0x58, 0xca, 0xb1, 0x7a, 0xf9, 0x55, 0x1b, 0x21, 0x00, 0x47, 0x38, 0x74, 0xda, 0xcf,
+ 0x6e, 0x18, 0x14, 0x12, 0xca, 0x69, 0x3f, 0xbb, 0x81, 0x10, 0x73, 0x58, 0xf6, 0x59, 0xed, 0xc2,
+ 0x89, 0x9d, 0xd5, 0xfe, 0x58, 0x5c, 0x59, 0xf8, 0x5e, 0xfa, 0xca, 0xc2, 0x37, 0x73, 0xde, 0x0b,
+ 0x34, 0xd8, 0xb4, 0x6b, 0xda, 0x54, 0xf5, 0x59, 0x9c, 0x4d, 0xdf, 0xcc, 0x43, 0xa4, 0x98, 0xa1,
+ 0xf0, 0xd9, 0x53, 0xac, 0x08, 0xc7, 0x59, 0xa3, 0x0d, 0x38, 0x6b, 0x5b, 0x6d, 0x8b, 0xaf, 0x1b,
+ 0xf9, 0x1b, 0xc4, 0xd3, 0x89, 0xe9, 0x3a, 0x4d, 0xe6, 0xa8, 0xc7, 0xa3, 0x44, 0xc8, 0x6a, 0x06,
+ 0x0e, 0xce, 0xac, 0x89, 0x9e, 0x86, 0x89, 0x03, 0xe2, 0xb1, 0xb3, 0xb4, 0x10, 0xbf, 0x27, 0xf8,
+ 0x15, 0x5e, 0x8c, 0x43, 0x38, 0x7a, 0x1d, 0x0a, 0xbe, 0xe1, 0xdb, 0x22, 0x50, 0x3b, 0xc6, 0xf6,
+ 0xc6, 0xba, 0xbe, 0x2a, 0xd4, 0x83, 0x5d, 0xc8, 0x46, 0xff, 0x63, 0x46, 0xf2, 0x94, 0x02, 0xb6,
+ 0x28, 0x21, 0x3c, 0x7d, 0x54, 0x42, 0x78, 0x38, 0xa7, 0xf8, 0x83, 0x12, 0xcc, 0x26, 0xf6, 0x7f,
+ 0x3d, 0xc8, 0xb5, 0x48, 0x4f, 0x31, 0x76, 0x84, 0xa7, 0x78, 0x06, 0xca, 0xa6, 0x6d, 0x11, 0x27,
+ 0x58, 0x69, 0x0a, 0x8f, 0x12, 0x9d, 0xf0, 0xe4, 0xe5, 0xcb, 0x58, 0x62, 0x9c, 0xb6, 0x5f, 0x51,
+ 0x1d, 0x40, 0xb1, 0xdf, 0x3b, 0x20, 0x4a, 0xa3, 0x7c, 0x72, 0x22, 0x9f, 0x93, 0xa6, 0x89, 0x8e,
+ 0xfd, 0xd8, 0xdf, 0x7f, 0x1a, 0x3e, 0x63, 0x50, 0xc9, 0xfb, 0x19, 0x83, 0xe1, 0x6c, 0xe4, 0x1f,
+ 0xc6, 0xa0, 0xbc, 0x5e, 0xdf, 0xd2, 0xd9, 0xbd, 0xa0, 0x6f, 0xc4, 0x6f, 0x3e, 0x1d, 0x46, 0xc8,
+ 0xf4, 0x15, 0xa7, 0xd7, 0xa8, 0x69, 0x0d, 0x7c, 0xbb, 0x69, 0x85, 0x5b, 0x1f, 0x9d, 0x67, 0xf2,
+ 0xea, 0x68, 0x09, 0x0a, 0xce, 0xde, 0xa0, 0x37, 0xb7, 0xb3, 0x36, 0x5b, 0xbf, 0x49, 0x0e, 0x31,
+ 0xab, 0x8c, 0x6e, 0x03, 0x98, 0x1e, 0x69, 0x12, 0x27, 0xb0, 0xc4, 0xc3, 0x39, 0x83, 0xad, 0x2f,
+ 0x2c, 0xc9, 0xca, 0x58, 0x21, 0x54, 0xfb, 0x66, 0x09, 0xe6, 0x92, 0xfb, 0x3c, 0x1f, 0xe4, 0x72,
+ 0x9e, 0x86, 0x09, 0xbf, 0xcb, 0xee, 0x9b, 0x10, 0x4e, 0x47, 0x0e, 0x03, 0x3a, 0x2f, 0xc6, 0x21,
+ 0x3c, 0xdb, 0x95, 0x8c, 0x9f, 0x8a, 0x2b, 0x29, 0xf4, 0xeb, 0x4a, 0xf2, 0x0e, 0x68, 0xde, 0x4b,
+ 0x5f, 0x4a, 0xfe, 0x66, 0xce, 0x3b, 0x73, 0x07, 0xf0, 0x25, 0x44, 0x58, 0xf5, 0x44, 0x2e, 0x37,
+ 0x35, 0x84, 0x86, 0x98, 0xba, 0x35, 0xf5, 0x21, 0xbc, 0x40, 0xeb, 0xa7, 0x45, 0x98, 0x89, 0x6f,
+ 0xdc, 0xa2, 0xd3, 0xe2, 0x5d, 0xd7, 0x0f, 0x44, 0xb2, 0x20, 0xf9, 0x7a, 0xd6, 0x8d, 0x08, 0x84,
+ 0x55, 0xbc, 0xfe, 0xc6, 0xe4, 0xa7, 0x61, 0x42, 0x5c, 0x0d, 0x25, 0x86, 0x64, 0x69, 0x45, 0xe2,
+ 0xfa, 0x28, 0x1c, 0xc2, 0xff, 0x77, 0x40, 0xb6, 0x7d, 0xf4, 0xad, 0xf4, 0x80, 0xfc, 0x46, 0xae,
+ 0xbb, 0xf4, 0x3e, 0xee, 0xe3, 0xf1, 0x70, 0xca, 0xfd, 0x3a, 0xcc, 0xa7, 0x16, 0x6f, 0xfa, 0xbb,
+ 0xa6, 0xf6, 0x02, 0x14, 0x1d, 0xa3, 0x4d, 0xf8, 0xed, 0x34, 0x15, 0x3e, 0xbc, 0xb1, 0x9b, 0xcc,
+ 0x31, 0x2f, 0xaf, 0xfd, 0xb0, 0x04, 0xf3, 0xa9, 0xdd, 0xe8, 0x6c, 0xca, 0x2b, 0x17, 0x00, 0x12,
+ 0x13, 0xf9, 0xcc, 0xb4, 0xff, 0x4b, 0x30, 0xc3, 0x0c, 0x63, 0x23, 0xb1, 0x6c, 0x20, 0x17, 0xb1,
+ 0xb7, 0x62, 0x50, 0x9c, 0xc0, 0xee, 0x6f, 0xca, 0xfc, 0x12, 0xcc, 0xa8, 0x57, 0xef, 0xaf, 0x2c,
+ 0x8b, 0x65, 0x61, 0xc9, 0x44, 0x8f, 0x41, 0x71, 0x02, 0x9b, 0xbd, 0x5b, 0x20, 0x07, 0x4f, 0x91,
+ 0x8e, 0x2b, 0x0e, 0xfe, 0x6e, 0x41, 0x82, 0x04, 0x4e, 0x11, 0x45, 0xdb, 0xb0, 0xc0, 0xd3, 0xf7,
+ 0xaa, 0x40, 0x32, 0xf9, 0xcf, 0xe7, 0xc5, 0x35, 0x21, 0xf4, 0xc2, 0x72, 0x4f, 0x4c, 0x7c, 0x04,
+ 0x95, 0x01, 0x2f, 0x5b, 0x7b, 0x3f, 0xfd, 0x08, 0xdb, 0x5b, 0x79, 0x9f, 0x61, 0x38, 0x96, 0x0d,
+ 0x56, 0x1e, 0x16, 0x1b, 0xfc, 0xe1, 0x24, 0x35, 0x94, 0xc4, 0x76, 0x5c, 0x54, 0x83, 0x12, 0xd3,
+ 0x4d, 0x3a, 0xbc, 0xc8, 0x95, 0x00, 0xa6, 0xb4, 0x3e, 0x16, 0x90, 0x3e, 0x92, 0xe4, 0x22, 0x64,
+ 0x1b, 0xef, 0x11, 0xb2, 0x75, 0xe0, 0x4c, 0x60, 0xfb, 0x5b, 0x5e, 0xd7, 0x0f, 0x96, 0x88, 0x17,
+ 0xf8, 0x42, 0x75, 0x0b, 0x03, 0xbf, 0x5c, 0xb4, 0xb5, 0xaa, 0x27, 0xa9, 0xe0, 0x2c, 0xd2, 0x54,
+ 0x81, 0x03, 0xdb, 0xaf, 0xdb, 0xb6, 0xfb, 0x4e, 0xb8, 0xb3, 0x20, 0x1a, 0x6c, 0xc4, 0x30, 0x22,
+ 0x15, 0x78, 0x6b, 0x55, 0xef, 0x81, 0x89, 0x8f, 0xa0, 0x82, 0xd6, 0xd8, 0x57, 0xbd, 0x62, 0xd8,
+ 0x56, 0xd3, 0x08, 0x08, 0x1d, 0x8e, 0x59, 0xf6, 0x9a, 0x5b, 0x87, 0x5c, 0x6e, 0xdc, 0x5a, 0xd5,
+ 0x93, 0x28, 0x38, 0xab, 0xde, 0xa8, 0x5e, 0x2f, 0xcc, 0x1c, 0xbd, 0xcb, 0xa7, 0x32, 0x7a, 0x57,
+ 0x06, 0xb3, 0x72, 0xc8, 0xc9, 0xca, 0x13, 0x2a, 0x3f, 0x80, 0x95, 0x37, 0x61, 0x56, 0xbe, 0x0d,
+ 0x21, 0x74, 0x76, 0x72, 0xe0, 0xd5, 0x8f, 0x7a, 0x9c, 0x02, 0x4e, 0x92, 0x3c, 0xa5, 0x8c, 0xd2,
+ 0x5f, 0x6a, 0x30, 0x47, 0x25, 0xa9, 0x07, 0xbb, 0xc4, 0xb9, 0xbb, 0x61, 0x78, 0x46, 0x3b, 0xbc,
+ 0xd0, 0x67, 0x27, 0xf7, 0x26, 0xaf, 0x27, 0x18, 0xf1, 0xa6, 0x97, 0xb7, 0xac, 0x26, 0xc1, 0x38,
+ 0x25, 0x19, 0x1d, 0xfa, 0xa2, 0xb2, 0xe3, 0x3c, 0x41, 0x78, 0x36, 0xce, 0x28, 0x1c, 0xfa, 0x92,
+ 0x44, 0x87, 0xf2, 0xb1, 0x0b, 0x4b, 0xf0, 0x68, 0xe6, 0xa7, 0x0e, 0xe4, 0xa8, 0xbf, 0x51, 0x12,
+ 0x5b, 0xea, 0x73, 0x98, 0x0b, 0xe4, 0xfd, 0xd0, 0x08, 0x0d, 0xac, 0x1c, 0xf9, 0x10, 0x4d, 0xe2,
+ 0x81, 0xa2, 0xe8, 0xe9, 0x99, 0x08, 0x07, 0x2d, 0xc0, 0x58, 0x73, 0x9b, 0xb9, 0xfa, 0x62, 0xb4,
+ 0x8f, 0x6f, 0xb9, 0x81, 0xc7, 0x9a, 0xdb, 0xe8, 0x32, 0x94, 0xc5, 0x24, 0x23, 0xdc, 0xe6, 0xc6,
+ 0xd8, 0x8a, 0x19, 0x88, 0x8f, 0x25, 0x74, 0x54, 0x61, 0xfd, 0x08, 0xf2, 0xf7, 0xc9, 0x9e, 0xfb,
+ 0xd8, 0x27, 0xda, 0x06, 0xf3, 0xd0, 0xcf, 0x28, 0x77, 0x08, 0x43, 0x3c, 0x97, 0x9b, 0xbe, 0x20,
+ 0x78, 0xb8, 0x80, 0xe5, 0x6f, 0x4a, 0x70, 0x2e, 0xfb, 0xa0, 0xc7, 0xc7, 0xc6, 0x1a, 0xb8, 0x72,
+ 0x8f, 0x67, 0x2a, 0xf7, 0x27, 0x61, 0xc2, 0x67, 0x82, 0x87, 0x2b, 0xff, 0xfc, 0x76, 0x47, 0x5e,
+ 0x84, 0x43, 0x18, 0x7a, 0x19, 0x50, 0xdb, 0xb8, 0xb3, 0xe6, 0xb7, 0x96, 0xdc, 0x2e, 0xbb, 0xb0,
+ 0x16, 0x13, 0x83, 0xdf, 0xa6, 0x5c, 0x8c, 0xf6, 0xd7, 0xac, 0xa5, 0x30, 0x70, 0x46, 0x2d, 0xb6,
+ 0x57, 0x21, 0xb6, 0xfe, 0x93, 0xd8, 0xe8, 0x73, 0xe4, 0x82, 0xcd, 0x88, 0xe2, 0x8f, 0x0f, 0xd3,
+ 0x81, 0xbb, 0x39, 0x92, 0xd3, 0x3f, 0x1f, 0xf7, 0xe8, 0xfd, 0x24, 0x4d, 0xe7, 0x67, 0x05, 0x38,
+ 0x93, 0x71, 0xfb, 0x43, 0xdc, 0x7b, 0x6b, 0x7d, 0x78, 0xef, 0x7d, 0xd9, 0x52, 0xf9, 0x6c, 0xb4,
+ 0x0e, 0x85, 0x3a, 0xa2, 0x99, 0xde, 0xd7, 0xe0, 0x2c, 0x5b, 0x60, 0x0f, 0x57, 0xf5, 0xc2, 0x1b,
+ 0x37, 0xc7, 0x85, 0x66, 0xf6, 0x75, 0xf5, 0xed, 0xf5, 0x0c, 0x0a, 0xd1, 0xaa, 0x63, 0x16, 0x14,
+ 0x67, 0x72, 0x45, 0x4b, 0x00, 0xf2, 0x30, 0x4f, 0x68, 0xc9, 0x4f, 0xb1, 0x0b, 0x7c, 0x65, 0xe9,
+ 0x7f, 0xb3, 0xc5, 0x7b, 0xa5, 0xb5, 0xd9, 0xcc, 0x48, 0xa9, 0x36, 0x8a, 0x67, 0x0e, 0x32, 0xba,
+ 0xb7, 0x7f, 0x0b, 0x18, 0x4e, 0xbb, 0xfe, 0x62, 0x1c, 0x66, 0xe2, 0x1d, 0x89, 0x2e, 0x41, 0xa9,
+ 0xe3, 0x91, 0x1d, 0xeb, 0x4e, 0xf2, 0xb6, 0xfb, 0x0d, 0x56, 0x8a, 0x05, 0x14, 0xb9, 0x50, 0xb2,
+ 0x8d, 0x6d, 0x3a, 0xde, 0xf3, 0xdb, 0x86, 0xaf, 0x0f, 0x7d, 0x73, 0x6e, 0xb8, 0xca, 0x10, 0x32,
+ 0x5c, 0x65, 0xe4, 0xb1, 0x60, 0x43, 0x19, 0xee, 0x58, 0xc4, 0x6e, 0xf2, 0xed, 0x9c, 0xa3, 0x60,
+ 0x78, 0x8d, 0x91, 0xc7, 0x82, 0x0d, 0x7a, 0x03, 0x2a, 0xfc, 0x89, 0x80, 0x66, 0xe3, 0x50, 0xcc,
+ 0x70, 0xff, 0x6f, 0x7f, 0x2a, 0xbb, 0x65, 0xb5, 0x49, 0x64, 0x8e, 0x4b, 0x21, 0x11, 0x1c, 0xd1,
+ 0x63, 0x0f, 0x20, 0xef, 0x04, 0xc4, 0xd3, 0x03, 0xc3, 0x0b, 0xdf, 0x27, 0x8e, 0x1e, 0x40, 0x96,
+ 0x10, 0xac, 0x60, 0xd5, 0x3e, 0x2a, 0xc1, 0x6c, 0xe2, 0x68, 0xdd, 0xaf, 0xc6, 0x29, 0x36, 0xf5,
+ 0x39, 0x83, 0xf1, 0xbc, 0x9f, 0x33, 0x28, 0xe4, 0x11, 0x1e, 0xac, 0xc2, 0x84, 0xd8, 0xde, 0x37,
+ 0x58, 0x9a, 0x8e, 0x45, 0x0a, 0x61, 0x04, 0x13, 0x92, 0x88, 0x2f, 0x0a, 0x97, 0x72, 0x59, 0x14,
+ 0x4e, 0xe8, 0xc5, 0xc7, 0xfe, 0x45, 0xd9, 0x0d, 0x38, 0xdb, 0x71, 0x6d, 0x3b, 0xdc, 0x5f, 0x29,
+ 0xdf, 0x0a, 0x29, 0xc7, 0x4f, 0xd7, 0x6c, 0x64, 0xe0, 0xe0, 0xcc, 0x9a, 0xc3, 0x39, 0xc2, 0x7f,
+ 0x2f, 0xc1, 0x4c, 0xfc, 0x72, 0x98, 0x53, 0xda, 0xef, 0xfe, 0x0c, 0x94, 0x59, 0xae, 0xae, 0xee,
+ 0x39, 0xc9, 0xe7, 0x7d, 0xb6, 0x44, 0x39, 0x96, 0x18, 0x08, 0x43, 0xc5, 0x38, 0xde, 0x83, 0xde,
+ 0x7c, 0xf3, 0xaa, 0x7c, 0xca, 0x3b, 0x22, 0x43, 0x69, 0xfa, 0x21, 0xfa, 0x60, 0xc6, 0xc3, 0x68,
+ 0xca, 0x62, 0x1c, 0x91, 0xa1, 0x83, 0x8a, 0x47, 0x5a, 0x61, 0xc2, 0x4e, 0x19, 0x54, 0x30, 0x2b,
+ 0xc5, 0x02, 0x8a, 0x9e, 0x86, 0x09, 0xcf, 0xb5, 0x49, 0x1d, 0xaf, 0x8b, 0x80, 0x57, 0xae, 0x65,
+ 0x61, 0x5e, 0x8c, 0x43, 0xf8, 0x28, 0xd6, 0x71, 0xe2, 0x0a, 0x30, 0x80, 0x09, 0x5d, 0x87, 0xf9,
+ 0x03, 0x91, 0x04, 0xd4, 0xad, 0x96, 0x63, 0x04, 0xd1, 0xb1, 0x28, 0xb9, 0x27, 0xf0, 0x95, 0x24,
+ 0x02, 0x4e, 0xd7, 0x39, 0xbd, 0x70, 0x96, 0x38, 0xcd, 0x8e, 0x6b, 0x39, 0x41, 0x32, 0x9c, 0xbd,
+ 0x2a, 0xca, 0xb1, 0xc4, 0x18, 0xce, 0xce, 0xfe, 0x7e, 0x02, 0x66, 0xe2, 0x97, 0x1f, 0xc5, 0x75,
+ 0x58, 0x1b, 0x81, 0x0e, 0x8f, 0xe5, 0xad, 0xc3, 0xe3, 0x47, 0xea, 0xf0, 0x53, 0x50, 0x64, 0xaf,
+ 0x40, 0x8b, 0x15, 0x21, 0xb9, 0x7e, 0xc4, 0x8e, 0xe9, 0x63, 0x0e, 0x43, 0x75, 0x3a, 0x08, 0x5b,
+ 0x01, 0x0d, 0x14, 0xf8, 0x9e, 0x38, 0x3e, 0xae, 0x8c, 0xab, 0x83, 0x66, 0x0c, 0x8c, 0x93, 0xf8,
+ 0x83, 0xd8, 0xca, 0x60, 0x0b, 0x34, 0x2f, 0xc1, 0x0c, 0x13, 0x52, 0xbc, 0xfb, 0xbe, 0xd2, 0x14,
+ 0x4e, 0x59, 0xae, 0x6d, 0x6d, 0xaa, 0xd0, 0x65, 0x9c, 0xc0, 0x8e, 0x5b, 0x66, 0x25, 0x1f, 0xcb,
+ 0xdc, 0x3c, 0xa6, 0x65, 0x8a, 0x77, 0xde, 0xa1, 0xc7, 0x3b, 0xef, 0xa7, 0xf3, 0x5c, 0x9e, 0x6a,
+ 0x6f, 0x53, 0x0f, 0xb2, 0x37, 0xf4, 0x06, 0x4c, 0xf9, 0xfc, 0x49, 0x11, 0x7e, 0x64, 0x65, 0x7a,
+ 0x10, 0x75, 0x9e, 0xbb, 0x7f, 0xef, 0xc2, 0x94, 0xae, 0x54, 0xc7, 0x31, 0x62, 0xc3, 0x19, 0xf3,
+ 0x57, 0xa1, 0x1c, 0x32, 0xa2, 0x0d, 0x2d, 0xeb, 0x45, 0x0d, 0x4d, 0x4d, 0x88, 0x11, 0xb9, 0x02,
+ 0x15, 0xb7, 0x43, 0x62, 0xef, 0x81, 0xc9, 0x30, 0xf5, 0x56, 0x08, 0xc0, 0x11, 0x0e, 0xb5, 0x22,
+ 0xce, 0x35, 0xb1, 0x0a, 0xfb, 0x0a, 0x2d, 0x14, 0x42, 0xd4, 0xbe, 0xa6, 0x41, 0xf8, 0xc8, 0x06,
+ 0x5a, 0x86, 0x62, 0xc7, 0xf5, 0x02, 0xbe, 0xfa, 0x35, 0xf9, 0xdc, 0x85, 0xec, 0xf6, 0xe1, 0x1b,
+ 0xf0, 0x5d, 0x2f, 0x88, 0x28, 0xd2, 0x7f, 0x3e, 0xe6, 0x95, 0xa9, 0x9c, 0xa6, 0xdd, 0xf5, 0x03,
+ 0xe2, 0xad, 0x6c, 0x24, 0xe5, 0x5c, 0x0a, 0x01, 0x38, 0xc2, 0xa9, 0xfd, 0x67, 0x01, 0xe6, 0x92,
+ 0xf7, 0x61, 0xa1, 0xb7, 0x60, 0xda, 0xb7, 0x5a, 0x8e, 0xe5, 0xb4, 0x44, 0x7e, 0x5b, 0x1b, 0xf8,
+ 0xf4, 0xad, 0xae, 0xd6, 0xc7, 0x71, 0x72, 0xb9, 0x6d, 0x28, 0x3b, 0x9d, 0x47, 0x97, 0xdf, 0x4b,
+ 0x5f, 0x44, 0xf1, 0x66, 0xce, 0x37, 0x92, 0xfd, 0x6a, 0xdf, 0x44, 0xf1, 0xcb, 0x22, 0x9c, 0xcb,
+ 0xbe, 0xf1, 0xec, 0x94, 0x82, 0xd6, 0xe8, 0xa4, 0xe5, 0x58, 0xcf, 0x93, 0x96, 0x51, 0x3b, 0x8f,
+ 0xe7, 0x74, 0x83, 0x99, 0x6c, 0x80, 0xa3, 0x5d, 0xad, 0x0c, 0xa7, 0x0b, 0x0f, 0x0c, 0xa7, 0x2f,
+ 0x41, 0x49, 0x5c, 0x34, 0x9d, 0x08, 0x53, 0x1b, 0xfc, 0x1a, 0x68, 0x01, 0x55, 0x42, 0x81, 0xd2,
+ 0x91, 0xa1, 0x00, 0x0d, 0x6d, 0xe4, 0xd3, 0xf6, 0x13, 0x83, 0x87, 0x36, 0xf2, 0x65, 0xfb, 0x88,
+ 0x0c, 0x3b, 0x4b, 0xdf, 0xb1, 0xa2, 0xd7, 0x70, 0xa3, 0xb3, 0xf4, 0x1b, 0x2b, 0xb7, 0xf1, 0x2a,
+ 0x16, 0xd0, 0x78, 0xb6, 0xb6, 0x92, 0x4b, 0xb6, 0x36, 0x5b, 0xe7, 0x4e, 0x2a, 0x57, 0x65, 0xc2,
+ 0x7c, 0xaa, 0xcf, 0xfb, 0xce, 0x56, 0x5d, 0x82, 0x92, 0xdf, 0xdd, 0xa1, 0x78, 0x89, 0x6b, 0x58,
+ 0x74, 0x56, 0x8a, 0x05, 0xb4, 0xf6, 0xdd, 0x02, 0xe5, 0x92, 0xb8, 0x1b, 0xef, 0x94, 0xac, 0xea,
+ 0x45, 0x98, 0xe6, 0xf9, 0xa2, 0x57, 0x95, 0x1b, 0x32, 0xca, 0xca, 0x1a, 0x80, 0x0a, 0xc4, 0x71,
+ 0x5c, 0xb4, 0xc2, 0xd4, 0x64, 0xe0, 0x69, 0x21, 0x08, 0x4d, 0xa2, 0x03, 0xb7, 0x20, 0x80, 0x9e,
+ 0x85, 0x49, 0xf6, 0x11, 0xbc, 0xc9, 0x45, 0xe2, 0x94, 0x9d, 0x85, 0xbd, 0x1a, 0x15, 0x63, 0x15,
+ 0x27, 0xbe, 0xfa, 0x5f, 0xcc, 0x65, 0xf5, 0x3f, 0xd5, 0x2b, 0x27, 0xa5, 0x77, 0xdf, 0x2e, 0x83,
+ 0x7c, 0x3a, 0x0c, 0x99, 0xa9, 0x07, 0xdc, 0x3e, 0x3b, 0xf0, 0xfa, 0x4a, 0x28, 0x0a, 0x4f, 0x36,
+ 0x65, 0x0c, 0x49, 0x2f, 0x03, 0x12, 0x2f, 0x86, 0x89, 0xa0, 0x9a, 0x1d, 0x62, 0xe3, 0x8a, 0x2b,
+ 0x17, 0x92, 0xf4, 0x14, 0x06, 0xce, 0xa8, 0x85, 0x5e, 0x66, 0xcf, 0x15, 0x06, 0x86, 0xe5, 0x48,
+ 0xcf, 0xfb, 0x64, 0x8f, 0x23, 0x92, 0x1c, 0x49, 0x3e, 0x3c, 0xc8, 0xff, 0xe2, 0xa8, 0x3a, 0xba,
+ 0x0a, 0x13, 0x07, 0xae, 0xdd, 0x6d, 0xcb, 0x57, 0xd0, 0x17, 0xb2, 0x28, 0xbd, 0xc2, 0x50, 0x94,
+ 0x23, 0x3d, 0xbc, 0x0a, 0x0e, 0xeb, 0x22, 0x02, 0xb3, 0x6c, 0x07, 0x8e, 0x15, 0x1c, 0x0a, 0x03,
+ 0x10, 0x43, 0xef, 0xa5, 0x2c, 0x72, 0x1b, 0x6e, 0x53, 0x8f, 0x63, 0xf3, 0xcd, 0x18, 0x89, 0x42,
+ 0x9c, 0xa4, 0x89, 0xae, 0x41, 0xd9, 0xd8, 0xd9, 0xb1, 0x1c, 0x2b, 0x38, 0x14, 0xab, 0xcd, 0x4f,
+ 0x64, 0xd1, 0xaf, 0x0b, 0x1c, 0x71, 0x95, 0x8a, 0xf8, 0x87, 0x65, 0x5d, 0x74, 0x1b, 0x26, 0x03,
+ 0xd7, 0x16, 0x71, 0xa9, 0x2f, 0x52, 0x0d, 0xe7, 0xb3, 0x48, 0x6d, 0x49, 0xb4, 0x68, 0x05, 0x33,
+ 0x2a, 0xf3, 0xb1, 0x4a, 0x07, 0xfd, 0x9e, 0x06, 0x53, 0x8e, 0xdb, 0x24, 0xa1, 0xe9, 0x89, 0x15,
+ 0xb5, 0xd7, 0x73, 0x7a, 0xf2, 0x6e, 0x71, 0x5d, 0xa1, 0xcd, 0x2d, 0x44, 0x5e, 0xb1, 0xa1, 0x82,
+ 0x70, 0x4c, 0x08, 0xe4, 0xc0, 0x9c, 0xd5, 0x36, 0x5a, 0x64, 0xa3, 0x6b, 0x8b, 0x1d, 0x84, 0xbe,
+ 0x18, 0x3c, 0x32, 0x0f, 0xd6, 0xae, 0xba, 0xa6, 0x61, 0xf3, 0x27, 0x23, 0x31, 0xd9, 0x21, 0x1e,
+ 0x7b, 0xb9, 0x52, 0x6e, 0x06, 0x59, 0x49, 0x50, 0xc2, 0x29, 0xda, 0xe8, 0x3a, 0xcc, 0x77, 0x3c,
+ 0xcb, 0x65, 0xfd, 0x66, 0x1b, 0x3e, 0x7f, 0x32, 0x10, 0xe2, 0xa7, 0x29, 0x37, 0x92, 0x08, 0x38,
+ 0x5d, 0x87, 0xdf, 0x00, 0xc0, 0x0b, 0xd9, 0x5c, 0xae, 0x18, 0xde, 0x00, 0xc0, 0xcb, 0xb0, 0x84,
+ 0x2e, 0x7c, 0x1e, 0xe6, 0x53, 0x6d, 0x33, 0x90, 0x43, 0xf8, 0x23, 0x0d, 0x92, 0x29, 0x6d, 0x3a,
+ 0x6f, 0x68, 0x5a, 0x1e, 0x23, 0x78, 0x98, 0x4c, 0xc3, 0x2f, 0x87, 0x00, 0x1c, 0xe1, 0xa0, 0x8b,
+ 0x50, 0xe8, 0x18, 0xc1, 0x6e, 0x72, 0x27, 0x1e, 0x25, 0x89, 0x19, 0x84, 0x3d, 0x51, 0x4e, 0xff,
+ 0x91, 0x16, 0xb9, 0xd3, 0x11, 0xd3, 0xa0, 0xe8, 0x89, 0x72, 0x09, 0xc1, 0x0a, 0x56, 0xed, 0x9f,
+ 0x8b, 0x30, 0x13, 0x1f, 0x5b, 0x62, 0x93, 0x4d, 0xed, 0x81, 0x93, 0xcd, 0x4b, 0x50, 0x6a, 0x93,
+ 0x60, 0xd7, 0x6d, 0x26, 0xc7, 0xc9, 0x35, 0x56, 0x8a, 0x05, 0x94, 0x89, 0xef, 0x7a, 0x81, 0x10,
+ 0x2b, 0x12, 0xdf, 0xf5, 0x02, 0xcc, 0x20, 0xe1, 0x46, 0xc2, 0x42, 0x8f, 0x8d, 0x84, 0x2d, 0x98,
+ 0xe3, 0xf7, 0x72, 0x2e, 0x11, 0x2f, 0x38, 0xf6, 0x06, 0x58, 0x3d, 0x41, 0x02, 0xa7, 0x88, 0xa2,
+ 0x26, 0xf5, 0x36, 0xb4, 0x8c, 0x55, 0x3e, 0xe6, 0xe9, 0x7a, 0x3d, 0x4e, 0x01, 0x27, 0x49, 0x8e,
+ 0x22, 0x1b, 0x19, 0xef, 0xc7, 0x63, 0x5f, 0xaf, 0x56, 0xce, 0xeb, 0x7a, 0xb5, 0x17, 0x60, 0xa6,
+ 0x6d, 0xdc, 0xd9, 0x30, 0x0e, 0x6d, 0xd7, 0x68, 0xea, 0xd6, 0x5d, 0x22, 0x0e, 0x80, 0xb2, 0xa7,
+ 0xe4, 0xd7, 0x62, 0x10, 0x9c, 0xc0, 0x1c, 0x6e, 0x00, 0xfe, 0xe3, 0x31, 0x40, 0xe9, 0xf7, 0x06,
+ 0xd0, 0x07, 0x1a, 0xcc, 0xbc, 0x13, 0x6b, 0xa3, 0xd1, 0x04, 0x67, 0x32, 0xed, 0x15, 0x2f, 0xc7,
+ 0x09, 0xe6, 0xca, 0x04, 0x67, 0xec, 0xe4, 0x26, 0x92, 0x8d, 0xc5, 0x1f, 0xff, 0xe2, 0xfc, 0x23,
+ 0x3f, 0xf9, 0xc5, 0xf9, 0x47, 0x3e, 0xfa, 0xc5, 0xf9, 0x47, 0xbe, 0x76, 0xff, 0xbc, 0xf6, 0xe3,
+ 0xfb, 0xe7, 0xb5, 0x9f, 0xdc, 0x3f, 0xaf, 0x7d, 0x74, 0xff, 0xbc, 0xf6, 0xf3, 0xfb, 0xe7, 0xb5,
+ 0xef, 0xfe, 0xdb, 0xf9, 0x47, 0xbe, 0x50, 0x0e, 0xa9, 0xfe, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xd3, 0xbe, 0x2f, 0x43, 0x9f, 0x9f, 0x00, 0x00,
}
func (m *AMQPConsumeConfig) Marshal() (dAtA []byte, err error) {
@@ -3783,6 +3821,37 @@ func (m *EventSourceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if len(m.SFTP) > 0 {
+ keysForSFTP := make([]string, 0, len(m.SFTP))
+ for k := range m.SFTP {
+ keysForSFTP = append(keysForSFTP, string(k))
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForSFTP)
+ for iNdEx := len(keysForSFTP) - 1; iNdEx >= 0; iNdEx-- {
+ v := m.SFTP[string(keysForSFTP[iNdEx])]
+ baseI := i
+ {
+ size, err := (&v).MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ i -= len(keysForSFTP[iNdEx])
+ copy(dAtA[i:], keysForSFTP[iNdEx])
+ i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSFTP[iNdEx])))
+ i--
+ dAtA[i] = 0xa
+ i = encodeVarintGenerated(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0x2
+ i--
+ dAtA[i] = 0x92
+ }
+ }
if len(m.AzureQueueStorage) > 0 {
keysForAzureQueueStorage := make([]string, 0, len(m.AzureQueueStorage))
for k := range m.AzureQueueStorage {
@@ -6749,6 +6818,121 @@ func (m *ResourceFilter) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *SFTPEventSource) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SFTPEventSource) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SFTPEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ i -= len(m.PollIntervalDuration)
+ copy(dAtA[i:], m.PollIntervalDuration)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.PollIntervalDuration)))
+ i--
+ dAtA[i] = 0x42
+ if m.Filter != nil {
+ {
+ size, err := m.Filter.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
+ if len(m.Metadata) > 0 {
+ keysForMetadata := make([]string, 0, len(m.Metadata))
+ for k := range m.Metadata {
+ keysForMetadata = append(keysForMetadata, string(k))
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForMetadata)
+ for iNdEx := len(keysForMetadata) - 1; iNdEx >= 0; iNdEx-- {
+ v := m.Metadata[string(keysForMetadata[iNdEx])]
+ baseI := i
+ i -= len(v)
+ copy(dAtA[i:], v)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(v)))
+ i--
+ dAtA[i] = 0x12
+ i -= len(keysForMetadata[iNdEx])
+ copy(dAtA[i:], keysForMetadata[iNdEx])
+ i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMetadata[iNdEx])))
+ i--
+ dAtA[i] = 0xa
+ i = encodeVarintGenerated(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0x32
+ }
+ }
+ if m.Address != nil {
+ {
+ size, err := m.Address.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ if m.Password != nil {
+ {
+ size, err := m.Password.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.Username != nil {
+ {
+ size, err := m.Username.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ {
+ size, err := m.WatchPathConfig.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ i -= len(m.EventType)
+ copy(dAtA[i:], m.EventType)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.EventType)))
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
func (m *SNSEventSource) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -8602,6 +8786,15 @@ func (m *EventSourceSpec) Size() (n int) {
n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize))
}
}
+ if len(m.SFTP) > 0 {
+ for k, v := range m.SFTP {
+ _ = k
+ _ = v
+ l = v.Size()
+ mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l))
+ n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize))
+ }
+ }
return n
}
@@ -9326,6 +9519,45 @@ func (m *ResourceFilter) Size() (n int) {
return n
}
+func (m *SFTPEventSource) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.EventType)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = m.WatchPathConfig.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ if m.Username != nil {
+ l = m.Username.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ if m.Password != nil {
+ l = m.Password.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ if m.Address != nil {
+ l = m.Address.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ if len(m.Metadata) > 0 {
+ for k, v := range m.Metadata {
+ _ = k
+ _ = v
+ mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v)))
+ n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
+ }
+ }
+ if m.Filter != nil {
+ l = m.Filter.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ l = len(m.PollIntervalDuration)
+ n += 1 + l + sovGenerated(uint64(l))
+ return n
+}
+
func (m *SNSEventSource) Size() (n int) {
if m == nil {
return 0
@@ -10401,6 +10633,16 @@ func (this *EventSourceSpec) String() string {
mapStringForAzureQueueStorage += fmt.Sprintf("%v: %v,", k, this.AzureQueueStorage[k])
}
mapStringForAzureQueueStorage += "}"
+ keysForSFTP := make([]string, 0, len(this.SFTP))
+ for k := range this.SFTP {
+ keysForSFTP = append(keysForSFTP, k)
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForSFTP)
+ mapStringForSFTP := "map[string]SFTPEventSource{"
+ for _, k := range keysForSFTP {
+ mapStringForSFTP += fmt.Sprintf("%v: %v,", k, this.SFTP[k])
+ }
+ mapStringForSFTP += "}"
s := strings.Join([]string{`&EventSourceSpec{`,
`EventBusName:` + fmt.Sprintf("%v", this.EventBusName) + `,`,
`Template:` + strings.Replace(this.Template.String(), "Template", "Template", 1) + `,`,
@@ -10435,6 +10677,7 @@ func (this *EventSourceSpec) String() string {
`RedisStream:` + mapStringForRedisStream + `,`,
`AzureServiceBus:` + mapStringForAzureServiceBus + `,`,
`AzureQueueStorage:` + mapStringForAzureQueueStorage + `,`,
+ `SFTP:` + mapStringForSFTP + `,`,
`}`,
}, "")
return s
@@ -10943,6 +11186,33 @@ func (this *ResourceFilter) String() string {
}, "")
return s
}
+func (this *SFTPEventSource) String() string {
+ if this == nil {
+ return "nil"
+ }
+ keysForMetadata := make([]string, 0, len(this.Metadata))
+ for k := range this.Metadata {
+ keysForMetadata = append(keysForMetadata, k)
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForMetadata)
+ mapStringForMetadata := "map[string]string{"
+ for _, k := range keysForMetadata {
+ mapStringForMetadata += fmt.Sprintf("%v: %v,", k, this.Metadata[k])
+ }
+ mapStringForMetadata += "}"
+ s := strings.Join([]string{`&SFTPEventSource{`,
+ `EventType:` + fmt.Sprintf("%v", this.EventType) + `,`,
+ `WatchPathConfig:` + strings.Replace(strings.Replace(this.WatchPathConfig.String(), "WatchPathConfig", "WatchPathConfig", 1), `&`, ``, 1) + `,`,
+ `Username:` + strings.Replace(fmt.Sprintf("%v", this.Username), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`,
+ `Password:` + strings.Replace(fmt.Sprintf("%v", this.Password), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`,
+ `Address:` + strings.Replace(fmt.Sprintf("%v", this.Address), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`,
+ `Metadata:` + mapStringForMetadata + `,`,
+ `Filter:` + strings.Replace(this.Filter.String(), "EventSourceFilter", "EventSourceFilter", 1) + `,`,
+ `PollIntervalDuration:` + fmt.Sprintf("%v", this.PollIntervalDuration) + `,`,
+ `}`,
+ }, "")
+ return s
+}
func (this *SNSEventSource) String() string {
if this == nil {
return "nil"
@@ -20479,14 +20749,143 @@ func (m *EventSourceSpec) Unmarshal(dAtA []byte) error {
}
m.AzureQueueStorage[mapkey] = *mapvalue
iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipGenerated(dAtA[iNdEx:])
- if err != nil {
- return err
+ case 34:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SFTP", wireType)
}
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return ErrInvalidLengthGenerated
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SFTP == nil {
+ m.SFTP = make(map[string]SFTPEventSource)
+ }
+ var mapkey string
+ mapvalue := &SFTPEventSource{}
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var mapmsglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ mapmsglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if mapmsglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postmsgIndex := iNdEx + mapmsglen
+ if postmsgIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postmsgIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = &SFTPEventSource{}
+ if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
+ return err
+ }
+ iNdEx = postmsgIndex
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.SFTP[mapkey] = *mapvalue
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthGenerated
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
@@ -27901,6 +28300,424 @@ func (m *ResourceFilter) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *SFTPEventSource) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SFTPEventSource: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SFTPEventSource: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field EventType", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.EventType = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WatchPathConfig", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.WatchPathConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Username == nil {
+ m.Username = &v1.SecretKeySelector{}
+ }
+ if err := m.Username.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Password == nil {
+ m.Password = &v1.SecretKeySelector{}
+ }
+ if err := m.Password.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Address == nil {
+ m.Address = &v1.SecretKeySelector{}
+ }
+ if err := m.Address.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Metadata == nil {
+ m.Metadata = make(map[string]string)
+ }
+ var mapkey string
+ var mapvalue string
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var stringLenmapvalue uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapvalue |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapvalue := int(stringLenmapvalue)
+ if intStringLenmapvalue < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postStringIndexmapvalue := iNdEx + intStringLenmapvalue
+ if postStringIndexmapvalue < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postStringIndexmapvalue > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
+ iNdEx = postStringIndexmapvalue
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.Metadata[mapkey] = mapvalue
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Filter == nil {
+ m.Filter = &EventSourceFilter{}
+ }
+ if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PollIntervalDuration", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PollIntervalDuration = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *SNSEventSource) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pkg/apis/eventsource/v1alpha1/generated.proto b/pkg/apis/eventsource/v1alpha1/generated.proto
index 0b622edc6f..7a52967e93 100644
--- a/pkg/apis/eventsource/v1alpha1/generated.proto
+++ b/pkg/apis/eventsource/v1alpha1/generated.proto
@@ -640,6 +640,9 @@ message EventSourceSpec {
// AzureQueueStorage event source
map azureQueueStorage = 33;
+
+ // SFTP event sources
+ map sftp = 34;
}
// EventSourceStatus holds the status of the event-source resource
@@ -1340,6 +1343,38 @@ message ResourceFilter {
optional bool afterStart = 5;
}
+// SFTPEventSource describes an event-source for sftp related events.
+message SFTPEventSource {
+ // Type of file operations to watch
+ // Refer https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go for more information
+ optional string eventType = 1;
+
+ // WatchPathConfig contains configuration about the file path to watch
+ optional WatchPathConfig watchPathConfig = 2;
+
+ // Username required for authentication if any.
+ optional k8s.io.api.core.v1.SecretKeySelector username = 3;
+
+ // Password required for authentication if any.
+ optional k8s.io.api.core.v1.SecretKeySelector password = 4;
+
+ // Address sftp address.
+ optional k8s.io.api.core.v1.SecretKeySelector address = 5;
+
+ // Metadata holds the user defined metadata which will passed along the event payload.
+ // +optional
+ map metadata = 6;
+
+ // Filter
+ // +optional
+ optional EventSourceFilter filter = 7;
+
+ // PollIntervalDuration the interval at which to poll the SFTP server
+ // defaults to 10 seconds
+ // +optional
+ optional string pollIntervalDuration = 8;
+}
+
// SNSEventSource refers to event-source for AWS SNS related events
message SNSEventSource {
// Webhook configuration for http server
diff --git a/pkg/apis/eventsource/v1alpha1/openapi_generated.go b/pkg/apis/eventsource/v1alpha1/openapi_generated.go
index b3fef4677b..1fab206d0b 100644
--- a/pkg/apis/eventsource/v1alpha1/openapi_generated.go
+++ b/pkg/apis/eventsource/v1alpha1/openapi_generated.go
@@ -73,6 +73,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource": schema_pkg_apis_eventsource_v1alpha1_RedisStreamEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource": schema_pkg_apis_eventsource_v1alpha1_ResourceEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceFilter": schema_pkg_apis_eventsource_v1alpha1_ResourceFilter(ref),
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource": schema_pkg_apis_eventsource_v1alpha1_SFTPEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource": schema_pkg_apis_eventsource_v1alpha1_SNSEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SQSEventSource": schema_pkg_apis_eventsource_v1alpha1_SQSEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Selector": schema_pkg_apis_eventsource_v1alpha1_Selector(ref),
@@ -1785,11 +1786,26 @@ func schema_pkg_apis_eventsource_v1alpha1_EventSourceSpec(ref common.ReferenceCa
},
},
},
+ "sftp": {
+ SchemaProps: spec.SchemaProps{
+ Description: "SFTP event sources",
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Default: map[string]interface{}{},
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource"),
+ },
+ },
+ },
+ },
+ },
},
},
},
Dependencies: []string{
- "github.com/argoproj/argo-events/pkg/apis/common.S3Artifact", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AMQPEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureEventsHubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureQueueStorageEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureServiceBusEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketServerEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CalendarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EmitterEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.FileEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GenericEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GithubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GitlabEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.HDFSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.KafkaEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.MQTTEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NATSEventsSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NSQEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PubSubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PulsarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SQSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Service", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SlackEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StorageGridEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StripeEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Template", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WebhookEventSource"},
+ "github.com/argoproj/argo-events/pkg/apis/common.S3Artifact", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AMQPEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureEventsHubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureQueueStorageEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureServiceBusEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.BitbucketServerEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CalendarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EmitterEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.FileEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GenericEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GithubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.GitlabEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.HDFSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.KafkaEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.MQTTEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NATSEventsSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.NSQEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PubSubEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.PulsarEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.RedisStreamEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ResourceEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SFTPEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SNSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SQSEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Service", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.SlackEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StorageGridEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.StripeEventSource", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.Template", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WebhookEventSource"},
}
}
@@ -3478,6 +3494,85 @@ func schema_pkg_apis_eventsource_v1alpha1_ResourceFilter(ref common.ReferenceCal
}
}
+func schema_pkg_apis_eventsource_v1alpha1_SFTPEventSource(ref common.ReferenceCallback) common.OpenAPIDefinition {
+ return common.OpenAPIDefinition{
+ Schema: spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Description: "SFTPEventSource describes an event-source for sftp related events.",
+ Type: []string{"object"},
+ Properties: map[string]spec.Schema{
+ "eventType": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Type of file operations to watch Refer https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go for more information",
+ Default: "",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ "watchPathConfig": {
+ SchemaProps: spec.SchemaProps{
+ Description: "WatchPathConfig contains configuration about the file path to watch",
+ Default: map[string]interface{}{},
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WatchPathConfig"),
+ },
+ },
+ "username": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Username required for authentication if any.",
+ Ref: ref("k8s.io/api/core/v1.SecretKeySelector"),
+ },
+ },
+ "password": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Password required for authentication if any.",
+ Ref: ref("k8s.io/api/core/v1.SecretKeySelector"),
+ },
+ },
+ "address": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Address sftp address.",
+ Ref: ref("k8s.io/api/core/v1.SecretKeySelector"),
+ },
+ },
+ "metadata": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Metadata holds the user defined metadata which will passed along the event payload.",
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Default: "",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ },
+ },
+ },
+ "filter": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Filter",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventSourceFilter"),
+ },
+ },
+ "pollIntervalDuration": {
+ SchemaProps: spec.SchemaProps{
+ Description: "PollIntervalDuration the interval at which to poll the SFTP server defaults to 10 seconds",
+ Default: "",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ },
+ Required: []string{"eventType", "watchPathConfig"},
+ },
+ },
+ Dependencies: []string{
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventSourceFilter", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.WatchPathConfig", "k8s.io/api/core/v1.SecretKeySelector"},
+ }
+}
+
func schema_pkg_apis_eventsource_v1alpha1_SNSEventSource(ref common.ReferenceCallback) common.OpenAPIDefinition {
return common.OpenAPIDefinition{
Schema: spec.Schema{
diff --git a/pkg/apis/eventsource/v1alpha1/types.go b/pkg/apis/eventsource/v1alpha1/types.go
index 390d4676eb..d27fe84fea 100644
--- a/pkg/apis/eventsource/v1alpha1/types.go
+++ b/pkg/apis/eventsource/v1alpha1/types.go
@@ -120,6 +120,8 @@ type EventSourceSpec struct {
AzureServiceBus map[string]AzureServiceBusEventSource `json:"azureServiceBus,omitempty" protobuf:"bytes,32,rep,name=azureServiceBus"`
// AzureQueueStorage event source
AzureQueueStorage map[string]AzureQueueStorageEventSource `json:"azureQueueStorage,omitempty" protobuf:"bytes,33,rep,name=azureQueueStorage"`
+ // SFTP event sources
+ SFTP map[string]SFTPEventSource `json:"sftp,omitempty" protobuf:"bytes,34,rep,name=sftp"`
}
func (e EventSourceSpec) GetReplicas() int32 {
@@ -288,6 +290,31 @@ type FileEventSource struct {
Filter *EventSourceFilter `json:"filter,omitempty" protobuf:"bytes,5,opt,name=filter"`
}
+// SFTPEventSource describes an event-source for sftp related events.
+type SFTPEventSource struct {
+ // Type of file operations to watch
+ // Refer https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go for more information
+ EventType string `json:"eventType" protobuf:"bytes,1,opt,name=eventType"`
+ // WatchPathConfig contains configuration about the file path to watch
+ WatchPathConfig WatchPathConfig `json:"watchPathConfig" protobuf:"bytes,2,opt,name=watchPathConfig"`
+ // Username required for authentication if any.
+ Username *corev1.SecretKeySelector `json:"username,omitempty" protobuf:"bytes,3,opt,name=username"`
+ // Password required for authentication if any.
+ Password *corev1.SecretKeySelector `json:"password,omitempty" protobuf:"bytes,4,opt,name=password"`
+ // Address sftp address.
+ Address *corev1.SecretKeySelector `json:"address,omitempty" protobuf:"bytes,5,opt,name=address"`
+ // Metadata holds the user defined metadata which will passed along the event payload.
+ // +optional
+ Metadata map[string]string `json:"metadata,omitempty" protobuf:"bytes,6,rep,name=metadata"`
+ // Filter
+ // +optional
+ Filter *EventSourceFilter `json:"filter,omitempty" protobuf:"bytes,7,opt,name=filter"`
+ // PollIntervalDuration the interval at which to poll the SFTP server
+ // defaults to 10 seconds
+ // +optional
+ PollIntervalDuration string `json:"pollIntervalDuration" protobuf:"varint,8,opt,name=pollIntervalDuration"`
+}
+
// ResourceEventType is the type of event for the K8s resource mutation
type ResourceEventType string
diff --git a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
index 62fc9a79b2..11274de1fc 100644
--- a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
@@ -900,6 +900,13 @@ func (in *EventSourceSpec) DeepCopyInto(out *EventSourceSpec) {
(*out)[key] = *val.DeepCopy()
}
}
+ if in.SFTP != nil {
+ in, out := &in.SFTP, &out.SFTP
+ *out = make(map[string]SFTPEventSource, len(*in))
+ for key, val := range *in {
+ (*out)[key] = *val.DeepCopy()
+ }
+ }
return
}
@@ -1675,6 +1682,50 @@ func (in *ResourceFilter) DeepCopy() *ResourceFilter {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *SFTPEventSource) DeepCopyInto(out *SFTPEventSource) {
+ *out = *in
+ out.WatchPathConfig = in.WatchPathConfig
+ if in.Username != nil {
+ in, out := &in.Username, &out.Username
+ *out = new(v1.SecretKeySelector)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Password != nil {
+ in, out := &in.Password, &out.Password
+ *out = new(v1.SecretKeySelector)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Address != nil {
+ in, out := &in.Address, &out.Address
+ *out = new(v1.SecretKeySelector)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Metadata != nil {
+ in, out := &in.Metadata, &out.Metadata
+ *out = make(map[string]string, len(*in))
+ for key, val := range *in {
+ (*out)[key] = val
+ }
+ }
+ if in.Filter != nil {
+ in, out := &in.Filter, &out.Filter
+ *out = new(EventSourceFilter)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SFTPEventSource.
+func (in *SFTPEventSource) DeepCopy() *SFTPEventSource {
+ if in == nil {
+ return nil
+ }
+ out := new(SFTPEventSource)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *SNSEventSource) DeepCopyInto(out *SNSEventSource) {
*out = *in