This is an automated email from the ASF dual-hosted git repository.
gurwls223 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark-connect-go.git
The following commit(s) were added to refs/heads/master by this push:
new aa4cef7 [SPARK-43895] Basic Repository Layout
aa4cef7 is described below
commit aa4cef71a43192b70120ce075a8e2e9076207f09
Author: Martin Grund <[email protected]>
AuthorDate: Thu Jun 1 09:10:21 2023 +0900
[SPARK-43895] Basic Repository Layout
## Proposed Changes
In order to prepare the implementation of the Go client. This patch
prepares the repository layout.
* Adds the git submodule for the Spark repository, currently pointing at
`master` for the reference to the proto files.
* Adds the Makefile and the necessary outline for the build system
* Adds the `buf` generation logic for the protos.
## Testing
`make gen && make check && make test`
Closes #3 from grundprinzip/SPARK-43895.
Lead-authored-by: Martin Grund <[email protected]>
Co-authored-by: Hyukjin Kwon <[email protected]>
Signed-off-by: Hyukjin Kwon <[email protected]>
---
.gitignore | 23 +++++++++++++
.gitmodules | 3 ++
Makefile | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
README.md | 9 +++++
buf.gen.yaml | 23 +++++++++++++
buf.work.yaml | 19 +++++++++++
go.mod | 53 +++++++++++++++++++++++++++++
go.sum | 61 ++++++++++++++++++++++++++++++++++
spark | 1 +
9 files changed, 297 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0bca2cf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,23 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# All generated files
+internal/generated
+internal/generated.out
+
+# Ignore Coverage Files
+coverage*
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..59db423
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "spark"]
+ path = spark
+ url = https://github.com/apache/spark.git
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a9829da
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,105 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FIRST_GOPATH := $(firstword $(subst :, ,$(GOPATH)))
+PKGS := $(shell go list ./... | grep -v /tests | grep -v
/xcpb | grep -v /gpb)
+GOFILES_NOVENDOR := $(shell find . -name vendor -prune -o -type f
-name '*.go' -not -name '*.pb.go' -print)
+GOFILES_BUILD := $(shell find . -type f -name '*.go' -not -name
'*_test.go')
+PROTOFILES := $(shell find . -name vendor -prune -o -type f
-name '*.proto' -print)
+
+ALLGOFILES := $(shell find
. -type f -name '*.go')
+DATE := $(shell date -u -d "@$(SOURCE_DATE_EPOCH)"
'+%FT%T%z' 2>/dev/null || date -u '+%FT%T%z')
+
+BUILDFLAGS_NOPIE :=
+#BUILDFLAGS_NOPIE := -trimpath -ldflags="-s -w -X
main.version=$(GOPASS_VERSION) -X main.commit=$(GOPASS_REVISION) -X
main.date=$(DATE)" -gcflags="-trimpath=$(GOPATH)"
-asmflags="-trimpath=$(GOPATH)"
+BUILDFLAGS ?= $(BUILDFLAGS_NOPIE) -buildmode=pie
+TESTFLAGS ?=
+PWD := $(shell pwd)
+PREFIX ?= $(GOPATH)
+BINDIR ?= $(PREFIX)/bin
+GO := GO111MODULE=on go
+GOOS ?= $(shell go version | cut -d' ' -f4 | cut -d'/'
-f1)
+GOARCH ?= $(shell go version | cut -d' ' -f4 | cut -d'/'
-f2)
+TAGS ?= netgo
+SHELL = bash
+
+BINARIES :=
+
+# Define the location of SPARK_HOME because we need that to depend on the
build paths
+MAKEFILE_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
+
+PROTO_SRC = $(shell find internal/generated -type f -name *.proto )
+
+
+OK := $(shell tput setaf 6; echo ' [OK]'; tput sgr0;)
+
+all: build
+
+build: $(BUILD_OUTPUT) $(BINARIES) internal/generated.out
+
+internal/generated.out:
+ @echo -n ">> BUILD, output = $@"
+ buf generate --debug -vvv
+ @touch internal/generated.out
+ @printf '%s\n' '$(OK)'
+
+gen: internal/generated.out
+
+$(GOFILES_BUILD): gen
+
+$(BUILD_OUTPUT): $(GOFILES_BUILD)
+ @echo -n ">> BUILD, output = $@"
+ @$(GO) build -o $@ $(BUILDFLAGS)
+ @printf '%s\n' '$(OK)'
+
+check: $(ALLGOFILES) | gen
+ @echo -n ">> BUILD, output = $@"
+ @$(GO) build $(BUILDFLAGS) $^
+ @printf '%s\n' '$(OK)'
+
+lint: $(BUILD_OUTPUT)
+ @golangci-lint run
+
+fmt:
+ @gofumpt -extra -w $(ALLGOFILES)
+
+test: $(BUILD_OUTPUT)
+ @echo ">> TEST, \"verbose\""
+ @$(foreach pkg, $(PKGS),\
+ @echo -n " ";\
+ $(GO) test -v -run '(Test|Example)' $(BUILDFLAGS) $(TESTFLAGS)
$(pkg) || exit 1)
+
+fulltest: $(BUILD_OUTPUT)
+ @echo ">> TEST, \"coverage\""
+ @echo "mode: atomic" > coverage-all.out
+ @$(foreach pkg, $(PKGS),\
+ echo -n " ";\
+ go test -run '(Test|Example)' $(BUILDFLAGS) $(TESTFLAGS)
-coverprofile=coverage.out -covermode=atomic $(pkg) || exit 1;\
+ tail -n +2 coverage.out >> coverage-all.out;)
+ @$(GO) tool cover -html=coverage-all.out -o coverage-all.html
+
+
+clean:
+ @echo -n ">> CLEAN"
+ @$(GO) clean -i ./...
+ @rm -rf ./internal/generated
+ @rm -f ./internal/generated.out
+ @rm -f ./coverage-all.html
+ @rm -f ./coverage-all.out
+ @rm -f ./coverage.out
+ @find . -type f -name "coverage.out" -delete
+ @printf '%s\n' '$(OK)'
diff --git a/README.md b/README.md
index beaeaeb..b2be4d3 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,15 @@ not be used in any production setting. In addition, the PMC
of the Apache Spark
project reserves the right to withdraw and abandon the development of this
project
if it is not sustainable.
+### Getting started
+
+```
+git clone https://github.com/apache/spark-connect-go.git
+git submodule init --depth 1
+
+make gen && make check && make test
+```
+
## Contributing
Please review the [Contribution to Spark
guide](https://spark.apache.org/contributing.html)
diff --git a/buf.gen.yaml b/buf.gen.yaml
new file mode 100644
index 0000000..3f4d4bf
--- /dev/null
+++ b/buf.gen.yaml
@@ -0,0 +1,23 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version: v1
+plugins:
+ - plugin: buf.build/protocolbuffers/go:v1.30.0
+ out: .
+ - plugin: buf.build/grpc/go:v1.3.0
+ out: .
+
diff --git a/buf.work.yaml b/buf.work.yaml
new file mode 100644
index 0000000..d4ea6f3
--- /dev/null
+++ b/buf.work.yaml
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version: v1
+directories:
+ - spark/connector/connect/common/src/main/protobuf
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..f04a331
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,53 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+module github.com/apache/spark-connect-go/v_3_4
+
+go 1.19
+
+require (
+ github.com/apache/arrow/go/v12 v12.0.0
+ github.com/google/uuid v1.3.0
+ github.com/stretchr/testify v1.8.0
+ google.golang.org/grpc v1.54.0
+ google.golang.org/protobuf v1.30.0
+)
+
+require (
+ github.com/andybalholm/brotli v1.0.4 // indirect
+ github.com/apache/thrift v0.16.0 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/goccy/go-json v0.9.11 // indirect
+ github.com/golang/protobuf v1.5.2 // indirect
+ github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/flatbuffers v2.0.8+incompatible // indirect
+ github.com/klauspost/asmfmt v1.3.2 // indirect
+ github.com/klauspost/compress v1.15.9 // indirect
+ github.com/klauspost/cpuid/v2 v2.0.9 // indirect
+ github.com/kr/text v0.2.0 // indirect
+ github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 //
indirect
+ github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
+ github.com/pierrec/lz4/v4 v4.1.15 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/zeebo/xxh3 v1.0.2 // indirect
+ golang.org/x/mod v0.8.0 // indirect
+ golang.org/x/net v0.8.0 // indirect
+ golang.org/x/sys v0.6.0 // indirect
+ golang.org/x/text v0.8.0 // indirect
+ golang.org/x/tools v0.6.0 // indirect
+ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
+ google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f //
indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..7fb61d6
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,61 @@
+github.com/andybalholm/brotli v1.0.4/go.mod
h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/apache/arrow/go/v12 v12.0.0/go.mod
h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg=
+github.com/apache/thrift v0.16.0/go.mod
h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
+github.com/creack/pty v1.1.9/go.mod
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/goccy/go-json v0.9.11/go.mod
h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/golang/mock v1.5.0/go.mod
h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
+github.com/golang/protobuf v1.5.0/go.mod
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2
h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.4/go.mod
h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/flatbuffers v2.0.8+incompatible/go.mod
h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/go-cmp v0.5.5/go.mod
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.3.0/go.mod
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/klauspost/asmfmt v1.3.2/go.mod
h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
+github.com/klauspost/compress v1.15.9/go.mod
h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod
h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/kr/text v0.2.0/go.mod
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod
h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
+github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod
h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
+github.com/pierrec/lz4/v4 v4.1.15/go.mod
h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pmezard/go-difflib v1.0.0/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod
h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/testify v1.7.1/go.mod
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod
h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/zeebo/xxh3 v1.0.2/go.mod
h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.6.0/go.mod
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod
h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f
h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod
h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
+google.golang.org/grpc v1.54.0/go.mod
h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.30.0
h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
+google.golang.org/protobuf v1.30.0/go.mod
h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/spark b/spark
new file mode 160000
index 0000000..8f2afb8
--- /dev/null
+++ b/spark
@@ -0,0 +1 @@
+Subproject commit 8f2afb88d42af04f36c84972d9ebcb5dabc91260
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]