Partial load&store for ethernet sets, JS Promise wrapper

This commit is contained in:
MaMe82 2018-10-14 20:05:05 +02:00
parent b0b2a26622
commit cc60d601df
10 changed files with 1158 additions and 494 deletions

View File

@ -51,6 +51,7 @@
GadgetSettings
GadgetSettingsEthernet
GadgetSettingsUMS
EthernetRequestSettingsStorage
DeployedEthernetInterfaceSettings
EthernetInterfaceSettings
DHCPServerSettings
@ -4500,6 +4501,88 @@ func (m *GadgetSettingsUMS) Unmarshal(rawBytes []byte) (*GadgetSettingsUMS, erro
}
// Ethernet Interface Settings
type EthernetRequestSettingsStorage struct {
TemplateName string
Settings *EthernetInterfaceSettings
}
// GetTemplateName gets the TemplateName of the EthernetRequestSettingsStorage.
func (m *EthernetRequestSettingsStorage) GetTemplateName() (x string) {
if m == nil {
return x
}
return m.TemplateName
}
// GetSettings gets the Settings of the EthernetRequestSettingsStorage.
func (m *EthernetRequestSettingsStorage) GetSettings() (x *EthernetInterfaceSettings) {
if m == nil {
return x
}
return m.Settings
}
// MarshalToWriter marshals EthernetRequestSettingsStorage to the provided writer.
func (m *EthernetRequestSettingsStorage) MarshalToWriter(writer jspb.Writer) {
if m == nil {
return
}
if len(m.TemplateName) > 0 {
writer.WriteString(1, m.TemplateName)
}
if m.Settings != nil {
writer.WriteMessage(2, func() {
m.Settings.MarshalToWriter(writer)
})
}
return
}
// Marshal marshals EthernetRequestSettingsStorage to a slice of bytes.
func (m *EthernetRequestSettingsStorage) Marshal() []byte {
writer := jspb.NewWriter()
m.MarshalToWriter(writer)
return writer.GetResult()
}
// UnmarshalFromReader unmarshals a EthernetRequestSettingsStorage from the provided reader.
func (m *EthernetRequestSettingsStorage) UnmarshalFromReader(reader jspb.Reader) *EthernetRequestSettingsStorage {
for reader.Next() {
if m == nil {
m = &EthernetRequestSettingsStorage{}
}
switch reader.GetFieldNumber() {
case 1:
m.TemplateName = reader.ReadString()
case 2:
reader.ReadMessage(func() {
m.Settings = m.Settings.UnmarshalFromReader(reader)
})
default:
reader.SkipField()
}
}
return m
}
// Unmarshal unmarshals a EthernetRequestSettingsStorage from a slice of bytes.
func (m *EthernetRequestSettingsStorage) Unmarshal(rawBytes []byte) (*EthernetRequestSettingsStorage, error) {
reader := jspb.NewReader(rawBytes)
m = m.UnmarshalFromReader(reader)
if err := reader.Err(); err != nil {
return nil, err
}
return m, nil
}
type DeployedEthernetInterfaceSettings struct {
List []*EthernetInterfaceSettings
}
@ -5177,10 +5260,6 @@ type P4WNP1Client interface {
GetLEDSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*LEDSettings, error)
SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpcweb.CallOption) (*Empty, error)
MountUMSFile(ctx context.Context, in *GadgetSettingsUMS, opts ...grpcweb.CallOption) (*Empty, error)
// Ethernet
DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpcweb.CallOption) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptJob, error)
@ -5202,12 +5281,19 @@ type P4WNP1Client interface {
DeployWiFiSettings(ctx context.Context, in *WiFiSettings, opts ...grpcweb.CallOption) (*WiFiState, error)
GetWiFiState(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*WiFiState, error)
ListenWiFiStateChanges(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*WiFiState, error)
// ToDo: Template requests (store, load, listStored)
StoreWifiSettings(ctx context.Context, in *WifiRequestSettingsStorage, opts ...grpcweb.CallOption) (*Empty, error)
GetStoredWifiSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*WiFiSettings, error)
DeployStoredWifiSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*WiFiState, error)
StoreDeployedWifiSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error)
ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
// Ethernet
DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpcweb.CallOption) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error)
StoreEthernetInterfaceSettings(ctx context.Context, in *EthernetRequestSettingsStorage, opts ...grpcweb.CallOption) (*Empty, error)
GetStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error)
DeployStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error)
ListStoredEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
// TriggerActions
GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
@ -5295,33 +5381,6 @@ func (c *p4WNP1Client) MountUMSFile(ctx context.Context, in *GadgetSettingsUMS,
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "DeployEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*DeployedEthernetInterfaceSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetAllDeployedEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(DeployedEthernetInterfaceSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetDeployedEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(EthernetInterfaceSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error) {
resp, err := c.client.RPCCall(ctx, "HIDRunScript", in.Marshal(), opts...)
if err != nil {
@ -5534,6 +5593,69 @@ func (c *p4WNP1Client) ListStoredWifiSettings(ctx context.Context, in *Empty, op
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "DeployEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*DeployedEthernetInterfaceSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetAllDeployedEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(DeployedEthernetInterfaceSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetDeployedEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(EthernetInterfaceSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) StoreEthernetInterfaceSettings(ctx context.Context, in *EthernetRequestSettingsStorage, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "StoreEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetStoredEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(EthernetInterfaceSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "DeployStoredEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) ListStoredEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) {
resp, err := c.client.RPCCall(ctx, "ListStoredEthernetInterfaceSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "GetDeployedTriggerActionSet", in.Marshal(), opts...)
if err != nil {

View File

@ -51,6 +51,7 @@ It has these top-level messages:
GadgetSettings
GadgetSettingsEthernet
GadgetSettingsUMS
EthernetRequestSettingsStorage
DeployedEthernetInterfaceSettings
EthernetInterfaceSettings
DHCPServerSettings
@ -385,7 +386,7 @@ func (x EthernetInterfaceSettings_Mode) String() string {
return proto.EnumName(EthernetInterfaceSettings_Mode_name, int32(x))
}
func (EthernetInterfaceSettings_Mode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor0, []int{44, 0}
return fileDescriptor0, []int{45, 0}
}
// Triggers, Actions and resulting TriggerActions
@ -2229,6 +2230,30 @@ func (m *GadgetSettingsUMS) GetFile() string {
}
// Ethernet Interface Settings
type EthernetRequestSettingsStorage struct {
TemplateName string `protobuf:"bytes,1,opt,name=TemplateName" json:"TemplateName,omitempty"`
Settings *EthernetInterfaceSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"`
}
func (m *EthernetRequestSettingsStorage) Reset() { *m = EthernetRequestSettingsStorage{} }
func (m *EthernetRequestSettingsStorage) String() string { return proto.CompactTextString(m) }
func (*EthernetRequestSettingsStorage) ProtoMessage() {}
func (*EthernetRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (m *EthernetRequestSettingsStorage) GetTemplateName() string {
if m != nil {
return m.TemplateName
}
return ""
}
func (m *EthernetRequestSettingsStorage) GetSettings() *EthernetInterfaceSettings {
if m != nil {
return m.Settings
}
return nil
}
type DeployedEthernetInterfaceSettings struct {
List []*EthernetInterfaceSettings `protobuf:"bytes,1,rep,name=list" json:"list,omitempty"`
}
@ -2237,7 +2262,7 @@ func (m *DeployedEthernetInterfaceSettings) Reset() { *m = DeployedEther
func (m *DeployedEthernetInterfaceSettings) String() string { return proto.CompactTextString(m) }
func (*DeployedEthernetInterfaceSettings) ProtoMessage() {}
func (*DeployedEthernetInterfaceSettings) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{43}
return fileDescriptor0, []int{44}
}
func (m *DeployedEthernetInterfaceSettings) GetList() []*EthernetInterfaceSettings {
@ -2260,7 +2285,7 @@ type EthernetInterfaceSettings struct {
func (m *EthernetInterfaceSettings) Reset() { *m = EthernetInterfaceSettings{} }
func (m *EthernetInterfaceSettings) String() string { return proto.CompactTextString(m) }
func (*EthernetInterfaceSettings) ProtoMessage() {}
func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
func (m *EthernetInterfaceSettings) GetName() string {
if m != nil {
@ -2328,7 +2353,7 @@ type DHCPServerSettings struct {
func (m *DHCPServerSettings) Reset() { *m = DHCPServerSettings{} }
func (m *DHCPServerSettings) String() string { return proto.CompactTextString(m) }
func (*DHCPServerSettings) ProtoMessage() {}
func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
func (m *DHCPServerSettings) GetListenPort() uint32 {
if m != nil {
@ -2403,7 +2428,7 @@ type DHCPServerRange struct {
func (m *DHCPServerRange) Reset() { *m = DHCPServerRange{} }
func (m *DHCPServerRange) String() string { return proto.CompactTextString(m) }
func (*DHCPServerRange) ProtoMessage() {}
func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (m *DHCPServerRange) GetRangeLower() string {
if m != nil {
@ -2435,7 +2460,7 @@ type DHCPServerStaticHost struct {
func (m *DHCPServerStaticHost) Reset() { *m = DHCPServerStaticHost{} }
func (m *DHCPServerStaticHost) String() string { return proto.CompactTextString(m) }
func (*DHCPServerStaticHost) ProtoMessage() {}
func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
func (m *DHCPServerStaticHost) GetMac() string {
if m != nil {
@ -2457,7 +2482,7 @@ type Empty struct {
func (m *Empty) Reset() { *m = Empty{} }
func (m *Empty) String() string { return proto.CompactTextString(m) }
func (*Empty) ProtoMessage() {}
func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }
func init() {
proto.RegisterType((*TriggerActionSet)(nil), "P4wnP1_grpc.TriggerActionSet")
@ -2503,6 +2528,7 @@ func init() {
proto.RegisterType((*GadgetSettings)(nil), "P4wnP1_grpc.GadgetSettings")
proto.RegisterType((*GadgetSettingsEthernet)(nil), "P4wnP1_grpc.GadgetSettingsEthernet")
proto.RegisterType((*GadgetSettingsUMS)(nil), "P4wnP1_grpc.GadgetSettingsUMS")
proto.RegisterType((*EthernetRequestSettingsStorage)(nil), "P4wnP1_grpc.EthernetRequestSettingsStorage")
proto.RegisterType((*DeployedEthernetInterfaceSettings)(nil), "P4wnP1_grpc.DeployedEthernetInterfaceSettings")
proto.RegisterType((*EthernetInterfaceSettings)(nil), "P4wnP1_grpc.EthernetInterfaceSettings")
proto.RegisterType((*DHCPServerSettings)(nil), "P4wnP1_grpc.DHCPServerSettings")
@ -2540,10 +2566,6 @@ type P4WNP1Client interface {
GetLEDSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LEDSettings, error)
SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpc.CallOption) (*Empty, error)
MountUMSFile(ctx context.Context, in *GadgetSettingsUMS, opts ...grpc.CallOption) (*Empty, error)
// Ethernet
DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpc.CallOption) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptJob, error)
@ -2565,12 +2587,19 @@ type P4WNP1Client interface {
DeployWiFiSettings(ctx context.Context, in *WiFiSettings, opts ...grpc.CallOption) (*WiFiState, error)
GetWiFiState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*WiFiState, error)
ListenWiFiStateChanges(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*WiFiState, error)
// ToDo: Template requests (store, load, listStored)
StoreWifiSettings(ctx context.Context, in *WifiRequestSettingsStorage, opts ...grpc.CallOption) (*Empty, error)
GetStoredWifiSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*WiFiSettings, error)
DeployStoredWifiSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*WiFiState, error)
StoreDeployedWifiSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error)
ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
// Ethernet
DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpc.CallOption) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error)
StoreEthernetInterfaceSettings(ctx context.Context, in *EthernetRequestSettingsStorage, opts ...grpc.CallOption) (*Empty, error)
GetStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error)
DeployStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error)
ListStoredEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
// TriggerActions
GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error)
@ -2655,33 +2684,6 @@ func (c *p4WNP1Client) MountUMSFile(ctx context.Context, in *GadgetSettingsUMS,
return out, nil
}
func (c *p4WNP1Client) DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DeployedEthernetInterfaceSettings, error) {
out := new(DeployedEthernetInterfaceSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetAllDeployedEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error) {
out := new(EthernetInterfaceSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetDeployedEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error) {
out := new(HIDScriptResult)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/HIDRunScript", in, out, c.cc, opts...)
@ -2894,6 +2896,69 @@ func (c *p4WNP1Client) ListStoredWifiSettings(ctx context.Context, in *Empty, op
return out, nil
}
func (c *p4WNP1Client) DeployEthernetInterfaceSettings(ctx context.Context, in *EthernetInterfaceSettings, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DeployedEthernetInterfaceSettings, error) {
out := new(DeployedEthernetInterfaceSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetAllDeployedEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error) {
out := new(EthernetInterfaceSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetDeployedEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StoreEthernetInterfaceSettings(ctx context.Context, in *EthernetRequestSettingsStorage, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error) {
out := new(EthernetInterfaceSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetStoredEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) DeployStoredEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployStoredEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) ListStoredEthernetInterfaceSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) {
out := new(StringMessageArray)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/ListStoredEthernetInterfaceSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error) {
out := new(TriggerActionSet)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetDeployedTriggerActionSet", in, out, c.cc, opts...)
@ -2995,10 +3060,6 @@ type P4WNP1Server interface {
GetLEDSettings(context.Context, *Empty) (*LEDSettings, error)
SetLEDSettings(context.Context, *LEDSettings) (*Empty, error)
MountUMSFile(context.Context, *GadgetSettingsUMS) (*Empty, error)
// Ethernet
DeployEthernetInterfaceSettings(context.Context, *EthernetInterfaceSettings) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(context.Context, *Empty) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(context.Context, *StringMessage) (*EthernetInterfaceSettings, error)
// HIDScript / job management
HIDRunScript(context.Context, *HIDScriptRequest) (*HIDScriptResult, error)
HIDRunScriptJob(context.Context, *HIDScriptRequest) (*HIDScriptJob, error)
@ -3020,12 +3081,19 @@ type P4WNP1Server interface {
DeployWiFiSettings(context.Context, *WiFiSettings) (*WiFiState, error)
GetWiFiState(context.Context, *Empty) (*WiFiState, error)
ListenWiFiStateChanges(context.Context, *Empty) (*WiFiState, error)
// ToDo: Template requests (store, load, listStored)
StoreWifiSettings(context.Context, *WifiRequestSettingsStorage) (*Empty, error)
GetStoredWifiSettings(context.Context, *StringMessage) (*WiFiSettings, error)
DeployStoredWifiSettings(context.Context, *StringMessage) (*WiFiState, error)
StoreDeployedWifiSettings(context.Context, *StringMessage) (*Empty, error)
ListStoredWifiSettings(context.Context, *Empty) (*StringMessageArray, error)
// Ethernet
DeployEthernetInterfaceSettings(context.Context, *EthernetInterfaceSettings) (*Empty, error)
GetAllDeployedEthernetInterfaceSettings(context.Context, *Empty) (*DeployedEthernetInterfaceSettings, error)
GetDeployedEthernetInterfaceSettings(context.Context, *StringMessage) (*EthernetInterfaceSettings, error)
StoreEthernetInterfaceSettings(context.Context, *EthernetRequestSettingsStorage) (*Empty, error)
GetStoredEthernetInterfaceSettings(context.Context, *StringMessage) (*EthernetInterfaceSettings, error)
DeployStoredEthernetInterfaceSettings(context.Context, *StringMessage) (*Empty, error)
ListStoredEthernetInterfaceSettings(context.Context, *Empty) (*StringMessageArray, error)
// TriggerActions
GetDeployedTriggerActionSet(context.Context, *Empty) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(context.Context, *TriggerActionSet) (*TriggerActionSet, error)
@ -3169,60 +3237,6 @@ func _P4WNP1_MountUMSFile_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EthernetInterfaceSettings)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployEthernetInterfaceSettings(ctx, req.(*EthernetInterfaceSettings))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetAllDeployedEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetAllDeployedEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetAllDeployedEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetAllDeployedEthernetInterfaceSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetDeployedEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetDeployedEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetDeployedEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetDeployedEthernetInterfaceSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_HIDRunScript_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(HIDScriptRequest)
if err := dec(in); err != nil {
@ -3604,6 +3618,132 @@ func _P4WNP1_ListStoredWifiSettings_Handler(srv interface{}, ctx context.Context
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EthernetInterfaceSettings)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployEthernetInterfaceSettings(ctx, req.(*EthernetInterfaceSettings))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetAllDeployedEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetAllDeployedEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetAllDeployedEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetAllDeployedEthernetInterfaceSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetDeployedEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetDeployedEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetDeployedEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetDeployedEthernetInterfaceSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StoreEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EthernetRequestSettingsStorage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StoreEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StoreEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StoreEthernetInterfaceSettings(ctx, req.(*EthernetRequestSettingsStorage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetStoredEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetStoredEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetStoredEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetStoredEthernetInterfaceSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployStoredEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployStoredEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployStoredEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployStoredEthernetInterfaceSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_ListStoredEthernetInterfaceSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).ListStoredEthernetInterfaceSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/ListStoredEthernetInterfaceSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).ListStoredEthernetInterfaceSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetDeployedTriggerActionSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
@ -3816,18 +3956,6 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
MethodName: "MountUMSFile",
Handler: _P4WNP1_MountUMSFile_Handler,
},
{
MethodName: "DeployEthernetInterfaceSettings",
Handler: _P4WNP1_DeployEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetAllDeployedEthernetInterfaceSettings",
Handler: _P4WNP1_GetAllDeployedEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetDeployedEthernetInterfaceSettings",
Handler: _P4WNP1_GetDeployedEthernetInterfaceSettings_Handler,
},
{
MethodName: "HIDRunScript",
Handler: _P4WNP1_HIDRunScript_Handler,
@ -3908,6 +4036,34 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
MethodName: "ListStoredWifiSettings",
Handler: _P4WNP1_ListStoredWifiSettings_Handler,
},
{
MethodName: "DeployEthernetInterfaceSettings",
Handler: _P4WNP1_DeployEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetAllDeployedEthernetInterfaceSettings",
Handler: _P4WNP1_GetAllDeployedEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetDeployedEthernetInterfaceSettings",
Handler: _P4WNP1_GetDeployedEthernetInterfaceSettings_Handler,
},
{
MethodName: "StoreEthernetInterfaceSettings",
Handler: _P4WNP1_StoreEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetStoredEthernetInterfaceSettings",
Handler: _P4WNP1_GetStoredEthernetInterfaceSettings_Handler,
},
{
MethodName: "DeployStoredEthernetInterfaceSettings",
Handler: _P4WNP1_DeployStoredEthernetInterfaceSettings_Handler,
},
{
MethodName: "ListStoredEthernetInterfaceSettings",
Handler: _P4WNP1_ListStoredEthernetInterfaceSettings_Handler,
},
{
MethodName: "GetDeployedTriggerActionSet",
Handler: _P4WNP1_GetDeployedTriggerActionSet_Handler,
@ -3962,230 +4118,233 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 3587 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x4b, 0x73, 0x23, 0xc9,
0x71, 0xc6, 0x83, 0x0f, 0x20, 0x01, 0x10, 0xcd, 0x1a, 0x92, 0x83, 0xe1, 0x3c, 0xb7, 0xb5, 0x5a,
0x8d, 0x29, 0x8b, 0xbb, 0xcb, 0xe5, 0xce, 0xae, 0x36, 0x24, 0xaf, 0xf0, 0x06, 0x66, 0xf0, 0x8a,
0x6a, 0x60, 0x69, 0x5b, 0x11, 0x82, 0x9a, 0xdd, 0x45, 0xb0, 0x35, 0x40, 0x37, 0xdc, 0x5d, 0xe0,
0x2c, 0x7d, 0x90, 0x23, 0x7c, 0xf6, 0xdd, 0x37, 0xff, 0x04, 0xdf, 0x6c, 0xff, 0x22, 0xdf, 0x7d,
0xf1, 0xd9, 0x8e, 0xaa, 0xea, 0x37, 0x1b, 0xe0, 0xec, 0x4c, 0xe8, 0x96, 0x95, 0x9d, 0xf5, 0x55,
0x55, 0x66, 0x56, 0x66, 0x56, 0x02, 0x00, 0x33, 0x7b, 0xa9, 0x9d, 0x2e, 0x6d, 0x8b, 0x5a, 0xa8,
0x30, 0x3a, 0x7f, 0x67, 0x8e, 0xbe, 0x9c, 0x32, 0x96, 0xfc, 0x27, 0x90, 0xc6, 0xb6, 0x31, 0x9b,
0x11, 0xbb, 0xaa, 0x51, 0xc3, 0x32, 0x15, 0x42, 0x51, 0x0d, 0xf6, 0x22, 0x3c, 0xa7, 0x92, 0x7e,
0x91, 0x7d, 0x59, 0x38, 0x3b, 0x3e, 0x0d, 0xcd, 0x3c, 0x8d, 0x88, 0xe0, 0xd8, 0x0c, 0x84, 0x60,
0x6b, 0xa0, 0x2e, 0x48, 0x25, 0xf3, 0x22, 0xfd, 0x32, 0x8f, 0x39, 0x2d, 0xff, 0x27, 0x40, 0x29,
0x22, 0x86, 0xf6, 0x20, 0x63, 0xe8, 0x95, 0xf4, 0x8b, 0xf4, 0xcb, 0x12, 0xce, 0x18, 0x3a, 0xaa,
0xc0, 0xae, 0x65, 0x12, 0xe5, 0xda, 0xa2, 0x7c, 0x62, 0x0e, 0x7b, 0x43, 0x74, 0x0c, 0x39, 0xc3,
0x61, 0xb3, 0x6e, 0x48, 0x25, 0xcb, 0x3f, 0xf9, 0x63, 0xf4, 0x04, 0xf2, 0xc6, 0x62, 0xb1, 0xa2,
0xea, 0xe5, 0x9c, 0x54, 0xb6, 0xf8, 0xc7, 0x80, 0x81, 0x7a, 0xb0, 0xe7, 0x10, 0xfb, 0xc6, 0xd0,
0x88, 0x42, 0x55, 0x9b, 0x12, 0xbd, 0xb2, 0xfd, 0x22, 0xfd, 0xb2, 0x70, 0x26, 0x27, 0x9d, 0x46,
0x89, 0x48, 0x76, 0x52, 0x38, 0x36, 0x17, 0xfd, 0x2d, 0xa0, 0x95, 0x73, 0xd9, 0x56, 0xf5, 0x19,
0xa1, 0x75, 0xcb, 0x34, 0x89, 0xc6, 0x10, 0x77, 0x38, 0xe2, 0x67, 0x49, 0x88, 0x13, 0xa5, 0x16,
0x93, 0xee, 0xa4, 0x70, 0x02, 0x06, 0x52, 0xe1, 0xd0, 0xe7, 0x36, 0x0c, 0x47, 0xf3, 0xc1, 0x77,
0x39, 0xf8, 0x5f, 0x6d, 0x04, 0x0f, 0x4f, 0xe8, 0xa4, 0x70, 0x32, 0x12, 0xea, 0x42, 0xe9, 0x9d,
0x71, 0x65, 0x54, 0x47, 0x9e, 0x26, 0x72, 0x1c, 0xfa, 0x93, 0x24, 0xe8, 0x8b, 0xb0, 0x60, 0x27,
0x85, 0xa3, 0x33, 0x99, 0x1e, 0x18, 0xc3, 0xdf, 0x7e, 0xd5, 0x51, 0xa8, 0x5a, 0xc9, 0xaf, 0xd7,
0xc3, 0xc5, 0x1d, 0x69, 0xa6, 0x87, 0xbb, 0x18, 0xe8, 0x3b, 0xc8, 0x39, 0xce, 0x75, 0xcf, 0x9a,
0x19, 0x66, 0x05, 0x38, 0xde, 0x93, 0x44, 0x4b, 0x29, 0x1d, 0x2e, 0xd3, 0x49, 0x61, 0x5f, 0x1e,
0x61, 0x90, 0xf4, 0x6b, 0x6d, 0xd9, 0x23, 0xaa, 0x43, 0xda, 0xb6, 0x6a, 0xb2, 0x33, 0x16, 0x38,
0xc6, 0xa7, 0x49, 0x18, 0x8d, 0x4e, 0x7d, 0x14, 0x96, 0xed, 0xa4, 0xf0, 0x9d, 0xf9, 0xa8, 0x05,
0xc5, 0x99, 0x6d, 0xad, 0x96, 0x98, 0x68, 0x84, 0x79, 0x5f, 0x91, 0xe3, 0xbd, 0x48, 0xc2, 0x6b,
0x87, 0xe4, 0x3a, 0x29, 0x1c, 0x99, 0x87, 0xfe, 0x00, 0x07, 0xe1, 0xb1, 0x42, 0xfe, 0x61, 0x45,
0x4c, 0x8d, 0x54, 0x4a, 0x1c, 0xef, 0xe5, 0x7d, 0x78, 0x9e, 0x7c, 0x27, 0x85, 0x13, 0x71, 0xd0,
0x39, 0xec, 0xcc, 0x96, 0x86, 0xd5, 0x35, 0x2b, 0x7b, 0x1c, 0x31, 0xf1, 0xb6, 0xb6, 0x47, 0xdd,
0x61, 0x97, 0xe9, 0xcc, 0x95, 0x45, 0x0d, 0x80, 0x4b, 0xd5, 0xb9, 0x56, 0x34, 0xdb, 0x58, 0xd2,
0x4a, 0x39, 0xe1, 0x66, 0xb8, 0x71, 0x81, 0xd9, 0xbd, 0xe6, 0x4b, 0x76, 0xd2, 0x38, 0x34, 0x0f,
0x55, 0x21, 0x7f, 0x6d, 0xe8, 0x2e, 0x88, 0x94, 0xe0, 0x54, 0x21, 0x90, 0x4e, 0xb7, 0xe1, 0x63,
0x04, 0xb3, 0x90, 0x06, 0x47, 0x3a, 0x59, 0xce, 0xad, 0x5b, 0x85, 0x50, 0x6a, 0x98, 0x33, 0x67,
0x4c, 0x16, 0xcb, 0xb9, 0x4a, 0x49, 0x65, 0x3f, 0xc1, 0xff, 0x05, 0x5e, 0x23, 0x71, 0x42, 0x27,
0x8d, 0xd7, 0x40, 0xa1, 0x13, 0xc8, 0xce, 0xad, 0x59, 0x05, 0x71, 0xc4, 0xa3, 0x04, 0xc4, 0x9e,
0x35, 0xeb, 0xa4, 0x31, 0x13, 0x42, 0xaf, 0x60, 0x97, 0xe9, 0x68, 0xb8, 0xa2, 0x95, 0x07, 0x09,
0x0a, 0x15, 0xf2, 0x4c, 0x9f, 0xc3, 0x15, 0x3b, 0x8a, 0x27, 0x8c, 0x7e, 0x03, 0x79, 0x6e, 0x1f,
0x85, 0x98, 0x7a, 0xe5, 0x20, 0xc1, 0x81, 0xdd, 0x99, 0x9e, 0x0c, 0x53, 0x83, 0x3f, 0xa1, 0x96,
0x87, 0x5d, 0xd7, 0x54, 0xb5, 0x1c, 0xec, 0x08, 0x51, 0xf9, 0x21, 0x1c, 0x26, 0xc6, 0x27, 0xf9,
0x31, 0x3c, 0x5a, 0x1b, 0x66, 0xe4, 0x67, 0xf0, 0x64, 0x53, 0x98, 0x90, 0x8f, 0xe0, 0x20, 0xe9,
0xae, 0x87, 0x40, 0xef, 0xde, 0x59, 0xf9, 0x73, 0x28, 0xc7, 0x2e, 0x20, 0x0b, 0xbf, 0x73, 0x46,
0x4c, 0x1c, 0x62, 0xf3, 0x58, 0x9e, 0xc7, 0x01, 0x43, 0x7e, 0x04, 0x0f, 0xd7, 0xdc, 0x36, 0xb9,
0x0b, 0x0f, 0x12, 0x1c, 0x9d, 0xe1, 0x71, 0x7d, 0xf0, 0xfc, 0xe1, 0xe2, 0xf9, 0x0c, 0x74, 0x00,
0xdb, 0x37, 0xea, 0x7c, 0x25, 0x32, 0xcb, 0x36, 0x16, 0x03, 0xf9, 0x9f, 0xe0, 0xf1, 0x86, 0x3b,
0x73, 0x0f, 0xe4, 0x09, 0x48, 0xdd, 0x99, 0x69, 0xd9, 0x64, 0xb8, 0xa2, 0xc3, 0xab, 0xa1, 0xad,
0x13, 0xdb, 0x4d, 0x3f, 0x77, 0xf8, 0xe8, 0x08, 0x76, 0xf8, 0x8a, 0x4e, 0x25, 0xfb, 0x22, 0xfb,
0x72, 0x1b, 0xbb, 0x23, 0xf9, 0xbf, 0xd2, 0x7e, 0x6e, 0x13, 0x77, 0x0c, 0x9d, 0x0a, 0xff, 0x19,
0xac, 0x16, 0x7c, 0xc5, 0xbd, 0xb3, 0x83, 0x88, 0x17, 0x30, 0xa9, 0xc1, 0x6a, 0x81, 0x3d, 0x21,
0xf4, 0x5b, 0x80, 0xe5, 0x6a, 0x3e, 0x9f, 0x2c, 0x1b, 0xd6, 0x3b, 0x93, 0xaf, 0xbf, 0x77, 0xf6,
0xf4, 0xce, 0x94, 0xae, 0x39, 0xf2, 0x85, 0x70, 0x68, 0x02, 0xfa, 0x06, 0x40, 0x5c, 0xe9, 0xa6,
0x3e, 0x13, 0x29, 0x72, 0xef, 0xec, 0x61, 0xc2, 0x74, 0xf6, 0x19, 0x87, 0x44, 0xe5, 0x6f, 0xe0,
0x30, 0xf1, 0x8a, 0xa3, 0x67, 0x00, 0x0e, 0xa7, 0x42, 0x5a, 0x0b, 0x71, 0xe4, 0x57, 0x70, 0x90,
0x74, 0xad, 0xef, 0x9d, 0xf7, 0xbf, 0x69, 0x78, 0xb2, 0xe9, 0xfe, 0x22, 0x19, 0x8a, 0xd4, 0xa5,
0x43, 0x10, 0x11, 0x1e, 0x7a, 0x0d, 0x5b, 0xf4, 0x76, 0x49, 0x5c, 0x3d, 0xbd, 0x7a, 0xef, 0xe0,
0x70, 0xea, 0x11, 0xe3, 0xdb, 0x25, 0xc1, 0x1c, 0x43, 0x26, 0x50, 0x0c, 0x73, 0xd1, 0x3e, 0x94,
0x5a, 0x93, 0x5e, 0x6f, 0xaa, 0x34, 0xc7, 0xe3, 0xee, 0xa0, 0xad, 0x48, 0x29, 0x54, 0x80, 0xdd,
0x41, 0x73, 0x7c, 0x31, 0xc4, 0x6f, 0xa4, 0x34, 0xca, 0xc1, 0xd6, 0x45, 0xb7, 0xd5, 0x95, 0x32,
0x68, 0x17, 0xb2, 0x13, 0xa5, 0x26, 0x65, 0x51, 0x09, 0xf2, 0xb5, 0xde, 0xa4, 0x39, 0x1e, 0x0e,
0xc7, 0x1d, 0x69, 0x0b, 0x3d, 0x80, 0xf2, 0x18, 0x77, 0xdb, 0xed, 0x26, 0x9e, 0x56, 0xeb, 0xe3,
0xee, 0x70, 0xa0, 0x48, 0xdb, 0x72, 0x01, 0xf2, 0x7e, 0x90, 0x91, 0x97, 0x50, 0x8a, 0x44, 0x90,
0x9f, 0xec, 0x2e, 0x9f, 0x87, 0xef, 0xc1, 0xde, 0xd9, 0xa3, 0x3b, 0xd2, 0xc3, 0x15, 0xfd, 0x81,
0x09, 0x78, 0x57, 0xa4, 0x09, 0xe5, 0x58, 0xe4, 0xf9, 0xa0, 0x9b, 0xf6, 0x0e, 0x8e, 0x59, 0x58,
0xc0, 0xec, 0x6a, 0x39, 0xd4, 0x53, 0xaf, 0x42, 0x2d, 0x5b, 0x9d, 0x71, 0xd3, 0x8d, 0x13, 0x4c,
0x17, 0xe6, 0xa1, 0xaf, 0x21, 0xe7, 0xb8, 0xd3, 0x38, 0x74, 0x21, 0xb6, 0xf9, 0x0b, 0xa3, 0x65,
0x78, 0xb8, 0xd8, 0x17, 0x95, 0xff, 0x35, 0x0b, 0xc5, 0xf0, 0x27, 0x56, 0x62, 0x9a, 0xc1, 0x1a,
0x9c, 0x66, 0x65, 0xa2, 0x6e, 0x38, 0xac, 0xee, 0xd3, 0xdd, 0x2b, 0xec, 0x8f, 0x99, 0x5f, 0xda,
0x64, 0xb6, 0x9a, 0xab, 0xd4, 0xb2, 0x6f, 0xf9, 0x0d, 0xc9, 0xe3, 0x10, 0x07, 0x7d, 0x0f, 0xc5,
0x77, 0x96, 0xfd, 0xd6, 0x30, 0x67, 0xd3, 0x85, 0xa5, 0x8b, 0x4a, 0x72, 0x2f, 0x16, 0xbb, 0xd9,
0x06, 0x2e, 0x84, 0x50, 0xdf, 0xd2, 0x09, 0x2e, 0xbc, 0x0b, 0x06, 0xe8, 0x15, 0xe4, 0xd5, 0x15,
0xbd, 0x16, 0xb3, 0xb7, 0x13, 0xcc, 0xc2, 0x66, 0x57, 0x57, 0xf4, 0x9a, 0x4f, 0xcd, 0xa9, 0x2e,
0xc5, 0xaa, 0x5e, 0xed, 0x5a, 0x35, 0x4d, 0x32, 0xe7, 0x85, 0x64, 0x09, 0x7b, 0x43, 0x74, 0x0a,
0x3b, 0xea, 0x72, 0x5a, 0x53, 0x14, 0xb7, 0x08, 0x7c, 0x78, 0x07, 0xae, 0xa6, 0x28, 0xf5, 0xab,
0x19, 0xde, 0x56, 0x97, 0x35, 0x45, 0x41, 0xdf, 0x43, 0x59, 0x9b, 0x1b, 0xc4, 0xa4, 0x6c, 0xce,
0x74, 0x6e, 0x38, 0xb4, 0x92, 0xe3, 0xa5, 0xfb, 0xda, 0x89, 0x25, 0x21, 0x5f, 0x53, 0x94, 0x9e,
0xe1, 0x50, 0xf4, 0x98, 0x27, 0x72, 0x32, 0x75, 0x1c, 0x43, 0xe7, 0xd5, 0x5c, 0x0e, 0xe7, 0x18,
0x43, 0x71, 0x0c, 0x9d, 0xc5, 0x3e, 0x93, 0xfc, 0xb8, 0xb0, 0x4c, 0x5e, 0xb3, 0xe4, 0xb0, 0x3b,
0x92, 0xff, 0x3d, 0x0d, 0x79, 0x6e, 0x19, 0xca, 0x6e, 0xef, 0x29, 0x6c, 0x71, 0x05, 0x08, 0x2f,
0x3e, 0xbe, 0x6b, 0x5a, 0x26, 0xc5, 0x35, 0xc0, 0xe5, 0xc2, 0xa7, 0xcf, 0x44, 0x4f, 0x8f, 0x60,
0x8b, 0xef, 0x43, 0x98, 0x8a, 0xd3, 0xa8, 0x0e, 0x65, 0x6d, 0x65, 0xdb, 0xc4, 0xf4, 0x5d, 0x8f,
0xdb, 0x69, 0xa3, 0x0f, 0xc5, 0x67, 0xc8, 0x67, 0x00, 0x81, 0x0a, 0xd8, 0x32, 0x8a, 0xd2, 0x6d,
0x78, 0x7e, 0xc4, 0x68, 0x24, 0x41, 0x76, 0xa4, 0xbc, 0x71, 0x5f, 0x2f, 0x8c, 0x94, 0x3f, 0x81,
0x92, 0x42, 0x6d, 0x66, 0x6a, 0xe2, 0x38, 0xcc, 0xd5, 0x25, 0xc8, 0x2e, 0x9c, 0x99, 0x3b, 0x8b,
0x91, 0xf2, 0x17, 0x80, 0x22, 0x22, 0x55, 0xdb, 0x56, 0x6f, 0x99, 0x4b, 0x2e, 0x9c, 0x19, 0xa7,
0xf9, 0x3b, 0x2a, 0x8f, 0xfd, 0xb1, 0x7c, 0x0a, 0xc5, 0xe6, 0x0d, 0x31, 0xa9, 0x7b, 0x9b, 0x98,
0x8b, 0x32, 0xa3, 0x11, 0x93, 0xc5, 0x21, 0x0e, 0x9d, 0xc5, 0x21, 0x8e, 0xac, 0x02, 0x70, 0x79,
0x7e, 0xb1, 0xd1, 0x31, 0xec, 0x52, 0x87, 0x2f, 0x28, 0x76, 0xd1, 0x49, 0x61, 0x8f, 0x81, 0x8e,
0x60, 0x9b, 0x5e, 0x5a, 0x96, 0xd0, 0x69, 0xae, 0x93, 0xc2, 0x62, 0x88, 0x2a, 0xb0, 0x43, 0x0d,
0x93, 0xbe, 0x3a, 0xe7, 0x5a, 0xcd, 0xb2, 0x4a, 0x50, 0x8c, 0x6b, 0xdb, 0x90, 0xbd, 0x51, 0xe7,
0x72, 0x0f, 0xb6, 0xf9, 0x12, 0x4c, 0x2d, 0x34, 0xd8, 0x05, 0xa7, 0xd1, 0xe7, 0x7e, 0xf6, 0xcb,
0x24, 0xb8, 0x55, 0xb0, 0x35, 0x3f, 0x2d, 0xfe, 0x11, 0x0e, 0xd8, 0xdd, 0x6f, 0x18, 0xf6, 0xd0,
0x6e, 0x19, 0x73, 0xe2, 0x1d, 0x54, 0x82, 0xac, 0x6e, 0x78, 0xd5, 0x02, 0x23, 0x99, 0x73, 0x2d,
0x6d, 0x72, 0x65, 0xfc, 0xe8, 0x2a, 0xdd, 0x1d, 0x31, 0x95, 0x58, 0xe6, 0xfc, 0xb6, 0x65, 0xcd,
0x59, 0x5a, 0x16, 0x4f, 0xbf, 0x10, 0x87, 0xa5, 0xaf, 0xd8, 0x0a, 0xce, 0xd2, 0x32, 0x1d, 0x22,
0xae, 0xbb, 0xb3, 0x9a, 0xd3, 0x91, 0x4a, 0xaf, 0xbd, 0x34, 0x14, 0x70, 0xe4, 0x7f, 0x49, 0x43,
0x19, 0x13, 0x55, 0x0f, 0x6f, 0xeb, 0x6b, 0xd8, 0xb9, 0x12, 0x0b, 0xa5, 0x13, 0xf2, 0x6f, 0x55,
0xd3, 0x88, 0xe3, 0x18, 0x97, 0x73, 0x22, 0xd6, 0xc6, 0xae, 0x30, 0x33, 0xf1, 0x95, 0x31, 0x27,
0x66, 0xf0, 0xe0, 0xf5, 0xc7, 0x2c, 0x8a, 0x3a, 0x2c, 0x3f, 0x0a, 0x7d, 0x63, 0x31, 0x60, 0xe7,
0x9f, 0x13, 0x93, 0xbb, 0x6e, 0x16, 0x33, 0x52, 0x6e, 0x80, 0x14, 0xec, 0xc6, 0x3d, 0xc2, 0x13,
0xc8, 0xdb, 0x44, 0xd5, 0xeb, 0xd6, 0xca, 0xa4, 0xae, 0x1d, 0x02, 0x06, 0x33, 0x90, 0xae, 0x52,
0x95, 0xaf, 0x58, 0xc4, 0x9c, 0x96, 0xff, 0x23, 0x0d, 0xd2, 0x85, 0x6d, 0x50, 0xf2, 0x17, 0x3e,
0xd5, 0x11, 0x0b, 0x4c, 0x4b, 0x56, 0xe1, 0x0a, 0x8b, 0xb8, 0x23, 0x16, 0xff, 0x17, 0x2b, 0x87,
0x0e, 0x2c, 0xda, 0xfc, 0x91, 0x45, 0x1f, 0xf1, 0x1a, 0x8f, 0xf0, 0xfc, 0x7d, 0x6f, 0x87, 0xf6,
0xfd, 0x73, 0x28, 0xb3, 0x1d, 0x77, 0xcd, 0x2b, 0xcb, 0xdb, 0x35, 0x82, 0xad, 0x65, 0x60, 0x39,
0x4e, 0xcb, 0x7f, 0x06, 0x29, 0x10, 0x73, 0x95, 0x94, 0x94, 0x06, 0x58, 0xe4, 0x30, 0xfe, 0x51,
0x6c, 0x3b, 0x8b, 0x39, 0xcd, 0x78, 0x3c, 0x2e, 0x65, 0x79, 0x90, 0xf1, 0x63, 0xcf, 0xc2, 0xd2,
0xc7, 0xc6, 0x82, 0xb8, 0xa6, 0xf0, 0x86, 0xcc, 0x6c, 0x86, 0xd3, 0x30, 0x6c, 0xbe, 0xcb, 0x1c,
0x16, 0x03, 0xf9, 0xef, 0x41, 0xf2, 0xeb, 0x9c, 0xd0, 0x9d, 0x15, 0xc5, 0x4d, 0xd8, 0xcf, 0x02,
0x0e, 0xfa, 0x0c, 0xf6, 0xa8, 0xb1, 0x20, 0xd6, 0x8a, 0x2a, 0x44, 0xb3, 0x4c, 0xdd, 0x71, 0xc3,
0x5c, 0x8c, 0x2b, 0x3f, 0x83, 0xa2, 0x8f, 0xfd, 0xda, 0xba, 0x8c, 0xf7, 0x46, 0xe4, 0x4f, 0x43,
0x6b, 0xbf, 0xb6, 0x2e, 0x79, 0xb8, 0x96, 0x20, 0x6b, 0xe8, 0xa2, 0x3d, 0x53, 0xc2, 0x8c, 0x94,
0x7f, 0x80, 0x4a, 0xa7, 0xdb, 0xc0, 0x2b, 0xd3, 0x34, 0xcc, 0xd9, 0x6b, 0xeb, 0x92, 0x47, 0x5b,
0xcc, 0xbd, 0x3e, 0x84, 0x98, 0xe5, 0xdd, 0x16, 0x04, 0x5b, 0x37, 0x8b, 0xae, 0xee, 0x69, 0x89,
0xd1, 0xcc, 0xb0, 0x8e, 0xb5, 0xb2, 0x35, 0xe2, 0x46, 0x5d, 0x77, 0x24, 0xff, 0x19, 0xca, 0xa1,
0x93, 0x73, 0xb8, 0x5f, 0x42, 0xf6, 0x4f, 0xd6, 0x25, 0xc7, 0x8b, 0x87, 0xdf, 0xf0, 0x46, 0x31,
0x93, 0x62, 0x5a, 0x32, 0x9c, 0x96, 0x61, 0x1a, 0xce, 0xb5, 0x9f, 0x9a, 0x43, 0x9c, 0xe0, 0xb6,
0xbe, 0x76, 0x2c, 0x33, 0x48, 0xce, 0x1e, 0x47, 0x3e, 0x85, 0x42, 0xaf, 0xd9, 0xf0, 0x73, 0xff,
0x73, 0x28, 0x5c, 0xce, 0x0d, 0xf3, 0xed, 0x54, 0xf3, 0xef, 0x46, 0x09, 0x03, 0x67, 0xf1, 0xcb,
0x21, 0xff, 0xf7, 0x16, 0xec, 0x89, 0x37, 0x8f, 0x3f, 0xa7, 0x02, 0xbb, 0xc4, 0x14, 0xa5, 0x41,
0x5a, 0x34, 0x97, 0xdc, 0x21, 0x53, 0xe3, 0x8d, 0xa1, 0x7b, 0xd1, 0xfe, 0xc6, 0xe0, 0x9c, 0xa5,
0x9f, 0x79, 0x18, 0xc9, 0x3d, 0x5b, 0x35, 0x57, 0x57, 0xaa, 0x46, 0x57, 0x36, 0xb1, 0xb9, 0xbf,
0xe4, 0x71, 0x84, 0xc7, 0x56, 0x58, 0xda, 0x96, 0xbe, 0xd2, 0x28, 0x77, 0x9b, 0x3c, 0xf6, 0x86,
0x5c, 0xad, 0xc4, 0x36, 0x54, 0x91, 0xe1, 0x99, 0x5a, 0xf9, 0x08, 0x3d, 0x83, 0xc2, 0xca, 0x21,
0xd3, 0x7a, 0xa3, 0x3e, 0x6d, 0xd6, 0xfb, 0x3c, 0xcb, 0xe7, 0x70, 0x7e, 0xe5, 0x90, 0x7a, 0xa3,
0xde, 0xac, 0xf7, 0x59, 0x3e, 0x66, 0xdf, 0xf1, 0xa0, 0xd1, 0x55, 0x78, 0xb7, 0x26, 0x87, 0x73,
0x2b, 0x87, 0xf0, 0x31, 0x7a, 0x09, 0x12, 0xfb, 0xd8, 0xe9, 0x36, 0xa6, 0x6f, 0x9a, 0x7f, 0x57,
0x1b, 0x56, 0x71, 0xc3, 0xcd, 0xd9, 0x7b, 0x2b, 0x87, 0x74, 0xba, 0x0d, 0x8f, 0x8b, 0x64, 0x28,
0x79, 0x92, 0xfd, 0xe1, 0x44, 0x69, 0xf2, 0xc6, 0x4a, 0x0e, 0x17, 0x84, 0x18, 0x67, 0x79, 0x5b,
0x61, 0x32, 0xb8, 0x7a, 0xc1, 0xdb, 0x26, 0x62, 0x2b, 0xcc, 0x9f, 0xaa, 0x17, 0xe8, 0x21, 0xec,
0xb2, 0xef, 0x93, 0xbe, 0xc2, 0x5b, 0x20, 0x39, 0xbc, 0xb3, 0x72, 0xc8, 0xa4, 0xaf, 0xa0, 0xa7,
0x00, 0xec, 0x83, 0xd2, 0xc4, 0xdd, 0x6a, 0xcf, 0x2d, 0x0d, 0xd8, 0x3c, 0xc1, 0x40, 0xaf, 0x61,
0xcf, 0x36, 0x75, 0xc3, 0x99, 0xfa, 0x45, 0x9f, 0xe8, 0x4f, 0xfc, 0x2c, 0x5a, 0xb1, 0x46, 0x6c,
0xd5, 0xa4, 0xd7, 0xc4, 0x36, 0x09, 0xc5, 0x25, 0x3e, 0xd5, 0x37, 0x61, 0x1f, 0x24, 0x4d, 0xd7,
0xa6, 0x44, 0x5b, 0x04, 0x68, 0xe5, 0xf7, 0x47, 0xdb, 0xd3, 0x74, 0xad, 0xa9, 0x2d, 0x7c, 0xb8,
0x2a, 0x14, 0x57, 0x8b, 0xd0, 0xc6, 0x44, 0xe7, 0xe2, 0xd9, 0x06, 0xa8, 0x49, 0x5f, 0xc1, 0x85,
0xd5, 0xc2, 0xdf, 0x91, 0x3c, 0x82, 0xa3, 0xe4, 0xc5, 0x78, 0x29, 0x65, 0x39, 0x74, 0xaa, 0xea,
0xba, 0x97, 0xe8, 0x72, 0x8c, 0x51, 0xd5, 0x75, 0x1b, 0x3d, 0x82, 0x9c, 0x4e, 0x6e, 0xc4, 0x37,
0xe1, 0x76, 0xbb, 0x3a, 0xb9, 0x61, 0x9f, 0xe4, 0xdf, 0xc2, 0xfe, 0x9d, 0x35, 0x59, 0x38, 0xd2,
0x74, 0xdb, 0x5a, 0xb8, 0x9e, 0x2b, 0x06, 0xec, 0x02, 0xb3, 0x88, 0xec, 0x35, 0x59, 0x19, 0x2d,
0x4f, 0xe1, 0x13, 0xf1, 0xf2, 0x21, 0xba, 0xb7, 0x95, 0xae, 0x49, 0x89, 0x7d, 0xa5, 0x6a, 0xc4,
0x3f, 0xf8, 0x77, 0xb0, 0xc5, 0x8b, 0x43, 0xd1, 0xd7, 0x8d, 0xf6, 0xeb, 0xd6, 0xce, 0xc2, 0x7c,
0x8e, 0xfc, 0xcf, 0x59, 0x78, 0xb4, 0x1e, 0x39, 0x29, 0x1a, 0x7f, 0xef, 0x46, 0x5e, 0xf1, 0x52,
0xf9, 0xe5, 0xfb, 0xad, 0x76, 0x1a, 0x2a, 0x11, 0x59, 0xf0, 0x58, 0x32, 0xe5, 0x10, 0xc7, 0x39,
0xf7, 0x82, 0x43, 0xc0, 0x61, 0x99, 0xca, 0x24, 0x74, 0xa1, 0x3a, 0x6f, 0xcf, 0xdd, 0x7b, 0xe9,
0x8f, 0xc3, 0xb7, 0x7e, 0x3b, 0x7a, 0xeb, 0x87, 0x80, 0xf4, 0x6b, 0x6d, 0xa9, 0x10, 0xfb, 0x86,
0xd8, 0x7e, 0x35, 0x29, 0x5a, 0xb9, 0xcf, 0x23, 0x9b, 0x6c, 0x74, 0xea, 0xa3, 0xa8, 0x18, 0x4e,
0x98, 0x8a, 0x3e, 0x85, 0x92, 0xe7, 0x4a, 0x5d, 0x73, 0xe2, 0x10, 0xf7, 0x3a, 0x47, 0x99, 0x72,
0x1d, 0xb6, 0x78, 0xd5, 0x0f, 0xb0, 0xd3, 0xaf, 0x0e, 0x26, 0xd5, 0x9e, 0x94, 0x42, 0x65, 0x28,
0xb0, 0x35, 0xa6, 0xf5, 0x5e, 0xb7, 0x39, 0x18, 0x4b, 0x69, 0x9f, 0xa1, 0x34, 0xf1, 0x0f, 0x4d,
0x2c, 0x65, 0xd8, 0x03, 0x73, 0x32, 0xe8, 0x57, 0x07, 0xd5, 0x76, 0xb3, 0x21, 0x65, 0xe5, 0xff,
0xcb, 0x02, 0xba, 0xbb, 0xab, 0xa0, 0x7e, 0x1c, 0x59, 0xb6, 0x1f, 0x15, 0x03, 0x0e, 0x7a, 0x09,
0x65, 0x31, 0xf2, 0xd5, 0xed, 0xfa, 0x4e, 0x9c, 0xcd, 0x9b, 0x3a, 0x44, 0x75, 0x78, 0x1d, 0xe1,
0x6a, 0x3c, 0x60, 0xa0, 0x13, 0x90, 0x4c, 0x8b, 0xb2, 0xa7, 0x8c, 0x65, 0x1b, 0x54, 0xe5, 0x5d,
0x79, 0x91, 0xea, 0xef, 0xf0, 0xd1, 0x29, 0x20, 0xdd, 0x1a, 0x58, 0xb4, 0x66, 0x98, 0x7a, 0xb0,
0xac, 0xb0, 0x45, 0xc2, 0x17, 0x96, 0x2f, 0x35, 0x75, 0x3e, 0xbf, 0x54, 0xb5, 0xb7, 0x6e, 0x43,
0x51, 0x84, 0xcc, 0x18, 0x17, 0x9d, 0xc3, 0x8e, 0xad, 0x9a, 0x33, 0xe2, 0x54, 0x76, 0xb9, 0x17,
0x3f, 0x59, 0x63, 0x32, 0xcc, 0x84, 0xb0, 0x2b, 0x8b, 0x5a, 0xb0, 0x6b, 0x2d, 0xc5, 0x8f, 0x1a,
0xe2, 0x65, 0xf4, 0xd7, 0xf7, 0x58, 0xfa, 0x74, 0x28, 0xc4, 0x9b, 0x26, 0xb5, 0x6f, 0xb1, 0x37,
0x19, 0xd5, 0xa1, 0xe0, 0xb0, 0x03, 0x6a, 0x1d, 0xcb, 0xa1, 0x4e, 0x25, 0xcf, 0xb1, 0x3e, 0x59,
0x87, 0xe5, 0x4b, 0xe2, 0xf0, 0xac, 0xe3, 0xef, 0xa0, 0x18, 0x46, 0x67, 0x59, 0xe7, 0x2d, 0xb9,
0x75, 0xed, 0xc6, 0xc8, 0xe8, 0x1b, 0x3c, 0xef, 0xbe, 0xc1, 0xbf, 0xcb, 0x7c, 0x9b, 0x96, 0x2d,
0x28, 0xc7, 0xce, 0xc8, 0x73, 0x28, 0x23, 0x7a, 0xd6, 0x3b, 0xbf, 0x13, 0x17, 0xe2, 0xf8, 0xdf,
0x27, 0xcb, 0x25, 0xf1, 0xc2, 0x4e, 0x88, 0xe3, 0xdb, 0x9c, 0xd7, 0x43, 0x61, 0x9b, 0x33, 0x86,
0xfc, 0x2d, 0x1c, 0x24, 0x9d, 0x88, 0xbf, 0x83, 0x54, 0xcd, 0x7f, 0x07, 0xa9, 0x1a, 0xaf, 0x33,
0x96, 0x2e, 0x7e, 0xc6, 0x58, 0xca, 0xbb, 0xb0, 0xdd, 0x5c, 0x2c, 0xe9, 0xed, 0xc9, 0xaf, 0x40,
0x8a, 0xf7, 0xb0, 0xd0, 0x0e, 0x64, 0x26, 0x23, 0x29, 0x85, 0x72, 0xb0, 0xd5, 0x18, 0x5e, 0x0c,
0xa4, 0x34, 0xda, 0x85, 0xec, 0xb0, 0xd5, 0x92, 0x32, 0x27, 0x9f, 0x03, 0x04, 0x3d, 0x2b, 0x76,
0x5f, 0x70, 0x57, 0xe9, 0x0e, 0xda, 0xa2, 0x1d, 0xd3, 0xaa, 0xf6, 0x7a, 0x6c, 0xc0, 0xdb, 0x31,
0xb5, 0xe1, 0xb8, 0x23, 0x65, 0x4e, 0xfe, 0x27, 0x0d, 0xbb, 0x6e, 0xa3, 0x04, 0xe5, 0x61, 0x7b,
0x30, 0xe9, 0x4f, 0xbf, 0x94, 0x52, 0x1e, 0x79, 0x26, 0xa5, 0x3d, 0xf2, 0x2b, 0x29, 0xe3, 0x91,
0xe7, 0x52, 0xd6, 0x23, 0xbf, 0x96, 0xb6, 0x3c, 0xf2, 0x95, 0xb4, 0xed, 0x91, 0xdf, 0x48, 0x3b,
0x1e, 0xf9, 0xad, 0xb4, 0xeb, 0x91, 0xbf, 0x96, 0x72, 0x6c, 0x47, 0x7c, 0x89, 0x2f, 0xa4, 0xbc,
0x4f, 0x7f, 0x29, 0x81, 0x4f, 0x9f, 0x49, 0x05, 0x9f, 0xfe, 0x4a, 0x2a, 0xfa, 0xf4, 0xb9, 0x54,
0xf2, 0xe9, 0xaf, 0xa5, 0x3d, 0x9f, 0x7e, 0x25, 0x95, 0x7d, 0xfa, 0x1b, 0x49, 0xf2, 0xe9, 0x6f,
0xa5, 0x7d, 0x9f, 0xfe, 0xb5, 0x84, 0x3c, 0xfa, 0xec, 0x0b, 0xe9, 0xc1, 0xc9, 0xaf, 0xa0, 0x18,
0x6e, 0xf6, 0x30, 0xe5, 0xf5, 0x86, 0x17, 0x42, 0x9f, 0x9d, 0x6e, 0xbb, 0x23, 0xa5, 0x99, 0xf8,
0x78, 0xd8, 0x6e, 0xf7, 0x9a, 0x52, 0xe6, 0xa4, 0x01, 0xe5, 0x58, 0x0b, 0x83, 0xe9, 0x72, 0x32,
0x78, 0x33, 0x60, 0xba, 0x4f, 0x31, 0x6b, 0x54, 0x47, 0xc2, 0x06, 0xca, 0xb8, 0x2a, 0x65, 0xd0,
0x03, 0x28, 0x2b, 0xe3, 0xea, 0xb4, 0x55, 0xed, 0xf6, 0x86, 0x3f, 0x34, 0xf1, 0xb4, 0x3a, 0x92,
0xb2, 0x27, 0x0d, 0x28, 0x45, 0x5e, 0xf2, 0xe8, 0x10, 0xf6, 0x99, 0xd4, 0x60, 0x38, 0x9e, 0xd6,
0x87, 0x83, 0x41, 0xb3, 0x3e, 0x6e, 0x36, 0x84, 0xe2, 0xab, 0xa3, 0xe9, 0x84, 0x01, 0xee, 0x43,
0x89, 0x49, 0x04, 0x5f, 0x33, 0x27, 0x9f, 0x89, 0x7e, 0x8e, 0xd7, 0x10, 0x41, 0x45, 0xc8, 0x5d,
0x8c, 0xaa, 0x67, 0xd3, 0x91, 0xf2, 0x46, 0xec, 0x7f, 0x38, 0x6a, 0x0e, 0xa4, 0xf4, 0xc9, 0xdf,
0x80, 0x14, 0x7f, 0xa3, 0xb0, 0xfd, 0x8d, 0xfb, 0xcc, 0x6d, 0x24, 0x28, 0xd6, 0xaa, 0x4a, 0x67,
0xaa, 0xd4, 0x71, 0x77, 0x34, 0x56, 0x44, 0xe8, 0x64, 0x35, 0x8c, 0xc7, 0xc8, 0x9c, 0xfd, 0xdb,
0x31, 0xec, 0x8c, 0xce, 0x2f, 0x06, 0xa3, 0x2f, 0x51, 0x1f, 0x2a, 0x6d, 0x42, 0xbd, 0xfc, 0x18,
0x49, 0xb3, 0x08, 0x45, 0xf3, 0x12, 0x73, 0xd8, 0xe3, 0xc7, 0x1b, 0x4a, 0x01, 0x39, 0x85, 0x3a,
0xf0, 0x40, 0x60, 0x7d, 0x34, 0x52, 0x0b, 0xf6, 0xdb, 0x84, 0xc6, 0x0a, 0xd6, 0x0f, 0xc0, 0x19,
0xc2, 0xbe, 0x72, 0x07, 0x67, 0xd3, 0x9c, 0xfb, 0x00, 0x7f, 0x07, 0x7b, 0x6d, 0x42, 0xc3, 0xa5,
0x77, 0xd2, 0xae, 0x2a, 0x11, 0x5e, 0x48, 0x5a, 0x20, 0x28, 0x51, 0x84, 0xb5, 0xd2, 0xc7, 0x09,
0xd8, 0x72, 0x0a, 0x35, 0xa0, 0xd8, 0x67, 0x45, 0xfd, 0xa4, 0xaf, 0xf0, 0xec, 0x73, 0x4f, 0x81,
0xb6, 0x06, 0x65, 0x0a, 0xcf, 0x85, 0xb1, 0xd6, 0x17, 0x2f, 0xef, 0x59, 0x08, 0xad, 0x59, 0xc0,
0x82, 0x5f, 0xb4, 0x09, 0xad, 0xce, 0xe7, 0xf7, 0xd7, 0x5f, 0x49, 0x3a, 0x3c, 0x8d, 0x26, 0x8f,
0xfb, 0x30, 0xe4, 0x14, 0x9a, 0xc3, 0xa7, 0x21, 0x6f, 0x5e, 0xbf, 0x5a, 0xb4, 0x07, 0x17, 0x69,
0x51, 0x1d, 0xbf, 0xe7, 0x91, 0xe5, 0x14, 0xea, 0xf3, 0xf7, 0x29, 0x5e, 0x99, 0x6e, 0xfe, 0x7d,
0x9a, 0xfc, 0xe2, 0x73, 0x9f, 0xc5, 0xc7, 0x4f, 0xd6, 0x7d, 0x66, 0x4f, 0x3a, 0x0e, 0x57, 0x0e,
0xc3, 0xb1, 0x17, 0xef, 0x3d, 0x88, 0xeb, 0x9f, 0x98, 0x72, 0x0a, 0x61, 0x38, 0xec, 0x74, 0x1b,
0x6d, 0x42, 0x83, 0x77, 0xa7, 0x78, 0xa5, 0xae, 0x9f, 0x75, 0xef, 0x16, 0x9b, 0x80, 0x3a, 0xdd,
0x46, 0x5d, 0x35, 0x35, 0x32, 0x0f, 0x76, 0xb9, 0x01, 0x30, 0xd9, 0x2f, 0x06, 0xf0, 0x50, 0x6c,
0xcd, 0x7d, 0x95, 0xfb, 0xf2, 0xc9, 0x7e, 0xf0, 0x74, 0x2d, 0x3e, 0x7b, 0xf2, 0xcb, 0x29, 0x54,
0x83, 0x23, 0x7f, 0x5b, 0xd5, 0xf9, 0xfc, 0x1e, 0xb8, 0xe4, 0x3d, 0xfd, 0xde, 0x53, 0x57, 0xac,
0x53, 0xb0, 0xe9, 0x74, 0x3f, 0x8f, 0x7f, 0x4a, 0xec, 0x32, 0xf0, 0x0d, 0x16, 0x5a, 0x8a, 0xdf,
0x85, 0x8a, 0x99, 0x35, 0xde, 0x9d, 0x5a, 0xb3, 0xc1, 0x37, 0x00, 0x2d, 0xc5, 0x6b, 0x88, 0xa1,
0xa8, 0xa5, 0x62, 0x5d, 0xbb, 0x98, 0xc6, 0xe2, 0x5d, 0x34, 0x6e, 0x81, 0x52, 0x4b, 0x69, 0x13,
0xea, 0xf5, 0x8e, 0x62, 0x78, 0xb1, 0xce, 0x53, 0x0c, 0x2f, 0xde, 0x70, 0x92, 0x53, 0xe8, 0x8f,
0x70, 0xd8, 0x52, 0xea, 0x36, 0x51, 0x29, 0x89, 0xf4, 0x1e, 0x51, 0xec, 0x9f, 0x14, 0x09, 0x9d,
0xcf, 0x63, 0x79, 0x93, 0x88, 0xbf, 0xc2, 0xef, 0xa0, 0xc0, 0xbb, 0xa9, 0x3d, 0x5e, 0x96, 0xc7,
0xac, 0x12, 0x6e, 0x19, 0xc7, 0xd5, 0xc7, 0x3e, 0xc9, 0xa9, 0x2f, 0xd2, 0xa8, 0x0d, 0x85, 0xa6,
0x76, 0xed, 0x77, 0xd3, 0x36, 0xc5, 0x80, 0x0d, 0xdf, 0xe4, 0x14, 0xea, 0x02, 0x12, 0x21, 0x26,
0xf2, 0xe3, 0xcb, 0xfa, 0x76, 0xfb, 0xf1, 0x51, 0x72, 0xcb, 0x5f, 0x4e, 0xa1, 0xdf, 0x40, 0xb1,
0x4d, 0x68, 0xf0, 0x53, 0x41, 0x92, 0xbf, 0xae, 0x9f, 0xdd, 0x82, 0x23, 0xa1, 0x0e, 0x9f, 0x59,
0xbf, 0x16, 0x45, 0xfd, 0x4f, 0xc3, 0xc1, 0xb0, 0xaf, 0x50, 0xcb, 0x26, 0x17, 0xc6, 0x55, 0x70,
0x9e, 0x5f, 0xc4, 0xc4, 0xd7, 0xfd, 0xc2, 0xb5, 0xc6, 0x5d, 0x47, 0x70, 0xc8, 0x62, 0x0f, 0x83,
0xd5, 0x23, 0xb8, 0x9b, 0xf4, 0xbe, 0x5e, 0x87, 0x1c, 0xb1, 0xe2, 0xfe, 0x82, 0xf9, 0xd3, 0x40,
0xd7, 0x9f, 0xbb, 0x0f, 0x8f, 0x38, 0x96, 0x97, 0x30, 0xde, 0x1b, 0x32, 0xf9, 0xc8, 0x43, 0x61,
0x8e, 0x84, 0xed, 0x25, 0x99, 0xe3, 0xf9, 0x7a, 0x7c, 0xf1, 0x53, 0x08, 0xb3, 0xcb, 0xe3, 0x50,
0x3a, 0xbb, 0xf3, 0xaf, 0xb4, 0xfb, 0x63, 0x65, 0x7c, 0x0a, 0x4f, 0xfa, 0x4f, 0x05, 0x60, 0xfc,
0x1b, 0x26, 0xcb, 0x39, 0x7b, 0x6d, 0x6e, 0x46, 0xb8, 0x7f, 0x81, 0xdf, 0xc3, 0xa3, 0xe4, 0x05,
0xaa, 0xba, 0xfe, 0xd1, 0xe0, 0x7f, 0x80, 0x27, 0xeb, 0x76, 0xbf, 0xb0, 0x6e, 0x3e, 0x7e, 0xf3,
0x63, 0x78, 0x1c, 0x98, 0x30, 0xfe, 0xfd, 0x83, 0xed, 0xd8, 0x83, 0x43, 0x8e, 0x78, 0xc7, 0x82,
0xf7, 0x6c, 0x37, 0xd9, 0xcd, 0x2e, 0xe1, 0x67, 0xe1, 0x7b, 0xb0, 0xce, 0x8e, 0x9b, 0xfc, 0xf7,
0x3d, 0xf4, 0xfc, 0x7c, 0xd3, 0x1a, 0xcc, 0x94, 0x1f, 0x85, 0xdf, 0x87, 0x83, 0x40, 0xcf, 0x7e,
0x4e, 0xfd, 0x60, 0x05, 0x0f, 0xe0, 0x30, 0x80, 0x0b, 0xfe, 0xb0, 0xf1, 0xa1, 0x78, 0x97, 0x3b,
0xfc, 0x7f, 0xa1, 0x5f, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xe7, 0x13, 0x02, 0x25,
0x2a, 0x00, 0x00,
// 3646 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x49, 0x77, 0x23, 0x47,
0x72, 0xc6, 0xc2, 0x05, 0x08, 0x00, 0x44, 0x31, 0x9b, 0x64, 0xa3, 0xd9, 0xab, 0x4a, 0xcb, 0xd0,
0x1c, 0x0f, 0x25, 0x51, 0x54, 0x4b, 0xa3, 0x37, 0x63, 0x0d, 0x76, 0xa0, 0x1b, 0xdb, 0xcb, 0x02,
0x44, 0x8f, 0xc7, 0x6f, 0x30, 0xc5, 0xaa, 0x24, 0x58, 0x6a, 0xa0, 0x0a, 0xae, 0x85, 0x2d, 0xfa,
0x30, 0x7e, 0xcf, 0x27, 0x1f, 0x7c, 0xf7, 0x5f, 0xf0, 0xc9, 0x37, 0xdb, 0xbf, 0xc8, 0x77, 0x5f,
0x7c, 0xf6, 0xbc, 0xcc, 0xac, 0x9d, 0x05, 0x90, 0xdd, 0xfd, 0x74, 0x8b, 0x8c, 0x8a, 0xfc, 0x32,
0x32, 0x22, 0x32, 0x32, 0x32, 0x00, 0x80, 0x99, 0xb9, 0x54, 0x4e, 0x96, 0xa6, 0x61, 0x1b, 0xa8,
0x30, 0x3a, 0x7b, 0xab, 0x8f, 0xbe, 0x9c, 0x52, 0x96, 0xf8, 0x23, 0x08, 0x63, 0x53, 0x9b, 0xcd,
0x88, 0x59, 0x55, 0x6c, 0xcd, 0xd0, 0x25, 0x62, 0xa3, 0x1a, 0xec, 0x44, 0x78, 0x56, 0x25, 0xfd,
0x22, 0x7b, 0x54, 0x38, 0x3d, 0x3c, 0x09, 0xcd, 0x3c, 0x89, 0x88, 0xe0, 0xd8, 0x0c, 0x84, 0x60,
0x63, 0x20, 0x2f, 0x48, 0x25, 0xf3, 0x22, 0x7d, 0x94, 0xc7, 0x8c, 0x16, 0xff, 0x0b, 0xa0, 0x14,
0x11, 0x43, 0x3b, 0x90, 0xd1, 0xd4, 0x4a, 0xfa, 0x45, 0xfa, 0xa8, 0x84, 0x33, 0x9a, 0x8a, 0x2a,
0xb0, 0x6d, 0xe8, 0x44, 0xba, 0x32, 0x6c, 0x36, 0x31, 0x87, 0xbd, 0x21, 0x3a, 0x84, 0x9c, 0x66,
0xd1, 0x59, 0xd7, 0xa4, 0x92, 0x65, 0x9f, 0xfc, 0x31, 0x7a, 0x02, 0x79, 0x6d, 0xb1, 0x70, 0x6c,
0xf9, 0x62, 0x4e, 0x2a, 0x1b, 0xec, 0x63, 0xc0, 0x40, 0x3d, 0xd8, 0xb1, 0x88, 0x79, 0xad, 0x29,
0x44, 0xb2, 0x65, 0xd3, 0x26, 0x6a, 0x65, 0xf3, 0x45, 0xfa, 0xa8, 0x70, 0x2a, 0x26, 0xed, 0x46,
0x8a, 0x48, 0x76, 0x52, 0x38, 0x36, 0x17, 0xfd, 0x2d, 0x20, 0xc7, 0xba, 0x68, 0xcb, 0xea, 0x8c,
0xd8, 0x75, 0x43, 0xd7, 0x89, 0x42, 0x11, 0xb7, 0x18, 0xe2, 0x67, 0x49, 0x88, 0x13, 0xa9, 0x16,
0x93, 0xee, 0xa4, 0x70, 0x02, 0x06, 0x92, 0x61, 0xdf, 0xe7, 0x36, 0x34, 0x4b, 0xf1, 0xc1, 0xb7,
0x19, 0xf8, 0x5f, 0xad, 0x05, 0x0f, 0x4f, 0xe8, 0xa4, 0x70, 0x32, 0x12, 0xea, 0x42, 0xe9, 0xad,
0x76, 0xa9, 0x55, 0x47, 0x9e, 0x25, 0x72, 0x0c, 0xfa, 0xa3, 0x24, 0xe8, 0xf3, 0xb0, 0x60, 0x27,
0x85, 0xa3, 0x33, 0xa9, 0x1d, 0x28, 0xc3, 0x57, 0xbf, 0x6a, 0x49, 0xb6, 0x5c, 0xc9, 0xaf, 0xb6,
0xc3, 0xf9, 0x2d, 0x69, 0x6a, 0x87, 0xdb, 0x18, 0xe8, 0x3b, 0xc8, 0x59, 0xd6, 0x55, 0xcf, 0x98,
0x69, 0x7a, 0x05, 0x18, 0xde, 0x93, 0x44, 0x4f, 0x49, 0x1d, 0x26, 0xd3, 0x49, 0x61, 0x5f, 0x1e,
0x61, 0x10, 0xd4, 0x2b, 0x65, 0xd9, 0x23, 0xb2, 0x45, 0xda, 0xa6, 0xac, 0xd3, 0x3d, 0x16, 0x18,
0xc6, 0x27, 0x49, 0x18, 0x8d, 0x4e, 0x7d, 0x14, 0x96, 0xed, 0xa4, 0xf0, 0xad, 0xf9, 0xa8, 0x05,
0xc5, 0x99, 0x69, 0x38, 0x4b, 0x4c, 0x14, 0x42, 0xa3, 0xaf, 0xc8, 0xf0, 0x5e, 0x24, 0xe1, 0xb5,
0x43, 0x72, 0x9d, 0x14, 0x8e, 0xcc, 0x43, 0x7f, 0x84, 0xbd, 0xf0, 0x58, 0x22, 0xff, 0xe0, 0x10,
0x5d, 0x21, 0x95, 0x12, 0xc3, 0x3b, 0xba, 0x0b, 0xcf, 0x93, 0xef, 0xa4, 0x70, 0x22, 0x0e, 0x3a,
0x83, 0xad, 0xd9, 0x52, 0x33, 0xba, 0x7a, 0x65, 0x87, 0x21, 0x26, 0x9e, 0xd6, 0xf6, 0xa8, 0x3b,
0xec, 0x52, 0x9b, 0xb9, 0xb2, 0xa8, 0x01, 0x70, 0x21, 0x5b, 0x57, 0x92, 0x62, 0x6a, 0x4b, 0xbb,
0x52, 0x4e, 0x38, 0x19, 0x6e, 0x5e, 0xa0, 0x7e, 0xaf, 0xf9, 0x92, 0x9d, 0x34, 0x0e, 0xcd, 0x43,
0x55, 0xc8, 0x5f, 0x69, 0xaa, 0x0b, 0x22, 0x24, 0x04, 0x55, 0x08, 0xa4, 0xd3, 0x6d, 0xf8, 0x18,
0xc1, 0x2c, 0xa4, 0xc0, 0x81, 0x4a, 0x96, 0x73, 0xe3, 0x46, 0x22, 0xb6, 0xad, 0xe9, 0x33, 0x6b,
0x4c, 0x16, 0xcb, 0xb9, 0x6c, 0x93, 0xca, 0x6e, 0x42, 0xfc, 0x73, 0xbc, 0x46, 0xe2, 0x84, 0x4e,
0x1a, 0xaf, 0x80, 0x42, 0xc7, 0x90, 0x9d, 0x1b, 0xb3, 0x0a, 0x62, 0x88, 0x07, 0x09, 0x88, 0x3d,
0x63, 0xd6, 0x49, 0x63, 0x2a, 0x84, 0x5e, 0xc2, 0x36, 0xb5, 0xd1, 0xd0, 0xb1, 0x2b, 0x0f, 0x12,
0x0c, 0xca, 0xe5, 0xa9, 0x3d, 0x87, 0x0e, 0xdd, 0x8a, 0x27, 0x8c, 0x7e, 0x03, 0x79, 0xe6, 0x1f,
0x89, 0xe8, 0x6a, 0x65, 0x2f, 0x21, 0x80, 0xdd, 0x99, 0x9e, 0x0c, 0x35, 0x83, 0x3f, 0xa1, 0x96,
0x87, 0x6d, 0xd7, 0x55, 0xb5, 0x1c, 0x6c, 0x71, 0x51, 0xf1, 0x21, 0xec, 0x27, 0xe6, 0x27, 0xf1,
0x31, 0x3c, 0x5a, 0x99, 0x66, 0xc4, 0x67, 0xf0, 0x64, 0x5d, 0x9a, 0x10, 0x0f, 0x60, 0x2f, 0xe9,
0xac, 0x87, 0x40, 0x6f, 0x9f, 0x59, 0xf1, 0x73, 0x28, 0xc7, 0x0e, 0x20, 0x4d, 0xbf, 0x73, 0x4a,
0x4c, 0x2c, 0x62, 0xb2, 0x5c, 0x9e, 0xc7, 0x01, 0x43, 0x7c, 0x04, 0x0f, 0x57, 0x9c, 0x36, 0xb1,
0x0b, 0x0f, 0x12, 0x02, 0x9d, 0xe2, 0x31, 0x7b, 0xb0, 0xfb, 0xc3, 0xc5, 0xf3, 0x19, 0x68, 0x0f,
0x36, 0xaf, 0xe5, 0xb9, 0xc3, 0x6f, 0x96, 0x4d, 0xcc, 0x07, 0xe2, 0x3f, 0xc1, 0xe3, 0x35, 0x67,
0xe6, 0x0e, 0xc8, 0x63, 0x10, 0xba, 0x33, 0xdd, 0x30, 0xc9, 0xd0, 0xb1, 0x87, 0x97, 0x43, 0x53,
0x25, 0xa6, 0x7b, 0xfd, 0xdc, 0xe2, 0xa3, 0x03, 0xd8, 0x62, 0x2b, 0x5a, 0x95, 0xec, 0x8b, 0xec,
0xd1, 0x26, 0x76, 0x47, 0xe2, 0x7f, 0xa7, 0xfd, 0xbb, 0x8d, 0x9f, 0x31, 0x74, 0xc2, 0xe3, 0x67,
0xe0, 0x2c, 0xd8, 0x8a, 0x3b, 0xa7, 0x7b, 0x91, 0x28, 0xa0, 0x52, 0x03, 0x67, 0x81, 0x3d, 0x21,
0xf4, 0x5b, 0x80, 0xa5, 0x33, 0x9f, 0x4f, 0x96, 0x0d, 0xe3, 0xad, 0xce, 0xd6, 0xdf, 0x39, 0x7d,
0x7a, 0x6b, 0x4a, 0x57, 0x1f, 0xf9, 0x42, 0x38, 0x34, 0x01, 0x7d, 0x03, 0xc0, 0x8f, 0x74, 0x53,
0x9d, 0xf1, 0x2b, 0x72, 0xe7, 0xf4, 0x61, 0xc2, 0x74, 0xfa, 0x19, 0x87, 0x44, 0xc5, 0x6f, 0x60,
0x3f, 0xf1, 0x88, 0xa3, 0x67, 0x00, 0x16, 0xa3, 0x42, 0x56, 0x0b, 0x71, 0xc4, 0x97, 0xb0, 0x97,
0x74, 0xac, 0xef, 0x9c, 0xf7, 0x7f, 0x69, 0x78, 0xb2, 0xee, 0xfc, 0x22, 0x11, 0x8a, 0xb6, 0x4b,
0x87, 0x20, 0x22, 0x3c, 0xf4, 0x0a, 0x36, 0xec, 0x9b, 0x25, 0x71, 0xed, 0xf4, 0xf2, 0xde, 0xc9,
0xe1, 0xc4, 0x23, 0xc6, 0x37, 0x4b, 0x82, 0x19, 0x86, 0x48, 0xa0, 0x18, 0xe6, 0xa2, 0x5d, 0x28,
0xb5, 0x26, 0xbd, 0xde, 0x54, 0x6a, 0x8e, 0xc7, 0xdd, 0x41, 0x5b, 0x12, 0x52, 0xa8, 0x00, 0xdb,
0x83, 0xe6, 0xf8, 0x7c, 0x88, 0x5f, 0x0b, 0x69, 0x94, 0x83, 0x8d, 0xf3, 0x6e, 0xab, 0x2b, 0x64,
0xd0, 0x36, 0x64, 0x27, 0x52, 0x4d, 0xc8, 0xa2, 0x12, 0xe4, 0x6b, 0xbd, 0x49, 0x73, 0x3c, 0x1c,
0x8e, 0x3b, 0xc2, 0x06, 0x7a, 0x00, 0xe5, 0x31, 0xee, 0xb6, 0xdb, 0x4d, 0x3c, 0xad, 0xd6, 0xc7,
0xdd, 0xe1, 0x40, 0x12, 0x36, 0xc5, 0x02, 0xe4, 0xfd, 0x24, 0x23, 0x2e, 0xa1, 0x14, 0xc9, 0x20,
0xef, 0x1c, 0x2e, 0x9f, 0x87, 0xcf, 0xc1, 0xce, 0xe9, 0xa3, 0x5b, 0xd2, 0x43, 0xc7, 0xfe, 0x81,
0x0a, 0x78, 0x47, 0xa4, 0x09, 0xe5, 0x58, 0xe6, 0x79, 0xaf, 0x93, 0xf6, 0x16, 0x0e, 0x69, 0x5a,
0xc0, 0xf4, 0x68, 0x59, 0xb6, 0x67, 0x5e, 0xc9, 0x36, 0x4c, 0x79, 0xc6, 0x5c, 0x37, 0x4e, 0x70,
0x5d, 0x98, 0x87, 0xbe, 0x86, 0x9c, 0xe5, 0x4e, 0x63, 0xd0, 0x85, 0x98, 0xf2, 0xe7, 0x5a, 0x4b,
0xf3, 0x70, 0xb1, 0x2f, 0x2a, 0xfe, 0x5b, 0x16, 0x8a, 0xe1, 0x4f, 0xb4, 0xc4, 0xd4, 0x83, 0x35,
0x18, 0x4d, 0xcb, 0x44, 0x55, 0xb3, 0x68, 0xdd, 0xa7, 0xba, 0x47, 0xd8, 0x1f, 0xd3, 0xb8, 0x34,
0xc9, 0xcc, 0x99, 0xcb, 0xb6, 0x61, 0xde, 0xb0, 0x13, 0x92, 0xc7, 0x21, 0x0e, 0xfa, 0x1e, 0x8a,
0x6f, 0x0d, 0xf3, 0x8d, 0xa6, 0xcf, 0xa6, 0x0b, 0x43, 0xe5, 0x95, 0xe4, 0x4e, 0x2c, 0x77, 0x53,
0x05, 0xce, 0xb9, 0x50, 0xdf, 0x50, 0x09, 0x2e, 0xbc, 0x0d, 0x06, 0xe8, 0x25, 0xe4, 0x65, 0xc7,
0xbe, 0xe2, 0xb3, 0x37, 0x13, 0xdc, 0x42, 0x67, 0x57, 0x1d, 0xfb, 0x8a, 0x4d, 0xcd, 0xc9, 0x2e,
0x45, 0xab, 0x5e, 0xe5, 0x4a, 0xd6, 0x75, 0x32, 0x67, 0x85, 0x64, 0x09, 0x7b, 0x43, 0x74, 0x02,
0x5b, 0xf2, 0x72, 0x5a, 0x93, 0x24, 0xb7, 0x08, 0x7c, 0x78, 0x0b, 0xae, 0x26, 0x49, 0xf5, 0xcb,
0x19, 0xde, 0x94, 0x97, 0x35, 0x49, 0x42, 0xdf, 0x43, 0x59, 0x99, 0x6b, 0x44, 0xb7, 0xe9, 0x9c,
0xe9, 0x5c, 0xb3, 0xec, 0x4a, 0x8e, 0x95, 0xee, 0x2b, 0x27, 0x96, 0xb8, 0x7c, 0x4d, 0x92, 0x7a,
0x9a, 0x65, 0xa3, 0xc7, 0xec, 0x22, 0x27, 0x53, 0xcb, 0xd2, 0x54, 0x56, 0xcd, 0xe5, 0x70, 0x8e,
0x32, 0x24, 0x4b, 0x53, 0x69, 0xee, 0xd3, 0xc9, 0x4f, 0x0b, 0x43, 0x67, 0x35, 0x4b, 0x0e, 0xbb,
0x23, 0xf1, 0x3f, 0xd2, 0x90, 0x67, 0x9e, 0xb1, 0xe9, 0xe9, 0x3d, 0x81, 0x0d, 0x66, 0x00, 0x1e,
0xc5, 0x87, 0xb7, 0x5d, 0x4b, 0xa5, 0x98, 0x05, 0x98, 0x5c, 0x78, 0xf7, 0x99, 0xe8, 0xee, 0x11,
0x6c, 0x30, 0x3d, 0xb8, 0xab, 0x18, 0x8d, 0xea, 0x50, 0x56, 0x1c, 0xd3, 0x24, 0xba, 0x1f, 0x7a,
0xcc, 0x4f, 0x6b, 0x63, 0x28, 0x3e, 0x43, 0x3c, 0x05, 0x08, 0x4c, 0x40, 0x97, 0x91, 0xa4, 0x6e,
0xc3, 0x8b, 0x23, 0x4a, 0x23, 0x01, 0xb2, 0x23, 0xe9, 0xb5, 0xfb, 0x7a, 0xa1, 0xa4, 0xf8, 0x11,
0x94, 0x24, 0xdb, 0xa4, 0xae, 0x26, 0x96, 0x45, 0x43, 0x5d, 0x80, 0xec, 0xc2, 0x9a, 0xb9, 0xb3,
0x28, 0x29, 0x7e, 0x01, 0x28, 0x22, 0x52, 0x35, 0x4d, 0xf9, 0x86, 0x86, 0xe4, 0xc2, 0x9a, 0x31,
0x9a, 0xbd, 0xa3, 0xf2, 0xd8, 0x1f, 0x8b, 0x27, 0x50, 0x6c, 0x5e, 0x13, 0xdd, 0x76, 0x4f, 0x13,
0x0d, 0x51, 0xea, 0x34, 0xa2, 0xd3, 0x3c, 0xc4, 0xa0, 0xb3, 0x38, 0xc4, 0x11, 0x65, 0x00, 0x26,
0xcf, 0x0e, 0x36, 0x3a, 0x84, 0x6d, 0xdb, 0x62, 0x0b, 0x72, 0x2d, 0x3a, 0x29, 0xec, 0x31, 0xd0,
0x01, 0x6c, 0xda, 0x17, 0x86, 0xc1, 0x6d, 0x9a, 0xeb, 0xa4, 0x30, 0x1f, 0xa2, 0x0a, 0x6c, 0xd9,
0x9a, 0x6e, 0xbf, 0x3c, 0x63, 0x56, 0xcd, 0xd2, 0x4a, 0x90, 0x8f, 0x6b, 0x9b, 0x90, 0xbd, 0x96,
0xe7, 0x62, 0x0f, 0x36, 0xd9, 0x12, 0xd4, 0x2c, 0x76, 0xa0, 0x05, 0xa3, 0xd1, 0xe7, 0xfe, 0xed,
0x97, 0x49, 0x08, 0xab, 0x40, 0x35, 0xff, 0x5a, 0xfc, 0x13, 0xec, 0xd1, 0xb3, 0xdf, 0xd0, 0xcc,
0xa1, 0xd9, 0xd2, 0xe6, 0xc4, 0xdb, 0xa8, 0x00, 0x59, 0x55, 0xf3, 0xaa, 0x05, 0x4a, 0xd2, 0xe0,
0x5a, 0x9a, 0xe4, 0x52, 0xfb, 0xc9, 0x35, 0xba, 0x3b, 0xa2, 0x26, 0x31, 0xf4, 0xf9, 0x4d, 0xcb,
0x98, 0xd3, 0x6b, 0x99, 0x3f, 0xfd, 0x42, 0x1c, 0x7a, 0x7d, 0xc5, 0x56, 0xb0, 0x96, 0x86, 0x6e,
0x11, 0x7e, 0xdc, 0x2d, 0x67, 0x6e, 0x8f, 0x64, 0xfb, 0xca, 0xbb, 0x86, 0x02, 0x8e, 0xf8, 0xaf,
0x69, 0x28, 0x63, 0x22, 0xab, 0x61, 0xb5, 0xbe, 0x86, 0xad, 0x4b, 0xbe, 0x50, 0x3a, 0xe1, 0xfe,
0xad, 0x2a, 0x0a, 0xb1, 0x2c, 0xed, 0x62, 0x4e, 0xf8, 0xda, 0xd8, 0x15, 0xa6, 0x2e, 0xbe, 0xd4,
0xe6, 0x44, 0x0f, 0x1e, 0xbc, 0xfe, 0x98, 0x66, 0x51, 0x8b, 0xde, 0x8f, 0xdc, 0xde, 0x98, 0x0f,
0xe8, 0xfe, 0xe7, 0x44, 0x67, 0xa1, 0x9b, 0xc5, 0x94, 0x14, 0x1b, 0x20, 0x04, 0xda, 0xb8, 0x5b,
0x78, 0x02, 0x79, 0x93, 0xc8, 0x6a, 0xdd, 0x70, 0x74, 0xdb, 0xf5, 0x43, 0xc0, 0xa0, 0x0e, 0x52,
0x65, 0x5b, 0x66, 0x2b, 0x16, 0x31, 0xa3, 0xc5, 0xff, 0x4c, 0x83, 0x70, 0x6e, 0x6a, 0x36, 0xf9,
0x99, 0x77, 0x75, 0x40, 0x13, 0xd3, 0x92, 0x56, 0xb8, 0xdc, 0x23, 0xee, 0x88, 0xe6, 0xff, 0x85,
0x63, 0xd9, 0x03, 0xc3, 0x6e, 0xfe, 0x44, 0xb3, 0x0f, 0x7f, 0x8d, 0x47, 0x78, 0xbe, 0xde, 0x9b,
0x21, 0xbd, 0x3f, 0x85, 0x32, 0xd5, 0xb8, 0xab, 0x5f, 0x1a, 0x9e, 0xd6, 0x08, 0x36, 0x96, 0x81,
0xe7, 0x18, 0x2d, 0xfe, 0x19, 0x84, 0x40, 0xcc, 0x35, 0x52, 0xd2, 0x35, 0x40, 0x33, 0x87, 0xf6,
0x8f, 0x5c, 0xed, 0x2c, 0x66, 0x34, 0xe5, 0xb1, 0xbc, 0x94, 0x65, 0x49, 0xc6, 0xcf, 0x3d, 0x0b,
0x43, 0x1d, 0x6b, 0x0b, 0xe2, 0xba, 0xc2, 0x1b, 0x52, 0xb7, 0x69, 0x56, 0x43, 0x33, 0x99, 0x96,
0x39, 0xcc, 0x07, 0xe2, 0xdf, 0x81, 0xe0, 0xd7, 0x39, 0xa1, 0x33, 0xcb, 0x8b, 0x9b, 0x70, 0x9c,
0x05, 0x1c, 0xf4, 0x19, 0xec, 0xd8, 0xda, 0x82, 0x18, 0x8e, 0x2d, 0x11, 0xc5, 0xd0, 0x55, 0xcb,
0x4d, 0x73, 0x31, 0xae, 0xf8, 0x0c, 0x8a, 0x3e, 0xf6, 0x2b, 0xe3, 0x22, 0xde, 0x1b, 0x11, 0x3f,
0x09, 0xad, 0xfd, 0xca, 0xb8, 0x60, 0xe9, 0x5a, 0x80, 0xac, 0xa6, 0xf2, 0xf6, 0x4c, 0x09, 0x53,
0x52, 0xfc, 0x01, 0x2a, 0x9d, 0x6e, 0x03, 0x3b, 0xba, 0xae, 0xe9, 0xb3, 0x57, 0xc6, 0x05, 0xcb,
0xb6, 0x98, 0x45, 0x7d, 0x08, 0x31, 0xcb, 0xba, 0x2d, 0x08, 0x36, 0xae, 0x17, 0x5d, 0xd5, 0xb3,
0x12, 0xa5, 0xa9, 0x63, 0x2d, 0xc3, 0x31, 0x15, 0xe2, 0x66, 0x5d, 0x77, 0x24, 0xfe, 0x19, 0xca,
0xa1, 0x9d, 0x33, 0xb8, 0x5f, 0x42, 0xf6, 0x47, 0xe3, 0x82, 0xe1, 0xc5, 0xd3, 0x6f, 0x58, 0x51,
0x4c, 0xa5, 0xa8, 0x95, 0x34, 0xab, 0xa5, 0xe9, 0x9a, 0x75, 0xe5, 0x5f, 0xcd, 0x21, 0x4e, 0x70,
0x5a, 0x5f, 0x59, 0x86, 0x1e, 0x5c, 0xce, 0x1e, 0x47, 0x3c, 0x81, 0x42, 0xaf, 0xd9, 0xf0, 0xef,
0xfe, 0xe7, 0x50, 0xb8, 0x98, 0x6b, 0xfa, 0x9b, 0xa9, 0xe2, 0x9f, 0x8d, 0x12, 0x06, 0xc6, 0x62,
0x87, 0x43, 0xfc, 0x9f, 0x0d, 0xd8, 0xe1, 0x6f, 0x1e, 0x7f, 0x4e, 0x05, 0xb6, 0x89, 0xce, 0x4b,
0x83, 0x34, 0x6f, 0x2e, 0xb9, 0x43, 0x6a, 0xc6, 0x6b, 0x4d, 0xf5, 0xb2, 0xfd, 0xb5, 0xc6, 0x38,
0x4b, 0xff, 0xe6, 0xa1, 0x24, 0x8b, 0x6c, 0x59, 0x77, 0x2e, 0x65, 0xc5, 0x76, 0x4c, 0x62, 0xb2,
0x78, 0xc9, 0xe3, 0x08, 0x8f, 0xae, 0xb0, 0x34, 0x0d, 0xd5, 0x51, 0x6c, 0x16, 0x36, 0x79, 0xec,
0x0d, 0x99, 0x59, 0x89, 0xa9, 0xc9, 0xfc, 0x86, 0xa7, 0x66, 0x65, 0x23, 0xf4, 0x0c, 0x0a, 0x8e,
0x45, 0xa6, 0xf5, 0x46, 0x7d, 0xda, 0xac, 0xf7, 0xd9, 0x2d, 0x9f, 0xc3, 0x79, 0xc7, 0x22, 0xf5,
0x46, 0xbd, 0x59, 0xef, 0xd3, 0xfb, 0x98, 0x7e, 0xc7, 0x83, 0x46, 0x57, 0x62, 0xdd, 0x9a, 0x1c,
0xce, 0x39, 0x16, 0x61, 0x63, 0x74, 0x04, 0x02, 0xfd, 0xd8, 0xe9, 0x36, 0xa6, 0xaf, 0x9b, 0xbf,
0xaf, 0x0d, 0xab, 0xb8, 0xe1, 0xde, 0xd9, 0x3b, 0x8e, 0x45, 0x3a, 0xdd, 0x86, 0xc7, 0x45, 0x22,
0x94, 0x3c, 0xc9, 0xfe, 0x70, 0x22, 0x35, 0x59, 0x63, 0x25, 0x87, 0x0b, 0x5c, 0x8c, 0xb1, 0x3c,
0x55, 0xa8, 0x0c, 0xae, 0x9e, 0xb3, 0xb6, 0x09, 0x57, 0x85, 0xc6, 0x53, 0xf5, 0x1c, 0x3d, 0x84,
0x6d, 0xfa, 0x7d, 0xd2, 0x97, 0x58, 0x0b, 0x24, 0x87, 0xb7, 0x1c, 0x8b, 0x4c, 0xfa, 0x12, 0x7a,
0x0a, 0x40, 0x3f, 0x48, 0x4d, 0xdc, 0xad, 0xf6, 0xdc, 0xd2, 0x80, 0xce, 0xe3, 0x0c, 0xf4, 0x0a,
0x76, 0x4c, 0x5d, 0xd5, 0xac, 0xa9, 0x5f, 0xf4, 0xf1, 0xfe, 0xc4, 0xc7, 0xd1, 0x8a, 0x35, 0xe2,
0xab, 0xa6, 0x7d, 0x45, 0x4c, 0x9d, 0xd8, 0xb8, 0xc4, 0xa6, 0xfa, 0x2e, 0xec, 0x83, 0xa0, 0xa8,
0xca, 0x94, 0x28, 0x8b, 0x00, 0xad, 0x7c, 0x7f, 0xb4, 0x1d, 0x45, 0x55, 0x9a, 0xca, 0xc2, 0x87,
0xab, 0x42, 0xd1, 0x59, 0x84, 0x14, 0xe3, 0x9d, 0x8b, 0x67, 0x6b, 0xa0, 0x26, 0x7d, 0x09, 0x17,
0x9c, 0x85, 0xaf, 0x91, 0x38, 0x82, 0x83, 0xe4, 0xc5, 0x58, 0x29, 0x65, 0x58, 0xf6, 0x54, 0x56,
0x55, 0xef, 0xa2, 0xcb, 0x51, 0x46, 0x55, 0x55, 0x4d, 0xf4, 0x08, 0x72, 0x2a, 0xb9, 0xe6, 0xdf,
0x78, 0xd8, 0x6d, 0xab, 0xe4, 0x9a, 0x7e, 0x12, 0x7f, 0x0b, 0xbb, 0xb7, 0xd6, 0xa4, 0xe9, 0x48,
0x51, 0x4d, 0x63, 0xe1, 0x46, 0x2e, 0x1f, 0xd0, 0x03, 0x4c, 0x33, 0xb2, 0xd7, 0x64, 0xa5, 0xb4,
0xf8, 0x2f, 0x69, 0x78, 0xe6, 0x6f, 0xf8, 0xfd, 0x8b, 0xf4, 0xda, 0xad, 0x22, 0x3d, 0xda, 0xd5,
0xf3, 0x96, 0xe8, 0xea, 0x36, 0x31, 0x2f, 0x65, 0x85, 0x24, 0x54, 0xec, 0x53, 0xf8, 0x88, 0x3f,
0xc2, 0x88, 0xba, 0x52, 0x1c, 0x7d, 0x07, 0x1b, 0xac, 0x4e, 0xe5, 0x2d, 0xe6, 0xfb, 0x2e, 0xc2,
0xe6, 0x88, 0xff, 0x9c, 0x85, 0x47, 0xab, 0x91, 0x93, 0x2e, 0x86, 0xef, 0xdd, 0x4b, 0x80, 0x3f,
0x9a, 0x7e, 0x79, 0xbf, 0xd5, 0x4e, 0x42, 0xd5, 0x2a, 0xcd, 0x63, 0x4b, 0xea, 0x27, 0x62, 0x59,
0x67, 0x5e, 0x9e, 0x0a, 0x38, 0xf4, 0xd2, 0xd4, 0x89, 0xbd, 0x90, 0xad, 0x37, 0x67, 0x6e, 0x8a,
0xf0, 0xc7, 0xe1, 0x04, 0xb4, 0x19, 0x4d, 0x40, 0x43, 0x40, 0xea, 0x95, 0xb2, 0x94, 0x88, 0x79,
0x4d, 0x4c, 0xbf, 0xb0, 0xe5, 0x5d, 0xe5, 0xe7, 0x11, 0x25, 0x1b, 0x9d, 0xfa, 0x28, 0x2a, 0x86,
0x13, 0xa6, 0xa2, 0x4f, 0xa0, 0xe4, 0xb9, 0xa1, 0xab, 0x4f, 0x2c, 0xe2, 0x66, 0x96, 0x28, 0x53,
0xac, 0xc3, 0x06, 0x7b, 0x80, 0x00, 0x6c, 0xf5, 0xab, 0x83, 0x49, 0xb5, 0x27, 0xa4, 0x50, 0x19,
0x0a, 0x74, 0x8d, 0x69, 0xbd, 0xd7, 0x6d, 0x0e, 0xc6, 0x42, 0xda, 0x67, 0x48, 0x4d, 0xfc, 0x43,
0x13, 0x0b, 0x19, 0xfa, 0xd6, 0x9d, 0x0c, 0xfa, 0xd5, 0x41, 0xb5, 0xdd, 0x6c, 0x08, 0x59, 0xf1,
0xff, 0xb3, 0x80, 0x6e, 0x6b, 0x15, 0x94, 0xb2, 0x23, 0xc3, 0xf4, 0x13, 0x74, 0xc0, 0x41, 0x47,
0x50, 0xe6, 0x23, 0xdf, 0xdc, 0x6e, 0x18, 0xc7, 0xd9, 0xac, 0xbf, 0x44, 0x64, 0x8b, 0x95, 0x34,
0xae, 0xc5, 0x03, 0x06, 0x3a, 0x06, 0x41, 0x37, 0x6c, 0xfa, 0xaa, 0x32, 0x4c, 0xcd, 0x96, 0xd9,
0x0f, 0x04, 0xbc, 0xea, 0xb8, 0xc5, 0x47, 0x27, 0x80, 0x54, 0x63, 0x60, 0xd8, 0x35, 0x4d, 0x57,
0x83, 0x65, 0xb9, 0x2f, 0x12, 0xbe, 0xd0, 0xab, 0x5b, 0x91, 0xe7, 0xf3, 0x0b, 0x59, 0x79, 0xe3,
0xf6, 0x36, 0x79, 0xf6, 0x8e, 0x71, 0xd1, 0x19, 0x6c, 0x99, 0xb2, 0x3e, 0x23, 0x56, 0x65, 0x9b,
0x45, 0xf1, 0x93, 0x15, 0x2e, 0xc3, 0x54, 0x08, 0xbb, 0xb2, 0xa8, 0x05, 0xdb, 0xc6, 0x92, 0xff,
0xbe, 0xc2, 0x1f, 0x69, 0x7f, 0x7d, 0x87, 0xa7, 0x4f, 0x86, 0x5c, 0xbc, 0xa9, 0xdb, 0xe6, 0x0d,
0xf6, 0x26, 0xa3, 0x3a, 0x14, 0x2c, 0xba, 0x41, 0xa5, 0x63, 0x58, 0xb6, 0x55, 0xc9, 0x33, 0xac,
0x8f, 0x56, 0x61, 0xf9, 0x92, 0x38, 0x3c, 0xeb, 0xf0, 0x3b, 0x28, 0x86, 0xd1, 0xe9, 0x05, 0xf8,
0x86, 0xdc, 0xb8, 0x7e, 0xa3, 0x64, 0xb4, 0x1d, 0x90, 0x77, 0xdb, 0x01, 0xdf, 0x65, 0xbe, 0x4d,
0x8b, 0x06, 0x94, 0x63, 0x7b, 0x64, 0xd7, 0x39, 0x25, 0x7a, 0xc6, 0x5b, 0xbf, 0x29, 0x18, 0xe2,
0xf8, 0xdf, 0x27, 0xcb, 0x25, 0xf1, 0x32, 0x60, 0x88, 0xe3, 0xfb, 0x9c, 0x95, 0x66, 0x61, 0x9f,
0x53, 0x86, 0xf8, 0x2d, 0xec, 0x25, 0xed, 0x88, 0x3d, 0xc9, 0x64, 0xc5, 0x7f, 0x92, 0xc9, 0x0a,
0x2b, 0x79, 0x96, 0x2e, 0x7e, 0x46, 0x5b, 0x8a, 0xdb, 0xb0, 0xd9, 0x5c, 0x2c, 0xed, 0x9b, 0xe3,
0x5f, 0x81, 0x10, 0x6f, 0xa7, 0xa1, 0x2d, 0xc8, 0x4c, 0x46, 0x42, 0x0a, 0xe5, 0x60, 0xa3, 0x31,
0x3c, 0x1f, 0x08, 0x69, 0xb4, 0x0d, 0xd9, 0x61, 0xab, 0x25, 0x64, 0x8e, 0x3f, 0x07, 0x08, 0xda,
0x67, 0xf4, 0xbc, 0xe0, 0xae, 0xd4, 0x1d, 0xb4, 0x79, 0x67, 0xa8, 0x55, 0xed, 0xf5, 0xe8, 0x80,
0x75, 0x86, 0x6a, 0xc3, 0x71, 0x47, 0xc8, 0x1c, 0xff, 0x6f, 0x1a, 0xb6, 0xdd, 0x9e, 0x0d, 0xca,
0xc3, 0xe6, 0x60, 0xd2, 0x9f, 0x7e, 0x29, 0xa4, 0x3c, 0xf2, 0x54, 0x48, 0x7b, 0xe4, 0x57, 0x42,
0xc6, 0x23, 0xcf, 0x84, 0xac, 0x47, 0x7e, 0x2d, 0x6c, 0x78, 0xe4, 0x4b, 0x61, 0xd3, 0x23, 0xbf,
0x11, 0xb6, 0x3c, 0xf2, 0x5b, 0x61, 0xdb, 0x23, 0x7f, 0x2d, 0xe4, 0xa8, 0x46, 0x6c, 0x89, 0x2f,
0x84, 0xbc, 0x4f, 0x7f, 0x29, 0x80, 0x4f, 0x9f, 0x0a, 0x05, 0x9f, 0xfe, 0x4a, 0x28, 0xfa, 0xf4,
0x99, 0x50, 0xf2, 0xe9, 0xaf, 0x85, 0x1d, 0x9f, 0x7e, 0x29, 0x94, 0x7d, 0xfa, 0x1b, 0x41, 0xf0,
0xe9, 0x6f, 0x85, 0x5d, 0x9f, 0xfe, 0xb5, 0x80, 0x3c, 0xfa, 0xf4, 0x0b, 0xe1, 0xc1, 0xf1, 0xaf,
0xa0, 0x18, 0xee, 0x3b, 0x51, 0xe3, 0xf5, 0x86, 0xe7, 0xdc, 0x9e, 0x9d, 0x6e, 0xbb, 0x23, 0xa4,
0xa9, 0xf8, 0x78, 0xd8, 0x6e, 0xf7, 0x9a, 0x42, 0xe6, 0xb8, 0x01, 0xe5, 0x58, 0x37, 0x85, 0xda,
0x72, 0x32, 0x78, 0x3d, 0xa0, 0xb6, 0x4f, 0x51, 0x6f, 0x54, 0x47, 0xdc, 0x07, 0xd2, 0xb8, 0x2a,
0x64, 0xd0, 0x03, 0x28, 0x4b, 0xe3, 0xea, 0xb4, 0x55, 0xed, 0xf6, 0x86, 0x3f, 0x34, 0xf1, 0xb4,
0x3a, 0x12, 0xb2, 0xc7, 0x0d, 0x28, 0x45, 0x9a, 0x0a, 0x68, 0x1f, 0x76, 0xa9, 0xd4, 0x60, 0x38,
0x9e, 0xd6, 0x87, 0x83, 0x41, 0xb3, 0x3e, 0x6e, 0x36, 0xb8, 0xe1, 0xab, 0xa3, 0xe9, 0x84, 0x02,
0xee, 0x42, 0x89, 0x4a, 0x04, 0x5f, 0x33, 0xc7, 0x9f, 0xf1, 0xd6, 0x92, 0xd7, 0x9b, 0x41, 0x45,
0xc8, 0x9d, 0x8f, 0xaa, 0xa7, 0xd3, 0x91, 0xf4, 0x9a, 0xeb, 0x3f, 0x1c, 0x35, 0x07, 0x42, 0xfa,
0xf8, 0x6f, 0x40, 0x88, 0x3f, 0x97, 0xa8, 0x7e, 0xe3, 0x3e, 0x0d, 0x1b, 0x01, 0x8a, 0xb5, 0xaa,
0xd4, 0x99, 0x4a, 0x75, 0xdc, 0x1d, 0x8d, 0x25, 0x9e, 0x3a, 0x69, 0x39, 0xe5, 0x31, 0x32, 0xa7,
0xff, 0xfe, 0x14, 0xb6, 0x46, 0x67, 0xe7, 0x83, 0xd1, 0x97, 0xa8, 0x0f, 0x95, 0x36, 0xb1, 0xbd,
0xfb, 0x31, 0x72, 0xe3, 0x23, 0x14, 0xbd, 0x97, 0x68, 0xc0, 0x1e, 0x3e, 0x5e, 0x53, 0x95, 0x88,
0x29, 0xd4, 0x81, 0x07, 0x1c, 0xeb, 0x83, 0x91, 0x5a, 0xb0, 0xdb, 0x26, 0x76, 0xac, 0x76, 0x7e,
0x0f, 0x9c, 0x21, 0xec, 0x4a, 0xb7, 0x70, 0xd6, 0xcd, 0xb9, 0x0b, 0xf0, 0x77, 0xb0, 0xd3, 0x26,
0x76, 0xf8, 0x15, 0x90, 0xa4, 0x55, 0x25, 0xc2, 0x0b, 0x49, 0x73, 0x04, 0x29, 0x8a, 0xb0, 0x52,
0xfa, 0x30, 0x01, 0x5b, 0x4c, 0xa1, 0x06, 0x14, 0xfb, 0xf4, 0x7d, 0x31, 0xe9, 0x4b, 0xec, 0xf6,
0xb9, 0xa3, 0x56, 0x5c, 0x81, 0xd2, 0x67, 0x4f, 0x3d, 0xec, 0xe8, 0xee, 0xfd, 0xf1, 0x34, 0xf9,
0xf1, 0xe4, 0x96, 0x6f, 0x87, 0x4f, 0x56, 0x7d, 0xa6, 0xaf, 0x23, 0x06, 0x57, 0x0e, 0xc3, 0xd1,
0xc7, 0xe3, 0x1d, 0x88, 0xab, 0x5f, 0x6b, 0x62, 0x0a, 0x61, 0xd8, 0xef, 0x74, 0x1b, 0x6d, 0x62,
0x07, 0x4f, 0x38, 0xfe, 0xe0, 0x5b, 0x3d, 0xeb, 0x4e, 0x15, 0x9b, 0x80, 0x3a, 0xdd, 0x46, 0x5d,
0xd6, 0x15, 0x32, 0x0f, 0xb4, 0x5c, 0x03, 0x98, 0x6c, 0xb8, 0x01, 0x3c, 0xe4, 0xaa, 0xb9, 0x0f,
0x5c, 0x5f, 0x3e, 0x39, 0x16, 0x9e, 0xae, 0xc4, 0xa7, 0xaf, 0x67, 0x31, 0x85, 0x6a, 0x70, 0xe0,
0xab, 0x55, 0x9d, 0xcf, 0xef, 0x80, 0x4b, 0xd6, 0xe9, 0x0f, 0x9e, 0xb9, 0x62, 0x8f, 0xee, 0x75,
0xbb, 0xfb, 0x34, 0xfe, 0x29, 0xf1, 0xc1, 0xce, 0x14, 0x2c, 0xb4, 0x24, 0xbf, 0xa1, 0x13, 0x73,
0x6b, 0xbc, 0xd1, 0xb3, 0x42, 0xc1, 0xd7, 0x00, 0x2d, 0xc9, 0xeb, 0x2d, 0xa1, 0xa8, 0xa7, 0x62,
0x0d, 0xb0, 0x98, 0xc5, 0xe2, 0x0d, 0x29, 0xe6, 0x81, 0x52, 0x4b, 0x6a, 0x13, 0xdb, 0x6b, 0xc3,
0xc4, 0xf0, 0x62, 0x4d, 0x9c, 0x18, 0x5e, 0xbc, 0x77, 0x23, 0xa6, 0xd0, 0x9f, 0x60, 0xbf, 0x25,
0xd5, 0x4d, 0x22, 0xdb, 0x24, 0xd2, 0xc6, 0x43, 0xb1, 0x3f, 0x25, 0x24, 0x34, 0x11, 0x0f, 0xc5,
0x75, 0x22, 0xfe, 0x0a, 0xbf, 0x83, 0x02, 0x6b, 0x4c, 0xf6, 0x58, 0x59, 0x19, 0xf3, 0x4a, 0xb8,
0xfb, 0x1a, 0x37, 0x1f, 0xfd, 0x24, 0xa6, 0xbe, 0x48, 0xa3, 0x36, 0x14, 0x9a, 0xca, 0x95, 0xdf,
0x98, 0x8a, 0xb6, 0xb4, 0x23, 0x1d, 0xdf, 0xc3, 0x35, 0xdf, 0xc4, 0x14, 0xea, 0x02, 0xe2, 0x49,
0x3a, 0xf2, 0x3b, 0xc6, 0xea, 0xce, 0xf5, 0xe1, 0x41, 0x72, 0xf7, 0x5c, 0x4c, 0xa1, 0xdf, 0x40,
0xb1, 0x4d, 0xec, 0xa0, 0xeb, 0x9e, 0x14, 0xaf, 0xab, 0x67, 0xb7, 0xe0, 0x80, 0x9b, 0xc3, 0x67,
0xd6, 0xaf, 0x78, 0x51, 0xfa, 0x6e, 0x38, 0x18, 0x76, 0xe9, 0xa3, 0x92, 0x9c, 0x6b, 0x97, 0xc1,
0x7e, 0x7e, 0x11, 0x13, 0x5f, 0xf5, 0x63, 0xd1, 0x8a, 0x70, 0x1d, 0xc1, 0x3e, 0xcd, 0x3d, 0x14,
0x56, 0x8d, 0xe0, 0xae, 0xb3, 0xfb, 0x6a, 0x1b, 0x32, 0xc4, 0x8a, 0xfb, 0x63, 0xe0, 0xbb, 0x81,
0xae, 0xde, 0x77, 0x1f, 0x1e, 0x31, 0x2c, 0xef, 0xfa, 0xbe, 0x37, 0x64, 0xf2, 0x96, 0x87, 0xdc,
0x1d, 0x09, 0xea, 0x25, 0xb9, 0xe3, 0xf9, 0x6a, 0x7c, 0xfe, 0xab, 0x42, 0x0a, 0x4d, 0xe1, 0x39,
0x57, 0x6d, 0xf5, 0xeb, 0xf8, 0x9e, 0x2f, 0xed, 0x15, 0x1a, 0x1b, 0xf0, 0x8b, 0x36, 0xb1, 0xab,
0xf3, 0xf9, 0xdd, 0x0f, 0xfc, 0xa4, 0x2d, 0x9c, 0x44, 0x5f, 0x27, 0x77, 0x61, 0x88, 0x29, 0x34,
0x87, 0x4f, 0x42, 0xe5, 0xd2, 0xea, 0xd5, 0xd6, 0x19, 0xff, 0x9e, 0x5b, 0x16, 0x53, 0x48, 0x81,
0x67, 0xcc, 0x19, 0xab, 0xd7, 0x49, 0x6e, 0x1d, 0xbc, 0x53, 0xa0, 0xff, 0x08, 0xa2, 0x1f, 0xe8,
0x3f, 0xf7, 0x86, 0x7e, 0x0f, 0x9f, 0x86, 0x8f, 0xc0, 0xfb, 0x2d, 0x97, 0xbc, 0x8d, 0xbf, 0x87,
0x8f, 0x83, 0xe0, 0x7d, 0xb7, 0x30, 0xb8, 0x47, 0x24, 0x63, 0x78, 0x1c, 0xf2, 0xfb, 0xad, 0xbf,
0x2a, 0xde, 0x7d, 0xeb, 0xc7, 0xa7, 0xb0, 0xd3, 0xf1, 0x94, 0x03, 0xc6, 0xbf, 0x61, 0xb2, 0x9c,
0xd3, 0x77, 0xff, 0x7a, 0x84, 0xbb, 0x17, 0xf8, 0x03, 0x3c, 0x4a, 0x5e, 0xa0, 0xaa, 0xaa, 0x1f,
0x0c, 0xfe, 0x47, 0x78, 0xb2, 0x4a, 0xfb, 0x85, 0x71, 0xfd, 0xe1, 0xca, 0x8f, 0xe1, 0x71, 0xe0,
0xcf, 0xf8, 0xf7, 0xf7, 0xf6, 0x63, 0x0f, 0xf6, 0x19, 0xe2, 0x2d, 0x0f, 0xde, 0xa1, 0x6e, 0x72,
0xcc, 0x5d, 0xc0, 0xc7, 0xe1, 0x70, 0x5e, 0xe5, 0xc7, 0x75, 0xc1, 0x7c, 0x0f, 0x3b, 0x3f, 0x5f,
0xb7, 0x06, 0x75, 0xe5, 0x07, 0xe1, 0xf7, 0x61, 0x2f, 0xb0, 0xb3, 0x5f, 0x1d, 0xbe, 0xb7, 0x81,
0x07, 0xb0, 0x1f, 0xc0, 0x05, 0xff, 0xe2, 0x79, 0x5f, 0xbc, 0x8b, 0x2d, 0xf6, 0x67, 0xe1, 0xaf,
0xfe, 0x12, 0x00, 0x00, 0xff, 0xff, 0x59, 0x2e, 0x44, 0x8b, 0x3a, 0x2c, 0x00, 0x00,
}

View File

@ -12,11 +12,6 @@ service P4WNP1 {
rpc SetLEDSettings (LEDSettings) returns (Empty) { }
rpc MountUMSFile (GadgetSettingsUMS) returns (Empty) { }
//Ethernet
rpc DeployEthernetInterfaceSettings (EthernetInterfaceSettings) returns (Empty) { }
rpc GetAllDeployedEthernetInterfaceSettings (Empty) returns (DeployedEthernetInterfaceSettings) { }
rpc GetDeployedEthernetInterfaceSettings (StringMessage) returns (EthernetInterfaceSettings) { } //StringMessage has to contain the interface name
//HIDScript / job management
rpc HIDRunScript (HIDScriptRequest) returns (HIDScriptResult) { }
rpc HIDRunScriptJob (HIDScriptRequest) returns (HIDScriptJob) { }
@ -27,8 +22,8 @@ service P4WNP1 {
rpc HIDGetRunningJobState (HIDScriptJob) returns (HIDRunningJobStateResult) { }
//FileSystem
rpc FSWriteFile (WriteFileRequest) returns (Empty) { }
rpc FSReadFile (ReadFileRequest) returns (ReadFileResponse) { }
rpc FSWriteFile (WriteFileRequest) returns (Empty) {}
rpc FSReadFile (ReadFileRequest) returns (ReadFileResponse) {}
rpc FSGetFileInfo (FileInfoRequest) returns (FileInfoResponse) { }
rpc FSCreateTempDirOrFile (TempDirOrFileRequest) returns (TempDirOrFileResponse) { }
@ -41,14 +36,27 @@ service P4WNP1 {
// WiFi
rpc DeployWiFiSettings (WiFiSettings) returns (WiFiState) {}
rpc GetWiFiState (Empty) returns (WiFiState) {}
rpc ListenWiFiStateChanges (Empty) returns (WiFiState) {}
// ToDo: Template requests (store, load, listStored)
rpc ListenWiFiStateChanges (Empty) returns (WiFiState) {} //ToDo: Check usage
rpc StoreWifiSettings(WifiRequestSettingsStorage) returns (Empty) {}
rpc GetStoredWifiSettings(StringMessage) returns (WiFiSettings) {}
rpc DeployStoredWifiSettings(StringMessage) returns (WiFiState) {}
rpc StoreDeployedWifiSettings(StringMessage) returns (Empty) {}
rpc ListStoredWifiSettings(Empty) returns (StringMessageArray) {}
//Ethernet
rpc DeployEthernetInterfaceSettings (EthernetInterfaceSettings) returns (Empty) { }
rpc GetAllDeployedEthernetInterfaceSettings (Empty) returns (DeployedEthernetInterfaceSettings) { }
rpc GetDeployedEthernetInterfaceSettings (StringMessage) returns (EthernetInterfaceSettings) { } //StringMessage has to contain the interface name
rpc StoreEthernetInterfaceSettings(EthernetRequestSettingsStorage) returns (Empty) {}
rpc GetStoredEthernetInterfaceSettings(StringMessage) returns (EthernetInterfaceSettings) {}
rpc DeployStoredEthernetInterfaceSettings(StringMessage) returns (Empty) {}
rpc ListStoredEthernetInterfaceSettings(Empty) returns (StringMessageArray) {}
//ToDo: Store&Load for EthernetInterfaceSettingsList (multiple interfaces)
// TriggerActions
rpc GetDeployedTriggerActionSet(Empty) returns (TriggerActionSet) {}
rpc DeployTriggerActionSetReplace(TriggerActionSet) returns (TriggerActionSet) {} // Replaces registered TriggerActions with given set, returns a set ONLY OF ADDED TriggerActions (with assigned IDs)
@ -193,10 +201,6 @@ message ActionGroupSend {
int32 value = 2;
}
message WifiRequestSettingsStorage {
string TemplateName = 1;
WiFiSettings settings = 2;
@ -392,6 +396,12 @@ message GadgetSettingsUMS {
/* End USB Gadget */
/* Ethernet Interface Settings */
message EthernetRequestSettingsStorage {
string TemplateName = 1;
EthernetInterfaceSettings settings = 2;
}
message DeployedEthernetInterfaceSettings {
repeated EthernetInterfaceSettings list = 1;
}

View File

@ -30,6 +30,7 @@ var (
const (
cSTORE_PREFIX_WIFI_SETTINGS = "ws_"
cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS = "eis_"
cSTORE_PREFIX_TRIGGER_ACTION_SET = "tas_"
)
@ -136,8 +137,6 @@ func (s *server) DeployTriggerActionSetRemove(ctx context.Context, removeTas *pb
return
}
func (s *server) Start() error {
return nil
}
@ -196,35 +195,6 @@ func (s *server) ListenWiFiStateChanges(ctx context.Context, empty *pb.Empty) (w
panic("implement me")
}
func (s *server) GetDeployedEthernetInterfaceSettings(ctx context.Context, req *pb.StringMessage) (resp *pb.EthernetInterfaceSettings, err error) {
if mi,err := s.rootSvc.SubSysNetwork.GetManagedInterface(req.Msg); err == nil {
return mi.GetState().CurrentSettings, nil
} else {
return nil, errors.New(fmt.Sprintf("No stored (or used) settings for ethernet interface '%s'", req.Msg))
}
/*
if settings,exist := ServiceState.StoredNetworkSettings[req.Msg]; exist && settings.SettingsInUse {
return settings, nil
} else {
return nil, errors.New(fmt.Sprintf("No stored (or used) settings for ethernet interface '%s'", req.Msg))
}
*/
}
func (s *server) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, empty *pb.Empty) (resp *pb.DeployedEthernetInterfaceSettings, err error) {
miList := s.rootSvc.SubSysNetwork.GetManagedInterfaceNames()
deployed := make([]*pb.EthernetInterfaceSettings,len(miList))
for idx,name := range miList {
mi,err := s.rootSvc.SubSysNetwork.GetManagedInterface(name)
if err != nil { return nil,err }
deployed[idx] = mi.GetState().CurrentSettings
}
resp = &pb.DeployedEthernetInterfaceSettings{
List: deployed,
}
return resp, nil
}
func (s *server) EchoRequest(ctx context.Context, req *pb.StringMessage) (resp *pb.StringMessage, err error) {
return &pb.StringMessage{Msg:req.Msg}, nil
}
@ -437,6 +407,34 @@ func (s *server) HIDGetScriptJobResult(ctx context.Context, sJob *pb.HIDScriptJo
return scriptRes,nil
}
func (s *server) GetDeployedEthernetInterfaceSettings(ctx context.Context, req *pb.StringMessage) (resp *pb.EthernetInterfaceSettings, err error) {
if mi,err := s.rootSvc.SubSysNetwork.GetManagedInterface(req.Msg); err == nil {
return mi.GetState().CurrentSettings, nil
} else {
return nil, errors.New(fmt.Sprintf("No stored (or used) settings for ethernet interface '%s'", req.Msg))
}
/*
if settings,exist := ServiceState.StoredNetworkSettings[req.Msg]; exist && settings.SettingsInUse {
return settings, nil
} else {
return nil, errors.New(fmt.Sprintf("No stored (or used) settings for ethernet interface '%s'", req.Msg))
}
*/
}
func (s *server) GetAllDeployedEthernetInterfaceSettings(ctx context.Context, empty *pb.Empty) (resp *pb.DeployedEthernetInterfaceSettings, err error) {
miList := s.rootSvc.SubSysNetwork.GetManagedInterfaceNames()
deployed := make([]*pb.EthernetInterfaceSettings,len(miList))
for idx,name := range miList {
mi,err := s.rootSvc.SubSysNetwork.GetManagedInterface(name)
if err != nil { return nil,err }
deployed[idx] = mi.GetState().CurrentSettings
}
resp = &pb.DeployedEthernetInterfaceSettings{
List: deployed,
}
return resp, nil
}
func (s *server) DeployEthernetInterfaceSettings(ctx context.Context, es *pb.EthernetInterfaceSettings) (empty *pb.Empty, err error) {
log.Printf("Trying to deploy ethernet interface settings %v", es)
@ -453,6 +451,35 @@ func (s *server) DeployEthernetInterfaceSettings(ctx context.Context, es *pb.Eth
return
}
func (s *server) StoreEthernetInterfaceSettings(ctx context.Context, req *pb.EthernetRequestSettingsStorage) (empty *pb.Empty, err error) {
empty = &pb.Empty{}
ifName := req.Settings.Name
storageKey := cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS + ifName + "_" + req.TemplateName
err = s.rootSvc.SubSysDataStore.Put(storageKey, req.Settings, true)
return
}
func (s *server) GetStoredEthernetInterfaceSettings(ctx context.Context, m *pb.StringMessage) (eis *pb.EthernetInterfaceSettings, err error) {
eis = &pb.EthernetInterfaceSettings{}
err = s.rootSvc.SubSysDataStore.Get(cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS + m.Msg, eis)
return
}
func (s *server) DeployStoredEthernetInterfaceSettings(ctx context.Context, msg *pb.StringMessage) (empty *pb.Empty, err error) {
eis,err := s.GetStoredEthernetInterfaceSettings(ctx, msg)
if err != nil { return empty,err }
return s.DeployEthernetInterfaceSettings(ctx, eis)
}
func (s *server) ListStoredEthernetInterfaceSettings(ctx context.Context, empty *pb.Empty) (messages *pb.StringMessageArray, err error) {
res,err := s.rootSvc.SubSysDataStore.KeysPrefix(cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS, true)
if err != nil { return messages,err }
messages = &pb.StringMessageArray{
MsgArray: res,
}
return
}
func (s *server) MountUMSFile(ctx context.Context, gsu *pb.GadgetSettingsUMS) (*pb.Empty, error) {
log.Printf("Trying to mount iamge `%s` to UMS ...", gsu.File)
err := MountUMSFile(gsu.File)

View File

@ -17,10 +17,12 @@ func InitComponentsWiFi() {
*js.Object
ShowStoreModal bool `js:"showStoreModal"`
ShowLoadModal bool `js:"showLoadModal"`
ShowDeployStoredModal bool `js:"showDeployStoredModal"`
TemplateName string `js:"templateName"`
}{Object: O()}
data.ShowStoreModal = false
data.ShowLoadModal = false
data.ShowDeployStoredModal = false
data.TemplateName = ""
return &data
}),
@ -156,6 +158,11 @@ func InitComponentsWiFi() {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_LOAD_WIFI_SETTINGS, name)
}),
hvue.Method("deployStored",
func(vm *hvue.VM, name *js.Object) {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_WIFI_SETTINGS, name)
}),
hvue.Computed("deploying",
func(vm *hvue.VM) interface{} {
return vm.Get("$store").Get("state").Get("deployingWifiSettings")
@ -171,6 +178,7 @@ const templateWiFi = `
<q-page padding>
<div class="row gutter-sm">
<select-string-from-array :values="this.$store.state.StoredWifiSettingsList" v-model="showLoadModal" title="Load WiFi settings" @load="load($event)"></select-string-from-array>
<select-string-from-array :values="this.$store.state.StoredWifiSettingsList" v-model="showDeployStoredModal" title="Deploy stored WiFi settings" @load="deployStored($event)"></select-string-from-array>
<modal-string-input v-model="showStoreModal" title="Store current WiFi Settings" @save="store($event)"></modal-string-input>
<div class="col-lg-4">
@ -189,8 +197,9 @@ const templateWiFi = `
<q-card-actions>
<q-btn :loading="deploying" color="primary" @click="deploy(settings)" label="deploy"></q-btn>
<q-btn color="secondary" @click="reset" label="reset"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showStoreModal=true" label="store"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showLoadModal=true" label="load"></q-btn>
<q-btn color="primary" @click="showStoreModal=true" label="store"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showLoadModal=true" label="load stored"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showDeployStoredModal=true" label="deploy stored"></q-btn>
</q-card-actions>
<q-list link>

View File

@ -30,10 +30,24 @@ func InitComponentsNetwork() {
hvue.NewComponent(
"network",
hvue.Template(templateNetwork),
hvue.DataFunc(func(vm *hvue.VM) interface{} {
data := &struct {
*js.Object
CurrentInterface *jsEthernetInterfaceSettings `js:"current"`
ShowStoreModal bool `js:"showStoreModal"`
ShowLoadModal bool `js:"showLoadModal"`
ShowDeployStoredModal bool `js:"showDeployStoredModal"`
}{Object: O()}
data.CurrentInterface = &jsEthernetInterfaceSettings{Object: O()}
data.ShowStoreModal = false
data.ShowLoadModal = false
data.ShowDeployStoredModal = false
return data
}),
hvue.Computed("interfaces", func(vm *hvue.VM) interface{} {
return vm.Get("$store").Get("state").Get("InterfaceSettings").Get("interfaces")
}),
// converts interface array to array which could be used with Quasar q-select (every object item has label and value)
hvue.Computed("selectOptionsInterface", func(vm *hvue.VM) interface{} {
selectIf := js.Global.Get("Array").New()
@ -64,20 +78,53 @@ func InitComponentsNetwork() {
hvue.Method("deploy", func(vm *hvue.VM, ifaceSettings *jsEthernetInterfaceSettings) {
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS, ifaceSettings)
}),
hvue.Method("updateStoredSettingsList",
func(vm *hvue.VM) {
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_ETHERNET_INTERFACE_SETTINGS_LIST)
}),
hvue.Method("store",
func(vm *hvue.VM, name *js.Object) {
sReq := NewEthernetRequestSettingsStorage()
sReq.TemplateName = name.String()
sReq.Settings = &jsEthernetInterfaceSettings{
Object: vm.Get("current"),
}
println("Storing :", sReq)
vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_ETHERNET_INTERFACE_SETTINGS, sReq)
vm.Set("showStoreModal", false)
}),
hvue.Method("load",
func(vm *hvue.VM, name *js.Object) {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_LOAD_ETHERNET_INTERFACE_SETTINGS, name)
}),
hvue.Method("deployStored",
func(vm *hvue.VM, name *js.Object) {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_ETHERNET_INTERFACE_SETTINGS, name)
}),
hvue.Mounted(func(vm *hvue.VM) {
// update network interface
promise := vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS)
promise.Call("then",
func() {
println("Mounting network interface settings, try to select first interface")
// current" could be an empty settings object, set to first interface of computed property "interfaces" (if there is one)
interfaces := vm.Get("$store").Get("state").Get("InterfaceSettings").Get("interfaces")
if interfaces.Length() > 0 {
hvue.Set(vm, "current", interfaces.Index(0))
println("... current is", vm.Get("current"))
} else {
println("... No interface found")
}
},
func() {
println("error in THEN ")
},
)
hvue.DataFunc(func(vm *hvue.VM) interface{} {
data := &struct {
*js.Object
CurrentInterface *jsEthernetInterfaceSettings `js:"current"`
}{Object: O()}
data.CurrentInterface = &jsEthernetInterfaceSettings{Object: js.Undefined}
return data
}),
hvue.Created(func(vm *hvue.VM) {
// data field "current" is still undefined, set to first interface of computed property "interfaces" (if there is one)
if vm.Get("interfaces").Length() > 0 {
hvue.Set(vm, "current", vm.Get("interfaces").Index(0))
}
}),
)
@ -220,7 +267,12 @@ func InitComponentsNetwork() {
const templateNetwork = `
<q-page padding>
<select-string-from-array :values="this.$store.state.StoredEthernetInterfaceSettingsList" v-model="showLoadModal" title="Load ethernet interface settings" @load="load($event)"></select-string-from-array>
<select-string-from-array :values="this.$store.state.StoredEthernetInterfaceSettingsList" v-model="showDeployStoredModal" title="Deploy stored ethernet interface settings" @load="deployStored($event)"></select-string-from-array>
<modal-string-input v-model="showStoreModal" title="Store current ethernet interface Settings" @save="store($event)"></modal-string-input>
<div class="row gutter-sm">
<div class="col-12 col-xl-3">
<q-card class="full-height">
<q-card-title>
@ -229,6 +281,10 @@ const templateNetwork = `
<q-card-actions>
<q-btn color="primary" @click="deploy(current)" label="deploy"></q-btn>
<q-btn color="primary" @click="showStoreModal=true" label="store"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showLoadModal=true" label="load stored"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showDeployStoredModal=true" label="deploy stored"></q-btn>
</q-card-actions>
<q-list link>

View File

@ -581,6 +581,34 @@ func NewWifiSettings() *jsWiFiSettings {
}
/* Network Settings */
type jsEthernetRequestSettingsStorage struct {
*js.Object
TemplateName string `js:"TemplateName"`
Settings *jsEthernetInterfaceSettings `js:"Settings"`
}
func (rs *jsEthernetRequestSettingsStorage) toGo() *pb.EthernetRequestSettingsStorage {
return &pb.EthernetRequestSettingsStorage{
Settings: rs.Settings.toGo(),
TemplateName: rs.TemplateName,
}
}
func (rs *jsEthernetRequestSettingsStorage) fromGo(src *pb.EthernetRequestSettingsStorage) {
rs.TemplateName = src.TemplateName
rs.Settings = &jsEthernetInterfaceSettings{Object:O()}
rs.Settings.fromGo(src.Settings)
}
func NewEthernetRequestSettingsStorage() *jsEthernetRequestSettingsStorage {
res := &jsEthernetRequestSettingsStorage{Object:O()}
res.TemplateName = ""
res.Settings = &jsEthernetInterfaceSettings{Object:O()}
return res
}
type jsEthernetSettingsList struct {
*js.Object
Interfaces *js.Object `js:"interfaces"` //every object property represents an EthernetSettings struct, the key is the interface name
@ -596,6 +624,28 @@ func (isl *jsEthernetSettingsList) fromGo(src *pb.DeployedEthernetInterfaceSetti
}
}
func (isl *jsEthernetSettingsList) updateSingleInterface(updatedSettings *jsEthernetInterfaceSettings) {
//Options array (converted from map)
for i:=0; i<isl.Interfaces.Length(); i++ {
settings := &jsEthernetInterfaceSettings{Object:isl.Interfaces.Index(i)}
if settings.Name == updatedSettings.Name {
// this are the settings to update (== replace)
isl.Interfaces.SetIndex(i, updatedSettings)
return // we are done
}
}
// if here, the settings haven't been found, so we add them
isl.Interfaces.Call("push", updatedSettings)
}
func NewEthernetSettingsList() (res *jsEthernetSettingsList) {
res = &jsEthernetSettingsList{Object:O()}
res.Interfaces = js.Global.Get("Array").New()
return
}
type jsEthernetInterfaceSettings struct {
*js.Object
Name string `js:"name"`
@ -694,7 +744,7 @@ func (src *jsDHCPServerSettings) toGo() (target *pb.DHCPServerSettings) {
target.DoNotBindInterface = src.DoNotBindInterface
target.CallbackScript = src.CallbackScript
println("jsRanges", src.Ranges)
//println("jsRanges", src.Ranges)
//Check if ranges are present
if src.Ranges != js.Undefined {

View File

@ -7,6 +7,7 @@ import (
pb "github.com/mame82/P4wnP1_go/proto/gopherjs"
"github.com/mame82/hvue"
"github.com/mame82/mvuex"
"github.com/pkg/errors"
"path/filepath"
"strings"
"time"
@ -17,50 +18,66 @@ var globalState *GlobalState
const (
maxLogEntries = 500
VUEX_ACTION_UPDATE_RUNNING_HID_JOBS = "updateRunningHidJobs"
//HIDScripts and jobs
VUEX_ACTION_UPDATE_RUNNING_HID_JOBS = "updateRunningHidJobs"
VUEX_ACTION_UPDATE_STORED_HID_SCRIPTS_LIST = "updateStoredHIDScriptsList"
VUEX_ACTION_UPDATE_CURRENT_HID_SCRIPT_SOURCE_FROM_REMOTE_FILE = "updateCurrentHidScriptSourceFromRemoteFile"
VUEX_ACTION_STORE_CURRENT_HID_SCRIPT_SOURCE_TO_REMOTE_FILE = "storeCurrentHidScriptSourceToRemoteFile"
VUEX_MUTATION_SET_CURRENT_HID_SCRIPT_SOURCE_TO = "setCurrentHIDScriptSource"
VUEX_MUTATION_SET_STORED_HID_SCRIPTS_LIST = "setStoredHIDScriptsList"
//USBGadget
VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS = "deployCurrentGadgetSettings"
VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED = "updateCurrentGadgetSettingsFromDeployed"
VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS = "deployEthernetInterfaceSettings"
VUEX_ACTION_UPDATE_WIFI_STATE = "updateCurrentWifiSettingsFromDeployed"
VUEX_ACTION_DEPLOY_WIFI_SETTINGS = "deployWifiSettings"
VUEX_MUTATION_SET_CURRENT_GADGET_SETTINGS_TO = "setCurrentGadgetSettings"
VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER = "updateCurrentTriggerActionsFromServer"
VUEX_ACTION_ADD_NEW_TRIGGER_ACTION = "addTriggerAction"
VUEX_ACTION_REMOVE_TRIGGER_ACTIONS = "removeTriggerActions"
VUEX_ACTION_STORE_TRIGGER_ACTION_SET = "storeTriggerActionSet"
VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST = "updateStoredTriggerActionSetsList"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_REPLACE = "deployStoredTriggerActionSetReplace"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_ADD = "deployStoredTriggerActionSetAdd"
VUEX_ACTION_DEPLOY_TRIGGER_ACTION_SET_REPLACE = "deployCurrentTriggerActionSetReplace"
VUEX_ACTION_DEPLOY_TRIGGER_ACTION_SET_ADD = "deployCurrentTriggerActionSetAdd"
// Ethernet
VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS = "updateAllEthernetInterfaceSettings"
VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS = "deployEthernetInterfaceSettings"
VUEX_ACTION_STORE_ETHERNET_INTERFACE_SETTINGS = "storeEthernetInterfaceSettings"
VUEX_ACTION_LOAD_ETHERNET_INTERFACE_SETTINGS = "loadEthernetInterfaceSettings"
VUEX_ACTION_DEPLOY_STORED_ETHERNET_INTERFACE_SETTINGS = "deployStoredEthernetInterfaceSettings"
VUEX_ACTION_UPDATE_STORED_ETHERNET_INTERFACE_SETTINGS_LIST = "updateStoredEthernetInterfaceSettingsList"
VUEX_MUTATION_SET_STORED_ETHERNET_INTERFACE_SETTINGS_LIST = "setStoredEthernetInterfaceSettingsList"
VUEX_MUTATION_SET_ALL_ETHERNET_INTERFACE_SETTINGS = "setAllEthernetInterfaceSettings"
VUEX_MUTATION_SET_SINGLE_ETHERNET_INTERFACE_SETTINGS = "setSingleEthernetInterfaceSettings"
//WiFi
VUEX_ACTION_UPDATE_WIFI_STATE = "updateCurrentWifiSettingsFromDeployed"
VUEX_ACTION_DEPLOY_WIFI_SETTINGS = "deployWifiSettings"
VUEX_ACTION_UPDATE_STORED_WIFI_SETTINGS_LIST = "updateStoredWifiSettingsList"
VUEX_ACTION_STORE_WIFI_SETTINGS = "storeWifiSettings"
VUEX_ACTION_LOAD_WIFI_SETTINGS = "loadWifiSettings"
VUEX_ACTION_DEPLOY_STORED_WIFI_SETTINGS = "deployStoredWifiSettings"
VUEX_MUTATION_SET_CURRENT_GADGET_SETTINGS_TO = "setCurrentGadgetSettings"
VUEX_MUTATION_SET_WIFI_STATE = "setCurrentWifiState"
VUEX_MUTATION_SET_CURRENT_HID_SCRIPT_SOURCE_TO = "setCurrentHIDScriptSource"
VUEX_MUTATION_SET_STORED_WIFI_SETTINGS_LIST = "setStoredWifiSettingsList"
VUEX_MUTATION_SET_WIFI_STATE = "setCurrentWifiState"
VUEX_MUTATION_SET_STORED_WIFI_SETTINGS_LIST = "setStoredWifiSettingsList"
VUEX_MUTATION_SET_CURRENT_WIFI_SETTINGS = "setCurrentWifiSettings"
VUEX_ACTION_UPDATE_STORED_BASH_SCRIPTS_LIST = "updateStoredBashScriptsList"
VUEX_ACTION_UPDATE_STORED_HID_SCRIPTS_LIST = "updateStoredHIDScriptsList"
VUEX_ACTION_UPDATE_CURRENT_HID_SCRIPT_SOURCE_FROM_REMOTE_FILE = "updateCurrentHidScriptSourceFromRemoteFile"
VUEX_ACTION_STORE_CURRENT_HID_SCRIPT_SOURCE_TO_REMOTE_FILE = "storeCurrentHidScriptSourceToRemoteFile"
VUEX_MUTATION_SET_CURRENT_WIFI_SETTINGS = "setCurrentWifiSettings"
VUEX_MUTATION_SET_STORED_BASH_SCRIPTS_LIST = "setStoredBashScriptsList"
VUEX_MUTATION_SET_STORED_HID_SCRIPTS_LIST = "setStoredHIDScriptsList"
//TriggerActions
VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER = "updateCurrentTriggerActionsFromServer"
VUEX_ACTION_ADD_NEW_TRIGGER_ACTION = "addTriggerAction"
VUEX_ACTION_REMOVE_TRIGGER_ACTIONS = "removeTriggerActions"
VUEX_ACTION_STORE_TRIGGER_ACTION_SET = "storeTriggerActionSet"
VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST = "updateStoredTriggerActionSetsList"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_REPLACE = "deployStoredTriggerActionSetReplace"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_ADD = "deployStoredTriggerActionSetAdd"
VUEX_ACTION_DEPLOY_TRIGGER_ACTION_SET_REPLACE = "deployCurrentTriggerActionSetReplace"
VUEX_ACTION_DEPLOY_TRIGGER_ACTION_SET_ADD = "deployCurrentTriggerActionSetAdd"
VUEX_MUTATION_SET_STORED_TRIGGER_ACTIONS_SETS_LIST = "setStoredTriggerActionSetsList"
//Bash scripts (used by TriggerActions)
VUEX_ACTION_UPDATE_STORED_BASH_SCRIPTS_LIST = "updateStoredBashScriptsList"
VUEX_MUTATION_SET_STORED_BASH_SCRIPTS_LIST = "setStoredBashScriptsList"
defaultTimeoutShort = time.Second * 5
defaultTimeout = time.Second * 10
defaultTimeoutMid = time.Second * 30
defaultTimeout = time.Second * 10
defaultTimeoutMid = time.Second * 30
)
type GlobalState struct {
@ -72,7 +89,7 @@ type GlobalState struct {
CurrentlyDeployingWifiSettings bool `js:"deployingWifiSettings"`
EventReceiver *jsEventReceiver `js:"eventReceiver"`
HidJobList *jsHidJobStateList `js:"hidJobList"`
TriggerActionList *jsTriggerActionSet `js:"triggerActionList"`
TriggerActionList *jsTriggerActionSet `js:"triggerActionList"`
IsModalEnabled bool `js:"isModalEnabled"`
IsConnected bool `js:"isConnected"`
FailedConnectionAttempts int `js:"failedConnectionAttempts"`
@ -80,10 +97,11 @@ type GlobalState struct {
//WiFiSettings *jsWiFiSettings `js:"wifiSettings"`
WiFiState *jsWiFiState `js:"wifiState"`
StoredWifiSettingsList []string `js:"StoredWifiSettingsList"`
StoredTriggerActionSetsList []string `js:"StoredTriggerActionSetsList"`
StoredBashScriptsList []string `js:"StoredBashScriptsList"`
StoredHIDScriptsList []string `js:"StoredHIDScriptsList"`
StoredWifiSettingsList []string `js:"StoredWifiSettingsList"`
StoredEthernetInterfaceSettingsList []string `js:"StoredEthernetInterfaceSettingsList"`
StoredTriggerActionSetsList []string `js:"StoredTriggerActionSetsList"`
StoredBashScriptsList []string `js:"StoredBashScriptsList"`
StoredHIDScriptsList []string `js:"StoredHIDScriptsList"`
}
func createGlobalStateStruct() GlobalState {
@ -100,16 +118,12 @@ func createGlobalStateStruct() GlobalState {
state.FailedConnectionAttempts = 0
state.StoredWifiSettingsList = []string{}
state.StoredEthernetInterfaceSettingsList = []string{}
state.StoredTriggerActionSetsList = []string{}
state.StoredBashScriptsList = []string{}
state.StoredHIDScriptsList = []string{}
//Retrieve Interface settings
// ToDo: Replace panics by default values
ifSettings, err := RpcClient.GetAllDeployedEthernetInterfaceSettings(time.Second * 5)
if err != nil {
panic("Couldn't retrieve interface settings")
}
state.InterfaceSettings = ifSettings
state.InterfaceSettings = NewEthernetSettingsList()
/*
wifiSettings, err := RpcClient.GetWifiState(time.Second * 5)
@ -122,13 +136,96 @@ func createGlobalStateStruct() GlobalState {
return state
}
func actionUpdateAllEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) interface{} {
return NewPromise(func() (res interface{}, err error) {
ifSettings, err := RpcClient.GetAllDeployedEthernetInterfaceSettings(time.Second * 5)
if err != nil {
err = errors.New("Couldn't retrieve interface settings")
println(err.Error())
return
}
//commit to current
context.Commit(VUEX_MUTATION_SET_ALL_ETHERNET_INTERFACE_SETTINGS, ifSettings)
//return nil,errors.New("gone wrong")
return
})
}
func actionStoreEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, req *jsEthernetRequestSettingsStorage) {
go func() {
println("Vuex dispatch store ethernet interface settings '", req.TemplateName, "' for interface: ", req.Settings.Name)
// convert to Go type
err := RpcClient.StoreEthernetInterfaceSettings(defaultTimeout, req.toGo())
if err != nil {
QuasarNotifyError("Error storing ethernet interface Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
QuasarNotifySuccess("New ethernet interface settings stored", "", QUASAR_NOTIFICATION_POSITION_TOP)
}()
}
func actionLoadEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) {
go func() {
println("Vuex dispatch load ethernet interface settings: ", settingsName.String())
// retrieve GO type EthernetInterfaceSettings
settings, err := RpcClient.GetStoredEthernetInterfaceSettings(defaultTimeout, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error fetching stored ethernet interface Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
// convert to JS representation, in order to forward to mutation
jsSettings := &jsEthernetInterfaceSettings{Object: O()}
jsSettings.fromGo(settings)
context.Commit(VUEX_MUTATION_SET_SINGLE_ETHERNET_INTERFACE_SETTINGS, jsSettings)
QuasarNotifySuccess("New ethernet interface settings loaded", "Interface: "+jsSettings.Name, QUASAR_NOTIFICATION_POSITION_TOP)
}()
}
func actionDeployStoredEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) {
go func() {
println("Vuex dispatch load ethernet interface settings: ", settingsName.String())
// convert to Go type
err := RpcClient.DeployStoredEthernetInterfaceSettings(defaultTimeoutMid, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error deploying stored ethernet interface Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
QuasarNotifySuccess("New ethernet interface settings deployed", "", QUASAR_NOTIFICATION_POSITION_TOP)
//we update all modelview settings of vuex, to reflect the changes
actionUpdateAllEthernetInterfaceSettings(store,context,state)
}()
}
func actionUpdateStoredEthernetInterfaceSettingsList(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
println("Trying to fetch EthernetInterfaceSettings list")
//fetch deployed gadget settings
eisList, err := RpcClient.GetStoredEthernetInterfaceSettingsList(defaultTimeout)
if err != nil {
println("Couldn't retrieve EthernetInterfaceSettings list")
return
}
println("Fetched list: ", eisList)
context.Commit(VUEX_MUTATION_SET_STORED_ETHERNET_INTERFACE_SETTINGS_LIST, eisList)
}()
return
}
func actionUpdateCurrentHidScriptSourceFromRemoteFile(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, req *jsLoadHidScriptSourceReq) {
go func() {
println("Trying to update current hid script source from remote file ", req.FileName)
content,err := RpcClient.DownloadFileToBytes(defaultTimeoutMid, req.FileName, pb.AccessibleFolder_HID_SCRIPTS)
content, err := RpcClient.DownloadFileToBytes(defaultTimeoutMid, req.FileName, pb.AccessibleFolder_HID_SCRIPTS)
if err != nil {
QuasarNotifyError("Couldn't load HIDScript source " + req.FileName, err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
QuasarNotifyError("Couldn't load HIDScript source "+req.FileName, err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
//println("err", err)
return
}
@ -162,7 +259,7 @@ func actionStoreCurrentHidScriptSourceToRemoteFile(store *mvuex.Store, context *
content := []byte(state.CurrentHIDScriptSource)
err := RpcClient.UploadBytesToFile(defaultTimeoutMid, fname, pb.AccessibleFolder_HID_SCRIPTS, content, true)
if err != nil {
QuasarNotifyError("Couldn't store HIDScript source " + fname, err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
QuasarNotifyError("Couldn't store HIDScript source "+fname, err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
//println("err", err)
return
}
@ -208,8 +305,6 @@ func actionUpdateStoredHIDScriptsList(store *mvuex.Store, context *mvuex.ActionC
return
}
func actionUpdateGadgetSettingsFromDeployed(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
@ -280,7 +375,7 @@ func actionLoadWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, st
go func() {
println("Vuex dispatch load WiFi settings: ", settingsName.String())
// convert to Go type
settings,err := RpcClient.GetStoredWifiSettings(defaultTimeout, &pb.StringMessage{Msg:settingsName.String()})
settings, err := RpcClient.GetStoredWifiSettings(defaultTimeout, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error fetching stored WiFi Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
@ -293,6 +388,19 @@ func actionLoadWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, st
}()
}
func actionDeployStoredWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) {
go func() {
println("Vuex dispatch load WiFi settings: ", settingsName.String())
// convert to Go type
wstate, err := RpcClient.DeployStoredWifiSettings(defaultTimeoutMid, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error deploying stored WiFi Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
QuasarNotifySuccess("New WiFi settings deployed", "", QUASAR_NOTIFICATION_POSITION_TOP)
state.WiFiState.fromGo(wstate)
}()
}
func actionDeployWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settings *jsWiFiSettings) {
go func() {
@ -349,10 +457,9 @@ func actionUpdateStoredTriggerActionSetsList(store *mvuex.Store, context *mvuex.
return
}
func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
tastate,err := RpcClient.GetDeployedTriggerActionSet(defaultTimeout)
tastate, err := RpcClient.GetDeployedTriggerActionSet(defaultTimeout)
if err != nil {
QuasarNotifyError("Error fetching deployed TriggerActions", err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
return
@ -361,7 +468,7 @@ func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mv
// ToDo: Clear list berfore adding back elements
state.TriggerActionList.Flush()
for _,ta := range tastate.TriggerActions {
for _, ta := range tastate.TriggerActions {
jsTA := NewTriggerAction()
jsTA.fromGo(ta)
@ -376,7 +483,7 @@ func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext,
go func() {
newTA := NewTriggerAction()
newTA.IsActive = false // don't activate by default
RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, &pb.TriggerActionSet{TriggerActions:[]*pb.TriggerAction{newTA.toGo()}})
RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, &pb.TriggerActionSet{TriggerActions: []*pb.TriggerAction{newTA.toGo()}})
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
@ -386,7 +493,7 @@ func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext,
func actionRemoveTriggerActions(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsTas *jsTriggerActionSet) {
go func() {
RpcClient.DeployTriggerActionsSetRemove(defaultTimeout,jsTas.toGo())
RpcClient.DeployTriggerActionsSetRemove(defaultTimeout, jsTas.toGo())
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
@ -413,49 +520,47 @@ func actionDeployTriggerActionSetReplace(store *mvuex.Store, context *mvuex.Acti
go func() {
tas := tasToDeploy.toGo()
_,err := RpcClient.DeployTriggerActionsSetReplace(defaultTimeout, tas)
_, err := RpcClient.DeployTriggerActionsSetReplace(defaultTimeout, tas)
if err != nil {
QuasarNotifyError("Error replacing TriggerActionSet with given one", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Replaced TriggerActionSet with given one", "", QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
}
func actionDeployTriggerActionSetAdd(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, tasToDeploy *jsTriggerActionSet) {
go func() {
tas := tasToDeploy.toGo()
_,err := RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, tas)
_, err := RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, tas)
if err != nil {
QuasarNotifyError("Error adding given TriggerActionSet to server", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Added TriggerActionSet to server", "", QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
}
func actionDeployStoredTriggerActionSetReplace(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsName *js.Object) {
go func() {
name := jsName.String()
println("Vuex dispatch deploy stored TriggerActionSet as replacement: ", name)
// convert to Go type
msg := &pb.StringMessage{Msg:name}
msg := &pb.StringMessage{Msg: name}
_,err := RpcClient.DeployStoredTriggerActionsSetReplace(defaultTimeout, msg)
_, err := RpcClient.DeployStoredTriggerActionsSetReplace(defaultTimeout, msg)
if err != nil {
QuasarNotifyError("Error replacing TriggerActionSet with stored set", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Replaced TriggerActionSet by stored set", name, QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
}
@ -465,16 +570,16 @@ func actionDeployStoredTriggerActionSetAdd(store *mvuex.Store, context *mvuex.Ac
println("Vuex dispatch deploy stored TriggerActionSet as addition: ", name)
// convert to Go type
msg := &pb.StringMessage{Msg:name}
msg := &pb.StringMessage{Msg: name}
_,err := RpcClient.DeployStoredTriggerActionsSetAdd(defaultTimeout, msg)
_, err := RpcClient.DeployStoredTriggerActionsSetAdd(defaultTimeout, msg)
if err != nil {
QuasarNotifyError("Error adding TriggerActionSet from store", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Added TriggerActionSet from store", name, QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
}
@ -564,6 +669,18 @@ func initMVuex() *mvuex.Store {
mvuex.Mutation(VUEX_MUTATION_SET_STORED_TRIGGER_ACTIONS_SETS_LIST, func(store *mvuex.Store, state *GlobalState, tasList []interface{}) {
hvue.Set(state, "StoredTriggerActionSetsList", tasList)
}),
mvuex.Mutation(VUEX_MUTATION_SET_STORED_ETHERNET_INTERFACE_SETTINGS_LIST, func(store *mvuex.Store, state *GlobalState, eisList []interface{}) {
hvue.Set(state, "StoredEthernetInterfaceSettingsList", eisList)
}),
mvuex.Mutation(VUEX_MUTATION_SET_ALL_ETHERNET_INTERFACE_SETTINGS, func(store *mvuex.Store, state *GlobalState, eifSettings *jsEthernetSettingsList) {
println("Updating all ethernet interface settings: ", eifSettings)
state.InterfaceSettings = eifSettings
}),
mvuex.Mutation(VUEX_MUTATION_SET_SINGLE_ETHERNET_INTERFACE_SETTINGS, func(store *mvuex.Store, state *GlobalState, ifSettings *jsEthernetInterfaceSettings) {
println("Updating ethernet interface settings for ", ifSettings.Name)
state.InterfaceSettings.updateSingleInterface(ifSettings)
}),
/*
mvuex.Mutation("startLogListening", func (store *mvuex.Store, state *GlobalState) {
state.EventReceiver.StartListening()
@ -577,11 +694,13 @@ func initMVuex() *mvuex.Store {
mvuex.Action(VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED, actionUpdateGadgetSettingsFromDeployed),
mvuex.Action(VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS, actionDeployCurrentGadgetSettings),
mvuex.Action(VUEX_ACTION_UPDATE_RUNNING_HID_JOBS, actionUpdateRunningHidJobs),
mvuex.Action(VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS, actionDeployEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS, actionUpdateAllEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_UPDATE_WIFI_STATE, actionUpdateWifiState),
mvuex.Action(VUEX_ACTION_DEPLOY_WIFI_SETTINGS, actionDeployWifiSettings),
mvuex.Action(VUEX_ACTION_UPDATE_STORED_WIFI_SETTINGS_LIST, actionUpdateStoredWifiSettingsList),
mvuex.Action(VUEX_ACTION_STORE_WIFI_SETTINGS, actionStoreWifiSettings),
mvuex.Action(VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER, actionUpdateCurrentTriggerActionsFromServer),
mvuex.Action(VUEX_ACTION_ADD_NEW_TRIGGER_ACTION, actionAddNewTriggerAction),
@ -595,9 +714,17 @@ func initMVuex() *mvuex.Store {
mvuex.Action(VUEX_ACTION_UPDATE_STORED_BASH_SCRIPTS_LIST, actionUpdateStoredBashScriptsList),
mvuex.Action(VUEX_ACTION_UPDATE_STORED_HID_SCRIPTS_LIST, actionUpdateStoredHIDScriptsList),
mvuex.Action(VUEX_ACTION_UPDATE_STORED_ETHERNET_INTERFACE_SETTINGS_LIST, actionUpdateStoredEthernetInterfaceSettingsList),
mvuex.Action(VUEX_ACTION_UPDATE_CURRENT_HID_SCRIPT_SOURCE_FROM_REMOTE_FILE, actionUpdateCurrentHidScriptSourceFromRemoteFile),
mvuex.Action(VUEX_ACTION_STORE_CURRENT_HID_SCRIPT_SOURCE_TO_REMOTE_FILE, actionStoreCurrentHidScriptSourceToRemoteFile),
mvuex.Action(VUEX_ACTION_STORE_WIFI_SETTINGS, actionStoreWifiSettings),
mvuex.Action(VUEX_ACTION_LOAD_WIFI_SETTINGS, actionLoadWifiSettings),
mvuex.Action(VUEX_ACTION_DEPLOY_STORED_WIFI_SETTINGS, actionDeployStoredWifiSettings),
mvuex.Action(VUEX_ACTION_STORE_ETHERNET_INTERFACE_SETTINGS, actionStoreEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_LOAD_ETHERNET_INTERFACE_SETTINGS, actionLoadEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_DEPLOY_STORED_ETHERNET_INTERFACE_SETTINGS, actionDeployStoredEthernetInterfaceSettings),
mvuex.Getter("triggerActions", func(state *GlobalState) interface{} {
@ -636,7 +763,7 @@ func initMVuex() *mvuex.Store {
mvuex.Getter("storedWifiSettingsSelect", func(state *GlobalState) interface{} {
selectWS := js.Global.Get("Array").New()
for _,curS := range state.StoredWifiSettingsList {
for _, curS := range state.StoredWifiSettingsList {
option := struct {
*js.Object
Label string `js:"label"`
@ -661,6 +788,11 @@ func initMVuex() *mvuex.Store {
// Update WiFi state
store.Dispatch(VUEX_ACTION_UPDATE_WIFI_STATE)
/*
// Update ethernet interface state (done by component)
store.Dispatch(VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS)
*/
// propagate Vuex store to global scope to allow injecting it to Vue by setting the "store" option
js.Global.Set("store", store)

53
web_client/promise.go Normal file
View File

@ -0,0 +1,53 @@
package main
import (
"github.com/gopherjs/gopherjs/js"
)
type Promise struct {
*js.Object
State string `js:"state"` //ToDo: change to dedicated type
}
type PromiseFunc func() (result interface{}, err error)
func NewPromise(pf PromiseFunc) (p *Promise) {
f := func(resolve *js.Object, reject *js.Object) {
println("Promise called ", resolve, reject)
p := &struct {
*js.Object
Resolve *js.Object `js:"resolve"`
Reject *js.Object `js:"reject"`
}{Object:O()}
p.Resolve = resolve
p.Reject = reject
fResolve := func(args interface{}) (res interface{}) {
return p.Call("resolve",args)
}
fReject := func(args interface{}) (res interface{}) {
return p.Call("reject",args)
}
go func() {
res,err := pf()
if err != nil {
fReject(js.Global.Get("Error").New(err.Error()))
} else {
fResolve(res)
}
}()
}
jsP := js.Global.Get("Promise").New(f)
p = &Promise{
Object: jsP,
}
return
}

View File

@ -76,6 +76,15 @@ func (rpc *Rpc) DownloadFileToBytes(timeout time.Duration, filename string, fold
}
func (rpc *Rpc) GetStoredEthernetInterfaceSettingsList(timeout time.Duration) (eis []string, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
ma, err := rpc.Client.ListStoredEthernetInterfaceSettings(ctx, &pb.Empty{})
if err != nil { return eis, err }
return ma.MsgArray, err
}
func (rpc *Rpc) GetStoredBashScriptsList(timeout time.Duration) (ws []string, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
@ -140,6 +149,15 @@ func (rpc *Rpc) GetStoredWifiSettings(timeout time.Duration, req *pb.StringMessa
return
}
func (rpc *Rpc) DeployStoredWifiSettings(timeout time.Duration, req *pb.StringMessage) (state *pb.WiFiState, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
state, err = rpc.Client.DeployStoredWifiSettings(ctx, req)
return
}
func (rpc *Rpc) GetWifiState(timeout time.Duration) (state *jsWiFiState, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
@ -191,6 +209,34 @@ func (rpc *Rpc) GetAllDeployedEthernetInterfaceSettings(timeout time.Duration) (
*/
}
func (rpc *Rpc) StoreEthernetInterfaceSettings(timeout time.Duration, req *pb.EthernetRequestSettingsStorage) (err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
_, err = rpc.Client.StoreEthernetInterfaceSettings(ctx, req)
return
}
func (rpc *Rpc) GetStoredEthernetInterfaceSettings(timeout time.Duration, req *pb.StringMessage) (settings *pb.EthernetInterfaceSettings, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
settings, err = rpc.Client.GetStoredEthernetInterfaceSettings(ctx, req)
return
}
func (rpc *Rpc) DeployStoredEthernetInterfaceSettings(timeout time.Duration, req *pb.StringMessage) (err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
_,err = rpc.Client.DeployStoredEthernetInterfaceSettings(ctx, req)
return
}
func (rpc *Rpc) GetRunningHidJobStates(timeout time.Duration) (states []*pb.HIDRunningJobStateResult, err error) {
println("GetRunningHidJobStates called")