Unverified Commit b8cf32d2 authored by Silvano Cerza's avatar Silvano Cerza Committed by GitHub

Add archive command to zip a sketch and its files (#931)

parent e6f19474
// This file is part of arduino-cli.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to license@arduino.cc.
package sketch
import (
"context"
"os"
"github.com/arduino/arduino-cli/cli/errorcodes"
"github.com/arduino/arduino-cli/cli/feedback"
"github.com/arduino/arduino-cli/commands/sketch"
rpc "github.com/arduino/arduino-cli/rpc/commands"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
var includeBuildDir bool
// initArchiveCommand creates a new `archive` command
func initArchiveCommand() *cobra.Command {
command := &cobra.Command{
Use: "archive <sketchPath> <archivePath>",
Short: "Creates a zip file containing all sketch files.",
Long: "Creates a zip file containing all sketch files.",
Example: "" +
" " + os.Args[0] + " archive\n" +
" " + os.Args[0] + " archive .\n" +
" " + os.Args[0] + " archive . MySketchArchive.zip\n" +
" " + os.Args[0] + " archive /home/user/Arduino/MySketch\n" +
" " + os.Args[0] + " archive /home/user/Arduino/MySketch /home/user/MySketchArchive.zip",
Args: cobra.MaximumNArgs(2),
Run: runArchiveCommand,
}
command.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, "Includes build directory in the archive.")
return command
}
func runArchiveCommand(cmd *cobra.Command, args []string) {
logrus.Info("Executing `arduino sketch archive`")
sketchPath := ""
if len(args) >= 1 {
sketchPath = args[0]
}
archivePath := ""
if len(args) == 2 {
archivePath = args[1]
}
_, err := sketch.ArchiveSketch(context.Background(),
&rpc.ArchiveSketchReq{
SketchPath: sketchPath,
ArchivePath: archivePath,
IncludeBuildDir: includeBuildDir,
})
if err != nil {
feedback.Errorf("Error archiving: %v", err)
os.Exit(errorcodes.ErrGeneric)
}
}
......@@ -31,6 +31,7 @@ func NewCommand() *cobra.Command {
}
cmd.AddCommand(initNewCommand())
cmd.AddCommand(initArchiveCommand())
return cmd
}
......@@ -26,6 +26,7 @@ import (
"github.com/arduino/arduino-cli/commands/compile"
"github.com/arduino/arduino-cli/commands/core"
"github.com/arduino/arduino-cli/commands/lib"
"github.com/arduino/arduino-cli/commands/sketch"
"github.com/arduino/arduino-cli/commands/upload"
rpc "github.com/arduino/arduino-cli/rpc/commands"
)
......@@ -337,3 +338,8 @@ func (s *ArduinoCoreServerImpl) LibrarySearch(ctx context.Context, req *rpc.Libr
func (s *ArduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.LibraryListReq) (*rpc.LibraryListResp, error) {
return lib.LibraryList(ctx, req)
}
// ArchiveSketch FIXMEDOC
func (s *ArduinoCoreServerImpl) ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchReq) (*rpc.ArchiveSketchResp, error) {
return sketch.ArchiveSketch(ctx, req)
}
// This file is part of arduino-cli.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to license@arduino.cc.
package sketch
import (
"archive/zip"
"context"
"fmt"
"io"
"path/filepath"
"strings"
rpc "github.com/arduino/arduino-cli/rpc/commands"
paths "github.com/arduino/go-paths-helper"
)
// ArchiveSketch FIXMEDOC
func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchReq) (*rpc.ArchiveSketchResp, error) {
// sketchName is the name of the sketch without extension, for example "MySketch"
var sketchName string
sketchPath := paths.New(req.SketchPath)
if sketchPath == nil {
sketchPath = paths.New(".")
}
sketchPath, err := sketchPath.Clean().Abs()
if err != nil {
return nil, fmt.Errorf("Error getting absolute sketch path %v", err)
}
// Get the sketch name and make sketchPath point to the ino file
if sketchPath.IsDir() {
sketchName = sketchPath.Base()
sketchPath = sketchPath.Join(sketchName + ".ino")
} else if sketchPath.Ext() == ".ino" {
sketchName = strings.TrimSuffix(sketchPath.Base(), ".ino")
}
// Checks if it's really a sketch
if sketchPath.NotExist() {
return nil, fmt.Errorf("specified path is not a sketch: %v", sketchPath.String())
}
archivePath := paths.New(req.ArchivePath)
if archivePath == nil {
archivePath = sketchPath.Parent().Parent()
}
archivePath, err = archivePath.Clean().Abs()
if err != nil {
return nil, fmt.Errorf("Error getting absolute archive path %v", err)
}
// Makes archivePath point to a zip file
if archivePath.IsDir() {
archivePath = archivePath.Join(sketchName + ".zip")
} else if archivePath.Ext() == "" {
archivePath = paths.New(archivePath.String() + ".zip")
}
if archivePath.Exist() {
return nil, fmt.Errorf("archive already exists")
}
filesToZip, err := sketchPath.Parent().ReadDirRecursive()
if err != nil {
return nil, fmt.Errorf("Error retrieving sketch files: %v", err)
}
filesToZip.FilterOutDirs()
archive, err := archivePath.Create()
if err != nil {
return nil, fmt.Errorf("Error creating archive: %v", err)
}
defer archive.Close()
zipWriter := zip.NewWriter(archive)
defer zipWriter.Close()
for _, f := range filesToZip {
if !req.IncludeBuildDir {
filePath, err := sketchPath.Parent().Parent().RelTo(f)
if err != nil {
return nil, fmt.Errorf("Error calculating relative file path: %v", err)
}
// Skips build folder
if strings.HasPrefix(filePath.String(), sketchName+string(filepath.Separator)+"build") {
continue
}
}
// We get the parent path since we want the archive to unpack as a folder.
// If we don't do this the archive would contain all the sketch files as top level.
err = addFileToSketchArchive(zipWriter, f, sketchPath.Parent().Parent())
if err != nil {
return nil, fmt.Errorf("Error adding file to archive: %v", err)
}
}
return &rpc.ArchiveSketchResp{}, nil
}
// Adds a single file to an existing zip file
func addFileToSketchArchive(zipWriter *zip.Writer, filePath, sketchPath *paths.Path) error {
f, err := filePath.Open()
if err != nil {
return err
}
defer f.Close()
info, err := f.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
filePath, err = sketchPath.RelTo(filePath)
if err != nil {
return err
}
header.Name = filePath.String()
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, f)
return err
}
......@@ -9,7 +9,7 @@ require (
bou.ke/monkey v1.0.1
github.com/GeertJohan/go.rice v1.0.0
github.com/arduino/board-discovery v0.0.0-20180823133458-1ba29327fb0c
github.com/arduino/go-paths-helper v1.2.0
github.com/arduino/go-paths-helper v1.3.1
github.com/arduino/go-properties-orderedmap v1.3.0
github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b
github.com/arduino/go-win32-utils v0.0.0-20180330194947-ed041402e83b
......
......@@ -1088,6 +1088,110 @@ func (x *LoadSketchResp) GetAdditionalFiles() []string {
return nil
}
type ArchiveSketchReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Absolute path to Sketch file or folder containing Sketch file
SketchPath string `protobuf:"bytes,1,opt,name=sketch_path,json=sketchPath,proto3" json:"sketch_path,omitempty"`
// Absolute path to archive that will be created or folder that will contain it
ArchivePath string `protobuf:"bytes,2,opt,name=archive_path,json=archivePath,proto3" json:"archive_path,omitempty"`
// Specifies if build directory should be included in the archive
IncludeBuildDir bool `protobuf:"varint,3,opt,name=include_build_dir,json=includeBuildDir,proto3" json:"include_build_dir,omitempty"`
}
func (x *ArchiveSketchReq) Reset() {
*x = ArchiveSketchReq{}
if protoimpl.UnsafeEnabled {
mi := &file_commands_commands_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ArchiveSketchReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ArchiveSketchReq) ProtoMessage() {}
func (x *ArchiveSketchReq) ProtoReflect() protoreflect.Message {
mi := &file_commands_commands_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ArchiveSketchReq.ProtoReflect.Descriptor instead.
func (*ArchiveSketchReq) Descriptor() ([]byte, []int) {
return file_commands_commands_proto_rawDescGZIP(), []int{20}
}
func (x *ArchiveSketchReq) GetSketchPath() string {
if x != nil {
return x.SketchPath
}
return ""
}
func (x *ArchiveSketchReq) GetArchivePath() string {
if x != nil {
return x.ArchivePath
}
return ""
}
func (x *ArchiveSketchReq) GetIncludeBuildDir() bool {
if x != nil {
return x.IncludeBuildDir
}
return false
}
type ArchiveSketchResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *ArchiveSketchResp) Reset() {
*x = ArchiveSketchResp{}
if protoimpl.UnsafeEnabled {
mi := &file_commands_commands_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ArchiveSketchResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ArchiveSketchResp) ProtoMessage() {}
func (x *ArchiveSketchResp) ProtoReflect() protoreflect.Message {
mi := &file_commands_commands_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ArchiveSketchResp.ProtoReflect.Descriptor instead.
func (*ArchiveSketchResp) Descriptor() ([]byte, []int) {
return file_commands_commands_proto_rawDescGZIP(), []int{21}
}
var File_commands_commands_proto protoreflect.FileDescriptor
var file_commands_commands_proto_rawDesc = []byte{
......@@ -1236,218 +1340,234 @@ var file_commands_commands_proto_rawDesc = []byte{
0x68, 0x65, 0x72, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29,
0x0a, 0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c,
0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0xf0, 0x19, 0x0a, 0x0b, 0x41, 0x72,
0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x49, 0x6e, 0x69,
0x74, 0x12, 0x20, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x69, 0x74,
0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x49, 0x6e,
0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x07, 0x44, 0x65,
0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e,
0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70,
0x22, 0x00, 0x12, 0x53, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x12, 0x22, 0x2e, 0x63,
0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71,
0x1a, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x61,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75,
0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x41, 0x72,
0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x1f,
0x0a, 0x0b, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x50, 0x61, 0x74, 0x68, 0x12,
0x21, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x61,
0x74, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x62, 0x75,
0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69,
0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x69, 0x72, 0x22, 0x13,
0x0a, 0x11, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52,
0x65, 0x73, 0x70, 0x32, 0xda, 0x1a, 0x0a, 0x0b, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x43,
0x6f, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70,
0x22, 0x00, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12,
0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f,
0x79, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x44,
0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x06,
0x52, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75,
0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x1a,
0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x63, 0x63, 0x2e,
0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22,
0x00, 0x12, 0x64, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x7f, 0x0a,
0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73,
0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x30, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65,
0x71, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78,
0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73,
0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x34, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49,
0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x1a, 0x31, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65,
0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x8b,
0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x62,
0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x34, 0x2e, 0x63, 0x63,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x1a, 0x35, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x72, 0x65,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65,
0x71, 0x1a, 0x35, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x43, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x49,
0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x08,
0x4f, 0x75, 0x74, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x64, 0x61, 0x74,
0x65, 0x64, 0x12, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4f, 0x75, 0x74,
0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x73, 0x2e, 0x4f, 0x75, 0x74, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x25,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4f, 0x75, 0x74, 0x64, 0x61, 0x74, 0x65,
0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61,
0x64, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x67,
0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30,
0x01, 0x12, 0x56, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x63,
0x64, 0x73, 0x2e, 0x4f, 0x75, 0x74, 0x64, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22,
0x00, 0x12, 0x58, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x23, 0x2e, 0x63,
0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65,
0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x4c, 0x6f, 0x61,
0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a,
0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b,
0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x0c, 0x42, 0x6f,
0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e,
0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42,
0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12,
0x62, 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x27,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x74,
0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x73,
0x70, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74,
0x12, 0x25, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64,
0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12,
0x63, 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x12,
0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c,
0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x67, 0x72,
0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x07, 0x56,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75,
0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
0x70, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63,
0x68, 0x12, 0x26, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x6f, 0x61, 0x64,
0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c,
0x52, 0x65, 0x73, 0x70, 0x12, 0x56, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x12,
0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
0x65, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x43,
0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x0f,
0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12,
0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x63,
0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49,
0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x10,
0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64,
0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2d,
0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65,
0x73, 0x70, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0d, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53,
0x6b, 0x65, 0x74, 0x63, 0x68, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71,
0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69,
0x76, 0x65, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x63,
0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x28,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12,
0x74, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73,
0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65,
0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52,
0x65, 0x73, 0x70, 0x12, 0x62, 0x0a, 0x0b, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x74, 0x74, 0x61,
0x63, 0x68, 0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61,
0x72, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x74, 0x74, 0x61, 0x63,
0x68, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x09, 0x42, 0x6f, 0x61, 0x72, 0x64,
0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42,
0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x0c, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74,
0x41, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f,
0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73,
0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x56, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x70,
0x69, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x43, 0x6f,
0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01,
0x12, 0x6e, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74,
0x61, 0x6c, 0x6c, 0x12, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52,
0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71,
0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01,
0x12, 0x71, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e,
0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52,
0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73,
0x70, 0x30, 0x01, 0x12, 0x74, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55,
0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72,
0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61,
0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52,
0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x06, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12,
0x22, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73,
0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74,
0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x0f, 0x50, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x2b, 0x2e, 0x63,
0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55,
0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x70, 0x67, 0x72,
0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x06, 0x55, 0x70, 0x6c,
0x6f, 0x61, 0x64, 0x12, 0x22, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x55, 0x70,
0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0xa2, 0x01, 0x0a, 0x21, 0x4c,
0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0xa2,
0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65,
0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70,
0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c,
0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
0x12, 0x3d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50,
0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61,
0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a,
0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72,
0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12,
0x6b, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65,
0x72, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x52, 0x65, 0x71, 0x1a, 0x3e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69,
0x73, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x41, 0x76, 0x61,
0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52,
0x65, 0x73, 0x70, 0x12, 0x6b, 0x0a, 0x0e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c,
0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65,
0x71, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x75, 0x72, 0x6e,
0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x42, 0x6f, 0x6f, 0x74,
0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x69, 0x0a, 0x0e,
0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x2a,
0x42, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01,
0x12, 0x69, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72,
0x63, 0x68, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x2b,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e,
0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x71, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6e, 0x0a, 0x0f,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12,
0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x63,
0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f,
0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x6b, 0x0a, 0x0e,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2a,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, 0x63, 0x63, 0x2e,
0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74,
0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x10, 0x4c, 0x69, 0x62,
0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x2c, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55,
0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2d, 0x2e, 0x63, 0x63,
0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x0c, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x63,
0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69,
0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x74, 0x0a, 0x11,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c,
0x6c, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72,
0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71,
0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61,
0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70,
0x30, 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65,
0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65,
0x73, 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72,
0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64,
0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x37, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c,
0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65,
0x73, 0x70, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69,
0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x12, 0x6e, 0x0a, 0x0f, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
0x6f, 0x61, 0x64, 0x12, 0x2b, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69,
0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x2a,
0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71,
0x1a, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c,
0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61,
0x72, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01,
0x12, 0x6b, 0x0a, 0x0e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61,
0x6c, 0x6c, 0x12, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62,
0x72, 0x61, 0x72, 0x79, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2b,
0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x60, 0x0a, 0x0b, 0x4c, 0x69,
0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x63, 0x2e, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x71, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x71, 0x0a,
0x10, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c,
0x6c, 0x12, 0x2c, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63,
0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72,
0x61, 0x72, 0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a,
0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
0x79, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x30, 0x01,
0x12, 0x74, 0x0a, 0x11, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61,
0x64, 0x65, 0x41, 0x6c, 0x6c, 0x12, 0x2d, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c,
0x6c, 0x52, 0x65, 0x71, 0x1a, 0x2e, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e,
0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c,
0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x41, 0x6c, 0x6c,
0x52, 0x65, 0x73, 0x70, 0x30, 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x62, 0x72, 0x61,
0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65,
0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e,
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65,
0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x37, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x52,
0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69,
0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x29, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e,
0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62,
0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x2d, 0x5a, 0x2b,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69,
0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63, 0x6c, 0x69, 0x2f, 0x72,
0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x60,
0x0a, 0x0b, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e,
0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c,
0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x63, 0x63, 0x2e, 0x61, 0x72, 0x64, 0x75,
0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6c, 0x69, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61,
0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x63,
0x6c, 0x69, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
......@@ -1462,7 +1582,7 @@ func file_commands_commands_proto_rawDescGZIP() []byte {
return file_commands_commands_proto_rawDescData
}
var file_commands_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_commands_commands_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
var file_commands_commands_proto_goTypes = []interface{}{
(*InitReq)(nil), // 0: cc.arduino.cli.commands.InitReq
(*InitResp)(nil), // 1: cc.arduino.cli.commands.InitResp
......@@ -1484,73 +1604,75 @@ var file_commands_commands_proto_goTypes = []interface{}{
(*VersionResp)(nil), // 17: cc.arduino.cli.commands.VersionResp
(*LoadSketchReq)(nil), // 18: cc.arduino.cli.commands.LoadSketchReq
(*LoadSketchResp)(nil), // 19: cc.arduino.cli.commands.LoadSketchResp
(*Instance)(nil), // 20: cc.arduino.cli.commands.Instance
(*DownloadProgress)(nil), // 21: cc.arduino.cli.commands.DownloadProgress
(*TaskProgress)(nil), // 22: cc.arduino.cli.commands.TaskProgress
(*InstalledLibrary)(nil), // 23: cc.arduino.cli.commands.InstalledLibrary
(*Platform)(nil), // 24: cc.arduino.cli.commands.Platform
(*BoardDetailsReq)(nil), // 25: cc.arduino.cli.commands.BoardDetailsReq
(*BoardAttachReq)(nil), // 26: cc.arduino.cli.commands.BoardAttachReq
(*BoardListReq)(nil), // 27: cc.arduino.cli.commands.BoardListReq
(*BoardListAllReq)(nil), // 28: cc.arduino.cli.commands.BoardListAllReq
(*CompileReq)(nil), // 29: cc.arduino.cli.commands.CompileReq
(*PlatformInstallReq)(nil), // 30: cc.arduino.cli.commands.PlatformInstallReq
(*PlatformDownloadReq)(nil), // 31: cc.arduino.cli.commands.PlatformDownloadReq
(*PlatformUninstallReq)(nil), // 32: cc.arduino.cli.commands.PlatformUninstallReq
(*PlatformUpgradeReq)(nil), // 33: cc.arduino.cli.commands.PlatformUpgradeReq
(*UploadReq)(nil), // 34: cc.arduino.cli.commands.UploadReq
(*ListProgrammersAvailableForUploadReq)(nil), // 35: cc.arduino.cli.commands.ListProgrammersAvailableForUploadReq
(*BurnBootloaderReq)(nil), // 36: cc.arduino.cli.commands.BurnBootloaderReq
(*PlatformSearchReq)(nil), // 37: cc.arduino.cli.commands.PlatformSearchReq
(*PlatformListReq)(nil), // 38: cc.arduino.cli.commands.PlatformListReq
(*LibraryDownloadReq)(nil), // 39: cc.arduino.cli.commands.LibraryDownloadReq
(*LibraryInstallReq)(nil), // 40: cc.arduino.cli.commands.LibraryInstallReq
(*LibraryUninstallReq)(nil), // 41: cc.arduino.cli.commands.LibraryUninstallReq
(*LibraryUpgradeAllReq)(nil), // 42: cc.arduino.cli.commands.LibraryUpgradeAllReq
(*LibraryResolveDependenciesReq)(nil), // 43: cc.arduino.cli.commands.LibraryResolveDependenciesReq
(*LibrarySearchReq)(nil), // 44: cc.arduino.cli.commands.LibrarySearchReq
(*LibraryListReq)(nil), // 45: cc.arduino.cli.commands.LibraryListReq
(*BoardDetailsResp)(nil), // 46: cc.arduino.cli.commands.BoardDetailsResp
(*BoardAttachResp)(nil), // 47: cc.arduino.cli.commands.BoardAttachResp
(*BoardListResp)(nil), // 48: cc.arduino.cli.commands.BoardListResp
(*BoardListAllResp)(nil), // 49: cc.arduino.cli.commands.BoardListAllResp
(*CompileResp)(nil), // 50: cc.arduino.cli.commands.CompileResp
(*PlatformInstallResp)(nil), // 51: cc.arduino.cli.commands.PlatformInstallResp
(*PlatformDownloadResp)(nil), // 52: cc.arduino.cli.commands.PlatformDownloadResp
(*PlatformUninstallResp)(nil), // 53: cc.arduino.cli.commands.PlatformUninstallResp
(*PlatformUpgradeResp)(nil), // 54: cc.arduino.cli.commands.PlatformUpgradeResp
(*UploadResp)(nil), // 55: cc.arduino.cli.commands.UploadResp
(*ListProgrammersAvailableForUploadResp)(nil), // 56: cc.arduino.cli.commands.ListProgrammersAvailableForUploadResp
(*BurnBootloaderResp)(nil), // 57: cc.arduino.cli.commands.BurnBootloaderResp
(*PlatformSearchResp)(nil), // 58: cc.arduino.cli.commands.PlatformSearchResp
(*PlatformListResp)(nil), // 59: cc.arduino.cli.commands.PlatformListResp
(*LibraryDownloadResp)(nil), // 60: cc.arduino.cli.commands.LibraryDownloadResp
(*LibraryInstallResp)(nil), // 61: cc.arduino.cli.commands.LibraryInstallResp
(*LibraryUninstallResp)(nil), // 62: cc.arduino.cli.commands.LibraryUninstallResp
(*LibraryUpgradeAllResp)(nil), // 63: cc.arduino.cli.commands.LibraryUpgradeAllResp
(*LibraryResolveDependenciesResp)(nil), // 64: cc.arduino.cli.commands.LibraryResolveDependenciesResp
(*LibrarySearchResp)(nil), // 65: cc.arduino.cli.commands.LibrarySearchResp
(*LibraryListResp)(nil), // 66: cc.arduino.cli.commands.LibraryListResp
(*ArchiveSketchReq)(nil), // 20: cc.arduino.cli.commands.ArchiveSketchReq
(*ArchiveSketchResp)(nil), // 21: cc.arduino.cli.commands.ArchiveSketchResp
(*Instance)(nil), // 22: cc.arduino.cli.commands.Instance
(*DownloadProgress)(nil), // 23: cc.arduino.cli.commands.DownloadProgress
(*TaskProgress)(nil), // 24: cc.arduino.cli.commands.TaskProgress
(*InstalledLibrary)(nil), // 25: cc.arduino.cli.commands.InstalledLibrary
(*Platform)(nil), // 26: cc.arduino.cli.commands.Platform
(*BoardDetailsReq)(nil), // 27: cc.arduino.cli.commands.BoardDetailsReq
(*BoardAttachReq)(nil), // 28: cc.arduino.cli.commands.BoardAttachReq
(*BoardListReq)(nil), // 29: cc.arduino.cli.commands.BoardListReq
(*BoardListAllReq)(nil), // 30: cc.arduino.cli.commands.BoardListAllReq
(*CompileReq)(nil), // 31: cc.arduino.cli.commands.CompileReq
(*PlatformInstallReq)(nil), // 32: cc.arduino.cli.commands.PlatformInstallReq
(*PlatformDownloadReq)(nil), // 33: cc.arduino.cli.commands.PlatformDownloadReq
(*PlatformUninstallReq)(nil), // 34: cc.arduino.cli.commands.PlatformUninstallReq
(*PlatformUpgradeReq)(nil), // 35: cc.arduino.cli.commands.PlatformUpgradeReq
(*UploadReq)(nil), // 36: cc.arduino.cli.commands.UploadReq
(*ListProgrammersAvailableForUploadReq)(nil), // 37: cc.arduino.cli.commands.ListProgrammersAvailableForUploadReq
(*BurnBootloaderReq)(nil), // 38: cc.arduino.cli.commands.BurnBootloaderReq
(*PlatformSearchReq)(nil), // 39: cc.arduino.cli.commands.PlatformSearchReq
(*PlatformListReq)(nil), // 40: cc.arduino.cli.commands.PlatformListReq
(*LibraryDownloadReq)(nil), // 41: cc.arduino.cli.commands.LibraryDownloadReq
(*LibraryInstallReq)(nil), // 42: cc.arduino.cli.commands.LibraryInstallReq
(*LibraryUninstallReq)(nil), // 43: cc.arduino.cli.commands.LibraryUninstallReq
(*LibraryUpgradeAllReq)(nil), // 44: cc.arduino.cli.commands.LibraryUpgradeAllReq
(*LibraryResolveDependenciesReq)(nil), // 45: cc.arduino.cli.commands.LibraryResolveDependenciesReq
(*LibrarySearchReq)(nil), // 46: cc.arduino.cli.commands.LibrarySearchReq
(*LibraryListReq)(nil), // 47: cc.arduino.cli.commands.LibraryListReq
(*BoardDetailsResp)(nil), // 48: cc.arduino.cli.commands.BoardDetailsResp
(*BoardAttachResp)(nil), // 49: cc.arduino.cli.commands.BoardAttachResp
(*BoardListResp)(nil), // 50: cc.arduino.cli.commands.BoardListResp
(*BoardListAllResp)(nil), // 51: cc.arduino.cli.commands.BoardListAllResp
(*CompileResp)(nil), // 52: cc.arduino.cli.commands.CompileResp
(*PlatformInstallResp)(nil), // 53: cc.arduino.cli.commands.PlatformInstallResp
(*PlatformDownloadResp)(nil), // 54: cc.arduino.cli.commands.PlatformDownloadResp
(*PlatformUninstallResp)(nil), // 55: cc.arduino.cli.commands.PlatformUninstallResp
(*PlatformUpgradeResp)(nil), // 56: cc.arduino.cli.commands.PlatformUpgradeResp
(*UploadResp)(nil), // 57: cc.arduino.cli.commands.UploadResp
(*ListProgrammersAvailableForUploadResp)(nil), // 58: cc.arduino.cli.commands.ListProgrammersAvailableForUploadResp
(*BurnBootloaderResp)(nil), // 59: cc.arduino.cli.commands.BurnBootloaderResp
(*PlatformSearchResp)(nil), // 60: cc.arduino.cli.commands.PlatformSearchResp
(*PlatformListResp)(nil), // 61: cc.arduino.cli.commands.PlatformListResp
(*LibraryDownloadResp)(nil), // 62: cc.arduino.cli.commands.LibraryDownloadResp
(*LibraryInstallResp)(nil), // 63: cc.arduino.cli.commands.LibraryInstallResp
(*LibraryUninstallResp)(nil), // 64: cc.arduino.cli.commands.LibraryUninstallResp
(*LibraryUpgradeAllResp)(nil), // 65: cc.arduino.cli.commands.LibraryUpgradeAllResp
(*LibraryResolveDependenciesResp)(nil), // 66: cc.arduino.cli.commands.LibraryResolveDependenciesResp
(*LibrarySearchResp)(nil), // 67: cc.arduino.cli.commands.LibrarySearchResp
(*LibraryListResp)(nil), // 68: cc.arduino.cli.commands.LibraryListResp
}
var file_commands_commands_proto_depIdxs = []int32{
20, // 0: cc.arduino.cli.commands.InitResp.instance:type_name -> cc.arduino.cli.commands.Instance
21, // 1: cc.arduino.cli.commands.InitResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
22, // 2: cc.arduino.cli.commands.InitResp.task_progress:type_name -> cc.arduino.cli.commands.TaskProgress
20, // 3: cc.arduino.cli.commands.DestroyReq.instance:type_name -> cc.arduino.cli.commands.Instance
20, // 4: cc.arduino.cli.commands.RescanReq.instance:type_name -> cc.arduino.cli.commands.Instance
20, // 5: cc.arduino.cli.commands.UpdateIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
21, // 6: cc.arduino.cli.commands.UpdateIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
20, // 7: cc.arduino.cli.commands.UpdateLibrariesIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
21, // 8: cc.arduino.cli.commands.UpdateLibrariesIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
20, // 9: cc.arduino.cli.commands.UpdateCoreLibrariesIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
21, // 10: cc.arduino.cli.commands.UpdateCoreLibrariesIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
20, // 11: cc.arduino.cli.commands.OutdatedReq.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 12: cc.arduino.cli.commands.OutdatedResp.outdated_library:type_name -> cc.arduino.cli.commands.InstalledLibrary
24, // 13: cc.arduino.cli.commands.OutdatedResp.outdated_platform:type_name -> cc.arduino.cli.commands.Platform
20, // 14: cc.arduino.cli.commands.UpgradeReq.instance:type_name -> cc.arduino.cli.commands.Instance
21, // 15: cc.arduino.cli.commands.UpgradeResp.progress:type_name -> cc.arduino.cli.commands.DownloadProgress
22, // 16: cc.arduino.cli.commands.UpgradeResp.task_progress:type_name -> cc.arduino.cli.commands.TaskProgress
20, // 17: cc.arduino.cli.commands.LoadSketchReq.instance:type_name -> cc.arduino.cli.commands.Instance
22, // 0: cc.arduino.cli.commands.InitResp.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 1: cc.arduino.cli.commands.InitResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
24, // 2: cc.arduino.cli.commands.InitResp.task_progress:type_name -> cc.arduino.cli.commands.TaskProgress
22, // 3: cc.arduino.cli.commands.DestroyReq.instance:type_name -> cc.arduino.cli.commands.Instance
22, // 4: cc.arduino.cli.commands.RescanReq.instance:type_name -> cc.arduino.cli.commands.Instance
22, // 5: cc.arduino.cli.commands.UpdateIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 6: cc.arduino.cli.commands.UpdateIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
22, // 7: cc.arduino.cli.commands.UpdateLibrariesIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 8: cc.arduino.cli.commands.UpdateLibrariesIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
22, // 9: cc.arduino.cli.commands.UpdateCoreLibrariesIndexReq.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 10: cc.arduino.cli.commands.UpdateCoreLibrariesIndexResp.download_progress:type_name -> cc.arduino.cli.commands.DownloadProgress
22, // 11: cc.arduino.cli.commands.OutdatedReq.instance:type_name -> cc.arduino.cli.commands.Instance
25, // 12: cc.arduino.cli.commands.OutdatedResp.outdated_library:type_name -> cc.arduino.cli.commands.InstalledLibrary
26, // 13: cc.arduino.cli.commands.OutdatedResp.outdated_platform:type_name -> cc.arduino.cli.commands.Platform
22, // 14: cc.arduino.cli.commands.UpgradeReq.instance:type_name -> cc.arduino.cli.commands.Instance
23, // 15: cc.arduino.cli.commands.UpgradeResp.progress:type_name -> cc.arduino.cli.commands.DownloadProgress
24, // 16: cc.arduino.cli.commands.UpgradeResp.task_progress:type_name -> cc.arduino.cli.commands.TaskProgress
22, // 17: cc.arduino.cli.commands.LoadSketchReq.instance:type_name -> cc.arduino.cli.commands.Instance
0, // 18: cc.arduino.cli.commands.ArduinoCore.Init:input_type -> cc.arduino.cli.commands.InitReq
2, // 19: cc.arduino.cli.commands.ArduinoCore.Destroy:input_type -> cc.arduino.cli.commands.DestroyReq
4, // 20: cc.arduino.cli.commands.ArduinoCore.Rescan:input_type -> cc.arduino.cli.commands.RescanReq
......@@ -1561,60 +1683,62 @@ var file_commands_commands_proto_depIdxs = []int32{
14, // 25: cc.arduino.cli.commands.ArduinoCore.Upgrade:input_type -> cc.arduino.cli.commands.UpgradeReq
16, // 26: cc.arduino.cli.commands.ArduinoCore.Version:input_type -> cc.arduino.cli.commands.VersionReq
18, // 27: cc.arduino.cli.commands.ArduinoCore.LoadSketch:input_type -> cc.arduino.cli.commands.LoadSketchReq
25, // 28: cc.arduino.cli.commands.ArduinoCore.BoardDetails:input_type -> cc.arduino.cli.commands.BoardDetailsReq
26, // 29: cc.arduino.cli.commands.ArduinoCore.BoardAttach:input_type -> cc.arduino.cli.commands.BoardAttachReq
27, // 30: cc.arduino.cli.commands.ArduinoCore.BoardList:input_type -> cc.arduino.cli.commands.BoardListReq
28, // 31: cc.arduino.cli.commands.ArduinoCore.BoardListAll:input_type -> cc.arduino.cli.commands.BoardListAllReq
29, // 32: cc.arduino.cli.commands.ArduinoCore.Compile:input_type -> cc.arduino.cli.commands.CompileReq
30, // 33: cc.arduino.cli.commands.ArduinoCore.PlatformInstall:input_type -> cc.arduino.cli.commands.PlatformInstallReq
31, // 34: cc.arduino.cli.commands.ArduinoCore.PlatformDownload:input_type -> cc.arduino.cli.commands.PlatformDownloadReq
32, // 35: cc.arduino.cli.commands.ArduinoCore.PlatformUninstall:input_type -> cc.arduino.cli.commands.PlatformUninstallReq
33, // 36: cc.arduino.cli.commands.ArduinoCore.PlatformUpgrade:input_type -> cc.arduino.cli.commands.PlatformUpgradeReq
34, // 37: cc.arduino.cli.commands.ArduinoCore.Upload:input_type -> cc.arduino.cli.commands.UploadReq
35, // 38: cc.arduino.cli.commands.ArduinoCore.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.ListProgrammersAvailableForUploadReq
36, // 39: cc.arduino.cli.commands.ArduinoCore.BurnBootloader:input_type -> cc.arduino.cli.commands.BurnBootloaderReq
37, // 40: cc.arduino.cli.commands.ArduinoCore.PlatformSearch:input_type -> cc.arduino.cli.commands.PlatformSearchReq
38, // 41: cc.arduino.cli.commands.ArduinoCore.PlatformList:input_type -> cc.arduino.cli.commands.PlatformListReq
39, // 42: cc.arduino.cli.commands.ArduinoCore.LibraryDownload:input_type -> cc.arduino.cli.commands.LibraryDownloadReq
40, // 43: cc.arduino.cli.commands.ArduinoCore.LibraryInstall:input_type -> cc.arduino.cli.commands.LibraryInstallReq
41, // 44: cc.arduino.cli.commands.ArduinoCore.LibraryUninstall:input_type -> cc.arduino.cli.commands.LibraryUninstallReq
42, // 45: cc.arduino.cli.commands.ArduinoCore.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.LibraryUpgradeAllReq
43, // 46: cc.arduino.cli.commands.ArduinoCore.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.LibraryResolveDependenciesReq
44, // 47: cc.arduino.cli.commands.ArduinoCore.LibrarySearch:input_type -> cc.arduino.cli.commands.LibrarySearchReq
45, // 48: cc.arduino.cli.commands.ArduinoCore.LibraryList:input_type -> cc.arduino.cli.commands.LibraryListReq
1, // 49: cc.arduino.cli.commands.ArduinoCore.Init:output_type -> cc.arduino.cli.commands.InitResp
3, // 50: cc.arduino.cli.commands.ArduinoCore.Destroy:output_type -> cc.arduino.cli.commands.DestroyResp
5, // 51: cc.arduino.cli.commands.ArduinoCore.Rescan:output_type -> cc.arduino.cli.commands.RescanResp
7, // 52: cc.arduino.cli.commands.ArduinoCore.UpdateIndex:output_type -> cc.arduino.cli.commands.UpdateIndexResp
9, // 53: cc.arduino.cli.commands.ArduinoCore.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.UpdateLibrariesIndexResp
11, // 54: cc.arduino.cli.commands.ArduinoCore.UpdateCoreLibrariesIndex:output_type -> cc.arduino.cli.commands.UpdateCoreLibrariesIndexResp
13, // 55: cc.arduino.cli.commands.ArduinoCore.Outdated:output_type -> cc.arduino.cli.commands.OutdatedResp
15, // 56: cc.arduino.cli.commands.ArduinoCore.Upgrade:output_type -> cc.arduino.cli.commands.UpgradeResp
17, // 57: cc.arduino.cli.commands.ArduinoCore.Version:output_type -> cc.arduino.cli.commands.VersionResp
19, // 58: cc.arduino.cli.commands.ArduinoCore.LoadSketch:output_type -> cc.arduino.cli.commands.LoadSketchResp
46, // 59: cc.arduino.cli.commands.ArduinoCore.BoardDetails:output_type -> cc.arduino.cli.commands.BoardDetailsResp
47, // 60: cc.arduino.cli.commands.ArduinoCore.BoardAttach:output_type -> cc.arduino.cli.commands.BoardAttachResp
48, // 61: cc.arduino.cli.commands.ArduinoCore.BoardList:output_type -> cc.arduino.cli.commands.BoardListResp
49, // 62: cc.arduino.cli.commands.ArduinoCore.BoardListAll:output_type -> cc.arduino.cli.commands.BoardListAllResp
50, // 63: cc.arduino.cli.commands.ArduinoCore.Compile:output_type -> cc.arduino.cli.commands.CompileResp
51, // 64: cc.arduino.cli.commands.ArduinoCore.PlatformInstall:output_type -> cc.arduino.cli.commands.PlatformInstallResp
52, // 65: cc.arduino.cli.commands.ArduinoCore.PlatformDownload:output_type -> cc.arduino.cli.commands.PlatformDownloadResp
53, // 66: cc.arduino.cli.commands.ArduinoCore.PlatformUninstall:output_type -> cc.arduino.cli.commands.PlatformUninstallResp
54, // 67: cc.arduino.cli.commands.ArduinoCore.PlatformUpgrade:output_type -> cc.arduino.cli.commands.PlatformUpgradeResp
55, // 68: cc.arduino.cli.commands.ArduinoCore.Upload:output_type -> cc.arduino.cli.commands.UploadResp
56, // 69: cc.arduino.cli.commands.ArduinoCore.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.ListProgrammersAvailableForUploadResp
57, // 70: cc.arduino.cli.commands.ArduinoCore.BurnBootloader:output_type -> cc.arduino.cli.commands.BurnBootloaderResp
58, // 71: cc.arduino.cli.commands.ArduinoCore.PlatformSearch:output_type -> cc.arduino.cli.commands.PlatformSearchResp
59, // 72: cc.arduino.cli.commands.ArduinoCore.PlatformList:output_type -> cc.arduino.cli.commands.PlatformListResp
60, // 73: cc.arduino.cli.commands.ArduinoCore.LibraryDownload:output_type -> cc.arduino.cli.commands.LibraryDownloadResp
61, // 74: cc.arduino.cli.commands.ArduinoCore.LibraryInstall:output_type -> cc.arduino.cli.commands.LibraryInstallResp
62, // 75: cc.arduino.cli.commands.ArduinoCore.LibraryUninstall:output_type -> cc.arduino.cli.commands.LibraryUninstallResp
63, // 76: cc.arduino.cli.commands.ArduinoCore.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.LibraryUpgradeAllResp
64, // 77: cc.arduino.cli.commands.ArduinoCore.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.LibraryResolveDependenciesResp
65, // 78: cc.arduino.cli.commands.ArduinoCore.LibrarySearch:output_type -> cc.arduino.cli.commands.LibrarySearchResp
66, // 79: cc.arduino.cli.commands.ArduinoCore.LibraryList:output_type -> cc.arduino.cli.commands.LibraryListResp
49, // [49:80] is the sub-list for method output_type
18, // [18:49] is the sub-list for method input_type
20, // 28: cc.arduino.cli.commands.ArduinoCore.ArchiveSketch:input_type -> cc.arduino.cli.commands.ArchiveSketchReq
27, // 29: cc.arduino.cli.commands.ArduinoCore.BoardDetails:input_type -> cc.arduino.cli.commands.BoardDetailsReq
28, // 30: cc.arduino.cli.commands.ArduinoCore.BoardAttach:input_type -> cc.arduino.cli.commands.BoardAttachReq
29, // 31: cc.arduino.cli.commands.ArduinoCore.BoardList:input_type -> cc.arduino.cli.commands.BoardListReq
30, // 32: cc.arduino.cli.commands.ArduinoCore.BoardListAll:input_type -> cc.arduino.cli.commands.BoardListAllReq
31, // 33: cc.arduino.cli.commands.ArduinoCore.Compile:input_type -> cc.arduino.cli.commands.CompileReq
32, // 34: cc.arduino.cli.commands.ArduinoCore.PlatformInstall:input_type -> cc.arduino.cli.commands.PlatformInstallReq
33, // 35: cc.arduino.cli.commands.ArduinoCore.PlatformDownload:input_type -> cc.arduino.cli.commands.PlatformDownloadReq
34, // 36: cc.arduino.cli.commands.ArduinoCore.PlatformUninstall:input_type -> cc.arduino.cli.commands.PlatformUninstallReq
35, // 37: cc.arduino.cli.commands.ArduinoCore.PlatformUpgrade:input_type -> cc.arduino.cli.commands.PlatformUpgradeReq
36, // 38: cc.arduino.cli.commands.ArduinoCore.Upload:input_type -> cc.arduino.cli.commands.UploadReq
37, // 39: cc.arduino.cli.commands.ArduinoCore.ListProgrammersAvailableForUpload:input_type -> cc.arduino.cli.commands.ListProgrammersAvailableForUploadReq
38, // 40: cc.arduino.cli.commands.ArduinoCore.BurnBootloader:input_type -> cc.arduino.cli.commands.BurnBootloaderReq
39, // 41: cc.arduino.cli.commands.ArduinoCore.PlatformSearch:input_type -> cc.arduino.cli.commands.PlatformSearchReq
40, // 42: cc.arduino.cli.commands.ArduinoCore.PlatformList:input_type -> cc.arduino.cli.commands.PlatformListReq
41, // 43: cc.arduino.cli.commands.ArduinoCore.LibraryDownload:input_type -> cc.arduino.cli.commands.LibraryDownloadReq
42, // 44: cc.arduino.cli.commands.ArduinoCore.LibraryInstall:input_type -> cc.arduino.cli.commands.LibraryInstallReq
43, // 45: cc.arduino.cli.commands.ArduinoCore.LibraryUninstall:input_type -> cc.arduino.cli.commands.LibraryUninstallReq
44, // 46: cc.arduino.cli.commands.ArduinoCore.LibraryUpgradeAll:input_type -> cc.arduino.cli.commands.LibraryUpgradeAllReq
45, // 47: cc.arduino.cli.commands.ArduinoCore.LibraryResolveDependencies:input_type -> cc.arduino.cli.commands.LibraryResolveDependenciesReq
46, // 48: cc.arduino.cli.commands.ArduinoCore.LibrarySearch:input_type -> cc.arduino.cli.commands.LibrarySearchReq
47, // 49: cc.arduino.cli.commands.ArduinoCore.LibraryList:input_type -> cc.arduino.cli.commands.LibraryListReq
1, // 50: cc.arduino.cli.commands.ArduinoCore.Init:output_type -> cc.arduino.cli.commands.InitResp
3, // 51: cc.arduino.cli.commands.ArduinoCore.Destroy:output_type -> cc.arduino.cli.commands.DestroyResp
5, // 52: cc.arduino.cli.commands.ArduinoCore.Rescan:output_type -> cc.arduino.cli.commands.RescanResp
7, // 53: cc.arduino.cli.commands.ArduinoCore.UpdateIndex:output_type -> cc.arduino.cli.commands.UpdateIndexResp
9, // 54: cc.arduino.cli.commands.ArduinoCore.UpdateLibrariesIndex:output_type -> cc.arduino.cli.commands.UpdateLibrariesIndexResp
11, // 55: cc.arduino.cli.commands.ArduinoCore.UpdateCoreLibrariesIndex:output_type -> cc.arduino.cli.commands.UpdateCoreLibrariesIndexResp
13, // 56: cc.arduino.cli.commands.ArduinoCore.Outdated:output_type -> cc.arduino.cli.commands.OutdatedResp
15, // 57: cc.arduino.cli.commands.ArduinoCore.Upgrade:output_type -> cc.arduino.cli.commands.UpgradeResp
17, // 58: cc.arduino.cli.commands.ArduinoCore.Version:output_type -> cc.arduino.cli.commands.VersionResp
19, // 59: cc.arduino.cli.commands.ArduinoCore.LoadSketch:output_type -> cc.arduino.cli.commands.LoadSketchResp
21, // 60: cc.arduino.cli.commands.ArduinoCore.ArchiveSketch:output_type -> cc.arduino.cli.commands.ArchiveSketchResp
48, // 61: cc.arduino.cli.commands.ArduinoCore.BoardDetails:output_type -> cc.arduino.cli.commands.BoardDetailsResp
49, // 62: cc.arduino.cli.commands.ArduinoCore.BoardAttach:output_type -> cc.arduino.cli.commands.BoardAttachResp
50, // 63: cc.arduino.cli.commands.ArduinoCore.BoardList:output_type -> cc.arduino.cli.commands.BoardListResp
51, // 64: cc.arduino.cli.commands.ArduinoCore.BoardListAll:output_type -> cc.arduino.cli.commands.BoardListAllResp
52, // 65: cc.arduino.cli.commands.ArduinoCore.Compile:output_type -> cc.arduino.cli.commands.CompileResp
53, // 66: cc.arduino.cli.commands.ArduinoCore.PlatformInstall:output_type -> cc.arduino.cli.commands.PlatformInstallResp
54, // 67: cc.arduino.cli.commands.ArduinoCore.PlatformDownload:output_type -> cc.arduino.cli.commands.PlatformDownloadResp
55, // 68: cc.arduino.cli.commands.ArduinoCore.PlatformUninstall:output_type -> cc.arduino.cli.commands.PlatformUninstallResp
56, // 69: cc.arduino.cli.commands.ArduinoCore.PlatformUpgrade:output_type -> cc.arduino.cli.commands.PlatformUpgradeResp
57, // 70: cc.arduino.cli.commands.ArduinoCore.Upload:output_type -> cc.arduino.cli.commands.UploadResp
58, // 71: cc.arduino.cli.commands.ArduinoCore.ListProgrammersAvailableForUpload:output_type -> cc.arduino.cli.commands.ListProgrammersAvailableForUploadResp
59, // 72: cc.arduino.cli.commands.ArduinoCore.BurnBootloader:output_type -> cc.arduino.cli.commands.BurnBootloaderResp
60, // 73: cc.arduino.cli.commands.ArduinoCore.PlatformSearch:output_type -> cc.arduino.cli.commands.PlatformSearchResp
61, // 74: cc.arduino.cli.commands.ArduinoCore.PlatformList:output_type -> cc.arduino.cli.commands.PlatformListResp
62, // 75: cc.arduino.cli.commands.ArduinoCore.LibraryDownload:output_type -> cc.arduino.cli.commands.LibraryDownloadResp
63, // 76: cc.arduino.cli.commands.ArduinoCore.LibraryInstall:output_type -> cc.arduino.cli.commands.LibraryInstallResp
64, // 77: cc.arduino.cli.commands.ArduinoCore.LibraryUninstall:output_type -> cc.arduino.cli.commands.LibraryUninstallResp
65, // 78: cc.arduino.cli.commands.ArduinoCore.LibraryUpgradeAll:output_type -> cc.arduino.cli.commands.LibraryUpgradeAllResp
66, // 79: cc.arduino.cli.commands.ArduinoCore.LibraryResolveDependencies:output_type -> cc.arduino.cli.commands.LibraryResolveDependenciesResp
67, // 80: cc.arduino.cli.commands.ArduinoCore.LibrarySearch:output_type -> cc.arduino.cli.commands.LibrarySearchResp
68, // 81: cc.arduino.cli.commands.ArduinoCore.LibraryList:output_type -> cc.arduino.cli.commands.LibraryListResp
50, // [50:82] is the sub-list for method output_type
18, // [18:50] is the sub-list for method input_type
18, // [18:18] is the sub-list for extension type_name
18, // [18:18] is the sub-list for extension extendee
0, // [0:18] is the sub-list for field type_name
......@@ -1872,6 +1996,30 @@ func file_commands_commands_proto_init() {
return nil
}
}
file_commands_commands_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ArchiveSketchReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_commands_commands_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ArchiveSketchResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
......@@ -1879,7 +2027,7 @@ func file_commands_commands_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_commands_commands_proto_rawDesc,
NumEnums: 0,
NumMessages: 20,
NumMessages: 22,
NumExtensions: 0,
NumServices: 1,
},
......@@ -1925,6 +2073,8 @@ type ArduinoCoreClient interface {
Version(ctx context.Context, in *VersionReq, opts ...grpc.CallOption) (*VersionResp, error)
// Returns all files composing a Sketch
LoadSketch(ctx context.Context, in *LoadSketchReq, opts ...grpc.CallOption) (*LoadSketchResp, error)
// Creates a zip file containing all files of specified Sketch
ArchiveSketch(ctx context.Context, in *ArchiveSketchReq, opts ...grpc.CallOption) (*ArchiveSketchResp, error)
// Requests details about a board
BoardDetails(ctx context.Context, in *BoardDetailsReq, opts ...grpc.CallOption) (*BoardDetailsResp, error)
// Attach a board to a sketch. When the `fqbn` field of a request is not
......@@ -2186,6 +2336,15 @@ func (c *arduinoCoreClient) LoadSketch(ctx context.Context, in *LoadSketchReq, o
return out, nil
}
func (c *arduinoCoreClient) ArchiveSketch(ctx context.Context, in *ArchiveSketchReq, opts ...grpc.CallOption) (*ArchiveSketchResp, error) {
out := new(ArchiveSketchResp)
err := c.cc.Invoke(ctx, "/cc.arduino.cli.commands.ArduinoCore/ArchiveSketch", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *arduinoCoreClient) BoardDetails(ctx context.Context, in *BoardDetailsReq, opts ...grpc.CallOption) (*BoardDetailsResp, error) {
out := new(BoardDetailsResp)
err := c.cc.Invoke(ctx, "/cc.arduino.cli.commands.ArduinoCore/BoardDetails", in, out, opts...)
......@@ -2673,6 +2832,8 @@ type ArduinoCoreServer interface {
Version(context.Context, *VersionReq) (*VersionResp, error)
// Returns all files composing a Sketch
LoadSketch(context.Context, *LoadSketchReq) (*LoadSketchResp, error)
// Creates a zip file containing all files of specified Sketch
ArchiveSketch(context.Context, *ArchiveSketchReq) (*ArchiveSketchResp, error)
// Requests details about a board
BoardDetails(context.Context, *BoardDetailsReq) (*BoardDetailsResp, error)
// Attach a board to a sketch. When the `fqbn` field of a request is not
......@@ -2755,6 +2916,9 @@ func (*UnimplementedArduinoCoreServer) Version(context.Context, *VersionReq) (*V
func (*UnimplementedArduinoCoreServer) LoadSketch(context.Context, *LoadSketchReq) (*LoadSketchResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method LoadSketch not implemented")
}
func (*UnimplementedArduinoCoreServer) ArchiveSketch(context.Context, *ArchiveSketchReq) (*ArchiveSketchResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method ArchiveSketch not implemented")
}
func (*UnimplementedArduinoCoreServer) BoardDetails(context.Context, *BoardDetailsReq) (*BoardDetailsResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method BoardDetails not implemented")
}
......@@ -3018,6 +3182,24 @@ func _ArduinoCore_LoadSketch_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
func _ArduinoCore_ArchiveSketch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ArchiveSketchReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ArduinoCoreServer).ArchiveSketch(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/cc.arduino.cli.commands.ArduinoCore/ArchiveSketch",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ArduinoCoreServer).ArchiveSketch(ctx, req.(*ArchiveSketchReq))
}
return interceptor(ctx, in, info, handler)
}
func _ArduinoCore_BoardDetails_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BoardDetailsReq)
if err := dec(in); err != nil {
......@@ -3456,6 +3638,10 @@ var _ArduinoCore_serviceDesc = grpc.ServiceDesc{
MethodName: "LoadSketch",
Handler: _ArduinoCore_LoadSketch_Handler,
},
{
MethodName: "ArchiveSketch",
Handler: _ArduinoCore_ArchiveSketch_Handler,
},
{
MethodName: "BoardDetails",
Handler: _ArduinoCore_BoardDetails_Handler,
......
......@@ -61,6 +61,9 @@ service ArduinoCore {
// Returns all files composing a Sketch
rpc LoadSketch(LoadSketchReq) returns (LoadSketchResp) {}
// Creates a zip file containing all files of specified Sketch
rpc ArchiveSketch(ArchiveSketchReq) returns (ArchiveSketchResp) {}
// BOARD COMMANDS
// --------------
......@@ -251,3 +254,14 @@ message LoadSketchResp {
// List of absolute paths to additional sketch files
repeated string additional_files = 4;
}
message ArchiveSketchReq{
// Absolute path to Sketch file or folder containing Sketch file
string sketch_path = 1;
// Absolute path to archive that will be created or folder that will contain it
string archive_path = 2;
// Specifies if build directory should be included in the archive
bool include_build_dir = 3;
}
message ArchiveSketchResp { }
......@@ -15,6 +15,8 @@
import os
import platform
import signal
import shutil
from pathlib import Path
import pytest
import simplejson as json
......@@ -84,18 +86,29 @@ def run_command(pytestconfig, data_dir, downloads_dir, working_dir):
Useful reference:
http://docs.pyinvoke.org/en/1.4/api/runners.html#invoke.runners.Result
"""
cli_path = os.path.join(str(pytestconfig.rootdir), "..", "arduino-cli")
cli_path = Path(pytestconfig.rootdir).parent / "arduino-cli"
env = {
"ARDUINO_DATA_DIR": data_dir,
"ARDUINO_DOWNLOADS_DIR": downloads_dir,
"ARDUINO_SKETCHBOOK_DIR": data_dir,
}
os.makedirs(os.path.join(data_dir, "packages"))
(Path(data_dir) / "packages").mkdir()
def _run(cmd_string):
cli_full_line = "{} {}".format(cli_path, cmd_string)
def _run(cmd_string, custom_working_dir=None):
if not custom_working_dir:
custom_working_dir = working_dir
cli_full_line = '"{}" {}'.format(cli_path, cmd_string)
run_context = Context()
with run_context.cd(working_dir):
# It might happen that we need to change directories between drives on Windows,
# in that case the "/d" flag must be used otherwise directory wouldn't change
cd_command = "cd"
if platform.system() == "Windows":
cd_command += " /d"
# Context.cd() is not used since it doesn't work correctly on Windows.
# It escapes spaces in the path using "\ " but it doesn't always work,
# wrapping the path in quotation marks is the safest approach
with run_context.prefix(f'{cd_command} "{custom_working_dir}"'):
return run_context.run(cli_full_line, echo=False, hide=True, warn=True, env=env)
return _run
......@@ -112,15 +125,23 @@ def daemon_runner(pytestconfig, data_dir, downloads_dir, working_dir):
http://docs.pyinvoke.org/en/1.4/api/runners.html#invoke.runners.Local
http://docs.pyinvoke.org/en/1.4/api/runners.html
"""
cli_full_line = os.path.join(str(pytestconfig.rootdir), "..", "arduino-cli daemon")
cli_full_line = str(Path(pytestconfig.rootdir).parent / "arduino-cli daemon")
env = {
"ARDUINO_DATA_DIR": data_dir,
"ARDUINO_DOWNLOADS_DIR": downloads_dir,
"ARDUINO_SKETCHBOOK_DIR": data_dir,
}
os.makedirs(os.path.join(data_dir, "packages"))
(Path(data_dir) / "packages").mkdir()
run_context = Context()
run_context.cd(working_dir)
# It might happen that we need to change directories between drives on Windows,
# in that case the "/d" flag must be used otherwise directory wouldn't change
cd_command = "cd"
if platform.system() == "Windows":
cd_command += " /d"
# Context.cd() is not used since it doesn't work correctly on Windows.
# It escapes spaces in the path using "\ " but it doesn't always work,
# wrapping the path in quotation marks is the safest approach
run_context.prefix(f'{cd_command} "{working_dir}"')
# Local Class is the implementation of a Runner abstract class
runner = Local(run_context)
runner.run(cli_full_line, echo=False, hide=True, warn=True, env=env, asynchronous=True)
......@@ -165,3 +186,12 @@ def detected_boards(run_command):
)
return detected_boards
@pytest.fixture(scope="function")
def copy_sketch(working_dir):
# Copies sketch for testing
sketch_path = Path(__file__).parent / "testdata" / "sketch_simple"
test_sketch_path = Path(working_dir) / "sketch_simple"
shutil.copytree(sketch_path, test_sketch_path)
yield str(test_sketch_path)
......@@ -12,7 +12,7 @@
# otherwise use the software for commercial activities involving the Arduino
# software without disclosing the source code of your own applications. To purchase
# a commercial license, send an email to license@arduino.cc.
import os
from pathlib import Path
def test_init(run_command, data_dir, working_dir):
......@@ -22,7 +22,7 @@ def test_init(run_command, data_dir, working_dir):
def test_init_dest(run_command, working_dir):
dest = os.path.join(working_dir, "config", "test")
result = run_command("config init --dest-dir " + dest)
dest = str(Path(working_dir) / "config" / "test")
result = run_command(f'config init --dest-dir "{dest}"')
assert result.ok
assert dest in result.stdout
......@@ -14,6 +14,8 @@
# a commercial license, send an email to license@arduino.cc.
import os
import platform
import zipfile
from pathlib import Path
import pytest
......@@ -58,3 +60,738 @@ def test_sketch_new(run_command, working_dir):
assert result.ok
assert "Sketch created in: {}".format(current_sketch_path) in result.stdout
assert os.path.isfile(os.path.join(current_sketch_path, sketch_name + ".ino"))
def verify_zip_contains_sketch_excluding_build_dir(files):
assert "sketch_simple/doc.txt" in files
assert "sketch_simple/header.h" in files
assert "sketch_simple/merged_sketch.txt" in files
assert "sketch_simple/old.pde" in files
assert "sketch_simple/other.ino" in files
assert "sketch_simple/s_file.S" in files
assert "sketch_simple/sketch_simple.ino" in files
assert "sketch_simple/src/helper.h" in files
assert "sketch_simple/build/adafruit.samd.adafruit_feather_m0/sketch_simple.ino.hex" not in files
assert "sketch_simple/build/adafruit.samd.adafruit_feather_m0/sketch_simple.ino.map" not in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.eep" not in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.hex" not in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.with_bootloader.hex" not in files
def verify_zip_contains_sketch_including_build_dir(files):
assert "sketch_simple/doc.txt" in files
assert "sketch_simple/header.h" in files
assert "sketch_simple/merged_sketch.txt" in files
assert "sketch_simple/old.pde" in files
assert "sketch_simple/other.ino" in files
assert "sketch_simple/s_file.S" in files
assert "sketch_simple/sketch_simple.ino" in files
assert "sketch_simple/src/helper.h" in files
assert "sketch_simple/build/adafruit.samd.adafruit_feather_m0/sketch_simple.ino.hex" in files
assert "sketch_simple/build/adafruit.samd.adafruit_feather_m0/sketch_simple.ino.map" in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.eep" in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.hex" in files
assert "sketch_simple/build/arduino.avr.uno/sketch_simple.ino.with_bootloader.hex" in files
def test_sketch_archive_no_args(run_command, copy_sketch, working_dir):
result = run_command("sketch archive", copy_sketch)
print(result.stderr)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg(run_command, copy_sketch, working_dir):
result = run_command("sketch archive .", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_relative_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive . ../my_archives", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_absolute_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}"', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_relative_zip_path_and_name_without_extension(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive . ../my_archives/my_custom_sketch", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_absolute_zip_path_and_name_without_extension(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}/my_custom_sketch"', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_custom_zip_path_and_name_with_extension(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}/my_custom_sketch.zip"', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path(run_command, copy_sketch, working_dir):
result = run_command("sketch archive ./sketch_simple")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path(run_command, copy_sketch, working_dir):
result = run_command(f'sketch archive "{working_dir}/sketch_simple"', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}"')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path_and_name_without_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives/my_custom_sketch")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path_and_name_with_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives/my_custom_sketch.zip")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path_and_name_without_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}/my_custom_sketch"')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path_and_name_with_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}/my_custom_sketch.zip"')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive "{working_dir}/sketch_simple" ./my_archives')
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}"', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path_and_name_without_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive "{working_dir}/sketch_simple" ./my_archives/my_custom_sketch')
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path_and_name_with_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive "{working_dir}/sketch_simple" ./my_archives/my_custom_sketch.zip')
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path_and_name_without_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}/my_custom_sketch"', copy_sketch
)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path_and_name_with_extension(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}/my_custom_sketch.zip"', copy_sketch
)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_excluding_build_dir(archive_files)
archive.close()
def test_sketch_archive_no_args_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
result = run_command("sketch archive --include-build-dir", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
result = run_command("sketch archive . --include-build-dir", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_relative_zip_path_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive . ../my_archives --include-build-dir", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_absolute_zip_path_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}" --include-build-dir', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_relative_zip_path_and_name_without_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive . ../my_archives/my_custom_sketch --include-build-dir", copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_absolute_zip_path_and_name_without_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}/my_custom_sketch" --include-build-dir', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_dot_arg_custom_zip_path_and_name_with_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive . "{archives_folder}/my_custom_sketch.zip" --include-build-dir', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
result = run_command("sketch archive ./sketch_simple --include-build-dir")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_include_build_dir_flag(run_command, copy_sketch, working_dir):
result = run_command(f'sketch archive "{working_dir}/sketch_simple" --include-build-dir', copy_sketch)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives --include-build-dir")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}" --include-build-dir')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path_and_name_without_extension_with_include_build_dir_flag( # noqa
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives/my_custom_sketch --include-build-dir")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_relative_zip_path_and_name_with_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command("sketch archive ./sketch_simple ./my_archives/my_custom_sketch.zip --include-build-dir")
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path_and_name_without_extension_with_include_build_dir_flag( # noqa
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}/my_custom_sketch" --include-build-dir')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_relative_sketch_path_with_absolute_zip_path_and_name_with_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive ./sketch_simple "{archives_folder}/my_custom_sketch.zip" --include-build-dir')
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(f'sketch archive "{working_dir}/sketch_simple" ./my_archives --include-build-dir')
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}" --include-build-dir', copy_sketch
)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/sketch_simple.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path_and_name_without_extension_with_include_build_dir_flag( # noqa
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" ./my_archives/my_custom_sketch --include-build-dir'
)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_relative_zip_path_and_name_with_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" ./my_archives/my_custom_sketch.zip --include-build-dir'
)
assert result.ok
archive = zipfile.ZipFile(f"{working_dir}/my_archives/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path_and_name_without_extension_with_include_build_dir_flag( # noqa
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}/my_custom_sketch" --include-build-dir',
copy_sketch,
)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
def test_sketch_archive_absolute_sketch_path_with_absolute_zip_path_and_name_with_extension_with_include_build_dir_flag(
run_command, copy_sketch, working_dir
):
# Creates a folder where to save the zip
archives_folder = f"{working_dir}/my_archives/"
Path(archives_folder).mkdir()
result = run_command(
f'sketch archive "{working_dir}/sketch_simple" "{archives_folder}/my_custom_sketch.zip" --include-build-dir',
copy_sketch,
)
assert result.ok
archive = zipfile.ZipFile(f"{archives_folder}/my_custom_sketch.zip")
archive_files = archive.namelist()
verify_zip_contains_sketch_including_build_dir(archive_files)
archive.close()
:1020000000800020CD210000B5210000B521000096
:1020100000000000000000000000000000000000C0
:10202000000000000000000000000000B5210000DA
:102030000000000000000000B52100002122000087
:10204000B5210000B5210000B5210000B521000038
:10205000B5210000B5210000B5210000B921000024
:10206000B521000001210000B5210000B5210000CC
:10207000B5210000B521000011210000B5210000AC
:10208000B5210000B5210000B5210000B5210000F8
:1020900000000000B5210000B5210000B5210000BE
:1020A000B5210000B5210000B5210000B5210000D8
:1020B0000000000010B5064C2378002B07D1054B1B
:1020C000002B02D0044800E000BF0123237010BDA4
:1020D000000100200000000044490000044B10B53E
:1020E000002B03D00349044800E000BF10BDC046E8
:1020F00000000000040100204449000070477047C0
:1021000010B5024800F0C3FD10BDC0461C01002000
:1021100010B5024800F0BBFD10BDC04658030020BA
:10212000F7B501240326154F1549380000F040FB90
:102130001449154800F03CFB1449154800F038FBE1
:102140001449154800F034FB1449154800F030FBE1
:10215000144D1549280000F02BFB39002300009690
:1021600000220194114800F029FD290000961E2349
:102170001F2201940E4800F021FDF7BD94050020B8
:1021800000080042000C00429805002000100042A8
:102190009C05002000140042A00500200018004209
:1021A000A4050020A8050020001C00421C010020FE
:1021B00058030020FEE70000034B10B51B68002BFE
:1021C00000D0984710BDC046AC0500200F4A10480B
:1021D000110010B50F4B824202D0934209D1130077
:1021E000824209D100F07EF800F03AFEFEE710CB03
:1021F00010C18142FBD3F3E7074A8B42F2D00021A2
:10220000064B9A42EED202C2FBE7C0460000002015
:10221000000100204849000000010020B40B00200C
:1022200010B500F05CF8002801D100F04DF810BDA9
:10223000014B18607047C046AC050020F7B5134845
:10224000012284461249134C8E68636805689B0E10
:102250001340019288686268019F920E3A40674677
:102260003F6893420ED1BD420CD186420AD35B191E
:10227000FA254868AD00861B07486B437043000D84
:10228000C018FEBD3D0013000600E3E7B0050020C6
:1022900010E000E000ED00E05555000070B5041EB0
:1022A00011D0FFF7CBFFFA260500B60000F016F8B4
:1022B000FFF7C4FF401BB042F8D3FA23013C9B0058
:1022C000ED18002CF4D170BD10B5034A136801332A
:1022D000136000F033FA10BDB005002070470020F5
:1022E000704700001E2270B5464847494368934333
:1022F0001C3A1343436008238C6923438B61434C8E
:10230000434B9C829C8A14439C82DC681442FCD020
:102310000124404A14701578254203D055786DB2D7
:10232000002DF8DB01249460547864B2002CFBDBB0
:10233000394C5460547864B2002CFBDB8224E401F5
:102340005480547864B2002CFBDB02249C840E344D
:10235000DD682542FCD0314CDC621024DD6825426A
:10236000FCD09D8C2E4C2C439C841024DD6825428F
:10237000FCD002249D8C80262C439C844024DD6864
:102380003542FCD0DD682542F9D01024DD682542B5
:10239000FCD000249460547864B2002CFBDB214C08
:1023A0005460547864B2002CFBDB1C6A1E4D2C4038
:1023B00080251C621C6AAC431C62032393601B4B88
:1023C000536053785BB2002BFBDB0023FF240B72BE
:1023D000174A4B728B72CB72164B1A60164B174A08
:1023E0001B6811689A065B01C90E2340520F120246
:1023F0000B431343124A13858023426813434360FF
:1024000070BDC04600400041000400400C060000C2
:1024100000080040000C004001050100B905FF7DE7
:10242000040A000000070300FFFCFFFF0306010091
:10243000006CDC020000002024608000206080002E
:1024400000400042FA212E4B10B51868890001F0B7
:1024500021FE802301385B0498424FD229492A4A41
:102460004860C020136A00061B021B0A0343136264
:1024700000238B6007330B608021136A09061B025F
:102480001B0A0B431362FC22204B196A0A431A628F
:10249000FF22196A12020A431A62A022196AD202A2
:1024A0000A431A621A4B1C005A7852B2002AFBDB0C
:1024B000184A5A80184B1A00597EC9090129FBD0C5
:1024C000C821890099800521D970537EDB09012B31
:1024D000FBD0C02300205B011361907000F022F854
:1024E00063785BB2002BFBDB0C4B0D4A6380D37926
:1024F000DB09012BFBD04123537010BDFEE7C04622
:102500000000002010E000E000ED00E000040040CA
:10251000000C00401E40000000400042214000002E
:10252000004800421F4900B50B004A7ED209012A2B
:10253000FBD001380A282FD801F0A2FD1B2E2E2E29
:102540002E2E062E2E2411001A6917490A400F213B
:102550001A615A788A43110001220A4310E01A696D
:1025600011490A400F211A615A788A431100032247
:10257000F3E71A690C490A400F211A615A788A4315
:102580005A7000BD1A6908490A400F211A615A7829
:102590008A4311000222E0E7F022196912050A437A
:1025A000F3E7C04600400042FFFFFFF0182310B5DC
:1025B00008245843134A13181C57013412D001241D
:1025C0005B6882569C4003290CD808000E49D20152
:1025D0005218D318403301F053FD0210060B0221AC
:1025E0001970546010BD0621197054609461F9E7A8
:1025F0000621197054605461F4E702211970946047
:10260000F0E7C0461C440000004400411823F0B528
:1026100008245843114A13181C5701341BD00126B3
:1026200035005F688356BD400D4ADB019A189068FB
:1026300005420BD10C00601E8441D2194032107843
:1026400034400336A400B04320431070044A9B1862
:10265000002901D15D61F0BD9D61FCE71C440000D3
:1026600000440041182370B5082643432A4AD51870
:10267000AE573400013607D0072907DC00291DDAE0
:1026800001314C424C416442200070BD0B00083BBC
:10269000DBB20024032BF7D8092903D12100FFF76F
:1026A00085FFF1E70A2904D10839FFF77FFF0024ED
:1026B000EAE700240B29E7D10A39F0E76C68012525
:1026C00020009B56C9B262082840DB012C4211D081
:1026D00012480E351B189A1830321078090128401C
:1026E0000143C9B2117041221B19403319780A43C2
:1026F0001A70DCE70F26094D5B199A1830321578ED
:102700001B19B54329431170412240331978040045
:102710000A431A70B8E7C0461C4400000044004158
:10272000014B18607047C046040000200122024B94
:1027300052421A607047C04604000020164A10B585
:102740001368591C27D0013B1360002B23D172B6AC
:102750008122124B92000433934213D3104A012179
:102760001000147D0C42FCD02021148BFF319B08FB
:102770005B0021431183D3610A4B13800123027D47
:102780001A42FCD0BFF34F8F074B084ADA60BFF301
:102790004F8FC046FDE710BD040000200020000060
:1027A0000040004102A5FFFF00ED00E00400FA0533
:1027B000016070479446F0B505AC25789C1E621EFA
:1027C0009441624606689207376824063A432243DA
:1027D0000724326000682140AD010024426829438B
:1027E000022B00D05C030A4322434260F0BD30B5A7
:1027F000C0250368AD031C6812052A402243C0248B
:102800000904A40221400A431A6003685A68144369
:102810005C6030BD0123026811680B4313600368DC
:102820001A68D207FCD4DA69D207F9D470470223B8
:10283000026811680B4313600268D3699B07FCD4DC
:10284000704703681A7ED20702D41A7E9207FCD51D
:102850007047002203685A8370470368187E400758
:10286000C00F70470368187EC00970478023026854
:102870005B42117E0B43137670470368588B8007C9
:10288000C00F704702230268518B0B43538370477C
:102890000368187EC007C00F70470368188DC0B268
:1028A000704703681A7ED207FCD589B201201985CA
:1028B0007047012203689A757047012203681A75F0
:1028C000704700000368104A934213D00F4A9342A6
:1028D00012D00F4A934211D00E4A934210D00E4AA2
:1028E00093420FD001200D4A4042934201D106305D
:1028F00040B270470020FBE70120F9E70220F7E72C
:102900000320F5E70420F3E700080042000C004232
:10291000001000420014004200180042001C004257
:10292000F8B5FFF7CFFF00282CDB1D4BC0001818AF
:1029300005230479C3560320FF221840C0008240BB
:10294000C021D2438140002B1DDB1F2501201D40EB
:10295000C026A840134D7600A851C0269B089B00B6
:102960005B19B6009F593A401143995128603F23A3
:1029700023408024E4011C430B4B5C805A7852B204
:10298000002AFBDBF8BD0F200340083B07489B08EB
:102990009B001B18D86902401143D961E7E7C04684
:1029A0006C48000000E100E0000C004000ED00E099
:1029B000F8B504000F0016001D00FFF7B1FF20005E
:1029C000FFF728FF1C21BB000B4071072268090C90
:1029D0000B431360842322689375012F1AD11021B1
:1029E000012E00D008390C4B69431868C00001F073
:1029F00051FB0722216802408B895203DB04DB0C68
:102A000013438B81226803049089DB0C400B400345
:102A100018439081F8BDC046000000200120704797
:102A200010B50368014A1B6A984710BD13040000E3
:102A30000300FC33D9699A69914203D0DB69C0185D
:102A4000007D704701204042FBE710B5040000699B
:102A5000FFF7E0FE22000023FC329361D36186225F
:102A60009200A4186360A36010BDF0231B011940FD
:102A7000802306209B0099420AD00133FF330130A6
:102A8000994205D0802300205B00994200D1053097
:102A900070470F2001400020012903D00239481E51
:102AA0008141481C704700008923F0B5182785B084
:102AB00002919B000400C05C3B0008214343324E5E
:102AC0001500F3185956FFF7CDFD304B0821E05C97
:102AD0003B004343F3185956FFF7C4FD2C4BE25C0F
:102AE0000393022A09D11133E05CFF2805D00821A5
:102AF0004743F7197956FFF7B5FD8A27BF00E05D18
:102B0000FF2819D00121FFF751FD1822E35D21496B
:102B10005A43B356B618DB0158188B218900605010
:102B20001D4901225B188C218900635071688A401D
:102B30008D21890062501A600122029B11002069D8
:102B4000FFF736FF29002000FFF78FFF290006005E
:102B50002000FFF79EFFF0221540303D6A425541AC
:102B600003003100206901220095FFF723FE0B4B83
:102B70002069E25C039BE15CFFF739FE2069FFF707
:102B800056FE05B0F0BDC0461C4400002502000002
:102B900027020000184400411444004126020000AE
:102BA000802210B504000021520001F040FB2300F8
:102BB0000022FC3320005A609A6010BDF7B51D005A
:102BC00008AB1B780400009309AB1B781600019337
:102BD00000234360FA239B008360104B0F000833EF
:102BE00003601430FFF7DCFF20001D30FF30FFF7DB
:102BF000D7FF89239B002761E654094B009AE554CF
:102C0000084B2000E254019A074BE2548A22293BE8
:102C1000FF3B9200A3541032A354FEBD9C48000019
:102C20002502000026020000270200000300FC33FA
:102C300058689B68C01A01D50130FF30704710B545
:102C4000040020001D30FF30FFF7F0FF0028F8D10E
:102C50002069FFF7F6FD10BD10B51430FFF7E6FF51
:102C600010BD0300FC3359689A68914204DB5A682E
:102C70009868801AFF30704798685B68C01A0138FE
:102C8000F9E710B51D30FF30FFF7EBFF10BD10B5B1
:102C900004000069FFF7F1FD002805D02069FFF767
:102CA000FCFD2069FFF7EEFD2069FFF7D6FD002847
:102CB00020D02069FFF7F1FD2200FC329369D16931
:102CC0000133DBB28B4203D09169611808759361BF
:102CD0008A239B00E35CFF2B0CD020001430FFF70D
:102CE000C0FF092806DC8B238D229B009200E3584D
:102CF000A2581A602069FFF7CBFD00281AD02000E7
:102D00001D30FF30FFF792FF002822D086239B0062
:102D1000E31899685A68914218D08E219A68490040
:102D2000A218515C9A680132D2B29A602069C9B285
:102D3000FFF7B7FD2069FFF795FD002805D0206952
:102D4000FFF794FD2069FFF784FD10BD0121494282
:102D5000ECE72069FFF7B1FDECE7000070B5040077
:102D600000690D00FFF794FD00283FD1FF26862360
:102D70009B00E3185A689968013232408A4224D194
:102D8000EFF31083DB070ED41E4B5B68DB05DA0D17
:102D9000002BECD0103A53B212060DD49B081A4AFD
:102DA000C0339B009B582069FFF772FD0028DED0DE
:102DB0002000FFF76CFFDAE70F221340083B134AAD
:102DC0009B089B009B181B68EDE75A680132164070
:102DD0009A68964205D08E215A684900A218555427
:102DE0005E602069FFF765FD012070BD20001D3089
:102DF000FF30FFF71BFF0028B8D129002069FFF73B
:102E000050FDF1E700ED00E000E100E01CED00E026
:102E10000300FC33D9699A6970B5040091421AD055
:102E2000DA698218157DDA690132D2B2DA618A2351
:102E30009B00E35CFF2B0CD020001430FFF711FF48
:102E40000A2806DD8C238D229B009200E358A258AD
:102E50001A60280070BD01256D42E8E77047000048
:102E600010B5FFF7EFFA01F0A1F9FFF7F7FF012026
:102E7000FFF714FA094C200000F052FA200000F08D
:102E8000C7FAFFF73BF9FFF73AF9FFF727FA044BC8
:102E9000002BF8D000E000BFF5E7C046B4050020E5
:102EA00000000000F8B505000E0017000024BC4229
:102EB00008D02B682800315D1B689847002801D096
:102EC0000134F4E72000F8BD704770B50F26CB1D24
:102ED00002003240D5B22C0000093034092A00DD4E
:102EE00007341C705A1E994200D170BD1300EFE7E1
:102EF00010B50400806901F087F9A06A01F084F937
:102F0000200010BD10B50400FFF7F2FF200000F014
:102F100077FF200010BD000070B5032908D1324BA7
:102F20008000C058002802D00368DB68984770BD55
:102F300082291FD1C3B22D4D5A01AA1891692C4C78
:102F400080010C40C0218905214391612949083342
:102F50004018802150612A685B01D01804794942E9
:102F6000214301717020995C8143080030210143A5
:102F70009954DCE70029DAD1C024C1B21B4E4A01C2
:102F8000B21893681A4DA4052B40234393601A4B43
:102F90008001C0180B0050603068072608335B01C1
:102FA000195CB1430E0001213143195491690D4060
:102FB0002C43946170240F495161195CA1430C00AA
:102FC00010212143195491680C4CC3180C408021E6
:102FD0004903214391609168890B890391604022E4
:102FE00059790A435A71A2E7B80500206C0A0020FB
:102FF000FFFFFF8FE0050020A0070020FF3F00F04B
:10300000EFF3108303600123436072B670470368D7
:10301000002B02D162B6BFF36F8F704737B50569D9
:1030200004006846002D14D1FFF7EAFF019B621DE2
:10303000013B02D3D57FEDB2FAE768460193FFF773
:10304000E6FF002D01D100203EBD206AE369C01AD1
:10305000FAE7FFF7D5FF22000025019B3432013B40
:1030600002D31578EDB2FAE768460193FFF7CFFF78
:10307000002DE8D0206BE36AE9E70000F0B5FF25FA
:1030800001264268836811682B405B01CC186419E3
:10309000A77AD3183E43A672C6689C680B4FB60445
:1030A00036093C4034439C6083682B405B01D21856
:1030B0009468A40BA4039460402283682B400833D7
:1030C0005B01CB1819790A431A71F0BDFF3F00F07C
:1030D000F7B5056904000E0017006846002D43D1BE
:1030E000FFF78EFF019B601D013B5A1C0BD0C27F76
:1030F000591E002A05D168460193FFF788FF280072
:10310000FEBD0B00F1E768460193FFF780FFE3691E
:10311000AF420AD0226A9A4207D95A1CE261A269D8
:10312000D3181B7873550135F1E7226A9A42E6D12C
:103130000023E361013368462361FFF761FF22004A
:103140000021019B671D013B3532581CD3D0F97714
:1031500010785E1E002805D0200011700193FFF743
:103160008DFFECE73300F0E7FFF74AFF2000019BFB
:103170003430013B5A1C06D00278591ED5B2002AC1
:10318000B9D00B00F6E7684601930025FFF73FFF33
:10319000E36ABD4202D0226B9A421CD8226B9A424B
:1031A000ADD100236846E3622361FFF729FF2700C2
:1031B00022000021019B3437013B3532581C9AD044
:1031C000397010785E1E00280DD020001170019318
:1031D000FFF754FFEBE75A1CE262A26AD3181B7890
:1031E00073550135D4E73300E8E7F7B582684368E3
:1031F000D2B2110004000831186849014118C87999
:10320000C00729D501255201CD719B189A686169C3
:103210009204920C002923D12262226A002A41D012
:10322000A26A656168465A60FFF7EAFE3422944656
:103230002200019B671D013BA4443532591C2DD04F
:103240006146FD770978581ECEB2002905D001935A
:1032500068461570FFF7DBFEF7BD03001670EDE75B
:103260002263226B002A1DD0002227006261A2691E
:1032700068465A60FFF7C4FE019B621D9446013BFD
:1032800034373032591C09D061463D70C97F581E11
:10329000CEB20029DBD103001670F3E76846019334
:1032A000FFF7B5FE2000FFF7E9FED5E713B56A4644
:1032B00000230C00D01DD37100F0F4FD2368181812
:1032C000206000F083FE6B46D91D00F04BFE2368A2
:1032D00018186B462060D87916BD000003290ED15E
:1032E00080220E4B62311B68FF31585C5242024310
:1032F0005A5468226339FF32FF39995470470129C3
:10330000FCD18022054B24311B68FF31585C5242AE
:1033100002435A5428222339FF32EDE76C0A002079
:1033200070B500252F4B012104001A201D70FFF7F6
:103330003DF901211A20FFF769F92B4B01211920D2
:103340001D70FFF733F901211920FFF75FF92023E2
:10335000264A0F20D1690B43D361012224490B78FF
:1033600013430B70234B19788143197006211D7884
:103370002943197020490D782A430A701A780240AF
:103380001A70602219780A431A701C4B1C4A5A8022
:103390005A78D209FCD11B48FEF74AFF1A4D280083
:1033A00000F028FE280000F03BFE7F212B68C120A2
:1033B0001A7880000A401A70042219780A430C21F6
:1033C0001A701A898A4311491A810A581202120A7C
:1033D0000A5080220A6019787E3A0A431A70012343
:1033E000237070BDD5050020D405002000040040E6
:1033F000584400413C44004159440041000C004005
:1034000006400000D93D00006C0A002000E100E009
:103410000078002810D00121084B1B681A898A43C4
:103420001A810822198B0A431A830422198B0A4332
:103430001A830022024B1A607047C0466C0A0020B3
:10344000640A00200A000E498B699B0B9B038B6169
:103450000B680221FF3319729879823901439971FF
:10346000197A8907FCD57F20064B0240997A81435F
:10347000114380229972997A52420A439A72704794
:103480006C0A00200050004110B50B790C00002B95
:103490000CD1080000F014FD002801D0012010BD5F
:1034A000094A93699B0B9B039361F7E700F08EFD3C
:1034B000210000F07BFD0028F0D1034A93699B0BAB
:1034C0009B039361EBE7C0466C0A0020F7B50D0043
:1034D0001100832A19D1EBB2324C5A01A21891691A
:1034E0003148AD010840C0218905014391612F4950
:1034F00020686D187021083355615B011A5C8A439E
:10350000110040220A431A54F7BD022A45D1284A25
:10351000AB009858002802D003685B6998473820B0
:1035200000F06AFC234B8027036000231D4E7F00C0
:10353000421D036203614361C36146608560C760E9
:10354000D3772F32C36203630400137038005370C3
:1035500000F050FE0190A061380000F04BFEEBB28D
:103560005A01A062B21891680F4808330840C02180
:10357000890501439160316807265B01585CAD0005
:10358000B0430600032030435854019B2000536091
:10359000FFF774FD064B5C51B6E72800FFF7BCFC53
:1035A000B2E7C0466C0A0020FFFFFF8FE005002055
:1035B000B8050020DC48000070B505000124064B6A
:1035C000A200D258002A05D021002800FFF77EFF74
:1035D0000134F4E770BDC04608000020084B8A00A3
:1035E000D05810B5002803D003689B68984710BDD9
:1035F000044BC9B24901591888688004800CF6E769
:10360000B80500206C0A002010B50C00FFF7E6FF9B
:1036100000280CD0064BE4B21968802308346401FA
:103620000C1962795B42134363710223E37110BD8D
:103630006C0A002070B5CBB2124A13485C018901B4
:103640008918021951609168104D08330D4080218E
:1036500089022943402591609168890B8903916013
:1036600001685A018A1816793543157195796D06E6
:10367000FCD55B01C918CB79DB07FCD50019806844
:10368000C0B270BDA00700206C0A0020FF3F00F010
:1036900070B5140040220B4B0D001B68FF335979A5
:1036A0000A435A710021FFF7C5FFA04200D920004C
:1036B00000230549A34203D0CA5CEA540133F9E769
:1036C00070BDC0466C0A0020A007002010B50C4851
:1036D000C9B24901421893689B049B0C3F2B0BD93C
:1036E0009468403B9B04A40B9B0CA403234393606E
:1036F00041188868C0B210BD93689B0B9B03F6E726
:103700006C0A0020F0B51C002F4B85B01B6806002A
:103710000D000192002B54D02C4F3B78D9B2002BD6
:1037200002D11920FEF772FF64233B70284BAA00D8
:10373000D058002808D0036822005B680199984798
:103740000400200005B0F0BD29003000FFF746FF5F
:10375000844204D929003000FFF740FF040029000B
:103760003000FFF7B3FF0121EBB21A4F03935B0167
:103770000293029A3B6801989B18FF335A7A0A43D6
:103780005A72154BA9012200C91800F047FD002C00
:10379000D7D029003000FFF721FF0028D1D14021E8
:1037A000039B3A6808335B01D318187901431971F8
:1037B0000121D971029BD318FF339A7A0A439A7276
:1037C000BFE701246442BCE7640A0020D40500205E
:1037D000B80500206C0A0020A007002013B56B4636
:1037E000DC1D22000123FFF78DFF012801D1207885
:1037F00016BD01204042FBE7F0B51C003A4B85B0F6
:103800001B680E000192002B3FD08023DB019C42FD
:103810003BD8364D2B78D9B2002B02D11A20FEF7B7
:10382000F5FE642300272B70314BB201D3180293AD
:10383000002C2CD02F4B1B680393FF2333401D001B
:1038400000930835039B6D015D19AB79DB0921D02D
:10385000294B2A49186800F01DFC294B17215843B1
:1038600000F018FC274BEA79920713D49A5D002ADE
:1038700001D10138F7D201229A55009B5A011D4B04
:103880009B189A69920B92039A6101277F42380034
:1038900005B0F0BD00221B4B25009A55402C00D9E5
:1038A00040252A000199029800F0B8FC009BA90469
:1038B0005A01104B890C9B18029A7F195A619A6918
:1038C000641B920B92030A439A61009B039A08338C
:1038D0005B01D3180222DA715979823A0A435A718C
:1038E000019B5B190193A3E7640A0020D505002022
:1038F000E00500206C0A00200000002040420F007C
:1039000070110100D705002070B50C001D000D4B93
:10391000A601F618110030002A0000F07FFCE4B286
:10392000094A640114196661A369084928000B401B
:10393000A361A169AB04890B9B0C89031943A161A5
:1039400070BDC046E00500206C0A0020FF3F00F07B
:10395000F7B5104B0F001B7814000190002B0CD111
:103960000D4B16001D78002D09D00C4E0C483588E3
:1039700028182D1900F052FC35802000FEBD002EC5
:10398000FBD033007A1900210198FFF7BDFF2D18F5
:10399000361AF4E760090020610A0020620A00205C
:1039A00061090020F8B500200D00140000AF012AC5
:1039B00027D9D31D6A46DB08DB00D31A9D460800D1
:1039C00000F0F8FC6E460323022200210130400083
:1039D00030707370A2420DD2287800280AD0531C90
:1039E000DBB20135B0549C4203D00232F154D2B262
:1039F000F0E7220031000448FFF7AAFF431E984178
:103A0000C0B2BD46F8BDC046B4050020F0B50025E3
:103A1000012785B0184B0E0069461F700400009501
:103A2000FFF744FC154B01A90B806A3BFF3BCB71B0
:103A30006E3B0B72009B320009334B800E4B8D7135
:103A40004F7108711D70092E0FD00D4E092237706D
:103A50000C4F200000953D80FFF77AFF694620005B
:103A6000FFF724FC3A88084935702000FFF770FF03
:103A7000012005B0F0BDC046600900200902000029
:103A8000610A0020620A002061090020F0B5CF78A9
:103A900005000E0093B0022F09D1C9882B48FFF70B
:103AA000B5FF441EA041C4B2200013B0F0BD00F029
:103AB0008DFA310000F06AFA002803D0C417241AE6
:103AC000E40FF1E7012F0BD1F2882149112A11D817
:103AD000D2B2002A0ED02800FFF73AFF0124E3E714
:103AE0000400032FE0D1B378002B05D1F2881949E7
:103AF000032AEDD90A78EEE7022B06D1B2791649EE
:103B00002800FFF74FFF0400CEE7012B02D1B27966
:103B10001249F5E7032BC7D1114B01A91868FFF72C
:103B2000D4F9104B03A91868FFF7CFF90E4B05A97C
:103B30001868FFF7CAF90D4B07A91868FFF7C5F910
:103B40006B460533DC77B27901A9D9E7B4050020CB
:103B50000D49000000490000F4480000044900003D
:103B60000CA0800040A0800044A0800048A08000FD
:103B700037B5050048780C000B2810D800F080FA03
:103B8000061B0F310F484D7551546E71097801AA0B
:103B9000002906D1022311802800FFF7B5FE01207D
:103BA0003EBD00231380324B1B78012B00D11370D4
:103BB00002230021F0E78A780023012A09D16A460E
:103BC00093802C4B1B78012B00D11371022301AA87
:103BD000EFE7274A1370284A93699B0B9B03936175
:103BE000DDE78C78012C07D1224B01AA1C70234BF6
:103BF0001B7813702300DCE700208442D0D11C4BDB
:103C000001301D4A187093699B0B9B039361C7E7B2
:103C100028008978FFF716FCC1E72800FFF736FF78
:103C2000BEE70123164AC4E70B780020DB06B7D1B4
:103C30002800FFF7C1FC2A200221A278104BFF3098
:103C40001A600D4A13681C5C21434A241954FF343E
:103C5000195D2938FF3801431955D4E70123094A72
:103C6000A7E78A78074B1A60B5E7002098E7C046B7
:103C7000D6050020DE0500206C0A0020D048000098
:103C8000640A0020680A00204B4BF7B51C78070037
:103C9000002C00D083E0494E33689B8B1B070ED568
:103CA00021002000FFF738F9326810231100FF319E
:103CB000887A03438B72424B1C60082393833368DA
:103CC0009A8B52071FD504229A833E4A1378002B01
:103CD0000AD01378013BDBB213701378002B03D1A9
:103CE00001211A20FEF792FC374A1378002B0AD0E4
:103CF0001378013BDBB213701378002B03D1012141
:103D00001920FEF783FC3368FF331A7AD2061ED5DA
:103D100010221A72597930320A435A7160232B49A2
:103D200038000A781A423BD1FFF722FF3368FF338D
:103D3000002838D08022997952420A439A711A7A1F
:103D4000520604D540221A72597A0A435A723368CD
:103D500000241D8C01239D43EDB20193E1B2002D9F
:103D60001DD02B002341019A134215D02300326845
:103D700008335B01D318DA79D20702D4DB799B07C9
:103D800007D5134BA200D058002810D003681B6839
:103D90009847019BA3409D430134092CDED1F7BD18
:103DA000FFF772FBC2E720210A4A9171C7E738008A
:103DB000FFF794FAEDE7C046610A00206C0A002084
:103DC000640A0020D5050020D4050020A0070020AB
:103DD000B8050020FF50004110B50248FFF754FF1E
:103DE00010BDC046B4050020014B024A1A6070475E
:103DF0006C0A00200050004110B500F0FBF910BD26
:103E000010B500F001FA10BD3F20704713B56B46A6
:103E10000268D9710733546819000122A04716BD02
:103E200010B502210069FFF7D9FB10BD10B50321C1
:103E30000069FFF7E9FB10BD10B51300084A040044
:103E4000D279002A03D101230020636010BD0A004B
:103E500000690321FFF7D0FC0028F4D0F6E7C04644
:103E60003400002010B5054C03002068421C04D12A
:103E70001A68180052699047206010BD8000002029
:103E8000074A0300106810B5411C03D001235B42B0
:103E9000136010BD02211869FFF7A0FCF9E7C046C6
:103EA0008000002010B503784222023303700249DB
:103EB0000248FFF74DFD10BD3C000020B405002076
:103EC00010B50178030042780020A12908D1212AE9
:103ED00005D1174917481A3AFFF73AFD012010BDDE
:103EE0002129FCD1202A13D111491248193AFFF790
:103EF000CFFB96220E4BD200196891420ED1DA798F
:103F000001231A420AD1FA20FEF70AFC0020E6E754
:103F1000222A06D19A78064BDA71EAE7FEF706FC08
:103F2000F4E7232ADBD15A88034B1A60D7E7C0464F
:103F300034000020B405002030000020FA220021C7
:103F4000054B92009A60054A08321A60044A59608B
:103F50001A6119767047C046700B00202049000096
:103F6000B405002070B50E0000254468002C0BD06D
:103F70002368310020005B689847002802DBE46872
:103F80002D18F3E701256D42280070BD70B50D00B6
:103F90004468002C08D02368290020009B689847BB
:103FA000002802D1E468F4E7200070BD70B50D0070
:103FB0004468002C08D02368290020001B6898471B
:103FC000002802D1E468F4E7200070BD064A01230E
:103FD000116810B50C0005481C40194203D1044972
:103FE00044600180136010BD8C0B0020900B0020FA
:103FF0000204000070B50400012320CC00212A78BF
:104000002000134380222B70520000F010F9AB788F
:10401000DB07FCD4AB789B07F9D46C6270BD000061
:104020001F22144B70B51B68590B9C0C9B0111404F
:104030005B0F22401F2900D11A391F2A00D1023AF2
:10404000072B00D1043B1F2500688E01048D0A490F
:104050002A40214031430185018D14000A00AA4302
:1040600022430285028D1903044B13400B43038541
:1040700070BDC046246080003FF8FFFFFF8FFFFF48
:1040800002B4714649084900095C49008E4402BCEB
:104090007047C046002243088B4274D303098B4209
:1040A0005FD3030A8B4244D3030B8B4228D3030C08
:1040B0008B420DD3FF22090212BA030C8B4202D3AA
:1040C0001212090265D0030B8B4219D300E0090AD2
:1040D000C30B8B4201D3CB03C01A5241830B8B42DB
:1040E00001D38B03C01A5241430B8B4201D34B03C4
:1040F000C01A5241030B8B4201D30B03C01A524129
:10410000C30A8B4201D3CB02C01A5241830A8B42AD
:1041100001D38B02C01A5241430A8B4201D34B0296
:10412000C01A5241030A8B4201D30B02C01A5241FA
:10413000CDD2C3098B4201D3CB01C01A52418309AE
:104140008B4201D38B01C01A524143098B4201D3E8
:104150004B01C01A524103098B4201D30B01C01A13
:104160005241C3088B4201D3CB00C01A524183088D
:104170008B4201D38B00C01A524143088B4201D3BA
:104180004B00C01A5241411A00D20146524110461A
:104190007047FFE701B5002000F006F802BDC046F9
:1041A0000029F7D076E770477047C04670B5002603
:1041B0000C4D0D4C641BA410A64209D1002600F042
:1041C00021F90A4D0A4C641BA410A64205D170BD0A
:1041D000B300EB5898470136EEE7B300EB58984729
:1041E0000136F2E7E8000020E8000020E8000020A7
:1041F000F800002010B5034B0100186800F06AF8C1
:1042000010BDC0468400002010B5034B01001868A3
:1042100000F016F810BDC04684000020002310B541
:104220009A4200D110BDCC5CC4540133F8E70300BE
:104230008218934200D1704719700133F9E70000EA
:1042400070B50500002910D00C1F2368002B00DA80
:10425000E418280000F0B6F81D4A1368002B05D1B9
:1042600063601460280000F0B5F870BDA34208D95F
:10427000216860188342F3D118685B684118216097
:10428000EEE71A005B68002B01D0A342F9D9116850
:104290005018A0420BD120680918501811608342B1
:1042A000E0D118685B68411811605360DAE7A042FA
:1042B00002D90C232B60D5E721686018834203D113
:1042C00018685B684118216063605460CAE7C046A3
:1042D000980B0020F8B50323CD1C9D43083506003C
:1042E0000C2D1FD20C25A9421ED8300000F06AF810
:1042F00025490A681400002C1AD1244F3B68002B72
:1043000004D12100300000F043F83860290030006B
:1043100000F03EF8431C2BD10C233000336000F03A
:1043200059F803E0002DDEDA0C2333600020F8BDDD
:1043300023685B1B19D40B2B03D92360E418256079
:1043400003E06368A2420ED10B60300000F042F837
:10435000200007220B30231D9043C21A9842E6D05A
:104360001B1AA350E3E75360EFE722006468C2E73B
:104370000323C41C9C43A042E1D0211A300000F06A
:1043800007F8431CDBD1C7E7980B00209C0B0020EB
:10439000002370B5064D040008002B6000F024F8DF
:1043A000431C03D12B68002B00D0236070BDC04696
:1043B000A40B00200023C25C0133002AFBD1581E4D
:1043C0007047000010B5024800F00CF810BDC04660
:1043D000AC0B002010B5024800F005F810BDC04637
:1043E000AC0B002070477047044A03001068002897
:1043F00002D0C318136070470148FAE7A00B0020F1
:10440000B40B0020F8B5C046F8BC08BC9E46704707
:10441000F8B5C046F8BC08BC9E46704700000000D6
:104420000B000000020000001C000000FF00010162
:1044300001010B00000000000A0000000200000063
:104440001C000000FF00000100010A000000000045
:104450000E0000000800000004000000FF00000043
:1044600000000E0000000000090000000400000031
:104470001C000000FF000100010009000000000016
:1044800008000000040000001C000000FF00000005
:1044900000001000000000000F00000004000000F9
:1044A0001C000000FF00010301030F0000000000DA
:1044B00014000000050000002C000000FF000200B6
:1044C00002000400000000001500000008000000C9
:1044D00004000000FF00FFFFFFFF050000000000D8
:1044E00006000000040000001C000000060000019F
:1044F00000010600000000000700000004000000AA
:104500001C0000000700010101010700000000007D
:1045100012000000040000001C000000FF00000367
:104520000003020000000000100000000400000072
:104530001C000000FF00000200020000000000005C
:1045400013000000050000002C000000FF00030025
:104550000300030000000000110000000400000040
:104560001C000000FF000102010201000000000029
:104570000200000001000000020000000000FFFF38
:10458000FFFF020001000000080000000100000021
:1045900018000000020000040004080001000000F0
:1045A00009000000010000001800000003000104E1
:1045B00001040900000000000400000001000000E8
:1045C00018000000040000000000040000000000CB
:1045D00005000000010000001800000005000100B7
:1045E00001000500010000000200000001000000C1
:1045F000000000000A00FFFFFFFF020000000000B3
:10460000160000000200000004000000FF00FFFF91
:10461000FFFF06000000000017000000020000007D
:1046200004000000FF00FFFFFFFF07000000000084
:104630000C0000000300000004000000FF00FFFF6A
:10464000FFFF0C00010000000A0000000300000052
:1046500004000000FF00FFFFFFFF0A000100000050
:104660000B0000000300000004000000FF00FFFF3B
:10467000FFFF0B0001000000030000000B00000022
:1046800004000000FF00FFFFFFFFFF00000000002C
:104690001B0000000B00000004000000FF00FFFFF3
:1046A000FFFFFF00000000001C00000006000000EB
:1046B00000000000FF00FFFFFFFFFF000000000000
:1046C000180000000600000000000000FF00FFFFCF
:1046D000FFFFFF00000000001900000006000000BE
:1046E00000000000FF00FFFFFFFFFF0001000000CF
:1046F000160000000300000000000000FF00FFFFA4
:10470000FFFFFF0001000000170000000300000091
:1047100000000000FF00FFFFFFFFFF00000000009F
:10472000160000000200000000000000FF00FFFF74
:10473000FFFFFF0000000000170000000200000063
:1047400000000000FF00FFFFFFFFFF00000000006F
:10475000130000000200000000000000FF00FFFF47
:10476000FFFFFF000000000010000000020000003A
:1047700000000000FF00FFFFFFFFFF00000000003F
:10478000120000000200000000000000FF00FFFF18
:10479000FFFFFF0000000000110000000200000009
:1047A00000000000FF00FFFFFFFFFF00000000000F
:1047B0000D000000040000000C000000FF000100DC
:1047C000FFFF0D00000000001500000005000000C4
:1047D0000C000000FF000300FFFFFF0000000000CE
:1047E00006000000040000000C000000FF000001B3
:1047F000FFFFFF00000000000700000004000000B1
:104800000C000000FF000101FFFFFF00000000009E
:10481000030000000100000002000000FF00FFFF95
:10482000FFFFFF0000000000020000000100000088
:10483000020000001400FFFFFFFF02000000000064
:104840000600000001000000020000000600000158
:104850000001060000000000070000000100000049
:1048600002000000070001010101070000080042EA
:1048700014090000000C0042150A0000001000425C
:10488000160B000000140042170C00000018004234
:10489000180D0000001C0042190E0000000000006E
:1048A000000000005D2D0000A52E0000832C0000FC
:1048B0003F2C0000592C0000112E0000312A00006E
:1048C000212A0000A92A00004B2A00001D2A00000E
:1048D000000000000000000000000000EB310000BC
:1048E000D13000001D300000C92E0000F12E000064
:1048F000052F000046656174686572204D30000028
:104900000403090441646166727569740012010050
:1049100002EF0201409A230B800001010203010013
:1049200000000000000000000D3E0000393E0000C5
:10493000093E00002D3E0000213E0000813E0000A7
:08494000653E000000000000CC
:1049480040420F00FFFFFFFF00000000830000004F
:1049580002000000820000000000000000000000CB
:10496800000000000000000000000000000000003F
:10497800FFFFFFFF00C2010000000800080B000253
:1049880002020000090400000102020000052400E0
:104998001001042402060524060001052401010172
:1049A8000705810310001009040100020A00000035
:1049B80007050202400000070583024000000000CE
:1049C800FFFFFFFF8800002000000000000000003B
:1049D80000000000000000000000000000000000CF
:1049E80000000000000000000000000000000000BF
:1049F80000000000000000000000000000000000AF
:104A0800000000000000000000000000000000009E
:104A1800000000000000000000000000000000008E
:104A28000000000000000000DD200000212100003F
:104A3800E93D00003D3F0000B520000000000000F7
:04000003000021CD0B
:00000001FF
This source diff could not be displayed because it is too large. You can view the blob instead.
:100000000C9434000C9446000C9446000C9446006A
:100010000C9446000C9446000C9446000C94460048
:100020000C9446000C9446000C9446000C94460038
:100030000C9446000C9446000C9446000C94460028
:100040000C9448000C9446000C9446000C94460016
:100050000C9446000C9446000C9446000C94460008
:100060000C9446000C94460011241FBECFEFD8E03C
:10007000DEBFCDBF21E0A0E0B1E001C01D92A930FC
:10008000B207E1F70E9492000C94DC000C9400008F
:100090001F920F920FB60F9211242F933F938F93BD
:1000A0009F93AF93BF938091050190910601A0911A
:1000B0000701B09108013091040123E0230F2D378F
:1000C00058F50196A11DB11D2093040180930501EF
:1000D00090930601A0930701B0930801809100015D
:1000E00090910101A0910201B09103010196A11D1F
:1000F000B11D8093000190930101A0930201B09380
:100100000301BF91AF919F918F913F912F910F90DC
:100110000FBE0F901F90189526E8230F0296A11D81
:10012000B11DD2CF789484B5826084BD84B58160DE
:1001300084BD85B5826085BD85B5816085BD8091B2
:100140006E00816080936E0010928100809181002A
:100150008260809381008091810081608093810022
:10016000809180008160809380008091B1008460E4
:100170008093B1008091B00081608093B000809145
:100180007A00846080937A0080917A008260809304
:100190007A0080917A00816080937A0080917A0061
:1001A000806880937A001092C100C0E0D0E0209770
:0C01B000F1F30E940000FBCFF894FFCF99
:00000001FF
:020000040000FA
:100000000C9434000C9446000C9446000C9446006A
:100010000C9446000C9446000C9446000C94460048
:100020000C9446000C9446000C9446000C94460038
:100030000C9446000C9446000C9446000C94460028
:100040000C9448000C9446000C9446000C94460016
:100050000C9446000C9446000C9446000C94460008
:100060000C9446000C94460011241FBECFEFD8E03C
:10007000DEBFCDBF21E0A0E0B1E001C01D92A930FC
:10008000B207E1F70E9492000C94DC000C9400008F
:100090001F920F920FB60F9211242F933F938F93BD
:1000A0009F93AF93BF938091050190910601A0911A
:1000B0000701B09108013091040123E0230F2D378F
:1000C00058F50196A11DB11D2093040180930501EF
:1000D00090930601A0930701B0930801809100015D
:1000E00090910101A0910201B09103010196A11D1F
:1000F000B11D8093000190930101A0930201B09380
:100100000301BF91AF919F918F913F912F910F90DC
:100110000FBE0F901F90189526E8230F0296A11D81
:10012000B11DD2CF789484B5826084BD84B58160DE
:1001300084BD85B5826085BD85B5816085BD8091B2
:100140006E00816080936E0010928100809181002A
:100150008260809381008091810081608093810022
:10016000809180008160809380008091B1008460E4
:100170008093B1008091B00081608093B000809145
:100180007A00846080937A0080917A008260809304
:100190007A0080917A00816080937A0080917A0061
:1001A000806880937A001092C100C0E0D0E0209770
:0C01B000F1F30E940000FBCFF894FFCF99
:107E0000112484B714BE81FFF0D085E080938100F7
:107E100082E08093C00088E18093C10086E0809377
:107E2000C20080E18093C4008EE0C9D0259A86E02C
:107E300020E33CEF91E0309385002093840096BBD3
:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4
:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7
:107E6000A2D0813461F49FD0082FAFD0023811F036
:107E7000013811F484E001C083E08DD089C08234E0
:107E800011F484E103C0853419F485E0A6D080C0E4
:107E9000853579F488D0E82EFF2485D0082F10E0AE
:107EA000102F00270E291F29000F111F8ED06801E7
:107EB0006FC0863521F484E090D080E0DECF843638
:107EC00009F040C070D06FD0082F6DD080E0C81688
:107ED00080E7D80618F4F601B7BEE895C0E0D1E017
:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8
:107EF00018F0F601B7BEE89568D007B600FCFDCFD4
:107F0000A601A0E0B1E02C9130E011968C91119780
:107F100090E0982F8827822B932B1296FA010C0160
:107F200087BEE89511244E5F5F4FF1E0A038BF0790
:107F300051F7F601A7BEE89507B600FCFDCF97BE46
:107F4000E89526C08437B1F42ED02DD0F82E2BD052
:107F50003CD0F601EF2C8F010F5F1F4F84911BD097
:107F6000EA94F801C1F70894C11CD11CFA94CF0C13
:107F7000D11C0EC0853739F428D08EE10CD085E9AC
:107F80000AD08FE07ACF813511F488E018D01DD067
:107F900080E101D065CF982F8091C00085FFFCCF94
:107FA0009093C60008958091C00087FFFCCF809118
:107FB000C00084FD01C0A8958091C6000895E0E648
:107FC000F0E098E1908380830895EDDF803219F02E
:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA
:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6
:047FF000FF270994CA
:027FFE00040479
:00000001FF
#define TRUE FALSE
\ No newline at end of file
#include <Arduino.h>
#line 1 {{QuoteCppString .sketch.MainFile.Name}}
void setup() {
}
void loop() {
}
#line 1 {{QuoteCppString (index .sketch.OtherSketchFiles 0).Name}}
#line 1 {{QuoteCppString (index .sketch.OtherSketchFiles 1).Name}}
String hello() {
return "world";
}
String hello() {
return "world";
}
\ No newline at end of file
void setup() {
}
void loop() {
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment