forked from lug/matterbridge
		
	Compare commits
	
		
			29 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0bd5a0d92d | ||
| 
						 | 
					330ddb6a30 | ||
| 
						 | 
					52dbd702ad | ||
| 
						 | 
					d7c3570ba3 | ||
| 
						 | 
					ab4d51b40b | ||
| 
						 | 
					1665c93d3b | ||
| 
						 | 
					b51fdbce9f | ||
| 
						 | 
					351b423e15 | ||
| 
						 | 
					7690be1647 | ||
| 
						 | 
					68aeb93afa | ||
| 
						 | 
					51062863a5 | ||
| 
						 | 
					4fb4b7aa6c | ||
| 
						 | 
					7f3cbcedc0 | ||
| 
						 | 
					6ef09def81 | ||
| 
						 | 
					c4c6aff9a5 | ||
| 
						 | 
					d71850cef6 | ||
| 
						 | 
					2597c9bfac | ||
| 
						 | 
					93307b57aa | ||
| 
						 | 
					618953c865 | ||
| 
						 | 
					e04dd78624 | ||
| 
						 | 
					fa0c4025f7 | ||
| 
						 | 
					2d2d185200 | ||
| 
						 | 
					cb7278eb50 | ||
| 
						 | 
					89aa114192 | ||
| 
						 | 
					ed062e0ce5 | ||
| 
						 | 
					a69ef8402b | ||
| 
						 | 
					8779f67d2d | ||
| 
						 | 
					e4b72136b8 | ||
| 
						 | 
					4ff5091bc2 | 
@@ -69,7 +69,7 @@ See https://github.com/42wim/matterbridge/wiki
 | 
			
		||||
 | 
			
		||||
# Installing
 | 
			
		||||
## Binaries
 | 
			
		||||
* Latest stable release [v1.11.0](https://github.com/42wim/matterbridge/releases/latest)
 | 
			
		||||
* Latest stable release [v1.11.3](https://github.com/42wim/matterbridge/releases/latest)
 | 
			
		||||
* Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)  
 | 
			
		||||
 | 
			
		||||
## Building
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,9 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
	prefixed "github.com/matterbridge/logrus-prefixed-formatter"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
	"github.com/spf13/viper"
 | 
			
		||||
	prefixed "github.com/x-cray/logrus-prefixed-formatter"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
 
 | 
			
		||||
@@ -10,9 +10,11 @@ import (
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge"
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/config"
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/helper"
 | 
			
		||||
	"github.com/bwmarrin/discordgo"
 | 
			
		||||
	"github.com/matterbridge/discordgo"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const MessageLength = 1950
 | 
			
		||||
 | 
			
		||||
type Bdiscord struct {
 | 
			
		||||
	c              *discordgo.Session
 | 
			
		||||
	Channels       []*discordgo.Channel
 | 
			
		||||
@@ -127,16 +129,22 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
 | 
			
		||||
	// Use webhook to send the message
 | 
			
		||||
	if wID != "" {
 | 
			
		||||
		// skip events
 | 
			
		||||
		if msg.Event != "" {
 | 
			
		||||
		if msg.Event != "" && msg.Event != config.EVENT_JOIN_LEAVE && msg.Event != config.EVENT_TOPIC_CHANGE {
 | 
			
		||||
			return "", nil
 | 
			
		||||
		}
 | 
			
		||||
		b.Log.Debugf("Broadcasting using Webhook")
 | 
			
		||||
		for _, f := range msg.Extra["file"] {
 | 
			
		||||
			fi := f.(config.FileInfo)
 | 
			
		||||
			if fi.URL != "" {
 | 
			
		||||
				msg.Text += fi.URL + " "
 | 
			
		||||
				msg.Text += " " + fi.URL
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// skip empty messages
 | 
			
		||||
		if msg.Text == "" {
 | 
			
		||||
			return "", nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		msg.Text = helper.ClipMessage(msg.Text, MessageLength)
 | 
			
		||||
		err := b.c.WebhookExecute(
 | 
			
		||||
			wID,
 | 
			
		||||
			wToken,
 | 
			
		||||
@@ -163,6 +171,7 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
 | 
			
		||||
	// Upload a file if it exists
 | 
			
		||||
	if msg.Extra != nil {
 | 
			
		||||
		for _, rmsg := range helper.HandleExtra(&msg, b.General) {
 | 
			
		||||
			rmsg.Text = helper.ClipMessage(rmsg.Text, MessageLength)
 | 
			
		||||
			b.c.ChannelMessageSend(channelID, rmsg.Username+rmsg.Text)
 | 
			
		||||
		}
 | 
			
		||||
		// check if we have files to upload (from slack, telegram or mattermost)
 | 
			
		||||
@@ -171,6 +180,7 @@ func (b *Bdiscord) Send(msg config.Message) (string, error) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	msg.Text = helper.ClipMessage(msg.Text, MessageLength)
 | 
			
		||||
	// Edit message
 | 
			
		||||
	if msg.ID != "" {
 | 
			
		||||
		_, err := b.c.ChannelMessageEdit(channelID, msg.ID, msg.Username+msg.Text)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ import (
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/config"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
@@ -59,7 +60,7 @@ func HandleExtra(msg *config.Message, general *config.Protocol) []config.Message
 | 
			
		||||
		for _, f := range extra[config.EVENT_FILE_FAILURE_SIZE] {
 | 
			
		||||
			fi := f.(config.FileInfo)
 | 
			
		||||
			text := fmt.Sprintf("file %s too big to download (%#v > allowed size: %#v)", fi.Name, fi.Size, general.MediaDownloadSize)
 | 
			
		||||
			rmsg = append(rmsg, config.Message{Text: text, Username: "<system> ", Channel: msg.Channel})
 | 
			
		||||
			rmsg = append(rmsg, config.Message{Text: text, Username: "<system> ", Channel: msg.Channel, Account: msg.Account})
 | 
			
		||||
		}
 | 
			
		||||
		return rmsg
 | 
			
		||||
	}
 | 
			
		||||
@@ -115,3 +116,15 @@ func RemoveEmptyNewLines(msg string) string {
 | 
			
		||||
	lines = strings.TrimRight(lines, "\n")
 | 
			
		||||
	return lines
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ClipMessage(text string, length int) string {
 | 
			
		||||
	// clip too long messages
 | 
			
		||||
	if len(text) > length {
 | 
			
		||||
		text = text[:length-len(" *message clipped*")]
 | 
			
		||||
		if r, size := utf8.DecodeLastRuneInString(text); r == utf8.RuneError {
 | 
			
		||||
			text = text[:len(text)-size]
 | 
			
		||||
		}
 | 
			
		||||
		text += " *message clipped*"
 | 
			
		||||
	}
 | 
			
		||||
	return text
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -306,7 +306,7 @@ func (b *Birc) handleJoinPart(client *girc.Client, event girc.Event) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	channel := strings.ToLower(event.Params[0])
 | 
			
		||||
	if event.Command == "KICK" {
 | 
			
		||||
	if event.Command == "KICK" && event.Params[1] == b.Nick {
 | 
			
		||||
		b.Log.Infof("Got kicked from %s by %s", channel, event.Source.Name)
 | 
			
		||||
		time.Sleep(time.Duration(b.GetInt("RejoinDelay")) * time.Second)
 | 
			
		||||
		b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: channel, Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS}
 | 
			
		||||
@@ -334,6 +334,7 @@ func (b *Birc) handleJoinPart(client *girc.Client, event girc.Event) {
 | 
			
		||||
 | 
			
		||||
func (b *Birc) handleNotice(client *girc.Client, event girc.Event) {
 | 
			
		||||
	if strings.Contains(event.String(), "This nickname is registered") && event.Source.Name == b.GetString("NickServNick") {
 | 
			
		||||
		b.Log.Debugf("Sending identify to nickserv %s", b.GetString("NickServNick"))
 | 
			
		||||
		b.i.Cmd.Message(b.GetString("NickServNick"), "IDENTIFY "+b.GetString("NickServPassword"))
 | 
			
		||||
	} else {
 | 
			
		||||
		b.handlePrivMsg(client, event)
 | 
			
		||||
@@ -397,7 +398,7 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) {
 | 
			
		||||
	rmsg.Text += event.StripAction()
 | 
			
		||||
 | 
			
		||||
	// strip IRC colors
 | 
			
		||||
	re := regexp.MustCompile(`[[:cntrl:]](?:\d{1,2}(?:,\d{1,2})?)?`)
 | 
			
		||||
	re := regexp.MustCompile(`\x03(?:\d{1,2}(?:,\d{1,2})?)?|[[:cntrl:]]`)
 | 
			
		||||
	rmsg.Text = re.ReplaceAllString(rmsg.Text, "")
 | 
			
		||||
 | 
			
		||||
	// start detecting the charset
 | 
			
		||||
 
 | 
			
		||||
@@ -205,7 +205,7 @@ func (b *Bmattermost) handleMatterClient(messages chan *config.Message) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// only download avatars if we have a place to upload them (configured mediaserver)
 | 
			
		||||
		if b.General.MediaServerUpload != "" {
 | 
			
		||||
		if b.General.MediaServerUpload != "" || b.General.MediaDownloadPath != "" {
 | 
			
		||||
			b.handleDownloadAvatar(message.UserID, message.Channel)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -253,6 +253,11 @@ func (b *Bmattermost) handleMatterClient(messages chan *config.Message) {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// Use nickname instead of username if defined
 | 
			
		||||
		if nick := b.mc.GetNickName(rmsg.UserID); nick != "" {
 | 
			
		||||
			rmsg.Username = nick
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		messages <- rmsg
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,19 +14,22 @@ import (
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/config"
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/helper"
 | 
			
		||||
	"github.com/42wim/matterbridge/matterhook"
 | 
			
		||||
	"github.com/hashicorp/golang-lru"
 | 
			
		||||
	"github.com/nlopes/slack"
 | 
			
		||||
	"github.com/rs/xid"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Bslack struct {
 | 
			
		||||
	mh         *matterhook.Client
 | 
			
		||||
	sc         *slack.Client
 | 
			
		||||
	rtm        *slack.RTM
 | 
			
		||||
	Users      []slack.User
 | 
			
		||||
	Usergroups []slack.UserGroup
 | 
			
		||||
	si         *slack.Info
 | 
			
		||||
	channels   []slack.Channel
 | 
			
		||||
	uuid       string
 | 
			
		||||
	mh           *matterhook.Client
 | 
			
		||||
	sc           *slack.Client
 | 
			
		||||
	rtm          *slack.RTM
 | 
			
		||||
	Users        []slack.User
 | 
			
		||||
	Usergroups   []slack.UserGroup
 | 
			
		||||
	si           *slack.Info
 | 
			
		||||
	channels     []slack.Channel
 | 
			
		||||
	cache        *lru.Cache
 | 
			
		||||
	UseChannelID bool
 | 
			
		||||
	uuid         string
 | 
			
		||||
	*bridge.Config
 | 
			
		||||
	sync.RWMutex
 | 
			
		||||
}
 | 
			
		||||
@@ -34,7 +37,9 @@ type Bslack struct {
 | 
			
		||||
const messageDeleted = "message_deleted"
 | 
			
		||||
 | 
			
		||||
func New(cfg *bridge.Config) bridge.Bridger {
 | 
			
		||||
	return &Bslack{Config: cfg, uuid: xid.New().String()}
 | 
			
		||||
	b := &Bslack{Config: cfg, uuid: xid.New().String()}
 | 
			
		||||
	b.cache, _ = lru.New(5000)
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bslack) Command(cmd string) string {
 | 
			
		||||
@@ -98,6 +103,20 @@ func (b *Bslack) Disconnect() error {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bslack) JoinChannel(channel config.ChannelInfo) error {
 | 
			
		||||
	// use ID:channelid and resolve it to the actual name
 | 
			
		||||
	idcheck := strings.Split(channel.Name, "ID:")
 | 
			
		||||
	if len(idcheck) > 1 {
 | 
			
		||||
		b.UseChannelID = true
 | 
			
		||||
		ch, err := b.sc.GetChannelInfo(idcheck[1])
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		channel.Name = ch.Name
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// we can only join channels using the API
 | 
			
		||||
	if b.sc != nil {
 | 
			
		||||
		if strings.HasPrefix(b.GetString("Token"), "xoxb") {
 | 
			
		||||
@@ -131,11 +150,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 | 
			
		||||
		return b.sendWebhook(msg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// get the slack channel
 | 
			
		||||
	schannel, err := b.getChannelByName(msg.Channel)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	channelID := b.getChannelID(msg.Channel)
 | 
			
		||||
 | 
			
		||||
	// Delete message
 | 
			
		||||
	if msg.Event == config.EVENT_MSG_DELETE {
 | 
			
		||||
@@ -145,7 +160,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 | 
			
		||||
		}
 | 
			
		||||
		// we get a "slack <ID>", split it
 | 
			
		||||
		ts := strings.Fields(msg.ID)
 | 
			
		||||
		_, _, err := b.sc.DeleteMessage(schannel.ID, ts[1])
 | 
			
		||||
		_, _, err := b.sc.DeleteMessage(channelID, ts[1])
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return msg.ID, err
 | 
			
		||||
		}
 | 
			
		||||
@@ -160,7 +175,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 | 
			
		||||
	// Edit message if we have an ID
 | 
			
		||||
	if msg.ID != "" {
 | 
			
		||||
		ts := strings.Fields(msg.ID)
 | 
			
		||||
		_, _, _, err := b.sc.UpdateMessage(schannel.ID, ts[1], msg.Text)
 | 
			
		||||
		_, _, _, err := b.sc.UpdateMessage(channelID, ts[1], msg.Text)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return msg.ID, err
 | 
			
		||||
		}
 | 
			
		||||
@@ -192,16 +207,16 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
 | 
			
		||||
	// Upload a file if it exists
 | 
			
		||||
	if msg.Extra != nil {
 | 
			
		||||
		for _, rmsg := range helper.HandleExtra(&msg, b.General) {
 | 
			
		||||
			b.sc.PostMessage(schannel.ID, rmsg.Username+rmsg.Text, np)
 | 
			
		||||
			b.sc.PostMessage(channelID, rmsg.Username+rmsg.Text, np)
 | 
			
		||||
		}
 | 
			
		||||
		// check if we have files to upload (from slack, telegram or mattermost)
 | 
			
		||||
		if len(msg.Extra["file"]) > 0 {
 | 
			
		||||
			b.handleUploadFile(&msg, schannel.ID)
 | 
			
		||||
			b.handleUploadFile(&msg, channelID)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Post normal message
 | 
			
		||||
	_, id, err := b.sc.PostMessage(schannel.ID, msg.Text, np)
 | 
			
		||||
	_, id, err := b.sc.PostMessage(channelID, msg.Text, np)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
@@ -212,11 +227,11 @@ func (b *Bslack) Reload(cfg *bridge.Config) (string, error) {
 | 
			
		||||
	return "", nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bslack) getAvatar(user string) string {
 | 
			
		||||
func (b *Bslack) getAvatar(userid string) string {
 | 
			
		||||
	var avatar string
 | 
			
		||||
	if b.Users != nil {
 | 
			
		||||
		for _, u := range b.Users {
 | 
			
		||||
			if user == u.Name {
 | 
			
		||||
			if userid == u.ID {
 | 
			
		||||
				return u.Profile.Image48
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -224,6 +239,7 @@ func (b *Bslack) getAvatar(user string) string {
 | 
			
		||||
	return avatar
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
func (b *Bslack) getChannelByName(name string) (*slack.Channel, error) {
 | 
			
		||||
	if b.channels == nil {
 | 
			
		||||
		return nil, fmt.Errorf("%s: channel %s not found (no channels found)", b.Account, name)
 | 
			
		||||
@@ -235,6 +251,7 @@ func (b *Bslack) getChannelByName(name string) (*slack.Channel, error) {
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("%s: channel %s not found", b.Account, name)
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
func (b *Bslack) getChannelByID(ID string) (*slack.Channel, error) {
 | 
			
		||||
	if b.channels == nil {
 | 
			
		||||
@@ -270,7 +287,7 @@ func (b *Bslack) handleSlack() {
 | 
			
		||||
		message.Text = html.UnescapeString(message.Text)
 | 
			
		||||
 | 
			
		||||
		// Add the avatar
 | 
			
		||||
		message.Avatar = b.getAvatar(strings.ToLower(message.Username))
 | 
			
		||||
		message.Avatar = b.getAvatar(message.UserID)
 | 
			
		||||
 | 
			
		||||
		b.Log.Debugf("<= Message is %#v", message)
 | 
			
		||||
		b.Remote <- *message
 | 
			
		||||
@@ -300,18 +317,14 @@ func (b *Bslack) handleSlackClient(messages chan *config.Message) {
 | 
			
		||||
			b.Users, _ = b.sc.GetUsers()
 | 
			
		||||
			b.Usergroups, _ = b.sc.GetUserGroups()
 | 
			
		||||
		case *slack.ConnectedEvent:
 | 
			
		||||
			b.channels = ev.Info.Channels
 | 
			
		||||
			var err error
 | 
			
		||||
			b.channels, _, err = b.sc.GetConversations(&slack.GetConversationsParameters{Limit: 1000, Types: []string{"public_channel,private_channel,mpim,im"}})
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				b.Log.Errorf("Channel list failed: %#v", err)
 | 
			
		||||
			}
 | 
			
		||||
			b.si = ev.Info
 | 
			
		||||
			b.Users, _ = b.sc.GetUsers()
 | 
			
		||||
			b.Usergroups, _ = b.sc.GetUserGroups()
 | 
			
		||||
			// add private channels
 | 
			
		||||
			groups, _ := b.sc.GetGroups(true)
 | 
			
		||||
			for _, g := range groups {
 | 
			
		||||
				channel := new(slack.Channel)
 | 
			
		||||
				channel.ID = g.ID
 | 
			
		||||
				channel.Name = g.Name
 | 
			
		||||
				b.channels = append(b.channels, *channel)
 | 
			
		||||
			}
 | 
			
		||||
		case *slack.InvalidAuthEvent:
 | 
			
		||||
			b.Log.Fatalf("Invalid Token %#v", ev)
 | 
			
		||||
		case *slack.ConnectionErrorEvent:
 | 
			
		||||
@@ -431,7 +444,6 @@ func (b *Bslack) handleDownloadFile(rmsg *config.Message, file *slack.File) erro
 | 
			
		||||
	if len(results) > 0 {
 | 
			
		||||
		comment = results[0][1]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := helper.HandleDownloadSize(b.Log, rmsg, file.Name, int64(file.Size), b.General)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -448,15 +460,26 @@ func (b *Bslack) handleDownloadFile(rmsg *config.Message, file *slack.File) erro
 | 
			
		||||
 | 
			
		||||
// handleUploadFile handles native upload of files
 | 
			
		||||
func (b *Bslack) handleUploadFile(msg *config.Message, channelID string) (string, error) {
 | 
			
		||||
	var err error
 | 
			
		||||
	for _, f := range msg.Extra["file"] {
 | 
			
		||||
		fi := f.(config.FileInfo)
 | 
			
		||||
		_, err = b.sc.UploadFile(slack.FileUploadParameters{
 | 
			
		||||
		if msg.Text == fi.Comment {
 | 
			
		||||
			msg.Text = ""
 | 
			
		||||
		}
 | 
			
		||||
		/* because the result of the UploadFile is slower than the MessageEvent from slack
 | 
			
		||||
		we can't match on the file ID yet, so we have to match on the filename too
 | 
			
		||||
		*/
 | 
			
		||||
		b.Log.Debugf("Adding file %s to cache %s", fi.Name, time.Now().String())
 | 
			
		||||
		b.cache.Add("filename"+fi.Name, time.Now())
 | 
			
		||||
		res, err := b.sc.UploadFile(slack.FileUploadParameters{
 | 
			
		||||
			Reader:         bytes.NewReader(*fi.Data),
 | 
			
		||||
			Filename:       fi.Name,
 | 
			
		||||
			Channels:       []string{channelID},
 | 
			
		||||
			InitialComment: fi.Comment,
 | 
			
		||||
		})
 | 
			
		||||
		if res.ID != "" {
 | 
			
		||||
			b.Log.Debugf("Adding fileid %s to cache %s", res.ID, time.Now().String())
 | 
			
		||||
			b.cache.Add("file"+res.ID, time.Now())
 | 
			
		||||
		}
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			b.Log.Errorf("uploadfile %#v", err)
 | 
			
		||||
		}
 | 
			
		||||
@@ -486,6 +509,10 @@ func (b *Bslack) handleMessageEvent(ev *slack.MessageEvent) (*config.Message, er
 | 
			
		||||
 | 
			
		||||
	rmsg := config.Message{Text: ev.Text, Channel: channel.Name, Account: b.Account, ID: "slack " + ev.Timestamp, Extra: make(map[string][]interface{})}
 | 
			
		||||
 | 
			
		||||
	if b.UseChannelID {
 | 
			
		||||
		rmsg.Channel = "ID:" + channel.ID
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// find the user id and name
 | 
			
		||||
	if ev.User != "" && ev.SubType != messageDeleted && ev.SubType != "file_comment" {
 | 
			
		||||
		user, err := b.rtm.GetUserInfo(ev.User)
 | 
			
		||||
@@ -575,7 +602,7 @@ func (b *Bslack) handleMessageEvent(ev *slack.MessageEvent) (*config.Message, er
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Only deleted messages can have a empty username and text
 | 
			
		||||
	if (rmsg.Text == "" || rmsg.Username == "") && ev.SubType != messageDeleted {
 | 
			
		||||
	if (rmsg.Text == "" || rmsg.Username == "") && ev.SubType != messageDeleted && len(ev.Files) == 0 {
 | 
			
		||||
		// this is probably a webhook we couldn't resolve
 | 
			
		||||
		if ev.BotID != "" {
 | 
			
		||||
			return nil, fmt.Errorf("probably an incoming webhook we couldn't resolve (maybe ourselves)")
 | 
			
		||||
@@ -589,10 +616,12 @@ func (b *Bslack) handleMessageEvent(ev *slack.MessageEvent) (*config.Message, er
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// if we have a file attached, download it (in memory) and put a pointer to it in msg.Extra
 | 
			
		||||
	if ev.File != nil {
 | 
			
		||||
		err := b.handleDownloadFile(&rmsg, ev.File)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			b.Log.Errorf("download failed: %s", err)
 | 
			
		||||
	if len(ev.Files) > 0 {
 | 
			
		||||
		for _, f := range ev.Files {
 | 
			
		||||
			err := b.handleDownloadFile(&rmsg, &f)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				b.Log.Errorf("download failed: %s", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -680,5 +709,36 @@ func (b *Bslack) skipMessageEvent(ev *slack.MessageEvent) bool {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(ev.Files) > 0 {
 | 
			
		||||
		for _, f := range ev.Files {
 | 
			
		||||
			// if the file is in the cache and isn't older then a minute, skip it
 | 
			
		||||
			if ts, ok := b.cache.Get("file" + f.ID); ok && time.Since(ts.(time.Time)) < time.Minute {
 | 
			
		||||
				b.Log.Debugf("Not downloading file id %s which we uploaded", f.ID)
 | 
			
		||||
				return true
 | 
			
		||||
			} else {
 | 
			
		||||
				if ts, ok := b.cache.Get("filename" + f.Name); ok && time.Since(ts.(time.Time)) < time.Second*10 {
 | 
			
		||||
					b.Log.Debugf("Not downloading file name %s which we uploaded", f.Name)
 | 
			
		||||
					return true
 | 
			
		||||
				} else {
 | 
			
		||||
					b.Log.Debugf("Not skipping %s %s", f.Name, time.Now().String())
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bslack) getChannelID(name string) string {
 | 
			
		||||
	idcheck := strings.Split(name, "ID:")
 | 
			
		||||
	if len(idcheck) > 1 {
 | 
			
		||||
		return idcheck[1]
 | 
			
		||||
	}
 | 
			
		||||
	for _, channel := range b.channels {
 | 
			
		||||
		if channel.Name == name {
 | 
			
		||||
			return channel.ID
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								changelog.md
									
									
									
									
									
								
							@@ -1,3 +1,31 @@
 | 
			
		||||
# v1.11.3
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
* mattermost: fix panic when using webhooks #491
 | 
			
		||||
* slack: fix issues regarding API changes and lots of channels #489
 | 
			
		||||
* irc: fix rejoin on kick problem #488
 | 
			
		||||
 | 
			
		||||
# v1.11.2
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
* slack: fix slack API changes regarding to files/images
 | 
			
		||||
 | 
			
		||||
# v1.11.1
 | 
			
		||||
 | 
			
		||||
## New features
 | 
			
		||||
* slack: Add support for slack channels by ID. Closes #436
 | 
			
		||||
* discord: Clip too long messages sent to discord (discord). Closes #440
 | 
			
		||||
 | 
			
		||||
## Bugfix
 | 
			
		||||
* general: fix possible panic on downloads that are too big #448
 | 
			
		||||
* general: Fix avatar uploads to work with MediaDownloadPath. Closes #454
 | 
			
		||||
* discord: allow receiving of topic changes/channel leave/joins from other bridges through the webhook
 | 
			
		||||
* discord: Add a space before url in file uploads (discord). Closes #461
 | 
			
		||||
* discord:  Skip empty messages being sent with the webhook (discord). #469
 | 
			
		||||
* mattermost: Use nickname instead of username if defined (mattermost). Closes #452
 | 
			
		||||
* irc: Stop numbers being stripped after non-color control codes (irc) (#465)
 | 
			
		||||
* slack: Use UserID to look for avatar instead of username (slack). Closes #472
 | 
			
		||||
 | 
			
		||||
# v1.11.0
 | 
			
		||||
 | 
			
		||||
## New features
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
module github.com/42wim/matterbridge
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557
 | 
			
		||||
	github.com/BurntSushi/toml v0.0.0-20170318202913-d94612f9fc14
 | 
			
		||||
	github.com/Philipp15b/go-steam v0.0.0-20161020161927-e0f3bb9566e3
 | 
			
		||||
	github.com/Sirupsen/logrus v1.0.6 // indirect
 | 
			
		||||
	github.com/alecthomas/log4go v0.0.0-20160307011253-e5dc62318d9b // indirect
 | 
			
		||||
	github.com/bwmarrin/discordgo v0.0.0-20180201002541-8d5ab59c63e5 // indirect
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.0 // indirect
 | 
			
		||||
	github.com/dfordsoft/golib v0.0.0-20180313113957-2ea3495aee1d
 | 
			
		||||
	github.com/dgrijalva/jwt-go v0.0.0-20170508165458-6c8dedd55f8a // indirect
 | 
			
		||||
	github.com/fsnotify/fsnotify v1.4.7
 | 
			
		||||
	github.com/go-telegram-bot-api/telegram-bot-api v0.0.0-20180428185002-212b1541150c
 | 
			
		||||
	github.com/golang/protobuf v0.0.0-20170613224224-e325f446bebc // indirect
 | 
			
		||||
	github.com/google/gops v0.0.0-20170319002943-62f833fc9f6c
 | 
			
		||||
	github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f // indirect
 | 
			
		||||
	github.com/gorilla/schema v0.0.0-20170317173100-f3c80893412c
 | 
			
		||||
	github.com/gorilla/websocket v0.0.0-20170319172727-a91eba7f9777
 | 
			
		||||
	github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad
 | 
			
		||||
	github.com/hashicorp/hcl v0.0.0-20171017181929-23c074d0eceb // indirect
 | 
			
		||||
	github.com/hpcloud/tail v1.0.0 // indirect
 | 
			
		||||
	github.com/jpillora/backoff v0.0.0-20170222002228-06c7a16c845d
 | 
			
		||||
	github.com/jtolds/gls v4.2.1+incompatible // indirect
 | 
			
		||||
	github.com/kardianos/osext v0.0.0-20170207191655-9b883c5eb462 // indirect
 | 
			
		||||
	github.com/kr/pretty v0.1.0 // indirect
 | 
			
		||||
	github.com/labstack/echo v0.0.0-20180219162101-7eec915044a1
 | 
			
		||||
	github.com/labstack/gommon v0.2.1 // indirect
 | 
			
		||||
	github.com/lrstanley/girc v0.0.0-20180427160007-102f17f86306
 | 
			
		||||
	github.com/magiconair/properties v0.0.0-20180217134545-2c9e95027885 // indirect
 | 
			
		||||
	github.com/matterbridge/discordgo v0.0.0-20180806170629-ef40ff5ba64f
 | 
			
		||||
	github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91
 | 
			
		||||
	github.com/matterbridge/gomatrix v0.0.0-20171224233421-78ac6a1a0f5f
 | 
			
		||||
	github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544
 | 
			
		||||
	github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
 | 
			
		||||
	github.com/mattermost/platform v4.6.2+incompatible
 | 
			
		||||
	github.com/mattn/go-colorable v0.0.0-20170210172801-5411d3eea597 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.0-20170216235908-dda3de49cbfc // indirect
 | 
			
		||||
	github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
 | 
			
		||||
	github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 // indirect
 | 
			
		||||
	github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 // indirect
 | 
			
		||||
	github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect
 | 
			
		||||
	github.com/nicksnyder/go-i18n v1.4.0 // indirect
 | 
			
		||||
	github.com/nlopes/slack v0.3.1-0.20180805133408-21749ab136a8
 | 
			
		||||
	github.com/onsi/ginkgo v1.6.0 // indirect
 | 
			
		||||
	github.com/onsi/gomega v1.4.1 // indirect
 | 
			
		||||
	github.com/paulrosania/go-charset v0.0.0-20151028000031-621bb39fcc83
 | 
			
		||||
	github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 // indirect
 | 
			
		||||
	github.com/pelletier/go-toml v0.0.0-20180228233631-05bcc0fb0d3e // indirect
 | 
			
		||||
	github.com/peterhellberg/emojilib v0.0.0-20170616163716-41920917e271
 | 
			
		||||
	github.com/pkg/errors v0.8.0 // indirect
 | 
			
		||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
			
		||||
	github.com/rs/xid v0.0.0-20180525034800-088c5cf1423a
 | 
			
		||||
	github.com/russross/blackfriday v1.5.1
 | 
			
		||||
	github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca
 | 
			
		||||
	github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 // indirect
 | 
			
		||||
	github.com/shazow/ssh-chat v0.0.0-20171012174035-2078e1381991
 | 
			
		||||
	github.com/sirupsen/logrus v0.0.0-20180213143110-8c0189d9f6bb
 | 
			
		||||
	github.com/smartystreets/assertions v0.0.0-20180803164922-886ec427f6b9 // indirect
 | 
			
		||||
	github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
 | 
			
		||||
	github.com/spf13/afero v0.0.0-20180211162714-bbf41cb36dff // indirect
 | 
			
		||||
	github.com/spf13/cast v1.2.0 // indirect
 | 
			
		||||
	github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec // indirect
 | 
			
		||||
	github.com/spf13/pflag v0.0.0-20180220143236-ee5fd03fd6ac // indirect
 | 
			
		||||
	github.com/spf13/viper v0.0.0-20171227194143-aafc9e6bc7b7
 | 
			
		||||
	github.com/stretchr/testify v0.0.0-20170714215325-05e8a0eda380
 | 
			
		||||
	github.com/technoweenie/multipartstreamer v1.0.1 // indirect
 | 
			
		||||
	github.com/valyala/bytebufferpool v0.0.0-20160817181652-e746df99fe4a // indirect
 | 
			
		||||
	github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4 // indirect
 | 
			
		||||
	github.com/x-cray/logrus-prefixed-formatter v0.5.2 // indirect
 | 
			
		||||
	github.com/zfjagann/golang-ring v0.0.0-20141111230621-17637388c9f6
 | 
			
		||||
	golang.org/x/crypto v0.0.0-20180228161326-91a49db82a88 // indirect
 | 
			
		||||
	golang.org/x/net v0.0.0-20180108090419-434ec0c7fe37 // indirect
 | 
			
		||||
	golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect
 | 
			
		||||
	golang.org/x/sys v0.0.0-20171130163741-8b4580aae2a0 // indirect
 | 
			
		||||
	golang.org/x/text v0.0.0-20180511172408-5c1cf69b5978 // indirect
 | 
			
		||||
	gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect
 | 
			
		||||
	gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
 | 
			
		||||
	gopkg.in/fsnotify.v1 v1.4.7 // indirect
 | 
			
		||||
	gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.1 // indirect
 | 
			
		||||
	gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
 | 
			
		||||
	gopkg.in/yaml.v2 v2.0.0-20160301204022-a83829b6f129 // indirect
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										163
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557 h1:IZtuWGfzQnKnCSu+vl8WGLhpVQ5Uvy3rlSwqXSg+sQg=
 | 
			
		||||
github.com/42wim/go-gitter v0.0.0-20170828205020-017310c2d557/go.mod h1:jL0YSXMs/txjtGJ4PWrmETOk6KUHMDPMshgQZlTeB3Y=
 | 
			
		||||
github.com/BurntSushi/toml v0.0.0-20170318202913-d94612f9fc14 h1:v/zr4ns/4sSahF9KBm4Uc933bLsEEv7LuT63CJ019yo=
 | 
			
		||||
github.com/BurntSushi/toml v0.0.0-20170318202913-d94612f9fc14/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 | 
			
		||||
github.com/Philipp15b/go-steam v0.0.0-20161020161927-e0f3bb9566e3 h1:V4+1E1SRYUySqwOoI3ZphFADtabbF568zTHa5ix/zU0=
 | 
			
		||||
github.com/Philipp15b/go-steam v0.0.0-20161020161927-e0f3bb9566e3/go.mod h1:HuVM+sZFzumUdKPWiz+IlCMb4RdsKdT3T+nQBKL+sYg=
 | 
			
		||||
github.com/Sirupsen/logrus v1.0.6 h1:HCAGQRk48dRVPA5Y+Yh0qdCSTzPOyU1tBJ7Q9YzotII=
 | 
			
		||||
github.com/Sirupsen/logrus v1.0.6/go.mod h1:rmk17hk6i8ZSAJkSDa7nOxamrG+SP4P0mm+DAvExv4U=
 | 
			
		||||
github.com/alecthomas/log4go v0.0.0-20160307011253-e5dc62318d9b h1:1OpGXps6UOY5HtQaQcLowsV1qMWCNBzhFvK7q4fgXtc=
 | 
			
		||||
github.com/alecthomas/log4go v0.0.0-20160307011253-e5dc62318d9b/go.mod h1:iCVmQ9g4TfaRX5m5jq5sXY7RXYWPv9/PynM/GocbG3w=
 | 
			
		||||
github.com/bwmarrin/discordgo v0.0.0-20180201002541-8d5ab59c63e5 h1:M7u44DKGpA5goDIBf0zRMYhT1Sp2Rd7hiTzXfeuw1UY=
 | 
			
		||||
github.com/bwmarrin/discordgo v0.0.0-20180201002541-8d5ab59c63e5/go.mod h1:5NIvFv5Z7HddYuXbuQegZ684DleQaCFqChP2iuBivJ8=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/dfordsoft/golib v0.0.0-20180313113957-2ea3495aee1d h1:rONNnZDE5CYuaSFQk+gP4GEQTXEUcyQ5p6p/dgxIHas=
 | 
			
		||||
github.com/dfordsoft/golib v0.0.0-20180313113957-2ea3495aee1d/go.mod h1:UGa5M2Sz/Uh13AMse4+RELKCDw7kqgqlTjeGae+7vUY=
 | 
			
		||||
github.com/dgrijalva/jwt-go v0.0.0-20170508165458-6c8dedd55f8a h1:MuHMeSsXbNEeUyxjB7T9P8s1+5k8OLTC/M27qsVwixM=
 | 
			
		||||
github.com/dgrijalva/jwt-go v0.0.0-20170508165458-6c8dedd55f8a/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 | 
			
		||||
github.com/go-telegram-bot-api/telegram-bot-api v0.0.0-20180428185002-212b1541150c h1:3gMh737vMGqAkkkSfNbwjO8VRHOSaCjYRG4y9xVMEIQ=
 | 
			
		||||
github.com/go-telegram-bot-api/telegram-bot-api v0.0.0-20180428185002-212b1541150c/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM=
 | 
			
		||||
github.com/golang/protobuf v0.0.0-20170613224224-e325f446bebc h1:wdhDSKrkYy24mcfzuA3oYm58h0QkyXjwERCkzJDP5kA=
 | 
			
		||||
github.com/golang/protobuf v0.0.0-20170613224224-e325f446bebc/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 | 
			
		||||
github.com/google/gops v0.0.0-20170319002943-62f833fc9f6c h1:MrMA1vhRTNidtgENqmsmLOIUS6ixMBOU/g10rm7IUe8=
 | 
			
		||||
github.com/google/gops v0.0.0-20170319002943-62f833fc9f6c/go.mod h1:pMQgrscwEK/aUSW1IFSaBPbJX82FPHWaSoJw1axQfD0=
 | 
			
		||||
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f h1:FDM3EtwZLyhW48YRiyqjivNlNZjAObv4xt4NnJaU+NQ=
 | 
			
		||||
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 | 
			
		||||
github.com/gorilla/schema v0.0.0-20170317173100-f3c80893412c h1:mORYpib1aLu3M2Oi50Z1pNTXuDJEHcoLb6oo6VdOutk=
 | 
			
		||||
github.com/gorilla/schema v0.0.0-20170317173100-f3c80893412c/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
 | 
			
		||||
github.com/gorilla/websocket v0.0.0-20170319172727-a91eba7f9777 h1:JIM+OacoOJRU30xpjMf8sulYqjr0ViA3WDrTX6j/yDI=
 | 
			
		||||
github.com/gorilla/websocket v0.0.0-20170319172727-a91eba7f9777/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 | 
			
		||||
github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad h1:eMxs9EL0PvIGS9TTtxg4R+JxuPGav82J8rA+GFnY7po=
 | 
			
		||||
github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 | 
			
		||||
github.com/hashicorp/hcl v0.0.0-20171017181929-23c074d0eceb h1:1OvvPvZkn/yCQ3xBcM8y4020wdkMXPHLB4+NfoGWh4U=
 | 
			
		||||
github.com/hashicorp/hcl v0.0.0-20171017181929-23c074d0eceb/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
 | 
			
		||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 | 
			
		||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 | 
			
		||||
github.com/jpillora/backoff v0.0.0-20170222002228-06c7a16c845d h1:ETeT81zgLgSNc4BWdDO2Fg9ekVItYErbNtE8mKD2pJA=
 | 
			
		||||
github.com/jpillora/backoff v0.0.0-20170222002228-06c7a16c845d/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
 | 
			
		||||
github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
 | 
			
		||||
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 | 
			
		||||
github.com/kardianos/osext v0.0.0-20170207191655-9b883c5eb462 h1:oSOOTPHkCzMeu1vJ0nHxg5+XZBdMMjNa+6NPnm8arok=
 | 
			
		||||
github.com/kardianos/osext v0.0.0-20170207191655-9b883c5eb462/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
 | 
			
		||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/labstack/echo v0.0.0-20180219162101-7eec915044a1 h1:cOIt0LZKdfeirAfTP4VtIJuWbjVTGtd1suuPXp/J+dE=
 | 
			
		||||
github.com/labstack/echo v0.0.0-20180219162101-7eec915044a1/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s=
 | 
			
		||||
github.com/labstack/gommon v0.2.1 h1:C+I4NYknueQncqKYZQ34kHsLZJVeB5KwPUhnO0nmbpU=
 | 
			
		||||
github.com/labstack/gommon v0.2.1/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4=
 | 
			
		||||
github.com/lrstanley/girc v0.0.0-20180427160007-102f17f86306 h1:IqN61cmi7LM/IaYaP9a/KXFtHRS2a3+WHu8GhAXJT7c=
 | 
			
		||||
github.com/lrstanley/girc v0.0.0-20180427160007-102f17f86306/go.mod h1:7cRs1SIBfKQ7e3Tam6GKTILSNHzR862JD0JpINaZoJk=
 | 
			
		||||
github.com/magiconair/properties v0.0.0-20180217134545-2c9e95027885 h1:HWxJJvF+QceKcql4r9PC93NtMEgEBfBxlQrZPvbcQvs=
 | 
			
		||||
github.com/magiconair/properties v0.0.0-20180217134545-2c9e95027885/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 | 
			
		||||
github.com/matterbridge/discordgo v0.0.0-20180806170629-ef40ff5ba64f h1:9IIOO9Aznn8zJx3nokZ4U6nfuzWw5xAlygPvuRZMisQ=
 | 
			
		||||
github.com/matterbridge/discordgo v0.0.0-20180806170629-ef40ff5ba64f/go.mod h1:5QtN542bJn9FunZqYlIbleNtToxfLCVV9pW7m7Q42Fc=
 | 
			
		||||
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91 h1:KzDEcy8eDbTx881giW8a6llsAck3e2bJvMyKvh1IK+k=
 | 
			
		||||
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
 | 
			
		||||
github.com/matterbridge/gomatrix v0.0.0-20171224233421-78ac6a1a0f5f h1:2eKh6Qi/sJ8bXvYMoyVfQxHgR8UcCDWjOmhV1oCstMU=
 | 
			
		||||
github.com/matterbridge/gomatrix v0.0.0-20171224233421-78ac6a1a0f5f/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
 | 
			
		||||
github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544 h1:A8lLG3DAu75B5jITHs9z4JBmU6oCq1WiUNnDAmqKCZc=
 | 
			
		||||
github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
 | 
			
		||||
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61 h1:R/MgM/eUyRBQx2FiH6JVmXck8PaAuKfe2M1tWIzW7nE=
 | 
			
		||||
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU=
 | 
			
		||||
github.com/mattermost/platform v4.6.2+incompatible h1:9WqKNuJFIp6SDYn5wl1RF5urdhEw8d7o5tAOwT1MW0A=
 | 
			
		||||
github.com/mattermost/platform v4.6.2+incompatible/go.mod h1:HjGKtkQNu3HXTOykPMQckMnH11WHvNvQqDBNnVXVbfM=
 | 
			
		||||
github.com/mattn/go-colorable v0.0.0-20170210172801-5411d3eea597 h1:hGizH4aMDFFt1iOA4HNKC13lqIBoCyxIjWcAnWIy7aU=
 | 
			
		||||
github.com/mattn/go-colorable v0.0.0-20170210172801-5411d3eea597/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.0-20170216235908-dda3de49cbfc h1:pK7tzC30erKOTfEDCYGvPZQCkmM9X5iSmmAR5m9x3Yc=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.0-20170216235908-dda3de49cbfc/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 | 
			
		||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
 | 
			
		||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
 | 
			
		||||
github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238 h1:+MZW2uvHgN8kYvksEN3f7eFL2wpzk0GxmlFsMybWc7E=
 | 
			
		||||
github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 | 
			
		||||
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 h1:oKIteTqeSpenyTrOVj5zkiyCaflLa8B+CD0324otT+o=
 | 
			
		||||
github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
 | 
			
		||||
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff h1:HLGD5/9UxxfEuO9DtP8gnTmNtMxbPyhYltfxsITel8g=
 | 
			
		||||
github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff/go.mod h1:B8jLfIIPn2sKyWr0D7cL2v7tnrDD5z291s2Zypdu89E=
 | 
			
		||||
github.com/nicksnyder/go-i18n v1.4.0 h1:AgLl+Yq7kg5OYlzCgu9cKTZOyI4tD/NgukKqLqC8E+I=
 | 
			
		||||
github.com/nicksnyder/go-i18n v1.4.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
 | 
			
		||||
github.com/nlopes/slack v0.0.0-20180101221843-107290b5bbaf h1:M+xGhDxie/MqC+tzs+3ZHBSY4Wsv+fEkrpIMCKy8PTg=
 | 
			
		||||
github.com/nlopes/slack v0.0.0-20180101221843-107290b5bbaf/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM=
 | 
			
		||||
github.com/nlopes/slack v0.3.1-0.20180805133408-21749ab136a8 h1:PSy8NkmkyldLmPPnNNw7mwfQFOHDqOI6bINpJ+/KV7Y=
 | 
			
		||||
github.com/nlopes/slack v0.3.1-0.20180805133408-21749ab136a8/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM=
 | 
			
		||||
github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
 | 
			
		||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 | 
			
		||||
github.com/onsi/gomega v1.4.1 h1:PZSj/UFNaVp3KxrzHOcS7oyuWA7LoOY/77yCTEFu21U=
 | 
			
		||||
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 | 
			
		||||
github.com/paulrosania/go-charset v0.0.0-20151028000031-621bb39fcc83 h1:XQonH5Iv5rbyIkMJOQ4xKmKHQTh8viXtRSmep5Ca5I4=
 | 
			
		||||
github.com/paulrosania/go-charset v0.0.0-20151028000031-621bb39fcc83/go.mod h1:YnNlZP7l4MhyGQ4CBRwv6ohZTPrUJJZtEv4ZgADkbs4=
 | 
			
		||||
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606 h1:/CPgDYrfeK2LMK6xcUhvI17yO9SlpAdDIJGkhDEgO8A=
 | 
			
		||||
github.com/pborman/uuid v0.0.0-20160216163710-c55201b03606/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
 | 
			
		||||
github.com/pelletier/go-toml v0.0.0-20180228233631-05bcc0fb0d3e h1:ZW8599OjioQsmBbkGpyruHUlRVQceYFWnJsGr4NCkiA=
 | 
			
		||||
github.com/pelletier/go-toml v0.0.0-20180228233631-05bcc0fb0d3e/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 | 
			
		||||
github.com/peterhellberg/emojilib v0.0.0-20170616163716-41920917e271 h1:wQ9lVx75za6AT2kI0S9QID0uWuwTWnvcTfN+uw1F8vg=
 | 
			
		||||
github.com/peterhellberg/emojilib v0.0.0-20170616163716-41920917e271/go.mod h1:G7LufuPajuIvdt9OitkNt2qh0mmvD4bfRgRM7bhDIOA=
 | 
			
		||||
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
 | 
			
		||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/rs/xid v0.0.0-20180525034800-088c5cf1423a h1:UWKek6MK3K6/TpbsFcv+8rrO6rSc6KKSp2FbMOHWsq4=
 | 
			
		||||
github.com/rs/xid v0.0.0-20180525034800-088c5cf1423a/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 | 
			
		||||
github.com/russross/blackfriday v1.5.1 h1:B8ZN6pD4PVofmlDCDUdELeYrbsVIDM/bpjW3v3zgcRc=
 | 
			
		||||
github.com/russross/blackfriday v1.5.1/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 | 
			
		||||
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI=
 | 
			
		||||
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
 | 
			
		||||
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1 h1:Lx3BlDGFElJt4u/zKc9A3BuGYbQAGlEFyPuUA3jeMD0=
 | 
			
		||||
github.com/shazow/rateio v0.0.0-20150116013248-e8e00881e5c1/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI=
 | 
			
		||||
github.com/shazow/ssh-chat v0.0.0-20171012174035-2078e1381991 h1:PQiUTDzUC5EUh0vNurK7KQS22zlKqLLOFn+K9nJXDQQ=
 | 
			
		||||
github.com/shazow/ssh-chat v0.0.0-20171012174035-2078e1381991/go.mod h1:KwtnpMClmrXsHCKTbRui5xBUNt17n1GGrGhdiw2KcoY=
 | 
			
		||||
github.com/sirupsen/logrus v0.0.0-20180213143110-8c0189d9f6bb h1:eKjx20EiekBRT2tjZ0XEdKpftfPJQwiavtFshwTyqf0=
 | 
			
		||||
github.com/sirupsen/logrus v0.0.0-20180213143110-8c0189d9f6bb/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
 | 
			
		||||
github.com/smartystreets/assertions v0.0.0-20180803164922-886ec427f6b9 h1:lXQ+j+KwZcbwrbgU0Rp4Eglg3EJLHbuZU3BbOqAGBmg=
 | 
			
		||||
github.com/smartystreets/assertions v0.0.0-20180803164922-886ec427f6b9/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 | 
			
		||||
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a h1:JSvGDIbmil4Ui/dDdFBExb7/cmkNjyX5F97oglmvCDo=
 | 
			
		||||
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
 | 
			
		||||
github.com/spf13/afero v0.0.0-20180211162714-bbf41cb36dff h1:HLvGWId7M56TfuxTeZ6aoiTAcrWO5Mnq/ArwVRgV62I=
 | 
			
		||||
github.com/spf13/afero v0.0.0-20180211162714-bbf41cb36dff/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 | 
			
		||||
github.com/spf13/cast v1.2.0 h1:HHl1DSRbEQN2i8tJmtS6ViPyHx35+p51amrdsiTCrkg=
 | 
			
		||||
github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
 | 
			
		||||
github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec h1:2ZXvIUGghLpdTVHR1UfvfrzoVlZaE/yOWC5LueIHZig=
 | 
			
		||||
github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 | 
			
		||||
github.com/spf13/pflag v0.0.0-20180220143236-ee5fd03fd6ac h1:+uzyQ0TQ3aKorQxsOjcDDgE7CuUXwpkKnK19LULQALQ=
 | 
			
		||||
github.com/spf13/pflag v0.0.0-20180220143236-ee5fd03fd6ac/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 | 
			
		||||
github.com/spf13/viper v0.0.0-20171227194143-aafc9e6bc7b7 h1:Wj4cg2M6Um7j1N7yD/mxsdy1/wrsdjzVha2eWdOhti8=
 | 
			
		||||
github.com/spf13/viper v0.0.0-20171227194143-aafc9e6bc7b7/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
 | 
			
		||||
github.com/stretchr/testify v0.0.0-20170714215325-05e8a0eda380 h1:MsolbevHkd4SpbeG4dHLHj6I9jzoohyNI6EK6JvR5hE=
 | 
			
		||||
github.com/stretchr/testify v0.0.0-20170714215325-05e8a0eda380/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 | 
			
		||||
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
 | 
			
		||||
github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
 | 
			
		||||
github.com/valyala/bytebufferpool v0.0.0-20160817181652-e746df99fe4a h1:AOcehBWpFhYPYw0ioDTppQzgI8pAAahVCiMSKTp9rbo=
 | 
			
		||||
github.com/valyala/bytebufferpool v0.0.0-20160817181652-e746df99fe4a/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 | 
			
		||||
github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4 h1:gKMu1Bf6QINDnvyZuTaACm9ofY+PRh+5vFz4oxBZeF8=
 | 
			
		||||
github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw=
 | 
			
		||||
github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg=
 | 
			
		||||
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
 | 
			
		||||
github.com/zfjagann/golang-ring v0.0.0-20141111230621-17637388c9f6 h1:/WULP+6asFz569UbOwg87f3iDT7T+GF5/vjLmL51Pdk=
 | 
			
		||||
github.com/zfjagann/golang-ring v0.0.0-20141111230621-17637388c9f6/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20180228161326-91a49db82a88 h1:jLkAo/qlT9whgCLYC5GAJ9kcKrv3Wj8VCc4N+KJ4wpw=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20180228161326-91a49db82a88/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 | 
			
		||||
golang.org/x/net v0.0.0-20180108090419-434ec0c7fe37 h1:BkNcmLtAVeWe9h5k0jt24CQgaG5vb4x/doFbAiEC/Ho=
 | 
			
		||||
golang.org/x/net v0.0.0-20180108090419-434ec0c7fe37/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
 | 
			
		||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20171130163741-8b4580aae2a0 h1:x4M4WCms+ErQg/4VyECbP2kSNcDJ6nLwqEGov1QPtqk=
 | 
			
		||||
golang.org/x/sys v0.0.0-20171130163741-8b4580aae2a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/text v0.0.0-20180511172408-5c1cf69b5978 h1:WNm0tmiuBMW4FJRuXKWOqaQfmKptHs0n8nTCyG0ayjc=
 | 
			
		||||
golang.org/x/text v0.0.0-20180511172408-5c1cf69b5978/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo=
 | 
			
		||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 | 
			
		||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 | 
			
		||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.1 h1:4buh9nXkpqc7+GLzDFHei0jwoU9wCQYfVB5Kfo58Yz0=
 | 
			
		||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.1/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
 | 
			
		||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 | 
			
		||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 | 
			
		||||
gopkg.in/yaml.v2 v2.0.0-20160301204022-a83829b6f129 h1:RBgb9aPUbZ9nu66ecQNIBNsA7j3mB5h8PNDIfhPjaJg=
 | 
			
		||||
gopkg.in/yaml.v2 v2.0.0-20160301204022-a83829b6f129/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 | 
			
		||||
@@ -9,12 +9,12 @@ import (
 | 
			
		||||
	"github.com/42wim/matterbridge/bridge/config"
 | 
			
		||||
	"github.com/42wim/matterbridge/gateway"
 | 
			
		||||
	"github.com/google/gops/agent"
 | 
			
		||||
	prefixed "github.com/matterbridge/logrus-prefixed-formatter"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
	prefixed "github.com/x-cray/logrus-prefixed-formatter"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	version = "1.11.0"
 | 
			
		||||
	version = "1.11.3"
 | 
			
		||||
	githash string
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1377,6 +1377,7 @@ enable=true
 | 
			
		||||
    #gitter     - username/room 
 | 
			
		||||
    #xmpp       - channel
 | 
			
		||||
    #slack      - channel (without the #)
 | 
			
		||||
    #           - ID:C123456 (where C123456 is the channel ID) does not work with webhook
 | 
			
		||||
    #discord    - channel (without the #)
 | 
			
		||||
    #           - ID:123456789 (where 123456789 is the channel ID) 
 | 
			
		||||
    #               (https://github.com/42wim/matterbridge/issues/57)
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,8 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	prefixed "github.com/matterbridge/logrus-prefixed-formatter"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
	prefixed "github.com/x-cray/logrus-prefixed-formatter"
 | 
			
		||||
 | 
			
		||||
	"github.com/gorilla/websocket"
 | 
			
		||||
	"github.com/hashicorp/golang-lru"
 | 
			
		||||
@@ -310,6 +310,11 @@ func (m *MMClient) parseMessage(rmsg *Message) {
 | 
			
		||||
	switch rmsg.Raw.Event {
 | 
			
		||||
	case model.WEBSOCKET_EVENT_POSTED, model.WEBSOCKET_EVENT_POST_EDITED, model.WEBSOCKET_EVENT_POST_DELETED:
 | 
			
		||||
		m.parseActionPost(rmsg)
 | 
			
		||||
	case "user_updated":
 | 
			
		||||
		user := rmsg.Raw.Data["user"].(map[string]interface{})
 | 
			
		||||
		if _, ok := user["id"].(string); ok {
 | 
			
		||||
			m.UpdateUser(user["id"].(string))
 | 
			
		||||
		}
 | 
			
		||||
		/*
 | 
			
		||||
			case model.ACTION_USER_REMOVED:
 | 
			
		||||
				m.handleWsActionUserRemoved(&rmsg)
 | 
			
		||||
@@ -750,6 +755,16 @@ func (m *MMClient) GetUser(userId string) *model.User {
 | 
			
		||||
	return m.Users[userId]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MMClient) UpdateUser(userId string) {
 | 
			
		||||
	m.Lock()
 | 
			
		||||
	defer m.Unlock()
 | 
			
		||||
	res, resp := m.Client.GetUser(userId, "")
 | 
			
		||||
	if resp.Error != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	m.Users[userId] = res
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MMClient) GetUserName(userId string) string {
 | 
			
		||||
	user := m.GetUser(userId)
 | 
			
		||||
	if user != nil {
 | 
			
		||||
@@ -758,6 +773,14 @@ func (m *MMClient) GetUserName(userId string) string {
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MMClient) GetNickName(userId string) string {
 | 
			
		||||
	user := m.GetUser(userId)
 | 
			
		||||
	if user != nil {
 | 
			
		||||
		return user.Nickname
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MMClient) GetStatus(userId string) string {
 | 
			
		||||
	res, resp := m.Client.GetUserStatus(userId, "")
 | 
			
		||||
	if resp.Error != nil {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/42wim/go-gitter/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/42wim/go-gitter/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
.idea
 | 
			
		||||
/test
 | 
			
		||||
app.yaml
 | 
			
		||||
							
								
								
									
										154
									
								
								vendor/github.com/42wim/go-gitter/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								vendor/github.com/42wim/go-gitter/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,154 @@
 | 
			
		||||
# gitter
 | 
			
		||||
Gitter API in Go
 | 
			
		||||
https://developer.gitter.im
 | 
			
		||||
 | 
			
		||||
#### Install
 | 
			
		||||
 | 
			
		||||
`go get github.com/sromku/go-gitter`
 | 
			
		||||
 | 
			
		||||
- [Initialize](#initialize)
 | 
			
		||||
- [Users](#users)
 | 
			
		||||
- [Rooms](#rooms)
 | 
			
		||||
- [Messages](#messages)
 | 
			
		||||
- [Stream](#stream)
 | 
			
		||||
- [Faye (Experimental)](#faye-experimental)
 | 
			
		||||
- [Debug](#debug)
 | 
			
		||||
- [App Engine](#app-engine)
 | 
			
		||||
 | 
			
		||||
##### Initialize
 | 
			
		||||
``` Go
 | 
			
		||||
api := gitter.New("YOUR_ACCESS_TOKEN")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
##### Users
 | 
			
		||||
 | 
			
		||||
- Get current user
 | 
			
		||||
 | 
			
		||||
	``` Go
 | 
			
		||||
	user, err := api.GetUser()
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
##### Rooms
 | 
			
		||||
 | 
			
		||||
- Get all rooms
 | 
			
		||||
	``` Go
 | 
			
		||||
	rooms, err := api.GetRooms()
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Get room by id
 | 
			
		||||
	``` Go
 | 
			
		||||
	room, err := api.GetRoom("roomID")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Get rooms of some user
 | 
			
		||||
	``` Go
 | 
			
		||||
	rooms, err := api.GetRooms("userID")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Join room
 | 
			
		||||
	``` Go
 | 
			
		||||
	room, err := api.JoinRoom("roomID", "userID")
 | 
			
		||||
	```
 | 
			
		||||
	
 | 
			
		||||
- Leave room
 | 
			
		||||
	``` Go
 | 
			
		||||
	room, err := api.LeaveRoom("roomID", "userID")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Get room id
 | 
			
		||||
	``` Go
 | 
			
		||||
	id, err := api.GetRoomId("room/uri")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Search gitter rooms
 | 
			
		||||
	``` Go
 | 
			
		||||
	rooms, err := api.SearchRooms("search/string")
 | 
			
		||||
	```
 | 
			
		||||
##### Messages
 | 
			
		||||
 | 
			
		||||
- Get messages of room
 | 
			
		||||
	``` Go
 | 
			
		||||
	messages, err := api.GetMessages("roomID", nil)
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Get one message
 | 
			
		||||
	``` Go
 | 
			
		||||
	message, err := api.GetMessage("roomID", "messageID")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
- Send message
 | 
			
		||||
	``` Go
 | 
			
		||||
	err := api.SendMessage("roomID", "free chat text")
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
##### Stream
 | 
			
		||||
 | 
			
		||||
Create stream to the room and start listening to incoming messages
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
stream := api.Stream(room.Id)
 | 
			
		||||
go api.Listen(stream)
 | 
			
		||||
 | 
			
		||||
for {
 | 
			
		||||
    event := <-stream.Event
 | 
			
		||||
    switch ev := event.Data.(type) {
 | 
			
		||||
    case *gitter.MessageReceived:
 | 
			
		||||
        fmt.Println(ev.Message.From.Username + ": " + ev.Message.Text)
 | 
			
		||||
    case *gitter.GitterConnectionClosed:
 | 
			
		||||
        // connection was closed
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Close stream connection
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
stream.Close()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
##### Faye (Experimental)
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
faye := api.Faye(room.ID)
 | 
			
		||||
go faye.Listen()
 | 
			
		||||
 | 
			
		||||
for {
 | 
			
		||||
    event := <-faye.Event
 | 
			
		||||
    switch ev := event.Data.(type) {
 | 
			
		||||
    case *gitter.MessageReceived:
 | 
			
		||||
        fmt.Println(ev.Message.From.Username + ": " + ev.Message.Text)
 | 
			
		||||
    case *gitter.GitterConnectionClosed: //this one is never called in Faye
 | 
			
		||||
        // connection was closed
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
##### Debug
 | 
			
		||||
 | 
			
		||||
You can print the internal errors by enabling debug to true
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
api.SetDebug(true, nil)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also define your own `io.Writer` in case you want to persist the logs somewhere.
 | 
			
		||||
For example keeping the errors on file
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
logFile, err := os.Create("gitter.log")
 | 
			
		||||
api.SetDebug(true, logFile)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
##### App Engine
 | 
			
		||||
 | 
			
		||||
Initialize app engine client and continue as usual
 | 
			
		||||
 | 
			
		||||
``` Go
 | 
			
		||||
c := appengine.NewContext(r)
 | 
			
		||||
client := urlfetch.Client(c)
 | 
			
		||||
 | 
			
		||||
api := gitter.New("YOUR_ACCESS_TOKEN")
 | 
			
		||||
api.SetClient(client)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[Documentation](https://godoc.org/github.com/sromku/go-gitter)
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/github.com/42wim/go-ircevent/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/42wim/go-ircevent/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,27 +0,0 @@
 | 
			
		||||
// Copyright (c) 2009 Thomas Jager. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without
 | 
			
		||||
// modification, are permitted provided that the following conditions are
 | 
			
		||||
// met:
 | 
			
		||||
//
 | 
			
		||||
//    * Redistributions of source code must retain the above copyright
 | 
			
		||||
// notice, this list of conditions and the following disclaimer.
 | 
			
		||||
//    * Redistributions in binary form must reproduce the above
 | 
			
		||||
// copyright notice, this list of conditions and the following disclaimer
 | 
			
		||||
// in the documentation and/or other materials provided with the
 | 
			
		||||
// distribution.
 | 
			
		||||
//    * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
							
								
								
									
										578
									
								
								vendor/github.com/42wim/go-ircevent/irc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										578
									
								
								vendor/github.com/42wim/go-ircevent/irc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,578 +0,0 @@
 | 
			
		||||
// Copyright 2009 Thomas Jager <mail@jager.no>  All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
This package provides an event based IRC client library. It allows to
 | 
			
		||||
register callbacks for the events you need to handle. Its features
 | 
			
		||||
include handling standard CTCP, reconnecting on errors and detecting
 | 
			
		||||
stones servers.
 | 
			
		||||
Details of the IRC protocol can be found in the following RFCs:
 | 
			
		||||
https://tools.ietf.org/html/rfc1459
 | 
			
		||||
https://tools.ietf.org/html/rfc2810
 | 
			
		||||
https://tools.ietf.org/html/rfc2811
 | 
			
		||||
https://tools.ietf.org/html/rfc2812
 | 
			
		||||
https://tools.ietf.org/html/rfc2813
 | 
			
		||||
The details of the client-to-client protocol (CTCP) can be found here: http://www.irchelp.org/irchelp/rfc/ctcpspec.html
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package irc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	VERSION = "go-ircevent v2.1"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var ErrDisconnected = errors.New("Disconnect Called")
 | 
			
		||||
 | 
			
		||||
// Read data from a connection. To be used as a goroutine.
 | 
			
		||||
func (irc *Connection) readLoop() {
 | 
			
		||||
	defer irc.Done()
 | 
			
		||||
	br := bufio.NewReaderSize(irc.socket, 512)
 | 
			
		||||
 | 
			
		||||
	errChan := irc.ErrorChan()
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-irc.end:
 | 
			
		||||
			return
 | 
			
		||||
		default:
 | 
			
		||||
			// Set a read deadline based on the combined timeout and ping frequency
 | 
			
		||||
			// We should ALWAYS have received a response from the server within the timeout
 | 
			
		||||
			// after our own pings
 | 
			
		||||
			if irc.socket != nil {
 | 
			
		||||
				irc.socket.SetReadDeadline(time.Now().Add(irc.Timeout + irc.PingFreq))
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			msg, err := br.ReadString('\n')
 | 
			
		||||
 | 
			
		||||
			// We got past our blocking read, so bin timeout
 | 
			
		||||
			if irc.socket != nil {
 | 
			
		||||
				var zero time.Time
 | 
			
		||||
				irc.socket.SetReadDeadline(zero)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				errChan <- err
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if irc.Debug {
 | 
			
		||||
				irc.Log.Printf("<-- %s\n", strings.TrimSpace(msg))
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			irc.Lock()
 | 
			
		||||
			irc.lastMessage = time.Now()
 | 
			
		||||
			irc.Unlock()
 | 
			
		||||
			event, err := parseToEvent(msg)
 | 
			
		||||
			event.Connection = irc
 | 
			
		||||
			if err == nil {
 | 
			
		||||
				/* XXX: len(args) == 0: args should be empty */
 | 
			
		||||
				irc.RunCallbacks(event)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Unescape tag values as defined in the IRCv3.2 message tags spec
 | 
			
		||||
// http://ircv3.net/specs/core/message-tags-3.2.html
 | 
			
		||||
func unescapeTagValue(value string) string {
 | 
			
		||||
	value = strings.Replace(value, "\\:", ";", -1)
 | 
			
		||||
	value = strings.Replace(value, "\\s", " ", -1)
 | 
			
		||||
	value = strings.Replace(value, "\\\\", "\\", -1)
 | 
			
		||||
	value = strings.Replace(value, "\\r", "\r", -1)
 | 
			
		||||
	value = strings.Replace(value, "\\n", "\n", -1)
 | 
			
		||||
	return value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Parse raw irc messages
 | 
			
		||||
func parseToEvent(msg string) (*Event, error) {
 | 
			
		||||
	msg = strings.TrimSuffix(msg, "\n") //Remove \r\n
 | 
			
		||||
	msg = strings.TrimSuffix(msg, "\r")
 | 
			
		||||
	event := &Event{Raw: msg}
 | 
			
		||||
	if len(msg) < 5 {
 | 
			
		||||
		return nil, errors.New("Malformed msg from server")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if msg[0] == '@' {
 | 
			
		||||
		// IRCv3 Message Tags
 | 
			
		||||
		if i := strings.Index(msg, " "); i > -1 {
 | 
			
		||||
			event.Tags = make(map[string]string)
 | 
			
		||||
			tags := strings.Split(msg[1:i], ";")
 | 
			
		||||
			for _, data := range tags {
 | 
			
		||||
				parts := strings.SplitN(data, "=", 2)
 | 
			
		||||
				if len(parts) == 1 {
 | 
			
		||||
					event.Tags[parts[0]] = ""
 | 
			
		||||
				} else {
 | 
			
		||||
					event.Tags[parts[0]] = unescapeTagValue(parts[1])
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			msg = msg[i+1 : len(msg)]
 | 
			
		||||
		} else {
 | 
			
		||||
			return nil, errors.New("Malformed msg from server")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if msg[0] == ':' {
 | 
			
		||||
		if i := strings.Index(msg, " "); i > -1 {
 | 
			
		||||
			event.Source = msg[1:i]
 | 
			
		||||
			msg = msg[i+1 : len(msg)]
 | 
			
		||||
 | 
			
		||||
		} else {
 | 
			
		||||
			return nil, errors.New("Malformed msg from server")
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if i, j := strings.Index(event.Source, "!"), strings.Index(event.Source, "@"); i > -1 && j > -1 && i < j {
 | 
			
		||||
			event.Nick = event.Source[0:i]
 | 
			
		||||
			event.User = event.Source[i+1 : j]
 | 
			
		||||
			event.Host = event.Source[j+1 : len(event.Source)]
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	split := strings.SplitN(msg, " :", 2)
 | 
			
		||||
	args := strings.Split(split[0], " ")
 | 
			
		||||
	event.Code = strings.ToUpper(args[0])
 | 
			
		||||
	event.Arguments = args[1:]
 | 
			
		||||
	if len(split) > 1 {
 | 
			
		||||
		event.Arguments = append(event.Arguments, split[1])
 | 
			
		||||
	}
 | 
			
		||||
	return event, nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Loop to write to a connection. To be used as a goroutine.
 | 
			
		||||
func (irc *Connection) writeLoop() {
 | 
			
		||||
	defer irc.Done()
 | 
			
		||||
	errChan := irc.ErrorChan()
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-irc.end:
 | 
			
		||||
			return
 | 
			
		||||
		case b, ok := <-irc.pwrite:
 | 
			
		||||
			if !ok || b == "" || irc.socket == nil {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if irc.Debug {
 | 
			
		||||
				irc.Log.Printf("--> %s\n", strings.TrimSpace(b))
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Set a write deadline based on the time out
 | 
			
		||||
			irc.socket.SetWriteDeadline(time.Now().Add(irc.Timeout))
 | 
			
		||||
 | 
			
		||||
			_, err := irc.socket.Write([]byte(b))
 | 
			
		||||
 | 
			
		||||
			// Past blocking write, bin timeout
 | 
			
		||||
			var zero time.Time
 | 
			
		||||
			irc.socket.SetWriteDeadline(zero)
 | 
			
		||||
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				errChan <- err
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Pings the server if we have not received any messages for 5 minutes
 | 
			
		||||
// to keep the connection alive. To be used as a goroutine.
 | 
			
		||||
func (irc *Connection) pingLoop() {
 | 
			
		||||
	defer irc.Done()
 | 
			
		||||
	ticker := time.NewTicker(1 * time.Minute) // Tick every minute for monitoring
 | 
			
		||||
	ticker2 := time.NewTicker(irc.PingFreq)   // Tick at the ping frequency.
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ticker.C:
 | 
			
		||||
			//Ping if we haven't received anything from the server within the keep alive period
 | 
			
		||||
			if time.Since(irc.lastMessage) >= irc.KeepAlive {
 | 
			
		||||
				irc.SendRawf("PING %d", time.Now().UnixNano())
 | 
			
		||||
			}
 | 
			
		||||
		case <-ticker2.C:
 | 
			
		||||
			//Ping at the ping frequency
 | 
			
		||||
			irc.SendRawf("PING %d", time.Now().UnixNano())
 | 
			
		||||
			//Try to recapture nickname if it's not as configured.
 | 
			
		||||
			irc.Lock()
 | 
			
		||||
			if irc.nick != irc.nickcurrent {
 | 
			
		||||
				irc.nickcurrent = irc.nick
 | 
			
		||||
				irc.SendRawf("NICK %s", irc.nick)
 | 
			
		||||
			}
 | 
			
		||||
			irc.Unlock()
 | 
			
		||||
		case <-irc.end:
 | 
			
		||||
			ticker.Stop()
 | 
			
		||||
			ticker2.Stop()
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (irc *Connection) isQuitting() bool {
 | 
			
		||||
	irc.Lock()
 | 
			
		||||
	defer irc.Unlock()
 | 
			
		||||
	return irc.quit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Main loop to control the connection.
 | 
			
		||||
func (irc *Connection) Loop() {
 | 
			
		||||
	errChan := irc.ErrorChan()
 | 
			
		||||
	connTime := time.Now()
 | 
			
		||||
	for !irc.isQuitting() {
 | 
			
		||||
		err := <-errChan
 | 
			
		||||
		close(irc.end)
 | 
			
		||||
		irc.Wait()
 | 
			
		||||
		for !irc.isQuitting() {
 | 
			
		||||
			irc.Log.Printf("Error, disconnected: %s\n", err)
 | 
			
		||||
			if time.Now().Sub(connTime) < time.Second*5 {
 | 
			
		||||
				irc.Log.Println("Rreconnecting too fast, sleeping 60 seconds")
 | 
			
		||||
				time.Sleep(60 * time.Second)
 | 
			
		||||
			}
 | 
			
		||||
			if err = irc.Reconnect(); err != nil {
 | 
			
		||||
				irc.Log.Printf("Error while reconnecting: %s\n", err)
 | 
			
		||||
				time.Sleep(60 * time.Second)
 | 
			
		||||
			} else {
 | 
			
		||||
				errChan = irc.ErrorChan()
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		connTime = time.Now()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Quit the current connection and disconnect from the server
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1.6
 | 
			
		||||
func (irc *Connection) Quit() {
 | 
			
		||||
	quit := "QUIT"
 | 
			
		||||
 | 
			
		||||
	if irc.QuitMessage != "" {
 | 
			
		||||
		quit = fmt.Sprintf("QUIT :%s", irc.QuitMessage)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc.SendRaw(quit)
 | 
			
		||||
	irc.Lock()
 | 
			
		||||
	irc.stopped = true
 | 
			
		||||
	irc.quit = true
 | 
			
		||||
	irc.Unlock()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Use the connection to join a given channel.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.1
 | 
			
		||||
func (irc *Connection) Join(channel string) {
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("JOIN %s\r\n", channel)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Leave a given channel.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.2
 | 
			
		||||
func (irc *Connection) Part(channel string) {
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("PART %s\r\n", channel)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send a notification to a nickname. This is similar to Privmsg but must not receive replies.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.2
 | 
			
		||||
func (irc *Connection) Notice(target, message string) {
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("NOTICE %s :%s\r\n", target, message)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send a formated notification to a nickname.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.2
 | 
			
		||||
func (irc *Connection) Noticef(target, format string, a ...interface{}) {
 | 
			
		||||
	irc.Notice(target, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send (action) message to a target (channel or nickname).
 | 
			
		||||
// No clear RFC on this one...
 | 
			
		||||
func (irc *Connection) Action(target, message string) {
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("PRIVMSG %s :\001ACTION %s\001\r\n", target, message)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send formatted (action) message to a target (channel or nickname).
 | 
			
		||||
func (irc *Connection) Actionf(target, format string, a ...interface{}) {
 | 
			
		||||
	irc.Action(target, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send (private) message to a target (channel or nickname).
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.1
 | 
			
		||||
func (irc *Connection) Privmsg(target, message string) {
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("PRIVMSG %s :%s\r\n", target, message)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send formated string to specified target (channel or nickname).
 | 
			
		||||
func (irc *Connection) Privmsgf(target, format string, a ...interface{}) {
 | 
			
		||||
	irc.Privmsg(target, fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Kick <user> from <channel> with <msg>. For no message, pass empty string ("")
 | 
			
		||||
func (irc *Connection) Kick(user, channel, msg string) {
 | 
			
		||||
	var cmd bytes.Buffer
 | 
			
		||||
	cmd.WriteString(fmt.Sprintf("KICK %s %s", channel, user))
 | 
			
		||||
	if msg != "" {
 | 
			
		||||
		cmd.WriteString(fmt.Sprintf(" :%s", msg))
 | 
			
		||||
	}
 | 
			
		||||
	cmd.WriteString("\r\n")
 | 
			
		||||
	irc.pwrite <- cmd.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Kick all <users> from <channel> with <msg>. For no message, pass
 | 
			
		||||
// empty string ("")
 | 
			
		||||
func (irc *Connection) MultiKick(users []string, channel string, msg string) {
 | 
			
		||||
	var cmd bytes.Buffer
 | 
			
		||||
	cmd.WriteString(fmt.Sprintf("KICK %s %s", channel, strings.Join(users, ",")))
 | 
			
		||||
	if msg != "" {
 | 
			
		||||
		cmd.WriteString(fmt.Sprintf(" :%s", msg))
 | 
			
		||||
	}
 | 
			
		||||
	cmd.WriteString("\r\n")
 | 
			
		||||
	irc.pwrite <- cmd.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send raw string.
 | 
			
		||||
func (irc *Connection) SendRaw(message string) {
 | 
			
		||||
	irc.pwrite <- message + "\r\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Send raw formated string.
 | 
			
		||||
func (irc *Connection) SendRawf(format string, a ...interface{}) {
 | 
			
		||||
	irc.SendRaw(fmt.Sprintf(format, a...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set (new) nickname.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1.2
 | 
			
		||||
func (irc *Connection) Nick(n string) {
 | 
			
		||||
	irc.nick = n
 | 
			
		||||
	irc.SendRawf("NICK %s", n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Determine nick currently used with the connection.
 | 
			
		||||
func (irc *Connection) GetNick() string {
 | 
			
		||||
	return irc.nickcurrent
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Query information about a particular nickname.
 | 
			
		||||
// RFC 1459: https://tools.ietf.org/html/rfc1459#section-4.5.2
 | 
			
		||||
func (irc *Connection) Whois(nick string) {
 | 
			
		||||
	irc.SendRawf("WHOIS %s", nick)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Query information about a given nickname in the server.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.5.1
 | 
			
		||||
func (irc *Connection) Who(nick string) {
 | 
			
		||||
	irc.SendRawf("WHO %s", nick)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set different modes for a target (channel or nickname).
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.3
 | 
			
		||||
func (irc *Connection) Mode(target string, modestring ...string) {
 | 
			
		||||
	if len(modestring) > 0 {
 | 
			
		||||
		mode := strings.Join(modestring, " ")
 | 
			
		||||
		irc.SendRawf("MODE %s %s", target, mode)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	irc.SendRawf("MODE %s", target)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (irc *Connection) ErrorChan() chan error {
 | 
			
		||||
	return irc.Error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns true if the connection is connected to an IRC server.
 | 
			
		||||
func (irc *Connection) Connected() bool {
 | 
			
		||||
	return !irc.stopped
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// A disconnect sends all buffered messages (if possible),
 | 
			
		||||
// stops all goroutines and then closes the socket.
 | 
			
		||||
func (irc *Connection) Disconnect() {
 | 
			
		||||
	if irc.socket != nil {
 | 
			
		||||
		irc.socket.Close()
 | 
			
		||||
	}
 | 
			
		||||
	irc.ErrorChan() <- ErrDisconnected
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reconnect to a server using the current connection.
 | 
			
		||||
func (irc *Connection) Reconnect() error {
 | 
			
		||||
	irc.end = make(chan struct{})
 | 
			
		||||
	return irc.Connect(irc.Server)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Connect to a given server using the current connection configuration.
 | 
			
		||||
// This function also takes care of identification if a password is provided.
 | 
			
		||||
// RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1
 | 
			
		||||
func (irc *Connection) Connect(server string) error {
 | 
			
		||||
	irc.Server = server
 | 
			
		||||
	// mark Server as stopped since there can be an error during connect
 | 
			
		||||
	irc.stopped = true
 | 
			
		||||
 | 
			
		||||
	// make sure everything is ready for connection
 | 
			
		||||
	if len(irc.Server) == 0 {
 | 
			
		||||
		return errors.New("empty 'server'")
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Count(irc.Server, ":") != 1 {
 | 
			
		||||
		return errors.New("wrong number of ':' in address")
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Index(irc.Server, ":") == 0 {
 | 
			
		||||
		return errors.New("hostname is missing")
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Index(irc.Server, ":") == len(irc.Server)-1 {
 | 
			
		||||
		return errors.New("port missing")
 | 
			
		||||
	}
 | 
			
		||||
	// check for valid range
 | 
			
		||||
	ports := strings.Split(irc.Server, ":")[1]
 | 
			
		||||
	port, err := strconv.Atoi(ports)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("extracting port failed")
 | 
			
		||||
	}
 | 
			
		||||
	if !((port >= 0) && (port <= 65535)) {
 | 
			
		||||
		return errors.New("port number outside valid range")
 | 
			
		||||
	}
 | 
			
		||||
	if irc.Log == nil {
 | 
			
		||||
		return errors.New("'Log' points to nil")
 | 
			
		||||
	}
 | 
			
		||||
	if len(irc.nick) == 0 {
 | 
			
		||||
		return errors.New("empty 'nick'")
 | 
			
		||||
	}
 | 
			
		||||
	if len(irc.user) == 0 {
 | 
			
		||||
		return errors.New("empty 'user'")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if irc.UseTLS {
 | 
			
		||||
		dialer := &net.Dialer{Timeout: irc.Timeout}
 | 
			
		||||
		irc.socket, err = tls.DialWithDialer(dialer, "tcp", irc.Server, irc.TLSConfig)
 | 
			
		||||
	} else {
 | 
			
		||||
		irc.socket, err = net.DialTimeout("tcp", irc.Server, irc.Timeout)
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc.stopped = false
 | 
			
		||||
	irc.Log.Printf("Connected to %s (%s)\n", irc.Server, irc.socket.RemoteAddr())
 | 
			
		||||
 | 
			
		||||
	irc.pwrite = make(chan string, 10)
 | 
			
		||||
	irc.Error = make(chan error, 2)
 | 
			
		||||
	irc.Add(3)
 | 
			
		||||
	go irc.readLoop()
 | 
			
		||||
	go irc.writeLoop()
 | 
			
		||||
	go irc.pingLoop()
 | 
			
		||||
	if len(irc.Password) > 0 {
 | 
			
		||||
		irc.pwrite <- fmt.Sprintf("PASS %s\r\n", irc.Password)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = irc.negotiateCaps()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("NICK %s\r\n", irc.nick)
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("USER %s 0.0.0.0 0.0.0.0 :%s\r\n", irc.user, irc.user)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Negotiate IRCv3 capabilities
 | 
			
		||||
func (irc *Connection) negotiateCaps() error {
 | 
			
		||||
	saslResChan := make(chan *SASLResult)
 | 
			
		||||
	if irc.UseSASL {
 | 
			
		||||
		irc.RequestCaps = append(irc.RequestCaps, "sasl")
 | 
			
		||||
		irc.setupSASLCallbacks(saslResChan)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(irc.RequestCaps) == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cap_chan := make(chan bool, len(irc.RequestCaps))
 | 
			
		||||
	irc.AddCallback("CAP", func(e *Event) {
 | 
			
		||||
		if len(e.Arguments) != 3 {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		command := e.Arguments[1]
 | 
			
		||||
 | 
			
		||||
		if command == "LS" {
 | 
			
		||||
			missing_caps := len(irc.RequestCaps)
 | 
			
		||||
			for _, cap_name := range strings.Split(e.Arguments[2], " ") {
 | 
			
		||||
				for _, req_cap := range irc.RequestCaps {
 | 
			
		||||
					if cap_name == req_cap {
 | 
			
		||||
						irc.pwrite <- fmt.Sprintf("CAP REQ :%s\r\n", cap_name)
 | 
			
		||||
						missing_caps--
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			for i := 0; i < missing_caps; i++ {
 | 
			
		||||
				cap_chan <- true
 | 
			
		||||
			}
 | 
			
		||||
		} else if command == "ACK" || command == "NAK" {
 | 
			
		||||
			for _, cap_name := range strings.Split(strings.TrimSpace(e.Arguments[2]), " ") {
 | 
			
		||||
				if cap_name == "" {
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if command == "ACK" {
 | 
			
		||||
					irc.AcknowledgedCaps = append(irc.AcknowledgedCaps, cap_name)
 | 
			
		||||
				}
 | 
			
		||||
				cap_chan <- true
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.pwrite <- "CAP LS\r\n"
 | 
			
		||||
 | 
			
		||||
	if irc.UseSASL {
 | 
			
		||||
		select {
 | 
			
		||||
		case res := <-saslResChan:
 | 
			
		||||
			if res.Failed {
 | 
			
		||||
				close(saslResChan)
 | 
			
		||||
				return res.Err
 | 
			
		||||
			}
 | 
			
		||||
		case <-time.After(time.Second * 15):
 | 
			
		||||
			close(saslResChan)
 | 
			
		||||
			return errors.New("SASL setup timed out. This shouldn't happen.")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Wait for all capabilities to be ACKed or NAKed before ending negotiation
 | 
			
		||||
	for i := 0; i < len(irc.RequestCaps); i++ {
 | 
			
		||||
		<-cap_chan
 | 
			
		||||
	}
 | 
			
		||||
	irc.pwrite <- fmt.Sprintf("CAP END\r\n")
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create a connection with the (publicly visible) nickname and username.
 | 
			
		||||
// The nickname is later used to address the user. Returns nil if nick
 | 
			
		||||
// or user are empty.
 | 
			
		||||
func IRC(nick, user string) *Connection {
 | 
			
		||||
	// catch invalid values
 | 
			
		||||
	if len(nick) == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if len(user) == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc := &Connection{
 | 
			
		||||
		nick:        nick,
 | 
			
		||||
		nickcurrent: nick,
 | 
			
		||||
		user:        user,
 | 
			
		||||
		Log:         log.New(os.Stdout, "", log.LstdFlags),
 | 
			
		||||
		end:         make(chan struct{}),
 | 
			
		||||
		Version:     VERSION,
 | 
			
		||||
		KeepAlive:   4 * time.Minute,
 | 
			
		||||
		Timeout:     1 * time.Minute,
 | 
			
		||||
		PingFreq:    15 * time.Minute,
 | 
			
		||||
		SASLMech:    "PLAIN",
 | 
			
		||||
		QuitMessage: "",
 | 
			
		||||
	}
 | 
			
		||||
	irc.setupCallbacks()
 | 
			
		||||
	return irc
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										222
									
								
								vendor/github.com/42wim/go-ircevent/irc_callback.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										222
									
								
								vendor/github.com/42wim/go-ircevent/irc_callback.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,222 +0,0 @@
 | 
			
		||||
package irc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Register a callback to a connection and event code. A callback is a function
 | 
			
		||||
// which takes only an Event pointer as parameter. Valid event codes are all
 | 
			
		||||
// IRC/CTCP commands and error/response codes. This function returns the ID of
 | 
			
		||||
// the registered callback for later management.
 | 
			
		||||
func (irc *Connection) AddCallback(eventcode string, callback func(*Event)) int {
 | 
			
		||||
	eventcode = strings.ToUpper(eventcode)
 | 
			
		||||
	id := 0
 | 
			
		||||
	if _, ok := irc.events[eventcode]; !ok {
 | 
			
		||||
		irc.events[eventcode] = make(map[int]func(*Event))
 | 
			
		||||
		id = 0
 | 
			
		||||
	} else {
 | 
			
		||||
		id = len(irc.events[eventcode])
 | 
			
		||||
	}
 | 
			
		||||
	irc.events[eventcode][id] = callback
 | 
			
		||||
	return id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Remove callback i (ID) from the given event code. This functions returns
 | 
			
		||||
// true upon success, false if any error occurs.
 | 
			
		||||
func (irc *Connection) RemoveCallback(eventcode string, i int) bool {
 | 
			
		||||
	eventcode = strings.ToUpper(eventcode)
 | 
			
		||||
 | 
			
		||||
	if event, ok := irc.events[eventcode]; ok {
 | 
			
		||||
		if _, ok := event[i]; ok {
 | 
			
		||||
			delete(irc.events[eventcode], i)
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
		irc.Log.Printf("Event found, but no callback found at id %d\n", i)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc.Log.Println("Event not found")
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Remove all callbacks from a given event code. It returns true
 | 
			
		||||
// if given event code is found and cleared.
 | 
			
		||||
func (irc *Connection) ClearCallback(eventcode string) bool {
 | 
			
		||||
	eventcode = strings.ToUpper(eventcode)
 | 
			
		||||
 | 
			
		||||
	if _, ok := irc.events[eventcode]; ok {
 | 
			
		||||
		irc.events[eventcode] = make(map[int]func(*Event))
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	irc.Log.Println("Event not found")
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Replace callback i (ID) associated with a given event code with a new callback function.
 | 
			
		||||
func (irc *Connection) ReplaceCallback(eventcode string, i int, callback func(*Event)) {
 | 
			
		||||
	eventcode = strings.ToUpper(eventcode)
 | 
			
		||||
 | 
			
		||||
	if event, ok := irc.events[eventcode]; ok {
 | 
			
		||||
		if _, ok := event[i]; ok {
 | 
			
		||||
			event[i] = callback
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		irc.Log.Printf("Event found, but no callback found at id %d\n", i)
 | 
			
		||||
	}
 | 
			
		||||
	irc.Log.Printf("Event not found. Use AddCallBack\n")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Execute all callbacks associated with a given event.
 | 
			
		||||
func (irc *Connection) RunCallbacks(event *Event) {
 | 
			
		||||
	msg := event.Message()
 | 
			
		||||
	if event.Code == "PRIVMSG" && len(msg) > 2 && msg[0] == '\x01' {
 | 
			
		||||
		event.Code = "CTCP" //Unknown CTCP
 | 
			
		||||
 | 
			
		||||
		if i := strings.LastIndex(msg, "\x01"); i > 0 {
 | 
			
		||||
			msg = msg[1:i]
 | 
			
		||||
		} else {
 | 
			
		||||
			irc.Log.Printf("Invalid CTCP Message: %s\n", strconv.Quote(msg))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if msg == "VERSION" {
 | 
			
		||||
			event.Code = "CTCP_VERSION"
 | 
			
		||||
 | 
			
		||||
		} else if msg == "TIME" {
 | 
			
		||||
			event.Code = "CTCP_TIME"
 | 
			
		||||
 | 
			
		||||
		} else if strings.HasPrefix(msg, "PING") {
 | 
			
		||||
			event.Code = "CTCP_PING"
 | 
			
		||||
 | 
			
		||||
		} else if msg == "USERINFO" {
 | 
			
		||||
			event.Code = "CTCP_USERINFO"
 | 
			
		||||
 | 
			
		||||
		} else if msg == "CLIENTINFO" {
 | 
			
		||||
			event.Code = "CTCP_CLIENTINFO"
 | 
			
		||||
 | 
			
		||||
		} else if strings.HasPrefix(msg, "ACTION") {
 | 
			
		||||
			event.Code = "CTCP_ACTION"
 | 
			
		||||
			if len(msg) > 6 {
 | 
			
		||||
				msg = msg[7:]
 | 
			
		||||
			} else {
 | 
			
		||||
				msg = ""
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		event.Arguments[len(event.Arguments)-1] = msg
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if callbacks, ok := irc.events[event.Code]; ok {
 | 
			
		||||
		if irc.VerboseCallbackHandler {
 | 
			
		||||
			irc.Log.Printf("%v (%v) >> %#v\n", event.Code, len(callbacks), event)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for _, callback := range callbacks {
 | 
			
		||||
			callback(event)
 | 
			
		||||
		}
 | 
			
		||||
	} else if irc.VerboseCallbackHandler {
 | 
			
		||||
		irc.Log.Printf("%v (0) >> %#v\n", event.Code, event)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if callbacks, ok := irc.events["*"]; ok {
 | 
			
		||||
		if irc.VerboseCallbackHandler {
 | 
			
		||||
			irc.Log.Printf("%v (0) >> %#v\n", event.Code, event)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for _, callback := range callbacks {
 | 
			
		||||
			callback(event)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set up some initial callbacks to handle the IRC/CTCP protocol.
 | 
			
		||||
func (irc *Connection) setupCallbacks() {
 | 
			
		||||
	irc.events = make(map[string]map[int]func(*Event))
 | 
			
		||||
 | 
			
		||||
	//Handle error events.
 | 
			
		||||
	irc.AddCallback("ERROR", func(e *Event) { irc.Disconnect() })
 | 
			
		||||
 | 
			
		||||
	//Handle ping events
 | 
			
		||||
	irc.AddCallback("PING", func(e *Event) { irc.SendRaw("PONG :" + e.Message()) })
 | 
			
		||||
 | 
			
		||||
	//Version handler
 | 
			
		||||
	irc.AddCallback("CTCP_VERSION", func(e *Event) {
 | 
			
		||||
		irc.SendRawf("NOTICE %s :\x01VERSION %s\x01", e.Nick, irc.Version)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.AddCallback("CTCP_USERINFO", func(e *Event) {
 | 
			
		||||
		irc.SendRawf("NOTICE %s :\x01USERINFO %s\x01", e.Nick, irc.user)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.AddCallback("CTCP_CLIENTINFO", func(e *Event) {
 | 
			
		||||
		irc.SendRawf("NOTICE %s :\x01CLIENTINFO PING VERSION TIME USERINFO CLIENTINFO\x01", e.Nick)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.AddCallback("CTCP_TIME", func(e *Event) {
 | 
			
		||||
		ltime := time.Now()
 | 
			
		||||
		irc.SendRawf("NOTICE %s :\x01TIME %s\x01", e.Nick, ltime.String())
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.AddCallback("CTCP_PING", func(e *Event) { irc.SendRawf("NOTICE %s :\x01%s\x01", e.Nick, e.Message()) })
 | 
			
		||||
 | 
			
		||||
	// 437: ERR_UNAVAILRESOURCE "<nick/channel> :Nick/channel is temporarily unavailable"
 | 
			
		||||
	// Add a _ to current nick. If irc.nickcurrent is empty this cannot
 | 
			
		||||
	// work. It has to be set somewhere first in case the nick is already
 | 
			
		||||
	// taken or unavailable from the beginning.
 | 
			
		||||
	irc.AddCallback("437", func(e *Event) {
 | 
			
		||||
		// If irc.nickcurrent hasn't been set yet, set to irc.nick
 | 
			
		||||
		if irc.nickcurrent == "" {
 | 
			
		||||
			irc.nickcurrent = irc.nick
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(irc.nickcurrent) > 8 {
 | 
			
		||||
			irc.nickcurrent = "_" + irc.nickcurrent
 | 
			
		||||
		} else {
 | 
			
		||||
			irc.nickcurrent = irc.nickcurrent + "_"
 | 
			
		||||
		}
 | 
			
		||||
		irc.SendRawf("NICK %s", irc.nickcurrent)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 433: ERR_NICKNAMEINUSE "<nick> :Nickname is already in use"
 | 
			
		||||
	// Add a _ to current nick.
 | 
			
		||||
	irc.AddCallback("433", func(e *Event) {
 | 
			
		||||
		// If irc.nickcurrent hasn't been set yet, set to irc.nick
 | 
			
		||||
		if irc.nickcurrent == "" {
 | 
			
		||||
			irc.nickcurrent = irc.nick
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(irc.nickcurrent) > 8 {
 | 
			
		||||
			irc.nickcurrent = "_" + irc.nickcurrent
 | 
			
		||||
		} else {
 | 
			
		||||
			irc.nickcurrent = irc.nickcurrent + "_"
 | 
			
		||||
		}
 | 
			
		||||
		irc.SendRawf("NICK %s", irc.nickcurrent)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	irc.AddCallback("PONG", func(e *Event) {
 | 
			
		||||
		ns, _ := strconv.ParseInt(e.Message(), 10, 64)
 | 
			
		||||
		delta := time.Duration(time.Now().UnixNano() - ns)
 | 
			
		||||
		if irc.Debug {
 | 
			
		||||
			irc.Log.Printf("Lag: %.3f s\n", delta.Seconds())
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// NICK Define a nickname.
 | 
			
		||||
	// Set irc.nickcurrent to the new nick actually used in this connection.
 | 
			
		||||
	irc.AddCallback("NICK", func(e *Event) {
 | 
			
		||||
		if e.Nick == irc.nick {
 | 
			
		||||
			irc.nickcurrent = e.Message()
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// 1: RPL_WELCOME "Welcome to the Internet Relay Network <nick>!<user>@<host>"
 | 
			
		||||
	// Set irc.nickcurrent to the actually used nick in this connection.
 | 
			
		||||
	irc.AddCallback("001", func(e *Event) {
 | 
			
		||||
		irc.Lock()
 | 
			
		||||
		irc.nickcurrent = e.Arguments[0]
 | 
			
		||||
		irc.Unlock()
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								vendor/github.com/42wim/go-ircevent/irc_sasl.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/42wim/go-ircevent/irc_sasl.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,53 +0,0 @@
 | 
			
		||||
package irc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/base64"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SASLResult struct {
 | 
			
		||||
	Failed bool
 | 
			
		||||
	Err    error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (irc *Connection) setupSASLCallbacks(result chan<- *SASLResult) {
 | 
			
		||||
	irc.AddCallback("CAP", func(e *Event) {
 | 
			
		||||
		if len(e.Arguments) == 3 {
 | 
			
		||||
			if e.Arguments[1] == "LS" {
 | 
			
		||||
				if !strings.Contains(e.Arguments[2], "sasl") {
 | 
			
		||||
					result <- &SASLResult{true, errors.New("no SASL capability " + e.Arguments[2])}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if e.Arguments[1] == "ACK" {
 | 
			
		||||
				if irc.SASLMech != "PLAIN" {
 | 
			
		||||
					result <- &SASLResult{true, errors.New("only PLAIN is supported")}
 | 
			
		||||
				}
 | 
			
		||||
				irc.SendRaw("AUTHENTICATE " + irc.SASLMech)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	irc.AddCallback("AUTHENTICATE", func(e *Event) {
 | 
			
		||||
		str := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s\x00%s\x00%s", irc.SASLLogin, irc.SASLLogin, irc.SASLPassword)))
 | 
			
		||||
		irc.SendRaw("AUTHENTICATE " + str)
 | 
			
		||||
	})
 | 
			
		||||
	irc.AddCallback("901", func(e *Event) {
 | 
			
		||||
		irc.SendRaw("CAP END")
 | 
			
		||||
		irc.SendRaw("QUIT")
 | 
			
		||||
		result <- &SASLResult{true, errors.New(e.Arguments[1])}
 | 
			
		||||
	})
 | 
			
		||||
	irc.AddCallback("902", func(e *Event) {
 | 
			
		||||
		irc.SendRaw("CAP END")
 | 
			
		||||
		irc.SendRaw("QUIT")
 | 
			
		||||
		result <- &SASLResult{true, errors.New(e.Arguments[1])}
 | 
			
		||||
	})
 | 
			
		||||
	irc.AddCallback("903", func(e *Event) {
 | 
			
		||||
		result <- &SASLResult{false, nil}
 | 
			
		||||
	})
 | 
			
		||||
	irc.AddCallback("904", func(e *Event) {
 | 
			
		||||
		irc.SendRaw("CAP END")
 | 
			
		||||
		irc.SendRaw("QUIT")
 | 
			
		||||
		result <- &SASLResult{true, errors.New(e.Arguments[1])}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								vendor/github.com/42wim/go-ircevent/irc_struct.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								vendor/github.com/42wim/go-ircevent/irc_struct.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,76 +0,0 @@
 | 
			
		||||
// Copyright 2009 Thomas Jager <mail@jager.no>  All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package irc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/tls"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Connection struct {
 | 
			
		||||
	sync.Mutex
 | 
			
		||||
	sync.WaitGroup
 | 
			
		||||
	Debug            bool
 | 
			
		||||
	Error            chan error
 | 
			
		||||
	Password         string
 | 
			
		||||
	UseTLS           bool
 | 
			
		||||
	UseSASL          bool
 | 
			
		||||
	RequestCaps      []string
 | 
			
		||||
	AcknowledgedCaps []string
 | 
			
		||||
	SASLLogin        string
 | 
			
		||||
	SASLPassword     string
 | 
			
		||||
	SASLMech         string
 | 
			
		||||
	TLSConfig        *tls.Config
 | 
			
		||||
	Version          string
 | 
			
		||||
	Timeout          time.Duration
 | 
			
		||||
	PingFreq         time.Duration
 | 
			
		||||
	KeepAlive        time.Duration
 | 
			
		||||
	Server           string
 | 
			
		||||
 | 
			
		||||
	socket net.Conn
 | 
			
		||||
	pwrite chan string
 | 
			
		||||
	end    chan struct{}
 | 
			
		||||
 | 
			
		||||
	nick        string //The nickname we want.
 | 
			
		||||
	nickcurrent string //The nickname we currently have.
 | 
			
		||||
	user        string
 | 
			
		||||
	registered  bool
 | 
			
		||||
	events      map[string]map[int]func(*Event)
 | 
			
		||||
 | 
			
		||||
	QuitMessage string
 | 
			
		||||
	lastMessage time.Time
 | 
			
		||||
 | 
			
		||||
	VerboseCallbackHandler bool
 | 
			
		||||
	Log                    *log.Logger
 | 
			
		||||
 | 
			
		||||
	stopped bool
 | 
			
		||||
	quit    bool //User called Quit, do not reconnect.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// A struct to represent an event.
 | 
			
		||||
type Event struct {
 | 
			
		||||
	Code       string
 | 
			
		||||
	Raw        string
 | 
			
		||||
	Nick       string //<nick>
 | 
			
		||||
	Host       string //<nick>!<usr>@<host>
 | 
			
		||||
	Source     string //<host>
 | 
			
		||||
	User       string //<usr>
 | 
			
		||||
	Arguments  []string
 | 
			
		||||
	Tags       map[string]string
 | 
			
		||||
	Connection *Connection
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Retrieve the last message from Event arguments.
 | 
			
		||||
// This function  leaves the arguments untouched and
 | 
			
		||||
// returns an empty string if there are none.
 | 
			
		||||
func (e *Event) Message() string {
 | 
			
		||||
	if len(e.Arguments) == 0 {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
	return e.Arguments[len(e.Arguments)-1]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/github.com/42wim/go-ircevent/irc_test_fuzz.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/42wim/go-ircevent/irc_test_fuzz.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
// +build gofuzz
 | 
			
		||||
 | 
			
		||||
package irc
 | 
			
		||||
 | 
			
		||||
func Fuzz(data []byte) int {
 | 
			
		||||
	b := bytes.NewBuffer(data)
 | 
			
		||||
	event, err := parseToEvent(b.String())
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		irc := IRC("go-eventirc", "go-eventirc")
 | 
			
		||||
		irc.RunCallbacks(event)
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								vendor/github.com/BurntSushi/toml/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/BurntSushi/toml/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
TAGS
 | 
			
		||||
tags
 | 
			
		||||
.*.swp
 | 
			
		||||
tomlcheck/tomlcheck
 | 
			
		||||
toml.test
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/github.com/BurntSushi/toml/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/BurntSushi/toml/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
language: go
 | 
			
		||||
go:
 | 
			
		||||
  - 1.1
 | 
			
		||||
  - 1.2
 | 
			
		||||
  - 1.3
 | 
			
		||||
  - 1.4
 | 
			
		||||
  - 1.5
 | 
			
		||||
  - 1.6
 | 
			
		||||
  - tip
 | 
			
		||||
install:
 | 
			
		||||
  - go install ./...
 | 
			
		||||
  - go get github.com/BurntSushi/toml-test
 | 
			
		||||
script:
 | 
			
		||||
  - export PATH="$PATH:$HOME/gopath/bin"
 | 
			
		||||
  - make test
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/BurntSushi/toml/COMPATIBLE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/BurntSushi/toml/COMPATIBLE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
Compatible with TOML version
 | 
			
		||||
[v0.4.0](https://github.com/toml-lang/toml/blob/v0.4.0/versions/en/toml-v0.4.0.md)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/BurntSushi/toml/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/BurntSushi/toml/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
install:
 | 
			
		||||
	go install ./...
 | 
			
		||||
 | 
			
		||||
test: install
 | 
			
		||||
	go test -v
 | 
			
		||||
	toml-test toml-test-decoder
 | 
			
		||||
	toml-test -encoder toml-test-encoder
 | 
			
		||||
 | 
			
		||||
fmt:
 | 
			
		||||
	gofmt -w *.go */*.go
 | 
			
		||||
	colcheck *.go */*.go
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	find ./ -name '*.go' -print0 | xargs -0 gotags > TAGS
 | 
			
		||||
 | 
			
		||||
push:
 | 
			
		||||
	git push origin master
 | 
			
		||||
	git push github master
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										218
									
								
								vendor/github.com/BurntSushi/toml/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								vendor/github.com/BurntSushi/toml/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,218 @@
 | 
			
		||||
## TOML parser and encoder for Go with reflection
 | 
			
		||||
 | 
			
		||||
TOML stands for Tom's Obvious, Minimal Language. This Go package provides a
 | 
			
		||||
reflection interface similar to Go's standard library `json` and `xml`
 | 
			
		||||
packages. This package also supports the `encoding.TextUnmarshaler` and
 | 
			
		||||
`encoding.TextMarshaler` interfaces so that you can define custom data
 | 
			
		||||
representations. (There is an example of this below.)
 | 
			
		||||
 | 
			
		||||
Spec: https://github.com/toml-lang/toml
 | 
			
		||||
 | 
			
		||||
Compatible with TOML version
 | 
			
		||||
[v0.4.0](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)
 | 
			
		||||
 | 
			
		||||
Documentation: https://godoc.org/github.com/BurntSushi/toml
 | 
			
		||||
 | 
			
		||||
Installation:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
go get github.com/BurntSushi/toml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Try the toml validator:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
go get github.com/BurntSushi/toml/cmd/tomlv
 | 
			
		||||
tomlv some-toml-file.toml
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[](https://travis-ci.org/BurntSushi/toml) [](https://godoc.org/github.com/BurntSushi/toml)
 | 
			
		||||
 | 
			
		||||
### Testing
 | 
			
		||||
 | 
			
		||||
This package passes all tests in
 | 
			
		||||
[toml-test](https://github.com/BurntSushi/toml-test) for both the decoder
 | 
			
		||||
and the encoder.
 | 
			
		||||
 | 
			
		||||
### Examples
 | 
			
		||||
 | 
			
		||||
This package works similarly to how the Go standard library handles `XML`
 | 
			
		||||
and `JSON`. Namely, data is loaded into Go values via reflection.
 | 
			
		||||
 | 
			
		||||
For the simplest example, consider some TOML file as just a list of keys
 | 
			
		||||
and values:
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
Age = 25
 | 
			
		||||
Cats = [ "Cauchy", "Plato" ]
 | 
			
		||||
Pi = 3.14
 | 
			
		||||
Perfection = [ 6, 28, 496, 8128 ]
 | 
			
		||||
DOB = 1987-07-05T05:45:00Z
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Which could be defined in Go as:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type Config struct {
 | 
			
		||||
  Age int
 | 
			
		||||
  Cats []string
 | 
			
		||||
  Pi float64
 | 
			
		||||
  Perfection []int
 | 
			
		||||
  DOB time.Time // requires `import time`
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And then decoded with:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
var conf Config
 | 
			
		||||
if _, err := toml.Decode(tomlData, &conf); err != nil {
 | 
			
		||||
  // handle error
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also use struct tags if your struct field name doesn't map to a TOML
 | 
			
		||||
key value directly:
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
some_key_NAME = "wat"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type TOML struct {
 | 
			
		||||
  ObscureKey string `toml:"some_key_NAME"`
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Using the `encoding.TextUnmarshaler` interface
 | 
			
		||||
 | 
			
		||||
Here's an example that automatically parses duration strings into
 | 
			
		||||
`time.Duration` values:
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
[[song]]
 | 
			
		||||
name = "Thunder Road"
 | 
			
		||||
duration = "4m49s"
 | 
			
		||||
 | 
			
		||||
[[song]]
 | 
			
		||||
name = "Stairway to Heaven"
 | 
			
		||||
duration = "8m03s"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Which can be decoded with:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type song struct {
 | 
			
		||||
  Name     string
 | 
			
		||||
  Duration duration
 | 
			
		||||
}
 | 
			
		||||
type songs struct {
 | 
			
		||||
  Song []song
 | 
			
		||||
}
 | 
			
		||||
var favorites songs
 | 
			
		||||
if _, err := toml.Decode(blob, &favorites); err != nil {
 | 
			
		||||
  log.Fatal(err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for _, s := range favorites.Song {
 | 
			
		||||
  fmt.Printf("%s (%s)\n", s.Name, s.Duration)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And you'll also need a `duration` type that satisfies the
 | 
			
		||||
`encoding.TextUnmarshaler` interface:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type duration struct {
 | 
			
		||||
	time.Duration
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *duration) UnmarshalText(text []byte) error {
 | 
			
		||||
	var err error
 | 
			
		||||
	d.Duration, err = time.ParseDuration(string(text))
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### More complex usage
 | 
			
		||||
 | 
			
		||||
Here's an example of how to load the example from the official spec page:
 | 
			
		||||
 | 
			
		||||
```toml
 | 
			
		||||
# This is a TOML document. Boom.
 | 
			
		||||
 | 
			
		||||
title = "TOML Example"
 | 
			
		||||
 | 
			
		||||
[owner]
 | 
			
		||||
name = "Tom Preston-Werner"
 | 
			
		||||
organization = "GitHub"
 | 
			
		||||
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
 | 
			
		||||
dob = 1979-05-27T07:32:00Z # First class dates? Why not?
 | 
			
		||||
 | 
			
		||||
[database]
 | 
			
		||||
server = "192.168.1.1"
 | 
			
		||||
ports = [ 8001, 8001, 8002 ]
 | 
			
		||||
connection_max = 5000
 | 
			
		||||
enabled = true
 | 
			
		||||
 | 
			
		||||
[servers]
 | 
			
		||||
 | 
			
		||||
  # You can indent as you please. Tabs or spaces. TOML don't care.
 | 
			
		||||
  [servers.alpha]
 | 
			
		||||
  ip = "10.0.0.1"
 | 
			
		||||
  dc = "eqdc10"
 | 
			
		||||
 | 
			
		||||
  [servers.beta]
 | 
			
		||||
  ip = "10.0.0.2"
 | 
			
		||||
  dc = "eqdc10"
 | 
			
		||||
 | 
			
		||||
[clients]
 | 
			
		||||
data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it
 | 
			
		||||
 | 
			
		||||
# Line breaks are OK when inside arrays
 | 
			
		||||
hosts = [
 | 
			
		||||
  "alpha",
 | 
			
		||||
  "omega"
 | 
			
		||||
]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And the corresponding Go types are:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
type tomlConfig struct {
 | 
			
		||||
	Title string
 | 
			
		||||
	Owner ownerInfo
 | 
			
		||||
	DB database `toml:"database"`
 | 
			
		||||
	Servers map[string]server
 | 
			
		||||
	Clients clients
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ownerInfo struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	Org string `toml:"organization"`
 | 
			
		||||
	Bio string
 | 
			
		||||
	DOB time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type database struct {
 | 
			
		||||
	Server string
 | 
			
		||||
	Ports []int
 | 
			
		||||
	ConnMax int `toml:"connection_max"`
 | 
			
		||||
	Enabled bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type server struct {
 | 
			
		||||
	IP string
 | 
			
		||||
	DC string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type clients struct {
 | 
			
		||||
	Data [][]interface{}
 | 
			
		||||
	Hosts []string
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Note that a case insensitive match will be tried if an exact match can't be
 | 
			
		||||
found.
 | 
			
		||||
 | 
			
		||||
A working example of the above can be found in `_examples/example.{go,toml}`.
 | 
			
		||||
							
								
								
									
										90
									
								
								vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/BurntSushi/toml/cmd/toml-test-decoder/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,90 +0,0 @@
 | 
			
		||||
// Command toml-test-decoder satisfies the toml-test interface for testing
 | 
			
		||||
// TOML decoders. Namely, it accepts TOML on stdin and outputs JSON on stdout.
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/BurntSushi/toml"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	log.SetFlags(0)
 | 
			
		||||
 | 
			
		||||
	flag.Usage = usage
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func usage() {
 | 
			
		||||
	log.Printf("Usage: %s < toml-file\n", path.Base(os.Args[0]))
 | 
			
		||||
	flag.PrintDefaults()
 | 
			
		||||
 | 
			
		||||
	os.Exit(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if flag.NArg() != 0 {
 | 
			
		||||
		flag.Usage()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var tmp interface{}
 | 
			
		||||
	if _, err := toml.DecodeReader(os.Stdin, &tmp); err != nil {
 | 
			
		||||
		log.Fatalf("Error decoding TOML: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	typedTmp := translate(tmp)
 | 
			
		||||
	if err := json.NewEncoder(os.Stdout).Encode(typedTmp); err != nil {
 | 
			
		||||
		log.Fatalf("Error encoding JSON: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func translate(tomlData interface{}) interface{} {
 | 
			
		||||
	switch orig := tomlData.(type) {
 | 
			
		||||
	case map[string]interface{}:
 | 
			
		||||
		typed := make(map[string]interface{}, len(orig))
 | 
			
		||||
		for k, v := range orig {
 | 
			
		||||
			typed[k] = translate(v)
 | 
			
		||||
		}
 | 
			
		||||
		return typed
 | 
			
		||||
	case []map[string]interface{}:
 | 
			
		||||
		typed := make([]map[string]interface{}, len(orig))
 | 
			
		||||
		for i, v := range orig {
 | 
			
		||||
			typed[i] = translate(v).(map[string]interface{})
 | 
			
		||||
		}
 | 
			
		||||
		return typed
 | 
			
		||||
	case []interface{}:
 | 
			
		||||
		typed := make([]interface{}, len(orig))
 | 
			
		||||
		for i, v := range orig {
 | 
			
		||||
			typed[i] = translate(v)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// We don't really need to tag arrays, but let's be future proof.
 | 
			
		||||
		// (If TOML ever supports tuples, we'll need this.)
 | 
			
		||||
		return tag("array", typed)
 | 
			
		||||
	case time.Time:
 | 
			
		||||
		return tag("datetime", orig.Format("2006-01-02T15:04:05Z"))
 | 
			
		||||
	case bool:
 | 
			
		||||
		return tag("bool", fmt.Sprintf("%v", orig))
 | 
			
		||||
	case int64:
 | 
			
		||||
		return tag("integer", fmt.Sprintf("%d", orig))
 | 
			
		||||
	case float64:
 | 
			
		||||
		return tag("float", fmt.Sprintf("%v", orig))
 | 
			
		||||
	case string:
 | 
			
		||||
		return tag("string", orig)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	panic(fmt.Sprintf("Unknown type: %T", tomlData))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tag(typeName string, data interface{}) map[string]interface{} {
 | 
			
		||||
	return map[string]interface{}{
 | 
			
		||||
		"type":  typeName,
 | 
			
		||||
		"value": data,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										131
									
								
								vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										131
									
								
								vendor/github.com/BurntSushi/toml/cmd/toml-test-encoder/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,131 +0,0 @@
 | 
			
		||||
// Command toml-test-encoder satisfies the toml-test interface for testing
 | 
			
		||||
// TOML encoders. Namely, it accepts JSON on stdin and outputs TOML on stdout.
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/BurntSushi/toml"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	log.SetFlags(0)
 | 
			
		||||
 | 
			
		||||
	flag.Usage = usage
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func usage() {
 | 
			
		||||
	log.Printf("Usage: %s < json-file\n", path.Base(os.Args[0]))
 | 
			
		||||
	flag.PrintDefaults()
 | 
			
		||||
 | 
			
		||||
	os.Exit(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if flag.NArg() != 0 {
 | 
			
		||||
		flag.Usage()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var tmp interface{}
 | 
			
		||||
	if err := json.NewDecoder(os.Stdin).Decode(&tmp); err != nil {
 | 
			
		||||
		log.Fatalf("Error decoding JSON: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tomlData := translate(tmp)
 | 
			
		||||
	if err := toml.NewEncoder(os.Stdout).Encode(tomlData); err != nil {
 | 
			
		||||
		log.Fatalf("Error encoding TOML: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func translate(typedJson interface{}) interface{} {
 | 
			
		||||
	switch v := typedJson.(type) {
 | 
			
		||||
	case map[string]interface{}:
 | 
			
		||||
		if len(v) == 2 && in("type", v) && in("value", v) {
 | 
			
		||||
			return untag(v)
 | 
			
		||||
		}
 | 
			
		||||
		m := make(map[string]interface{}, len(v))
 | 
			
		||||
		for k, v2 := range v {
 | 
			
		||||
			m[k] = translate(v2)
 | 
			
		||||
		}
 | 
			
		||||
		return m
 | 
			
		||||
	case []interface{}:
 | 
			
		||||
		tabArray := make([]map[string]interface{}, len(v))
 | 
			
		||||
		for i := range v {
 | 
			
		||||
			if m, ok := translate(v[i]).(map[string]interface{}); ok {
 | 
			
		||||
				tabArray[i] = m
 | 
			
		||||
			} else {
 | 
			
		||||
				log.Fatalf("JSON arrays may only contain objects. This " +
 | 
			
		||||
					"corresponds to only tables being allowed in " +
 | 
			
		||||
					"TOML table arrays.")
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return tabArray
 | 
			
		||||
	}
 | 
			
		||||
	log.Fatalf("Unrecognized JSON format '%T'.", typedJson)
 | 
			
		||||
	panic("unreachable")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func untag(typed map[string]interface{}) interface{} {
 | 
			
		||||
	t := typed["type"].(string)
 | 
			
		||||
	v := typed["value"]
 | 
			
		||||
	switch t {
 | 
			
		||||
	case "string":
 | 
			
		||||
		return v.(string)
 | 
			
		||||
	case "integer":
 | 
			
		||||
		v := v.(string)
 | 
			
		||||
		n, err := strconv.Atoi(v)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Could not parse '%s' as integer: %s", v, err)
 | 
			
		||||
		}
 | 
			
		||||
		return n
 | 
			
		||||
	case "float":
 | 
			
		||||
		v := v.(string)
 | 
			
		||||
		f, err := strconv.ParseFloat(v, 64)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Could not parse '%s' as float64: %s", v, err)
 | 
			
		||||
		}
 | 
			
		||||
		return f
 | 
			
		||||
	case "datetime":
 | 
			
		||||
		v := v.(string)
 | 
			
		||||
		t, err := time.Parse("2006-01-02T15:04:05Z", v)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Could not parse '%s' as a datetime: %s", v, err)
 | 
			
		||||
		}
 | 
			
		||||
		return t
 | 
			
		||||
	case "bool":
 | 
			
		||||
		v := v.(string)
 | 
			
		||||
		switch v {
 | 
			
		||||
		case "true":
 | 
			
		||||
			return true
 | 
			
		||||
		case "false":
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		log.Fatalf("Could not parse '%s' as a boolean.", v)
 | 
			
		||||
	case "array":
 | 
			
		||||
		v := v.([]interface{})
 | 
			
		||||
		array := make([]interface{}, len(v))
 | 
			
		||||
		for i := range v {
 | 
			
		||||
			if m, ok := v[i].(map[string]interface{}); ok {
 | 
			
		||||
				array[i] = untag(m)
 | 
			
		||||
			} else {
 | 
			
		||||
				log.Fatalf("Arrays may only contain other arrays or "+
 | 
			
		||||
					"primitive values, but found a '%T'.", m)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return array
 | 
			
		||||
	}
 | 
			
		||||
	log.Fatalf("Unrecognized tag type '%s'.", t)
 | 
			
		||||
	panic("unreachable")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func in(key string, m map[string]interface{}) bool {
 | 
			
		||||
	_, ok := m[key]
 | 
			
		||||
	return ok
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								vendor/github.com/BurntSushi/toml/cmd/tomlv/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										61
									
								
								vendor/github.com/BurntSushi/toml/cmd/tomlv/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,61 +0,0 @@
 | 
			
		||||
// Command tomlv validates TOML documents and prints each key's type.
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"text/tabwriter"
 | 
			
		||||
 | 
			
		||||
	"github.com/BurntSushi/toml"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	flagTypes = false
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	log.SetFlags(0)
 | 
			
		||||
 | 
			
		||||
	flag.BoolVar(&flagTypes, "types", flagTypes,
 | 
			
		||||
		"When set, the types of every defined key will be shown.")
 | 
			
		||||
 | 
			
		||||
	flag.Usage = usage
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func usage() {
 | 
			
		||||
	log.Printf("Usage: %s toml-file [ toml-file ... ]\n",
 | 
			
		||||
		path.Base(os.Args[0]))
 | 
			
		||||
	flag.PrintDefaults()
 | 
			
		||||
 | 
			
		||||
	os.Exit(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if flag.NArg() < 1 {
 | 
			
		||||
		flag.Usage()
 | 
			
		||||
	}
 | 
			
		||||
	for _, f := range flag.Args() {
 | 
			
		||||
		var tmp interface{}
 | 
			
		||||
		md, err := toml.DecodeFile(f, &tmp)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Error in '%s': %s", f, err)
 | 
			
		||||
		}
 | 
			
		||||
		if flagTypes {
 | 
			
		||||
			printTypes(md)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printTypes(md toml.MetaData) {
 | 
			
		||||
	tabw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
 | 
			
		||||
	for _, key := range md.Keys() {
 | 
			
		||||
		fmt.Fprintf(tabw, "%s%s\t%s\n",
 | 
			
		||||
			strings.Repeat("    ", len(key)-1), key, md.Type(key...))
 | 
			
		||||
	}
 | 
			
		||||
	tabw.Flush()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/BurntSushi/toml/session.vim
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/BurntSushi/toml/session.vim
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
au BufWritePost *.go silent!make tags > /dev/null 2>&1
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/GeertJohan/go.rice/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/GeertJohan/go.rice/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,22 +0,0 @@
 | 
			
		||||
Copyright (c) 2013, Geert-Johan Riemer
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 | 
			
		||||
1. Redistributions of source code must retain the above copyright notice, this
 | 
			
		||||
   list of conditions and the following disclaimer.
 | 
			
		||||
2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
   this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
   and/or other materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
							
								
								
									
										138
									
								
								vendor/github.com/GeertJohan/go.rice/appended.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										138
									
								
								vendor/github.com/GeertJohan/go.rice/appended.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,138 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"archive/zip"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/daaku/go.zipexe"
 | 
			
		||||
	"github.com/kardianos/osext"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// appendedBox defines an appended box
 | 
			
		||||
type appendedBox struct {
 | 
			
		||||
	Name  string                   // box name
 | 
			
		||||
	Files map[string]*appendedFile // appended files (*zip.File) by full path
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type appendedFile struct {
 | 
			
		||||
	zipFile  *zip.File
 | 
			
		||||
	dir      bool
 | 
			
		||||
	dirInfo  *appendedDirInfo
 | 
			
		||||
	children []*appendedFile
 | 
			
		||||
	content  []byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// appendedBoxes is a public register of appendes boxes
 | 
			
		||||
var appendedBoxes = make(map[string]*appendedBox)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	// find if exec is appended
 | 
			
		||||
	thisFile, err := osext.Executable()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return // not appended or cant find self executable
 | 
			
		||||
	}
 | 
			
		||||
	closer, rd, err := zipexe.OpenCloser(thisFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return // not appended
 | 
			
		||||
	}
 | 
			
		||||
	defer closer.Close()
 | 
			
		||||
 | 
			
		||||
	for _, f := range rd.File {
 | 
			
		||||
		// get box and file name from f.Name
 | 
			
		||||
		fileParts := strings.SplitN(strings.TrimLeft(filepath.ToSlash(f.Name), "/"), "/", 2)
 | 
			
		||||
		boxName := fileParts[0]
 | 
			
		||||
		var fileName string
 | 
			
		||||
		if len(fileParts) > 1 {
 | 
			
		||||
			fileName = fileParts[1]
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// find box or create new one if doesn't exist
 | 
			
		||||
		box := appendedBoxes[boxName]
 | 
			
		||||
		if box == nil {
 | 
			
		||||
			box = &appendedBox{
 | 
			
		||||
				Name:  boxName,
 | 
			
		||||
				Files: make(map[string]*appendedFile),
 | 
			
		||||
			}
 | 
			
		||||
			appendedBoxes[boxName] = box
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create and add file to box
 | 
			
		||||
		af := &appendedFile{
 | 
			
		||||
			zipFile: f,
 | 
			
		||||
		}
 | 
			
		||||
		if f.Comment == "dir" {
 | 
			
		||||
			af.dir = true
 | 
			
		||||
			af.dirInfo = &appendedDirInfo{
 | 
			
		||||
				name: filepath.Base(af.zipFile.Name),
 | 
			
		||||
				//++ TODO: use zip modtime when that is set correctly: af.zipFile.ModTime()
 | 
			
		||||
				time: time.Now(),
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			// this is a file, we need it's contents so we can create a bytes.Reader when the file is opened
 | 
			
		||||
			// make a new byteslice
 | 
			
		||||
			af.content = make([]byte, af.zipFile.FileInfo().Size())
 | 
			
		||||
			// ignore reading empty files from zip (empty file still is a valid file to be read though!)
 | 
			
		||||
			if len(af.content) > 0 {
 | 
			
		||||
				// open io.ReadCloser
 | 
			
		||||
				rc, err := af.zipFile.Open()
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					af.content = nil // this will cause an error when the file is being opened or seeked (which is good)
 | 
			
		||||
					// TODO: it's quite blunt to just log this stuff. but this is in init, so rice.Debug can't be changed yet..
 | 
			
		||||
					log.Printf("error opening appended file %s: %v", af.zipFile.Name, err)
 | 
			
		||||
				} else {
 | 
			
		||||
					_, err = rc.Read(af.content)
 | 
			
		||||
					rc.Close()
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						af.content = nil // this will cause an error when the file is being opened or seeked (which is good)
 | 
			
		||||
						// TODO: it's quite blunt to just log this stuff. but this is in init, so rice.Debug can't be changed yet..
 | 
			
		||||
						log.Printf("error reading data for appended file %s: %v", af.zipFile.Name, err)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// add appendedFile to box file list
 | 
			
		||||
		box.Files[fileName] = af
 | 
			
		||||
 | 
			
		||||
		// add to parent dir (if any)
 | 
			
		||||
		dirName := filepath.Dir(fileName)
 | 
			
		||||
		if dirName == "." {
 | 
			
		||||
			dirName = ""
 | 
			
		||||
		}
 | 
			
		||||
		if fileName != "" { // don't make box root dir a child of itself
 | 
			
		||||
			if dir := box.Files[dirName]; dir != nil {
 | 
			
		||||
				dir.children = append(dir.children, af)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// implements os.FileInfo.
 | 
			
		||||
// used for Readdir()
 | 
			
		||||
type appendedDirInfo struct {
 | 
			
		||||
	name string
 | 
			
		||||
	time time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (adi *appendedDirInfo) Name() string {
 | 
			
		||||
	return adi.name
 | 
			
		||||
}
 | 
			
		||||
func (adi *appendedDirInfo) Size() int64 {
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
func (adi *appendedDirInfo) Mode() os.FileMode {
 | 
			
		||||
	return os.ModeDir
 | 
			
		||||
}
 | 
			
		||||
func (adi *appendedDirInfo) ModTime() time.Time {
 | 
			
		||||
	return adi.time
 | 
			
		||||
}
 | 
			
		||||
func (adi *appendedDirInfo) IsDir() bool {
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
func (adi *appendedDirInfo) Sys() interface{} {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										337
									
								
								vendor/github.com/GeertJohan/go.rice/box.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										337
									
								
								vendor/github.com/GeertJohan/go.rice/box.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,337 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Box abstracts a directory for resources/files.
 | 
			
		||||
// It can either load files from disk, or from embedded code (when `rice --embed` was ran).
 | 
			
		||||
type Box struct {
 | 
			
		||||
	name         string
 | 
			
		||||
	absolutePath string
 | 
			
		||||
	embed        *embedded.EmbeddedBox
 | 
			
		||||
	appendd      *appendedBox
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var defaultLocateOrder = []LocateMethod{LocateEmbedded, LocateAppended, LocateFS}
 | 
			
		||||
 | 
			
		||||
func findBox(name string, order []LocateMethod) (*Box, error) {
 | 
			
		||||
	b := &Box{name: name}
 | 
			
		||||
 | 
			
		||||
	// no support for absolute paths since gopath can be different on different machines.
 | 
			
		||||
	// therefore, required box must be located relative to package requiring it.
 | 
			
		||||
	if filepath.IsAbs(name) {
 | 
			
		||||
		return nil, errors.New("given name/path is absolute")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var err error
 | 
			
		||||
	for _, method := range order {
 | 
			
		||||
		switch method {
 | 
			
		||||
		case LocateEmbedded:
 | 
			
		||||
			if embed := embedded.EmbeddedBoxes[name]; embed != nil {
 | 
			
		||||
				b.embed = embed
 | 
			
		||||
				return b, nil
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		case LocateAppended:
 | 
			
		||||
			appendedBoxName := strings.Replace(name, `/`, `-`, -1)
 | 
			
		||||
			if appendd := appendedBoxes[appendedBoxName]; appendd != nil {
 | 
			
		||||
				b.appendd = appendd
 | 
			
		||||
				return b, nil
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		case LocateFS:
 | 
			
		||||
			// resolve absolute directory path
 | 
			
		||||
			err := b.resolveAbsolutePathFromCaller()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			// check if absolutePath exists on filesystem
 | 
			
		||||
			info, err := os.Stat(b.absolutePath)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			// check if absolutePath is actually a directory
 | 
			
		||||
			if !info.IsDir() {
 | 
			
		||||
				err = errors.New("given name/path is not a directory")
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			return b, nil
 | 
			
		||||
		case LocateWorkingDirectory:
 | 
			
		||||
			// resolve absolute directory path
 | 
			
		||||
			err := b.resolveAbsolutePathFromWorkingDirectory()
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			// check if absolutePath exists on filesystem
 | 
			
		||||
			info, err := os.Stat(b.absolutePath)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			// check if absolutePath is actually a directory
 | 
			
		||||
			if !info.IsDir() {
 | 
			
		||||
				err = errors.New("given name/path is not a directory")
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			return b, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		err = fmt.Errorf("could not locate box %q", name)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindBox returns a Box instance for given name.
 | 
			
		||||
// When the given name is a relative path, it's base path will be the calling pkg/cmd's source root.
 | 
			
		||||
// When the given name is absolute, it's absolute. derp.
 | 
			
		||||
// Make sure the path doesn't contain any sensitive information as it might be placed into generated go source (embedded).
 | 
			
		||||
func FindBox(name string) (*Box, error) {
 | 
			
		||||
	return findBox(name, defaultLocateOrder)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MustFindBox returns a Box instance for given name, like FindBox does.
 | 
			
		||||
// It does not return an error, instead it panics when an error occurs.
 | 
			
		||||
func MustFindBox(name string) *Box {
 | 
			
		||||
	box, err := findBox(name, defaultLocateOrder)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return box
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is injected as a mutable function literal so that we can mock it out in
 | 
			
		||||
// tests and return a fixed test file.
 | 
			
		||||
var resolveAbsolutePathFromCaller = func(name string, nStackFrames int) (string, error) {
 | 
			
		||||
	_, callingGoFile, _, ok := runtime.Caller(nStackFrames)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "", errors.New("couldn't find caller on stack")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// resolve to proper path
 | 
			
		||||
	pkgDir := filepath.Dir(callingGoFile)
 | 
			
		||||
	// fix for go cover
 | 
			
		||||
	const coverPath = "_test/_obj_test"
 | 
			
		||||
	if !filepath.IsAbs(pkgDir) {
 | 
			
		||||
		if i := strings.Index(pkgDir, coverPath); i >= 0 {
 | 
			
		||||
			pkgDir = pkgDir[:i] + pkgDir[i+len(coverPath):]            // remove coverPath
 | 
			
		||||
			pkgDir = filepath.Join(os.Getenv("GOPATH"), "src", pkgDir) // make absolute
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return filepath.Join(pkgDir, name), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Box) resolveAbsolutePathFromCaller() error {
 | 
			
		||||
	path, err := resolveAbsolutePathFromCaller(b.name, 4)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	b.absolutePath = path
 | 
			
		||||
	return nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Box) resolveAbsolutePathFromWorkingDirectory() error {
 | 
			
		||||
	path, err := os.Getwd()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	b.absolutePath = filepath.Join(path, b.name)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsEmbedded indicates wether this box was embedded into the application
 | 
			
		||||
func (b *Box) IsEmbedded() bool {
 | 
			
		||||
	return b.embed != nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsAppended indicates wether this box was appended to the application
 | 
			
		||||
func (b *Box) IsAppended() bool {
 | 
			
		||||
	return b.appendd != nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Time returns how actual the box is.
 | 
			
		||||
// When the box is embedded, it's value is saved in the embedding code.
 | 
			
		||||
// When the box is live, this methods returns time.Now()
 | 
			
		||||
func (b *Box) Time() time.Time {
 | 
			
		||||
	if b.IsEmbedded() {
 | 
			
		||||
		return b.embed.Time
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//++ TODO: return time for appended box
 | 
			
		||||
 | 
			
		||||
	return time.Now()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Open opens a File from the box
 | 
			
		||||
// If there is an error, it will be of type *os.PathError.
 | 
			
		||||
func (b *Box) Open(name string) (*File, error) {
 | 
			
		||||
	if Debug {
 | 
			
		||||
		fmt.Printf("Open(%s)\n", name)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if b.IsEmbedded() {
 | 
			
		||||
		if Debug {
 | 
			
		||||
			fmt.Println("Box is embedded")
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// trim prefix (paths are relative to box)
 | 
			
		||||
		name = strings.TrimLeft(name, "/")
 | 
			
		||||
		if Debug {
 | 
			
		||||
			fmt.Printf("Trying %s\n", name)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// search for file
 | 
			
		||||
		ef := b.embed.Files[name]
 | 
			
		||||
		if ef == nil {
 | 
			
		||||
			if Debug {
 | 
			
		||||
				fmt.Println("Didn't find file in embed")
 | 
			
		||||
			}
 | 
			
		||||
			// file not found, try dir
 | 
			
		||||
			ed := b.embed.Dirs[name]
 | 
			
		||||
			if ed == nil {
 | 
			
		||||
				if Debug {
 | 
			
		||||
					fmt.Println("Didn't find dir in embed")
 | 
			
		||||
				}
 | 
			
		||||
				// dir not found, error out
 | 
			
		||||
				return nil, &os.PathError{
 | 
			
		||||
					Op:   "open",
 | 
			
		||||
					Path: name,
 | 
			
		||||
					Err:  os.ErrNotExist,
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if Debug {
 | 
			
		||||
				fmt.Println("Found dir. Returning virtual dir")
 | 
			
		||||
			}
 | 
			
		||||
			vd := newVirtualDir(ed)
 | 
			
		||||
			return &File{virtualD: vd}, nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// box is embedded
 | 
			
		||||
		if Debug {
 | 
			
		||||
			fmt.Println("Found file. Returning virtual file")
 | 
			
		||||
		}
 | 
			
		||||
		vf := newVirtualFile(ef)
 | 
			
		||||
		return &File{virtualF: vf}, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if b.IsAppended() {
 | 
			
		||||
		// trim prefix (paths are relative to box)
 | 
			
		||||
		name = strings.TrimLeft(name, "/")
 | 
			
		||||
 | 
			
		||||
		// search for file
 | 
			
		||||
		appendedFile := b.appendd.Files[name]
 | 
			
		||||
		if appendedFile == nil {
 | 
			
		||||
			return nil, &os.PathError{
 | 
			
		||||
				Op:   "open",
 | 
			
		||||
				Path: name,
 | 
			
		||||
				Err:  os.ErrNotExist,
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create new file
 | 
			
		||||
		f := &File{
 | 
			
		||||
			appendedF: appendedFile,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// if this file is a directory, we want to be able to read and seek
 | 
			
		||||
		if !appendedFile.dir {
 | 
			
		||||
			// looks like malformed data in zip, error now
 | 
			
		||||
			if appendedFile.content == nil {
 | 
			
		||||
				return nil, &os.PathError{
 | 
			
		||||
					Op:   "open",
 | 
			
		||||
					Path: "name",
 | 
			
		||||
					Err:  errors.New("error reading data from zip file"),
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			// create new bytes.Reader
 | 
			
		||||
			f.appendedFileReader = bytes.NewReader(appendedFile.content)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// all done
 | 
			
		||||
		return f, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// perform os open
 | 
			
		||||
	if Debug {
 | 
			
		||||
		fmt.Printf("Using os.Open(%s)", filepath.Join(b.absolutePath, name))
 | 
			
		||||
	}
 | 
			
		||||
	file, err := os.Open(filepath.Join(b.absolutePath, name))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &File{realF: file}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Bytes returns the content of the file with given name as []byte.
 | 
			
		||||
func (b *Box) Bytes(name string) ([]byte, error) {
 | 
			
		||||
	file, err := b.Open(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	content, err := ioutil.ReadAll(file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return content, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MustBytes returns the content of the file with given name as []byte.
 | 
			
		||||
// panic's on error.
 | 
			
		||||
func (b *Box) MustBytes(name string) []byte {
 | 
			
		||||
	bts, err := b.Bytes(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return bts
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String returns the content of the file with given name as string.
 | 
			
		||||
func (b *Box) String(name string) (string, error) {
 | 
			
		||||
	// check if box is embedded, optimized fast path
 | 
			
		||||
	if b.IsEmbedded() {
 | 
			
		||||
		// find file in embed
 | 
			
		||||
		ef := b.embed.Files[name]
 | 
			
		||||
		if ef == nil {
 | 
			
		||||
			return "", os.ErrNotExist
 | 
			
		||||
		}
 | 
			
		||||
		// return as string
 | 
			
		||||
		return ef.Content, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bts, err := b.Bytes(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return string(bts), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MustString returns the content of the file with given name as string.
 | 
			
		||||
// panic's on error.
 | 
			
		||||
func (b *Box) MustString(name string) string {
 | 
			
		||||
	str, err := b.String(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return str
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Name returns the name of the box
 | 
			
		||||
func (b *Box) Name() string {
 | 
			
		||||
	return b.name
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								vendor/github.com/GeertJohan/go.rice/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/GeertJohan/go.rice/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,39 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
// LocateMethod defines how a box is located.
 | 
			
		||||
type LocateMethod int
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	LocateFS               = LocateMethod(iota) // Locate on the filesystem according to package path.
 | 
			
		||||
	LocateAppended                              // Locate boxes appended to the executable.
 | 
			
		||||
	LocateEmbedded                              // Locate embedded boxes.
 | 
			
		||||
	LocateWorkingDirectory                      // Locate on the binary working directory
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Config allows customizing the box lookup behavior.
 | 
			
		||||
type Config struct {
 | 
			
		||||
	// LocateOrder defines the priority order that boxes are searched for. By
 | 
			
		||||
	// default, the package global FindBox searches for embedded boxes first,
 | 
			
		||||
	// then appended boxes, and then finally boxes on the filesystem.  That
 | 
			
		||||
	// search order may be customized by provided the ordered list here. Leaving
 | 
			
		||||
	// out a particular method will omit that from the search space. For
 | 
			
		||||
	// example, []LocateMethod{LocateEmbedded, LocateAppended} will never search
 | 
			
		||||
	// the filesystem for boxes.
 | 
			
		||||
	LocateOrder []LocateMethod
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindBox searches for boxes using the LocateOrder of the config.
 | 
			
		||||
func (c *Config) FindBox(boxName string) (*Box, error) {
 | 
			
		||||
	return findBox(boxName, c.LocateOrder)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MustFindBox searches for boxes using the LocateOrder of the config, like
 | 
			
		||||
// FindBox does.  It does not return an error, instead it panics when an error
 | 
			
		||||
// occurs.
 | 
			
		||||
func (c *Config) MustFindBox(boxName string) *Box {
 | 
			
		||||
	box, err := findBox(boxName, c.LocateOrder)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return box
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/github.com/GeertJohan/go.rice/debug.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/GeertJohan/go.rice/debug.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,4 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
// Debug can be set to true to enable debugging.
 | 
			
		||||
var Debug = false
 | 
			
		||||
							
								
								
									
										90
									
								
								vendor/github.com/GeertJohan/go.rice/embedded.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/GeertJohan/go.rice/embedded.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,90 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// re-type to make exported methods invisible to user (godoc)
 | 
			
		||||
// they're not required for the user
 | 
			
		||||
// embeddedDirInfo implements os.FileInfo
 | 
			
		||||
type embeddedDirInfo embedded.EmbeddedDir
 | 
			
		||||
 | 
			
		||||
// Name returns the base name of the directory
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) Name() string {
 | 
			
		||||
	return ed.Filename
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Size always returns 0
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) Size() int64 {
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mode returns the file mode bits
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) Mode() os.FileMode {
 | 
			
		||||
	return os.FileMode(0555 | os.ModeDir) // dr-xr-xr-x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ModTime returns the modification time
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) ModTime() time.Time {
 | 
			
		||||
	return ed.DirModTime
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsDir returns the abbreviation for Mode().IsDir() (always true)
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) IsDir() bool {
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sys returns the underlying data source (always nil)
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ed *embeddedDirInfo) Sys() interface{} {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// re-type to make exported methods invisible to user (godoc)
 | 
			
		||||
// they're not required for the user
 | 
			
		||||
// embeddedFileInfo implements os.FileInfo
 | 
			
		||||
type embeddedFileInfo embedded.EmbeddedFile
 | 
			
		||||
 | 
			
		||||
// Name returns the base name of the file
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) Name() string {
 | 
			
		||||
	return ef.Filename
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Size returns the length in bytes for regular files; system-dependent for others
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) Size() int64 {
 | 
			
		||||
	return int64(len(ef.Content))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mode returns the file mode bits
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) Mode() os.FileMode {
 | 
			
		||||
	return os.FileMode(0555) // r-xr-xr-x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ModTime returns the modification time
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) ModTime() time.Time {
 | 
			
		||||
	return ef.FileModTime
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsDir returns the abbreviation for Mode().IsDir() (always false)
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) IsDir() bool {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sys returns the underlying data source (always nil)
 | 
			
		||||
// (implementing os.FileInfo)
 | 
			
		||||
func (ef *embeddedFileInfo) Sys() interface{} {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								vendor/github.com/GeertJohan/go.rice/embedded/embedded.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/github.com/GeertJohan/go.rice/embedded/embedded.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,80 +0,0 @@
 | 
			
		||||
// Package embedded defines embedded data types that are shared between the go.rice package and generated code.
 | 
			
		||||
package embedded
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EmbedTypeGo   = 0
 | 
			
		||||
	EmbedTypeSyso = 1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// EmbeddedBox defines an embedded box
 | 
			
		||||
type EmbeddedBox struct {
 | 
			
		||||
	Name      string                   // box name
 | 
			
		||||
	Time      time.Time                // embed time
 | 
			
		||||
	EmbedType int                      // kind of embedding
 | 
			
		||||
	Files     map[string]*EmbeddedFile // ALL embedded files by full path
 | 
			
		||||
	Dirs      map[string]*EmbeddedDir  // ALL embedded dirs by full path
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Link creates the ChildDirs and ChildFiles links in all EmbeddedDir's
 | 
			
		||||
func (e *EmbeddedBox) Link() {
 | 
			
		||||
	for path, ed := range e.Dirs {
 | 
			
		||||
		fmt.Println(path)
 | 
			
		||||
		ed.ChildDirs = make([]*EmbeddedDir, 0)
 | 
			
		||||
		ed.ChildFiles = make([]*EmbeddedFile, 0)
 | 
			
		||||
	}
 | 
			
		||||
	for path, ed := range e.Dirs {
 | 
			
		||||
		parentDirpath, _ := filepath.Split(path)
 | 
			
		||||
		if strings.HasSuffix(parentDirpath, "/") {
 | 
			
		||||
			parentDirpath = parentDirpath[:len(parentDirpath)-1]
 | 
			
		||||
		}
 | 
			
		||||
		parentDir := e.Dirs[parentDirpath]
 | 
			
		||||
		if parentDir == nil {
 | 
			
		||||
			panic("parentDir `" + parentDirpath + "` is missing in embedded box")
 | 
			
		||||
		}
 | 
			
		||||
		parentDir.ChildDirs = append(parentDir.ChildDirs, ed)
 | 
			
		||||
	}
 | 
			
		||||
	for path, ef := range e.Files {
 | 
			
		||||
		dirpath, _ := filepath.Split(path)
 | 
			
		||||
		if strings.HasSuffix(dirpath, "/") {
 | 
			
		||||
			dirpath = dirpath[:len(dirpath)-1]
 | 
			
		||||
		}
 | 
			
		||||
		dir := e.Dirs[dirpath]
 | 
			
		||||
		if dir == nil {
 | 
			
		||||
			panic("dir `" + dirpath + "` is missing in embedded box")
 | 
			
		||||
		}
 | 
			
		||||
		dir.ChildFiles = append(dir.ChildFiles, ef)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EmbeddedDir is instanced in the code generated by the rice tool and contains all necicary information about an embedded file
 | 
			
		||||
type EmbeddedDir struct {
 | 
			
		||||
	Filename   string
 | 
			
		||||
	DirModTime time.Time
 | 
			
		||||
	ChildDirs  []*EmbeddedDir  // direct childs, as returned by virtualDir.Readdir()
 | 
			
		||||
	ChildFiles []*EmbeddedFile // direct childs, as returned by virtualDir.Readdir()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EmbeddedFile is instanced in the code generated by the rice tool and contains all necicary information about an embedded file
 | 
			
		||||
type EmbeddedFile struct {
 | 
			
		||||
	Filename    string // filename
 | 
			
		||||
	FileModTime time.Time
 | 
			
		||||
	Content     string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EmbeddedBoxes is a public register of embedded boxes
 | 
			
		||||
var EmbeddedBoxes = make(map[string]*EmbeddedBox)
 | 
			
		||||
 | 
			
		||||
// RegisterEmbeddedBox registers an EmbeddedBox
 | 
			
		||||
func RegisterEmbeddedBox(name string, box *EmbeddedBox) {
 | 
			
		||||
	if _, exists := EmbeddedBoxes[name]; exists {
 | 
			
		||||
		panic(fmt.Sprintf("EmbeddedBox with name `%s` exists already", name))
 | 
			
		||||
	}
 | 
			
		||||
	EmbeddedBoxes[name] = box
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								vendor/github.com/GeertJohan/go.rice/example/example.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/GeertJohan/go.rice/example/example.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,69 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"text/template"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.rice"
 | 
			
		||||
	"github.com/davecgh/go-spew/spew"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	conf := rice.Config{
 | 
			
		||||
		LocateOrder: []rice.LocateMethod{rice.LocateEmbedded, rice.LocateAppended, rice.LocateFS},
 | 
			
		||||
	}
 | 
			
		||||
	box, err := conf.FindBox("example-files")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("error opening rice.Box: %s\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	// spew.Dump(box)
 | 
			
		||||
 | 
			
		||||
	contentString, err := box.String("file.txt")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("could not read file contents as string: %s\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	log.Printf("Read some file contents as string:\n%s\n", contentString)
 | 
			
		||||
 | 
			
		||||
	contentBytes, err := box.Bytes("file.txt")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("could not read file contents as byteSlice: %s\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	log.Printf("Read some file contents as byteSlice:\n%s\n", hex.Dump(contentBytes))
 | 
			
		||||
 | 
			
		||||
	file, err := box.Open("file.txt")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("could not open file: %s\n", err)
 | 
			
		||||
	}
 | 
			
		||||
	spew.Dump(file)
 | 
			
		||||
 | 
			
		||||
	// find/create a rice.Box
 | 
			
		||||
	templateBox, err := rice.FindBox("example-templates")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	// get file contents as string
 | 
			
		||||
	templateString, err := templateBox.String("message.tmpl")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	// parse and execute the template
 | 
			
		||||
	tmplMessage, err := template.New("message").Parse(templateString)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	tmplMessage.Execute(os.Stdout, map[string]string{"Message": "Hello, world!"})
 | 
			
		||||
 | 
			
		||||
	http.Handle("/", http.FileServer(box.HTTPBox()))
 | 
			
		||||
	go func() {
 | 
			
		||||
		fmt.Println("Serving files on :8080, press ctrl-C to exit")
 | 
			
		||||
		err := http.ListenAndServe(":8080", nil)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("error serving files: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
	select {}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										144
									
								
								vendor/github.com/GeertJohan/go.rice/file.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										144
									
								
								vendor/github.com/GeertJohan/go.rice/file.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,144 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// File implements the io.Reader, io.Seeker, io.Closer and http.File interfaces
 | 
			
		||||
type File struct {
 | 
			
		||||
	// File abstracts file methods so the user doesn't see the difference between rice.virtualFile, rice.virtualDir and os.File
 | 
			
		||||
	// TODO: maybe use internal File interface and four implementations: *os.File, appendedFile, virtualFile, virtualDir
 | 
			
		||||
 | 
			
		||||
	// real file on disk
 | 
			
		||||
	realF *os.File
 | 
			
		||||
 | 
			
		||||
	// when embedded (go)
 | 
			
		||||
	virtualF *virtualFile
 | 
			
		||||
	virtualD *virtualDir
 | 
			
		||||
 | 
			
		||||
	// when appended (zip)
 | 
			
		||||
	appendedF          *appendedFile
 | 
			
		||||
	appendedFileReader *bytes.Reader
 | 
			
		||||
	// TODO: is appendedFileReader subject of races? Might need a lock here..
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Close is like (*os.File).Close()
 | 
			
		||||
// Visit http://golang.org/pkg/os/#File.Close for more information
 | 
			
		||||
func (f *File) Close() error {
 | 
			
		||||
	if f.appendedF != nil {
 | 
			
		||||
		if f.appendedFileReader == nil {
 | 
			
		||||
			return errors.New("already closed")
 | 
			
		||||
		}
 | 
			
		||||
		f.appendedFileReader = nil
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualF != nil {
 | 
			
		||||
		return f.virtualF.close()
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualD != nil {
 | 
			
		||||
		return f.virtualD.close()
 | 
			
		||||
	}
 | 
			
		||||
	return f.realF.Close()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Stat is like (*os.File).Stat()
 | 
			
		||||
// Visit http://golang.org/pkg/os/#File.Stat for more information
 | 
			
		||||
func (f *File) Stat() (os.FileInfo, error) {
 | 
			
		||||
	if f.appendedF != nil {
 | 
			
		||||
		if f.appendedF.dir {
 | 
			
		||||
			return f.appendedF.dirInfo, nil
 | 
			
		||||
		}
 | 
			
		||||
		if f.appendedFileReader == nil {
 | 
			
		||||
			return nil, errors.New("file is closed")
 | 
			
		||||
		}
 | 
			
		||||
		return f.appendedF.zipFile.FileInfo(), nil
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualF != nil {
 | 
			
		||||
		return f.virtualF.stat()
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualD != nil {
 | 
			
		||||
		return f.virtualD.stat()
 | 
			
		||||
	}
 | 
			
		||||
	return f.realF.Stat()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Readdir is like (*os.File).Readdir()
 | 
			
		||||
// Visit http://golang.org/pkg/os/#File.Readdir for more information
 | 
			
		||||
func (f *File) Readdir(count int) ([]os.FileInfo, error) {
 | 
			
		||||
	if f.appendedF != nil {
 | 
			
		||||
		if f.appendedF.dir {
 | 
			
		||||
			fi := make([]os.FileInfo, 0, len(f.appendedF.children))
 | 
			
		||||
			for _, childAppendedFile := range f.appendedF.children {
 | 
			
		||||
				if childAppendedFile.dir {
 | 
			
		||||
					fi = append(fi, childAppendedFile.dirInfo)
 | 
			
		||||
				} else {
 | 
			
		||||
					fi = append(fi, childAppendedFile.zipFile.FileInfo())
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return fi, nil
 | 
			
		||||
		}
 | 
			
		||||
		//++ TODO: is os.ErrInvalid the correct error for Readdir on file?
 | 
			
		||||
		return nil, os.ErrInvalid
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualF != nil {
 | 
			
		||||
		return f.virtualF.readdir(count)
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualD != nil {
 | 
			
		||||
		return f.virtualD.readdir(count)
 | 
			
		||||
	}
 | 
			
		||||
	return f.realF.Readdir(count)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Read is like (*os.File).Read()
 | 
			
		||||
// Visit http://golang.org/pkg/os/#File.Read for more information
 | 
			
		||||
func (f *File) Read(bts []byte) (int, error) {
 | 
			
		||||
	if f.appendedF != nil {
 | 
			
		||||
		if f.appendedFileReader == nil {
 | 
			
		||||
			return 0, &os.PathError{
 | 
			
		||||
				Op:   "read",
 | 
			
		||||
				Path: filepath.Base(f.appendedF.zipFile.Name),
 | 
			
		||||
				Err:  errors.New("file is closed"),
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if f.appendedF.dir {
 | 
			
		||||
			return 0, &os.PathError{
 | 
			
		||||
				Op:   "read",
 | 
			
		||||
				Path: filepath.Base(f.appendedF.zipFile.Name),
 | 
			
		||||
				Err:  errors.New("is a directory"),
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return f.appendedFileReader.Read(bts)
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualF != nil {
 | 
			
		||||
		return f.virtualF.read(bts)
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualD != nil {
 | 
			
		||||
		return f.virtualD.read(bts)
 | 
			
		||||
	}
 | 
			
		||||
	return f.realF.Read(bts)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Seek is like (*os.File).Seek()
 | 
			
		||||
// Visit http://golang.org/pkg/os/#File.Seek for more information
 | 
			
		||||
func (f *File) Seek(offset int64, whence int) (int64, error) {
 | 
			
		||||
	if f.appendedF != nil {
 | 
			
		||||
		if f.appendedFileReader == nil {
 | 
			
		||||
			return 0, &os.PathError{
 | 
			
		||||
				Op:   "seek",
 | 
			
		||||
				Path: filepath.Base(f.appendedF.zipFile.Name),
 | 
			
		||||
				Err:  errors.New("file is closed"),
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return f.appendedFileReader.Seek(offset, whence)
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualF != nil {
 | 
			
		||||
		return f.virtualF.seek(offset, whence)
 | 
			
		||||
	}
 | 
			
		||||
	if f.virtualD != nil {
 | 
			
		||||
		return f.virtualD.seek(offset, whence)
 | 
			
		||||
	}
 | 
			
		||||
	return f.realF.Seek(offset, whence)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/GeertJohan/go.rice/http.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/GeertJohan/go.rice/http.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,21 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// HTTPBox implements http.FileSystem which allows the use of Box with a http.FileServer.
 | 
			
		||||
//   e.g.: http.Handle("/", http.FileServer(rice.MustFindBox("http-files").HTTPBox()))
 | 
			
		||||
type HTTPBox struct {
 | 
			
		||||
	*Box
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HTTPBox creates a new HTTPBox from an existing Box
 | 
			
		||||
func (b *Box) HTTPBox() *HTTPBox {
 | 
			
		||||
	return &HTTPBox{b}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Open returns a File using the http.File interface
 | 
			
		||||
func (hb *HTTPBox) Open(name string) (http.File, error) {
 | 
			
		||||
	return hb.Box.Open(name)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										172
									
								
								vendor/github.com/GeertJohan/go.rice/rice/append.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										172
									
								
								vendor/github.com/GeertJohan/go.rice/rice/append.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,172 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"archive/zip"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/daaku/go.zipexe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func operationAppend(pkgs []*build.Package) {
 | 
			
		||||
	if runtime.GOOS == "windows" {
 | 
			
		||||
		_, err := exec.LookPath("zip")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println("#### WARNING ! ####")
 | 
			
		||||
			fmt.Println("`rice append` is known not to work under windows because the `zip` command is not available. Please let me know if you got this to work (and how).")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// MARKED FOR DELETION
 | 
			
		||||
	// This is actually not required, the append command now has the option --exec required.
 | 
			
		||||
	// // check if package is a command
 | 
			
		||||
	// if !pkg.IsCommand() {
 | 
			
		||||
	// 	fmt.Println("Error: can not append to non-main package. Please follow instructions at github.com/GeertJohan/go.rice")
 | 
			
		||||
	// 	os.Exit(1)
 | 
			
		||||
	// }
 | 
			
		||||
 | 
			
		||||
	// create tmp zipfile
 | 
			
		||||
	tmpZipfileName := filepath.Join(os.TempDir(), fmt.Sprintf("ricebox-%d-%s.zip", time.Now().Unix(), randomString(10)))
 | 
			
		||||
	verbosef("Will create tmp zipfile: %s\n", tmpZipfileName)
 | 
			
		||||
	tmpZipfile, err := os.Create(tmpZipfileName)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error creating tmp zipfile: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		tmpZipfile.Close()
 | 
			
		||||
		os.Remove(tmpZipfileName)
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	// find abs path for binary file
 | 
			
		||||
	binfileName, err := filepath.Abs(flags.Append.Executable)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error finding absolute path for executable to append: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	verbosef("Will append to file: %s\n", binfileName)
 | 
			
		||||
 | 
			
		||||
	// check that command doesn't already have zip appended
 | 
			
		||||
	if rd, _ := zipexe.Open(binfileName); rd != nil {
 | 
			
		||||
		fmt.Printf("Cannot append to already appended executable. Please remove %s and build a fresh one.\n", binfileName)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// open binfile
 | 
			
		||||
	binfile, err := os.OpenFile(binfileName, os.O_WRONLY, os.ModeAppend)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error: unable to open executable file: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create zip.Writer
 | 
			
		||||
	zipWriter := zip.NewWriter(tmpZipfile)
 | 
			
		||||
 | 
			
		||||
	for _, pkg := range pkgs {
 | 
			
		||||
		// find boxes for this command
 | 
			
		||||
		boxMap := findBoxes(pkg)
 | 
			
		||||
 | 
			
		||||
		// notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ?
 | 
			
		||||
		if len(boxMap) == 0 {
 | 
			
		||||
			fmt.Printf("no calls to rice.FindBox() or rice.MustFindBox() found in import path `%s`\n", pkg.ImportPath)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		verbosef("\n")
 | 
			
		||||
 | 
			
		||||
		for boxname := range boxMap {
 | 
			
		||||
			appendedBoxName := strings.Replace(boxname, `/`, `-`, -1)
 | 
			
		||||
 | 
			
		||||
			// walk box path's and insert files
 | 
			
		||||
			boxPath := filepath.Clean(filepath.Join(pkg.Dir, boxname))
 | 
			
		||||
			filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
				if info == nil {
 | 
			
		||||
					fmt.Printf("Error: box \"%s\" not found on disk\n", path)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				// create zipFilename
 | 
			
		||||
				zipFileName := filepath.Join(appendedBoxName, strings.TrimPrefix(path, boxPath))
 | 
			
		||||
				// write directories as empty file with comment "dir"
 | 
			
		||||
				if info.IsDir() {
 | 
			
		||||
					_, err := zipWriter.CreateHeader(&zip.FileHeader{
 | 
			
		||||
						Name:    zipFileName,
 | 
			
		||||
						Comment: "dir",
 | 
			
		||||
					})
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						fmt.Printf("Error creating dir in tmp zip: %s\n", err)
 | 
			
		||||
						os.Exit(1)
 | 
			
		||||
					}
 | 
			
		||||
					return nil
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// create zipFileWriter
 | 
			
		||||
				zipFileHeader, err := zip.FileInfoHeader(info)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("Error creating zip FileHeader: %v\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				zipFileHeader.Name = zipFileName
 | 
			
		||||
				zipFileWriter, err := zipWriter.CreateHeader(zipFileHeader)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("Error creating file in tmp zip: %s\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				srcFile, err := os.Open(path)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("Error opening file to append: %s\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				_, err = io.Copy(zipFileWriter, srcFile)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("Error copying file contents to zip: %s\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				srcFile.Close()
 | 
			
		||||
 | 
			
		||||
				return nil
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = zipWriter.Close()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error closing tmp zipfile: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = tmpZipfile.Sync()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error syncing tmp zipfile: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	_, err = tmpZipfile.Seek(0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error seeking tmp zipfile: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	_, err = binfile.Seek(0, 2)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error seeking bin file: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = io.Copy(binfile, tmpZipfile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error appending zipfile to executable: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	zipA := exec.Command("zip", "-A", binfileName)
 | 
			
		||||
	err = zipA.Run()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error setting zip offset: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								vendor/github.com/GeertJohan/go.rice/rice/clean.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/GeertJohan/go.rice/rice/clean.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,33 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func operationClean(pkg *build.Package) {
 | 
			
		||||
	filepath.Walk(pkg.Dir, func(filename string, info os.FileInfo, err error) error {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error walking pkg dir to clean files: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		if info.IsDir() {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		verbosef("checking file '%s'\n", filename)
 | 
			
		||||
		if filepath.Base(filename) == "rice-box.go" ||
 | 
			
		||||
			strings.HasSuffix(filename, ".rice-box.go") ||
 | 
			
		||||
			strings.HasSuffix(filename, ".rice-box.syso") {
 | 
			
		||||
			err := os.Remove(filename)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				fmt.Printf("error removing file (%s): %s\n", filename, err)
 | 
			
		||||
				os.Exit(-1)
 | 
			
		||||
			}
 | 
			
		||||
			verbosef("removed file '%s'\n", filename)
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										158
									
								
								vendor/github.com/GeertJohan/go.rice/rice/embed-go.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										158
									
								
								vendor/github.com/GeertJohan/go.rice/rice/embed-go.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,158 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"go/format"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const boxFilename = "rice-box.go"
 | 
			
		||||
 | 
			
		||||
func operationEmbedGo(pkg *build.Package) {
 | 
			
		||||
 | 
			
		||||
	boxMap := findBoxes(pkg)
 | 
			
		||||
 | 
			
		||||
	// notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ?
 | 
			
		||||
	if len(boxMap) == 0 {
 | 
			
		||||
		fmt.Println("no calls to rice.FindBox() found")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	verbosef("\n")
 | 
			
		||||
	var boxes []*boxDataType
 | 
			
		||||
 | 
			
		||||
	for boxname := range boxMap {
 | 
			
		||||
		// find path and filename for this box
 | 
			
		||||
		boxPath := filepath.Join(pkg.Dir, boxname)
 | 
			
		||||
 | 
			
		||||
		// Check to see if the path for the box is a symbolic link.  If so, simply
 | 
			
		||||
		// box what the symbolic link points to.  Note: the filepath.Walk function
 | 
			
		||||
		// will NOT follow any nested symbolic links.  This only handles the case
 | 
			
		||||
		// where the root of the box is a symbolic link.
 | 
			
		||||
		symPath, serr := os.Readlink(boxPath)
 | 
			
		||||
		if serr == nil {
 | 
			
		||||
			boxPath = symPath
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// verbose info
 | 
			
		||||
		verbosef("embedding box '%s' to '%s'\n", boxname, boxFilename)
 | 
			
		||||
 | 
			
		||||
		// read box metadata
 | 
			
		||||
		boxInfo, ierr := os.Stat(boxPath)
 | 
			
		||||
		if ierr != nil {
 | 
			
		||||
			fmt.Printf("Error: unable to access box at %s\n", boxPath)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create box datastructure (used by template)
 | 
			
		||||
		box := &boxDataType{
 | 
			
		||||
			BoxName: boxname,
 | 
			
		||||
			UnixNow: boxInfo.ModTime().Unix(),
 | 
			
		||||
			Files:   make([]*fileDataType, 0),
 | 
			
		||||
			Dirs:    make(map[string]*dirDataType),
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if !boxInfo.IsDir() {
 | 
			
		||||
			fmt.Printf("Error: Box %s must point to a directory but points to %s instead\n",
 | 
			
		||||
				boxname, boxPath)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// fill box datastructure with file data
 | 
			
		||||
		filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				fmt.Printf("error walking box: %s\n", err)
 | 
			
		||||
				os.Exit(1)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			filename := strings.TrimPrefix(path, boxPath)
 | 
			
		||||
			filename = strings.Replace(filename, "\\", "/", -1)
 | 
			
		||||
			filename = strings.TrimPrefix(filename, "/")
 | 
			
		||||
			if info.IsDir() {
 | 
			
		||||
				dirData := &dirDataType{
 | 
			
		||||
					Identifier: "dir" + nextIdentifier(),
 | 
			
		||||
					FileName:   filename,
 | 
			
		||||
					ModTime:    info.ModTime().Unix(),
 | 
			
		||||
					ChildFiles: make([]*fileDataType, 0),
 | 
			
		||||
					ChildDirs:  make([]*dirDataType, 0),
 | 
			
		||||
				}
 | 
			
		||||
				verbosef("\tincludes dir: '%s'\n", dirData.FileName)
 | 
			
		||||
				box.Dirs[dirData.FileName] = dirData
 | 
			
		||||
 | 
			
		||||
				// add tree entry (skip for root, it'll create a recursion)
 | 
			
		||||
				if dirData.FileName != "" {
 | 
			
		||||
					pathParts := strings.Split(dirData.FileName, "/")
 | 
			
		||||
					parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")]
 | 
			
		||||
					parentDir.ChildDirs = append(parentDir.ChildDirs, dirData)
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				fileData := &fileDataType{
 | 
			
		||||
					Identifier: "file" + nextIdentifier(),
 | 
			
		||||
					FileName:   filename,
 | 
			
		||||
					ModTime:    info.ModTime().Unix(),
 | 
			
		||||
				}
 | 
			
		||||
				verbosef("\tincludes file: '%s'\n", fileData.FileName)
 | 
			
		||||
				fileData.Content, err = ioutil.ReadFile(path)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("error reading file content while walking box: %s\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				box.Files = append(box.Files, fileData)
 | 
			
		||||
 | 
			
		||||
				// add tree entry
 | 
			
		||||
				pathParts := strings.Split(fileData.FileName, "/")
 | 
			
		||||
				parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")]
 | 
			
		||||
				if parentDir == nil {
 | 
			
		||||
					fmt.Printf("Error: parent of %s is not within the box\n", path)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				parentDir.ChildFiles = append(parentDir.ChildFiles, fileData)
 | 
			
		||||
			}
 | 
			
		||||
			return nil
 | 
			
		||||
		})
 | 
			
		||||
		boxes = append(boxes, box)
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	embedSourceUnformated := bytes.NewBuffer(make([]byte, 0))
 | 
			
		||||
 | 
			
		||||
	// execute template to buffer
 | 
			
		||||
	err := tmplEmbeddedBox.Execute(
 | 
			
		||||
		embedSourceUnformated,
 | 
			
		||||
		embedFileDataType{pkg.Name, boxes},
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("error writing embedded box to file (template execute): %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// format the source code
 | 
			
		||||
	embedSource, err := format.Source(embedSourceUnformated.Bytes())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("error formatting embedSource: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create go file for box
 | 
			
		||||
	boxFile, err := os.Create(filepath.Join(pkg.Dir, boxFilename))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("error creating embedded box file: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	defer boxFile.Close()
 | 
			
		||||
 | 
			
		||||
	// write source to file
 | 
			
		||||
	_, err = io.Copy(boxFile, bytes.NewBuffer(embedSource))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("error writing embedSource to file: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										204
									
								
								vendor/github.com/GeertJohan/go.rice/rice/embed-syso.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										204
									
								
								vendor/github.com/GeertJohan/go.rice/rice/embed-syso.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,204 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/gob"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"text/template"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
	"github.com/akavel/rsrc/coff"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type sizedReader struct {
 | 
			
		||||
	*bytes.Reader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s sizedReader) Size() int64 {
 | 
			
		||||
	return int64(s.Len())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var tmplEmbeddedSysoHelper *template.Template
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	var err error
 | 
			
		||||
	tmplEmbeddedSysoHelper, err = template.New("embeddedSysoHelper").Parse(`package {{.Package}}
 | 
			
		||||
// ############# GENERATED CODE #####################
 | 
			
		||||
// ## This file was generated by the rice tool.
 | 
			
		||||
// ## Do not edit unless you know what you're doing.
 | 
			
		||||
// ##################################################
 | 
			
		||||
 | 
			
		||||
// extern char _bricebox_{{.Symname}}[], _ericebox_{{.Symname}};
 | 
			
		||||
// int get_{{.Symname}}_length() {
 | 
			
		||||
// 	return &_ericebox_{{.Symname}} - _bricebox_{{.Symname}};
 | 
			
		||||
// }
 | 
			
		||||
import "C"
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/gob"
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	ptr := unsafe.Pointer(&C._bricebox_{{.Symname}})
 | 
			
		||||
	bts := C.GoBytes(ptr, C.get_{{.Symname}}_length())
 | 
			
		||||
	embeddedBox := &embedded.EmbeddedBox{}
 | 
			
		||||
	err := gob.NewDecoder(bytes.NewReader(bts)).Decode(embeddedBox)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic("error decoding embedded box: "+err.Error())
 | 
			
		||||
	}
 | 
			
		||||
	embeddedBox.Link()
 | 
			
		||||
	embedded.RegisterEmbeddedBox(embeddedBox.Name, embeddedBox)
 | 
			
		||||
}`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic("could not parse template embeddedSysoHelper: " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type embeddedSysoHelperData struct {
 | 
			
		||||
	Package string
 | 
			
		||||
	Symname string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func operationEmbedSyso(pkg *build.Package) {
 | 
			
		||||
 | 
			
		||||
	regexpSynameReplacer := regexp.MustCompile(`[^a-z0-9_]`)
 | 
			
		||||
 | 
			
		||||
	boxMap := findBoxes(pkg)
 | 
			
		||||
 | 
			
		||||
	// notify user when no calls to rice.FindBox are made (is this an error and therefore os.Exit(1) ?
 | 
			
		||||
	if len(boxMap) == 0 {
 | 
			
		||||
		fmt.Println("no calls to rice.FindBox() found")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	verbosef("\n")
 | 
			
		||||
 | 
			
		||||
	for boxname := range boxMap {
 | 
			
		||||
		// find path and filename for this box
 | 
			
		||||
		boxPath := filepath.Join(pkg.Dir, boxname)
 | 
			
		||||
		boxFilename := strings.Replace(boxname, "/", "-", -1)
 | 
			
		||||
		boxFilename = strings.Replace(boxFilename, "..", "back", -1)
 | 
			
		||||
		boxFilename = strings.Replace(boxFilename, ".", "-", -1)
 | 
			
		||||
 | 
			
		||||
		// verbose info
 | 
			
		||||
		verbosef("embedding box '%s'\n", boxname)
 | 
			
		||||
		verbosef("\tto file %s\n", boxFilename)
 | 
			
		||||
 | 
			
		||||
		// read box metadata
 | 
			
		||||
		boxInfo, ierr := os.Stat(boxPath)
 | 
			
		||||
		if ierr != nil {
 | 
			
		||||
			fmt.Printf("Error: unable to access box at %s\n", boxPath)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create box datastructure (used by template)
 | 
			
		||||
		box := &embedded.EmbeddedBox{
 | 
			
		||||
			Name:      boxname,
 | 
			
		||||
			Time:      boxInfo.ModTime(),
 | 
			
		||||
			EmbedType: embedded.EmbedTypeSyso,
 | 
			
		||||
			Files:     make(map[string]*embedded.EmbeddedFile),
 | 
			
		||||
			Dirs:      make(map[string]*embedded.EmbeddedDir),
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// fill box datastructure with file data
 | 
			
		||||
		filepath.Walk(boxPath, func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				fmt.Printf("error walking box: %s\n", err)
 | 
			
		||||
				os.Exit(1)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			filename := strings.TrimPrefix(path, boxPath)
 | 
			
		||||
			filename = strings.Replace(filename, "\\", "/", -1)
 | 
			
		||||
			filename = strings.TrimPrefix(filename, "/")
 | 
			
		||||
			if info.IsDir() {
 | 
			
		||||
				embeddedDir := &embedded.EmbeddedDir{
 | 
			
		||||
					Filename:   filename,
 | 
			
		||||
					DirModTime: info.ModTime(),
 | 
			
		||||
				}
 | 
			
		||||
				verbosef("\tincludes dir: '%s'\n", embeddedDir.Filename)
 | 
			
		||||
				box.Dirs[embeddedDir.Filename] = embeddedDir
 | 
			
		||||
 | 
			
		||||
				// add tree entry (skip for root, it'll create a recursion)
 | 
			
		||||
				if embeddedDir.Filename != "" {
 | 
			
		||||
					pathParts := strings.Split(embeddedDir.Filename, "/")
 | 
			
		||||
					parentDir := box.Dirs[strings.Join(pathParts[:len(pathParts)-1], "/")]
 | 
			
		||||
					parentDir.ChildDirs = append(parentDir.ChildDirs, embeddedDir)
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				embeddedFile := &embedded.EmbeddedFile{
 | 
			
		||||
					Filename:    filename,
 | 
			
		||||
					FileModTime: info.ModTime(),
 | 
			
		||||
					Content:     "",
 | 
			
		||||
				}
 | 
			
		||||
				verbosef("\tincludes file: '%s'\n", embeddedFile.Filename)
 | 
			
		||||
				contentBytes, err := ioutil.ReadFile(path)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					fmt.Printf("error reading file content while walking box: %s\n", err)
 | 
			
		||||
					os.Exit(1)
 | 
			
		||||
				}
 | 
			
		||||
				embeddedFile.Content = string(contentBytes)
 | 
			
		||||
				box.Files[embeddedFile.Filename] = embeddedFile
 | 
			
		||||
			}
 | 
			
		||||
			return nil
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		// encode embedded box to gob file
 | 
			
		||||
		boxGobBuf := &bytes.Buffer{}
 | 
			
		||||
		err := gob.NewEncoder(boxGobBuf).Encode(box)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error encoding box to gob: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		verbosef("gob-encoded embeddedBox is %d bytes large\n", boxGobBuf.Len())
 | 
			
		||||
 | 
			
		||||
		// write coff
 | 
			
		||||
		symname := regexpSynameReplacer.ReplaceAllString(boxname, "_")
 | 
			
		||||
		createCoffSyso(boxname, symname, "386", boxGobBuf.Bytes())
 | 
			
		||||
		createCoffSyso(boxname, symname, "amd64", boxGobBuf.Bytes())
 | 
			
		||||
 | 
			
		||||
		// write go
 | 
			
		||||
		sysoHelperData := embeddedSysoHelperData{
 | 
			
		||||
			Package: pkg.Name,
 | 
			
		||||
			Symname: symname,
 | 
			
		||||
		}
 | 
			
		||||
		fileSysoHelper, err := os.Create(boxFilename + ".rice-box.go")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error creating syso helper: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		err = tmplEmbeddedSysoHelper.Execute(fileSysoHelper, sysoHelperData)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error executing tmplEmbeddedSysoHelper: %v\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createCoffSyso(boxFilename string, symname string, arch string, data []byte) {
 | 
			
		||||
	boxCoff := coff.NewRDATA()
 | 
			
		||||
	switch arch {
 | 
			
		||||
	case "386":
 | 
			
		||||
	case "amd64":
 | 
			
		||||
		boxCoff.FileHeader.Machine = 0x8664
 | 
			
		||||
	default:
 | 
			
		||||
		panic("invalid arch")
 | 
			
		||||
	}
 | 
			
		||||
	boxCoff.AddData("_bricebox_"+symname, sizedReader{bytes.NewReader(data)})
 | 
			
		||||
	boxCoff.AddData("_ericebox_"+symname, io.NewSectionReader(strings.NewReader("\000\000"), 0, 2)) // TODO: why? copied from rsrc, which copied it from as-generated
 | 
			
		||||
	boxCoff.Freeze()
 | 
			
		||||
	err := writeCoff(boxCoff, boxFilename+"_"+arch+".rice-box.syso")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("error writing %s coff/.syso: %v\n", arch, err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										150
									
								
								vendor/github.com/GeertJohan/go.rice/rice/find.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										150
									
								
								vendor/github.com/GeertJohan/go.rice/rice/find.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,150 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/ast"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"go/parser"
 | 
			
		||||
	"go/token"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func badArgument(fileset *token.FileSet, p token.Pos) {
 | 
			
		||||
	pos := fileset.Position(p)
 | 
			
		||||
	filename := pos.Filename
 | 
			
		||||
	base, err := os.Getwd()
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		rpath, perr := filepath.Rel(base, pos.Filename)
 | 
			
		||||
		if perr == nil {
 | 
			
		||||
			filename = rpath
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	msg := fmt.Sprintf("%s:%d: Error: found call to rice.FindBox, "+
 | 
			
		||||
		"but argument must be a string literal.\n", filename, pos.Line)
 | 
			
		||||
	fmt.Println(msg)
 | 
			
		||||
	os.Exit(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func findBoxes(pkg *build.Package) map[string]bool {
 | 
			
		||||
	// create map of boxes to embed
 | 
			
		||||
	var boxMap = make(map[string]bool)
 | 
			
		||||
 | 
			
		||||
	// create one list of files for this package
 | 
			
		||||
	filenames := make([]string, 0, len(pkg.GoFiles)+len(pkg.CgoFiles))
 | 
			
		||||
	filenames = append(filenames, pkg.GoFiles...)
 | 
			
		||||
	filenames = append(filenames, pkg.CgoFiles...)
 | 
			
		||||
 | 
			
		||||
	// loop over files, search for rice.FindBox(..) calls
 | 
			
		||||
	for _, filename := range filenames {
 | 
			
		||||
		// find full filepath
 | 
			
		||||
		fullpath := filepath.Join(pkg.Dir, filename)
 | 
			
		||||
		if strings.HasSuffix(filename, "rice-box.go") {
 | 
			
		||||
			// Ignore *.rice-box.go files
 | 
			
		||||
			verbosef("skipping file %q\n", fullpath)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		verbosef("scanning file %q\n", fullpath)
 | 
			
		||||
 | 
			
		||||
		fset := token.NewFileSet()
 | 
			
		||||
		f, err := parser.ParseFile(fset, fullpath, nil, 0)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println(err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var riceIsImported bool
 | 
			
		||||
		ricePkgName := "rice"
 | 
			
		||||
		for _, imp := range f.Imports {
 | 
			
		||||
			if strings.HasSuffix(imp.Path.Value, "go.rice\"") {
 | 
			
		||||
				if imp.Name != nil {
 | 
			
		||||
					ricePkgName = imp.Name.Name
 | 
			
		||||
				}
 | 
			
		||||
				riceIsImported = true
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if !riceIsImported {
 | 
			
		||||
			// Rice wasn't imported, so we won't find a box.
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if ricePkgName == "_" {
 | 
			
		||||
			// Rice pkg is unnamed, so we won't find a box.
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Inspect AST, looking for calls to (Must)?FindBox.
 | 
			
		||||
		// First parameter of the func must be a basic literal.
 | 
			
		||||
		// Identifiers won't be resolved.
 | 
			
		||||
		var nextIdentIsBoxFunc bool
 | 
			
		||||
		var nextBasicLitParamIsBoxName bool
 | 
			
		||||
		var boxCall token.Pos
 | 
			
		||||
		var variableToRemember string
 | 
			
		||||
		var validVariablesForBoxes map[string]bool = make(map[string]bool)
 | 
			
		||||
 | 
			
		||||
		ast.Inspect(f, func(node ast.Node) bool {
 | 
			
		||||
			if node == nil {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			switch x := node.(type) {
 | 
			
		||||
			// this case fixes the var := func() style assignments, not assignments to vars declared separately from the assignment.
 | 
			
		||||
			case *ast.AssignStmt:
 | 
			
		||||
				var assign = node.(*ast.AssignStmt)
 | 
			
		||||
				name, found := assign.Lhs[0].(*ast.Ident)
 | 
			
		||||
				if found {
 | 
			
		||||
					variableToRemember = name.Name
 | 
			
		||||
					composite, first := assign.Rhs[0].(*ast.CompositeLit)
 | 
			
		||||
					if first {
 | 
			
		||||
						riceSelector, second := composite.Type.(*ast.SelectorExpr)
 | 
			
		||||
 | 
			
		||||
						if second {
 | 
			
		||||
							callCorrect := riceSelector.Sel.Name == "Config"
 | 
			
		||||
							packageName, third := riceSelector.X.(*ast.Ident)
 | 
			
		||||
 | 
			
		||||
							if third && callCorrect && packageName.Name == ricePkgName {
 | 
			
		||||
								validVariablesForBoxes[name.Name] = true
 | 
			
		||||
								verbosef("\tfound variable, saving to scan for boxes: %q\n", name.Name)
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			case *ast.Ident:
 | 
			
		||||
				if nextIdentIsBoxFunc || ricePkgName == "." {
 | 
			
		||||
					nextIdentIsBoxFunc = false
 | 
			
		||||
					if x.Name == "FindBox" || x.Name == "MustFindBox" {
 | 
			
		||||
						nextBasicLitParamIsBoxName = true
 | 
			
		||||
						boxCall = x.Pos()
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					if x.Name == ricePkgName || validVariablesForBoxes[x.Name] {
 | 
			
		||||
						nextIdentIsBoxFunc = true
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			case *ast.BasicLit:
 | 
			
		||||
				if nextBasicLitParamIsBoxName {
 | 
			
		||||
					if x.Kind == token.STRING {
 | 
			
		||||
						nextBasicLitParamIsBoxName = false
 | 
			
		||||
						// trim "" or ``
 | 
			
		||||
						name := x.Value[1 : len(x.Value)-1]
 | 
			
		||||
						boxMap[name] = true
 | 
			
		||||
						verbosef("\tfound box %q\n", name)
 | 
			
		||||
					} else {
 | 
			
		||||
						badArgument(fset, boxCall)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			default:
 | 
			
		||||
				if nextIdentIsBoxFunc {
 | 
			
		||||
					nextIdentIsBoxFunc = false
 | 
			
		||||
				}
 | 
			
		||||
				if nextBasicLitParamIsBoxName {
 | 
			
		||||
					badArgument(fset, boxCall)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return true
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return boxMap
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								vendor/github.com/GeertJohan/go.rice/rice/flags.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								vendor/github.com/GeertJohan/go.rice/rice/flags.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,80 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	goflags "github.com/jessevdk/go-flags" // rename import to `goflags` (file scope) so we can use `var flags` (package scope)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// flags
 | 
			
		||||
var flags struct {
 | 
			
		||||
	Verbose     bool     `long:"verbose" short:"v" description:"Show verbose debug information"`
 | 
			
		||||
	ImportPaths []string `long:"import-path" short:"i" description:"Import path(s) to use. Using PWD when left empty. Specify multiple times for more import paths to append"`
 | 
			
		||||
 | 
			
		||||
	Append struct {
 | 
			
		||||
		Executable string `long:"exec" description:"Executable to append" required:"true"`
 | 
			
		||||
	} `command:"append"`
 | 
			
		||||
 | 
			
		||||
	EmbedGo   struct{} `command:"embed-go" alias:"embed"`
 | 
			
		||||
	EmbedSyso struct{} `command:"embed-syso"`
 | 
			
		||||
	Clean     struct{} `command:"clean"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// flags parser
 | 
			
		||||
var flagsParser *goflags.Parser
 | 
			
		||||
 | 
			
		||||
// initFlags parses the given flags.
 | 
			
		||||
// when the user asks for help (-h or --help): the application exists with status 0
 | 
			
		||||
// when unexpected flags is given: the application exits with status 1
 | 
			
		||||
func parseArguments() {
 | 
			
		||||
	// create flags parser in global var, for flagsParser.Active.Name (operation)
 | 
			
		||||
	flagsParser = goflags.NewParser(&flags, goflags.Default)
 | 
			
		||||
 | 
			
		||||
	// parse flags
 | 
			
		||||
	args, err := flagsParser.Parse()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// assert the err to be a flags.Error
 | 
			
		||||
		flagError := err.(*goflags.Error)
 | 
			
		||||
		if flagError.Type == goflags.ErrHelp {
 | 
			
		||||
			// user asked for help on flags.
 | 
			
		||||
			// program can exit successfully
 | 
			
		||||
			os.Exit(0)
 | 
			
		||||
		}
 | 
			
		||||
		if flagError.Type == goflags.ErrUnknownFlag {
 | 
			
		||||
			fmt.Println("Use --help to view available options.")
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		if flagError.Type == goflags.ErrRequired {
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Printf("Error parsing flags: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// error on left-over arguments
 | 
			
		||||
	if len(args) > 0 {
 | 
			
		||||
		fmt.Printf("Unexpected arguments: %s\nUse --help to view available options.", args)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// default ImportPath to pwd when not set
 | 
			
		||||
	if len(flags.ImportPaths) == 0 {
 | 
			
		||||
		pwd, err := os.Getwd()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error getting pwd: %s\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		verbosef("using pwd as import path\n")
 | 
			
		||||
		// find non-absolute path for this pwd
 | 
			
		||||
		pkg, err := build.ImportDir(pwd, build.FindOnly)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("error using current directory as import path: %s\n", err)
 | 
			
		||||
			os.Exit(1)
 | 
			
		||||
		}
 | 
			
		||||
		flags.ImportPaths = append(flags.ImportPaths, pkg.ImportPath)
 | 
			
		||||
		verbosef("using import paths: %s\n", flags.ImportPaths)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/github.com/GeertJohan/go.rice/rice/identifier.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/GeertJohan/go.rice/rice/identifier.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.incremental"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var identifierCount incremental.Uint64
 | 
			
		||||
 | 
			
		||||
func nextIdentifier() string {
 | 
			
		||||
	num := identifierCount.Next()
 | 
			
		||||
	return strconv.FormatUint(num, 36) // 0123456789abcdefghijklmnopqrstuvwxyz
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										68
									
								
								vendor/github.com/GeertJohan/go.rice/rice/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								vendor/github.com/GeertJohan/go.rice/rice/main.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,68 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/build"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// parser arguments
 | 
			
		||||
	parseArguments()
 | 
			
		||||
 | 
			
		||||
	// find package for path
 | 
			
		||||
	var pkgs []*build.Package
 | 
			
		||||
	for _, importPath := range flags.ImportPaths {
 | 
			
		||||
		pkg := pkgForPath(importPath)
 | 
			
		||||
		pkgs = append(pkgs, pkg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// switch on the operation to perform
 | 
			
		||||
	switch flagsParser.Active.Name {
 | 
			
		||||
	case "embed", "embed-go":
 | 
			
		||||
		for _, pkg := range pkgs {
 | 
			
		||||
			operationEmbedGo(pkg)
 | 
			
		||||
		}
 | 
			
		||||
	case "embed-syso":
 | 
			
		||||
		log.Println("WARNING: embedding .syso is experimental..")
 | 
			
		||||
		for _, pkg := range pkgs {
 | 
			
		||||
			operationEmbedSyso(pkg)
 | 
			
		||||
		}
 | 
			
		||||
	case "append":
 | 
			
		||||
		operationAppend(pkgs)
 | 
			
		||||
	case "clean":
 | 
			
		||||
		for _, pkg := range pkgs {
 | 
			
		||||
			operationClean(pkg)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// all done
 | 
			
		||||
	verbosef("\n")
 | 
			
		||||
	verbosef("rice finished successfully\n")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// helper function to get *build.Package for given path
 | 
			
		||||
func pkgForPath(path string) *build.Package {
 | 
			
		||||
	// get pwd for relative imports
 | 
			
		||||
	pwd, err := os.Getwd()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("error getting pwd (required for relative imports): %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// read full package information
 | 
			
		||||
	pkg, err := build.Import(path, pwd, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("error reading package: %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pkg
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func verbosef(format string, stuff ...interface{}) {
 | 
			
		||||
	if flags.Verbose {
 | 
			
		||||
		log.Printf(format, stuff...)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										98
									
								
								vendor/github.com/GeertJohan/go.rice/rice/templates.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										98
									
								
								vendor/github.com/GeertJohan/go.rice/rice/templates.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,98 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"text/template"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var tmplEmbeddedBox *template.Template
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	var err error
 | 
			
		||||
 | 
			
		||||
	// parse embedded box template
 | 
			
		||||
	tmplEmbeddedBox, err = template.New("embeddedBox").Parse(`package {{.Package}}
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
{{range .Boxes}}
 | 
			
		||||
func init() {
 | 
			
		||||
 | 
			
		||||
	// define files
 | 
			
		||||
	{{range .Files}}{{.Identifier}} := &embedded.EmbeddedFile{
 | 
			
		||||
		Filename:    ` + "`" + `{{.FileName}}` + "`" + `,
 | 
			
		||||
		FileModTime: time.Unix({{.ModTime}}, 0),
 | 
			
		||||
		Content:     string({{.Content | printf "%q"}}), 
 | 
			
		||||
	}
 | 
			
		||||
	{{end}}
 | 
			
		||||
 | 
			
		||||
	// define dirs
 | 
			
		||||
	{{range .Dirs}}{{.Identifier}} := &embedded.EmbeddedDir{
 | 
			
		||||
		Filename:    ` + "`" + `{{.FileName}}` + "`" + `,
 | 
			
		||||
		DirModTime: time.Unix({{.ModTime}}, 0),
 | 
			
		||||
		ChildFiles:  []*embedded.EmbeddedFile{
 | 
			
		||||
			{{range .ChildFiles}}{{.Identifier}}, // {{.FileName}}
 | 
			
		||||
			{{end}}
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	{{end}}
 | 
			
		||||
 | 
			
		||||
	// link ChildDirs
 | 
			
		||||
	{{range .Dirs}}{{.Identifier}}.ChildDirs = []*embedded.EmbeddedDir{
 | 
			
		||||
		{{range .ChildDirs}}{{.Identifier}}, // {{.FileName}}
 | 
			
		||||
		{{end}}
 | 
			
		||||
	}
 | 
			
		||||
	{{end}}
 | 
			
		||||
 | 
			
		||||
	// register embeddedBox
 | 
			
		||||
	embedded.RegisterEmbeddedBox(` + "`" + `{{.BoxName}}` + "`" + `, &embedded.EmbeddedBox{
 | 
			
		||||
		Name: ` + "`" + `{{.BoxName}}` + "`" + `,
 | 
			
		||||
		Time: time.Unix({{.UnixNow}}, 0),
 | 
			
		||||
		Dirs: map[string]*embedded.EmbeddedDir{
 | 
			
		||||
			{{range .Dirs}}"{{.FileName}}": {{.Identifier}},
 | 
			
		||||
			{{end}}
 | 
			
		||||
		},
 | 
			
		||||
		Files: map[string]*embedded.EmbeddedFile{
 | 
			
		||||
			{{range .Files}}"{{.FileName}}": {{.Identifier}},
 | 
			
		||||
			{{end}}
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
{{end}}`)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("error parsing embedded box template: %s\n", err)
 | 
			
		||||
		os.Exit(-1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type embedFileDataType struct {
 | 
			
		||||
	Package string
 | 
			
		||||
	Boxes   []*boxDataType
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type boxDataType struct {
 | 
			
		||||
	BoxName string
 | 
			
		||||
	UnixNow int64
 | 
			
		||||
	Files   []*fileDataType
 | 
			
		||||
	Dirs    map[string]*dirDataType
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type fileDataType struct {
 | 
			
		||||
	Identifier string
 | 
			
		||||
	FileName   string
 | 
			
		||||
	Content    []byte
 | 
			
		||||
	ModTime    int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type dirDataType struct {
 | 
			
		||||
	Identifier string
 | 
			
		||||
	FileName   string
 | 
			
		||||
	Content    []byte
 | 
			
		||||
	ModTime    int64
 | 
			
		||||
	ChildDirs  []*dirDataType
 | 
			
		||||
	ChildFiles []*fileDataType
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/GeertJohan/go.rice/rice/util.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/GeertJohan/go.rice/rice/util.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,22 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// randomString generates a pseudo-random alpha-numeric string with given length.
 | 
			
		||||
func randomString(length int) string {
 | 
			
		||||
	rand.Seed(time.Now().UnixNano())
 | 
			
		||||
	k := make([]rune, length)
 | 
			
		||||
	for i := 0; i < length; i++ {
 | 
			
		||||
		c := rand.Intn(35)
 | 
			
		||||
		if c < 10 {
 | 
			
		||||
			c += 48 // numbers (0-9) (0+48 == 48 == '0', 9+48 == 57 == '9')
 | 
			
		||||
		} else {
 | 
			
		||||
			c += 87 // lower case alphabets (a-z) (10+87 == 97 == 'a', 35+87 == 122 = 'z')
 | 
			
		||||
		}
 | 
			
		||||
		k[i] = rune(c)
 | 
			
		||||
	}
 | 
			
		||||
	return string(k)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								vendor/github.com/GeertJohan/go.rice/rice/writecoff.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/GeertJohan/go.rice/rice/writecoff.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,42 +0,0 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"reflect"
 | 
			
		||||
 | 
			
		||||
	"github.com/akavel/rsrc/binutil"
 | 
			
		||||
	"github.com/akavel/rsrc/coff"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// copied from github.com/akavel/rsrc
 | 
			
		||||
// LICENSE: MIT
 | 
			
		||||
// Copyright 2013-2014 The rsrc Authors. (https://github.com/akavel/rsrc/blob/master/AUTHORS)
 | 
			
		||||
func writeCoff(coff *coff.Coff, fnameout string) error {
 | 
			
		||||
	out, err := os.Create(fnameout)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer out.Close()
 | 
			
		||||
	w := binutil.Writer{W: out}
 | 
			
		||||
 | 
			
		||||
	// write the resulting file to disk
 | 
			
		||||
	binutil.Walk(coff, func(v reflect.Value, path string) error {
 | 
			
		||||
		if binutil.Plain(v.Kind()) {
 | 
			
		||||
			w.WriteLE(v.Interface())
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		vv, ok := v.Interface().(binutil.SizedReader)
 | 
			
		||||
		if ok {
 | 
			
		||||
			w.WriteFromSized(vv)
 | 
			
		||||
			return binutil.WALK_SKIP
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	if w.Err != nil {
 | 
			
		||||
		return fmt.Errorf("Error writing output file: %s", w.Err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/GeertJohan/go.rice/sort.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/GeertJohan/go.rice/sort.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import "os"
 | 
			
		||||
 | 
			
		||||
// SortByName allows an array of os.FileInfo objects
 | 
			
		||||
// to be easily sorted by filename using sort.Sort(SortByName(array))
 | 
			
		||||
type SortByName []os.FileInfo
 | 
			
		||||
 | 
			
		||||
func (f SortByName) Len() int           { return len(f) }
 | 
			
		||||
func (f SortByName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }
 | 
			
		||||
func (f SortByName) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }
 | 
			
		||||
 | 
			
		||||
// SortByModified allows an array of os.FileInfo objects
 | 
			
		||||
// to be easily sorted by modified date using sort.Sort(SortByModified(array))
 | 
			
		||||
type SortByModified []os.FileInfo
 | 
			
		||||
 | 
			
		||||
func (f SortByModified) Len() int           { return len(f) }
 | 
			
		||||
func (f SortByModified) Less(i, j int) bool { return f[i].ModTime().Unix() > f[j].ModTime().Unix() }
 | 
			
		||||
func (f SortByModified) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }
 | 
			
		||||
							
								
								
									
										252
									
								
								vendor/github.com/GeertJohan/go.rice/virtual.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										252
									
								
								vendor/github.com/GeertJohan/go.rice/virtual.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,252 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"sort"
 | 
			
		||||
 | 
			
		||||
	"github.com/GeertJohan/go.rice/embedded"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//++ TODO: IDEA: merge virtualFile and virtualDir, this decreases work done by rice.File
 | 
			
		||||
 | 
			
		||||
// Error indicating some function is not implemented yet (but available to satisfy an interface)
 | 
			
		||||
var ErrNotImplemented = errors.New("not implemented yet")
 | 
			
		||||
 | 
			
		||||
// virtualFile is a 'stateful' virtual file.
 | 
			
		||||
// virtualFile wraps an *EmbeddedFile for a call to Box.Open() and virtualizes 'read cursor' (offset) and 'closing'.
 | 
			
		||||
// virtualFile is only internally visible and should be exposed through rice.File
 | 
			
		||||
type virtualFile struct {
 | 
			
		||||
	*embedded.EmbeddedFile       // the actual embedded file, embedded to obtain methods
 | 
			
		||||
	offset                 int64 // read position on the virtual file
 | 
			
		||||
	closed                 bool  // closed when true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// create a new virtualFile for given EmbeddedFile
 | 
			
		||||
func newVirtualFile(ef *embedded.EmbeddedFile) *virtualFile {
 | 
			
		||||
	vf := &virtualFile{
 | 
			
		||||
		EmbeddedFile: ef,
 | 
			
		||||
		offset:       0,
 | 
			
		||||
		closed:       false,
 | 
			
		||||
	}
 | 
			
		||||
	return vf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//++ TODO check for nil pointers in all these methods. When so: return os.PathError with Err: os.ErrInvalid
 | 
			
		||||
 | 
			
		||||
func (vf *virtualFile) close() error {
 | 
			
		||||
	if vf.closed {
 | 
			
		||||
		return &os.PathError{
 | 
			
		||||
			Op:   "close",
 | 
			
		||||
			Path: vf.EmbeddedFile.Filename,
 | 
			
		||||
			Err:  errors.New("already closed"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	vf.EmbeddedFile = nil
 | 
			
		||||
	vf.closed = true
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vf *virtualFile) stat() (os.FileInfo, error) {
 | 
			
		||||
	if vf.closed {
 | 
			
		||||
		return nil, &os.PathError{
 | 
			
		||||
			Op:   "stat",
 | 
			
		||||
			Path: vf.EmbeddedFile.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return (*embeddedFileInfo)(vf.EmbeddedFile), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vf *virtualFile) readdir(count int) ([]os.FileInfo, error) {
 | 
			
		||||
	if vf.closed {
 | 
			
		||||
		return nil, &os.PathError{
 | 
			
		||||
			Op:   "readdir",
 | 
			
		||||
			Path: vf.EmbeddedFile.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	//TODO: return proper error for a readdir() call on a file
 | 
			
		||||
	return nil, ErrNotImplemented
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vf *virtualFile) read(bts []byte) (int, error) {
 | 
			
		||||
	if vf.closed {
 | 
			
		||||
		return 0, &os.PathError{
 | 
			
		||||
			Op:   "read",
 | 
			
		||||
			Path: vf.EmbeddedFile.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	end := vf.offset + int64(len(bts))
 | 
			
		||||
 | 
			
		||||
	if end >= int64(len(vf.Content)) {
 | 
			
		||||
		// end of file, so return what we have + EOF
 | 
			
		||||
		n := copy(bts, vf.Content[vf.offset:])
 | 
			
		||||
		vf.offset = 0
 | 
			
		||||
		return n, io.EOF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	n := copy(bts, vf.Content[vf.offset:end])
 | 
			
		||||
	vf.offset += int64(n)
 | 
			
		||||
	return n, nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vf *virtualFile) seek(offset int64, whence int) (int64, error) {
 | 
			
		||||
	if vf.closed {
 | 
			
		||||
		return 0, &os.PathError{
 | 
			
		||||
			Op:   "seek",
 | 
			
		||||
			Path: vf.EmbeddedFile.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var e error
 | 
			
		||||
 | 
			
		||||
	//++ TODO: check if this is correct implementation for seek
 | 
			
		||||
	switch whence {
 | 
			
		||||
	case os.SEEK_SET:
 | 
			
		||||
		//++ check if new offset isn't out of bounds, set e when it is, then break out of switch
 | 
			
		||||
		vf.offset = offset
 | 
			
		||||
	case os.SEEK_CUR:
 | 
			
		||||
		//++ check if new offset isn't out of bounds, set e when it is, then break out of switch
 | 
			
		||||
		vf.offset += offset
 | 
			
		||||
	case os.SEEK_END:
 | 
			
		||||
		//++ check if new offset isn't out of bounds, set e when it is, then break out of switch
 | 
			
		||||
		vf.offset = int64(len(vf.EmbeddedFile.Content)) - offset
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if e != nil {
 | 
			
		||||
		return 0, &os.PathError{
 | 
			
		||||
			Op:   "seek",
 | 
			
		||||
			Path: vf.Filename,
 | 
			
		||||
			Err:  e,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return vf.offset, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// virtualDir is a 'stateful' virtual directory.
 | 
			
		||||
// virtualDir wraps an *EmbeddedDir for a call to Box.Open() and virtualizes 'closing'.
 | 
			
		||||
// virtualDir is only internally visible and should be exposed through rice.File
 | 
			
		||||
type virtualDir struct {
 | 
			
		||||
	*embedded.EmbeddedDir
 | 
			
		||||
	offset int // readdir position on the directory
 | 
			
		||||
	closed bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// create a new virtualDir for given EmbeddedDir
 | 
			
		||||
func newVirtualDir(ed *embedded.EmbeddedDir) *virtualDir {
 | 
			
		||||
	vd := &virtualDir{
 | 
			
		||||
		EmbeddedDir: ed,
 | 
			
		||||
		offset:      0,
 | 
			
		||||
		closed:      false,
 | 
			
		||||
	}
 | 
			
		||||
	return vd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vd *virtualDir) close() error {
 | 
			
		||||
	//++ TODO: needs sync mutex?
 | 
			
		||||
	if vd.closed {
 | 
			
		||||
		return &os.PathError{
 | 
			
		||||
			Op:   "close",
 | 
			
		||||
			Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
			Err:  errors.New("already closed"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	vd.closed = true
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vd *virtualDir) stat() (os.FileInfo, error) {
 | 
			
		||||
	if vd.closed {
 | 
			
		||||
		return nil, &os.PathError{
 | 
			
		||||
			Op:   "stat",
 | 
			
		||||
			Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return (*embeddedDirInfo)(vd.EmbeddedDir), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vd *virtualDir) readdir(n int) (fi []os.FileInfo, err error) {
 | 
			
		||||
 | 
			
		||||
	if vd.closed {
 | 
			
		||||
		return nil, &os.PathError{
 | 
			
		||||
			Op:   "readdir",
 | 
			
		||||
			Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Build up the array of our contents
 | 
			
		||||
	var files []os.FileInfo
 | 
			
		||||
 | 
			
		||||
	// Add the child directories
 | 
			
		||||
	for _, child := range vd.ChildDirs {
 | 
			
		||||
		child.Filename = filepath.Base(child.Filename)
 | 
			
		||||
		files = append(files, (*embeddedDirInfo)(child))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add the child files
 | 
			
		||||
	for _, child := range vd.ChildFiles {
 | 
			
		||||
		child.Filename = filepath.Base(child.Filename)
 | 
			
		||||
		files = append(files, (*embeddedFileInfo)(child))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Sort it by filename (lexical order)
 | 
			
		||||
	sort.Sort(SortByName(files))
 | 
			
		||||
 | 
			
		||||
	// Return all contents if that's what is requested
 | 
			
		||||
	if n <= 0 {
 | 
			
		||||
		vd.offset = 0
 | 
			
		||||
		return files, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// If user has requested past the end of our list
 | 
			
		||||
	// return what we can and send an EOF
 | 
			
		||||
	if vd.offset+n >= len(files) {
 | 
			
		||||
		offset := vd.offset
 | 
			
		||||
		vd.offset = 0
 | 
			
		||||
		return files[offset:], io.EOF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	offset := vd.offset
 | 
			
		||||
	vd.offset += n
 | 
			
		||||
	return files[offset : offset+n], nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vd *virtualDir) read(bts []byte) (int, error) {
 | 
			
		||||
	if vd.closed {
 | 
			
		||||
		return 0, &os.PathError{
 | 
			
		||||
			Op:   "read",
 | 
			
		||||
			Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 0, &os.PathError{
 | 
			
		||||
		Op:   "read",
 | 
			
		||||
		Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
		Err:  errors.New("is a directory"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (vd *virtualDir) seek(offset int64, whence int) (int64, error) {
 | 
			
		||||
	if vd.closed {
 | 
			
		||||
		return 0, &os.PathError{
 | 
			
		||||
			Op:   "seek",
 | 
			
		||||
			Path: vd.EmbeddedDir.Filename,
 | 
			
		||||
			Err:  errors.New("bad file descriptor"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 0, &os.PathError{
 | 
			
		||||
		Op:   "seek",
 | 
			
		||||
		Path: vd.Filename,
 | 
			
		||||
		Err:  errors.New("is a directory"),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										122
									
								
								vendor/github.com/GeertJohan/go.rice/walk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/GeertJohan/go.rice/walk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,122 +0,0 @@
 | 
			
		||||
package rice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Walk is like filepath.Walk()
 | 
			
		||||
// Visit http://golang.org/pkg/path/filepath/#Walk for more information
 | 
			
		||||
func (b *Box) Walk(path string, walkFn filepath.WalkFunc) error {
 | 
			
		||||
 | 
			
		||||
	pathFile, err := b.Open(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer pathFile.Close()
 | 
			
		||||
 | 
			
		||||
	pathInfo, err := pathFile.Stat()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if b.IsAppended() || b.IsEmbedded() {
 | 
			
		||||
		return b.walk(path, pathInfo, walkFn)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// We don't have any embedded or appended box so use live filesystem mode
 | 
			
		||||
	return filepath.Walk(b.absolutePath+string(os.PathSeparator)+path, func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
 | 
			
		||||
		// Strip out the box name from the returned paths
 | 
			
		||||
		path = strings.TrimPrefix(path, b.absolutePath+string(os.PathSeparator))
 | 
			
		||||
		return walkFn(path, info, err)
 | 
			
		||||
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// walk recursively descends path.
 | 
			
		||||
// See walk() in $GOROOT/src/pkg/path/filepath/path.go
 | 
			
		||||
func (b *Box) walk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
 | 
			
		||||
 | 
			
		||||
	err := walkFn(path, info, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if info.IsDir() && err == filepath.SkipDir {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !info.IsDir() {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	names, err := b.readDirNames(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return walkFn(path, info, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, name := range names {
 | 
			
		||||
 | 
			
		||||
		filename := filepath.Join(path, name)
 | 
			
		||||
		fileObject, err := b.Open(filename)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		defer fileObject.Close()
 | 
			
		||||
 | 
			
		||||
		fileInfo, err := fileObject.Stat()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			err = b.walk(filename, fileInfo, walkFn)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				if !fileInfo.IsDir() || err != filepath.SkipDir {
 | 
			
		||||
					return err
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// readDirNames reads the directory named by path and returns a sorted list of directory entries.
 | 
			
		||||
// See readDirNames() in $GOROOT/pkg/path/filepath/path.go
 | 
			
		||||
func (b *Box) readDirNames(path string) ([]string, error) {
 | 
			
		||||
 | 
			
		||||
	f, err := b.Open(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer f.Close()
 | 
			
		||||
 | 
			
		||||
	stat, err := f.Stat()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !stat.IsDir() {
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	infos, err := f.Readdir(0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var names []string
 | 
			
		||||
 | 
			
		||||
	for _, info := range infos {
 | 
			
		||||
		names = append(names, info.Name())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sort.Strings(names)
 | 
			
		||||
	return names, nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/Philipp15b/go-steam/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/Philipp15b/go-steam/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
 | 
			
		||||
*.o
 | 
			
		||||
*.a
 | 
			
		||||
*.so
 | 
			
		||||
 | 
			
		||||
# Folders
 | 
			
		||||
_obj
 | 
			
		||||
_test
 | 
			
		||||
 | 
			
		||||
# Architecture specific extensions/prefixes
 | 
			
		||||
*.[568vq]
 | 
			
		||||
[568vq].out
 | 
			
		||||
 | 
			
		||||
*.cgo1.go
 | 
			
		||||
*.cgo2.c
 | 
			
		||||
_cgo_defun.c
 | 
			
		||||
_cgo_gotypes.go
 | 
			
		||||
_cgo_export.*
 | 
			
		||||
 | 
			
		||||
_testmain.go
 | 
			
		||||
 | 
			
		||||
*.exe
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/Philipp15b/go-steam/.gitmodules
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/Philipp15b/go-steam/.gitmodules
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
[submodule "generator/SteamKit"]
 | 
			
		||||
	path = generator/SteamKit
 | 
			
		||||
	url = https://github.com/Philipp15b/SteamKit.git
 | 
			
		||||
							
								
								
									
										64
									
								
								vendor/github.com/Philipp15b/go-steam/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								vendor/github.com/Philipp15b/go-steam/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
# Steam for Go
 | 
			
		||||
 | 
			
		||||
This library implements Steam's protocol to allow automation of different actions on Steam without running an actual Steam client. It is based on [SteamKit2](https://github.com/SteamRE/SteamKit), a .NET library.
 | 
			
		||||
 | 
			
		||||
In addition, it contains APIs to Steam Community features, like trade offers and inventories.
 | 
			
		||||
 | 
			
		||||
Some of the currently implemented features:
 | 
			
		||||
 | 
			
		||||
  * Trading and trade offers, including inventories and notifications
 | 
			
		||||
  * Friend and group management
 | 
			
		||||
  * Chatting with friends
 | 
			
		||||
  * Persona states (online, offline, looking to trade, etc.)
 | 
			
		||||
  * SteamGuard with two-factor authentication
 | 
			
		||||
  * Team Fortress 2: Crafting, moving, naming and deleting items
 | 
			
		||||
 | 
			
		||||
If this is useful to you, there's also the [go-steamapi](https://github.com/Philipp15b/go-steamapi) package that wraps some of the official Steam Web API's types.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
    go get github.com/Philipp15b/go-steam
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
You can view the documentation with the [`godoc`](http://golang.org/cmd/godoc) tool or
 | 
			
		||||
[online on godoc.org](http://godoc.org/github.com/Philipp15b/go-steam).
 | 
			
		||||
 | 
			
		||||
You should also take a look at the following sub-packages:
 | 
			
		||||
 | 
			
		||||
  * [`gsbot`](http://godoc.org/github.com/Philipp15b/go-steam/gsbot) utilites that make writing bots easier
 | 
			
		||||
  * [example bot](http://godoc.org/github.com/Philipp15b/go-steam/gsbot/gsbot) and [its source code](https://github.com/Philipp15b/go-steam/blob/master/gsbot/gsbot/gsbot.go)
 | 
			
		||||
  * [`trade`](http://godoc.org/github.com/Philipp15b/go-steam/trade) for trading
 | 
			
		||||
  * [`tradeoffer`](http://godoc.org/github.com/Philipp15b/go-steam/tradeoffer) for trade offers
 | 
			
		||||
  * [`economy/inventory`](http://godoc.org/github.com/Philipp15b/go-steam/economy/inventory) for inventories
 | 
			
		||||
  * [`tf2`](http://godoc.org/github.com/Philipp15b/go-steam/tf2) for Team Fortress 2 related things
 | 
			
		||||
 | 
			
		||||
## Working with go-steam
 | 
			
		||||
 | 
			
		||||
Whether you want to develop your own Steam bot or directly work on go-steam itself, there are are few things to know.
 | 
			
		||||
 | 
			
		||||
 * If something is not working, check first if the same operation works (under the same conditions!) in the Steam client on that account. Maybe there's something go-steam doesn't handle correctly or you're missing a warning that's not obviously shown in go-steam. This is particularly important when working with trading since there are [restrictions](https://support.steampowered.com/kb_article.php?ref=1047-edfm-2932), for example newly authorized devices will not be able to trade for seven days.
 | 
			
		||||
 * Since Steam does not maintain a public API for most of the things go-steam implements, you can expect that sometimes things break randomly. Especially the `trade` and `tradeoffer` packages have been affected in the past.
 | 
			
		||||
 * Always gather as much information as possible. When you file an issue, be as precise and complete as you can. This makes debugging way easier.
 | 
			
		||||
 * If you haven't noticed yet, expect to find lots of things out yourself. Debugging can be complicated and Steam's internals are too.
 | 
			
		||||
 * Sometimes things break and other [SteamKit ports](https://github.com/SteamRE/SteamKit/wiki/Ports) are fixed already. Maybe take a look what people are saying over there? There's also the [SteamKit IRC channel](https://github.com/SteamRE/SteamKit/wiki#contact).
 | 
			
		||||
 | 
			
		||||
## Updating go-steam to a new SteamKit version
 | 
			
		||||
 | 
			
		||||
To update go-steam to a new version of SteamKit, do the following:
 | 
			
		||||
 | 
			
		||||
	go get github.com/golang/protobuf/protoc-gen-go/
 | 
			
		||||
    git submodule init && git submodule update
 | 
			
		||||
    cd generator
 | 
			
		||||
    go run generator.go clean proto steamlang
 | 
			
		||||
 | 
			
		||||
Make sure that `$GOPATH/bin` / `protoc-gen-go` is in your `$PATH`. You'll also need [`protoc`](https://developers.google.com/protocol-buffers/docs/downloads), the protocol buffer compiler. At the moment, we use Protocol Buffers 2.6.1 with `proco-gen-go`-[2402d76](https://github.com/golang/protobuf/tree/2402d76f3d41f928c7902a765dfc872356dd3aad).
 | 
			
		||||
 | 
			
		||||
To compile the Steam Language files, you also need the [.NET Framework](https://www.microsoft.com/net/downloads)
 | 
			
		||||
on Windows or [mono](http://www.go-mono.com/mono-downloads/download.html) on other operating systems.
 | 
			
		||||
 | 
			
		||||
Apply the protocol changes where necessary.
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
Steam for Go is licensed under the New BSD License. More information can be found in LICENSE.txt.
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/community/community.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/community/community.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,35 +0,0 @@
 | 
			
		||||
package community
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/http/cookiejar"
 | 
			
		||||
	"net/url"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const cookiePath = "https://steamcommunity.com/"
 | 
			
		||||
 | 
			
		||||
func SetCookies(client *http.Client, sessionId, steamLogin, steamLoginSecure string) {
 | 
			
		||||
	if client.Jar == nil {
 | 
			
		||||
		client.Jar, _ = cookiejar.New(new(cookiejar.Options))
 | 
			
		||||
	}
 | 
			
		||||
	base, err := url.Parse(cookiePath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	client.Jar.SetCookies(base, []*http.Cookie{
 | 
			
		||||
		// It seems that, for some reason, Steam tries to URL-decode the cookie.
 | 
			
		||||
		&http.Cookie{
 | 
			
		||||
			Name:  "sessionid",
 | 
			
		||||
			Value: url.QueryEscape(sessionId),
 | 
			
		||||
		},
 | 
			
		||||
		// steamLogin is already URL-encoded.
 | 
			
		||||
		&http.Cookie{
 | 
			
		||||
			Name:  "steamLogin",
 | 
			
		||||
			Value: steamLogin,
 | 
			
		||||
		},
 | 
			
		||||
		&http.Cookie{
 | 
			
		||||
			Name:  "steamLoginSecure",
 | 
			
		||||
			Value: steamLoginSecure,
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3651
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3651
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18413
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18413
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6123
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client_fantasy.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6123
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client_fantasy.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10997
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_common.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10997
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_common.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4441
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4441
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1825
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1825
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										579
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										579
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,579 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: gcsystemmsgs.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package protobuf
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
// This is a compile-time assertion to ensure that this generated file
 | 
			
		||||
// is compatible with the proto package protobuf is being compiled against.
 | 
			
		||||
const _ = proto.ProtoPackageIsVersion1
 | 
			
		||||
 | 
			
		||||
type EGCSystemMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgInvalid                           EGCSystemMsg = 0
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMulti                             EGCSystemMsg = 1
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGenericReply                      EGCSystemMsg = 10
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemBase                        EGCSystemMsg = 50
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAchievementAwarded                EGCSystemMsg = 51
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgConCommand                        EGCSystemMsg = 52
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStartPlaying                      EGCSystemMsg = 53
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStopPlaying                       EGCSystemMsg = 54
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStartGameserver                   EGCSystemMsg = 55
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStopGameserver                    EGCSystemMsg = 56
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWGRequest                         EGCSystemMsg = 57
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWGResponse                        EGCSystemMsg = 58
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchema            EGCSystemMsg = 59
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchemaResponse    EGCSystemMsg = 60
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStatsDEPRECATED            EGCSystemMsg = 61
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStatsResponse              EGCSystemMsg = 62
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAppInfoUpdated                    EGCSystemMsg = 63
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgValidateSession                   EGCSystemMsg = 64
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgValidateSessionResponse           EGCSystemMsg = 65
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgLookupAccountFromInput            EGCSystemMsg = 66
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendHTTPRequest                   EGCSystemMsg = 67
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendHTTPRequestResponse           EGCSystemMsg = 68
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgPreTestSetup                      EGCSystemMsg = 69
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgRecordSupportAction               EGCSystemMsg = 70
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetails_DEPRECATED      EGCSystemMsg = 71
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgReceiveInterAppMessage            EGCSystemMsg = 73
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgFindAccounts                      EGCSystemMsg = 74
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgPostAlert                         EGCSystemMsg = 75
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetLicenses                       EGCSystemMsg = 76
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStats                      EGCSystemMsg = 77
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetCommands                       EGCSystemMsg = 78
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetCommandsResponse               EGCSystemMsg = 79
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAddFreeLicense                    EGCSystemMsg = 80
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAddFreeLicenseResponse            EGCSystemMsg = 81
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPLocation                     EGCSystemMsg = 82
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPLocationResponse             EGCSystemMsg = 83
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemStatsSchema                 EGCSystemMsg = 84
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetSystemStats                    EGCSystemMsg = 85
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetSystemStatsResponse            EGCSystemMsg = 86
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendEmail                         EGCSystemMsg = 87
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendEmailResponse                 EGCSystemMsg = 88
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetEmailTemplate                  EGCSystemMsg = 89
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetEmailTemplateResponse          EGCSystemMsg = 90
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGrantGuestPass                    EGCSystemMsg = 91
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGrantGuestPassResponse            EGCSystemMsg = 92
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetails                 EGCSystemMsg = 93
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetailsResponse         EGCSystemMsg = 94
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPersonaNames                   EGCSystemMsg = 95
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPersonaNamesResponse           EGCSystemMsg = 96
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMultiplexMsg                      EGCSystemMsg = 97
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIRegisterInterfaces          EGCSystemMsg = 101
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequest                  EGCSystemMsg = 102
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequestHttpResponse      EGCSystemMsg = 104
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequestForwardResponse   EGCSystemMsg = 105
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedGet                      EGCSystemMsg = 200
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedGetResponse              EGCSystemMsg = 201
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedSet                      EGCSystemMsg = 202
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedDelete                   EGCSystemMsg = 203
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedStats                    EGCSystemMsg = 204
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedStatsResponse            EGCSystemMsg = 205
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSQLStats                          EGCSystemMsg = 210
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSQLStatsResponse                  EGCSystemMsg = 211
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetDirectory                EGCSystemMsg = 220
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetDirectoryResponse        EGCSystemMsg = 221
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRouting            EGCSystemMsg = 222
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRoutingResponse    EGCSystemMsg = 223
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRouting         EGCSystemMsg = 224
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRoutingResponse EGCSystemMsg = 225
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSetOptions                        EGCSystemMsg = 226
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSetOptionsResponse                EGCSystemMsg = 227
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemBase2                       EGCSystemMsg = 500
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatus            EGCSystemMsg = 501
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatusResponse    EGCSystemMsg = 502
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgUpdateSession                     EGCSystemMsg = 503
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGCAccountVacStatusChange          EGCSystemMsg = 504
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgCheckFriendship                   EGCSystemMsg = 505
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgCheckFriendshipResponse           EGCSystemMsg = 506
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPartnerAccountLink             EGCSystemMsg = 507
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPartnerAccountLinkResponse     EGCSystemMsg = 508
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgVSReportedSuspiciousActivity      EGCSystemMsg = 509
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgDPPartnerMicroTxns                EGCSystemMsg = 512
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgDPPartnerMicroTxnsResponse        EGCSystemMsg = 513
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPASN                          EGCSystemMsg = 514
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPASNResponse                  EGCSystemMsg = 515
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAppFriendsList                 EGCSystemMsg = 516
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAppFriendsListResponse         EGCSystemMsg = 517
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCSystemMsg_name = map[int32]string{
 | 
			
		||||
	0:   "k_EGCMsgInvalid",
 | 
			
		||||
	1:   "k_EGCMsgMulti",
 | 
			
		||||
	10:  "k_EGCMsgGenericReply",
 | 
			
		||||
	50:  "k_EGCMsgSystemBase",
 | 
			
		||||
	51:  "k_EGCMsgAchievementAwarded",
 | 
			
		||||
	52:  "k_EGCMsgConCommand",
 | 
			
		||||
	53:  "k_EGCMsgStartPlaying",
 | 
			
		||||
	54:  "k_EGCMsgStopPlaying",
 | 
			
		||||
	55:  "k_EGCMsgStartGameserver",
 | 
			
		||||
	56:  "k_EGCMsgStopGameserver",
 | 
			
		||||
	57:  "k_EGCMsgWGRequest",
 | 
			
		||||
	58:  "k_EGCMsgWGResponse",
 | 
			
		||||
	59:  "k_EGCMsgGetUserGameStatsSchema",
 | 
			
		||||
	60:  "k_EGCMsgGetUserGameStatsSchemaResponse",
 | 
			
		||||
	61:  "k_EGCMsgGetUserStatsDEPRECATED",
 | 
			
		||||
	62:  "k_EGCMsgGetUserStatsResponse",
 | 
			
		||||
	63:  "k_EGCMsgAppInfoUpdated",
 | 
			
		||||
	64:  "k_EGCMsgValidateSession",
 | 
			
		||||
	65:  "k_EGCMsgValidateSessionResponse",
 | 
			
		||||
	66:  "k_EGCMsgLookupAccountFromInput",
 | 
			
		||||
	67:  "k_EGCMsgSendHTTPRequest",
 | 
			
		||||
	68:  "k_EGCMsgSendHTTPRequestResponse",
 | 
			
		||||
	69:  "k_EGCMsgPreTestSetup",
 | 
			
		||||
	70:  "k_EGCMsgRecordSupportAction",
 | 
			
		||||
	71:  "k_EGCMsgGetAccountDetails_DEPRECATED",
 | 
			
		||||
	73:  "k_EGCMsgReceiveInterAppMessage",
 | 
			
		||||
	74:  "k_EGCMsgFindAccounts",
 | 
			
		||||
	75:  "k_EGCMsgPostAlert",
 | 
			
		||||
	76:  "k_EGCMsgGetLicenses",
 | 
			
		||||
	77:  "k_EGCMsgGetUserStats",
 | 
			
		||||
	78:  "k_EGCMsgGetCommands",
 | 
			
		||||
	79:  "k_EGCMsgGetCommandsResponse",
 | 
			
		||||
	80:  "k_EGCMsgAddFreeLicense",
 | 
			
		||||
	81:  "k_EGCMsgAddFreeLicenseResponse",
 | 
			
		||||
	82:  "k_EGCMsgGetIPLocation",
 | 
			
		||||
	83:  "k_EGCMsgGetIPLocationResponse",
 | 
			
		||||
	84:  "k_EGCMsgSystemStatsSchema",
 | 
			
		||||
	85:  "k_EGCMsgGetSystemStats",
 | 
			
		||||
	86:  "k_EGCMsgGetSystemStatsResponse",
 | 
			
		||||
	87:  "k_EGCMsgSendEmail",
 | 
			
		||||
	88:  "k_EGCMsgSendEmailResponse",
 | 
			
		||||
	89:  "k_EGCMsgGetEmailTemplate",
 | 
			
		||||
	90:  "k_EGCMsgGetEmailTemplateResponse",
 | 
			
		||||
	91:  "k_EGCMsgGrantGuestPass",
 | 
			
		||||
	92:  "k_EGCMsgGrantGuestPassResponse",
 | 
			
		||||
	93:  "k_EGCMsgGetAccountDetails",
 | 
			
		||||
	94:  "k_EGCMsgGetAccountDetailsResponse",
 | 
			
		||||
	95:  "k_EGCMsgGetPersonaNames",
 | 
			
		||||
	96:  "k_EGCMsgGetPersonaNamesResponse",
 | 
			
		||||
	97:  "k_EGCMsgMultiplexMsg",
 | 
			
		||||
	101: "k_EGCMsgWebAPIRegisterInterfaces",
 | 
			
		||||
	102: "k_EGCMsgWebAPIJobRequest",
 | 
			
		||||
	104: "k_EGCMsgWebAPIJobRequestHttpResponse",
 | 
			
		||||
	105: "k_EGCMsgWebAPIJobRequestForwardResponse",
 | 
			
		||||
	200: "k_EGCMsgMemCachedGet",
 | 
			
		||||
	201: "k_EGCMsgMemCachedGetResponse",
 | 
			
		||||
	202: "k_EGCMsgMemCachedSet",
 | 
			
		||||
	203: "k_EGCMsgMemCachedDelete",
 | 
			
		||||
	204: "k_EGCMsgMemCachedStats",
 | 
			
		||||
	205: "k_EGCMsgMemCachedStatsResponse",
 | 
			
		||||
	210: "k_EGCMsgSQLStats",
 | 
			
		||||
	211: "k_EGCMsgSQLStatsResponse",
 | 
			
		||||
	220: "k_EGCMsgMasterSetDirectory",
 | 
			
		||||
	221: "k_EGCMsgMasterSetDirectoryResponse",
 | 
			
		||||
	222: "k_EGCMsgMasterSetWebAPIRouting",
 | 
			
		||||
	223: "k_EGCMsgMasterSetWebAPIRoutingResponse",
 | 
			
		||||
	224: "k_EGCMsgMasterSetClientMsgRouting",
 | 
			
		||||
	225: "k_EGCMsgMasterSetClientMsgRoutingResponse",
 | 
			
		||||
	226: "k_EGCMsgSetOptions",
 | 
			
		||||
	227: "k_EGCMsgSetOptionsResponse",
 | 
			
		||||
	500: "k_EGCMsgSystemBase2",
 | 
			
		||||
	501: "k_EGCMsgGetPurchaseTrustStatus",
 | 
			
		||||
	502: "k_EGCMsgGetPurchaseTrustStatusResponse",
 | 
			
		||||
	503: "k_EGCMsgUpdateSession",
 | 
			
		||||
	504: "k_EGCMsgGCAccountVacStatusChange",
 | 
			
		||||
	505: "k_EGCMsgCheckFriendship",
 | 
			
		||||
	506: "k_EGCMsgCheckFriendshipResponse",
 | 
			
		||||
	507: "k_EGCMsgGetPartnerAccountLink",
 | 
			
		||||
	508: "k_EGCMsgGetPartnerAccountLinkResponse",
 | 
			
		||||
	509: "k_EGCMsgVSReportedSuspiciousActivity",
 | 
			
		||||
	512: "k_EGCMsgDPPartnerMicroTxns",
 | 
			
		||||
	513: "k_EGCMsgDPPartnerMicroTxnsResponse",
 | 
			
		||||
	514: "k_EGCMsgGetIPASN",
 | 
			
		||||
	515: "k_EGCMsgGetIPASNResponse",
 | 
			
		||||
	516: "k_EGCMsgGetAppFriendsList",
 | 
			
		||||
	517: "k_EGCMsgGetAppFriendsListResponse",
 | 
			
		||||
}
 | 
			
		||||
var EGCSystemMsg_value = map[string]int32{
 | 
			
		||||
	"k_EGCMsgInvalid":                           0,
 | 
			
		||||
	"k_EGCMsgMulti":                             1,
 | 
			
		||||
	"k_EGCMsgGenericReply":                      10,
 | 
			
		||||
	"k_EGCMsgSystemBase":                        50,
 | 
			
		||||
	"k_EGCMsgAchievementAwarded":                51,
 | 
			
		||||
	"k_EGCMsgConCommand":                        52,
 | 
			
		||||
	"k_EGCMsgStartPlaying":                      53,
 | 
			
		||||
	"k_EGCMsgStopPlaying":                       54,
 | 
			
		||||
	"k_EGCMsgStartGameserver":                   55,
 | 
			
		||||
	"k_EGCMsgStopGameserver":                    56,
 | 
			
		||||
	"k_EGCMsgWGRequest":                         57,
 | 
			
		||||
	"k_EGCMsgWGResponse":                        58,
 | 
			
		||||
	"k_EGCMsgGetUserGameStatsSchema":            59,
 | 
			
		||||
	"k_EGCMsgGetUserGameStatsSchemaResponse":    60,
 | 
			
		||||
	"k_EGCMsgGetUserStatsDEPRECATED":            61,
 | 
			
		||||
	"k_EGCMsgGetUserStatsResponse":              62,
 | 
			
		||||
	"k_EGCMsgAppInfoUpdated":                    63,
 | 
			
		||||
	"k_EGCMsgValidateSession":                   64,
 | 
			
		||||
	"k_EGCMsgValidateSessionResponse":           65,
 | 
			
		||||
	"k_EGCMsgLookupAccountFromInput":            66,
 | 
			
		||||
	"k_EGCMsgSendHTTPRequest":                   67,
 | 
			
		||||
	"k_EGCMsgSendHTTPRequestResponse":           68,
 | 
			
		||||
	"k_EGCMsgPreTestSetup":                      69,
 | 
			
		||||
	"k_EGCMsgRecordSupportAction":               70,
 | 
			
		||||
	"k_EGCMsgGetAccountDetails_DEPRECATED":      71,
 | 
			
		||||
	"k_EGCMsgReceiveInterAppMessage":            73,
 | 
			
		||||
	"k_EGCMsgFindAccounts":                      74,
 | 
			
		||||
	"k_EGCMsgPostAlert":                         75,
 | 
			
		||||
	"k_EGCMsgGetLicenses":                       76,
 | 
			
		||||
	"k_EGCMsgGetUserStats":                      77,
 | 
			
		||||
	"k_EGCMsgGetCommands":                       78,
 | 
			
		||||
	"k_EGCMsgGetCommandsResponse":               79,
 | 
			
		||||
	"k_EGCMsgAddFreeLicense":                    80,
 | 
			
		||||
	"k_EGCMsgAddFreeLicenseResponse":            81,
 | 
			
		||||
	"k_EGCMsgGetIPLocation":                     82,
 | 
			
		||||
	"k_EGCMsgGetIPLocationResponse":             83,
 | 
			
		||||
	"k_EGCMsgSystemStatsSchema":                 84,
 | 
			
		||||
	"k_EGCMsgGetSystemStats":                    85,
 | 
			
		||||
	"k_EGCMsgGetSystemStatsResponse":            86,
 | 
			
		||||
	"k_EGCMsgSendEmail":                         87,
 | 
			
		||||
	"k_EGCMsgSendEmailResponse":                 88,
 | 
			
		||||
	"k_EGCMsgGetEmailTemplate":                  89,
 | 
			
		||||
	"k_EGCMsgGetEmailTemplateResponse":          90,
 | 
			
		||||
	"k_EGCMsgGrantGuestPass":                    91,
 | 
			
		||||
	"k_EGCMsgGrantGuestPassResponse":            92,
 | 
			
		||||
	"k_EGCMsgGetAccountDetails":                 93,
 | 
			
		||||
	"k_EGCMsgGetAccountDetailsResponse":         94,
 | 
			
		||||
	"k_EGCMsgGetPersonaNames":                   95,
 | 
			
		||||
	"k_EGCMsgGetPersonaNamesResponse":           96,
 | 
			
		||||
	"k_EGCMsgMultiplexMsg":                      97,
 | 
			
		||||
	"k_EGCMsgWebAPIRegisterInterfaces":          101,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequest":                  102,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequestHttpResponse":      104,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequestForwardResponse":   105,
 | 
			
		||||
	"k_EGCMsgMemCachedGet":                      200,
 | 
			
		||||
	"k_EGCMsgMemCachedGetResponse":              201,
 | 
			
		||||
	"k_EGCMsgMemCachedSet":                      202,
 | 
			
		||||
	"k_EGCMsgMemCachedDelete":                   203,
 | 
			
		||||
	"k_EGCMsgMemCachedStats":                    204,
 | 
			
		||||
	"k_EGCMsgMemCachedStatsResponse":            205,
 | 
			
		||||
	"k_EGCMsgSQLStats":                          210,
 | 
			
		||||
	"k_EGCMsgSQLStatsResponse":                  211,
 | 
			
		||||
	"k_EGCMsgMasterSetDirectory":                220,
 | 
			
		||||
	"k_EGCMsgMasterSetDirectoryResponse":        221,
 | 
			
		||||
	"k_EGCMsgMasterSetWebAPIRouting":            222,
 | 
			
		||||
	"k_EGCMsgMasterSetWebAPIRoutingResponse":    223,
 | 
			
		||||
	"k_EGCMsgMasterSetClientMsgRouting":         224,
 | 
			
		||||
	"k_EGCMsgMasterSetClientMsgRoutingResponse": 225,
 | 
			
		||||
	"k_EGCMsgSetOptions":                        226,
 | 
			
		||||
	"k_EGCMsgSetOptionsResponse":                227,
 | 
			
		||||
	"k_EGCMsgSystemBase2":                       500,
 | 
			
		||||
	"k_EGCMsgGetPurchaseTrustStatus":            501,
 | 
			
		||||
	"k_EGCMsgGetPurchaseTrustStatusResponse":    502,
 | 
			
		||||
	"k_EGCMsgUpdateSession":                     503,
 | 
			
		||||
	"k_EGCMsgGCAccountVacStatusChange":          504,
 | 
			
		||||
	"k_EGCMsgCheckFriendship":                   505,
 | 
			
		||||
	"k_EGCMsgCheckFriendshipResponse":           506,
 | 
			
		||||
	"k_EGCMsgGetPartnerAccountLink":             507,
 | 
			
		||||
	"k_EGCMsgGetPartnerAccountLinkResponse":     508,
 | 
			
		||||
	"k_EGCMsgVSReportedSuspiciousActivity":      509,
 | 
			
		||||
	"k_EGCMsgDPPartnerMicroTxns":                512,
 | 
			
		||||
	"k_EGCMsgDPPartnerMicroTxnsResponse":        513,
 | 
			
		||||
	"k_EGCMsgGetIPASN":                          514,
 | 
			
		||||
	"k_EGCMsgGetIPASNResponse":                  515,
 | 
			
		||||
	"k_EGCMsgGetAppFriendsList":                 516,
 | 
			
		||||
	"k_EGCMsgGetAppFriendsListResponse":         517,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCSystemMsg) Enum() *EGCSystemMsg {
 | 
			
		||||
	p := new(EGCSystemMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCSystemMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCSystemMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCSystemMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCSystemMsg_value, data, "EGCSystemMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCSystemMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCSystemMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
type ESOMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	ESOMsg_k_ESOMsg_Create                   ESOMsg = 21
 | 
			
		||||
	ESOMsg_k_ESOMsg_Update                   ESOMsg = 22
 | 
			
		||||
	ESOMsg_k_ESOMsg_Destroy                  ESOMsg = 23
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscribed          ESOMsg = 24
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheUnsubscribed        ESOMsg = 25
 | 
			
		||||
	ESOMsg_k_ESOMsg_UpdateMultiple           ESOMsg = 26
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscriptionRefresh ESOMsg = 28
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscribedUpToDate  ESOMsg = 29
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var ESOMsg_name = map[int32]string{
 | 
			
		||||
	21: "k_ESOMsg_Create",
 | 
			
		||||
	22: "k_ESOMsg_Update",
 | 
			
		||||
	23: "k_ESOMsg_Destroy",
 | 
			
		||||
	24: "k_ESOMsg_CacheSubscribed",
 | 
			
		||||
	25: "k_ESOMsg_CacheUnsubscribed",
 | 
			
		||||
	26: "k_ESOMsg_UpdateMultiple",
 | 
			
		||||
	28: "k_ESOMsg_CacheSubscriptionRefresh",
 | 
			
		||||
	29: "k_ESOMsg_CacheSubscribedUpToDate",
 | 
			
		||||
}
 | 
			
		||||
var ESOMsg_value = map[string]int32{
 | 
			
		||||
	"k_ESOMsg_Create":                   21,
 | 
			
		||||
	"k_ESOMsg_Update":                   22,
 | 
			
		||||
	"k_ESOMsg_Destroy":                  23,
 | 
			
		||||
	"k_ESOMsg_CacheSubscribed":          24,
 | 
			
		||||
	"k_ESOMsg_CacheUnsubscribed":        25,
 | 
			
		||||
	"k_ESOMsg_UpdateMultiple":           26,
 | 
			
		||||
	"k_ESOMsg_CacheSubscriptionRefresh": 28,
 | 
			
		||||
	"k_ESOMsg_CacheSubscribedUpToDate":  29,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x ESOMsg) Enum() *ESOMsg {
 | 
			
		||||
	p := new(ESOMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x ESOMsg) String() string {
 | 
			
		||||
	return proto.EnumName(ESOMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *ESOMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(ESOMsg_value, data, "ESOMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = ESOMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (ESOMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{1} }
 | 
			
		||||
 | 
			
		||||
type EGCBaseClientMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCPingRequest            EGCBaseClientMsg = 3001
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCPingResponse           EGCBaseClientMsg = 3002
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientWelcome          EGCBaseClientMsg = 4004
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerWelcome          EGCBaseClientMsg = 4005
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientHello            EGCBaseClientMsg = 4006
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerHello            EGCBaseClientMsg = 4007
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientConnectionStatus EGCBaseClientMsg = 4009
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerConnectionStatus EGCBaseClientMsg = 4010
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCBaseClientMsg_name = map[int32]string{
 | 
			
		||||
	3001: "k_EMsgGCPingRequest",
 | 
			
		||||
	3002: "k_EMsgGCPingResponse",
 | 
			
		||||
	4004: "k_EMsgGCClientWelcome",
 | 
			
		||||
	4005: "k_EMsgGCServerWelcome",
 | 
			
		||||
	4006: "k_EMsgGCClientHello",
 | 
			
		||||
	4007: "k_EMsgGCServerHello",
 | 
			
		||||
	4009: "k_EMsgGCClientConnectionStatus",
 | 
			
		||||
	4010: "k_EMsgGCServerConnectionStatus",
 | 
			
		||||
}
 | 
			
		||||
var EGCBaseClientMsg_value = map[string]int32{
 | 
			
		||||
	"k_EMsgGCPingRequest":            3001,
 | 
			
		||||
	"k_EMsgGCPingResponse":           3002,
 | 
			
		||||
	"k_EMsgGCClientWelcome":          4004,
 | 
			
		||||
	"k_EMsgGCServerWelcome":          4005,
 | 
			
		||||
	"k_EMsgGCClientHello":            4006,
 | 
			
		||||
	"k_EMsgGCServerHello":            4007,
 | 
			
		||||
	"k_EMsgGCClientConnectionStatus": 4009,
 | 
			
		||||
	"k_EMsgGCServerConnectionStatus": 4010,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCBaseClientMsg) Enum() *EGCBaseClientMsg {
 | 
			
		||||
	p := new(EGCBaseClientMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCBaseClientMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCBaseClientMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCBaseClientMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCBaseClientMsg_value, data, "EGCBaseClientMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCBaseClientMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCBaseClientMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{2} }
 | 
			
		||||
 | 
			
		||||
type EGCToGCMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterAck                   EGCToGCMsg = 150
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterAckResponse           EGCToGCMsg = 151
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgRouted                      EGCToGCMsg = 152
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgRoutedReply                 EGCToGCMsg = 153
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCUpdateSubGCSessionInfo          EGCToGCMsg = 154
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfo         EGCToGCMsg = 155
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfoResponse EGCToGCMsg = 156
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterStartupComplete       EGCToGCMsg = 157
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCSOCacheSubscribe            EGCToGCMsg = 158
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCSOCacheUnsubscribe          EGCToGCMsg = 159
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCLoadSessionSOCache          EGCToGCMsg = 160
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCLoadSessionSOCacheResponse  EGCToGCMsg = 161
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCUpdateSessionStats          EGCToGCMsg = 162
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCToGCMsg_name = map[int32]string{
 | 
			
		||||
	150: "k_EGCToGCMsgMasterAck",
 | 
			
		||||
	151: "k_EGCToGCMsgMasterAckResponse",
 | 
			
		||||
	152: "k_EGCToGCMsgRouted",
 | 
			
		||||
	153: "k_EGCToGCMsgRoutedReply",
 | 
			
		||||
	154: "k_EMsgGCUpdateSubGCSessionInfo",
 | 
			
		||||
	155: "k_EMsgGCRequestSubGCSessionInfo",
 | 
			
		||||
	156: "k_EMsgGCRequestSubGCSessionInfoResponse",
 | 
			
		||||
	157: "k_EGCToGCMsgMasterStartupComplete",
 | 
			
		||||
	158: "k_EMsgGCToGCSOCacheSubscribe",
 | 
			
		||||
	159: "k_EMsgGCToGCSOCacheUnsubscribe",
 | 
			
		||||
	160: "k_EMsgGCToGCLoadSessionSOCache",
 | 
			
		||||
	161: "k_EMsgGCToGCLoadSessionSOCacheResponse",
 | 
			
		||||
	162: "k_EMsgGCToGCUpdateSessionStats",
 | 
			
		||||
}
 | 
			
		||||
var EGCToGCMsg_value = map[string]int32{
 | 
			
		||||
	"k_EGCToGCMsgMasterAck":                   150,
 | 
			
		||||
	"k_EGCToGCMsgMasterAckResponse":           151,
 | 
			
		||||
	"k_EGCToGCMsgRouted":                      152,
 | 
			
		||||
	"k_EGCToGCMsgRoutedReply":                 153,
 | 
			
		||||
	"k_EMsgGCUpdateSubGCSessionInfo":          154,
 | 
			
		||||
	"k_EMsgGCRequestSubGCSessionInfo":         155,
 | 
			
		||||
	"k_EMsgGCRequestSubGCSessionInfoResponse": 156,
 | 
			
		||||
	"k_EGCToGCMsgMasterStartupComplete":       157,
 | 
			
		||||
	"k_EMsgGCToGCSOCacheSubscribe":            158,
 | 
			
		||||
	"k_EMsgGCToGCSOCacheUnsubscribe":          159,
 | 
			
		||||
	"k_EMsgGCToGCLoadSessionSOCache":          160,
 | 
			
		||||
	"k_EMsgGCToGCLoadSessionSOCacheResponse":  161,
 | 
			
		||||
	"k_EMsgGCToGCUpdateSessionStats":          162,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCToGCMsg) Enum() *EGCToGCMsg {
 | 
			
		||||
	p := new(EGCToGCMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCToGCMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCToGCMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCToGCMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCToGCMsg_value, data, "EGCToGCMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCToGCMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCToGCMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{3} }
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterEnum("EGCSystemMsg", EGCSystemMsg_name, EGCSystemMsg_value)
 | 
			
		||||
	proto.RegisterEnum("ESOMsg", ESOMsg_name, ESOMsg_value)
 | 
			
		||||
	proto.RegisterEnum("EGCBaseClientMsg", EGCBaseClientMsg_name, EGCBaseClientMsg_value)
 | 
			
		||||
	proto.RegisterEnum("EGCToGCMsg", EGCToGCMsg_name, EGCToGCMsg_value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var system_fileDescriptor0 = []byte{
 | 
			
		||||
	// 1475 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x57, 0x59, 0x73, 0x1b, 0xc5,
 | 
			
		||||
	0x13, 0xcf, 0x96, 0xfc, 0xff, 0x3f, 0x4c, 0x41, 0xd1, 0x99, 0xc4, 0x47, 0x12, 0x27, 0x4a, 0x42,
 | 
			
		||||
	0x0e, 0x62, 0xa8, 0x3c, 0x84, 0xfb, 0x46, 0x91, 0x64, 0x5b, 0x41, 0x8e, 0x15, 0x4b, 0xb6, 0xb9,
 | 
			
		||||
	0xcd, 0x7a, 0x35, 0xb6, 0xb6, 0x2c, 0xed, 0x2c, 0x33, 0xbb, 0x26, 0x7e, 0x0b, 0xd7, 0x57, 0xe0,
 | 
			
		||||
	0xbe, 0x8b, 0xa3, 0xe0, 0x1b, 0xc0, 0x27, 0xe0, 0x7c, 0x81, 0x57, 0xee, 0x7c, 0x01, 0x1e, 0xb8,
 | 
			
		||||
	0x21, 0x55, 0xf4, 0xee, 0xce, 0xce, 0xce, 0x4a, 0xb2, 0x79, 0x93, 0xe6, 0xd7, 0xdd, 0xd3, 0xdd,
 | 
			
		||||
	0xd3, 0xfd, 0xeb, 0x5e, 0x42, 0xd7, 0x1d, 0xb9, 0x25, 0x03, 0xd6, 0xeb, 0xc9, 0x75, 0x79, 0xda,
 | 
			
		||||
	0x17, 0x3c, 0xe0, 0x53, 0x97, 0x47, 0xc9, 0x55, 0xd5, 0x99, 0x72, 0x33, 0x3e, 0x9f, 0x93, 0xeb,
 | 
			
		||||
	0x74, 0x0f, 0xb9, 0x66, 0x63, 0x05, 0x4f, 0xf0, 0x77, 0xcd, 0xdb, 0xb4, 0xbb, 0x6e, 0x1b, 0x76,
 | 
			
		||||
	0xd1, 0xdd, 0xe4, 0xea, 0xf4, 0x70, 0x2e, 0xec, 0x06, 0x2e, 0x58, 0x74, 0x82, 0xec, 0x4d, 0x8f,
 | 
			
		||||
	0x66, 0x98, 0xc7, 0x84, 0xeb, 0x2c, 0x30, 0xbf, 0xbb, 0x05, 0x84, 0x8e, 0x11, 0x9a, 0x22, 0x89,
 | 
			
		||||
	0xd9, 0xb3, 0xb6, 0x64, 0x70, 0x86, 0x1e, 0x22, 0xfb, 0xd3, 0xf3, 0x92, 0xd3, 0x71, 0xd9, 0x26,
 | 
			
		||||
	0xeb, 0x31, 0x2f, 0x28, 0x3d, 0x69, 0x8b, 0x36, 0x6b, 0xc3, 0x8d, 0xa6, 0x5e, 0x99, 0x7b, 0x65,
 | 
			
		||||
	0xde, 0xeb, 0xd9, 0x5e, 0x1b, 0x6e, 0x32, 0x6f, 0x6a, 0x06, 0xb6, 0x08, 0x1a, 0x5d, 0x7b, 0xcb,
 | 
			
		||||
	0xf5, 0xd6, 0xe1, 0x66, 0x3a, 0x4e, 0xf6, 0x64, 0x08, 0xf7, 0x53, 0xe0, 0x16, 0x7a, 0x80, 0x8c,
 | 
			
		||||
	0xe7, 0x54, 0x66, 0xec, 0x1e, 0x93, 0x4c, 0x6c, 0x32, 0x01, 0xb7, 0xd2, 0xfd, 0x64, 0xcc, 0xd4,
 | 
			
		||||
	0x32, 0xb0, 0xdb, 0xe8, 0x28, 0xd9, 0x9d, 0x62, 0xcb, 0x33, 0x0b, 0xec, 0x89, 0x90, 0xc9, 0x00,
 | 
			
		||||
	0x6e, 0x37, 0x5d, 0x8b, 0x8e, 0xa5, 0xcf, 0x3d, 0x0c, 0xe9, 0x0e, 0x7a, 0x94, 0x1c, 0xca, 0x92,
 | 
			
		||||
	0x10, 0x2c, 0xa2, 0x99, 0xc8, 0x1a, 0x5e, 0x19, 0xc8, 0xa6, 0xd3, 0x61, 0x3d, 0x1b, 0xee, 0xa4,
 | 
			
		||||
	0x53, 0xe4, 0xc4, 0xce, 0x32, 0xda, 0xde, 0x5d, 0x43, 0xec, 0xc5, 0x72, 0x95, 0x6a, 0x63, 0xa1,
 | 
			
		||||
	0x5a, 0x2e, 0xb5, 0xaa, 0x15, 0xb8, 0x9b, 0x1e, 0x26, 0x93, 0xc3, 0x64, 0xb4, 0x95, 0x7b, 0xcc,
 | 
			
		||||
	0x00, 0x4b, 0xbe, 0x5f, 0xf3, 0xd6, 0xf8, 0xa2, 0xdf, 0xb6, 0x03, 0x4c, 0xf2, 0xbd, 0x66, 0x66,
 | 
			
		||||
	0x96, 0xa2, 0xc7, 0xc5, 0xe3, 0x26, 0x93, 0xd2, 0xe5, 0x1e, 0xdc, 0x47, 0xaf, 0x25, 0xc5, 0x6d,
 | 
			
		||||
	0x40, 0x6d, 0xbd, 0x64, 0xfa, 0x58, 0xe7, 0x7c, 0x23, 0xf4, 0x4b, 0x8e, 0xc3, 0x43, 0x2f, 0x98,
 | 
			
		||||
	0x16, 0xbc, 0x57, 0xf3, 0xfc, 0x30, 0x80, 0xb3, 0xb9, 0xfc, 0x33, 0xaf, 0x3d, 0xdb, 0x6a, 0x35,
 | 
			
		||||
	0xd2, 0x64, 0x96, 0xcd, 0x5b, 0xfa, 0x40, 0x7d, 0x4b, 0xc5, 0x7c, 0xf4, 0x86, 0x60, 0x2d, 0x04,
 | 
			
		||||
	0x9b, 0x2c, 0x08, 0x7d, 0xa8, 0xd2, 0x22, 0x39, 0x90, 0x22, 0x0b, 0xcc, 0xe1, 0xa2, 0xdd, 0x0c,
 | 
			
		||||
	0x7d, 0x9f, 0x8b, 0xa0, 0xe4, 0x04, 0x51, 0x14, 0xd3, 0xf4, 0x3a, 0x72, 0xcc, 0x48, 0x90, 0xf2,
 | 
			
		||||
	0xae, 0xc2, 0x02, 0xdb, 0xed, 0xca, 0x15, 0x23, 0x95, 0x33, 0x66, 0x28, 0x68, 0x8a, 0xb9, 0x9b,
 | 
			
		||||
	0xac, 0xe6, 0x05, 0x4c, 0x60, 0xd2, 0xe6, 0x30, 0x6c, 0x7b, 0x9d, 0x41, 0xcd, 0x74, 0x64, 0xda,
 | 
			
		||||
	0xf5, 0xda, 0xca, 0x9c, 0x84, 0x73, 0x66, 0xad, 0x34, 0xb8, 0x0c, 0x4a, 0x5d, 0x26, 0x02, 0xb8,
 | 
			
		||||
	0xdf, 0x2c, 0x4a, 0xbc, 0xbe, 0xee, 0x3a, 0x0c, 0x23, 0x92, 0x50, 0xcf, 0x77, 0x4c, 0xf6, 0x70,
 | 
			
		||||
	0x30, 0xd7, 0xa7, 0xa2, 0x2a, 0x5f, 0xc2, 0x79, 0x33, 0x56, 0x03, 0xd0, 0x69, 0x9a, 0xcf, 0x3d,
 | 
			
		||||
	0x75, 0xbb, 0x3d, 0x2d, 0x18, 0x53, 0x17, 0x42, 0xc3, 0x8c, 0x2e, 0x8f, 0x69, 0xfd, 0x0b, 0x74,
 | 
			
		||||
	0x1f, 0x19, 0x35, 0x2e, 0xa8, 0x35, 0xea, 0xdc, 0xb1, 0xe3, 0x34, 0x2e, 0xd0, 0x23, 0xe4, 0xe0,
 | 
			
		||||
	0x50, 0x48, 0x6b, 0x37, 0xe9, 0x41, 0xb2, 0x2f, 0xdf, 0xe9, 0x66, 0xe5, 0xb7, 0x4c, 0xe7, 0xd0,
 | 
			
		||||
	0x82, 0x21, 0x01, 0x8b, 0x7d, 0x95, 0x6e, 0x60, 0xda, 0xfc, 0x92, 0x99, 0xe0, 0xa8, 0x50, 0xaa,
 | 
			
		||||
	0x3d, 0x7c, 0x41, 0x58, 0xce, 0xdd, 0x9a, 0x1e, 0x6b, 0xad, 0x07, 0xe8, 0x24, 0x99, 0x30, 0x2c,
 | 
			
		||||
	0xc7, 0x68, 0x8b, 0xf5, 0xfc, 0x2e, 0x16, 0x33, 0x3c, 0x48, 0x8f, 0x91, 0xc3, 0xdb, 0xa1, 0xda,
 | 
			
		||||
	0xc6, 0x43, 0x39, 0xcf, 0x85, 0xed, 0x05, 0x33, 0x51, 0x75, 0x36, 0x6c, 0x29, 0xe1, 0xe1, 0x9c,
 | 
			
		||||
	0xe7, 0x39, 0x4c, 0xeb, 0x3f, 0x62, 0xba, 0x38, 0x50, 0x82, 0xf0, 0x28, 0x3d, 0x4e, 0x8e, 0x6c,
 | 
			
		||||
	0x0b, 0x6b, 0x2b, 0x8f, 0x99, 0x5d, 0x84, 0x62, 0x0d, 0x26, 0x24, 0xf7, 0xec, 0xf3, 0x11, 0x5d,
 | 
			
		||||
	0xc1, 0x8a, 0xd9, 0x45, 0x7d, 0xa0, 0xb6, 0xf0, 0xb8, 0x59, 0x72, 0x31, 0x6f, 0xfb, 0x5d, 0x76,
 | 
			
		||||
	0x11, 0x7f, 0x83, 0x6d, 0xe6, 0x61, 0x99, 0xad, 0x96, 0x1a, 0xb5, 0x05, 0xb6, 0xee, 0xe2, 0x23,
 | 
			
		||||
	0x88, 0xb8, 0x03, 0xd6, 0x6c, 0x07, 0x2f, 0x61, 0x66, 0x2e, 0x13, 0xa9, 0x73, 0x7c, 0x35, 0x6d,
 | 
			
		||||
	0xe4, 0x35, 0xb3, 0xd1, 0xfa, 0xd1, 0xd9, 0x20, 0xf0, 0xb5, 0x1f, 0x1d, 0x7a, 0x3d, 0x39, 0xb9,
 | 
			
		||||
	0x9d, 0xe4, 0x34, 0x17, 0xd1, 0x04, 0xd0, 0xc2, 0x2e, 0xd6, 0x64, 0xe6, 0x34, 0xeb, 0x95, 0x6d,
 | 
			
		||||
	0x2c, 0xa7, 0x36, 0x86, 0x08, 0x9f, 0x58, 0x58, 0x93, 0x93, 0xc3, 0x20, 0xad, 0xfc, 0xa9, 0x35,
 | 
			
		||||
	0x54, 0x1b, 0xa9, 0x03, 0x3e, 0xb3, 0x30, 0x9a, 0xf1, 0x01, 0xa8, 0xc2, 0xba, 0x0c, 0x0b, 0xe3,
 | 
			
		||||
	0x73, 0x0b, 0xb3, 0x3d, 0x36, 0xa8, 0x18, 0x57, 0xeb, 0x17, 0x16, 0x66, 0xfb, 0xd0, 0x70, 0x50,
 | 
			
		||||
	0x5f, 0xfd, 0xa5, 0x85, 0xf5, 0x0a, 0xba, 0x30, 0x2f, 0xd4, 0x13, 0xdd, 0xaf, 0x2c, 0x2c, 0x86,
 | 
			
		||||
	0x89, 0xfe, 0x63, 0xad, 0xf5, 0xb5, 0x85, 0x3d, 0xae, 0xc7, 0xe2, 0x9c, 0x1d, 0xbd, 0x00, 0x7a,
 | 
			
		||||
	0x5b, 0x71, 0x05, 0x73, 0x02, 0x2e, 0xb6, 0xe0, 0x1b, 0x8b, 0x9e, 0x24, 0x47, 0xb7, 0x17, 0xd0,
 | 
			
		||||
	0x96, 0xbe, 0xcd, 0x3b, 0x99, 0x0a, 0xaa, 0xc7, 0xe5, 0x61, 0x10, 0x4d, 0xc6, 0xef, 0x2c, 0x7c,
 | 
			
		||||
	0x8a, 0x13, 0x3b, 0x0b, 0x69, 0x8b, 0xdf, 0x5b, 0xf4, 0x44, 0x56, 0xa8, 0x5a, 0xb8, 0xdc, 0x75,
 | 
			
		||||
	0x71, 0x6c, 0x47, 0x94, 0xa9, 0x8c, 0xfe, 0x60, 0xd1, 0xd3, 0xe4, 0xd4, 0x7f, 0xca, 0x69, 0xbb,
 | 
			
		||||
	0x3f, 0x5a, 0x48, 0x78, 0xd9, 0x8a, 0xc0, 0x82, 0x79, 0x3f, 0xe2, 0x15, 0x09, 0x3f, 0xe5, 0x92,
 | 
			
		||||
	0x91, 0x01, 0x5a, 0xf3, 0x72, 0xb4, 0x76, 0xec, 0x19, 0x5c, 0x2e, 0xce, 0xc0, 0x2f, 0x05, 0x33,
 | 
			
		||||
	0xfa, 0xa8, 0x21, 0x42, 0xe1, 0x74, 0x10, 0x6a, 0x89, 0x10, 0x47, 0x07, 0xe6, 0x3c, 0x94, 0xf0,
 | 
			
		||||
	0x6b, 0xc1, 0x8c, 0x7e, 0xb8, 0x90, 0xbe, 0xeb, 0xb7, 0x02, 0xb2, 0x80, 0x26, 0xc7, 0x64, 0x80,
 | 
			
		||||
	0xa6, 0x93, 0xf2, 0xf7, 0x02, 0xb6, 0x70, 0xc6, 0x23, 0x65, 0xd5, 0xc1, 0x4b, 0xb6, 0x93, 0x18,
 | 
			
		||||
	0x29, 0x77, 0x6c, 0x0f, 0x87, 0xc7, 0x1f, 0x05, 0xb3, 0xe4, 0xca, 0x1d, 0xe6, 0x6c, 0x4c, 0x0b,
 | 
			
		||||
	0x4c, 0x4a, 0x5b, 0x76, 0x5c, 0x1f, 0xfe, 0x2c, 0x60, 0x13, 0x16, 0xb7, 0x41, 0xb5, 0x1b, 0x7f,
 | 
			
		||||
	0x15, 0x90, 0x70, 0x4c, 0x22, 0x6e, 0xe0, 0x3a, 0x83, 0xeb, 0x96, 0xba, 0xb2, 0xee, 0x7a, 0x1b,
 | 
			
		||||
	0xf0, 0x77, 0x01, 0x97, 0x8c, 0xe3, 0x3b, 0xca, 0x68, 0x7b, 0xff, 0x14, 0xe8, 0xa9, 0xac, 0x6d,
 | 
			
		||||
	0x97, 0x9a, 0xb8, 0xb4, 0xe1, 0xec, 0xc4, 0x62, 0x0e, 0xa5, 0xef, 0x3a, 0x2e, 0x0f, 0x65, 0x34,
 | 
			
		||||
	0x47, 0x37, 0xdd, 0x60, 0x0b, 0xae, 0x14, 0xcc, 0xe7, 0xa8, 0x34, 0x94, 0xd5, 0x39, 0xd7, 0x11,
 | 
			
		||||
	0xbc, 0x75, 0x11, 0xdf, 0xeb, 0xd2, 0x88, 0x59, 0x9b, 0x83, 0x02, 0xfa, 0xd2, 0xa7, 0x46, 0xcc,
 | 
			
		||||
	0xde, 0x88, 0xa7, 0x49, 0xa9, 0x79, 0x1e, 0x9e, 0x1e, 0x31, 0x7b, 0x23, 0x3d, 0xd6, 0x5a, 0xcf,
 | 
			
		||||
	0x8c, 0xe0, 0xca, 0x98, 0xe3, 0x51, 0xdf, 0x57, 0x19, 0xaa, 0x23, 0x55, 0xc1, 0xb3, 0x23, 0x66,
 | 
			
		||||
	0x7d, 0x0e, 0xe0, 0xda, 0xce, 0x73, 0x23, 0x53, 0x3f, 0x5b, 0xe4, 0xff, 0xd5, 0xe6, 0x7c, 0xb6,
 | 
			
		||||
	0xdf, 0xc6, 0xbf, 0x57, 0xca, 0x82, 0x45, 0x53, 0x61, 0x34, 0x77, 0x98, 0x3c, 0x35, 0x8c, 0xd1,
 | 
			
		||||
	0xbd, 0xb1, 0xcb, 0xc9, 0x61, 0x05, 0x99, 0x4a, 0xf0, 0x2d, 0x18, 0x57, 0x94, 0xa8, 0xf4, 0x23,
 | 
			
		||||
	0x1e, 0x68, 0x86, 0xab, 0xd2, 0x11, 0xee, 0x2a, 0xae, 0x57, 0x13, 0x6a, 0xc7, 0x35, 0xd0, 0x45,
 | 
			
		||||
	0x4f, 0x66, 0xf8, 0x3e, 0x45, 0xe9, 0xe6, 0x45, 0x29, 0x2f, 0xc3, 0x7e, 0x35, 0x16, 0x06, 0x4d,
 | 
			
		||||
	0xfb, 0xc9, 0xd8, 0x5d, 0x13, 0x4c, 0x76, 0x60, 0x52, 0x51, 0xf7, 0x50, 0x0f, 0x16, 0xfd, 0x16,
 | 
			
		||||
	0xaf, 0x44, 0xde, 0x1f, 0x9c, 0xba, 0x62, 0x11, 0xc0, 0xcc, 0x44, 0xed, 0xa1, 0x3b, 0x51, 0x75,
 | 
			
		||||
	0x4f, 0x5c, 0xb3, 0x8d, 0xb8, 0x25, 0x13, 0x2a, 0xff, 0x68, 0x5c, 0xd1, 0xa6, 0x81, 0xa8, 0xe4,
 | 
			
		||||
	0x7d, 0x3c, 0xae, 0xda, 0x20, 0x86, 0x12, 0x4b, 0xcb, 0xac, 0xeb, 0xf0, 0x1e, 0x83, 0x77, 0x8a,
 | 
			
		||||
	0x26, 0xd6, 0x8c, 0x77, 0xe8, 0x14, 0x7b, 0xb7, 0x68, 0x5e, 0x96, 0xe8, 0xcd, 0xb2, 0x6e, 0x97,
 | 
			
		||||
	0xc3, 0x7b, 0x39, 0x24, 0xd1, 0x4a, 0x90, 0xf7, 0x8b, 0xaa, 0x89, 0x0d, 0x1d, 0xfc, 0x12, 0xf0,
 | 
			
		||||
	0x58, 0xbc, 0xd9, 0xa9, 0x26, 0xfe, 0x20, 0x27, 0x94, 0xa8, 0x0f, 0x08, 0x7d, 0x58, 0x9c, 0xba,
 | 
			
		||||
	0x5c, 0x20, 0x04, 0xe3, 0x6f, 0xf1, 0xb8, 0x3a, 0x74, 0x2f, 0xab, 0xff, 0x09, 0x4b, 0x95, 0x9c,
 | 
			
		||||
	0x0d, 0x78, 0xde, 0xd2, 0x0d, 0xd6, 0x8f, 0xe9, 0x24, 0xbc, 0x90, 0x31, 0x96, 0x92, 0x89, 0x38,
 | 
			
		||||
	0x0d, 0x1f, 0xf4, 0xc5, 0x6c, 0xa8, 0xe4, 0x80, 0xe4, 0x53, 0xe8, 0x25, 0xcb, 0x74, 0x55, 0x51,
 | 
			
		||||
	0x48, 0xb8, 0x1a, 0x79, 0x1d, 0xf3, 0x48, 0xb4, 0x99, 0xc3, 0xcb, 0x96, 0xa2, 0x81, 0x58, 0x48,
 | 
			
		||||
	0xbd, 0xc8, 0x80, 0xd4, 0x2b, 0x16, 0xbd, 0x21, 0x9e, 0xa1, 0x3b, 0x49, 0x69, 0x7f, 0x5f, 0xcd,
 | 
			
		||||
	0x98, 0x3b, 0x17, 0x53, 0xfc, 0x2d, 0x14, 0xfa, 0xb8, 0x47, 0xfa, 0xf1, 0xd4, 0x7b, 0x2d, 0x9d,
 | 
			
		||||
	0xa8, 0xb1, 0xd5, 0x48, 0xb4, 0x39, 0x9f, 0xaf, 0x28, 0x78, 0x3d, 0x17, 0x83, 0x21, 0x62, 0x14,
 | 
			
		||||
	0x36, 0xbc, 0x31, 0x20, 0x54, 0xe7, 0x76, 0x5b, 0x79, 0xa6, 0xe4, 0xe1, 0xcd, 0x74, 0xf6, 0xec,
 | 
			
		||||
	0x20, 0xa4, 0x23, 0x78, 0x6b, 0xc0, 0x62, 0x8e, 0x81, 0x93, 0xd9, 0xfa, 0xb6, 0x75, 0xf6, 0x7f,
 | 
			
		||||
	0xb3, 0xd6, 0x25, 0x6b, 0xd7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x05, 0xab, 0xaf, 0x14, 0xda,
 | 
			
		||||
	0x0e, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										188
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										188
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,188 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Includes inventory types as used in the trade package
 | 
			
		||||
*/
 | 
			
		||||
package inventory
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/jsont"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type GenericInventory map[uint32]map[uint64]*Inventory
 | 
			
		||||
 | 
			
		||||
func NewGenericInventory() GenericInventory {
 | 
			
		||||
	iMap := make(map[uint32]map[uint64]*Inventory)
 | 
			
		||||
	return GenericInventory(iMap)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get inventory for specified AppId and ContextId
 | 
			
		||||
func (i *GenericInventory) Get(appId uint32, contextId uint64) (*Inventory, error) {
 | 
			
		||||
	iMap := (map[uint32]map[uint64]*Inventory)(*i)
 | 
			
		||||
	iMap2, ok := iMap[appId]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return nil, fmt.Errorf("inventory for specified appId not found")
 | 
			
		||||
	}
 | 
			
		||||
	inv, ok := iMap2[contextId]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return nil, fmt.Errorf("inventory for specified contextId not found")
 | 
			
		||||
	}
 | 
			
		||||
	return inv, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (i *GenericInventory) Add(appId uint32, contextId uint64, inv *Inventory) {
 | 
			
		||||
	iMap := (map[uint32]map[uint64]*Inventory)(*i)
 | 
			
		||||
	iMap2, ok := iMap[appId]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		iMap2 = make(map[uint64]*Inventory)
 | 
			
		||||
		iMap[appId] = iMap2
 | 
			
		||||
	}
 | 
			
		||||
	iMap2[contextId] = inv
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Inventory struct {
 | 
			
		||||
	Items        Items        `json:"rgInventory"`
 | 
			
		||||
	Currencies   Currencies   `json:"rgCurrency"`
 | 
			
		||||
	Descriptions Descriptions `json:"rgDescriptions"`
 | 
			
		||||
	AppInfo      *AppInfo     `json:"rgAppInfo"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Items key is an AssetId
 | 
			
		||||
type Items map[string]*Item
 | 
			
		||||
 | 
			
		||||
func (i *Items) ToMap() map[string]*Item {
 | 
			
		||||
	return (map[string]*Item)(*i)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (i *Items) Get(assetId uint64) (*Item, error) {
 | 
			
		||||
	iMap := (map[string]*Item)(*i)
 | 
			
		||||
	if item, ok := iMap[strconv.FormatUint(assetId, 10)]; ok {
 | 
			
		||||
		return item, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("item not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (i *Items) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if bytes.Equal(data, []byte("[]")) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal(data, (*map[string]*Item)(i))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Currencies map[string]*Currency
 | 
			
		||||
 | 
			
		||||
func (c *Currencies) ToMap() map[string]*Currency {
 | 
			
		||||
	return (map[string]*Currency)(*c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Currencies) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if bytes.Equal(data, []byte("[]")) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal(data, (*map[string]*Currency)(c))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Descriptions key format is %d_%d, first %d is ClassId, second is InstanceId
 | 
			
		||||
type Descriptions map[string]*Description
 | 
			
		||||
 | 
			
		||||
func (d *Descriptions) ToMap() map[string]*Description {
 | 
			
		||||
	return (map[string]*Description)(*d)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *Descriptions) Get(classId uint64, instanceId uint64) (*Description, error) {
 | 
			
		||||
	dMap := (map[string]*Description)(*d)
 | 
			
		||||
	descId := fmt.Sprintf("%v_%v", classId, instanceId)
 | 
			
		||||
	if desc, ok := dMap[descId]; ok {
 | 
			
		||||
		return desc, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("description not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *Descriptions) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if bytes.Equal(data, []byte("[]")) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal(data, (*map[string]*Description)(d))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Item struct {
 | 
			
		||||
	Id         uint64 `json:",string"`
 | 
			
		||||
	ClassId    uint64 `json:",string"`
 | 
			
		||||
	InstanceId uint64 `json:",string"`
 | 
			
		||||
	Amount     uint64 `json:",string"`
 | 
			
		||||
	Pos        uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Currency struct {
 | 
			
		||||
	Id         uint64 `json:",string"`
 | 
			
		||||
	ClassId    uint64 `json:",string"`
 | 
			
		||||
	IsCurrency bool   `json:"is_currency"`
 | 
			
		||||
	Pos        uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Description struct {
 | 
			
		||||
	AppId      uint32 `json:",string"`
 | 
			
		||||
	ClassId    uint64 `json:",string"`
 | 
			
		||||
	InstanceId uint64 `json:",string"`
 | 
			
		||||
 | 
			
		||||
	IconUrl      string `json:"icon_url"`
 | 
			
		||||
	IconUrlLarge string `json:"icon_url_large"`
 | 
			
		||||
	IconDragUrl  string `json:"icon_drag_url"`
 | 
			
		||||
 | 
			
		||||
	Name           string
 | 
			
		||||
	MarketName     string `json:"market_name"`
 | 
			
		||||
	MarketHashName string `json:"market_hash_name"`
 | 
			
		||||
 | 
			
		||||
	// Colors in hex, for example `B2B2B2`
 | 
			
		||||
	NameColor       string `json:"name_color"`
 | 
			
		||||
	BackgroundColor string `json:"background_color"`
 | 
			
		||||
 | 
			
		||||
	Type string
 | 
			
		||||
 | 
			
		||||
	Tradable                  jsont.UintBool
 | 
			
		||||
	Marketable                jsont.UintBool
 | 
			
		||||
	Commodity                 jsont.UintBool
 | 
			
		||||
	MarketTradableRestriction uint32 `json:"market_tradable_restriction,string"`
 | 
			
		||||
 | 
			
		||||
	Descriptions DescriptionLines
 | 
			
		||||
	Actions      []*Action
 | 
			
		||||
	// Application-specific data, like "def_index" and "quality" for TF2
 | 
			
		||||
	AppData map[string]string
 | 
			
		||||
	Tags    []*Tag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type DescriptionLines []*DescriptionLine
 | 
			
		||||
 | 
			
		||||
func (d *DescriptionLines) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if bytes.Equal(data, []byte(`""`)) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal(data, (*[]*DescriptionLine)(d))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type DescriptionLine struct {
 | 
			
		||||
	Value string
 | 
			
		||||
	Type  *string // Is `html` for HTML descriptions
 | 
			
		||||
	Color *string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Action struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	Link string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AppInfo struct {
 | 
			
		||||
	AppId uint32
 | 
			
		||||
	Name  string
 | 
			
		||||
	Icon  string
 | 
			
		||||
	Link  string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Tag struct {
 | 
			
		||||
	InternalName string `json:internal_name`
 | 
			
		||||
	Name         string
 | 
			
		||||
	Category     string
 | 
			
		||||
	CategoryName string `json:category_name`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory_apps.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory_apps.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,79 +0,0 @@
 | 
			
		||||
package inventory
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/steamid"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type InventoryApps map[string]*InventoryApp
 | 
			
		||||
 | 
			
		||||
func (i *InventoryApps) Get(appId uint32) (*InventoryApp, error) {
 | 
			
		||||
	iMap := (map[string]*InventoryApp)(*i)
 | 
			
		||||
	if inventoryApp, ok := iMap[strconv.FormatUint(uint64(appId), 10)]; ok {
 | 
			
		||||
		return inventoryApp, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("inventory app not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (i *InventoryApps) ToMap() map[string]*InventoryApp {
 | 
			
		||||
	return (map[string]*InventoryApp)(*i)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type InventoryApp struct {
 | 
			
		||||
	AppId            uint32
 | 
			
		||||
	Name             string
 | 
			
		||||
	Icon             string
 | 
			
		||||
	Link             string
 | 
			
		||||
	AssetCount       uint32   `json:"asset_count"`
 | 
			
		||||
	InventoryLogo    string   `json:"inventory_logo"`
 | 
			
		||||
	TradePermissions string   `json:"trade_permissions"`
 | 
			
		||||
	Contexts         Contexts `json:"rgContexts"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Contexts map[string]*Context
 | 
			
		||||
 | 
			
		||||
func (c *Contexts) Get(contextId uint64) (*Context, error) {
 | 
			
		||||
	cMap := (map[string]*Context)(*c)
 | 
			
		||||
	if context, ok := cMap[strconv.FormatUint(contextId, 10)]; ok {
 | 
			
		||||
		return context, nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil, fmt.Errorf("context not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Contexts) ToMap() map[string]*Context {
 | 
			
		||||
	return (map[string]*Context)(*c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Context struct {
 | 
			
		||||
	ContextId  uint64 `json:"id,string"`
 | 
			
		||||
	AssetCount uint32 `json:"asset_count"`
 | 
			
		||||
	Name       string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetInventoryApps(client *http.Client, steamId steamid.SteamId) (InventoryApps, error) {
 | 
			
		||||
	resp, err := http.Get("http://steamcommunity.com/profiles/" + steamId.ToString() + "/inventory/")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	respBody, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	reg := regexp.MustCompile("var g_rgAppContextData = (.*?);")
 | 
			
		||||
	inventoryAppsMatches := reg.FindSubmatch(respBody)
 | 
			
		||||
	if inventoryAppsMatches == nil {
 | 
			
		||||
		return nil, fmt.Errorf("profile inventory not found in steam response")
 | 
			
		||||
	}
 | 
			
		||||
	var inventoryApps InventoryApps
 | 
			
		||||
	if err = json.Unmarshal(inventoryAppsMatches[1], &inventoryApps); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return inventoryApps, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/own.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/own.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,28 +0,0 @@
 | 
			
		||||
package inventory
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func GetPartialOwnInventory(client *http.Client, contextId uint64, appId uint32, start *uint) (*PartialInventory, error) {
 | 
			
		||||
	// TODO: the "trading" parameter can be left off to return non-tradable items too
 | 
			
		||||
	url := fmt.Sprintf("http://steamcommunity.com/my/inventory/json/%d/%d?trading=1", appId, contextId)
 | 
			
		||||
	if start != nil {
 | 
			
		||||
		url += "&start=" + strconv.FormatUint(uint64(*start), 10)
 | 
			
		||||
	}
 | 
			
		||||
	req, err := http.NewRequest("GET", url, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	return DoInventoryRequest(client, req)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetOwnInventory(client *http.Client, contextId uint64, appId uint32) (*Inventory, error) {
 | 
			
		||||
	return GetFullInventory(func() (*PartialInventory, error) {
 | 
			
		||||
		return GetPartialOwnInventory(client, contextId, appId, nil)
 | 
			
		||||
	}, func(start uint) (*PartialInventory, error) {
 | 
			
		||||
		return GetPartialOwnInventory(client, contextId, appId, &start)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										91
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/partial.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/partial.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,91 +0,0 @@
 | 
			
		||||
package inventory
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// A partial inventory as sent by the Steam API.
 | 
			
		||||
type PartialInventory struct {
 | 
			
		||||
	Success bool
 | 
			
		||||
	Error   string
 | 
			
		||||
	Inventory
 | 
			
		||||
	More      bool
 | 
			
		||||
	MoreStart MoreStart `json:"more_start"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MoreStart uint
 | 
			
		||||
 | 
			
		||||
func (m *MoreStart) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	if bytes.Equal(data, []byte("false")) {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return json.Unmarshal(data, (*uint)(m))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DoInventoryRequest(client *http.Client, req *http.Request) (*PartialInventory, error) {
 | 
			
		||||
	resp, err := client.Do(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
 | 
			
		||||
	inv := new(PartialInventory)
 | 
			
		||||
	err = json.NewDecoder(resp.Body).Decode(inv)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return inv, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetFullInventory(getFirst func() (*PartialInventory, error), getNext func(start uint) (*PartialInventory, error)) (*Inventory, error) {
 | 
			
		||||
	first, err := getFirst()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if !first.Success {
 | 
			
		||||
		return nil, errors.New("GetFullInventory API call failed: " + first.Error)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	result := &first.Inventory
 | 
			
		||||
	var next *PartialInventory
 | 
			
		||||
	for latest := first; latest.More; latest = next {
 | 
			
		||||
		next, err := getNext(uint(latest.MoreStart))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if !next.Success {
 | 
			
		||||
			return nil, errors.New("GetFullInventory API call failed: " + next.Error)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		result = Merge(result, &next.Inventory)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Merges the given Inventory into a single Inventory.
 | 
			
		||||
// The given slice must have at least one element. The first element of the slice is used
 | 
			
		||||
// and modified.
 | 
			
		||||
func Merge(p ...*Inventory) *Inventory {
 | 
			
		||||
	inv := p[0]
 | 
			
		||||
	for idx, i := range p {
 | 
			
		||||
		if idx == 0 {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for key, value := range i.Items {
 | 
			
		||||
			inv.Items[key] = value
 | 
			
		||||
		}
 | 
			
		||||
		for key, value := range i.Descriptions {
 | 
			
		||||
			inv.Descriptions[key] = value
 | 
			
		||||
		}
 | 
			
		||||
		for key, value := range i.Currencies {
 | 
			
		||||
			inv.Currencies[key] = value
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return inv
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										295
									
								
								vendor/github.com/Philipp15b/go-steam/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										295
									
								
								vendor/github.com/Philipp15b/go-steam/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,295 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
This program generates the protobuf and SteamLanguage files from the SteamKit data.
 | 
			
		||||
*/
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go/ast"
 | 
			
		||||
	"go/parser"
 | 
			
		||||
	"go/token"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var printCommands = false
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	args := strings.Join(os.Args[1:], " ")
 | 
			
		||||
 | 
			
		||||
	found := false
 | 
			
		||||
	if strings.Contains(args, "clean") {
 | 
			
		||||
		clean()
 | 
			
		||||
		found = true
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(args, "steamlang") {
 | 
			
		||||
		buildSteamLanguage()
 | 
			
		||||
		found = true
 | 
			
		||||
	}
 | 
			
		||||
	if strings.Contains(args, "proto") {
 | 
			
		||||
		buildProto()
 | 
			
		||||
		found = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !found {
 | 
			
		||||
		os.Stderr.WriteString("Invalid target!\nAvailable targets: clean, proto, steamlang\n")
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func clean() {
 | 
			
		||||
	print("# Cleaning")
 | 
			
		||||
	cleanGlob("../protocol/**/*.pb.go")
 | 
			
		||||
	cleanGlob("../tf2/protocol/**/*.pb.go")
 | 
			
		||||
	cleanGlob("../dota/protocol/**/*.pb.go")
 | 
			
		||||
 | 
			
		||||
	os.Remove("../protocol/steamlang/enums.go")
 | 
			
		||||
	os.Remove("../protocol/steamlang/messages.go")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cleanGlob(pattern string) {
 | 
			
		||||
	protos, _ := filepath.Glob(pattern)
 | 
			
		||||
	for _, proto := range protos {
 | 
			
		||||
		err := os.Remove(proto)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func buildSteamLanguage() {
 | 
			
		||||
	print("# Building Steam Language")
 | 
			
		||||
	exePath := "./GoSteamLanguageGenerator/bin/Debug/GoSteamLanguageGenerator.exe"
 | 
			
		||||
 | 
			
		||||
	if runtime.GOOS != "windows" {
 | 
			
		||||
		execute("mono", exePath, "./SteamKit", "../protocol/steamlang")
 | 
			
		||||
	} else {
 | 
			
		||||
		execute(exePath, "./SteamKit", "../protocol/steamlang")
 | 
			
		||||
	}
 | 
			
		||||
	execute("gofmt", "-w", "../protocol/steamlang/enums.go", "../protocol/steamlang/messages.go")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func buildProto() {
 | 
			
		||||
	print("# Building Protobufs")
 | 
			
		||||
 | 
			
		||||
	buildProtoMap("steamclient", clientProtoFiles, "../protocol/protobuf")
 | 
			
		||||
	buildProtoMap("tf", tf2ProtoFiles, "../tf2/protocol/protobuf")
 | 
			
		||||
	buildProtoMap("dota", dotaProtoFiles, "../dota/protocol/protobuf")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func buildProtoMap(srcSubdir string, files map[string]string, outDir string) {
 | 
			
		||||
	os.MkdirAll(outDir, os.ModePerm)
 | 
			
		||||
	for proto, out := range files {
 | 
			
		||||
		full := filepath.Join(outDir, out)
 | 
			
		||||
		compileProto("SteamKit/Resources/Protobufs", srcSubdir, proto, full)
 | 
			
		||||
		fixProto(full)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Maps the proto files to their target files.
 | 
			
		||||
// See `SteamKit/Resources/Protobufs/steamclient/generate-base.bat` for reference.
 | 
			
		||||
var clientProtoFiles = map[string]string{
 | 
			
		||||
	"steammessages_base.proto":   "base.pb.go",
 | 
			
		||||
	"encrypted_app_ticket.proto": "app_ticket.pb.go",
 | 
			
		||||
 | 
			
		||||
	"steammessages_clientserver.proto":   "client_server.pb.go",
 | 
			
		||||
	"steammessages_clientserver_2.proto": "client_server_2.pb.go",
 | 
			
		||||
 | 
			
		||||
	"content_manifest.proto": "content_manifest.pb.go",
 | 
			
		||||
 | 
			
		||||
	"steammessages_unified_base.steamclient.proto":      "unified/base.pb.go",
 | 
			
		||||
	"steammessages_cloud.steamclient.proto":             "unified/cloud.pb.go",
 | 
			
		||||
	"steammessages_credentials.steamclient.proto":       "unified/credentials.pb.go",
 | 
			
		||||
	"steammessages_deviceauth.steamclient.proto":        "unified/deviceauth.pb.go",
 | 
			
		||||
	"steammessages_gamenotifications.steamclient.proto": "unified/gamenotifications.pb.go",
 | 
			
		||||
	"steammessages_offline.steamclient.proto":           "unified/offline.pb.go",
 | 
			
		||||
	"steammessages_parental.steamclient.proto":          "unified/parental.pb.go",
 | 
			
		||||
	"steammessages_partnerapps.steamclient.proto":       "unified/partnerapps.pb.go",
 | 
			
		||||
	"steammessages_player.steamclient.proto":            "unified/player.pb.go",
 | 
			
		||||
	"steammessages_publishedfile.steamclient.proto":     "unified/publishedfile.pb.go",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var tf2ProtoFiles = map[string]string{
 | 
			
		||||
	"base_gcmessages.proto":  "base.pb.go",
 | 
			
		||||
	"econ_gcmessages.proto":  "econ.pb.go",
 | 
			
		||||
	"gcsdk_gcmessages.proto": "gcsdk.pb.go",
 | 
			
		||||
	"tf_gcmessages.proto":    "tf.pb.go",
 | 
			
		||||
	"gcsystemmsgs.proto":     "system.pb.go",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var dotaProtoFiles = map[string]string{
 | 
			
		||||
	"base_gcmessages.proto":                "base.pb.go",
 | 
			
		||||
	"econ_gcmessages.proto":                "econ.pb.go",
 | 
			
		||||
	"gcsdk_gcmessages.proto":               "gcsdk.pb.go",
 | 
			
		||||
	"dota_gcmessages_common.proto":         "dota_common.pb.go",
 | 
			
		||||
	"dota_gcmessages_client.proto":         "dota_client.pb.go",
 | 
			
		||||
	"dota_gcmessages_client_fantasy.proto": "dota_client_fantasy.pb.go",
 | 
			
		||||
	"gcsystemmsgs.proto":                   "system.pb.go",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func compileProto(srcBase, srcSubdir, proto, target string) {
 | 
			
		||||
	outDir, _ := filepath.Split(target)
 | 
			
		||||
	err := os.MkdirAll(outDir, os.ModePerm)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	execute("protoc", "--go_out="+outDir, "-I="+srcBase+"/"+srcSubdir, "-I="+srcBase, filepath.Join(srcBase, srcSubdir, proto))
 | 
			
		||||
	out := strings.Replace(filepath.Join(outDir, proto), ".proto", ".pb.go", 1)
 | 
			
		||||
	err = forceRename(out, target)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func forceRename(from, to string) error {
 | 
			
		||||
	if from != to {
 | 
			
		||||
		os.Remove(to)
 | 
			
		||||
	}
 | 
			
		||||
	return os.Rename(from, to)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var pkgRegex = regexp.MustCompile(`(package \w+)`)
 | 
			
		||||
var pkgCommentRegex = regexp.MustCompile(`(?s)(\/\*.*?\*\/\n)package`)
 | 
			
		||||
var unusedImportCommentRegex = regexp.MustCompile("// discarding unused import .*\n")
 | 
			
		||||
var fileDescriptorVarRegex = regexp.MustCompile(`fileDescriptor\d+`)
 | 
			
		||||
 | 
			
		||||
func fixProto(path string) {
 | 
			
		||||
	// goprotobuf is really bad at dependencies, so we must fix them manually...
 | 
			
		||||
	// It tries to load each dependency of a file as a seperate package (but in a very, very wrong way).
 | 
			
		||||
	// Because we want some files in the same package, we'll remove those imports to local files.
 | 
			
		||||
 | 
			
		||||
	file, err := ioutil.ReadFile(path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fset := token.NewFileSet()
 | 
			
		||||
	f, err := parser.ParseFile(fset, path, file, parser.ImportsOnly)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic("Error parsing " + path + ": " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	importsToRemove := make([]*ast.ImportSpec, 0)
 | 
			
		||||
	for _, i := range f.Imports {
 | 
			
		||||
		// We remove all local imports
 | 
			
		||||
		if i.Path.Value == "\".\"" {
 | 
			
		||||
			importsToRemove = append(importsToRemove, i)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, itr := range importsToRemove {
 | 
			
		||||
		// remove the package name from all types
 | 
			
		||||
		file = bytes.Replace(file, []byte(itr.Name.Name+"."), []byte{}, -1)
 | 
			
		||||
		// and remove the import itself
 | 
			
		||||
		file = bytes.Replace(file, []byte(fmt.Sprintf("import %v %v\n", itr.Name.Name, itr.Path.Value)), []byte{}, -1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// remove the package comment because it just includes a list of all messages and
 | 
			
		||||
	// collides not only with the other compiled protobuf files, but also our own documentation.
 | 
			
		||||
	file = cutAllSubmatch(pkgCommentRegex, file, 1)
 | 
			
		||||
 | 
			
		||||
	// remove warnings
 | 
			
		||||
	file = unusedImportCommentRegex.ReplaceAllLiteral(file, []byte{})
 | 
			
		||||
 | 
			
		||||
	// fix the package name
 | 
			
		||||
	file = pkgRegex.ReplaceAll(file, []byte("package "+inferPackageName(path)))
 | 
			
		||||
 | 
			
		||||
	// fix the google dependency;
 | 
			
		||||
	// we just reuse the one from protoc-gen-go
 | 
			
		||||
	file = bytes.Replace(file, []byte("google/protobuf"), []byte("github.com/golang/protobuf/protoc-gen-go/descriptor"), -1)
 | 
			
		||||
 | 
			
		||||
	// we need to prefix local variables created by protoc-gen-go so that they don't clash with others in the same package
 | 
			
		||||
	filename := strings.Split(filepath.Base(path), ".")[0]
 | 
			
		||||
	file = fileDescriptorVarRegex.ReplaceAllFunc(file, func(match []byte) []byte {
 | 
			
		||||
		return []byte(filename + "_" + string(match))
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	err = ioutil.WriteFile(path, file, os.ModePerm)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func inferPackageName(path string) string {
 | 
			
		||||
	pieces := strings.Split(path, string(filepath.Separator))
 | 
			
		||||
	return pieces[len(pieces)-2]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func cutAllSubmatch(r *regexp.Regexp, b []byte, n int) []byte {
 | 
			
		||||
	i := r.FindSubmatchIndex(b)
 | 
			
		||||
	return bytesCut(b, i[2*n], i[2*n+1])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Removes the given section from the byte array
 | 
			
		||||
func bytesCut(b []byte, from, to int) []byte {
 | 
			
		||||
	buf := new(bytes.Buffer)
 | 
			
		||||
	buf.Write(b[:from])
 | 
			
		||||
	buf.Write(b[to:])
 | 
			
		||||
	return buf.Bytes()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func print(text string) { os.Stdout.WriteString(text + "\n") }
 | 
			
		||||
 | 
			
		||||
func printerr(text string) { os.Stderr.WriteString(text + "\n") }
 | 
			
		||||
 | 
			
		||||
// This writer appends a "> " after every newline so that the outpout appears quoted.
 | 
			
		||||
type QuotedWriter struct {
 | 
			
		||||
	w       io.Writer
 | 
			
		||||
	started bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewQuotedWriter(w io.Writer) *QuotedWriter {
 | 
			
		||||
	return &QuotedWriter{w, false}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *QuotedWriter) Write(p []byte) (n int, err error) {
 | 
			
		||||
	if !w.started {
 | 
			
		||||
		_, err = w.w.Write([]byte("> "))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return n, err
 | 
			
		||||
		}
 | 
			
		||||
		w.started = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, c := range p {
 | 
			
		||||
		if c == '\n' {
 | 
			
		||||
			nw, err := w.w.Write(p[n : i+1])
 | 
			
		||||
			n += nw
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return n, err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			_, err = w.w.Write([]byte("> "))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return n, err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if n != len(p) {
 | 
			
		||||
		nw, err := w.w.Write(p[n:len(p)])
 | 
			
		||||
		n += nw
 | 
			
		||||
		return n, err
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func execute(command string, args ...string) {
 | 
			
		||||
	if printCommands {
 | 
			
		||||
		print(command + " " + strings.Join(args, " "))
 | 
			
		||||
	}
 | 
			
		||||
	cmd := exec.Command(command, args...)
 | 
			
		||||
	cmd.Stdout = NewQuotedWriter(os.Stdout)
 | 
			
		||||
	cmd.Stderr = NewQuotedWriter(os.Stderr)
 | 
			
		||||
	err := cmd.Run()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		printerr(err.Error())
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										210
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										210
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,210 +0,0 @@
 | 
			
		||||
// The GsBot package contains some useful utilites for working with the
 | 
			
		||||
// steam package. It implements authentication with sentries, server lists and
 | 
			
		||||
// logging messages and events.
 | 
			
		||||
//
 | 
			
		||||
// Every module is optional and requires an instance of the GsBot struct.
 | 
			
		||||
// Should a module have a `HandlePacket` method, you must register it with the
 | 
			
		||||
// steam.Client with `RegisterPacketHandler`. Any module with a `HandleEvent`
 | 
			
		||||
// method must be integrated into your event loop and should be called for each
 | 
			
		||||
// event you receive.
 | 
			
		||||
package gsbot
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"net"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Philipp15b/go-steam"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/netutil"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/protocol"
 | 
			
		||||
	"github.com/davecgh/go-spew/spew"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Base structure holding common data among GsBot modules.
 | 
			
		||||
type GsBot struct {
 | 
			
		||||
	Client *steam.Client
 | 
			
		||||
	Log    *log.Logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Creates a new GsBot with a new steam.Client where logs are written to stdout.
 | 
			
		||||
func Default() *GsBot {
 | 
			
		||||
	return &GsBot{
 | 
			
		||||
		steam.NewClient(),
 | 
			
		||||
		log.New(os.Stdout, "", 0),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This module handles authentication. It logs on automatically after a ConnectedEvent
 | 
			
		||||
// and saves the sentry data to a file which is also used for logon if available.
 | 
			
		||||
// If you're logging on for the first time Steam may require an authcode. You can then
 | 
			
		||||
// connect again with the new logon details.
 | 
			
		||||
type Auth struct {
 | 
			
		||||
	bot             *GsBot
 | 
			
		||||
	details         *LogOnDetails
 | 
			
		||||
	sentryPath      string
 | 
			
		||||
	machineAuthHash []byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewAuth(bot *GsBot, details *LogOnDetails, sentryPath string) *Auth {
 | 
			
		||||
	return &Auth{
 | 
			
		||||
		bot:        bot,
 | 
			
		||||
		details:    details,
 | 
			
		||||
		sentryPath: sentryPath,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type LogOnDetails struct {
 | 
			
		||||
	Username      string
 | 
			
		||||
	Password      string
 | 
			
		||||
	AuthCode      string
 | 
			
		||||
	TwoFactorCode string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is called automatically after every ConnectedEvent, but must be called once again manually
 | 
			
		||||
// with an authcode if Steam requires it when logging on for the first time.
 | 
			
		||||
func (a *Auth) LogOn(details *LogOnDetails) {
 | 
			
		||||
	a.details = details
 | 
			
		||||
	sentry, err := ioutil.ReadFile(a.sentryPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		a.bot.Log.Printf("Error loading sentry file from path %v - This is normal if you're logging in for the first time.\n", a.sentryPath)
 | 
			
		||||
	}
 | 
			
		||||
	a.bot.Client.Auth.LogOn(&steam.LogOnDetails{
 | 
			
		||||
		Username:       details.Username,
 | 
			
		||||
		Password:       details.Password,
 | 
			
		||||
		SentryFileHash: sentry,
 | 
			
		||||
		AuthCode:       details.AuthCode,
 | 
			
		||||
		TwoFactorCode:  details.TwoFactorCode,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *Auth) HandleEvent(event interface{}) {
 | 
			
		||||
	switch e := event.(type) {
 | 
			
		||||
	case *steam.ConnectedEvent:
 | 
			
		||||
		a.LogOn(a.details)
 | 
			
		||||
	case *steam.LoggedOnEvent:
 | 
			
		||||
		a.bot.Log.Printf("Logged on (%v) with SteamId %v and account flags %v", e.Result, e.ClientSteamId, e.AccountFlags)
 | 
			
		||||
	case *steam.MachineAuthUpdateEvent:
 | 
			
		||||
		a.machineAuthHash = e.Hash
 | 
			
		||||
		err := ioutil.WriteFile(a.sentryPath, e.Hash, 0666)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This module saves the server list from ClientCMListEvent and uses
 | 
			
		||||
// it when you call `Connect()`.
 | 
			
		||||
type ServerList struct {
 | 
			
		||||
	bot      *GsBot
 | 
			
		||||
	listPath string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewServerList(bot *GsBot, listPath string) *ServerList {
 | 
			
		||||
	return &ServerList{
 | 
			
		||||
		bot,
 | 
			
		||||
		listPath,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ServerList) HandleEvent(event interface{}) {
 | 
			
		||||
	switch e := event.(type) {
 | 
			
		||||
	case *steam.ClientCMListEvent:
 | 
			
		||||
		d, err := json.Marshal(e.Addresses)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		err = ioutil.WriteFile(s.listPath, d, 0666)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ServerList) Connect() (bool, error) {
 | 
			
		||||
	return s.ConnectBind(nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ServerList) ConnectBind(laddr *net.TCPAddr) (bool, error) {
 | 
			
		||||
	d, err := ioutil.ReadFile(s.listPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		s.bot.Log.Println("Connecting to random server.")
 | 
			
		||||
		s.bot.Client.Connect()
 | 
			
		||||
		return false, nil
 | 
			
		||||
	}
 | 
			
		||||
	var addrs []*netutil.PortAddr
 | 
			
		||||
	err = json.Unmarshal(d, &addrs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false, err
 | 
			
		||||
	}
 | 
			
		||||
	raddr := addrs[rand.Intn(len(addrs))]
 | 
			
		||||
	s.bot.Log.Printf("Connecting to %v from server list\n", raddr)
 | 
			
		||||
	s.bot.Client.ConnectToBind(raddr, laddr)
 | 
			
		||||
	return true, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This module logs incoming packets and events to a directory.
 | 
			
		||||
type Debug struct {
 | 
			
		||||
	packetId, eventId uint64
 | 
			
		||||
	bot               *GsBot
 | 
			
		||||
	base              string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewDebug(bot *GsBot, base string) (*Debug, error) {
 | 
			
		||||
	base = path.Join(base, fmt.Sprint(time.Now().Unix()))
 | 
			
		||||
	err := os.MkdirAll(path.Join(base, "events"), 0700)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	err = os.MkdirAll(path.Join(base, "packets"), 0700)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &Debug{
 | 
			
		||||
		0, 0,
 | 
			
		||||
		bot,
 | 
			
		||||
		base,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *Debug) HandlePacket(packet *protocol.Packet) {
 | 
			
		||||
	d.packetId++
 | 
			
		||||
	name := path.Join(d.base, "packets", fmt.Sprintf("%d_%d_%s", time.Now().Unix(), d.packetId, packet.EMsg))
 | 
			
		||||
 | 
			
		||||
	text := packet.String() + "\n\n" + hex.Dump(packet.Data)
 | 
			
		||||
	err := ioutil.WriteFile(name+".txt", []byte(text), 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = ioutil.WriteFile(name+".bin", packet.Data, 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *Debug) HandleEvent(event interface{}) {
 | 
			
		||||
	d.eventId++
 | 
			
		||||
	name := fmt.Sprintf("%d_%d_%s.txt", time.Now().Unix(), d.eventId, name(event))
 | 
			
		||||
	err := ioutil.WriteFile(path.Join(d.base, "events", name), []byte(spew.Sdump(event)), 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func name(obj interface{}) string {
 | 
			
		||||
	val := reflect.ValueOf(obj)
 | 
			
		||||
	ind := reflect.Indirect(val)
 | 
			
		||||
	if ind.IsValid() {
 | 
			
		||||
		return ind.Type().Name()
 | 
			
		||||
	} else {
 | 
			
		||||
		return val.Type().Name()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,56 +0,0 @@
 | 
			
		||||
// A simple example that uses the modules from the gsbot package and go-steam to log on
 | 
			
		||||
// to the Steam network.
 | 
			
		||||
//
 | 
			
		||||
// The command expects log on data, optionally with an auth code:
 | 
			
		||||
//
 | 
			
		||||
//     gsbot [username] [password]
 | 
			
		||||
//     gsbot [username] [password] [authcode]
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"github.com/Philipp15b/go-steam"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/gsbot"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/protocol/steamlang"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if len(os.Args) < 3 {
 | 
			
		||||
		fmt.Println("gsbot example\nusage: \n\tgsbot [username] [password] [authcode]")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	authcode := ""
 | 
			
		||||
	if len(os.Args) > 3 {
 | 
			
		||||
		authcode = os.Args[3]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bot := gsbot.Default()
 | 
			
		||||
	client := bot.Client
 | 
			
		||||
	auth := gsbot.NewAuth(bot, &gsbot.LogOnDetails{
 | 
			
		||||
		os.Args[1],
 | 
			
		||||
		os.Args[2],
 | 
			
		||||
		authcode,
 | 
			
		||||
	}, "sentry.bin")
 | 
			
		||||
	debug, err := gsbot.NewDebug(bot, "debug")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	client.RegisterPacketHandler(debug)
 | 
			
		||||
	serverList := gsbot.NewServerList(bot, "serverlist.json")
 | 
			
		||||
	serverList.Connect()
 | 
			
		||||
 | 
			
		||||
	for event := range client.Events() {
 | 
			
		||||
		auth.HandleEvent(event)
 | 
			
		||||
		debug.HandleEvent(event)
 | 
			
		||||
		serverList.HandleEvent(event)
 | 
			
		||||
 | 
			
		||||
		switch e := event.(type) {
 | 
			
		||||
		case error:
 | 
			
		||||
			fmt.Printf("Error: %v", e)
 | 
			
		||||
		case *steam.LoggedOnEvent:
 | 
			
		||||
			client.Social.SetPersonaState(steamlang.EPersonaState_Online)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/jsont/jsont.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/jsont/jsont.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
// Includes helper types for working with JSON data
 | 
			
		||||
package jsont
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// A boolean value that can be unmarshaled from a number in JSON.
 | 
			
		||||
type UintBool bool
 | 
			
		||||
 | 
			
		||||
func (u *UintBool) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	var n uint
 | 
			
		||||
	err := json.Unmarshal(data, &n)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*u = n != 0
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										141
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										141
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,141 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_unified_base.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type EProtoExecutionSite int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EProtoExecutionSite_k_EProtoExecutionSiteUnknown     EProtoExecutionSite = 0
 | 
			
		||||
	EProtoExecutionSite_k_EProtoExecutionSiteSteamClient EProtoExecutionSite = 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EProtoExecutionSite_name = map[int32]string{
 | 
			
		||||
	0: "k_EProtoExecutionSiteUnknown",
 | 
			
		||||
	2: "k_EProtoExecutionSiteSteamClient",
 | 
			
		||||
}
 | 
			
		||||
var EProtoExecutionSite_value = map[string]int32{
 | 
			
		||||
	"k_EProtoExecutionSiteUnknown":     0,
 | 
			
		||||
	"k_EProtoExecutionSiteSteamClient": 2,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EProtoExecutionSite) Enum() *EProtoExecutionSite {
 | 
			
		||||
	p := new(EProtoExecutionSite)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EProtoExecutionSite) String() string {
 | 
			
		||||
	return proto.EnumName(EProtoExecutionSite_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EProtoExecutionSite) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EProtoExecutionSite_value, data, "EProtoExecutionSite")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EProtoExecutionSite(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EProtoExecutionSite) EnumDescriptor() ([]byte, []int) { return base_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
type NoResponse struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *NoResponse) Reset()                    { *m = NoResponse{} }
 | 
			
		||||
func (m *NoResponse) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*NoResponse) ProtoMessage()               {}
 | 
			
		||||
func (*NoResponse) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
var E_Description = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
 | 
			
		||||
	ExtensionType: (*string)(nil),
 | 
			
		||||
	Field:         50000,
 | 
			
		||||
	Name:          "description",
 | 
			
		||||
	Tag:           "bytes,50000,opt,name=description",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var E_ServiceDescription = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.ServiceOptions)(nil),
 | 
			
		||||
	ExtensionType: (*string)(nil),
 | 
			
		||||
	Field:         50000,
 | 
			
		||||
	Name:          "service_description",
 | 
			
		||||
	Tag:           "bytes,50000,opt,name=service_description",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var E_ServiceExecutionSite = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.ServiceOptions)(nil),
 | 
			
		||||
	ExtensionType: (*EProtoExecutionSite)(nil),
 | 
			
		||||
	Field:         50008,
 | 
			
		||||
	Name:          "service_execution_site",
 | 
			
		||||
	Tag:           "varint,50008,opt,name=service_execution_site,enum=EProtoExecutionSite,def=0",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var E_MethodDescription = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.MethodOptions)(nil),
 | 
			
		||||
	ExtensionType: (*string)(nil),
 | 
			
		||||
	Field:         50000,
 | 
			
		||||
	Name:          "method_description",
 | 
			
		||||
	Tag:           "bytes,50000,opt,name=method_description",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var E_EnumDescription = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.EnumOptions)(nil),
 | 
			
		||||
	ExtensionType: (*string)(nil),
 | 
			
		||||
	Field:         50000,
 | 
			
		||||
	Name:          "enum_description",
 | 
			
		||||
	Tag:           "bytes,50000,opt,name=enum_description",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var E_EnumValueDescription = &proto.ExtensionDesc{
 | 
			
		||||
	ExtendedType:  (*google_protobuf.EnumValueOptions)(nil),
 | 
			
		||||
	ExtensionType: (*string)(nil),
 | 
			
		||||
	Field:         50000,
 | 
			
		||||
	Name:          "enum_value_description",
 | 
			
		||||
	Tag:           "bytes,50000,opt,name=enum_value_description",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*NoResponse)(nil), "NoResponse")
 | 
			
		||||
	proto.RegisterEnum("EProtoExecutionSite", EProtoExecutionSite_name, EProtoExecutionSite_value)
 | 
			
		||||
	proto.RegisterExtension(E_Description)
 | 
			
		||||
	proto.RegisterExtension(E_ServiceDescription)
 | 
			
		||||
	proto.RegisterExtension(E_ServiceExecutionSite)
 | 
			
		||||
	proto.RegisterExtension(E_MethodDescription)
 | 
			
		||||
	proto.RegisterExtension(E_EnumDescription)
 | 
			
		||||
	proto.RegisterExtension(E_EnumValueDescription)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var base_fileDescriptor0 = []byte{
 | 
			
		||||
	// 306 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x90, 0x4d, 0x4b, 0xc3, 0x40,
 | 
			
		||||
	0x10, 0x86, 0x1b, 0xc5, 0x83, 0xa3, 0x48, 0x48, 0xa5, 0x88, 0x54, 0x8d, 0xe2, 0x41, 0x44, 0xb6,
 | 
			
		||||
	0x20, 0x1e, 0x24, 0x88, 0x07, 0x4b, 0xc4, 0x8b, 0x1f, 0x18, 0xf4, 0x26, 0x21, 0x4d, 0xa6, 0x71,
 | 
			
		||||
	0x69, 0xb2, 0x1b, 0xb2, 0xbb, 0xd5, 0xa3, 0x27, 0x7f, 0x9f, 0x47, 0x7f, 0x8e, 0xcd, 0x86, 0x80,
 | 
			
		||||
	0xf9, 0x40, 0x8f, 0xc9, 0xfb, 0x3e, 0xb3, 0xcf, 0x0c, 0x9c, 0x08, 0x89, 0x41, 0x9a, 0xa2, 0x10,
 | 
			
		||||
	0x41, 0x8c, 0xc2, 0x57, 0x8c, 0x4e, 0x29, 0x46, 0xfe, 0x24, 0x10, 0x48, 0x74, 0x14, 0x26, 0x14,
 | 
			
		||||
	0x99, 0x24, 0x59, 0xce, 0x25, 0xdf, 0xb6, 0x63, 0xce, 0xe3, 0x04, 0x47, 0xfa, 0x6b, 0xa2, 0xa6,
 | 
			
		||||
	0xa3, 0x08, 0x45, 0x98, 0xd3, 0x4c, 0xf2, 0xbc, 0x6c, 0x1c, 0xac, 0x03, 0xdc, 0xf1, 0x47, 0x14,
 | 
			
		||||
	0x19, 0x67, 0x02, 0x8f, 0x5f, 0xa0, 0xef, 0x3e, 0x14, 0xff, 0xdd, 0x77, 0x0c, 0x95, 0xa4, 0x9c,
 | 
			
		||||
	0x79, 0x54, 0xa2, 0x65, 0xc3, 0x70, 0xe6, 0x77, 0x04, 0x4f, 0x6c, 0xc6, 0xf8, 0x1b, 0x33, 0x7b,
 | 
			
		||||
	0xd6, 0x21, 0xd8, 0x9d, 0x0d, 0xaf, 0x50, 0x1a, 0x6b, 0x25, 0x73, 0xc9, 0x39, 0x83, 0xb5, 0x4a,
 | 
			
		||||
	0x60, 0x91, 0x5b, 0x3b, 0xa4, 0xd4, 0x23, 0x95, 0x1e, 0xb9, 0xa6, 0x98, 0x44, 0xf7, 0x3a, 0x15,
 | 
			
		||||
	0x5b, 0x5f, 0x9f, 0xcb, 0xb6, 0x71, 0xb4, 0xea, 0x5c, 0x42, 0x5f, 0x60, 0x3e, 0xa7, 0x21, 0xfa,
 | 
			
		||||
	0xbf, 0xe9, 0xbd, 0x16, 0xed, 0x95, 0xad, 0x26, 0xaf, 0x60, 0x50, 0xf1, 0x58, 0xb9, 0xf9, 0xa2,
 | 
			
		||||
	0xd8, 0xeb, 0xdf, 0x11, 0xdf, 0x7a, 0xc4, 0xc6, 0xe9, 0x26, 0xe9, 0xd8, 0xcd, 0xf9, 0xf3, 0x28,
 | 
			
		||||
	0xce, 0x05, 0x58, 0x29, 0xca, 0x57, 0x1e, 0xd5, 0xac, 0x77, 0x5b, 0x4f, 0xde, 0xea, 0x52, 0x53,
 | 
			
		||||
	0xfa, 0x1c, 0x4c, 0x64, 0x2a, 0xad, 0xb1, 0xc3, 0x16, 0xeb, 0x2e, 0x2a, 0x4d, 0x72, 0x0c, 0x03,
 | 
			
		||||
	0x4d, 0xce, 0x83, 0x44, 0xd5, 0x2f, 0xb6, 0xdf, 0xc9, 0x3f, 0x17, 0xbd, 0xc6, 0x90, 0xab, 0x95,
 | 
			
		||||
	0x1b, 0xe3, 0xc3, 0xe8, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xf6, 0x07, 0xbb, 0x6e, 0x02,
 | 
			
		||||
	0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1424
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/cloud.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1424
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/cloud.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										874
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/credentials.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										874
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/credentials.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,874 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_credentials.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type CCredentials_TestAvailablePassword_Request struct {
 | 
			
		||||
	Password          *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	ShaDigestPassword []byte  `protobuf:"bytes,2,opt,name=sha_digest_password" json:"sha_digest_password,omitempty"`
 | 
			
		||||
	AccountName       *string `protobuf:"bytes,3,opt,name=account_name" json:"account_name,omitempty"`
 | 
			
		||||
	XXX_unrecognized  []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_TestAvailablePassword_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_TestAvailablePassword_Request) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_TestAvailablePassword_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Request) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Request) GetShaDigestPassword() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.ShaDigestPassword
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Request) GetAccountName() string {
 | 
			
		||||
	if m != nil && m.AccountName != nil {
 | 
			
		||||
		return *m.AccountName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_TestAvailablePassword_Response struct {
 | 
			
		||||
	IsValid          *bool  `protobuf:"varint,3,opt,name=is_valid" json:"is_valid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_TestAvailablePassword_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_TestAvailablePassword_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_TestAvailablePassword_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_TestAvailablePassword_Response) GetIsValid() bool {
 | 
			
		||||
	if m != nil && m.IsValid != nil {
 | 
			
		||||
		return *m.IsValid
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetSteamGuardDetails_Request struct {
 | 
			
		||||
	IncludeNewAuthentications *bool   `protobuf:"varint,1,opt,name=include_new_authentications,def=1" json:"include_new_authentications,omitempty"`
 | 
			
		||||
	Webcookie                 *string `protobuf:"bytes,2,opt,name=webcookie" json:"webcookie,omitempty"`
 | 
			
		||||
	TimestampMinimumWanted    *uint32 `protobuf:"fixed32,3,opt,name=timestamp_minimum_wanted" json:"timestamp_minimum_wanted,omitempty"`
 | 
			
		||||
	Ipaddress                 *int32  `protobuf:"varint,4,opt,name=ipaddress" json:"ipaddress,omitempty"`
 | 
			
		||||
	XXX_unrecognized          []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_GetSteamGuardDetails_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Default_CCredentials_GetSteamGuardDetails_Request_IncludeNewAuthentications bool = true
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) GetIncludeNewAuthentications() bool {
 | 
			
		||||
	if m != nil && m.IncludeNewAuthentications != nil {
 | 
			
		||||
		return *m.IncludeNewAuthentications
 | 
			
		||||
	}
 | 
			
		||||
	return Default_CCredentials_GetSteamGuardDetails_Request_IncludeNewAuthentications
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) GetWebcookie() string {
 | 
			
		||||
	if m != nil && m.Webcookie != nil {
 | 
			
		||||
		return *m.Webcookie
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) GetTimestampMinimumWanted() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampMinimumWanted != nil {
 | 
			
		||||
		return *m.TimestampMinimumWanted
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Request) GetIpaddress() int32 {
 | 
			
		||||
	if m != nil && m.Ipaddress != nil {
 | 
			
		||||
		return *m.Ipaddress
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetSteamGuardDetails_Response struct {
 | 
			
		||||
	IsSteamguardEnabled                                   *bool                                                           `protobuf:"varint,1,opt,name=is_steamguard_enabled" json:"is_steamguard_enabled,omitempty"`
 | 
			
		||||
	TimestampSteamguardEnabled                            *uint32                                                         `protobuf:"fixed32,2,opt,name=timestamp_steamguard_enabled" json:"timestamp_steamguard_enabled,omitempty"`
 | 
			
		||||
	DeprecatedNewauthentication                           []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication `protobuf:"bytes,3,rep,name=deprecated_newauthentication" json:"deprecated_newauthentication,omitempty"`
 | 
			
		||||
	DeprecatedMachineNameUserchosen                       *string                                                         `protobuf:"bytes,4,opt,name=deprecated_machine_name_userchosen" json:"deprecated_machine_name_userchosen,omitempty"`
 | 
			
		||||
	DeprecatedTimestampMachineSteamguardEnabled           *uint32                                                         `protobuf:"fixed32,5,opt,name=deprecated_timestamp_machine_steamguard_enabled" json:"deprecated_timestamp_machine_steamguard_enabled,omitempty"`
 | 
			
		||||
	DeprecatedAuthenticationExistsFromGeolocBeforeMintime *bool                                                           `protobuf:"varint,6,opt,name=deprecated_authentication_exists_from_geoloc_before_mintime" json:"deprecated_authentication_exists_from_geoloc_before_mintime,omitempty"`
 | 
			
		||||
	DeprecatedMachineId                                   *uint64                                                         `protobuf:"varint,7,opt,name=deprecated_machine_id" json:"deprecated_machine_id,omitempty"`
 | 
			
		||||
	SessionData                                           []*CCredentials_GetSteamGuardDetails_Response_SessionData       `protobuf:"bytes,8,rep,name=session_data" json:"session_data,omitempty"`
 | 
			
		||||
	IsTwofactorEnabled                                    *bool                                                           `protobuf:"varint,9,opt,name=is_twofactor_enabled" json:"is_twofactor_enabled,omitempty"`
 | 
			
		||||
	TimestampTwofactorEnabled                             *uint32                                                         `protobuf:"fixed32,10,opt,name=timestamp_twofactor_enabled" json:"timestamp_twofactor_enabled,omitempty"`
 | 
			
		||||
	IsPhoneVerified                                       *bool                                                           `protobuf:"varint,11,opt,name=is_phone_verified" json:"is_phone_verified,omitempty"`
 | 
			
		||||
	XXX_unrecognized                                      []byte                                                          `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_GetSteamGuardDetails_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetIsSteamguardEnabled() bool {
 | 
			
		||||
	if m != nil && m.IsSteamguardEnabled != nil {
 | 
			
		||||
		return *m.IsSteamguardEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetTimestampSteamguardEnabled() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampSteamguardEnabled != nil {
 | 
			
		||||
		return *m.TimestampSteamguardEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedNewauthentication() []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.DeprecatedNewauthentication
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedMachineNameUserchosen() string {
 | 
			
		||||
	if m != nil && m.DeprecatedMachineNameUserchosen != nil {
 | 
			
		||||
		return *m.DeprecatedMachineNameUserchosen
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedTimestampMachineSteamguardEnabled() uint32 {
 | 
			
		||||
	if m != nil && m.DeprecatedTimestampMachineSteamguardEnabled != nil {
 | 
			
		||||
		return *m.DeprecatedTimestampMachineSteamguardEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedAuthenticationExistsFromGeolocBeforeMintime() bool {
 | 
			
		||||
	if m != nil && m.DeprecatedAuthenticationExistsFromGeolocBeforeMintime != nil {
 | 
			
		||||
		return *m.DeprecatedAuthenticationExistsFromGeolocBeforeMintime
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedMachineId() uint64 {
 | 
			
		||||
	if m != nil && m.DeprecatedMachineId != nil {
 | 
			
		||||
		return *m.DeprecatedMachineId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetSessionData() []*CCredentials_GetSteamGuardDetails_Response_SessionData {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SessionData
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetIsTwofactorEnabled() bool {
 | 
			
		||||
	if m != nil && m.IsTwofactorEnabled != nil {
 | 
			
		||||
		return *m.IsTwofactorEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetTimestampTwofactorEnabled() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampTwofactorEnabled != nil {
 | 
			
		||||
		return *m.TimestampTwofactorEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response) GetIsPhoneVerified() bool {
 | 
			
		||||
	if m != nil && m.IsPhoneVerified != nil {
 | 
			
		||||
		return *m.IsPhoneVerified
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetSteamGuardDetails_Response_NewAuthentication struct {
 | 
			
		||||
	TimestampSteamguardEnabled *uint32 `protobuf:"fixed32,1,opt,name=timestamp_steamguard_enabled" json:"timestamp_steamguard_enabled,omitempty"`
 | 
			
		||||
	IsWebCookie                *bool   `protobuf:"varint,2,opt,name=is_web_cookie" json:"is_web_cookie,omitempty"`
 | 
			
		||||
	Ipaddress                  *int32  `protobuf:"varint,3,opt,name=ipaddress" json:"ipaddress,omitempty"`
 | 
			
		||||
	GeolocInfo                 *string `protobuf:"bytes,4,opt,name=geoloc_info" json:"geoloc_info,omitempty"`
 | 
			
		||||
	IsRemembered               *bool   `protobuf:"varint,5,opt,name=is_remembered" json:"is_remembered,omitempty"`
 | 
			
		||||
	MachineNameUserSupplied    *string `protobuf:"bytes,6,opt,name=machine_name_user_supplied" json:"machine_name_user_supplied,omitempty"`
 | 
			
		||||
	Status                     *int32  `protobuf:"varint,7,opt,name=status" json:"status,omitempty"`
 | 
			
		||||
	XXX_unrecognized           []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) Reset() {
 | 
			
		||||
	*m = CCredentials_GetSteamGuardDetails_Response_NewAuthentication{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response_NewAuthentication) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response_NewAuthentication) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{3, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetTimestampSteamguardEnabled() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampSteamguardEnabled != nil {
 | 
			
		||||
		return *m.TimestampSteamguardEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIsWebCookie() bool {
 | 
			
		||||
	if m != nil && m.IsWebCookie != nil {
 | 
			
		||||
		return *m.IsWebCookie
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIpaddress() int32 {
 | 
			
		||||
	if m != nil && m.Ipaddress != nil {
 | 
			
		||||
		return *m.Ipaddress
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetGeolocInfo() string {
 | 
			
		||||
	if m != nil && m.GeolocInfo != nil {
 | 
			
		||||
		return *m.GeolocInfo
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIsRemembered() bool {
 | 
			
		||||
	if m != nil && m.IsRemembered != nil {
 | 
			
		||||
		return *m.IsRemembered
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetMachineNameUserSupplied() string {
 | 
			
		||||
	if m != nil && m.MachineNameUserSupplied != nil {
 | 
			
		||||
		return *m.MachineNameUserSupplied
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetStatus() int32 {
 | 
			
		||||
	if m != nil && m.Status != nil {
 | 
			
		||||
		return *m.Status
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetSteamGuardDetails_Response_SessionData struct {
 | 
			
		||||
	MachineId                                   *uint64                                                         `protobuf:"varint,1,opt,name=machine_id" json:"machine_id,omitempty"`
 | 
			
		||||
	MachineNameUserchosen                       *string                                                         `protobuf:"bytes,2,opt,name=machine_name_userchosen" json:"machine_name_userchosen,omitempty"`
 | 
			
		||||
	TimestampMachineSteamguardEnabled           *uint32                                                         `protobuf:"fixed32,3,opt,name=timestamp_machine_steamguard_enabled" json:"timestamp_machine_steamguard_enabled,omitempty"`
 | 
			
		||||
	AuthenticationExistsFromGeolocBeforeMintime *bool                                                           `protobuf:"varint,4,opt,name=authentication_exists_from_geoloc_before_mintime" json:"authentication_exists_from_geoloc_before_mintime,omitempty"`
 | 
			
		||||
	Newauthentication                           []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication `protobuf:"bytes,5,rep,name=newauthentication" json:"newauthentication,omitempty"`
 | 
			
		||||
	AuthenticationExistsFromSameIpBeforeMintime *bool                                                           `protobuf:"varint,6,opt,name=authentication_exists_from_same_ip_before_mintime" json:"authentication_exists_from_same_ip_before_mintime,omitempty"`
 | 
			
		||||
	PublicIpv4                                  *uint32                                                         `protobuf:"varint,7,opt,name=public_ipv4" json:"public_ipv4,omitempty"`
 | 
			
		||||
	XXX_unrecognized                            []byte                                                          `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) Reset() {
 | 
			
		||||
	*m = CCredentials_GetSteamGuardDetails_Response_SessionData{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response_SessionData) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_GetSteamGuardDetails_Response_SessionData) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{3, 1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetMachineId() uint64 {
 | 
			
		||||
	if m != nil && m.MachineId != nil {
 | 
			
		||||
		return *m.MachineId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetMachineNameUserchosen() string {
 | 
			
		||||
	if m != nil && m.MachineNameUserchosen != nil {
 | 
			
		||||
		return *m.MachineNameUserchosen
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetTimestampMachineSteamguardEnabled() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampMachineSteamguardEnabled != nil {
 | 
			
		||||
		return *m.TimestampMachineSteamguardEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetAuthenticationExistsFromGeolocBeforeMintime() bool {
 | 
			
		||||
	if m != nil && m.AuthenticationExistsFromGeolocBeforeMintime != nil {
 | 
			
		||||
		return *m.AuthenticationExistsFromGeolocBeforeMintime
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetNewauthentication() []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Newauthentication
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetAuthenticationExistsFromSameIpBeforeMintime() bool {
 | 
			
		||||
	if m != nil && m.AuthenticationExistsFromSameIpBeforeMintime != nil {
 | 
			
		||||
		return *m.AuthenticationExistsFromSameIpBeforeMintime
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetPublicIpv4() uint32 {
 | 
			
		||||
	if m != nil && m.PublicIpv4 != nil {
 | 
			
		||||
		return *m.PublicIpv4
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_NewMachineNotificationDialog_Request struct {
 | 
			
		||||
	IsApproved       *bool  `protobuf:"varint,1,opt,name=is_approved" json:"is_approved,omitempty"`
 | 
			
		||||
	IsWizardComplete *bool  `protobuf:"varint,2,opt,name=is_wizard_complete" json:"is_wizard_complete,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_NewMachineNotificationDialog_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_NewMachineNotificationDialog_Request) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_NewMachineNotificationDialog_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Request) GetIsApproved() bool {
 | 
			
		||||
	if m != nil && m.IsApproved != nil {
 | 
			
		||||
		return *m.IsApproved
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Request) GetIsWizardComplete() bool {
 | 
			
		||||
	if m != nil && m.IsWizardComplete != nil {
 | 
			
		||||
		return *m.IsWizardComplete
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_NewMachineNotificationDialog_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_NewMachineNotificationDialog_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_NewMachineNotificationDialog_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_NewMachineNotificationDialog_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_NewMachineNotificationDialog_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_ValidateEmailAddress_Request struct {
 | 
			
		||||
	Stoken           *string `protobuf:"bytes,1,opt,name=stoken" json:"stoken,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_ValidateEmailAddress_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CCredentials_ValidateEmailAddress_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CCredentials_ValidateEmailAddress_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Request) GetStoken() string {
 | 
			
		||||
	if m != nil && m.Stoken != nil {
 | 
			
		||||
		return *m.Stoken
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_ValidateEmailAddress_Response struct {
 | 
			
		||||
	WasValidated     *bool  `protobuf:"varint,1,opt,name=was_validated" json:"was_validated,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_ValidateEmailAddress_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_ValidateEmailAddress_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_ValidateEmailAddress_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_ValidateEmailAddress_Response) GetWasValidated() bool {
 | 
			
		||||
	if m != nil && m.WasValidated != nil {
 | 
			
		||||
		return *m.WasValidated
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_SteamGuardPhishingReport_Request struct {
 | 
			
		||||
	ParamString      *string `protobuf:"bytes,1,opt,name=param_string" json:"param_string,omitempty"`
 | 
			
		||||
	IpaddressActual  *uint32 `protobuf:"varint,2,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_SteamGuardPhishingReport_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_SteamGuardPhishingReport_Request) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_SteamGuardPhishingReport_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{8}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Request) GetParamString() string {
 | 
			
		||||
	if m != nil && m.ParamString != nil {
 | 
			
		||||
		return *m.ParamString
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Request) GetIpaddressActual() uint32 {
 | 
			
		||||
	if m != nil && m.IpaddressActual != nil {
 | 
			
		||||
		return *m.IpaddressActual
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_SteamGuardPhishingReport_Response struct {
 | 
			
		||||
	IpaddressLoginattempt   *uint32 `protobuf:"varint,1,opt,name=ipaddress_loginattempt" json:"ipaddress_loginattempt,omitempty"`
 | 
			
		||||
	CountrynameLoginattempt *string `protobuf:"bytes,2,opt,name=countryname_loginattempt" json:"countryname_loginattempt,omitempty"`
 | 
			
		||||
	StatenameLoginattempt   *string `protobuf:"bytes,3,opt,name=statename_loginattempt" json:"statename_loginattempt,omitempty"`
 | 
			
		||||
	CitynameLoginattempt    *string `protobuf:"bytes,4,opt,name=cityname_loginattempt" json:"cityname_loginattempt,omitempty"`
 | 
			
		||||
	IpaddressActual         *uint32 `protobuf:"varint,5,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"`
 | 
			
		||||
	CountrynameActual       *string `protobuf:"bytes,6,opt,name=countryname_actual" json:"countryname_actual,omitempty"`
 | 
			
		||||
	StatenameActual         *string `protobuf:"bytes,7,opt,name=statename_actual" json:"statename_actual,omitempty"`
 | 
			
		||||
	CitynameActual          *string `protobuf:"bytes,8,opt,name=cityname_actual" json:"cityname_actual,omitempty"`
 | 
			
		||||
	SteamguardCode          *string `protobuf:"bytes,9,opt,name=steamguard_code" json:"steamguard_code,omitempty"`
 | 
			
		||||
	XXX_unrecognized        []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_SteamGuardPhishingReport_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_SteamGuardPhishingReport_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_SteamGuardPhishingReport_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetIpaddressLoginattempt() uint32 {
 | 
			
		||||
	if m != nil && m.IpaddressLoginattempt != nil {
 | 
			
		||||
		return *m.IpaddressLoginattempt
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetCountrynameLoginattempt() string {
 | 
			
		||||
	if m != nil && m.CountrynameLoginattempt != nil {
 | 
			
		||||
		return *m.CountrynameLoginattempt
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetStatenameLoginattempt() string {
 | 
			
		||||
	if m != nil && m.StatenameLoginattempt != nil {
 | 
			
		||||
		return *m.StatenameLoginattempt
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetCitynameLoginattempt() string {
 | 
			
		||||
	if m != nil && m.CitynameLoginattempt != nil {
 | 
			
		||||
		return *m.CitynameLoginattempt
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetIpaddressActual() uint32 {
 | 
			
		||||
	if m != nil && m.IpaddressActual != nil {
 | 
			
		||||
		return *m.IpaddressActual
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetCountrynameActual() string {
 | 
			
		||||
	if m != nil && m.CountrynameActual != nil {
 | 
			
		||||
		return *m.CountrynameActual
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetStatenameActual() string {
 | 
			
		||||
	if m != nil && m.StatenameActual != nil {
 | 
			
		||||
		return *m.StatenameActual
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetCitynameActual() string {
 | 
			
		||||
	if m != nil && m.CitynameActual != nil {
 | 
			
		||||
		return *m.CitynameActual
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_SteamGuardPhishingReport_Response) GetSteamguardCode() string {
 | 
			
		||||
	if m != nil && m.SteamguardCode != nil {
 | 
			
		||||
		return *m.SteamguardCode
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_AccountLockRequest_Request struct {
 | 
			
		||||
	ParamString      *string `protobuf:"bytes,1,opt,name=param_string" json:"param_string,omitempty"`
 | 
			
		||||
	IpaddressActual  *uint32 `protobuf:"varint,2,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"`
 | 
			
		||||
	QueryOnly        *bool   `protobuf:"varint,3,opt,name=query_only" json:"query_only,omitempty"`
 | 
			
		||||
	EmailMessageType *int32  `protobuf:"varint,4,opt,name=email_message_type" json:"email_message_type,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_AccountLockRequest_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CCredentials_AccountLockRequest_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CCredentials_AccountLockRequest_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{10}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) GetParamString() string {
 | 
			
		||||
	if m != nil && m.ParamString != nil {
 | 
			
		||||
		return *m.ParamString
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) GetIpaddressActual() uint32 {
 | 
			
		||||
	if m != nil && m.IpaddressActual != nil {
 | 
			
		||||
		return *m.IpaddressActual
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) GetQueryOnly() bool {
 | 
			
		||||
	if m != nil && m.QueryOnly != nil {
 | 
			
		||||
		return *m.QueryOnly
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Request) GetEmailMessageType() int32 {
 | 
			
		||||
	if m != nil && m.EmailMessageType != nil {
 | 
			
		||||
		return *m.EmailMessageType
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_AccountLockRequest_Response struct {
 | 
			
		||||
	Success              *bool  `protobuf:"varint,1,opt,name=success" json:"success,omitempty"`
 | 
			
		||||
	AccountAlreadyLocked *bool  `protobuf:"varint,2,opt,name=account_already_locked" json:"account_already_locked,omitempty"`
 | 
			
		||||
	ExpiredLink          *bool  `protobuf:"varint,3,opt,name=expired_link" json:"expired_link,omitempty"`
 | 
			
		||||
	XXX_unrecognized     []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_AccountLockRequest_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CCredentials_AccountLockRequest_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CCredentials_AccountLockRequest_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{11}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Response) GetSuccess() bool {
 | 
			
		||||
	if m != nil && m.Success != nil {
 | 
			
		||||
		return *m.Success
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Response) GetAccountAlreadyLocked() bool {
 | 
			
		||||
	if m != nil && m.AccountAlreadyLocked != nil {
 | 
			
		||||
		return *m.AccountAlreadyLocked
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_AccountLockRequest_Response) GetExpiredLink() bool {
 | 
			
		||||
	if m != nil && m.ExpiredLink != nil {
 | 
			
		||||
		return *m.ExpiredLink
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_LastCredentialChangeTime_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_LastCredentialChangeTime_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_LastCredentialChangeTime_Request) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_LastCredentialChangeTime_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{12}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_LastCredentialChangeTime_Response struct {
 | 
			
		||||
	TimestampLastPasswordChange *uint32 `protobuf:"fixed32,1,opt,name=timestamp_last_password_change" json:"timestamp_last_password_change,omitempty"`
 | 
			
		||||
	TimestampLastEmailChange    *uint32 `protobuf:"fixed32,2,opt,name=timestamp_last_email_change" json:"timestamp_last_email_change,omitempty"`
 | 
			
		||||
	TimestampLastPasswordReset  *uint32 `protobuf:"fixed32,3,opt,name=timestamp_last_password_reset" json:"timestamp_last_password_reset,omitempty"`
 | 
			
		||||
	XXX_unrecognized            []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_LastCredentialChangeTime_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_LastCredentialChangeTime_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_LastCredentialChangeTime_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{13}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastPasswordChange() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampLastPasswordChange != nil {
 | 
			
		||||
		return *m.TimestampLastPasswordChange
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastEmailChange() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampLastEmailChange != nil {
 | 
			
		||||
		return *m.TimestampLastEmailChange
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastPasswordReset() uint32 {
 | 
			
		||||
	if m != nil && m.TimestampLastPasswordReset != nil {
 | 
			
		||||
		return *m.TimestampLastPasswordReset
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetAccountAuthSecret_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Request) Reset() {
 | 
			
		||||
	*m = CCredentials_GetAccountAuthSecret_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CCredentials_GetAccountAuthSecret_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CCredentials_GetAccountAuthSecret_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{14}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CCredentials_GetAccountAuthSecret_Response struct {
 | 
			
		||||
	SecretId         *int32 `protobuf:"varint,1,opt,name=secret_id" json:"secret_id,omitempty"`
 | 
			
		||||
	Secret           []byte `protobuf:"bytes,2,opt,name=secret" json:"secret,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Response) Reset() {
 | 
			
		||||
	*m = CCredentials_GetAccountAuthSecret_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CCredentials_GetAccountAuthSecret_Response) ProtoMessage() {}
 | 
			
		||||
func (*CCredentials_GetAccountAuthSecret_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return credentials_fileDescriptor0, []int{15}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Response) GetSecretId() int32 {
 | 
			
		||||
	if m != nil && m.SecretId != nil {
 | 
			
		||||
		return *m.SecretId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CCredentials_GetAccountAuthSecret_Response) GetSecret() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Secret
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*CCredentials_TestAvailablePassword_Request)(nil), "CCredentials_TestAvailablePassword_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_TestAvailablePassword_Response)(nil), "CCredentials_TestAvailablePassword_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Request)(nil), "CCredentials_GetSteamGuardDetails_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response)(nil), "CCredentials_GetSteamGuardDetails_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response_NewAuthentication)(nil), "CCredentials_GetSteamGuardDetails_Response.NewAuthentication")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response_SessionData)(nil), "CCredentials_GetSteamGuardDetails_Response.SessionData")
 | 
			
		||||
	proto.RegisterType((*CCredentials_NewMachineNotificationDialog_Request)(nil), "CCredentials_NewMachineNotificationDialog_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_NewMachineNotificationDialog_Response)(nil), "CCredentials_NewMachineNotificationDialog_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_ValidateEmailAddress_Request)(nil), "CCredentials_ValidateEmailAddress_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_ValidateEmailAddress_Response)(nil), "CCredentials_ValidateEmailAddress_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_SteamGuardPhishingReport_Request)(nil), "CCredentials_SteamGuardPhishingReport_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_SteamGuardPhishingReport_Response)(nil), "CCredentials_SteamGuardPhishingReport_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_AccountLockRequest_Request)(nil), "CCredentials_AccountLockRequest_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_AccountLockRequest_Response)(nil), "CCredentials_AccountLockRequest_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_LastCredentialChangeTime_Request)(nil), "CCredentials_LastCredentialChangeTime_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_LastCredentialChangeTime_Response)(nil), "CCredentials_LastCredentialChangeTime_Response")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetAccountAuthSecret_Request)(nil), "CCredentials_GetAccountAuthSecret_Request")
 | 
			
		||||
	proto.RegisterType((*CCredentials_GetAccountAuthSecret_Response)(nil), "CCredentials_GetAccountAuthSecret_Response")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var credentials_fileDescriptor0 = []byte{
 | 
			
		||||
	// 1482 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x5d, 0x6f, 0x14, 0xd5,
 | 
			
		||||
	0x1b, 0xcf, 0x94, 0xbe, 0xec, 0x3e, 0xa5, 0x7f, 0xe8, 0x40, 0x61, 0x59, 0x0a, 0x4c, 0x06, 0xfe,
 | 
			
		||||
	0xb6, 0xd0, 0x3a, 0x48, 0x25, 0x41, 0x25, 0xc6, 0x94, 0x56, 0x09, 0x06, 0x90, 0x00, 0x51, 0xef,
 | 
			
		||||
	0x4e, 0x4e, 0x67, 0x4e, 0x77, 0x4f, 0x3a, 0x33, 0x67, 0x98, 0x39, 0xb3, 0x4b, 0x4d, 0x4c, 0xc4,
 | 
			
		||||
	0x3b, 0xbc, 0xf0, 0xce, 0x0b, 0x13, 0x2f, 0x8d, 0x5f, 0xc0, 0xe8, 0x17, 0xf0, 0x2b, 0xf8, 0x25,
 | 
			
		||||
	0xbc, 0x32, 0x7e, 0x03, 0x9f, 0x73, 0xe6, 0xec, 0xfb, 0x6c, 0xbb, 0x4b, 0xbc, 0xdc, 0x39, 0xcf,
 | 
			
		||||
	0xcb, 0xef, 0xf9, 0x3d, 0xaf, 0x0b, 0x1b, 0x99, 0x64, 0x34, 0x8a, 0x58, 0x96, 0xd1, 0x06, 0xcb,
 | 
			
		||||
	0x88, 0x9f, 0xb2, 0x80, 0xc5, 0x92, 0xd3, 0x30, 0xf3, 0xf4, 0x8b, 0x1f, 0x72, 0xfc, 0xed, 0x25,
 | 
			
		||||
	0xa9, 0x90, 0xa2, 0xbe, 0x39, 0x28, 0x9c, 0xc7, 0x7c, 0x9f, 0xb3, 0x80, 0xec, 0xd1, 0x8c, 0x8d,
 | 
			
		||||
	0x4a, 0xbb, 0x2f, 0xe0, 0xc6, 0xce, 0x4e, 0xcf, 0x1e, 0x79, 0xce, 0x32, 0xb9, 0xdd, 0xa2, 0x3c,
 | 
			
		||||
	0xa4, 0x7b, 0x21, 0x7b, 0x42, 0xb3, 0xac, 0x2d, 0xd2, 0x80, 0x3c, 0x65, 0x2f, 0x72, 0x7c, 0xb0,
 | 
			
		||||
	0x4f, 0x43, 0x25, 0x31, 0xdf, 0x6a, 0x96, 0x63, 0xad, 0x57, 0xed, 0x8b, 0x70, 0x26, 0x6b, 0x52,
 | 
			
		||||
	0x12, 0x70, 0xf4, 0x25, 0x49, 0xf7, 0x71, 0x06, 0x1f, 0x4f, 0xda, 0x67, 0xe1, 0x24, 0xf5, 0x7d,
 | 
			
		||||
	0x91, 0xc7, 0x92, 0xc4, 0x34, 0x62, 0xb5, 0x13, 0x4a, 0xc5, 0xfd, 0x08, 0x36, 0x26, 0x72, 0x99,
 | 
			
		||||
	0x25, 0x22, 0xce, 0x98, 0xf2, 0xc9, 0x33, 0xd2, 0xa2, 0x21, 0x0f, 0xb4, 0x81, 0x8a, 0xfb, 0xf7,
 | 
			
		||||
	0x0c, 0x5c, 0x1f, 0xb0, 0x70, 0x9f, 0xc9, 0x67, 0x2a, 0xb2, 0xfb, 0x39, 0x4d, 0x83, 0x5d, 0x26,
 | 
			
		||||
	0xd1, 0x56, 0xd6, 0xc5, 0x9c, 0xc3, 0x45, 0x1e, 0xfb, 0x61, 0x1e, 0x30, 0x12, 0xb3, 0x36, 0xa1,
 | 
			
		||||
	0xb9, 0x6c, 0x2a, 0x3d, 0x9f, 0x4a, 0x8e, 0xf6, 0x75, 0x18, 0x95, 0x0f, 0x66, 0x65, 0x9a, 0xb3,
 | 
			
		||||
	0x7b, 0x9f, 0x7e, 0xfb, 0x5b, 0xed, 0x93, 0x2f, 0x9a, 0x0c, 0x25, 0x52, 0x47, 0xa4, 0x4e, 0x2c,
 | 
			
		||||
	0xa4, 0x23, 0x85, 0x93, 0x88, 0x24, 0x0f, 0xa9, 0x64, 0x0e, 0x7e, 0x77, 0xd0, 0xc6, 0xa0, 0x09,
 | 
			
		||||
	0x07, 0xe9, 0x0d, 0x03, 0x87, 0xc7, 0xfa, 0x39, 0xed, 0xc0, 0xfe, 0xc1, 0x82, 0x6a, 0x9b, 0xed,
 | 
			
		||||
	0xf9, 0x42, 0x1c, 0x70, 0xa6, 0xf9, 0xa8, 0xde, 0x7b, 0x65, 0xa1, 0x83, 0xaf, 0x9f, 0xa3, 0x58,
 | 
			
		||||
	0x9e, 0xb1, 0x74, 0x2d, 0x73, 0x34, 0x6a, 0x47, 0xc3, 0x76, 0x22, 0xea, 0x37, 0x79, 0xcc, 0x1c,
 | 
			
		||||
	0x65, 0xdd, 0x29, 0xd4, 0x3c, 0xe7, 0xc1, 0xbe, 0x93, 0xa0, 0x49, 0xf4, 0xb6, 0xe9, 0x70, 0xb9,
 | 
			
		||||
	0x16, 0x86, 0xce, 0x9e, 0x56, 0x0e, 0x14, 0xae, 0x06, 0x93, 0xda, 0xa7, 0x31, 0xd6, 0x31, 0xf0,
 | 
			
		||||
	0x60, 0x17, 0xc1, 0xa8, 0x4c, 0x07, 0x8e, 0xd8, 0xd7, 0x02, 0xdb, 0x8f, 0x9c, 0x0c, 0xeb, 0x01,
 | 
			
		||||
	0xc1, 0x7a, 0xb6, 0x03, 0x35, 0xc9, 0xb1, 0x3a, 0x24, 0x8d, 0x12, 0x12, 0xf1, 0x98, 0x47, 0x79,
 | 
			
		||||
	0x44, 0xda, 0x34, 0x96, 0xac, 0xa0, 0x77, 0xc1, 0x5e, 0x86, 0x2a, 0x4f, 0x68, 0x10, 0xa0, 0xdf,
 | 
			
		||||
	0xac, 0x36, 0x8b, 0x9f, 0xe6, 0xdc, 0xbf, 0x2a, 0x43, 0x65, 0x32, 0x86, 0x71, 0x13, 0xfb, 0x25,
 | 
			
		||||
	0x58, 0xc1, 0x94, 0xe9, 0x62, 0x6b, 0x28, 0x01, 0xc2, 0x62, 0x95, 0xdb, 0xa2, 0x66, 0x2a, 0xf6,
 | 
			
		||||
	0x35, 0x58, 0xed, 0x41, 0x28, 0x91, 0x9a, 0xd1, 0x30, 0x7c, 0x58, 0x0d, 0x18, 0x06, 0x8f, 0x2c,
 | 
			
		||||
	0x63, 0xf9, 0x8e, 0xd0, 0x8e, 0x60, 0x4f, 0xac, 0x2f, 0x6e, 0x7d, 0xe8, 0x4d, 0x8e, 0xcb, 0x7b,
 | 
			
		||||
	0xcc, 0xda, 0xdb, 0x03, 0x46, 0xec, 0x1b, 0xe0, 0xf6, 0x39, 0x31, 0x0c, 0xea, 0x62, 0x25, 0x8a,
 | 
			
		||||
	0x55, 0xbf, 0x29, 0x90, 0x7b, 0x4d, 0x42, 0xd5, 0xbe, 0x03, 0x37, 0xfb, 0x64, 0xfb, 0x48, 0x34,
 | 
			
		||||
	0x5a, 0x25, 0x91, 0xcc, 0xe9, 0x48, 0x76, 0xe0, 0x6e, 0x9f, 0xe2, 0x60, 0x18, 0x84, 0xbd, 0xe4,
 | 
			
		||||
	0x99, 0xcc, 0xc8, 0x7e, 0x2a, 0x22, 0xd2, 0x60, 0x22, 0x14, 0x3e, 0xd9, 0x63, 0xfb, 0x22, 0x65,
 | 
			
		||||
	0x2a, 0x39, 0xca, 0x49, 0x6d, 0x5e, 0x93, 0x86, 0x9c, 0x96, 0x20, 0xc5, 0x9e, 0x58, 0xc0, 0xe7,
 | 
			
		||||
	0x59, 0xfb, 0x11, 0x9c, 0x34, 0x29, 0x26, 0x01, 0x95, 0xb4, 0x56, 0xd1, 0xec, 0xdc, 0x99, 0x86,
 | 
			
		||||
	0x9d, 0x67, 0x85, 0xfe, 0x2e, 0xaa, 0xdb, 0xab, 0x70, 0x16, 0x33, 0x28, 0xdb, 0x62, 0x9f, 0xfa,
 | 
			
		||||
	0x52, 0xa4, 0xdd, 0x80, 0xaa, 0x1a, 0xcb, 0x55, 0xb8, 0xd8, 0x0b, 0x7f, 0x54, 0x08, 0x74, 0xd4,
 | 
			
		||||
	0x17, 0x60, 0x19, 0x4d, 0x24, 0x4d, 0x81, 0x30, 0x5b, 0x2c, 0xd5, 0x53, 0xa8, 0xb6, 0xa8, 0xf4,
 | 
			
		||||
	0xeb, 0x7f, 0x58, 0xb0, 0x3c, 0x9a, 0x8b, 0xe3, 0xca, 0xc2, 0xd2, 0x66, 0x57, 0x60, 0x09, 0xcd,
 | 
			
		||||
	0x62, 0x67, 0x91, 0xbe, 0xd6, 0xaa, 0x0c, 0x16, 0xad, 0xaa, 0xe3, 0x39, 0xfb, 0x0c, 0x2c, 0x1a,
 | 
			
		||||
	0x42, 0x79, 0xbc, 0x2f, 0x4c, 0x12, 0x0b, 0xf5, 0x94, 0x45, 0x2c, 0xda, 0x63, 0xa9, 0x49, 0x51,
 | 
			
		||||
	0xc5, 0x76, 0xa1, 0x3e, 0x92, 0x7c, 0x92, 0xe5, 0x49, 0x12, 0x2a, 0xd4, 0xf3, 0x5a, 0xf5, 0x7f,
 | 
			
		||||
	0x30, 0x8f, 0xd8, 0x64, 0x9e, 0x69, 0xca, 0xe7, 0xea, 0x7f, 0xce, 0xc0, 0x62, 0x3f, 0x67, 0x36,
 | 
			
		||||
	0x40, 0x5f, 0x5a, 0x2c, 0x9d, 0x96, 0x2b, 0x70, 0x7e, 0x5c, 0x51, 0xe9, 0x91, 0x60, 0x6f, 0xc2,
 | 
			
		||||
	0xb5, 0x89, 0x2a, 0xa9, 0x68, 0xcd, 0xf7, 0xe0, 0x9d, 0xa9, 0xcb, 0x67, 0x56, 0x07, 0xf8, 0x25,
 | 
			
		||||
	0x2c, 0x8f, 0xb6, 0xd0, 0xdc, 0x7f, 0xd1, 0x42, 0xef, 0xc3, 0xad, 0x23, 0x30, 0x65, 0x2a, 0x6a,
 | 
			
		||||
	0x9e, 0x94, 0xd7, 0x34, 0x66, 0x28, 0xc9, 0xf7, 0x42, 0x8e, 0x19, 0x4a, 0x5a, 0xb7, 0x35, 0xad,
 | 
			
		||||
	0x4b, 0x6e, 0x00, 0xb7, 0x06, 0xf0, 0xa0, 0xc7, 0x47, 0x05, 0x2f, 0x8f, 0x85, 0xc4, 0x2a, 0x2a,
 | 
			
		||||
	0x9c, 0xec, 0xe2, 0x9b, 0x68, 0x74, 0x87, 0x3c, 0x5a, 0xc2, 0xb4, 0xd2, 0x04, 0x97, 0x5a, 0xab,
 | 
			
		||||
	0x3b, 0x67, 0xea, 0x60, 0xab, 0x52, 0xe1, 0x5f, 0x29, 0x22, 0x7d, 0x11, 0x25, 0x21, 0x93, 0xa6,
 | 
			
		||||
	0x5e, 0xdc, 0xdb, 0xb0, 0x35, 0x8d, 0x97, 0x22, 0x7a, 0xf7, 0xee, 0xd0, 0xe2, 0xf9, 0x5c, 0x6d,
 | 
			
		||||
	0x25, 0x6c, 0xc8, 0x8f, 0x23, 0x64, 0x69, 0xbb, 0xa8, 0xbe, 0x2e, 0x26, 0x5d, 0x2f, 0xe2, 0x00,
 | 
			
		||||
	0x53, 0xad, 0x57, 0xa5, 0xbb, 0x33, 0x34, 0x43, 0xc7, 0x28, 0x9b, 0x19, 0x8a, 0x85, 0xda, 0xa6,
 | 
			
		||||
	0x66, 0xef, 0xa9, 0x96, 0x2f, 0x62, 0x72, 0x09, 0xbc, 0x3d, 0x60, 0xa4, 0x97, 0xaa, 0x27, 0x4d,
 | 
			
		||||
	0x9e, 0x21, 0xfe, 0xc6, 0x53, 0x96, 0x88, 0x54, 0x76, 0x51, 0xe0, 0x0e, 0x4e, 0x68, 0x4a, 0x31,
 | 
			
		||||
	0x13, 0x32, 0xc5, 0x57, 0xb3, 0xb6, 0x6b, 0x70, 0xba, 0xdb, 0x2e, 0x04, 0xbb, 0x37, 0xa7, 0xa1,
 | 
			
		||||
	0x26, 0x66, 0xc9, 0xfd, 0x75, 0x06, 0xbc, 0x49, 0x3d, 0x18, 0xa8, 0x97, 0xe1, 0x5c, 0xcf, 0x18,
 | 
			
		||||
	0xf2, 0xc5, 0x63, 0x2a, 0x25, 0x8b, 0x12, 0xa9, 0x9d, 0x2d, 0xa9, 0x95, 0xa3, 0x8f, 0x80, 0xf4,
 | 
			
		||||
	0x50, 0xf7, 0xc0, 0x80, 0x44, 0xd1, 0x05, 0x68, 0x41, 0xb5, 0x16, 0x1b, 0x7d, 0xd7, 0x27, 0x83,
 | 
			
		||||
	0x1a, 0x7e, 0x3e, 0x97, 0x25, 0xea, 0xb3, 0x63, 0xa3, 0x99, 0xd3, 0xae, 0xb1, 0x04, 0xfa, 0x5d,
 | 
			
		||||
	0x9b, 0xb7, 0xf9, 0x8e, 0x56, 0xcf, 0xa9, 0x79, 0x59, 0xd0, 0x2f, 0xe7, 0xe1, 0x54, 0xd7, 0x9d,
 | 
			
		||||
	0x79, 0xa8, 0x74, 0x1e, 0xfa, 0x7a, 0xd3, 0x17, 0x01, 0xd3, 0x13, 0xb1, 0xea, 0xbe, 0xb6, 0x60,
 | 
			
		||||
	0x6d, 0x80, 0xb5, 0xed, 0xe2, 0xee, 0x79, 0x28, 0xfc, 0x03, 0x93, 0x89, 0x37, 0xcd, 0x88, 0x9a,
 | 
			
		||||
	0x2b, 0xa8, 0x98, 0x1e, 0x12, 0x11, 0x87, 0x87, 0xc5, 0x09, 0xa4, 0xe2, 0x62, 0xaa, 0x6c, 0x88,
 | 
			
		||||
	0xb9, 0xf3, 0x88, 0x3c, 0x4c, 0x98, 0x59, 0xd6, 0x2f, 0x60, 0xfd, 0x78, 0x28, 0x26, 0x75, 0xa7,
 | 
			
		||||
	0x60, 0x21, 0xcb, 0x7d, 0x5f, 0x0d, 0xcd, 0xa2, 0x67, 0x30, 0x13, 0x9d, 0x93, 0x8d, 0x86, 0x29,
 | 
			
		||||
	0xde, 0x10, 0x87, 0x48, 0xb8, 0x7f, 0x60, 0xb6, 0x72, 0x45, 0x81, 0x67, 0x2f, 0x13, 0x8e, 0xe6,
 | 
			
		||||
	0x49, 0xc8, 0xe3, 0x03, 0x73, 0x91, 0xdd, 0x1c, 0xaa, 0xca, 0x87, 0x34, 0x93, 0xbd, 0xdf, 0x3b,
 | 
			
		||||
	0x4d, 0x1a, 0x37, 0xd8, 0x73, 0xec, 0xfb, 0x0e, 0x07, 0xee, 0xcf, 0xd6, 0x50, 0x95, 0x1d, 0xa1,
 | 
			
		||||
	0x61, 0xa0, 0xbe, 0x05, 0x97, 0x7b, 0x93, 0x32, 0xa4, 0x7d, 0xd7, 0x26, 0xf1, 0xb5, 0xb8, 0x59,
 | 
			
		||||
	0x10, 0x03, 0xcb, 0x49, 0xcb, 0x15, 0x4c, 0x19, 0xa1, 0xe2, 0xb8, 0xf8, 0x3f, 0x5c, 0x1a, 0x67,
 | 
			
		||||
	0x4c, 0x9d, 0x5b, 0x45, 0xdd, 0x2d, 0xb8, 0x1b, 0xa3, 0x87, 0xa6, 0x61, 0x53, 0x0d, 0xc1, 0x67,
 | 
			
		||||
	0x0c, 0x2f, 0xf1, 0x6e, 0x5e, 0xdd, 0xcf, 0x46, 0x6f, 0xa4, 0x32, 0x61, 0x13, 0x0e, 0x2e, 0xac,
 | 
			
		||||
	0xac, 0xf8, 0x64, 0x96, 0xc5, 0x9c, 0x1e, 0x18, 0xfa, 0x53, 0x71, 0x3e, 0x6f, 0xfd, 0x53, 0x85,
 | 
			
		||||
	0xc5, 0x3e, 0x83, 0xf6, 0xf7, 0x16, 0xac, 0x94, 0x1e, 0xcb, 0xf6, 0x86, 0x37, 0xf9, 0x11, 0x5f,
 | 
			
		||||
	0xdf, 0xf4, 0xa6, 0x38, 0xbf, 0xdd, 0x3a, 0x9e, 0xac, 0xe7, 0x4a, 0x65, 0x3c, 0xfb, 0x3b, 0x0b,
 | 
			
		||||
	0xce, 0x96, 0xad, 0x0b, 0xfb, 0x86, 0x37, 0xf1, 0x7d, 0x5e, 0xdf, 0x98, 0x62, 0xfd, 0xb8, 0x17,
 | 
			
		||||
	0x10, 0xcd, 0x4a, 0x99, 0x88, 0x67, 0xff, 0x6e, 0x81, 0x7b, 0xd4, 0x14, 0x47, 0x1b, 0x79, 0x28,
 | 
			
		||||
	0xed, 0x2d, 0x6f, 0xea, 0xed, 0x52, 0x7f, 0xd7, 0x7b, 0x83, 0x5d, 0xb1, 0x86, 0x50, 0xaf, 0x1e,
 | 
			
		||||
	0x0f, 0xc8, 0xb3, 0x7f, 0x42, 0x16, 0xcb, 0x76, 0xc1, 0x30, 0x8b, 0x47, 0x2d, 0x9b, 0x61, 0x16,
 | 
			
		||||
	0x8f, 0xdc, 0x2d, 0xee, 0x06, 0x42, 0x5b, 0xeb, 0x88, 0x38, 0x34, 0x76, 0x74, 0x87, 0x38, 0x66,
 | 
			
		||||
	0xfa, 0x38, 0x0d, 0xde, 0x62, 0xb1, 0x43, 0x1d, 0xbd, 0xbc, 0xec, 0x1f, 0x2d, 0xa8, 0x8d, 0xdb,
 | 
			
		||||
	0x01, 0xb6, 0xe7, 0x4d, 0xb5, 0x8d, 0xea, 0x37, 0xa7, 0xdc, 0x2d, 0xee, 0x2a, 0x42, 0x1d, 0xef,
 | 
			
		||||
	0xfe, 0x95, 0x05, 0xf6, 0xe8, 0x78, 0xb3, 0xd7, 0xbd, 0x09, 0x67, 0x71, 0xfd, 0xba, 0x37, 0xe9,
 | 
			
		||||
	0xa8, 0x74, 0xcf, 0x21, 0x92, 0x32, 0x67, 0xbf, 0x58, 0x70, 0x19, 0x2b, 0xb2, 0x6c, 0x78, 0x75,
 | 
			
		||||
	0xda, 0xc1, 0xf3, 0xa6, 0x9a, 0x8e, 0xc3, 0x2c, 0x1d, 0x3b, 0x1b, 0xdd, 0xab, 0x88, 0xed, 0xca,
 | 
			
		||||
	0xd1, 0x20, 0x3c, 0xfb, 0x75, 0xd1, 0xad, 0x23, 0x33, 0xa9, 0xa4, 0x5b, 0xc7, 0x0e, 0xb9, 0x92,
 | 
			
		||||
	0x6e, 0x1d, 0x3f, 0xe3, 0xdc, 0x1a, 0xc2, 0x2a, 0x75, 0x59, 0x3f, 0x8f, 0x2f, 0x67, 0xfa, 0x0c,
 | 
			
		||||
	0xe1, 0xff, 0xd3, 0xb4, 0xc5, 0x7d, 0x76, 0xef, 0xc4, 0x37, 0x96, 0xf5, 0x6f, 0x00, 0x00, 0x00,
 | 
			
		||||
	0xff, 0xff, 0x3c, 0x6e, 0x05, 0xde, 0xf0, 0x10, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										694
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/deviceauth.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										694
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/deviceauth.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,694 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_deviceauth.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetOwnAuthorizedDevices_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	IncludeCanceled  *bool   `protobuf:"varint,2,opt,name=include_canceled" json:"include_canceled,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetOwnAuthorizedDevices_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) GetIncludeCanceled() bool {
 | 
			
		||||
	if m != nil && m.IncludeCanceled != nil {
 | 
			
		||||
		return *m.IncludeCanceled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetOwnAuthorizedDevices_Response struct {
 | 
			
		||||
	Devices          []*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                                 `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetOwnAuthorizedDevices_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) GetDevices() []*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Devices
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetOwnAuthorizedDevices_Response_Device struct {
 | 
			
		||||
	AuthDeviceToken  *uint64 `protobuf:"fixed64,1,opt,name=auth_device_token" json:"auth_device_token,omitempty"`
 | 
			
		||||
	DeviceName       *string `protobuf:"bytes,2,opt,name=device_name" json:"device_name,omitempty"`
 | 
			
		||||
	IsPending        *bool   `protobuf:"varint,3,opt,name=is_pending" json:"is_pending,omitempty"`
 | 
			
		||||
	IsCanceled       *bool   `protobuf:"varint,4,opt,name=is_canceled" json:"is_canceled,omitempty"`
 | 
			
		||||
	LastTimeUsed     *uint32 `protobuf:"varint,5,opt,name=last_time_used" json:"last_time_used,omitempty"`
 | 
			
		||||
	LastBorrowerId   *uint64 `protobuf:"fixed64,6,opt,name=last_borrower_id" json:"last_borrower_id,omitempty"`
 | 
			
		||||
	LastAppPlayed    *uint32 `protobuf:"varint,7,opt,name=last_app_played" json:"last_app_played,omitempty"`
 | 
			
		||||
	IsLimited        *bool   `protobuf:"varint,8,opt,name=is_limited" json:"is_limited,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetOwnAuthorizedDevices_Response_Device{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{1, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetAuthDeviceToken() uint64 {
 | 
			
		||||
	if m != nil && m.AuthDeviceToken != nil {
 | 
			
		||||
		return *m.AuthDeviceToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetDeviceName() string {
 | 
			
		||||
	if m != nil && m.DeviceName != nil {
 | 
			
		||||
		return *m.DeviceName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsPending() bool {
 | 
			
		||||
	if m != nil && m.IsPending != nil {
 | 
			
		||||
		return *m.IsPending
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsCanceled() bool {
 | 
			
		||||
	if m != nil && m.IsCanceled != nil {
 | 
			
		||||
		return *m.IsCanceled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastTimeUsed() uint32 {
 | 
			
		||||
	if m != nil && m.LastTimeUsed != nil {
 | 
			
		||||
		return *m.LastTimeUsed
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastBorrowerId() uint64 {
 | 
			
		||||
	if m != nil && m.LastBorrowerId != nil {
 | 
			
		||||
		return *m.LastBorrowerId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastAppPlayed() uint32 {
 | 
			
		||||
	if m != nil && m.LastAppPlayed != nil {
 | 
			
		||||
		return *m.LastAppPlayed
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsLimited() bool {
 | 
			
		||||
	if m != nil && m.IsLimited != nil {
 | 
			
		||||
		return *m.IsLimited
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AcceptAuthorizationRequest_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"`
 | 
			
		||||
	AuthCode         *uint64 `protobuf:"fixed64,3,opt,name=auth_code" json:"auth_code,omitempty"`
 | 
			
		||||
	FromSteamid      *uint64 `protobuf:"fixed64,4,opt,name=from_steamid" json:"from_steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AcceptAuthorizationRequest_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_AcceptAuthorizationRequest_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_AcceptAuthorizationRequest_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetAuthDeviceToken() uint64 {
 | 
			
		||||
	if m != nil && m.AuthDeviceToken != nil {
 | 
			
		||||
		return *m.AuthDeviceToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetAuthCode() uint64 {
 | 
			
		||||
	if m != nil && m.AuthCode != nil {
 | 
			
		||||
		return *m.AuthCode
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetFromSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.FromSteamid != nil {
 | 
			
		||||
		return *m.FromSteamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AcceptAuthorizationRequest_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AcceptAuthorizationRequest_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AcceptAuthorizationRequest_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_AcceptAuthorizationRequest_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_AcceptAuthorizationRequest_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AuthorizeRemoteDevice_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AuthorizeRemoteDevice_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CDeviceAuth_AuthorizeRemoteDevice_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CDeviceAuth_AuthorizeRemoteDevice_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) GetAuthDeviceToken() uint64 {
 | 
			
		||||
	if m != nil && m.AuthDeviceToken != nil {
 | 
			
		||||
		return *m.AuthDeviceToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AuthorizeRemoteDevice_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AuthorizeRemoteDevice_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AuthorizeRemoteDevice_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_AuthorizeRemoteDevice_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_AuthorizeRemoteDevice_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_DeauthorizeRemoteDevice_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_DeauthorizeRemoteDevice_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_DeauthorizeRemoteDevice_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_DeauthorizeRemoteDevice_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) GetAuthDeviceToken() uint64 {
 | 
			
		||||
	if m != nil && m.AuthDeviceToken != nil {
 | 
			
		||||
		return *m.AuthDeviceToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_DeauthorizeRemoteDevice_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_DeauthorizeRemoteDevice_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_DeauthorizeRemoteDevice_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_DeauthorizeRemoteDevice_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_DeauthorizeRemoteDevice_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetUsedAuthorizedDevices_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetUsedAuthorizedDevices_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{8}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetUsedAuthorizedDevices_Response struct {
 | 
			
		||||
	Devices          []*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                                  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetUsedAuthorizedDevices_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) GetDevices() []*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Devices
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetUsedAuthorizedDevices_Response_Device struct {
 | 
			
		||||
	AuthDeviceToken  *uint64 `protobuf:"fixed64,1,opt,name=auth_device_token" json:"auth_device_token,omitempty"`
 | 
			
		||||
	DeviceName       *string `protobuf:"bytes,2,opt,name=device_name" json:"device_name,omitempty"`
 | 
			
		||||
	OwnerSteamid     *uint64 `protobuf:"fixed64,3,opt,name=owner_steamid" json:"owner_steamid,omitempty"`
 | 
			
		||||
	LastTimeUsed     *uint32 `protobuf:"varint,4,opt,name=last_time_used" json:"last_time_used,omitempty"`
 | 
			
		||||
	LastAppPlayed    *uint32 `protobuf:"varint,5,opt,name=last_app_played" json:"last_app_played,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetUsedAuthorizedDevices_Response_Device{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{9, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetAuthDeviceToken() uint64 {
 | 
			
		||||
	if m != nil && m.AuthDeviceToken != nil {
 | 
			
		||||
		return *m.AuthDeviceToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetDeviceName() string {
 | 
			
		||||
	if m != nil && m.DeviceName != nil {
 | 
			
		||||
		return *m.DeviceName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetOwnerSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.OwnerSteamid != nil {
 | 
			
		||||
		return *m.OwnerSteamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetLastTimeUsed() uint32 {
 | 
			
		||||
	if m != nil && m.LastTimeUsed != nil {
 | 
			
		||||
		return *m.LastTimeUsed
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetLastAppPlayed() uint32 {
 | 
			
		||||
	if m != nil && m.LastAppPlayed != nil {
 | 
			
		||||
		return *m.LastAppPlayed
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetAuthorizedBorrowers_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	IncludeCanceled  *bool   `protobuf:"varint,2,opt,name=include_canceled" json:"include_canceled,omitempty"`
 | 
			
		||||
	IncludePending   *bool   `protobuf:"varint,3,opt,name=include_pending" json:"include_pending,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetAuthorizedBorrowers_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{10}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetIncludeCanceled() bool {
 | 
			
		||||
	if m != nil && m.IncludeCanceled != nil {
 | 
			
		||||
		return *m.IncludeCanceled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetIncludePending() bool {
 | 
			
		||||
	if m != nil && m.IncludePending != nil {
 | 
			
		||||
		return *m.IncludePending
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetAuthorizedBorrowers_Response struct {
 | 
			
		||||
	Borrowers        []*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower `protobuf:"bytes,1,rep,name=borrowers" json:"borrowers,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                                  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetAuthorizedBorrowers_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{11}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) GetBorrowers() []*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Borrowers
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	IsPending        *bool   `protobuf:"varint,2,opt,name=is_pending" json:"is_pending,omitempty"`
 | 
			
		||||
	IsCanceled       *bool   `protobuf:"varint,3,opt,name=is_canceled" json:"is_canceled,omitempty"`
 | 
			
		||||
	TimeCreated      *uint32 `protobuf:"varint,4,opt,name=time_created" json:"time_created,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{11, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetIsPending() bool {
 | 
			
		||||
	if m != nil && m.IsPending != nil {
 | 
			
		||||
		return *m.IsPending
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetIsCanceled() bool {
 | 
			
		||||
	if m != nil && m.IsCanceled != nil {
 | 
			
		||||
		return *m.IsCanceled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetTimeCreated() uint32 {
 | 
			
		||||
	if m != nil && m.TimeCreated != nil {
 | 
			
		||||
		return *m.TimeCreated
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AddAuthorizedBorrowers_Request struct {
 | 
			
		||||
	Steamid          *uint64  `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	SteamidBorrower  []uint64 `protobuf:"fixed64,2,rep,name=steamid_borrower" json:"steamid_borrower,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte   `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AddAuthorizedBorrowers_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_AddAuthorizedBorrowers_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_AddAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{12}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) GetSteamidBorrower() []uint64 {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SteamidBorrower
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_AddAuthorizedBorrowers_Response struct {
 | 
			
		||||
	SecondsToWait    *int32 `protobuf:"varint,1,opt,name=seconds_to_wait" json:"seconds_to_wait,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_AddAuthorizedBorrowers_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_AddAuthorizedBorrowers_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_AddAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{13}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) GetSecondsToWait() int32 {
 | 
			
		||||
	if m != nil && m.SecondsToWait != nil {
 | 
			
		||||
		return *m.SecondsToWait
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_RemoveAuthorizedBorrowers_Request struct {
 | 
			
		||||
	Steamid          *uint64  `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	SteamidBorrower  []uint64 `protobuf:"fixed64,2,rep,name=steamid_borrower" json:"steamid_borrower,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte   `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_RemoveAuthorizedBorrowers_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_RemoveAuthorizedBorrowers_Request) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_RemoveAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{14}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) GetSteamidBorrower() []uint64 {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SteamidBorrower
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CDeviceAuth_RemoveAuthorizedBorrowers_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Response) Reset() {
 | 
			
		||||
	*m = CDeviceAuth_RemoveAuthorizedBorrowers_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CDeviceAuth_RemoveAuthorizedBorrowers_Response) ProtoMessage() {}
 | 
			
		||||
func (*CDeviceAuth_RemoveAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return deviceauth_fileDescriptor0, []int{15}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Request)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Response)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Response.Device")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AcceptAuthorizationRequest_Request)(nil), "CDeviceAuth_AcceptAuthorizationRequest_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AcceptAuthorizationRequest_Response)(nil), "CDeviceAuth_AcceptAuthorizationRequest_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AuthorizeRemoteDevice_Request)(nil), "CDeviceAuth_AuthorizeRemoteDevice_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AuthorizeRemoteDevice_Response)(nil), "CDeviceAuth_AuthorizeRemoteDevice_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_DeauthorizeRemoteDevice_Request)(nil), "CDeviceAuth_DeauthorizeRemoteDevice_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_DeauthorizeRemoteDevice_Response)(nil), "CDeviceAuth_DeauthorizeRemoteDevice_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Request)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Response)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Response.Device")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Request)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Response)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Response.Borrower")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AddAuthorizedBorrowers_Request)(nil), "CDeviceAuth_AddAuthorizedBorrowers_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_AddAuthorizedBorrowers_Response)(nil), "CDeviceAuth_AddAuthorizedBorrowers_Response")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_RemoveAuthorizedBorrowers_Request)(nil), "CDeviceAuth_RemoveAuthorizedBorrowers_Request")
 | 
			
		||||
	proto.RegisterType((*CDeviceAuth_RemoveAuthorizedBorrowers_Response)(nil), "CDeviceAuth_RemoveAuthorizedBorrowers_Response")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var deviceauth_fileDescriptor0 = []byte{
 | 
			
		||||
	// 934 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x56, 0xdf, 0x4e, 0x3b, 0x45,
 | 
			
		||||
	0x14, 0xce, 0xb6, 0x50, 0x60, 0x10, 0x91, 0x51, 0xa0, 0xec, 0x85, 0x4e, 0x56, 0x2f, 0x10, 0xca,
 | 
			
		||||
	0x80, 0x04, 0xe3, 0xff, 0x3f, 0x20, 0xa2, 0x17, 0x26, 0x26, 0x18, 0xa3, 0x72, 0xb3, 0x99, 0xee,
 | 
			
		||||
	0x0e, 0x74, 0x62, 0xbb, 0xbb, 0xee, 0x4c, 0x69, 0xf0, 0x8a, 0x98, 0xf8, 0x12, 0xfa, 0x06, 0x5e,
 | 
			
		||||
	0x19, 0x13, 0xa2, 0x89, 0x5e, 0xf8, 0x0e, 0xbe, 0x8d, 0x57, 0xbf, 0xb3, 0xb3, 0xb3, 0x85, 0x6d,
 | 
			
		||||
	0x77, 0x4b, 0xb7, 0xe1, 0xaa, 0x9b, 0x73, 0xce, 0x9c, 0xf9, 0xce, 0x99, 0xf3, 0x7d, 0xa7, 0x68,
 | 
			
		||||
	0x47, 0x2a, 0xce, 0x7a, 0x3d, 0x2e, 0x25, 0xbb, 0xe2, 0xd2, 0xf5, 0xf9, 0xb5, 0xf0, 0x38, 0xeb,
 | 
			
		||||
	0xab, 0x0e, 0xd5, 0x0e, 0xaf, 0x2b, 0x78, 0xa0, 0x68, 0x14, 0x87, 0x2a, 0xb4, 0x5b, 0xf9, 0xd8,
 | 
			
		||||
	0x7e, 0x20, 0x2e, 0x05, 0xf7, 0xdd, 0x36, 0x93, 0x7c, 0x3c, 0xda, 0xf9, 0x16, 0xed, 0x7e, 0x72,
 | 
			
		||||
	0xaa, 0xd3, 0x1d, 0x43, 0x3a, 0xf7, 0x33, 0xae, 0xbe, 0x1c, 0x04, 0xc9, 0x67, 0x18, 0x8b, 0x1f,
 | 
			
		||||
	0xb9, 0x9f, 0xba, 0xa4, 0x7b, 0xce, 0x7f, 0xe8, 0x73, 0xa9, 0xf0, 0x2a, 0x5a, 0xd0, 0x39, 0x84,
 | 
			
		||||
	0xdf, 0xb4, 0x88, 0xb5, 0xdd, 0xc0, 0x4d, 0xf4, 0x82, 0x08, 0xbc, 0x6e, 0xdf, 0xe7, 0xae, 0xc7,
 | 
			
		||||
	0x02, 0x8f, 0x77, 0xb9, 0xdf, 0xac, 0x81, 0x67, 0xd1, 0xf9, 0xab, 0x86, 0x5a, 0xd3, 0xa5, 0x96,
 | 
			
		||||
	0x51, 0x18, 0x48, 0x8e, 0x3f, 0x45, 0x0b, 0x69, 0x61, 0x12, 0x72, 0xd7, 0xb7, 0x97, 0x0f, 0x8f,
 | 
			
		||||
	0x68, 0x95, 0xf3, 0x34, 0x35, 0xd8, 0xff, 0x5a, 0xa8, 0x91, 0x7e, 0xe2, 0x2d, 0xb4, 0x96, 0x34,
 | 
			
		||||
	0xc9, 0xf4, 0xcb, 0x55, 0xe1, 0xf7, 0x3c, 0x30, 0xb8, 0x5f, 0x44, 0xcb, 0xc6, 0x1a, 0xb0, 0x1e,
 | 
			
		||||
	0xd7, 0x90, 0x97, 0x30, 0x46, 0x48, 0x48, 0x37, 0xe2, 0x81, 0x2f, 0x82, 0xab, 0x66, 0x3d, 0x29,
 | 
			
		||||
	0x23, 0x09, 0x04, 0xdb, 0xb0, 0xb6, 0x39, 0x6d, 0xdc, 0x40, 0xcf, 0x77, 0x99, 0x54, 0xae, 0x12,
 | 
			
		||||
	0x3d, 0xee, 0xf6, 0x25, 0xd8, 0xe7, 0xc1, 0xbe, 0x92, 0x74, 0x43, 0xdb, 0xdb, 0x61, 0x1c, 0x87,
 | 
			
		||||
	0x03, 0x1e, 0xbb, 0xd0, 0xa7, 0x86, 0xbe, 0x6f, 0x13, 0xad, 0x6a, 0x0f, 0x8b, 0x22, 0x37, 0xea,
 | 
			
		||||
	0xb2, 0x1b, 0x38, 0xb2, 0xa0, 0x8f, 0xa4, 0x77, 0x76, 0x45, 0x4f, 0x28, 0xb0, 0x2d, 0xea, 0xd6,
 | 
			
		||||
	0xfd, 0x6c, 0xa1, 0x5c, 0xe9, 0xc7, 0x9e, 0xc7, 0x23, 0x95, 0x95, 0xce, 0x94, 0x08, 0x03, 0xf3,
 | 
			
		||||
	0x20, 0xe5, 0x0f, 0x53, 0x58, 0x7b, 0x4d, 0xbb, 0xd6, 0xd0, 0x92, 0x76, 0x79, 0xa1, 0xcf, 0x75,
 | 
			
		||||
	0x95, 0x0d, 0xfc, 0x12, 0x7a, 0xee, 0x32, 0x0e, 0x7b, 0x6e, 0x96, 0x23, 0x29, 0xb3, 0xe1, 0xbc,
 | 
			
		||||
	0x81, 0xf6, 0xa7, 0x86, 0x91, 0x3e, 0x82, 0xf3, 0x0d, 0x7a, 0x3d, 0x77, 0x24, 0x7b, 0xae, 0x73,
 | 
			
		||||
	0xde, 0x0b, 0x15, 0x4f, 0x3d, 0xb3, 0x80, 0x76, 0x5a, 0x68, 0x67, 0x9a, 0xc4, 0x06, 0xc6, 0x77,
 | 
			
		||||
	0xf9, 0xb1, 0x3e, 0xd5, 0x64, 0x79, 0x1a, 0x20, 0x34, 0x3f, 0xd6, 0xe5, 0xa9, 0x0d, 0x94, 0x8f,
 | 
			
		||||
	0xc6, 0x68, 0xf0, 0x35, 0x0c, 0xcc, 0xf4, 0x14, 0x73, 0xfe, 0xb7, 0xd0, 0xde, 0x94, 0x19, 0x0c,
 | 
			
		||||
	0x93, 0xce, 0x46, 0x99, 0xf4, 0x26, 0xad, 0x94, 0x20, 0xa3, 0xd2, 0xed, 0xec, 0x54, 0x5a, 0x47,
 | 
			
		||||
	0x2b, 0xe1, 0x20, 0x00, 0x06, 0x64, 0xb5, 0xa4, 0x73, 0x36, 0x4e, 0x9c, 0x39, 0xcd, 0x82, 0x02,
 | 
			
		||||
	0x7a, 0x68, 0x46, 0x39, 0x51, 0xfe, 0xd9, 0x01, 0xfa, 0x3d, 0xec, 0x13, 0xc3, 0xb2, 0x59, 0xe4,
 | 
			
		||||
	0x29, 0xb9, 0x31, 0xf3, 0xe4, 0x08, 0xef, 0xfc, 0x67, 0x8d, 0x49, 0x62, 0xf1, 0x95, 0xa6, 0xd9,
 | 
			
		||||
	0x9f, 0xa3, 0xa5, 0x8c, 0xee, 0xa5, 0xed, 0x9e, 0x94, 0x80, 0x66, 0x26, 0xfb, 0x02, 0x2d, 0x66,
 | 
			
		||||
	0xdf, 0xe3, 0x95, 0xe4, 0xb5, 0xa9, 0x56, 0xa4, 0x4d, 0xa9, 0x60, 0x01, 0x95, 0x75, 0x77, 0xbd,
 | 
			
		||||
	0x98, 0x33, 0x95, 0x35, 0x18, 0x78, 0x99, 0xa7, 0x8f, 0xef, 0x57, 0xed, 0xa3, 0x31, 0x0c, 0xb5,
 | 
			
		||||
	0x0d, 0x30, 0xd4, 0x61, 0x3a, 0xcf, 0xf2, 0xdd, 0x2a, 0x4d, 0x6c, 0xba, 0x05, 0x6d, 0x97, 0xdc,
 | 
			
		||||
	0x0b, 0x03, 0x5f, 0xc2, 0x0c, 0xb9, 0x03, 0x26, 0x94, 0xbe, 0x61, 0xde, 0xb9, 0xc8, 0x0f, 0x79,
 | 
			
		||||
	0xc2, 0xa5, 0x6b, 0xfe, 0x44, 0x18, 0x0f, 0xf2, 0x72, 0x3a, 0x29, 0x77, 0x0a, 0xf3, 0xf0, 0xcf,
 | 
			
		||||
	0x65, 0x84, 0xee, 0x4f, 0xe0, 0x5f, 0x2c, 0xb4, 0x59, 0xb2, 0x7f, 0x70, 0x8b, 0x56, 0x58, 0xa0,
 | 
			
		||||
	0xf6, 0x5e, 0xa5, 0x9d, 0xe6, 0x38, 0x3f, 0xdd, 0x35, 0x5f, 0x86, 0x28, 0xd2, 0x15, 0x52, 0x91,
 | 
			
		||||
	0xf0, 0x92, 0x0c, 0xc5, 0xc6, 0x27, 0x86, 0xe2, 0xf8, 0xce, 0x42, 0x76, 0xb9, 0x34, 0xe3, 0xfd,
 | 
			
		||||
	0x8a, 0xab, 0xc4, 0x3e, 0xa0, 0x55, 0x45, 0xff, 0x08, 0x50, 0x1e, 0xa4, 0x81, 0x84, 0x05, 0x43,
 | 
			
		||||
	0x8c, 0x3a, 0x98, 0xc4, 0x69, 0x34, 0x69, 0xdf, 0x80, 0x2f, 0x54, 0x1d, 0x1e, 0x13, 0x20, 0x7e,
 | 
			
		||||
	0x2c, 0xf1, 0x6f, 0x16, 0x5a, 0x2f, 0x94, 0x71, 0xbc, 0x43, 0xa7, 0xde, 0x21, 0xf6, 0x2e, 0xad,
 | 
			
		||||
	0xb0, 0x16, 0xde, 0x06, 0xa0, 0x47, 0xc3, 0x18, 0x02, 0x0a, 0x05, 0xf0, 0x92, 0x40, 0xd3, 0x4c,
 | 
			
		||||
	0xa2, 0x3a, 0x4c, 0x91, 0x0e, 0x93, 0xc4, 0x10, 0x2d, 0x43, 0x8f, 0x7f, 0x85, 0x09, 0x28, 0x91,
 | 
			
		||||
	0xfa, 0x91, 0x09, 0x78, 0x64, 0xd7, 0x8c, 0x4c, 0xc0, 0xa3, 0xeb, 0xe3, 0x55, 0x80, 0xfc, 0xca,
 | 
			
		||||
	0x39, 0xbf, 0x06, 0xc1, 0xd5, 0x78, 0x0d, 0xd0, 0x5c, 0x8f, 0xf1, 0xdf, 0x16, 0x6a, 0x96, 0xa9,
 | 
			
		||||
	0x3a, 0xde, 0xa3, 0x55, 0xf6, 0x8f, 0x4d, 0xab, 0xed, 0x0a, 0xe7, 0x63, 0x00, 0xf8, 0xfe, 0xe4,
 | 
			
		||||
	0x11, 0xd5, 0x0f, 0x4e, 0x52, 0x5d, 0x27, 0x86, 0x9b, 0x3e, 0xb9, 0x82, 0x6d, 0x21, 0x09, 0xa0,
 | 
			
		||||
	0xff, 0xc3, 0x42, 0x1b, 0xc5, 0x22, 0x89, 0x77, 0xe9, 0xf4, 0xea, 0x6f, 0xb7, 0xaa, 0xc8, 0xae,
 | 
			
		||||
	0xf3, 0x01, 0xe0, 0x7e, 0xe7, 0x21, 0x6e, 0x3d, 0x95, 0xe9, 0x04, 0x80, 0xa4, 0x1a, 0x9c, 0x80,
 | 
			
		||||
	0xef, 0xe1, 0x48, 0x0f, 0x6b, 0xc2, 0xbf, 0x03, 0xe8, 0x62, 0xb1, 0x1b, 0x01, 0x3d, 0x59, 0x6a,
 | 
			
		||||
	0x47, 0x40, 0x3f, 0x22, 0x9f, 0xce, 0x7b, 0x00, 0xfa, 0x2d, 0x08, 0x2a, 0x07, 0x6b, 0xfe, 0x49,
 | 
			
		||||
	0x16, 0x09, 0xc5, 0x3f, 0x16, 0xda, 0x2a, 0xd5, 0x3e, 0x4c, 0x69, 0x25, 0xfd, 0xb5, 0xf7, 0x2b,
 | 
			
		||||
	0x6a, 0xaa, 0xf3, 0x21, 0x60, 0x7f, 0x37, 0x8d, 0x9b, 0x05, 0xbe, 0xfd, 0x1a, 0x9c, 0x27, 0x5f,
 | 
			
		||||
	0x88, 0x76, 0xcc, 0xe2, 0x1b, 0xf2, 0x55, 0x87, 0xc5, 0x09, 0x3f, 0x25, 0x57, 0x0a, 0x7e, 0x25,
 | 
			
		||||
	0x7c, 0xc4, 0x49, 0xd8, 0x49, 0xfd, 0xd6, 0xb2, 0x9e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x27, 0xc5,
 | 
			
		||||
	0x15, 0xba, 0x30, 0x0d, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										850
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/gamenotifications.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										850
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/gamenotifications.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,850 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_gamenotifications.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_Variable struct {
 | 
			
		||||
	Key              *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
 | 
			
		||||
	Value            *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Variable) Reset()                    { *m = CGameNotifications_Variable{} }
 | 
			
		||||
func (m *CGameNotifications_Variable) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_Variable) ProtoMessage()               {}
 | 
			
		||||
func (*CGameNotifications_Variable) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Variable) GetKey() string {
 | 
			
		||||
	if m != nil && m.Key != nil {
 | 
			
		||||
		return *m.Key
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Variable) GetValue() string {
 | 
			
		||||
	if m != nil && m.Value != nil {
 | 
			
		||||
		return *m.Value
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_LocalizedText struct {
 | 
			
		||||
	Token            *string                        `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
 | 
			
		||||
	Variables        []*CGameNotifications_Variable `protobuf:"bytes,2,rep,name=variables" json:"variables,omitempty"`
 | 
			
		||||
	RenderedText     *string                        `protobuf:"bytes,3,opt,name=rendered_text" json:"rendered_text,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                         `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_LocalizedText) Reset()         { *m = CGameNotifications_LocalizedText{} }
 | 
			
		||||
func (m *CGameNotifications_LocalizedText) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_LocalizedText) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_LocalizedText) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_LocalizedText) GetToken() string {
 | 
			
		||||
	if m != nil && m.Token != nil {
 | 
			
		||||
		return *m.Token
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_LocalizedText) GetVariables() []*CGameNotifications_Variable {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Variables
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_LocalizedText) GetRenderedText() string {
 | 
			
		||||
	if m != nil && m.RenderedText != nil {
 | 
			
		||||
		return *m.RenderedText
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_UserStatus struct {
 | 
			
		||||
	Steamid          *uint64                           `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	State            *string                           `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"`
 | 
			
		||||
	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"`
 | 
			
		||||
	Message          *CGameNotifications_LocalizedText `protobuf:"bytes,4,opt,name=message" json:"message,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UserStatus) Reset()                    { *m = CGameNotifications_UserStatus{} }
 | 
			
		||||
func (m *CGameNotifications_UserStatus) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_UserStatus) ProtoMessage()               {}
 | 
			
		||||
func (*CGameNotifications_UserStatus) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{2} }
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UserStatus) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UserStatus) GetState() string {
 | 
			
		||||
	if m != nil && m.State != nil {
 | 
			
		||||
		return *m.State
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UserStatus) GetTitle() *CGameNotifications_LocalizedText {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Title
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UserStatus) GetMessage() *CGameNotifications_LocalizedText {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Message
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_CreateSession_Request struct {
 | 
			
		||||
	Appid            *uint32                           `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Context          *uint64                           `protobuf:"varint,2,opt,name=context" json:"context,omitempty"`
 | 
			
		||||
	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"`
 | 
			
		||||
	Users            []*CGameNotifications_UserStatus  `protobuf:"bytes,4,rep,name=users" json:"users,omitempty"`
 | 
			
		||||
	Steamid          *uint64                           `protobuf:"fixed64,5,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_CreateSession_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_CreateSession_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_CreateSession_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) GetContext() uint64 {
 | 
			
		||||
	if m != nil && m.Context != nil {
 | 
			
		||||
		return *m.Context
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) GetTitle() *CGameNotifications_LocalizedText {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Title
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) GetUsers() []*CGameNotifications_UserStatus {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Users
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_CreateSession_Response struct {
 | 
			
		||||
	Sessionid        *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_CreateSession_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_CreateSession_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_CreateSession_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_CreateSession_Response) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_DeleteSession_Request struct {
 | 
			
		||||
	Sessionid        *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,3,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_DeleteSession_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_DeleteSession_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_DeleteSession_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Request) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_DeleteSession_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_DeleteSession_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_DeleteSession_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_DeleteSession_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_DeleteSession_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_UpdateSession_Request struct {
 | 
			
		||||
	Sessionid        *uint64                           `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Appid            *uint32                           `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"`
 | 
			
		||||
	Users            []*CGameNotifications_UserStatus  `protobuf:"bytes,4,rep,name=users" json:"users,omitempty"`
 | 
			
		||||
	Steamid          *uint64                           `protobuf:"fixed64,6,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_UpdateSession_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_UpdateSession_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_UpdateSession_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) GetTitle() *CGameNotifications_LocalizedText {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Title
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) GetUsers() []*CGameNotifications_UserStatus {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Users
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_UpdateSession_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_UpdateSession_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_UpdateSession_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_UpdateSession_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CGameNotifications_UpdateSession_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{8}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_EnumerateSessions_Request struct {
 | 
			
		||||
	Appid                  *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	IncludeAllUserMessages *bool   `protobuf:"varint,3,opt,name=include_all_user_messages" json:"include_all_user_messages,omitempty"`
 | 
			
		||||
	IncludeAuthUserMessage *bool   `protobuf:"varint,4,opt,name=include_auth_user_message" json:"include_auth_user_message,omitempty"`
 | 
			
		||||
	Language               *string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"`
 | 
			
		||||
	XXX_unrecognized       []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_EnumerateSessions_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_EnumerateSessions_Request) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_EnumerateSessions_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) GetIncludeAllUserMessages() bool {
 | 
			
		||||
	if m != nil && m.IncludeAllUserMessages != nil {
 | 
			
		||||
		return *m.IncludeAllUserMessages
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) GetIncludeAuthUserMessage() bool {
 | 
			
		||||
	if m != nil && m.IncludeAuthUserMessage != nil {
 | 
			
		||||
		return *m.IncludeAuthUserMessage
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Request) GetLanguage() string {
 | 
			
		||||
	if m != nil && m.Language != nil {
 | 
			
		||||
		return *m.Language
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_Session struct {
 | 
			
		||||
	Sessionid        *uint64                           `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Appid            *uint64                           `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Context          *uint64                           `protobuf:"varint,3,opt,name=context" json:"context,omitempty"`
 | 
			
		||||
	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,4,opt,name=title" json:"title,omitempty"`
 | 
			
		||||
	TimeCreated      *uint32                           `protobuf:"varint,5,opt,name=time_created" json:"time_created,omitempty"`
 | 
			
		||||
	TimeUpdated      *uint32                           `protobuf:"varint,6,opt,name=time_updated" json:"time_updated,omitempty"`
 | 
			
		||||
	UserStatus       []*CGameNotifications_UserStatus  `protobuf:"bytes,7,rep,name=user_status" json:"user_status,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) Reset()                    { *m = CGameNotifications_Session{} }
 | 
			
		||||
func (m *CGameNotifications_Session) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CGameNotifications_Session) ProtoMessage()               {}
 | 
			
		||||
func (*CGameNotifications_Session) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{10} }
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetAppid() uint64 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetContext() uint64 {
 | 
			
		||||
	if m != nil && m.Context != nil {
 | 
			
		||||
		return *m.Context
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetTitle() *CGameNotifications_LocalizedText {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Title
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetTimeCreated() uint32 {
 | 
			
		||||
	if m != nil && m.TimeCreated != nil {
 | 
			
		||||
		return *m.TimeCreated
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetTimeUpdated() uint32 {
 | 
			
		||||
	if m != nil && m.TimeUpdated != nil {
 | 
			
		||||
		return *m.TimeUpdated
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_Session) GetUserStatus() []*CGameNotifications_UserStatus {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.UserStatus
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_EnumerateSessions_Response struct {
 | 
			
		||||
	Sessions         []*CGameNotifications_Session `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                        `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_EnumerateSessions_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_EnumerateSessions_Response) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_EnumerateSessions_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{11}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_EnumerateSessions_Response) GetSessions() []*CGameNotifications_Session {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Sessions
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_GetSessionDetails_Request struct {
 | 
			
		||||
	Sessions         []*CGameNotifications_GetSessionDetails_Request_RequestedSession `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"`
 | 
			
		||||
	Appid            *uint32                                                          `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Language         *string                                                          `protobuf:"bytes,3,opt,name=language" json:"language,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                                           `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_GetSessionDetails_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Request) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{12}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request) GetSessions() []*CGameNotifications_GetSessionDetails_Request_RequestedSession {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Sessions
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request) GetLanguage() string {
 | 
			
		||||
	if m != nil && m.Language != nil {
 | 
			
		||||
		return *m.Language
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_GetSessionDetails_Request_RequestedSession struct {
 | 
			
		||||
	Sessionid              *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	IncludeAuthUserMessage *bool   `protobuf:"varint,3,opt,name=include_auth_user_message" json:"include_auth_user_message,omitempty"`
 | 
			
		||||
	XXX_unrecognized       []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) Reset() {
 | 
			
		||||
	*m = CGameNotifications_GetSessionDetails_Request_RequestedSession{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Request_RequestedSession) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Request_RequestedSession) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{12, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) GetIncludeAuthUserMessage() bool {
 | 
			
		||||
	if m != nil && m.IncludeAuthUserMessage != nil {
 | 
			
		||||
		return *m.IncludeAuthUserMessage
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_GetSessionDetails_Response struct {
 | 
			
		||||
	Sessions         []*CGameNotifications_Session `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                        `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_GetSessionDetails_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Response) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_GetSessionDetails_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{13}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_GetSessionDetails_Response) GetSessions() []*CGameNotifications_Session {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Sessions
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GameNotificationSettings struct {
 | 
			
		||||
	Appid              *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	AllowNotifications *bool   `protobuf:"varint,2,opt,name=allow_notifications" json:"allow_notifications,omitempty"`
 | 
			
		||||
	XXX_unrecognized   []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *GameNotificationSettings) Reset()                    { *m = GameNotificationSettings{} }
 | 
			
		||||
func (m *GameNotificationSettings) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*GameNotificationSettings) ProtoMessage()               {}
 | 
			
		||||
func (*GameNotificationSettings) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{14} }
 | 
			
		||||
 | 
			
		||||
func (m *GameNotificationSettings) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *GameNotificationSettings) GetAllowNotifications() bool {
 | 
			
		||||
	if m != nil && m.AllowNotifications != nil {
 | 
			
		||||
		return *m.AllowNotifications
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_UpdateNotificationSettings_Request struct {
 | 
			
		||||
	GameNotificationSettings []*GameNotificationSettings `protobuf:"bytes,1,rep,name=game_notification_settings" json:"game_notification_settings,omitempty"`
 | 
			
		||||
	XXX_unrecognized         []byte                      `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateNotificationSettings_Request) Reset() {
 | 
			
		||||
	*m = CGameNotifications_UpdateNotificationSettings_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_UpdateNotificationSettings_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_UpdateNotificationSettings_Request) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_UpdateNotificationSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{15}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateNotificationSettings_Request) GetGameNotificationSettings() []*GameNotificationSettings {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.GameNotificationSettings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_UpdateNotificationSettings_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_UpdateNotificationSettings_Response) Reset() {
 | 
			
		||||
	*m = CGameNotifications_UpdateNotificationSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_UpdateNotificationSettings_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_UpdateNotificationSettings_Response) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_UpdateNotificationSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{16}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_OnNotificationsRequested_Notification struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnNotificationsRequested_Notification) Reset() {
 | 
			
		||||
	*m = CGameNotifications_OnNotificationsRequested_Notification{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_OnNotificationsRequested_Notification) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_OnNotificationsRequested_Notification) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_OnNotificationsRequested_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{17}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnNotificationsRequested_Notification) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnNotificationsRequested_Notification) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CGameNotifications_OnUserStatusChanged_Notification struct {
 | 
			
		||||
	Steamid          *uint64                        `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	Sessionid        *uint64                        `protobuf:"varint,2,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Appid            *uint32                        `protobuf:"varint,3,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	Status           *CGameNotifications_UserStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"`
 | 
			
		||||
	Removed          *bool                          `protobuf:"varint,5,opt,name=removed" json:"removed,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                         `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) Reset() {
 | 
			
		||||
	*m = CGameNotifications_OnUserStatusChanged_Notification{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CGameNotifications_OnUserStatusChanged_Notification) ProtoMessage() {}
 | 
			
		||||
func (*CGameNotifications_OnUserStatusChanged_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return gamenotifications_fileDescriptor0, []int{18}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) GetSessionid() uint64 {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) GetStatus() *CGameNotifications_UserStatus {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Status
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CGameNotifications_OnUserStatusChanged_Notification) GetRemoved() bool {
 | 
			
		||||
	if m != nil && m.Removed != nil {
 | 
			
		||||
		return *m.Removed
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_Variable)(nil), "CGameNotifications_Variable")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_LocalizedText)(nil), "CGameNotifications_LocalizedText")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_UserStatus)(nil), "CGameNotifications_UserStatus")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_CreateSession_Request)(nil), "CGameNotifications_CreateSession_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_CreateSession_Response)(nil), "CGameNotifications_CreateSession_Response")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_DeleteSession_Request)(nil), "CGameNotifications_DeleteSession_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_DeleteSession_Response)(nil), "CGameNotifications_DeleteSession_Response")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_UpdateSession_Request)(nil), "CGameNotifications_UpdateSession_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_UpdateSession_Response)(nil), "CGameNotifications_UpdateSession_Response")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_EnumerateSessions_Request)(nil), "CGameNotifications_EnumerateSessions_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_Session)(nil), "CGameNotifications_Session")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_EnumerateSessions_Response)(nil), "CGameNotifications_EnumerateSessions_Response")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_GetSessionDetails_Request)(nil), "CGameNotifications_GetSessionDetails_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_GetSessionDetails_Request_RequestedSession)(nil), "CGameNotifications_GetSessionDetails_Request.RequestedSession")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_GetSessionDetails_Response)(nil), "CGameNotifications_GetSessionDetails_Response")
 | 
			
		||||
	proto.RegisterType((*GameNotificationSettings)(nil), "GameNotificationSettings")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_UpdateNotificationSettings_Request)(nil), "CGameNotifications_UpdateNotificationSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_UpdateNotificationSettings_Response)(nil), "CGameNotifications_UpdateNotificationSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_OnNotificationsRequested_Notification)(nil), "CGameNotifications_OnNotificationsRequested_Notification")
 | 
			
		||||
	proto.RegisterType((*CGameNotifications_OnUserStatusChanged_Notification)(nil), "CGameNotifications_OnUserStatusChanged_Notification")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var gamenotifications_fileDescriptor0 = []byte{
 | 
			
		||||
	// 2245 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x8f, 0x1c, 0x47,
 | 
			
		||||
	0x15, 0x57, 0xef, 0xec, 0x7a, 0xd7, 0x65, 0x2c, 0x91, 0x0e, 0x12, 0x93, 0xb1, 0xe3, 0xb4, 0x3b,
 | 
			
		||||
	0x38, 0xde, 0x8d, 0x77, 0xcb, 0x78, 0x43, 0xfc, 0x01, 0x24, 0xc2, 0xbd, 0x8e, 0x4c, 0x24, 0xb3,
 | 
			
		||||
	0x49, 0xbc, 0x9b, 0x60, 0x21, 0xc4, 0xa8, 0xa6, 0xbb, 0x66, 0xa7, 0xb3, 0x3d, 0xdd, 0x43, 0x57,
 | 
			
		||||
	0xf5, 0x6e, 0x36, 0x07, 0x82, 0xcc, 0xd7, 0x09, 0x82, 0x48, 0x22, 0x40, 0x48, 0x91, 0x90, 0x50,
 | 
			
		||||
	0xc4, 0x81, 0x0b, 0x87, 0x1c, 0x41, 0x48, 0x91, 0x38, 0x72, 0xcc, 0x15, 0xce, 0xfc, 0x15, 0xbc,
 | 
			
		||||
	0xfa, 0xec, 0xee, 0x99, 0x1e, 0xef, 0xcc, 0x22, 0x11, 0x71, 0xb1, 0x3c, 0x5d, 0xf5, 0xde, 0xfb,
 | 
			
		||||
	0xd5, 0x7b, 0xbf, 0xf7, 0x51, 0xb5, 0xe8, 0x1a, 0xe3, 0x94, 0x0c, 0x87, 0x94, 0x31, 0xb2, 0x47,
 | 
			
		||||
	0x59, 0x77, 0x8f, 0x0c, 0x69, 0x9a, 0xf1, 0xb8, 0x1f, 0x87, 0x84, 0xc7, 0x59, 0xca, 0xb0, 0x5c,
 | 
			
		||||
	0x0f, 0x93, 0x98, 0xa6, 0x1c, 0x8f, 0xf2, 0x8c, 0x67, 0x9d, 0xf5, 0xba, 0x48, 0x91, 0xc2, 0x6e,
 | 
			
		||||
	0x1a, 0x75, 0x7b, 0x84, 0xd1, 0xc9, 0xdd, 0xfe, 0xbf, 0x16, 0xd0, 0xb9, 0xad, 0xbb, 0xa0, 0x76,
 | 
			
		||||
	0xbb, 0xaa, 0xb6, 0xfb, 0x06, 0xc9, 0x63, 0xd2, 0x4b, 0xa8, 0xfb, 0x91, 0x83, 0x5a, 0xfb, 0xf4,
 | 
			
		||||
	0xa8, 0xed, 0x78, 0xce, 0xea, 0xe9, 0xe0, 0x37, 0xce, 0xc3, 0x8f, 0xdb, 0xef, 0x39, 0xbb, 0x03,
 | 
			
		||||
	0xea, 0xa5, 0x20, 0xe3, 0x65, 0x7d, 0x8f, 0xc3, 0xff, 0x0f, 0xf4, 0x6e, 0x2f, 0x4e, 0xe5, 0xef,
 | 
			
		||||
	0x24, 0x0b, 0x49, 0x12, 0xbf, 0x4d, 0x23, 0x8f, 0xd3, 0xb7, 0xb8, 0xb7, 0xb1, 0xe1, 0x91, 0xf4,
 | 
			
		||||
	0xe8, 0x70, 0x40, 0x73, 0x0a, 0xcb, 0x84, 0x7b, 0x97, 0x8c, 0x80, 0x50, 0x72, 0xc9, 0x8b, 0x99,
 | 
			
		||||
	0xd7, 0xcf, 0x8a, 0x34, 0xf2, 0x0e, 0x63, 0x3e, 0xd0, 0x2a, 0xa4, 0x60, 0xcc, 0xe1, 0x53, 0x92,
 | 
			
		||||
	0x78, 0x3d, 0xea, 0xb1, 0xa2, 0xc7, 0x78, 0xcc, 0x8b, 0x88, 0xaa, 0x6d, 0x72, 0xd3, 0x5e, 0x7c,
 | 
			
		||||
	0x40, 0x53, 0xb0, 0x9e, 0x14, 0xd4, 0xfd, 0xb5, 0x83, 0x96, 0xe4, 0xff, 0xda, 0x0b, 0x12, 0xea,
 | 
			
		||||
	0xcf, 0x04, 0xd4, 0x87, 0x12, 0xaa, 0xfc, 0x3c, 0x81, 0x95, 0x67, 0x56, 0x29, 0x9f, 0x86, 0x1c,
 | 
			
		||||
	0xbe, 0x8e, 0x12, 0x12, 0x5a, 0x61, 0x63, 0x50, 0xa9, 0xc0, 0x9e, 0xb7, 0x45, 0x52, 0x40, 0xc9,
 | 
			
		||||
	0x68, 0xd2, 0x17, 0x20, 0x89, 0x91, 0x97, 0x5e, 0x04, 0x0b, 0xfb, 0x34, 0xc5, 0xfe, 0x4f, 0x5a,
 | 
			
		||||
	0xc8, 0x6b, 0x70, 0xf1, 0x3d, 0x63, 0x6a, 0x17, 0x2c, 0xb9, 0xdf, 0x44, 0x4b, 0x72, 0xbb, 0x76,
 | 
			
		||||
	0xf4, 0x2d, 0x00, 0xff, 0xfc, 0xed, 0x06, 0x75, 0xca, 0x81, 0x43, 0x32, 0x62, 0xe2, 0x00, 0x02,
 | 
			
		||||
	0x53, 0x44, 0x59, 0x9c, 0x03, 0x60, 0xc6, 0xf3, 0x38, 0xdd, 0xc3, 0xee, 0xcf, 0x1d, 0x74, 0xda,
 | 
			
		||||
	0x20, 0x64, 0xe0, 0x8c, 0xd6, 0xea, 0x99, 0xcd, 0xf3, 0xf8, 0x11, 0x31, 0x0e, 0xbe, 0x0b, 0xc6,
 | 
			
		||||
	0x1e, 0x80, 0xb1, 0x98, 0x71, 0x71, 0x50, 0x2b, 0xac, 0x1c, 0xc7, 0x26, 0x3d, 0x05, 0xd1, 0xac,
 | 
			
		||||
	0xec, 0x52, 0xb1, 0x9b, 0x70, 0xa0, 0xc1, 0xf3, 0x53, 0x07, 0x9d, 0xcd, 0x69, 0x1a, 0x41, 0xf4,
 | 
			
		||||
	0xa3, 0xae, 0xf0, 0x6a, 0xbb, 0x25, 0x8f, 0x98, 0x81, 0xd5, 0x7d, 0x71, 0x76, 0xcf, 0xac, 0x1a,
 | 
			
		||||
	0x1d, 0x39, 0xfd, 0x3e, 0x98, 0xe5, 0xf0, 0x21, 0x21, 0xe9, 0x5e, 0x01, 0x34, 0x5e, 0xf7, 0xc2,
 | 
			
		||||
	0x6c, 0x38, 0x4a, 0x28, 0x98, 0x97, 0xc1, 0xb7, 0x41, 0xb4, 0xb8, 0xc4, 0x89, 0xd6, 0xbd, 0xb8,
 | 
			
		||||
	0x2f, 0x62, 0xa0, 0x85, 0xbc, 0x43, 0xc2, 0x3c, 0x36, 0xa2, 0xa1, 0x4c, 0x00, 0xec, 0x7f, 0xb0,
 | 
			
		||||
	0x88, 0x9e, 0x6c, 0x70, 0xc3, 0xeb, 0x8c, 0xe6, 0x3b, 0x9c, 0xf0, 0x82, 0xb9, 0xd7, 0xd0, 0xb2,
 | 
			
		||||
	0xcc, 0x90, 0x38, 0x92, 0x61, 0x38, 0x15, 0x78, 0x80, 0xf1, 0xbc, 0xa0, 0x90, 0x56, 0x13, 0x7a,
 | 
			
		||||
	0x05, 0xec, 0xbe, 0x0c, 0x6a, 0xd5, 0x36, 0xec, 0xfe, 0x01, 0x68, 0xc7, 0x40, 0xda, 0xd0, 0xee,
 | 
			
		||||
	0x7d, 0x41, 0xbb, 0x77, 0x25, 0xed, 0xec, 0x56, 0x58, 0x05, 0xaa, 0xe4, 0x94, 0x44, 0x47, 0x22,
 | 
			
		||||
	0x17, 0xb8, 0x5e, 0x13, 0xbc, 0x57, 0x1f, 0xc1, 0xc1, 0x40, 0xb3, 0x23, 0xd8, 0x74, 0x48, 0x62,
 | 
			
		||||
	0x0e, 0x5e, 0x13, 0xdb, 0x84, 0x0a, 0x91, 0xef, 0x62, 0x9b, 0xf9, 0x9c, 0x09, 0xdf, 0x7b, 0x24,
 | 
			
		||||
	0x94, 0x7c, 0xe8, 0xe7, 0xd9, 0xd0, 0x2a, 0xc3, 0xd6, 0x43, 0xd1, 0xba, 0xa2, 0xaa, 0x16, 0xcd,
 | 
			
		||||
	0x0e, 0x60, 0xd1, 0xfd, 0x31, 0xc0, 0x04, 0x3f, 0x25, 0x54, 0x3a, 0xff, 0xcc, 0xe6, 0x45, 0x7c,
 | 
			
		||||
	0x1c, 0x23, 0x83, 0xfb, 0x70, 0x90, 0xed, 0x5d, 0x21, 0x63, 0xd8, 0xcf, 0xa0, 0xa6, 0x28, 0x22,
 | 
			
		||||
	0x7a, 0x51, 0xcc, 0x04, 0x62, 0xc5, 0x41, 0xb0, 0xa2, 0xce, 0x23, 0xc3, 0x17, 0xe7, 0x96, 0x49,
 | 
			
		||||
	0x02, 0xe8, 0x81, 0x95, 0x63, 0xd8, 0xfd, 0x95, 0x83, 0x96, 0x75, 0x65, 0x6a, 0x2f, 0xce, 0x0a,
 | 
			
		||||
	0xe4, 0x7b, 0x00, 0xe4, 0x3b, 0x3b, 0x45, 0x8f, 0xcf, 0x83, 0x45, 0xfe, 0x53, 0xd6, 0x93, 0x47,
 | 
			
		||||
	0x80, 0xf2, 0xdf, 0x5b, 0x42, 0xab, 0x0d, 0x20, 0xb6, 0x20, 0x36, 0x9c, 0xee, 0xa8, 0x6d, 0xdd,
 | 
			
		||||
	0xfb, 0x8a, 0x93, 0xee, 0x0d, 0xb4, 0x44, 0x46, 0x23, 0x4d, 0x90, 0xb3, 0xc1, 0x2a, 0x60, 0xfb,
 | 
			
		||||
	0x92, 0x88, 0x94, 0xfc, 0x28, 0x20, 0x84, 0x52, 0xac, 0x86, 0xb1, 0x9f, 0x41, 0x04, 0xde, 0x41,
 | 
			
		||||
	0xcb, 0x61, 0x96, 0x4a, 0xfe, 0x0b, 0xa6, 0x2c, 0x06, 0x29, 0x88, 0xbe, 0x29, 0xcc, 0x6e, 0x58,
 | 
			
		||||
	0x8e, 0x7a, 0x7a, 0x87, 0xae, 0x58, 0x36, 0x8c, 0x21, 0x04, 0x1d, 0x0e, 0x24, 0xf5, 0x13, 0xc6,
 | 
			
		||||
	0xb2, 0x30, 0x1e, 0x37, 0x21, 0xb3, 0x82, 0x65, 0xa2, 0x24, 0xf7, 0xde, 0xa4, 0x21, 0x17, 0x4c,
 | 
			
		||||
	0x51, 0xc7, 0xee, 0x91, 0x10, 0xca, 0x06, 0x30, 0xf5, 0x47, 0xf3, 0x53, 0xe0, 0x35, 0x80, 0xf8,
 | 
			
		||||
	0x2d, 0x71, 0xba, 0x69, 0xae, 0x87, 0x9a, 0xa7, 0xbd, 0x4f, 0x6d, 0xf5, 0xa6, 0x24, 0x1c, 0x18,
 | 
			
		||||
	0xee, 0x1b, 0x9f, 0x97, 0x0c, 0x20, 0x68, 0x49, 0xac, 0x31, 0x08, 0xbf, 0x28, 0x4c, 0x17, 0xf0,
 | 
			
		||||
	0x23, 0x33, 0x32, 0xd8, 0x04, 0x04, 0x58, 0x20, 0x88, 0x53, 0xc8, 0x00, 0x92, 0xa8, 0x6c, 0x92,
 | 
			
		||||
	0x61, 0x84, 0xbe, 0x20, 0x35, 0x99, 0xaa, 0xa1, 0x6d, 0x60, 0xf7, 0x13, 0xa7, 0x4c, 0xe3, 0x25,
 | 
			
		||||
	0x99, 0xc6, 0x7f, 0x16, 0x49, 0xf9, 0x27, 0x67, 0xf5, 0x95, 0x91, 0x30, 0x40, 0x92, 0x35, 0x93,
 | 
			
		||||
	0xbf, 0xe2, 0x0c, 0x43, 0xb2, 0x4f, 0xab, 0x65, 0x47, 0xb8, 0xae, 0x47, 0x07, 0x04, 0x4a, 0x3a,
 | 
			
		||||
	0x98, 0x81, 0x44, 0x84, 0xa2, 0x62, 0x23, 0xb4, 0x5e, 0x66, 0xef, 0xb0, 0x80, 0xbd, 0x3d, 0x3a,
 | 
			
		||||
	0x66, 0x1e, 0xf2, 0x33, 0xaa, 0x60, 0xeb, 0x51, 0x91, 0xb6, 0x24, 0x8a, 0x54, 0xf0, 0xaa, 0x1b,
 | 
			
		||||
	0x8d, 0x7c, 0x3f, 0x87, 0x76, 0x1c, 0xb1, 0xb2, 0xab, 0xc9, 0x74, 0xf6, 0x63, 0xb4, 0x36, 0x03,
 | 
			
		||||
	0x29, 0xd9, 0x08, 0xbe, 0x52, 0xf7, 0xeb, 0xe8, 0xb4, 0x56, 0xab, 0x99, 0xb9, 0x18, 0xac, 0xc1,
 | 
			
		||||
	0x91, 0x2f, 0xed, 0x96, 0xf6, 0xe0, 0xb0, 0x3a, 0x7e, 0x8a, 0xa1, 0x91, 0x75, 0x98, 0xff, 0xee,
 | 
			
		||||
	0x42, 0x63, 0x02, 0xdc, 0xa1, 0xa2, 0x9c, 0x8c, 0x27, 0xc0, 0xd5, 0x49, 0x53, 0xe7, 0xc1, 0x54,
 | 
			
		||||
	0xbb, 0x6e, 0x4a, 0xa4, 0xa5, 0x14, 0xc7, 0xee, 0x75, 0x93, 0x31, 0x0b, 0x32, 0x63, 0x2e, 0xc3,
 | 
			
		||||
	0xe6, 0xa7, 0xcb, 0x8c, 0x69, 0x48, 0x67, 0x2d, 0xf7, 0x76, 0x19, 0xc5, 0x96, 0x8c, 0x62, 0x0c,
 | 
			
		||||
	0x92, 0xf4, 0x7f, 0x11, 0x43, 0xec, 0x5f, 0x69, 0x74, 0xfe, 0xb8, 0x43, 0x94, 0xf3, 0xfd, 0xbf,
 | 
			
		||||
	0x34, 0xd7, 0x8f, 0xd7, 0x47, 0x11, 0xf9, 0x2f, 0xdc, 0x57, 0x48, 0xf1, 0xf9, 0xdd, 0x67, 0xe4,
 | 
			
		||||
	0x7e, 0x39, 0x7f, 0xba, 0xcb, 0x42, 0x5b, 0x71, 0xb0, 0x1c, 0xf3, 0xe8, 0x61, 0x63, 0xf6, 0x43,
 | 
			
		||||
	0xaf, 0x7a, 0xb9, 0xef, 0xc1, 0x2c, 0x3a, 0xee, 0x57, 0xb5, 0x59, 0x8e, 0x6d, 0x62, 0x15, 0x9c,
 | 
			
		||||
	0x1b, 0x0e, 0xa0, 0x21, 0x43, 0x03, 0x76, 0xff, 0xe1, 0xcc, 0x97, 0xfc, 0x1f, 0x8a, 0xb4, 0xfd,
 | 
			
		||||
	0x6d, 0x35, 0x6d, 0xcb, 0x21, 0x45, 0xa5, 0xd7, 0xe1, 0x20, 0x63, 0x54, 0xd7, 0x04, 0x33, 0x29,
 | 
			
		||||
	0x2a, 0x07, 0x48, 0x1f, 0xe6, 0xb4, 0x9f, 0x88, 0x62, 0x58, 0x8e, 0x6e, 0xba, 0x19, 0xbf, 0xdc,
 | 
			
		||||
	0xb7, 0x1c, 0x60, 0x1e, 0x81, 0xb1, 0x54, 0x40, 0x25, 0x89, 0xea, 0xc6, 0x75, 0x32, 0xc8, 0x53,
 | 
			
		||||
	0x1d, 0x59, 0xed, 0x36, 0x95, 0x63, 0x5e, 0xaf, 0x34, 0xa7, 0xfe, 0x6f, 0x2b, 0x4d, 0x33, 0xd9,
 | 
			
		||||
	0xc7, 0xe9, 0xab, 0xc9, 0xfe, 0xfb, 0x45, 0xb4, 0xde, 0xb0, 0xfb, 0xa5, 0xb4, 0x18, 0xd2, 0xbc,
 | 
			
		||||
	0x14, 0x60, 0x96, 0xf0, 0x3f, 0xa8, 0x37, 0x4c, 0x35, 0xf5, 0x8d, 0x93, 0xdd, 0x38, 0x24, 0xa2,
 | 
			
		||||
	0x9c, 0xc4, 0x09, 0x93, 0x1d, 0xd3, 0x33, 0x3e, 0xc4, 0x0d, 0x4c, 0x13, 0xe7, 0xe6, 0x95, 0x19,
 | 
			
		||||
	0x4b, 0x5b, 0xb5, 0x61, 0xca, 0x29, 0x2f, 0xf2, 0x54, 0x90, 0xee, 0x17, 0x0e, 0x7a, 0x22, 0x4e,
 | 
			
		||||
	0xc3, 0x04, 0x6e, 0x0e, 0x5d, 0x90, 0xea, 0x0a, 0x89, 0xae, 0xb9, 0x1d, 0xc9, 0xdc, 0x58, 0x09,
 | 
			
		||||
	0xf6, 0x01, 0xd4, 0x5e, 0x25, 0x66, 0x41, 0x96, 0x25, 0x14, 0x7a, 0x2e, 0xc0, 0xa1, 0xf9, 0x10,
 | 
			
		||||
	0x5a, 0x0f, 0x78, 0x16, 0xae, 0x2f, 0x60, 0x30, 0x97, 0x56, 0xb5, 0xb8, 0x80, 0x59, 0x89, 0x00,
 | 
			
		||||
	0x1b, 0x64, 0x45, 0x12, 0xa9, 0x40, 0x49, 0x7b, 0x11, 0xf6, 0xee, 0xd0, 0x3e, 0x29, 0x12, 0x2e,
 | 
			
		||||
	0x67, 0xe8, 0x3e, 0x49, 0xe0, 0x0a, 0xe6, 0xfe, 0xae, 0x0a, 0xa8, 0xe0, 0x83, 0x1a, 0x22, 0x39,
 | 
			
		||||
	0x15, 0xad, 0x04, 0x6f, 0x01, 0x20, 0x7e, 0x42, 0x40, 0xe2, 0xb7, 0xd0, 0x0b, 0x77, 0x3c, 0x11,
 | 
			
		||||
	0x1e, 0xa0, 0x83, 0x24, 0xd1, 0x8c, 0xe8, 0x02, 0xb4, 0x62, 0xe6, 0x67, 0xd9, 0x3c, 0x4f, 0x07,
 | 
			
		||||
	0x5f, 0x06, 0x2c, 0xeb, 0x15, 0x2c, 0xf7, 0xcc, 0x78, 0x0d, 0x42, 0x66, 0xda, 0xaf, 0x5c, 0xd9,
 | 
			
		||||
	0xa0, 0x7a, 0x7e, 0xb2, 0x88, 0x3a, 0x0d, 0x1c, 0xd1, 0xd4, 0x80, 0x8a, 0x36, 0x51, 0x02, 0x9f,
 | 
			
		||||
	0x06, 0x1b, 0x4f, 0xd5, 0x59, 0xa1, 0x8e, 0x12, 0xb3, 0xb2, 0xaf, 0x6f, 0x54, 0x2b, 0xe1, 0x62,
 | 
			
		||||
	0x70, 0x01, 0x64, 0x3a, 0x65, 0x25, 0x34, 0x47, 0xb7, 0xdb, 0x2b, 0x03, 0x57, 0xeb, 0x33, 0x19,
 | 
			
		||||
	0xb8, 0x1e, 0x98, 0x02, 0x3c, 0xf3, 0xa4, 0xfb, 0x0c, 0x20, 0xf4, 0xc5, 0x91, 0xc2, 0x22, 0x87,
 | 
			
		||||
	0x4b, 0x11, 0xd7, 0xc5, 0x74, 0xe2, 0x68, 0x5f, 0x43, 0x9f, 0xe3, 0xf1, 0x90, 0x76, 0x75, 0x27,
 | 
			
		||||
	0x97, 0x81, 0x3a, 0x1b, 0x5c, 0x02, 0xe9, 0x8b, 0x6a, 0x5a, 0x1b, 0x8e, 0x81, 0x85, 0x8b, 0x90,
 | 
			
		||||
	0xde, 0x8b, 0xdd, 0x6f, 0x68, 0x61, 0x5d, 0x27, 0x65, 0xe1, 0x3a, 0x1b, 0x3c, 0x0b, 0xc2, 0xcf,
 | 
			
		||||
	0x08, 0xe1, 0x84, 0x30, 0xde, 0xac, 0x41, 0x0b, 0x60, 0x37, 0x42, 0x67, 0x24, 0x67, 0x99, 0x2c,
 | 
			
		||||
	0xd3, 0xed, 0xe5, 0x99, 0x8a, 0xf9, 0x55, 0x30, 0x70, 0x45, 0x86, 0x58, 0xfe, 0x36, 0x23, 0x5c,
 | 
			
		||||
	0x59, 0x86, 0xc7, 0x7b, 0xf0, 0x43, 0x07, 0x6d, 0xcc, 0x58, 0x69, 0xf4, 0x14, 0xf4, 0x1a, 0x5a,
 | 
			
		||||
	0x31, 0x85, 0x00, 0x78, 0x25, 0x40, 0x9d, 0xc3, 0xd3, 0x79, 0x18, 0xf8, 0x80, 0xe8, 0x42, 0xd9,
 | 
			
		||||
	0x51, 0x1a, 0xca, 0x09, 0xf6, 0x3f, 0x6d, 0x35, 0x96, 0xbb, 0xbb, 0x94, 0x6b, 0x2d, 0x77, 0x54,
 | 
			
		||||
	0xc5, 0xb2, 0xe5, 0xee, 0xd5, 0x09, 0x0c, 0x2f, 0xe2, 0x79, 0x14, 0xe0, 0xfb, 0xe6, 0xf2, 0x6b,
 | 
			
		||||
	0xd2, 0x05, 0xd7, 0x07, 0x80, 0xa7, 0x00, 0xf5, 0xb9, 0xa9, 0xb4, 0x87, 0x09, 0xfb, 0x46, 0x25,
 | 
			
		||||
	0x83, 0xd5, 0x4d, 0x5b, 0x12, 0xe3, 0xd8, 0xb4, 0xed, 0xfc, 0xdb, 0x41, 0x9f, 0x9f, 0xb0, 0x7e,
 | 
			
		||||
	0x73, 0x32, 0x59, 0x2d, 0xcf, 0x6a, 0x25, 0x7c, 0x8f, 0xd6, 0xcb, 0xf7, 0x31, 0x75, 0xae, 0xf5,
 | 
			
		||||
	0xd9, 0xd6, 0x39, 0xff, 0x9d, 0x46, 0x72, 0x35, 0x85, 0x45, 0x93, 0x6b, 0x7b, 0x3e, 0x72, 0xd9,
 | 
			
		||||
	0x30, 0x19, 0x9f, 0x8c, 0x8d, 0x4f, 0xfe, 0x1f, 0x1d, 0xd4, 0x1e, 0x17, 0xdf, 0xa1, 0x5c, 0x5c,
 | 
			
		||||
	0xf3, 0xd9, 0xc9, 0x6f, 0x99, 0x3b, 0xe8, 0x71, 0xc8, 0xaa, 0xec, 0xb0, 0x5b, 0x7b, 0x25, 0x94,
 | 
			
		||||
	0xd4, 0x59, 0x09, 0xae, 0x83, 0x9a, 0xcd, 0x6f, 0x57, 0xdc, 0x29, 0x1d, 0x26, 0xf7, 0x33, 0xaf,
 | 
			
		||||
	0x2a, 0x50, 0x16, 0x5f, 0x30, 0x88, 0xfd, 0x03, 0xf4, 0xfc, 0xd4, 0x01, 0xa1, 0x09, 0xbe, 0x4d,
 | 
			
		||||
	0x86, 0x17, 0x50, 0x47, 0x94, 0xd3, 0x1a, 0x98, 0x2e, 0xd3, 0xbb, 0xb4, 0x17, 0x9f, 0xc0, 0xd3,
 | 
			
		||||
	0xbc, 0xe0, 0xdf, 0x44, 0xd7, 0xe7, 0xb5, 0xab, 0xa7, 0x94, 0xbf, 0x3b, 0xe8, 0x66, 0x83, 0xe8,
 | 
			
		||||
	0x2b, 0x69, 0xed, 0xb7, 0x25, 0x7b, 0xb7, 0xfa, 0x19, 0x22, 0x3d, 0xf6, 0x0a, 0xf4, 0x02, 0xf8,
 | 
			
		||||
	0xed, 0x96, 0x99, 0xe3, 0x2a, 0x95, 0x42, 0x8c, 0x9f, 0x35, 0xbf, 0xc1, 0xfc, 0x21, 0xde, 0x38,
 | 
			
		||||
	0xcb, 0xf7, 0x2b, 0x19, 0x93, 0xaf, 0xd6, 0x13, 0xf8, 0x0a, 0x68, 0xbb, 0x5c, 0x09, 0xa6, 0x78,
 | 
			
		||||
	0xcf, 0x2b, 0x25, 0xea, 0xaf, 0xbb, 0xfe, 0x5f, 0x5b, 0xe8, 0xb9, 0xc6, 0x83, 0x94, 0x95, 0x75,
 | 
			
		||||
	0x4b, 0x8d, 0xd7, 0xf5, 0x33, 0xbc, 0x38, 0x7e, 0x86, 0x0d, 0xb0, 0xba, 0x36, 0xe5, 0x0c, 0xcc,
 | 
			
		||||
	0x16, 0x65, 0x3b, 0xaa, 0x3f, 0xa8, 0xa6, 0xbd, 0xea, 0xb7, 0x2f, 0x81, 0x86, 0xdb, 0x8d, 0x17,
 | 
			
		||||
	0x4a, 0xdb, 0x24, 0xf4, 0x0b, 0x6f, 0xed, 0xe9, 0xab, 0x60, 0xaa, 0xfd, 0x18, 0xcd, 0xf7, 0x8c,
 | 
			
		||||
	0x37, 0x5a, 0xd2, 0x1b, 0xd2, 0xb7, 0x53, 0xef, 0x33, 0xd3, 0x34, 0x5a, 0x6d, 0x6f, 0xa0, 0x53,
 | 
			
		||||
	0xba, 0x0b, 0xa9, 0x26, 0x7b, 0x5c, 0x17, 0x92, 0x1d, 0xb6, 0x52, 0x70, 0xb6, 0xe1, 0x7a, 0x53,
 | 
			
		||||
	0x36, 0x24, 0x3b, 0x13, 0xbb, 0x77, 0xd1, 0x72, 0x4e, 0x87, 0xd9, 0x81, 0x6e, 0xae, 0x3a, 0x77,
 | 
			
		||||
	0x2a, 0x82, 0x42, 0xa7, 0x37, 0x20, 0x62, 0xee, 0x86, 0x6b, 0x85, 0xde, 0x5b, 0x3e, 0xc9, 0x99,
 | 
			
		||||
	0x34, 0xdf, 0xfc, 0x68, 0x05, 0x3d, 0x36, 0x81, 0x48, 0xbc, 0xd1, 0x3e, 0x26, 0x34, 0xd4, 0xae,
 | 
			
		||||
	0xf3, 0xee, 0x1a, 0x9e, 0xf5, 0x19, 0xaa, 0xf3, 0x2c, 0x9e, 0xf9, 0x71, 0xc0, 0xbf, 0x08, 0xd0,
 | 
			
		||||
	0x9f, 0x54, 0x6b, 0x4c, 0x3e, 0x1f, 0xb2, 0xa3, 0x34, 0x54, 0x73, 0x8e, 0x86, 0x69, 0xf1, 0xd4,
 | 
			
		||||
	0x6e, 0xb8, 0xcd, 0x78, 0x1a, 0x5f, 0x05, 0x9a, 0xf1, 0x4c, 0xb9, 0x2f, 0x4b, 0x3c, 0x6a, 0xed,
 | 
			
		||||
	0x38, 0x3c, 0xb5, 0x4b, 0x48, 0x33, 0x9e, 0xc6, 0x6b, 0x76, 0x33, 0x9e, 0x29, 0x57, 0x1a, 0x89,
 | 
			
		||||
	0x47, 0xad, 0x4d, 0xc3, 0xf3, 0x3e, 0xe0, 0x99, 0x18, 0x3c, 0xdc, 0x0d, 0x3c, 0xcf, 0x4d, 0xa8,
 | 
			
		||||
	0x83, 0xf1, 0x5c, 0xe3, 0x8c, 0x2f, 0x1f, 0x9f, 0xed, 0x3a, 0x40, 0x1b, 0x1f, 0x4f, 0xdc, 0x0f,
 | 
			
		||||
	0x01, 0xd6, 0x44, 0xcb, 0x6a, 0x86, 0x35, 0x75, 0xe0, 0x68, 0x86, 0x35, 0xbd, 0x11, 0xfa, 0x72,
 | 
			
		||||
	0x52, 0x84, 0x75, 0xfd, 0xc7, 0x07, 0xdb, 0xf1, 0x01, 0x9f, 0x7d, 0x25, 0x37, 0x7e, 0xfb, 0xd4,
 | 
			
		||||
	0x41, 0x9d, 0xe9, 0xf5, 0xda, 0xbd, 0x8e, 0x4f, 0xd4, 0x57, 0x3a, 0x37, 0xf0, 0x09, 0xfb, 0xc2,
 | 
			
		||||
	0x5d, 0xc0, 0xbe, 0x65, 0x42, 0x6d, 0x06, 0x0b, 0x52, 0xeb, 0x83, 0x32, 0xee, 0xf5, 0xa2, 0x3e,
 | 
			
		||||
	0x76, 0x38, 0xa8, 0x54, 0x9d, 0x57, 0x41, 0xd1, 0xbd, 0xdb, 0x70, 0xce, 0xfc, 0x20, 0x0e, 0xd5,
 | 
			
		||||
	0x3c, 0xd2, 0x2f, 0xd2, 0x50, 0xed, 0xcf, 0x69, 0x62, 0x5e, 0x20, 0xe4, 0x90, 0x22, 0xf8, 0x94,
 | 
			
		||||
	0x67, 0x69, 0x56, 0x34, 0x68, 0x97, 0x2a, 0xa0, 0xe2, 0x6c, 0xfe, 0x73, 0x01, 0x7d, 0x71, 0xe2,
 | 
			
		||||
	0x50, 0x5b, 0xf2, 0x4f, 0x75, 0xee, 0x07, 0x30, 0x2b, 0x4c, 0xeb, 0x5d, 0xee, 0x2d, 0x7c, 0xd2,
 | 
			
		||||
	0x4e, 0xd7, 0x39, 0x83, 0xb7, 0x33, 0xeb, 0x9b, 0x6b, 0x70, 0xa4, 0x0d, 0xbd, 0x91, 0xa9, 0xb6,
 | 
			
		||||
	0x64, 0x9b, 0x44, 0x36, 0x12, 0x23, 0x22, 0x1f, 0xeb, 0x76, 0x22, 0x4d, 0x1f, 0x6f, 0x68, 0x45,
 | 
			
		||||
	0xee, 0x57, 0xf0, 0x09, 0x7a, 0x56, 0x1d, 0xcd, 0x73, 0x80, 0xe6, 0x6a, 0x75, 0xb9, 0x8e, 0xa8,
 | 
			
		||||
	0x6c, 0x05, 0x83, 0xb2, 0xb9, 0x74, 0xc4, 0x4b, 0xda, 0x17, 0x94, 0xcf, 0xea, 0x48, 0xff, 0xf6,
 | 
			
		||||
	0x71, 0x7b, 0x21, 0x68, 0xfd, 0xd0, 0x71, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x81, 0x5e,
 | 
			
		||||
	0xd6, 0x51, 0x1d, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										163
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/offline.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										163
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/offline.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,163 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_offline.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type COffline_GetOfflineLogonTicket_Request struct {
 | 
			
		||||
	Priority         *uint32 `protobuf:"varint,1,opt,name=priority" json:"priority,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Request) Reset() {
 | 
			
		||||
	*m = COffline_GetOfflineLogonTicket_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*COffline_GetOfflineLogonTicket_Request) ProtoMessage()    {}
 | 
			
		||||
func (*COffline_GetOfflineLogonTicket_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return offline_fileDescriptor0, []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Request) GetPriority() uint32 {
 | 
			
		||||
	if m != nil && m.Priority != nil {
 | 
			
		||||
		return *m.Priority
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type COffline_GetOfflineLogonTicket_Response struct {
 | 
			
		||||
	SerializedTicket []byte `protobuf:"bytes,1,opt,name=serialized_ticket" json:"serialized_ticket,omitempty"`
 | 
			
		||||
	Signature        []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Response) Reset() {
 | 
			
		||||
	*m = COffline_GetOfflineLogonTicket_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*COffline_GetOfflineLogonTicket_Response) ProtoMessage()    {}
 | 
			
		||||
func (*COffline_GetOfflineLogonTicket_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return offline_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Response) GetSerializedTicket() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SerializedTicket
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetOfflineLogonTicket_Response) GetSignature() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Signature
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type COffline_GetUnsignedOfflineLogonTicket_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetUnsignedOfflineLogonTicket_Request) Reset() {
 | 
			
		||||
	*m = COffline_GetUnsignedOfflineLogonTicket_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *COffline_GetUnsignedOfflineLogonTicket_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*COffline_GetUnsignedOfflineLogonTicket_Request) ProtoMessage() {}
 | 
			
		||||
func (*COffline_GetUnsignedOfflineLogonTicket_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return offline_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type COffline_OfflineLogonTicket struct {
 | 
			
		||||
	Accountid           *uint32 `protobuf:"varint,1,opt,name=accountid" json:"accountid,omitempty"`
 | 
			
		||||
	Rtime32CreationTime *uint32 `protobuf:"fixed32,2,opt,name=rtime32_creation_time" json:"rtime32_creation_time,omitempty"`
 | 
			
		||||
	XXX_unrecognized    []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_OfflineLogonTicket) Reset()                    { *m = COffline_OfflineLogonTicket{} }
 | 
			
		||||
func (m *COffline_OfflineLogonTicket) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*COffline_OfflineLogonTicket) ProtoMessage()               {}
 | 
			
		||||
func (*COffline_OfflineLogonTicket) Descriptor() ([]byte, []int) { return offline_fileDescriptor0, []int{3} }
 | 
			
		||||
 | 
			
		||||
func (m *COffline_OfflineLogonTicket) GetAccountid() uint32 {
 | 
			
		||||
	if m != nil && m.Accountid != nil {
 | 
			
		||||
		return *m.Accountid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_OfflineLogonTicket) GetRtime32CreationTime() uint32 {
 | 
			
		||||
	if m != nil && m.Rtime32CreationTime != nil {
 | 
			
		||||
		return *m.Rtime32CreationTime
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type COffline_GetUnsignedOfflineLogonTicket_Response struct {
 | 
			
		||||
	Ticket           *COffline_OfflineLogonTicket `protobuf:"bytes,1,opt,name=ticket" json:"ticket,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                       `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetUnsignedOfflineLogonTicket_Response) Reset() {
 | 
			
		||||
	*m = COffline_GetUnsignedOfflineLogonTicket_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *COffline_GetUnsignedOfflineLogonTicket_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*COffline_GetUnsignedOfflineLogonTicket_Response) ProtoMessage() {}
 | 
			
		||||
func (*COffline_GetUnsignedOfflineLogonTicket_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return offline_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *COffline_GetUnsignedOfflineLogonTicket_Response) GetTicket() *COffline_OfflineLogonTicket {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Ticket
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*COffline_GetOfflineLogonTicket_Request)(nil), "COffline_GetOfflineLogonTicket_Request")
 | 
			
		||||
	proto.RegisterType((*COffline_GetOfflineLogonTicket_Response)(nil), "COffline_GetOfflineLogonTicket_Response")
 | 
			
		||||
	proto.RegisterType((*COffline_GetUnsignedOfflineLogonTicket_Request)(nil), "COffline_GetUnsignedOfflineLogonTicket_Request")
 | 
			
		||||
	proto.RegisterType((*COffline_OfflineLogonTicket)(nil), "COffline_OfflineLogonTicket")
 | 
			
		||||
	proto.RegisterType((*COffline_GetUnsignedOfflineLogonTicket_Response)(nil), "COffline_GetUnsignedOfflineLogonTicket_Response")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var offline_fileDescriptor0 = []byte{
 | 
			
		||||
	// 377 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x52, 0xcd, 0x4a, 0xf3, 0x40,
 | 
			
		||||
	0x14, 0x25, 0x5f, 0xe1, 0xab, 0x8e, 0x0a, 0x76, 0xa0, 0x10, 0x63, 0x0b, 0x43, 0x16, 0xb6, 0x8b,
 | 
			
		||||
	0x92, 0x96, 0xba, 0x52, 0x70, 0xa3, 0x88, 0x08, 0x42, 0x41, 0x14, 0x97, 0x61, 0x4c, 0x6e, 0xe2,
 | 
			
		||||
	0x60, 0x3a, 0x53, 0x67, 0x6e, 0x04, 0x5d, 0x89, 0xaf, 0xe2, 0x33, 0xf4, 0x01, 0x7c, 0x33, 0xf3,
 | 
			
		||||
	0x87, 0x56, 0xac, 0xb5, 0xdd, 0x25, 0x37, 0xe7, 0xdc, 0x9c, 0x9f, 0x4b, 0x3a, 0x06, 0x81, 0x8f,
 | 
			
		||||
	0xc7, 0x60, 0x0c, 0x8f, 0xc1, 0xf8, 0x2a, 0x8a, 0x12, 0x21, 0xc1, 0x2b, 0xa6, 0x41, 0x22, 0x40,
 | 
			
		||||
	0xa2, 0x37, 0xd1, 0x0a, 0x95, 0xd3, 0xfb, 0x0e, 0x4c, 0xa5, 0x88, 0x04, 0x84, 0xfe, 0x2d, 0x37,
 | 
			
		||||
	0x73, 0xd0, 0xee, 0x21, 0xd9, 0x3b, 0x19, 0x95, 0xbb, 0xfc, 0x33, 0xc0, 0xea, 0xf1, 0x42, 0xc5,
 | 
			
		||||
	0x4a, 0x5e, 0x89, 0xe0, 0x1e, 0xd0, 0xbf, 0x84, 0x87, 0x14, 0x0c, 0xd2, 0x6d, 0xb2, 0x36, 0xd1,
 | 
			
		||||
	0x42, 0x69, 0x81, 0x4f, 0xb6, 0xc5, 0xac, 0xee, 0x96, 0x7b, 0x43, 0x3a, 0x7f, 0x72, 0xcd, 0x44,
 | 
			
		||||
	0x49, 0x03, 0x74, 0x87, 0x34, 0x0c, 0x68, 0xc1, 0x13, 0xf1, 0x9c, 0x69, 0xc1, 0xe2, 0x6b, 0xb1,
 | 
			
		||||
	0x65, 0x93, 0x36, 0xc8, 0xba, 0x11, 0xb1, 0xe4, 0x98, 0x6a, 0xb0, 0xff, 0xe5, 0x23, 0x77, 0x40,
 | 
			
		||||
	0xbc, 0xd9, 0xc5, 0xd7, 0x32, 0x07, 0x40, 0xf8, 0xbb, 0x38, 0x77, 0x44, 0x76, 0x3f, 0x19, 0x3f,
 | 
			
		||||
	0x61, 0xf9, 0x3f, 0x78, 0x10, 0xa8, 0x54, 0xa2, 0x08, 0x4b, 0xf1, 0xb4, 0x4d, 0x9a, 0x1a, 0xc5,
 | 
			
		||||
	0x18, 0xf6, 0x87, 0x7e, 0xa0, 0x81, 0xa3, 0x50, 0xd2, 0xcf, 0xdf, 0x0b, 0x09, 0x75, 0xd7, 0x27,
 | 
			
		||||
	0xfd, 0xa5, 0x25, 0x54, 0x1e, 0x7b, 0xe4, 0xff, 0x8c, 0xb1, 0x8d, 0x61, 0xcb, 0x5b, 0x20, 0x69,
 | 
			
		||||
	0xf8, 0x56, 0x23, 0xf5, 0x6a, 0x4c, 0xa7, 0x16, 0x69, 0xce, 0x0d, 0x90, 0x76, 0xbc, 0xe5, 0xda,
 | 
			
		||||
	0x71, 0xba, 0xde, 0x92, 0x55, 0xb8, 0xe7, 0xaf, 0x53, 0xfb, 0x34, 0xc3, 0x30, 0xce, 0xbe, 0x2a,
 | 
			
		||||
	0x61, 0x5c, 0x86, 0xac, 0xb4, 0xc8, 0xaa, 0xd3, 0x62, 0x49, 0xce, 0x66, 0xa5, 0x25, 0x16, 0x29,
 | 
			
		||||
	0xcd, 0xf0, 0x0e, 0x58, 0x90, 0x6a, 0x9d, 0x5d, 0x0f, 0x4b, 0x33, 0x2e, 0x7d, 0xb7, 0x48, 0x7b,
 | 
			
		||||
	0x61, 0x38, 0xb4, 0xbf, 0x62, 0x91, 0xce, 0xc0, 0x5b, 0x31, 0x76, 0xf7, 0x28, 0xf3, 0x73, 0x50,
 | 
			
		||||
	0xf8, 0x91, 0x2c, 0x95, 0xab, 0x7a, 0x70, 0x5a, 0x19, 0xdd, 0xae, 0xf6, 0x67, 0x81, 0x20, 0x0a,
 | 
			
		||||
	0x19, 0x9b, 0x3c, 0x99, 0x47, 0x11, 0xc0, 0x71, 0xed, 0xc5, 0xb2, 0x3e, 0x02, 0x00, 0x00, 0xff,
 | 
			
		||||
	0xff, 0x90, 0xd3, 0xb5, 0xf7, 0x7b, 0x03, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										791
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/parental.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										791
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/parental.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,791 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_parental.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type ParentalApp struct {
 | 
			
		||||
	Appid            *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	IsAllowed        *bool   `protobuf:"varint,2,opt,name=is_allowed" json:"is_allowed,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalApp) Reset()                    { *m = ParentalApp{} }
 | 
			
		||||
func (m *ParentalApp) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*ParentalApp) ProtoMessage()               {}
 | 
			
		||||
func (*ParentalApp) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
func (m *ParentalApp) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalApp) GetIsAllowed() bool {
 | 
			
		||||
	if m != nil && m.IsAllowed != nil {
 | 
			
		||||
		return *m.IsAllowed
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ParentalSettings struct {
 | 
			
		||||
	Steamid                *uint64        `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	ApplistBaseId          *uint32        `protobuf:"varint,2,opt,name=applist_base_id" json:"applist_base_id,omitempty"`
 | 
			
		||||
	ApplistBaseDescription *string        `protobuf:"bytes,3,opt,name=applist_base_description" json:"applist_base_description,omitempty"`
 | 
			
		||||
	ApplistBase            []*ParentalApp `protobuf:"bytes,4,rep,name=applist_base" json:"applist_base,omitempty"`
 | 
			
		||||
	ApplistCustom          []*ParentalApp `protobuf:"bytes,5,rep,name=applist_custom" json:"applist_custom,omitempty"`
 | 
			
		||||
	Passwordhashtype       *uint32        `protobuf:"varint,6,opt,name=passwordhashtype" json:"passwordhashtype,omitempty"`
 | 
			
		||||
	Salt                   []byte         `protobuf:"bytes,7,opt,name=salt" json:"salt,omitempty"`
 | 
			
		||||
	Passwordhash           []byte         `protobuf:"bytes,8,opt,name=passwordhash" json:"passwordhash,omitempty"`
 | 
			
		||||
	IsEnabled              *bool          `protobuf:"varint,9,opt,name=is_enabled" json:"is_enabled,omitempty"`
 | 
			
		||||
	EnabledFeatures        *uint32        `protobuf:"varint,10,opt,name=enabled_features" json:"enabled_features,omitempty"`
 | 
			
		||||
	RecoveryEmail          *string        `protobuf:"bytes,11,opt,name=recovery_email" json:"recovery_email,omitempty"`
 | 
			
		||||
	XXX_unrecognized       []byte         `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) Reset()                    { *m = ParentalSettings{} }
 | 
			
		||||
func (m *ParentalSettings) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*ParentalSettings) ProtoMessage()               {}
 | 
			
		||||
func (*ParentalSettings) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{1} }
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetApplistBaseId() uint32 {
 | 
			
		||||
	if m != nil && m.ApplistBaseId != nil {
 | 
			
		||||
		return *m.ApplistBaseId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetApplistBaseDescription() string {
 | 
			
		||||
	if m != nil && m.ApplistBaseDescription != nil {
 | 
			
		||||
		return *m.ApplistBaseDescription
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetApplistBase() []*ParentalApp {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.ApplistBase
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetApplistCustom() []*ParentalApp {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.ApplistCustom
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetPasswordhashtype() uint32 {
 | 
			
		||||
	if m != nil && m.Passwordhashtype != nil {
 | 
			
		||||
		return *m.Passwordhashtype
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetSalt() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Salt
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetPasswordhash() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Passwordhash
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetIsEnabled() bool {
 | 
			
		||||
	if m != nil && m.IsEnabled != nil {
 | 
			
		||||
		return *m.IsEnabled
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetEnabledFeatures() uint32 {
 | 
			
		||||
	if m != nil && m.EnabledFeatures != nil {
 | 
			
		||||
		return *m.EnabledFeatures
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ParentalSettings) GetRecoveryEmail() string {
 | 
			
		||||
	if m != nil && m.RecoveryEmail != nil {
 | 
			
		||||
		return *m.RecoveryEmail
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_EnableParentalSettings_Request struct {
 | 
			
		||||
	Password         *string           `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Settings         *ParentalSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"`
 | 
			
		||||
	Sessionid        *string           `protobuf:"bytes,3,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Enablecode       *uint32           `protobuf:"varint,4,opt,name=enablecode" json:"enablecode,omitempty"`
 | 
			
		||||
	Steamid          *uint64           `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) Reset() {
 | 
			
		||||
	*m = CParental_EnableParentalSettings_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_EnableParentalSettings_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_EnableParentalSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) GetSettings() *ParentalSettings {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Settings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) GetSessionid() string {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) GetEnablecode() uint32 {
 | 
			
		||||
	if m != nil && m.Enablecode != nil {
 | 
			
		||||
		return *m.Enablecode
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_EnableParentalSettings_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Response) Reset() {
 | 
			
		||||
	*m = CParental_EnableParentalSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_EnableParentalSettings_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_EnableParentalSettings_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_EnableParentalSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_DisableParentalSettings_Request struct {
 | 
			
		||||
	Password         *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Request) Reset() {
 | 
			
		||||
	*m = CParental_DisableParentalSettings_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_DisableParentalSettings_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_DisableParentalSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Request) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_DisableParentalSettings_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Response) Reset() {
 | 
			
		||||
	*m = CParental_DisableParentalSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_DisableParentalSettings_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CParental_DisableParentalSettings_Response) ProtoMessage() {}
 | 
			
		||||
func (*CParental_DisableParentalSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_GetParentalSettings_Request struct {
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetParentalSettings_Request) Reset()         { *m = CParental_GetParentalSettings_Request{} }
 | 
			
		||||
func (m *CParental_GetParentalSettings_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_GetParentalSettings_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_GetParentalSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetParentalSettings_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_GetParentalSettings_Response struct {
 | 
			
		||||
	Settings         *ParentalSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetParentalSettings_Response) Reset() {
 | 
			
		||||
	*m = CParental_GetParentalSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_GetParentalSettings_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_GetParentalSettings_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_GetParentalSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetParentalSettings_Response) GetSettings() *ParentalSettings {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Settings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_GetSignedParentalSettings_Request struct {
 | 
			
		||||
	Priority         *uint32 `protobuf:"varint,1,opt,name=priority" json:"priority,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Request) Reset() {
 | 
			
		||||
	*m = CParental_GetSignedParentalSettings_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CParental_GetSignedParentalSettings_Request) ProtoMessage() {}
 | 
			
		||||
func (*CParental_GetSignedParentalSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{8}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Request) GetPriority() uint32 {
 | 
			
		||||
	if m != nil && m.Priority != nil {
 | 
			
		||||
		return *m.Priority
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_GetSignedParentalSettings_Response struct {
 | 
			
		||||
	SerializedSettings []byte `protobuf:"bytes,1,opt,name=serialized_settings" json:"serialized_settings,omitempty"`
 | 
			
		||||
	Signature          []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"`
 | 
			
		||||
	XXX_unrecognized   []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Response) Reset() {
 | 
			
		||||
	*m = CParental_GetSignedParentalSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CParental_GetSignedParentalSettings_Response) ProtoMessage() {}
 | 
			
		||||
func (*CParental_GetSignedParentalSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Response) GetSerializedSettings() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SerializedSettings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_GetSignedParentalSettings_Response) GetSignature() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Signature
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_SetParentalSettings_Request struct {
 | 
			
		||||
	Password         *string           `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Settings         *ParentalSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"`
 | 
			
		||||
	NewPassword      *string           `protobuf:"bytes,3,opt,name=new_password" json:"new_password,omitempty"`
 | 
			
		||||
	Sessionid        *string           `protobuf:"bytes,4,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	Steamid          *uint64           `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) Reset()         { *m = CParental_SetParentalSettings_Request{} }
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_SetParentalSettings_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_SetParentalSettings_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{10}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) GetSettings() *ParentalSettings {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Settings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) GetNewPassword() string {
 | 
			
		||||
	if m != nil && m.NewPassword != nil {
 | 
			
		||||
		return *m.NewPassword
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) GetSessionid() string {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_SetParentalSettings_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_SetParentalSettings_Response) Reset() {
 | 
			
		||||
	*m = CParental_SetParentalSettings_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_SetParentalSettings_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_SetParentalSettings_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_SetParentalSettings_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{11}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ValidateToken_Request struct {
 | 
			
		||||
	UnlockToken      *string `protobuf:"bytes,1,opt,name=unlock_token" json:"unlock_token,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidateToken_Request) Reset()         { *m = CParental_ValidateToken_Request{} }
 | 
			
		||||
func (m *CParental_ValidateToken_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ValidateToken_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ValidateToken_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{12}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidateToken_Request) GetUnlockToken() string {
 | 
			
		||||
	if m != nil && m.UnlockToken != nil {
 | 
			
		||||
		return *m.UnlockToken
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ValidateToken_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidateToken_Response) Reset()         { *m = CParental_ValidateToken_Response{} }
 | 
			
		||||
func (m *CParental_ValidateToken_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ValidateToken_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ValidateToken_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{13}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ValidatePassword_Request struct {
 | 
			
		||||
	Password            *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Session             *string `protobuf:"bytes,2,opt,name=session" json:"session,omitempty"`
 | 
			
		||||
	SendUnlockOnSuccess *bool   `protobuf:"varint,3,opt,name=send_unlock_on_success" json:"send_unlock_on_success,omitempty"`
 | 
			
		||||
	XXX_unrecognized    []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Request) Reset()         { *m = CParental_ValidatePassword_Request{} }
 | 
			
		||||
func (m *CParental_ValidatePassword_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ValidatePassword_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ValidatePassword_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{14}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Request) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Request) GetSession() string {
 | 
			
		||||
	if m != nil && m.Session != nil {
 | 
			
		||||
		return *m.Session
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Request) GetSendUnlockOnSuccess() bool {
 | 
			
		||||
	if m != nil && m.SendUnlockOnSuccess != nil {
 | 
			
		||||
		return *m.SendUnlockOnSuccess
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ValidatePassword_Response struct {
 | 
			
		||||
	Token            *string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Response) Reset()         { *m = CParental_ValidatePassword_Response{} }
 | 
			
		||||
func (m *CParental_ValidatePassword_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ValidatePassword_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ValidatePassword_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{15}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ValidatePassword_Response) GetToken() string {
 | 
			
		||||
	if m != nil && m.Token != nil {
 | 
			
		||||
		return *m.Token
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_LockClient_Request struct {
 | 
			
		||||
	Session          *string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_LockClient_Request) Reset()                    { *m = CParental_LockClient_Request{} }
 | 
			
		||||
func (m *CParental_LockClient_Request) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_LockClient_Request) ProtoMessage()               {}
 | 
			
		||||
func (*CParental_LockClient_Request) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{16} }
 | 
			
		||||
 | 
			
		||||
func (m *CParental_LockClient_Request) GetSession() string {
 | 
			
		||||
	if m != nil && m.Session != nil {
 | 
			
		||||
		return *m.Session
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_LockClient_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_LockClient_Response) Reset()                    { *m = CParental_LockClient_Response{} }
 | 
			
		||||
func (m *CParental_LockClient_Response) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_LockClient_Response) ProtoMessage()               {}
 | 
			
		||||
func (*CParental_LockClient_Response) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{17} }
 | 
			
		||||
 | 
			
		||||
type CParental_RequestRecoveryCode_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_RequestRecoveryCode_Request) Reset()         { *m = CParental_RequestRecoveryCode_Request{} }
 | 
			
		||||
func (m *CParental_RequestRecoveryCode_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_RequestRecoveryCode_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_RequestRecoveryCode_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{18}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_RequestRecoveryCode_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_RequestRecoveryCode_Response) Reset() {
 | 
			
		||||
	*m = CParental_RequestRecoveryCode_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_RequestRecoveryCode_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_RequestRecoveryCode_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_RequestRecoveryCode_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{19}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_DisableWithRecoveryCode_Request struct {
 | 
			
		||||
	RecoveryCode     *uint32 `protobuf:"varint,1,opt,name=recovery_code" json:"recovery_code,omitempty"`
 | 
			
		||||
	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Request) Reset() {
 | 
			
		||||
	*m = CParental_DisableWithRecoveryCode_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_DisableWithRecoveryCode_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_DisableWithRecoveryCode_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{20}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Request) GetRecoveryCode() uint32 {
 | 
			
		||||
	if m != nil && m.RecoveryCode != nil {
 | 
			
		||||
		return *m.RecoveryCode
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Request) GetSteamid() uint64 {
 | 
			
		||||
	if m != nil && m.Steamid != nil {
 | 
			
		||||
		return *m.Steamid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_DisableWithRecoveryCode_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Response) Reset() {
 | 
			
		||||
	*m = CParental_DisableWithRecoveryCode_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_DisableWithRecoveryCode_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CParental_DisableWithRecoveryCode_Response) ProtoMessage() {}
 | 
			
		||||
func (*CParental_DisableWithRecoveryCode_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{21}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ParentalSettingsChange_Notification struct {
 | 
			
		||||
	SerializedSettings []byte  `protobuf:"bytes,1,opt,name=serialized_settings" json:"serialized_settings,omitempty"`
 | 
			
		||||
	Signature          []byte  `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"`
 | 
			
		||||
	Password           *string `protobuf:"bytes,3,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Sessionid          *string `protobuf:"bytes,4,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	XXX_unrecognized   []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) Reset() {
 | 
			
		||||
	*m = CParental_ParentalSettingsChange_Notification{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CParental_ParentalSettingsChange_Notification) ProtoMessage() {}
 | 
			
		||||
func (*CParental_ParentalSettingsChange_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{22}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) GetSerializedSettings() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SerializedSettings
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) GetSignature() []byte {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Signature
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalSettingsChange_Notification) GetSessionid() string {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ParentalUnlock_Notification struct {
 | 
			
		||||
	Password         *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"`
 | 
			
		||||
	Sessionid        *string `protobuf:"bytes,2,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalUnlock_Notification) Reset()         { *m = CParental_ParentalUnlock_Notification{} }
 | 
			
		||||
func (m *CParental_ParentalUnlock_Notification) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ParentalUnlock_Notification) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ParentalUnlock_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{23}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalUnlock_Notification) GetPassword() string {
 | 
			
		||||
	if m != nil && m.Password != nil {
 | 
			
		||||
		return *m.Password
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalUnlock_Notification) GetSessionid() string {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CParental_ParentalLock_Notification struct {
 | 
			
		||||
	Sessionid        *string `protobuf:"bytes,1,opt,name=sessionid" json:"sessionid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalLock_Notification) Reset()         { *m = CParental_ParentalLock_Notification{} }
 | 
			
		||||
func (m *CParental_ParentalLock_Notification) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CParental_ParentalLock_Notification) ProtoMessage()    {}
 | 
			
		||||
func (*CParental_ParentalLock_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return parental_fileDescriptor0, []int{24}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CParental_ParentalLock_Notification) GetSessionid() string {
 | 
			
		||||
	if m != nil && m.Sessionid != nil {
 | 
			
		||||
		return *m.Sessionid
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*ParentalApp)(nil), "ParentalApp")
 | 
			
		||||
	proto.RegisterType((*ParentalSettings)(nil), "ParentalSettings")
 | 
			
		||||
	proto.RegisterType((*CParental_EnableParentalSettings_Request)(nil), "CParental_EnableParentalSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_EnableParentalSettings_Response)(nil), "CParental_EnableParentalSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_DisableParentalSettings_Request)(nil), "CParental_DisableParentalSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_DisableParentalSettings_Response)(nil), "CParental_DisableParentalSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_GetParentalSettings_Request)(nil), "CParental_GetParentalSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_GetParentalSettings_Response)(nil), "CParental_GetParentalSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_GetSignedParentalSettings_Request)(nil), "CParental_GetSignedParentalSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_GetSignedParentalSettings_Response)(nil), "CParental_GetSignedParentalSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_SetParentalSettings_Request)(nil), "CParental_SetParentalSettings_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_SetParentalSettings_Response)(nil), "CParental_SetParentalSettings_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_ValidateToken_Request)(nil), "CParental_ValidateToken_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_ValidateToken_Response)(nil), "CParental_ValidateToken_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_ValidatePassword_Request)(nil), "CParental_ValidatePassword_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_ValidatePassword_Response)(nil), "CParental_ValidatePassword_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_LockClient_Request)(nil), "CParental_LockClient_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_LockClient_Response)(nil), "CParental_LockClient_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_RequestRecoveryCode_Request)(nil), "CParental_RequestRecoveryCode_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_RequestRecoveryCode_Response)(nil), "CParental_RequestRecoveryCode_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_DisableWithRecoveryCode_Request)(nil), "CParental_DisableWithRecoveryCode_Request")
 | 
			
		||||
	proto.RegisterType((*CParental_DisableWithRecoveryCode_Response)(nil), "CParental_DisableWithRecoveryCode_Response")
 | 
			
		||||
	proto.RegisterType((*CParental_ParentalSettingsChange_Notification)(nil), "CParental_ParentalSettingsChange_Notification")
 | 
			
		||||
	proto.RegisterType((*CParental_ParentalUnlock_Notification)(nil), "CParental_ParentalUnlock_Notification")
 | 
			
		||||
	proto.RegisterType((*CParental_ParentalLock_Notification)(nil), "CParental_ParentalLock_Notification")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var parental_fileDescriptor0 = []byte{
 | 
			
		||||
	// 1337 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x57, 0x41, 0x8f, 0x14, 0xc5,
 | 
			
		||||
	0x17, 0x4f, 0xc3, 0x02, 0xbb, 0xb5, 0xb3, 0xcb, 0x52, 0xf0, 0x87, 0x66, 0xfe, 0x02, 0x65, 0x2f,
 | 
			
		||||
	0xc2, 0x02, 0x4b, 0x6b, 0x56, 0x23, 0x26, 0x26, 0x12, 0x58, 0x0d, 0x26, 0x2e, 0x88, 0x0c, 0x8a,
 | 
			
		||||
	0x09, 0x89, 0x9d, 0xda, 0xee, 0xda, 0xd9, 0x92, 0x9e, 0xaa, 0xb6, 0xab, 0x86, 0x75, 0x3d, 0x19,
 | 
			
		||||
	0x63, 0xbc, 0x19, 0x2f, 0x1e, 0x34, 0xf1, 0x6e, 0xa2, 0x5e, 0x89, 0x57, 0x13, 0xbf, 0x80, 0xf1,
 | 
			
		||||
	0x53, 0xf8, 0x31, 0x7c, 0x5d, 0xd5, 0x3d, 0xd3, 0xbd, 0xd3, 0x33, 0xd3, 0x23, 0xb7, 0x99, 0xaa,
 | 
			
		||||
	0xf7, 0x5e, 0xfd, 0xde, 0x7b, 0xbf, 0x7a, 0xbf, 0x6a, 0xb4, 0xa6, 0x34, 0xa3, 0xbd, 0x1e, 0x53,
 | 
			
		||||
	0x8a, 0x76, 0x99, 0x0a, 0x12, 0x9a, 0x32, 0xa1, 0x69, 0xec, 0x9b, 0xe5, 0x30, 0xe6, 0xf0, 0xcf,
 | 
			
		||||
	0x4f, 0x52, 0xa9, 0x65, 0x7b, 0xbd, 0x6a, 0xd9, 0x17, 0x7c, 0x87, 0xb3, 0x28, 0xd8, 0xa6, 0x8a,
 | 
			
		||||
	0x8d, 0x5a, 0x7b, 0xaf, 0xa0, 0xc5, 0xfb, 0x79, 0xac, 0x5b, 0x49, 0x82, 0x97, 0xd0, 0x11, 0x9a,
 | 
			
		||||
	0x24, 0x3c, 0x72, 0x1d, 0xe2, 0xac, 0x2d, 0x61, 0x8c, 0x10, 0x57, 0x01, 0x8d, 0x63, 0xb9, 0xc7,
 | 
			
		||||
	0x22, 0xf7, 0x10, 0xac, 0xcd, 0x7b, 0xbf, 0x1d, 0x42, 0x2b, 0x85, 0x4b, 0x87, 0x69, 0xcd, 0x45,
 | 
			
		||||
	0x57, 0xe1, 0xe3, 0xe8, 0x98, 0x89, 0x9d, 0x7b, 0x1e, 0xc5, 0x67, 0xd0, 0x71, 0x08, 0x14, 0x73,
 | 
			
		||||
	0xa5, 0xcd, 0xc9, 0x01, 0xb7, 0xee, 0x4b, 0x98, 0x20, 0xb7, 0xb2, 0x11, 0x31, 0x15, 0xa6, 0x3c,
 | 
			
		||||
	0xd1, 0x5c, 0x0a, 0xf7, 0x30, 0x58, 0x2c, 0x60, 0x0f, 0xb5, 0xca, 0x16, 0xee, 0x1c, 0x39, 0xbc,
 | 
			
		||||
	0xb6, 0xb8, 0xd1, 0xf2, 0xcb, 0x38, 0x2f, 0xa2, 0xe5, 0xc2, 0x26, 0xec, 0x2b, 0x2d, 0x7b, 0xee,
 | 
			
		||||
	0x91, 0x1a, 0x2b, 0x17, 0xad, 0x24, 0x54, 0xa9, 0x3d, 0x99, 0x46, 0xbb, 0x54, 0xed, 0xea, 0xfd,
 | 
			
		||||
	0x84, 0xb9, 0x47, 0x0d, 0x8a, 0x16, 0x9a, 0x53, 0x34, 0xd6, 0xee, 0x31, 0xf8, 0xd7, 0xc2, 0xa7,
 | 
			
		||||
	0x50, 0xab, 0x6c, 0xe7, 0xce, 0x9b, 0x55, 0x9b, 0x3c, 0x13, 0x74, 0x3b, 0x86, 0xe4, 0x17, 0xb2,
 | 
			
		||||
	0xe4, 0xb3, 0x88, 0xf9, 0x42, 0xb0, 0xc3, 0xa8, 0xee, 0xa7, 0x4c, 0xb9, 0xc8, 0x44, 0x3c, 0x8d,
 | 
			
		||||
	0x96, 0x53, 0x16, 0xca, 0xa7, 0x2c, 0xdd, 0x0f, 0x58, 0x8f, 0xf2, 0xd8, 0x5d, 0xcc, 0xb2, 0xf1,
 | 
			
		||||
	0x7e, 0x74, 0xd0, 0xda, 0x66, 0x01, 0x2a, 0x78, 0xc7, 0x38, 0x1f, 0x2c, 0x5f, 0xf0, 0x80, 0x7d,
 | 
			
		||||
	0xd6, 0x67, 0x4a, 0xe3, 0x15, 0x34, 0x5f, 0x00, 0x31, 0x75, 0x5c, 0xc0, 0xab, 0x68, 0x5e, 0xe5,
 | 
			
		||||
	0x56, 0xa6, 0x80, 0x8b, 0x1b, 0x27, 0xfc, 0x91, 0xea, 0x9f, 0x40, 0x0b, 0x0a, 0xfa, 0x0d, 0x25,
 | 
			
		||||
	0x84, 0x32, 0xdb, 0x22, 0x02, 0x78, 0x0b, 0x34, 0x94, 0x51, 0x56, 0xc2, 0x0c, 0x62, 0xa9, 0x49,
 | 
			
		||||
	0x19, 0xe6, 0xa3, 0xde, 0x35, 0x74, 0xa5, 0x01, 0x34, 0x95, 0x48, 0xa1, 0x98, 0x77, 0xaf, 0x6c,
 | 
			
		||||
	0xfc, 0x36, 0x57, 0x33, 0x26, 0x32, 0x72, 0xf8, 0x3a, 0xba, 0xda, 0x24, 0x5e, 0x7e, 0xfa, 0x1b,
 | 
			
		||||
	0xe8, 0xa5, 0xa1, 0xf5, 0x1d, 0xa6, 0xc7, 0x9e, 0x3c, 0x72, 0xce, 0x5d, 0x74, 0x69, 0x9a, 0xa7,
 | 
			
		||||
	0x3d, 0xa3, 0x52, 0x6b, 0x67, 0x4c, 0xad, 0xbd, 0x9b, 0xe8, 0x5a, 0x25, 0x5c, 0x87, 0x77, 0x05,
 | 
			
		||||
	0x8b, 0x26, 0x16, 0x22, 0xe5, 0x32, 0xe5, 0x7a, 0xdf, 0xde, 0x29, 0xef, 0x13, 0xb4, 0xde, 0x2c,
 | 
			
		||||
	0x40, 0x8e, 0xea, 0xff, 0xe8, 0xa4, 0x62, 0x29, 0xa7, 0x31, 0xff, 0x02, 0x58, 0x57, 0x01, 0xd8,
 | 
			
		||||
	0x32, 0x9d, 0x07, 0x7f, 0xc3, 0x44, 0xc3, 0x8f, 0x96, 0xf7, 0x83, 0x53, 0x2e, 0x55, 0x67, 0x42,
 | 
			
		||||
	0xa9, 0xfe, 0x23, 0xdb, 0xe0, 0xb6, 0x08, 0xb6, 0x17, 0x0c, 0x5c, 0x2d, 0xe1, 0x2a, 0x1c, 0x9c,
 | 
			
		||||
	0xab, 0x6f, 0xf9, 0x5a, 0xb9, 0x15, 0x9d, 0x09, 0xad, 0xf0, 0x6e, 0xa0, 0x0b, 0x43, 0xcb, 0x8f,
 | 
			
		||||
	0x20, 0xf7, 0x88, 0x6a, 0xf6, 0x50, 0x3e, 0x61, 0x62, 0x80, 0x1e, 0x60, 0xf4, 0x45, 0x2c, 0xc3,
 | 
			
		||||
	0x27, 0x81, 0xce, 0xd6, 0x6d, 0x06, 0x9e, 0x87, 0xc8, 0x78, 0xc7, 0x3c, 0x78, 0x17, 0x79, 0xa3,
 | 
			
		||||
	0x36, 0xf7, 0xf3, 0x74, 0xa6, 0x50, 0xd8, 0xa6, 0x68, 0x8a, 0xb3, 0x80, 0xcf, 0xa3, 0xd3, 0x8a,
 | 
			
		||||
	0x89, 0x28, 0xc8, 0x71, 0x48, 0x11, 0xa8, 0x7e, 0x18, 0x82, 0x89, 0xa9, 0xc9, 0xbc, 0xf7, 0x1a,
 | 
			
		||||
	0x5a, 0x9d, 0x78, 0x50, 0xde, 0x61, 0x18, 0xba, 0xe5, 0x14, 0x5e, 0x46, 0x2f, 0x0c, 0xbd, 0xb6,
 | 
			
		||||
	0x20, 0xf0, 0xa6, 0x19, 0xd8, 0x15, 0x86, 0xe7, 0x30, 0xac, 0xc3, 0x05, 0x74, 0x6e, 0x8c, 0x43,
 | 
			
		||||
	0x9e, 0xf0, 0xe5, 0x32, 0x23, 0xf2, 0x30, 0x0f, 0xf2, 0x61, 0xb5, 0x09, 0xf3, 0xa1, 0x58, 0xab,
 | 
			
		||||
	0x36, 0xa8, 0xde, 0x30, 0x0f, 0xd9, 0xa9, 0x99, 0x06, 0x8f, 0xb8, 0xde, 0xad, 0x0b, 0x8b, 0xff,
 | 
			
		||||
	0x87, 0x96, 0x06, 0xb3, 0xd1, 0xcc, 0x23, 0xa7, 0x7e, 0x1e, 0xd5, 0x8d, 0x84, 0x9a, 0xa0, 0x39,
 | 
			
		||||
	0x84, 0xaf, 0x1d, 0x74, 0x7d, 0x68, 0x7e, 0x90, 0x4b, 0x9b, 0xbb, 0x54, 0x74, 0x59, 0x70, 0x4f,
 | 
			
		||||
	0x6a, 0xd0, 0xbf, 0x90, 0x66, 0xfa, 0x32, 0xeb, 0x55, 0xaa, 0x50, 0x60, 0x1c, 0xcb, 0xbd, 0xad,
 | 
			
		||||
	0x72, 0x71, 0x8b, 0x1f, 0x1f, 0x5a, 0x46, 0x54, 0x4e, 0x1f, 0x25, 0x54, 0x25, 0x9a, 0xa1, 0x14,
 | 
			
		||||
	0xcc, 0xb9, 0xd5, 0xd1, 0x68, 0x5b, 0x23, 0xb1, 0x2a, 0x9e, 0x26, 0xd8, 0xc6, 0xdf, 0xcb, 0x68,
 | 
			
		||||
	0xbe, 0x70, 0xc0, 0x7f, 0x39, 0xe8, 0x74, 0xfd, 0x40, 0xc7, 0x57, 0xfc, 0xa6, 0x72, 0xd4, 0xbe,
 | 
			
		||||
	0xea, 0x37, 0x97, 0x87, 0xe0, 0xab, 0x67, 0xee, 0x63, 0x6b, 0x44, 0x8a, 0xd7, 0x09, 0x29, 0x4a,
 | 
			
		||||
	0x4c, 0x76, 0x64, 0x4a, 0xf4, 0x2e, 0x23, 0xb1, 0xec, 0x76, 0x59, 0x44, 0xb8, 0x20, 0x34, 0x0c,
 | 
			
		||||
	0x65, 0x5f, 0xe8, 0x75, 0x22, 0x8d, 0xf6, 0xc3, 0x1b, 0x63, 0xbf, 0x30, 0x37, 0x96, 0x61, 0x3f,
 | 
			
		||||
	0xcd, 0x82, 0x0c, 0x42, 0xe0, 0x5f, 0x1d, 0x74, 0x66, 0x8c, 0x4c, 0xe0, 0x32, 0xd0, 0x29, 0xd2,
 | 
			
		||||
	0xd4, 0xbe, 0xe6, 0xcf, 0x20, 0x3b, 0x37, 0x20, 0xab, 0x57, 0x73, 0xab, 0x59, 0xd2, 0xc2, 0x3f,
 | 
			
		||||
	0x3b, 0xe8, 0x64, 0x8d, 0xd8, 0xe0, 0x4b, 0x7e, 0x23, 0x19, 0x6b, 0x5f, 0xf6, 0x9b, 0x89, 0x96,
 | 
			
		||||
	0x77, 0x13, 0x10, 0xbe, 0x09, 0x16, 0x95, 0xa2, 0xcd, 0x82, 0xf4, 0x1f, 0x07, 0x9d, 0x1d, 0x2b,
 | 
			
		||||
	0x43, 0x78, 0xdd, 0x9f, 0x41, 0xed, 0xda, 0xd7, 0xfd, 0x59, 0xa4, 0xcd, 0x13, 0x80, 0xfd, 0xd3,
 | 
			
		||||
	0xe7, 0xc0, 0x6e, 0x7e, 0x66, 0xdb, 0x3d, 0xd8, 0xa7, 0x9a, 0x84, 0x54, 0x90, 0xed, 0x7d, 0x02,
 | 
			
		||||
	0xa3, 0xc2, 0xbc, 0x79, 0xb3, 0xdf, 0x99, 0x1f, 0xcc, 0x1e, 0xc6, 0x61, 0xd1, 0x34, 0xa5, 0x33,
 | 
			
		||||
	0xa5, 0x29, 0x9d, 0x86, 0x4d, 0xe9, 0x4c, 0x6d, 0x4a, 0xe7, 0x39, 0x9a, 0x02, 0x48, 0x97, 0x2a,
 | 
			
		||||
	0xea, 0x85, 0x89, 0x3f, 0x45, 0x10, 0xdb, 0x2f, 0xfa, 0x53, 0x95, 0xef, 0x03, 0xc0, 0x75, 0x77,
 | 
			
		||||
	0x73, 0x97, 0x85, 0x4f, 0x08, 0xdf, 0x31, 0x47, 0x77, 0xa1, 0x30, 0x62, 0x08, 0xcd, 0x2a, 0x19,
 | 
			
		||||
	0x31, 0x72, 0x44, 0xb8, 0x22, 0xa1, 0x04, 0xec, 0xa1, 0x9e, 0x80, 0xf4, 0x77, 0x07, 0xad, 0x1c,
 | 
			
		||||
	0x94, 0x36, 0xbc, 0xea, 0x4f, 0x17, 0xd8, 0xf6, 0x45, 0xbf, 0x81, 0x38, 0x7a, 0x1f, 0x03, 0xe4,
 | 
			
		||||
	0x87, 0xc5, 0xb6, 0xc1, 0x90, 0xc4, 0x94, 0x0b, 0xcd, 0x3e, 0xcf, 0x2a, 0x6a, 0xad, 0x27, 0x30,
 | 
			
		||||
	0x84, 0x8a, 0x08, 0xfa, 0x0f, 0x33, 0x1d, 0x96, 0x44, 0x25, 0x3d, 0xfc, 0x9d, 0x83, 0xd0, 0x50,
 | 
			
		||||
	0x2d, 0xf1, 0x39, 0x7f, 0x92, 0xea, 0xb6, 0xcf, 0xfb, 0x93, 0x35, 0xf6, 0x36, 0xe0, 0x7c, 0xcb,
 | 
			
		||||
	0xcc, 0xe8, 0x7d, 0xa8, 0x9a, 0x10, 0x50, 0x35, 0x40, 0x62, 0xbf, 0xb5, 0x94, 0xa5, 0x27, 0x25,
 | 
			
		||||
	0xe6, 0x74, 0xf8, 0xc4, 0x20, 0x32, 0x34, 0xac, 0xb0, 0x50, 0xc9, 0x76, 0x2a, 0xf7, 0x40, 0x98,
 | 
			
		||||
	0xf0, 0x9f, 0xc0, 0xcf, 0x1a, 0xd5, 0xad, 0xf0, 0x73, 0x82, 0x7c, 0x57, 0xf8, 0x39, 0x51, 0xbd,
 | 
			
		||||
	0x1f, 0x03, 0xd8, 0x47, 0xb9, 0x05, 0x9c, 0x5f, 0x88, 0x33, 0xc9, 0xc4, 0x99, 0x6c, 0x33, 0x60,
 | 
			
		||||
	0x28, 0x94, 0x4e, 0xcb, 0xe2, 0xf6, 0xd8, 0x4d, 0xf3, 0x55, 0x43, 0x68, 0x14, 0xc1, 0x47, 0xcf,
 | 
			
		||||
	0x90, 0xbb, 0x2a, 0x61, 0xa1, 0xbd, 0x6d, 0x05, 0x23, 0x7e, 0x19, 0x0e, 0xea, 0x83, 0xe2, 0x5d,
 | 
			
		||||
	0x37, 0xa8, 0xc7, 0xbd, 0x1a, 0xea, 0x06, 0xf5, 0xf8, 0xc7, 0xc0, 0xeb, 0x90, 0xd1, 0xc6, 0x2d,
 | 
			
		||||
	0xad, 0x59, 0x2f, 0xa9, 0x64, 0x94, 0x77, 0x5c, 0x8a, 0x7a, 0xb0, 0xed, 0x73, 0xe0, 0x77, 0xf6,
 | 
			
		||||
	0xfe, 0xc8, 0xcd, 0x84, 0x6e, 0x3c, 0xe5, 0x21, 0xdb, 0xf8, 0x66, 0x0e, 0x2d, 0x17, 0xbb, 0x39,
 | 
			
		||||
	0x4f, 0x7e, 0x72, 0xd0, 0x29, 0xdb, 0xe7, 0xea, 0x53, 0x03, 0xfb, 0xfe, 0x4c, 0xaf, 0x91, 0xf6,
 | 
			
		||||
	0xa2, 0x7f, 0x4f, 0x0e, 0xf0, 0xdf, 0x01, 0x1c, 0x9b, 0xe5, 0x6d, 0xb2, 0x93, 0xca, 0x9e, 0xc1,
 | 
			
		||||
	0xc1, 0xd2, 0xac, 0x15, 0x96, 0x49, 0x44, 0xee, 0x40, 0x76, 0xa1, 0x89, 0x96, 0x71, 0x67, 0x64,
 | 
			
		||||
	0xa6, 0xe0, 0xef, 0x1d, 0xd4, 0xb2, 0xf0, 0xec, 0x1b, 0xa4, 0x42, 0x9e, 0x09, 0xcf, 0x93, 0x2a,
 | 
			
		||||
	0x9c, 0xf7, 0x01, 0xce, 0x7b, 0x0d, 0xe0, 0x58, 0x5e, 0x0f, 0x2e, 0xd6, 0x78, 0x6a, 0x7f, 0x0b,
 | 
			
		||||
	0x97, 0xcd, 0xc2, 0xca, 0x2e, 0x0f, 0xbe, 0xe8, 0x37, 0x78, 0xe5, 0x54, 0x21, 0x6d, 0x01, 0xa4,
 | 
			
		||||
	0x77, 0x1b, 0x43, 0x9a, 0x72, 0xd5, 0xda, 0x3e, 0x44, 0xbb, 0x34, 0xda, 0xf7, 0x3c, 0x86, 0x28,
 | 
			
		||||
	0x1d, 0xa3, 0xfe, 0x78, 0xe6, 0x1e, 0xba, 0x7d, 0xf8, 0x4b, 0xc7, 0xf9, 0x37, 0x00, 0x00, 0xff,
 | 
			
		||||
	0xff, 0xc4, 0x79, 0x5c, 0x8e, 0x85, 0x11, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										456
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/partnerapps.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										456
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/partnerapps.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,456 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_partnerapps.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_RequestUploadToken_Request struct {
 | 
			
		||||
	Filename         *string `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"`
 | 
			
		||||
	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Request) Reset() {
 | 
			
		||||
	*m = CPartnerApps_RequestUploadToken_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_RequestUploadToken_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_RequestUploadToken_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Request) GetFilename() string {
 | 
			
		||||
	if m != nil && m.Filename != nil {
 | 
			
		||||
		return *m.Filename
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_RequestUploadToken_Response struct {
 | 
			
		||||
	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"`
 | 
			
		||||
	Location         *string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"`
 | 
			
		||||
	RoutingId        *uint64 `protobuf:"varint,3,opt,name=routing_id" json:"routing_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Response) Reset() {
 | 
			
		||||
	*m = CPartnerApps_RequestUploadToken_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_RequestUploadToken_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_RequestUploadToken_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Response) GetUploadToken() uint64 {
 | 
			
		||||
	if m != nil && m.UploadToken != nil {
 | 
			
		||||
		return *m.UploadToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Response) GetLocation() string {
 | 
			
		||||
	if m != nil && m.Location != nil {
 | 
			
		||||
		return *m.Location
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_RequestUploadToken_Response) GetRoutingId() uint64 {
 | 
			
		||||
	if m != nil && m.RoutingId != nil {
 | 
			
		||||
		return *m.RoutingId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FinishUpload_Request struct {
 | 
			
		||||
	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"`
 | 
			
		||||
	RoutingId        *uint64 `protobuf:"varint,2,opt,name=routing_id" json:"routing_id,omitempty"`
 | 
			
		||||
	AppId            *uint32 `protobuf:"varint,3,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Request) Reset()         { *m = CPartnerApps_FinishUpload_Request{} }
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_FinishUpload_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_FinishUpload_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Request) GetUploadToken() uint64 {
 | 
			
		||||
	if m != nil && m.UploadToken != nil {
 | 
			
		||||
		return *m.UploadToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Request) GetRoutingId() uint64 {
 | 
			
		||||
	if m != nil && m.RoutingId != nil {
 | 
			
		||||
		return *m.RoutingId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Request) GetAppId() uint32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FinishUploadKVSign_Response struct {
 | 
			
		||||
	SignedInstallscript *string `protobuf:"bytes,1,opt,name=signed_installscript" json:"signed_installscript,omitempty"`
 | 
			
		||||
	XXX_unrecognized    []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadKVSign_Response) Reset() {
 | 
			
		||||
	*m = CPartnerApps_FinishUploadKVSign_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPartnerApps_FinishUploadKVSign_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_FinishUploadKVSign_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_FinishUploadKVSign_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadKVSign_Response) GetSignedInstallscript() string {
 | 
			
		||||
	if m != nil && m.SignedInstallscript != nil {
 | 
			
		||||
		return *m.SignedInstallscript
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FinishUploadLegacyDRM_Request struct {
 | 
			
		||||
	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"`
 | 
			
		||||
	RoutingId        *uint64 `protobuf:"varint,2,opt,name=routing_id" json:"routing_id,omitempty"`
 | 
			
		||||
	AppId            *uint32 `protobuf:"varint,3,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	Flags            *uint32 `protobuf:"varint,4,opt,name=flags" json:"flags,omitempty"`
 | 
			
		||||
	ToolName         *string `protobuf:"bytes,5,opt,name=tool_name" json:"tool_name,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) Reset() {
 | 
			
		||||
	*m = CPartnerApps_FinishUploadLegacyDRM_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CPartnerApps_FinishUploadLegacyDRM_Request) ProtoMessage() {}
 | 
			
		||||
func (*CPartnerApps_FinishUploadLegacyDRM_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetUploadToken() uint64 {
 | 
			
		||||
	if m != nil && m.UploadToken != nil {
 | 
			
		||||
		return *m.UploadToken
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetRoutingId() uint64 {
 | 
			
		||||
	if m != nil && m.RoutingId != nil {
 | 
			
		||||
		return *m.RoutingId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetAppId() uint32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetFlags() uint32 {
 | 
			
		||||
	if m != nil && m.Flags != nil {
 | 
			
		||||
		return *m.Flags
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetToolName() string {
 | 
			
		||||
	if m != nil && m.ToolName != nil {
 | 
			
		||||
		return *m.ToolName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FinishUploadLegacyDRM_Response struct {
 | 
			
		||||
	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Response) Reset() {
 | 
			
		||||
	*m = CPartnerApps_FinishUploadLegacyDRM_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CPartnerApps_FinishUploadLegacyDRM_Response) ProtoMessage() {}
 | 
			
		||||
func (*CPartnerApps_FinishUploadLegacyDRM_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUploadLegacyDRM_Response) GetFileId() string {
 | 
			
		||||
	if m != nil && m.FileId != nil {
 | 
			
		||||
		return *m.FileId
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FinishUpload_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Response) Reset()         { *m = CPartnerApps_FinishUpload_Response{} }
 | 
			
		||||
func (m *CPartnerApps_FinishUpload_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_FinishUpload_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_FinishUpload_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FindDRMUploads_Request struct {
 | 
			
		||||
	AppId            *int32 `protobuf:"varint,1,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Request) Reset()         { *m = CPartnerApps_FindDRMUploads_Request{} }
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_FindDRMUploads_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_FindDRMUploads_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Request) GetAppId() int32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_ExistingDRMUpload struct {
 | 
			
		||||
	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"`
 | 
			
		||||
	AppId            *uint32 `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	ActorId          *int32  `protobuf:"varint,3,opt,name=actor_id" json:"actor_id,omitempty"`
 | 
			
		||||
	SuppliedName     *string `protobuf:"bytes,5,opt,name=supplied_name" json:"supplied_name,omitempty"`
 | 
			
		||||
	Flags            *uint32 `protobuf:"varint,6,opt,name=flags" json:"flags,omitempty"`
 | 
			
		||||
	ModType          *string `protobuf:"bytes,7,opt,name=mod_type" json:"mod_type,omitempty"`
 | 
			
		||||
	Timestamp        *uint32 `protobuf:"fixed32,8,opt,name=timestamp" json:"timestamp,omitempty"`
 | 
			
		||||
	OrigFileId       *string `protobuf:"bytes,9,opt,name=orig_file_id" json:"orig_file_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) Reset()                    { *m = CPartnerApps_ExistingDRMUpload{} }
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_ExistingDRMUpload) ProtoMessage()               {}
 | 
			
		||||
func (*CPartnerApps_ExistingDRMUpload) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{8} }
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetFileId() string {
 | 
			
		||||
	if m != nil && m.FileId != nil {
 | 
			
		||||
		return *m.FileId
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetAppId() uint32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetActorId() int32 {
 | 
			
		||||
	if m != nil && m.ActorId != nil {
 | 
			
		||||
		return *m.ActorId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetSuppliedName() string {
 | 
			
		||||
	if m != nil && m.SuppliedName != nil {
 | 
			
		||||
		return *m.SuppliedName
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetFlags() uint32 {
 | 
			
		||||
	if m != nil && m.Flags != nil {
 | 
			
		||||
		return *m.Flags
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetModType() string {
 | 
			
		||||
	if m != nil && m.ModType != nil {
 | 
			
		||||
		return *m.ModType
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetTimestamp() uint32 {
 | 
			
		||||
	if m != nil && m.Timestamp != nil {
 | 
			
		||||
		return *m.Timestamp
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_ExistingDRMUpload) GetOrigFileId() string {
 | 
			
		||||
	if m != nil && m.OrigFileId != nil {
 | 
			
		||||
		return *m.OrigFileId
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_FindDRMUploads_Response struct {
 | 
			
		||||
	Uploads          []*CPartnerApps_ExistingDRMUpload `protobuf:"bytes,1,rep,name=uploads" json:"uploads,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                            `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Response) Reset()         { *m = CPartnerApps_FindDRMUploads_Response{} }
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_FindDRMUploads_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPartnerApps_FindDRMUploads_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return partnerapps_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_FindDRMUploads_Response) GetUploads() []*CPartnerApps_ExistingDRMUpload {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Uploads
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_Download_Request struct {
 | 
			
		||||
	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"`
 | 
			
		||||
	AppId            *int32  `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Request) Reset()                    { *m = CPartnerApps_Download_Request{} }
 | 
			
		||||
func (m *CPartnerApps_Download_Request) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_Download_Request) ProtoMessage()               {}
 | 
			
		||||
func (*CPartnerApps_Download_Request) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{10} }
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Request) GetFileId() string {
 | 
			
		||||
	if m != nil && m.FileId != nil {
 | 
			
		||||
		return *m.FileId
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Request) GetAppId() int32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPartnerApps_Download_Response struct {
 | 
			
		||||
	DownloadUrl      *string `protobuf:"bytes,1,opt,name=download_url" json:"download_url,omitempty"`
 | 
			
		||||
	AppId            *int32  `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Response) Reset()                    { *m = CPartnerApps_Download_Response{} }
 | 
			
		||||
func (m *CPartnerApps_Download_Response) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPartnerApps_Download_Response) ProtoMessage()               {}
 | 
			
		||||
func (*CPartnerApps_Download_Response) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{11} }
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Response) GetDownloadUrl() string {
 | 
			
		||||
	if m != nil && m.DownloadUrl != nil {
 | 
			
		||||
		return *m.DownloadUrl
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPartnerApps_Download_Response) GetAppId() int32 {
 | 
			
		||||
	if m != nil && m.AppId != nil {
 | 
			
		||||
		return *m.AppId
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_RequestUploadToken_Request)(nil), "CPartnerApps_RequestUploadToken_Request")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_RequestUploadToken_Response)(nil), "CPartnerApps_RequestUploadToken_Response")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FinishUpload_Request)(nil), "CPartnerApps_FinishUpload_Request")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FinishUploadKVSign_Response)(nil), "CPartnerApps_FinishUploadKVSign_Response")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FinishUploadLegacyDRM_Request)(nil), "CPartnerApps_FinishUploadLegacyDRM_Request")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FinishUploadLegacyDRM_Response)(nil), "CPartnerApps_FinishUploadLegacyDRM_Response")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FinishUpload_Response)(nil), "CPartnerApps_FinishUpload_Response")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FindDRMUploads_Request)(nil), "CPartnerApps_FindDRMUploads_Request")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_ExistingDRMUpload)(nil), "CPartnerApps_ExistingDRMUpload")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_FindDRMUploads_Response)(nil), "CPartnerApps_FindDRMUploads_Response")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_Download_Request)(nil), "CPartnerApps_Download_Request")
 | 
			
		||||
	proto.RegisterType((*CPartnerApps_Download_Response)(nil), "CPartnerApps_Download_Response")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var partnerapps_fileDescriptor0 = []byte{
 | 
			
		||||
	// 809 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x96, 0x4f, 0x6f, 0xd3, 0x4a,
 | 
			
		||||
	0x14, 0xc5, 0xe5, 0xb6, 0x69, 0x9a, 0xe9, 0x4b, 0xdf, 0x7b, 0x56, 0x2b, 0x45, 0x11, 0xb4, 0xc6,
 | 
			
		||||
	0x2d, 0x22, 0xb4, 0xd5, 0x50, 0x15, 0x21, 0x36, 0x08, 0x95, 0xa6, 0x7f, 0x10, 0x05, 0x84, 0x5a,
 | 
			
		||||
	0x40, 0x6c, 0x50, 0x34, 0x75, 0x26, 0xe9, 0x08, 0xdb, 0x63, 0x3c, 0x63, 0x68, 0x77, 0x88, 0x15,
 | 
			
		||||
	0x1b, 0x3e, 0x00, 0x7b, 0x76, 0x20, 0x24, 0x24, 0xfa, 0xfd, 0xb8, 0x33, 0xb6, 0x13, 0x3b, 0x69,
 | 
			
		||||
	0x53, 0x23, 0x84, 0x58, 0x66, 0x7c, 0x7d, 0xee, 0x6f, 0xce, 0xdc, 0x39, 0x31, 0x5a, 0x11, 0x92,
 | 
			
		||||
	0x12, 0xcf, 0xa3, 0x42, 0x90, 0x2e, 0x15, 0xad, 0x80, 0x84, 0xd2, 0xa7, 0x21, 0x09, 0x02, 0x81,
 | 
			
		||||
	0xf5, 0x13, 0xc7, 0x65, 0xd4, 0x97, 0x38, 0x08, 0xb9, 0xe4, 0xf5, 0xd5, 0x7c, 0x71, 0xe4, 0xb3,
 | 
			
		||||
	0x0e, 0xa3, 0xed, 0xd6, 0x21, 0x11, 0x74, 0xb8, 0xda, 0x7e, 0x80, 0xae, 0x35, 0x9f, 0xc4, 0x7a,
 | 
			
		||||
	0xf7, 0x40, 0xaf, 0xb5, 0x4f, 0x5f, 0x47, 0x54, 0xc8, 0x67, 0x81, 0xcb, 0x49, 0xfb, 0x29, 0x7f,
 | 
			
		||||
	0x45, 0xfd, 0x74, 0xc9, 0xfc, 0x0f, 0x4d, 0x75, 0x98, 0x4b, 0x7d, 0xe2, 0xd1, 0x9a, 0x61, 0x19,
 | 
			
		||||
	0x8d, 0x8a, 0x59, 0x45, 0x25, 0x80, 0x60, 0xed, 0xda, 0x18, 0xfc, 0xac, 0xda, 0x1d, 0xd4, 0xb8,
 | 
			
		||||
	0x58, 0x4b, 0x04, 0xdc, 0x17, 0xd4, 0x9c, 0x45, 0xff, 0x44, 0x7a, 0xbd, 0x25, 0xd5, 0x03, 0x2d,
 | 
			
		||||
	0x38, 0xa1, 0x5a, 0xb8, 0xdc, 0x21, 0x92, 0x71, 0x5f, 0x6b, 0x56, 0x4c, 0x13, 0xa1, 0x90, 0x47,
 | 
			
		||||
	0x92, 0xf9, 0xdd, 0x16, 0xf4, 0x19, 0x57, 0x55, 0xf6, 0x4b, 0x74, 0x25, 0xd7, 0x67, 0x87, 0xf9,
 | 
			
		||||
	0x4c, 0x1c, 0xc5, 0x6d, 0x7a, 0xb4, 0x67, 0x37, 0xc8, 0xcb, 0x8d, 0xe9, 0xb5, 0x19, 0x34, 0x09,
 | 
			
		||||
	0xbb, 0x48, 0xe5, 0xab, 0xf6, 0xfd, 0x81, 0x6d, 0x64, 0xe5, 0xf7, 0x9e, 0x1f, 0xb0, 0x6e, 0x66,
 | 
			
		||||
	0x1b, 0x97, 0xd0, 0xac, 0x80, 0x05, 0xf0, 0x97, 0xf9, 0x42, 0x12, 0xd7, 0x15, 0x4e, 0xc8, 0x02,
 | 
			
		||||
	0x19, 0xfb, 0x63, 0x7f, 0x30, 0xd0, 0xf2, 0xb9, 0x52, 0x0f, 0x69, 0x97, 0x38, 0x27, 0x5b, 0xfb,
 | 
			
		||||
	0x8f, 0x7e, 0x1f, 0x59, 0x1d, 0x44, 0xc7, 0x25, 0x5d, 0x51, 0x9b, 0xd0, 0x3f, 0xff, 0x47, 0x15,
 | 
			
		||||
	0xc9, 0xb9, 0xdb, 0xd2, 0x47, 0x55, 0xd2, 0x28, 0x77, 0xd1, 0x4a, 0x21, 0x92, 0x64, 0x5f, 0xff,
 | 
			
		||||
	0xa2, 0xb2, 0x3a, 0x6b, 0xd5, 0x21, 0xde, 0xca, 0x12, 0xb2, 0x47, 0x79, 0x1e, 0xbf, 0x66, 0xdf,
 | 
			
		||||
	0x42, 0x8b, 0x83, 0x55, 0x6d, 0xd0, 0x8d, 0xcb, 0x7a, 0x03, 0x91, 0xc1, 0x57, 0xe2, 0x25, 0xfb,
 | 
			
		||||
	0x87, 0x81, 0xe6, 0x73, 0xef, 0x6d, 0x1f, 0x33, 0xa1, 0x76, 0xdc, 0x7b, 0x77, 0x08, 0x28, 0xa3,
 | 
			
		||||
	0xa1, 0x87, 0x4f, 0x8d, 0x0e, 0x71, 0x24, 0x0f, 0x53, 0x53, 0x4a, 0xe6, 0x1c, 0xaa, 0x8a, 0x28,
 | 
			
		||||
	0x08, 0x5c, 0x35, 0xfd, 0x7d, 0x27, 0xfa, 0x5e, 0x4d, 0xa6, 0xef, 0x79, 0x1c, 0x1c, 0x3f, 0x09,
 | 
			
		||||
	0x68, 0xad, 0xac, 0x0b, 0x94, 0x7b, 0x0c, 0xee, 0x8f, 0x24, 0x5e, 0x50, 0x9b, 0x82, 0xa5, 0xb2,
 | 
			
		||||
	0x3a, 0x19, 0x1e, 0xb2, 0x6e, 0x2b, 0x45, 0xa8, 0x68, 0x4f, 0x5e, 0xa0, 0xa5, 0xd1, 0xbb, 0x4d,
 | 
			
		||||
	0xcc, 0x5c, 0x43, 0xe5, 0xf8, 0x5c, 0x05, 0xb0, 0x8f, 0x37, 0xa6, 0xd7, 0x17, 0xf0, 0xe8, 0xdd,
 | 
			
		||||
	0xda, 0x1b, 0xe8, 0x72, 0xae, 0x62, 0x8b, 0xbf, 0xf5, 0x73, 0xd3, 0x7d, 0x81, 0x1d, 0x25, 0x7b,
 | 
			
		||||
	0x67, 0xc0, 0xd1, 0x8c, 0x42, 0xff, 0x06, 0xb6, 0xd3, 0xc5, 0x28, 0x74, 0xcf, 0xd6, 0x59, 0xff,
 | 
			
		||||
	0x8a, 0xd0, 0x74, 0x46, 0xc7, 0xfc, 0x6e, 0xa0, 0x5a, 0x02, 0x11, 0xdf, 0x85, 0xcc, 0xed, 0x36,
 | 
			
		||||
	0x1b, 0xb8, 0x60, 0x96, 0xd4, 0xaf, 0xe3, 0xa2, 0x49, 0x61, 0x6f, 0xbc, 0x3f, 0xad, 0xdd, 0x49,
 | 
			
		||||
	0x0a, 0xac, 0xd8, 0x47, 0x4b, 0xdf, 0x0f, 0xab, 0xc3, 0x43, 0x2b, 0x77, 0xed, 0x2c, 0xe5, 0x49,
 | 
			
		||||
	0x5a, 0x73, 0xc3, 0x52, 0x37, 0x13, 0x6c, 0x35, 0xbf, 0x19, 0x68, 0x2e, 0x11, 0xe8, 0x59, 0xfc,
 | 
			
		||||
	0xd7, 0x80, 0xe9, 0x31, 0x75, 0x22, 0x49, 0x0e, 0x01, 0x34, 0x4f, 0x0b, 0x79, 0xec, 0x40, 0x68,
 | 
			
		||||
	0x2b, 0xe0, 0xd3, 0x3e, 0x70, 0x73, 0x7b, 0xf7, 0x8f, 0x03, 0xef, 0x02, 0x70, 0xf3, 0x5c, 0x60,
 | 
			
		||||
	0x27, 0x12, 0x92, 0x7b, 0x85, 0xb8, 0xbf, 0x18, 0xc8, 0x1c, 0x4e, 0x4b, 0xd3, 0xc6, 0x17, 0xc6,
 | 
			
		||||
	0xf5, 0x20, 0xee, 0x88, 0xcc, 0xb5, 0x77, 0x00, 0x77, 0xb3, 0xc9, 0x3d, 0x8f, 0x49, 0xcb, 0xa3,
 | 
			
		||||
	0xf2, 0x88, 0x2b, 0x5a, 0x7d, 0xd8, 0x16, 0xf1, 0x07, 0x06, 0x82, 0x74, 0x24, 0x0d, 0xd5, 0x72,
 | 
			
		||||
	0x82, 0xcb, 0x84, 0xe5, 0x70, 0x2f, 0x70, 0xa9, 0xa4, 0xe6, 0x67, 0x70, 0x39, 0xdb, 0xa7, 0x1f,
 | 
			
		||||
	0x36, 0x2b, 0xb8, 0x78, 0x6a, 0xd7, 0x57, 0xf1, 0x2f, 0x04, 0xab, 0xbd, 0x06, 0xf0, 0xab, 0x79,
 | 
			
		||||
	0xf8, 0xb3, 0xa6, 0x22, 0x63, 0xea, 0xa7, 0x01, 0xcc, 0xde, 0x44, 0x14, 0xf2, 0x75, 0x11, 0x17,
 | 
			
		||||
	0x88, 0xed, 0xdb, 0x00, 0x75, 0x73, 0x18, 0xea, 0x9c, 0x93, 0xcf, 0xb0, 0x7d, 0x34, 0xd0, 0x4c,
 | 
			
		||||
	0x3e, 0xf5, 0xcc, 0x25, 0x5c, 0xe0, 0x1f, 0xa0, 0x7e, 0x15, 0x17, 0x49, 0x4e, 0x1b, 0x03, 0xd8,
 | 
			
		||||
	0xb2, 0x7a, 0x28, 0xac, 0xc7, 0x96, 0xc7, 0x61, 0x3c, 0x43, 0xea, 0xc0, 0xc7, 0x0b, 0x30, 0x30,
 | 
			
		||||
	0x00, 0x4c, 0x52, 0xd5, 0x3a, 0x3c, 0xb1, 0xf4, 0x77, 0x88, 0xb9, 0x87, 0xa6, 0xd2, 0xa0, 0x33,
 | 
			
		||||
	0xe7, 0xf1, 0xc8, 0x08, 0xad, 0x2f, 0xe0, 0xd1, 0x01, 0x59, 0x5f, 0x87, 0xe6, 0xf8, 0x80, 0x86,
 | 
			
		||||
	0x6f, 0x98, 0x43, 0x13, 0x5b, 0x84, 0xf6, 0x05, 0x7a, 0x59, 0x1e, 0xf1, 0xe1, 0xf3, 0xca, 0x53,
 | 
			
		||||
	0x2c, 0xd0, 0x3d, 0xf9, 0x22, 0x13, 0x9b, 0xe3, 0xef, 0x0c, 0xe3, 0x67, 0x00, 0x00, 0x00, 0xff,
 | 
			
		||||
	0xff, 0xec, 0x20, 0xc0, 0x4b, 0xaf, 0x09, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										586
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/player.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										586
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/player.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,586 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: steammessages_player.steamclient.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package unified
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetGameBadgeLevels_Request struct {
 | 
			
		||||
	Appid            *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Request) Reset()         { *m = CPlayer_GetGameBadgeLevels_Request{} }
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Request) GetAppid() uint32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetGameBadgeLevels_Response struct {
 | 
			
		||||
	PlayerLevel      *uint32                                      `protobuf:"varint,1,opt,name=player_level" json:"player_level,omitempty"`
 | 
			
		||||
	Badges           []*CPlayer_GetGameBadgeLevels_Response_Badge `protobuf:"bytes,2,rep,name=badges" json:"badges,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                       `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response) Reset()         { *m = CPlayer_GetGameBadgeLevels_Response{} }
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response) GetPlayerLevel() uint32 {
 | 
			
		||||
	if m != nil && m.PlayerLevel != nil {
 | 
			
		||||
		return *m.PlayerLevel
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response) GetBadges() []*CPlayer_GetGameBadgeLevels_Response_Badge {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Badges
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetGameBadgeLevels_Response_Badge struct {
 | 
			
		||||
	Level            *int32  `protobuf:"varint,1,opt,name=level" json:"level,omitempty"`
 | 
			
		||||
	Series           *int32  `protobuf:"varint,2,opt,name=series" json:"series,omitempty"`
 | 
			
		||||
	BorderColor      *uint32 `protobuf:"varint,3,opt,name=border_color" json:"border_color,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response_Badge) Reset() {
 | 
			
		||||
	*m = CPlayer_GetGameBadgeLevels_Response_Badge{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response_Badge) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Response_Badge) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetGameBadgeLevels_Response_Badge) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{1, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetLevel() int32 {
 | 
			
		||||
	if m != nil && m.Level != nil {
 | 
			
		||||
		return *m.Level
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetSeries() int32 {
 | 
			
		||||
	if m != nil && m.Series != nil {
 | 
			
		||||
		return *m.Series
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetBorderColor() uint32 {
 | 
			
		||||
	if m != nil && m.BorderColor != nil {
 | 
			
		||||
		return *m.BorderColor
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetLastPlayedTimes_Request struct {
 | 
			
		||||
	MinLastPlayed    *uint32 `protobuf:"varint,1,opt,name=min_last_played" json:"min_last_played,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Request) Reset()         { *m = CPlayer_GetLastPlayedTimes_Request{} }
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Request) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Request) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Request) GetMinLastPlayed() uint32 {
 | 
			
		||||
	if m != nil && m.MinLastPlayed != nil {
 | 
			
		||||
		return *m.MinLastPlayed
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetLastPlayedTimes_Response struct {
 | 
			
		||||
	Games            []*CPlayer_GetLastPlayedTimes_Response_Game `protobuf:"bytes,1,rep,name=games" json:"games,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                      `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response) Reset()         { *m = CPlayer_GetLastPlayedTimes_Response{} }
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Response) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response) GetGames() []*CPlayer_GetLastPlayedTimes_Response_Game {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Games
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_GetLastPlayedTimes_Response_Game struct {
 | 
			
		||||
	Appid            *int32  `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"`
 | 
			
		||||
	LastPlaytime     *uint32 `protobuf:"varint,2,opt,name=last_playtime" json:"last_playtime,omitempty"`
 | 
			
		||||
	Playtime_2Weeks  *int32  `protobuf:"varint,3,opt,name=playtime_2weeks" json:"playtime_2weeks,omitempty"`
 | 
			
		||||
	PlaytimeForever  *int32  `protobuf:"varint,4,opt,name=playtime_forever" json:"playtime_forever,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) Reset() {
 | 
			
		||||
	*m = CPlayer_GetLastPlayedTimes_Response_Game{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Response_Game) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_GetLastPlayedTimes_Response_Game) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{3, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetAppid() int32 {
 | 
			
		||||
	if m != nil && m.Appid != nil {
 | 
			
		||||
		return *m.Appid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetLastPlaytime() uint32 {
 | 
			
		||||
	if m != nil && m.LastPlaytime != nil {
 | 
			
		||||
		return *m.LastPlaytime
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetPlaytime_2Weeks() int32 {
 | 
			
		||||
	if m != nil && m.Playtime_2Weeks != nil {
 | 
			
		||||
		return *m.Playtime_2Weeks
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetPlaytimeForever() int32 {
 | 
			
		||||
	if m != nil && m.PlaytimeForever != nil {
 | 
			
		||||
		return *m.PlaytimeForever
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayer_AcceptSSA_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_AcceptSSA_Request) Reset()                    { *m = CPlayer_AcceptSSA_Request{} }
 | 
			
		||||
func (m *CPlayer_AcceptSSA_Request) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_AcceptSSA_Request) ProtoMessage()               {}
 | 
			
		||||
func (*CPlayer_AcceptSSA_Request) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{4} }
 | 
			
		||||
 | 
			
		||||
type CPlayer_AcceptSSA_Response struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_AcceptSSA_Response) Reset()                    { *m = CPlayer_AcceptSSA_Response{} }
 | 
			
		||||
func (m *CPlayer_AcceptSSA_Response) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_AcceptSSA_Response) ProtoMessage()               {}
 | 
			
		||||
func (*CPlayer_AcceptSSA_Response) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{5} }
 | 
			
		||||
 | 
			
		||||
type CPlayer_LastPlayedTimes_Notification struct {
 | 
			
		||||
	Games            []*CPlayer_GetLastPlayedTimes_Response_Game `protobuf:"bytes,1,rep,name=games" json:"games,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte                                      `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_LastPlayedTimes_Notification) Reset()         { *m = CPlayer_LastPlayedTimes_Notification{} }
 | 
			
		||||
func (m *CPlayer_LastPlayedTimes_Notification) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CPlayer_LastPlayedTimes_Notification) ProtoMessage()    {}
 | 
			
		||||
func (*CPlayer_LastPlayedTimes_Notification) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayer_LastPlayedTimes_Notification) GetGames() []*CPlayer_GetLastPlayedTimes_Response_Game {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Games
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayerClient_GetSystemInformation_Request struct {
 | 
			
		||||
	XXX_unrecognized []byte `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayerClient_GetSystemInformation_Request) Reset() {
 | 
			
		||||
	*m = CPlayerClient_GetSystemInformation_Request{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPlayerClient_GetSystemInformation_Request) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CPlayerClient_GetSystemInformation_Request) ProtoMessage() {}
 | 
			
		||||
func (*CPlayerClient_GetSystemInformation_Request) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CClientSystemInfo struct {
 | 
			
		||||
	Cpu                *CClientSystemInfo_CPU       `protobuf:"bytes,1,opt,name=cpu" json:"cpu,omitempty"`
 | 
			
		||||
	VideoCard          *CClientSystemInfo_VideoCard `protobuf:"bytes,2,opt,name=video_card" json:"video_card,omitempty"`
 | 
			
		||||
	OperatingSystem    *string                      `protobuf:"bytes,3,opt,name=operating_system" json:"operating_system,omitempty"`
 | 
			
		||||
	Os_64Bit           *bool                        `protobuf:"varint,4,opt,name=os_64bit" json:"os_64bit,omitempty"`
 | 
			
		||||
	SystemRamMb        *int32                       `protobuf:"varint,5,opt,name=system_ram_mb" json:"system_ram_mb,omitempty"`
 | 
			
		||||
	AudioDevice        *string                      `protobuf:"bytes,6,opt,name=audio_device" json:"audio_device,omitempty"`
 | 
			
		||||
	AudioDriverVersion *string                      `protobuf:"bytes,7,opt,name=audio_driver_version" json:"audio_driver_version,omitempty"`
 | 
			
		||||
	XXX_unrecognized   []byte                       `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) Reset()                    { *m = CClientSystemInfo{} }
 | 
			
		||||
func (m *CClientSystemInfo) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CClientSystemInfo) ProtoMessage()               {}
 | 
			
		||||
func (*CClientSystemInfo) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8} }
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetCpu() *CClientSystemInfo_CPU {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.Cpu
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetVideoCard() *CClientSystemInfo_VideoCard {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.VideoCard
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetOperatingSystem() string {
 | 
			
		||||
	if m != nil && m.OperatingSystem != nil {
 | 
			
		||||
		return *m.OperatingSystem
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetOs_64Bit() bool {
 | 
			
		||||
	if m != nil && m.Os_64Bit != nil {
 | 
			
		||||
		return *m.Os_64Bit
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetSystemRamMb() int32 {
 | 
			
		||||
	if m != nil && m.SystemRamMb != nil {
 | 
			
		||||
		return *m.SystemRamMb
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetAudioDevice() string {
 | 
			
		||||
	if m != nil && m.AudioDevice != nil {
 | 
			
		||||
		return *m.AudioDevice
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo) GetAudioDriverVersion() string {
 | 
			
		||||
	if m != nil && m.AudioDriverVersion != nil {
 | 
			
		||||
		return *m.AudioDriverVersion
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CClientSystemInfo_CPU struct {
 | 
			
		||||
	SpeedMhz           *int32  `protobuf:"varint,1,opt,name=speed_mhz" json:"speed_mhz,omitempty"`
 | 
			
		||||
	Vendor             *string `protobuf:"bytes,2,opt,name=vendor" json:"vendor,omitempty"`
 | 
			
		||||
	LogicalProcessors  *int32  `protobuf:"varint,3,opt,name=logical_processors" json:"logical_processors,omitempty"`
 | 
			
		||||
	PhysicalProcessors *int32  `protobuf:"varint,4,opt,name=physical_processors" json:"physical_processors,omitempty"`
 | 
			
		||||
	Hyperthreading     *bool   `protobuf:"varint,5,opt,name=hyperthreading" json:"hyperthreading,omitempty"`
 | 
			
		||||
	Fcmov              *bool   `protobuf:"varint,6,opt,name=fcmov" json:"fcmov,omitempty"`
 | 
			
		||||
	Sse2               *bool   `protobuf:"varint,7,opt,name=sse2" json:"sse2,omitempty"`
 | 
			
		||||
	Sse3               *bool   `protobuf:"varint,8,opt,name=sse3" json:"sse3,omitempty"`
 | 
			
		||||
	Ssse3              *bool   `protobuf:"varint,9,opt,name=ssse3" json:"ssse3,omitempty"`
 | 
			
		||||
	Sse4A              *bool   `protobuf:"varint,10,opt,name=sse4a" json:"sse4a,omitempty"`
 | 
			
		||||
	Sse41              *bool   `protobuf:"varint,11,opt,name=sse41" json:"sse41,omitempty"`
 | 
			
		||||
	Sse42              *bool   `protobuf:"varint,12,opt,name=sse42" json:"sse42,omitempty"`
 | 
			
		||||
	XXX_unrecognized   []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) Reset()                    { *m = CClientSystemInfo_CPU{} }
 | 
			
		||||
func (m *CClientSystemInfo_CPU) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CClientSystemInfo_CPU) ProtoMessage()               {}
 | 
			
		||||
func (*CClientSystemInfo_CPU) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8, 0} }
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSpeedMhz() int32 {
 | 
			
		||||
	if m != nil && m.SpeedMhz != nil {
 | 
			
		||||
		return *m.SpeedMhz
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetVendor() string {
 | 
			
		||||
	if m != nil && m.Vendor != nil {
 | 
			
		||||
		return *m.Vendor
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetLogicalProcessors() int32 {
 | 
			
		||||
	if m != nil && m.LogicalProcessors != nil {
 | 
			
		||||
		return *m.LogicalProcessors
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetPhysicalProcessors() int32 {
 | 
			
		||||
	if m != nil && m.PhysicalProcessors != nil {
 | 
			
		||||
		return *m.PhysicalProcessors
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetHyperthreading() bool {
 | 
			
		||||
	if m != nil && m.Hyperthreading != nil {
 | 
			
		||||
		return *m.Hyperthreading
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetFcmov() bool {
 | 
			
		||||
	if m != nil && m.Fcmov != nil {
 | 
			
		||||
		return *m.Fcmov
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSse2() bool {
 | 
			
		||||
	if m != nil && m.Sse2 != nil {
 | 
			
		||||
		return *m.Sse2
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSse3() bool {
 | 
			
		||||
	if m != nil && m.Sse3 != nil {
 | 
			
		||||
		return *m.Sse3
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSsse3() bool {
 | 
			
		||||
	if m != nil && m.Ssse3 != nil {
 | 
			
		||||
		return *m.Ssse3
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSse4A() bool {
 | 
			
		||||
	if m != nil && m.Sse4A != nil {
 | 
			
		||||
		return *m.Sse4A
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSse41() bool {
 | 
			
		||||
	if m != nil && m.Sse41 != nil {
 | 
			
		||||
		return *m.Sse41
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_CPU) GetSse42() bool {
 | 
			
		||||
	if m != nil && m.Sse42 != nil {
 | 
			
		||||
		return *m.Sse42
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CClientSystemInfo_VideoCard struct {
 | 
			
		||||
	Driver           *string `protobuf:"bytes,1,opt,name=driver" json:"driver,omitempty"`
 | 
			
		||||
	DriverVersion    *string `protobuf:"bytes,2,opt,name=driver_version" json:"driver_version,omitempty"`
 | 
			
		||||
	DriverDate       *uint32 `protobuf:"varint,3,opt,name=driver_date" json:"driver_date,omitempty"`
 | 
			
		||||
	DirectxVersion   *string `protobuf:"bytes,4,opt,name=directx_version" json:"directx_version,omitempty"`
 | 
			
		||||
	OpenglVersion    *string `protobuf:"bytes,5,opt,name=opengl_version" json:"opengl_version,omitempty"`
 | 
			
		||||
	Vendorid         *int32  `protobuf:"varint,6,opt,name=vendorid" json:"vendorid,omitempty"`
 | 
			
		||||
	Deviceid         *int32  `protobuf:"varint,7,opt,name=deviceid" json:"deviceid,omitempty"`
 | 
			
		||||
	VramMb           *int32  `protobuf:"varint,8,opt,name=vram_mb" json:"vram_mb,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte  `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) Reset()                    { *m = CClientSystemInfo_VideoCard{} }
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) String() string            { return proto.CompactTextString(m) }
 | 
			
		||||
func (*CClientSystemInfo_VideoCard) ProtoMessage()               {}
 | 
			
		||||
func (*CClientSystemInfo_VideoCard) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8, 1} }
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetDriver() string {
 | 
			
		||||
	if m != nil && m.Driver != nil {
 | 
			
		||||
		return *m.Driver
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetDriverVersion() string {
 | 
			
		||||
	if m != nil && m.DriverVersion != nil {
 | 
			
		||||
		return *m.DriverVersion
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetDriverDate() uint32 {
 | 
			
		||||
	if m != nil && m.DriverDate != nil {
 | 
			
		||||
		return *m.DriverDate
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetDirectxVersion() string {
 | 
			
		||||
	if m != nil && m.DirectxVersion != nil {
 | 
			
		||||
		return *m.DirectxVersion
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetOpenglVersion() string {
 | 
			
		||||
	if m != nil && m.OpenglVersion != nil {
 | 
			
		||||
		return *m.OpenglVersion
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetVendorid() int32 {
 | 
			
		||||
	if m != nil && m.Vendorid != nil {
 | 
			
		||||
		return *m.Vendorid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetDeviceid() int32 {
 | 
			
		||||
	if m != nil && m.Deviceid != nil {
 | 
			
		||||
		return *m.Deviceid
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CClientSystemInfo_VideoCard) GetVramMb() int32 {
 | 
			
		||||
	if m != nil && m.VramMb != nil {
 | 
			
		||||
		return *m.VramMb
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CPlayerClient_GetSystemInformation_Response struct {
 | 
			
		||||
	SystemInfo       *CClientSystemInfo `protobuf:"bytes,1,opt,name=system_info" json:"system_info,omitempty"`
 | 
			
		||||
	XXX_unrecognized []byte             `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayerClient_GetSystemInformation_Response) Reset() {
 | 
			
		||||
	*m = CPlayerClient_GetSystemInformation_Response{}
 | 
			
		||||
}
 | 
			
		||||
func (m *CPlayerClient_GetSystemInformation_Response) String() string {
 | 
			
		||||
	return proto.CompactTextString(m)
 | 
			
		||||
}
 | 
			
		||||
func (*CPlayerClient_GetSystemInformation_Response) ProtoMessage() {}
 | 
			
		||||
func (*CPlayerClient_GetSystemInformation_Response) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return player_fileDescriptor0, []int{9}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *CPlayerClient_GetSystemInformation_Response) GetSystemInfo() *CClientSystemInfo {
 | 
			
		||||
	if m != nil {
 | 
			
		||||
		return m.SystemInfo
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Request)(nil), "CPlayer_GetGameBadgeLevels_Request")
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Response)(nil), "CPlayer_GetGameBadgeLevels_Response")
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Response_Badge)(nil), "CPlayer_GetGameBadgeLevels_Response.Badge")
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Request)(nil), "CPlayer_GetLastPlayedTimes_Request")
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Response)(nil), "CPlayer_GetLastPlayedTimes_Response")
 | 
			
		||||
	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Response_Game)(nil), "CPlayer_GetLastPlayedTimes_Response.Game")
 | 
			
		||||
	proto.RegisterType((*CPlayer_AcceptSSA_Request)(nil), "CPlayer_AcceptSSA_Request")
 | 
			
		||||
	proto.RegisterType((*CPlayer_AcceptSSA_Response)(nil), "CPlayer_AcceptSSA_Response")
 | 
			
		||||
	proto.RegisterType((*CPlayer_LastPlayedTimes_Notification)(nil), "CPlayer_LastPlayedTimes_Notification")
 | 
			
		||||
	proto.RegisterType((*CPlayerClient_GetSystemInformation_Request)(nil), "CPlayerClient_GetSystemInformation_Request")
 | 
			
		||||
	proto.RegisterType((*CClientSystemInfo)(nil), "CClientSystemInfo")
 | 
			
		||||
	proto.RegisterType((*CClientSystemInfo_CPU)(nil), "CClientSystemInfo.CPU")
 | 
			
		||||
	proto.RegisterType((*CClientSystemInfo_VideoCard)(nil), "CClientSystemInfo.VideoCard")
 | 
			
		||||
	proto.RegisterType((*CPlayerClient_GetSystemInformation_Response)(nil), "CPlayerClient_GetSystemInformation_Response")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var player_fileDescriptor0 = []byte{
 | 
			
		||||
	// 1067 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0xdb, 0x46,
 | 
			
		||||
	0x10, 0x05, 0x2d, 0xcb, 0x96, 0x46, 0x76, 0x9c, 0x6c, 0x9c, 0x94, 0xa1, 0x5d, 0x60, 0x41, 0xa7,
 | 
			
		||||
	0xf9, 0x70, 0x1c, 0xa2, 0x55, 0x82, 0xa2, 0x68, 0x0b, 0x04, 0xb6, 0x0f, 0x41, 0x01, 0x23, 0x48,
 | 
			
		||||
	0xe3, 0x38, 0xa7, 0x02, 0xec, 0x8a, 0x5c, 0xc9, 0x44, 0x48, 0xae, 0xca, 0x5d, 0x29, 0x55, 0x4f,
 | 
			
		||||
	0x45, 0xce, 0xbd, 0x15, 0xfd, 0x1b, 0xbd, 0xb9, 0xe7, 0x00, 0xfd, 0x23, 0xfd, 0x03, 0x3d, 0xf6,
 | 
			
		||||
	0xde, 0xd9, 0x5d, 0x52, 0x1f, 0x96, 0x9d, 0xaa, 0x39, 0x18, 0xd6, 0xee, 0xbc, 0x1d, 0xbe, 0x79,
 | 
			
		||||
	0x3b, 0xf3, 0x16, 0xee, 0x48, 0xc5, 0x59, 0x96, 0x71, 0x29, 0x59, 0x8f, 0xcb, 0xb0, 0x9f, 0xb2,
 | 
			
		||||
	0x11, 0x2f, 0x02, 0xb3, 0x19, 0xa5, 0x09, 0xcf, 0x55, 0xd0, 0x2f, 0x84, 0x12, 0xde, 0xde, 0x2c,
 | 
			
		||||
	0x6e, 0x90, 0x27, 0xdd, 0x84, 0xc7, 0x61, 0x87, 0x49, 0x3e, 0x8f, 0xf6, 0x1f, 0x81, 0x7f, 0xf8,
 | 
			
		||||
	0xdc, 0xa4, 0x0a, 0x9f, 0x72, 0xf5, 0x94, 0x65, 0xfc, 0x80, 0xc5, 0x3d, 0x7e, 0xc4, 0x87, 0x3c,
 | 
			
		||||
	0x95, 0xe1, 0x0b, 0xfe, 0xc3, 0x80, 0x4b, 0x45, 0xd6, 0xa1, 0xce, 0xfa, 0xfd, 0x24, 0x76, 0x1d,
 | 
			
		||||
	0xea, 0xdc, 0x5b, 0xf7, 0xcf, 0x1c, 0xd8, 0x79, 0xef, 0x29, 0xd9, 0x17, 0xb9, 0xe4, 0x64, 0x13,
 | 
			
		||||
	0xd6, 0x2c, 0xcd, 0x30, 0xd5, 0x11, 0x7b, 0x9a, 0x7c, 0x09, 0x2b, 0x1d, 0x8d, 0x96, 0xee, 0x12,
 | 
			
		||||
	0xad, 0xdd, 0x6b, 0xb5, 0x77, 0x83, 0x05, 0x72, 0x05, 0x66, 0xd3, 0xfb, 0x1a, 0xea, 0xe6, 0x87,
 | 
			
		||||
	0x66, 0x34, 0xc9, 0x59, 0x27, 0x57, 0x60, 0x45, 0xf2, 0x22, 0x31, 0x39, 0xf5, 0x1a, 0xbf, 0xdc,
 | 
			
		||||
	0x11, 0x45, 0x8c, 0x39, 0x23, 0x91, 0x8a, 0xc2, 0xad, 0x19, 0xde, 0x6f, 0x9d, 0x99, 0x6a, 0x8f,
 | 
			
		||||
	0x98, 0x54, 0x66, 0x15, 0xbf, 0x4c, 0x50, 0xaf, 0x71, 0xb5, 0xdf, 0xc1, 0x46, 0x96, 0xe4, 0x61,
 | 
			
		||||
	0x8a, 0x61, 0x2b, 0x73, 0x59, 0xf7, 0xc1, 0xe1, 0xdb, 0x33, 0xf7, 0xc9, 0xcb, 0x53, 0x4e, 0x33,
 | 
			
		||||
	0x21, 0x15, 0x2d, 0x78, 0x84, 0x3a, 0x52, 0x0d, 0x7b, 0x68, 0x61, 0x54, 0x61, 0x1e, 0xaa, 0x10,
 | 
			
		||||
	0x60, 0x35, 0xa6, 0x2c, 0x2d, 0x38, 0x8b, 0x47, 0xf4, 0x75, 0x2e, 0xde, 0x48, 0xca, 0x3a, 0x62,
 | 
			
		||||
	0xa0, 0xfc, 0x77, 0xb3, 0xe2, 0xcd, 0x93, 0x28, 0xc5, 0xfb, 0x02, 0xea, 0x3d, 0x14, 0x43, 0xe2,
 | 
			
		||||
	0xb7, 0xb5, 0x4a, 0xf7, 0x83, 0x05, 0x0e, 0x05, 0x5a, 0x3e, 0x2f, 0x84, 0x65, 0xfd, 0x7f, 0xf6,
 | 
			
		||||
	0xd6, 0xea, 0xe4, 0x06, 0xac, 0x8f, 0x4b, 0xd2, 0x44, 0x8d, 0x54, 0xeb, 0xe4, 0x23, 0xd8, 0xa8,
 | 
			
		||||
	0x76, 0xc2, 0xf6, 0x1b, 0xce, 0x5f, 0x4b, 0xa3, 0x56, 0x9d, 0xb8, 0x70, 0x75, 0x1c, 0xe8, 0x8a,
 | 
			
		||||
	0x02, 0xd5, 0x2e, 0xdc, 0x65, 0x1d, 0xf1, 0xb7, 0xe0, 0x56, 0x45, 0x66, 0x3f, 0x8a, 0x78, 0x5f,
 | 
			
		||||
	0x1d, 0x1f, 0xef, 0x57, 0xea, 0xf9, 0xdb, 0xe0, 0x5d, 0x14, 0xb4, 0x04, 0xfd, 0xef, 0xe1, 0x76,
 | 
			
		||||
	0x15, 0x3d, 0x5f, 0xc4, 0x33, 0xa1, 0xb0, 0x55, 0x23, 0xa6, 0x12, 0x91, 0x7f, 0x78, 0xf5, 0xfe,
 | 
			
		||||
	0x1e, 0xec, 0x96, 0xd8, 0x43, 0x73, 0x09, 0xfa, 0xc4, 0xf1, 0x08, 0x3b, 0x3f, 0xfb, 0x26, 0xc7,
 | 
			
		||||
	0x32, 0x32, 0x93, 0x7f, 0xcc, 0xf6, 0x9f, 0x65, 0xb8, 0x76, 0x68, 0x81, 0x13, 0x10, 0xd9, 0x81,
 | 
			
		||||
	0x5a, 0xd4, 0x1f, 0x18, 0xdd, 0x5a, 0xed, 0x9b, 0xc1, 0x1c, 0x00, 0xd9, 0x9c, 0x90, 0x4f, 0x01,
 | 
			
		||||
	0x86, 0x49, 0xcc, 0x45, 0x18, 0xb1, 0x22, 0x36, 0x62, 0xb6, 0xda, 0xdb, 0x17, 0x60, 0x5f, 0x69,
 | 
			
		||||
	0xd0, 0x21, 0x62, 0xb4, 0xa2, 0xa2, 0xcf, 0x0b, 0x64, 0x90, 0xf7, 0x42, 0x69, 0x10, 0x46, 0xeb,
 | 
			
		||||
	0x26, 0xb9, 0x0a, 0x0d, 0x21, 0xc3, 0xcf, 0x1f, 0x77, 0x12, 0x65, 0x34, 0x6e, 0xe8, 0xdb, 0xb2,
 | 
			
		||||
	0x88, 0xb0, 0x60, 0x59, 0x98, 0x75, 0xdc, 0x7a, 0xd5, 0xd8, 0x6c, 0x10, 0x27, 0x22, 0x8c, 0xf9,
 | 
			
		||||
	0x30, 0x89, 0xb8, 0xbb, 0x62, 0x8e, 0x6f, 0xc3, 0x66, 0xb9, 0x5b, 0x24, 0x78, 0x4d, 0x21, 0xfe,
 | 
			
		||||
	0x49, 0xac, 0xd2, 0x5d, 0xd5, 0x51, 0xef, 0x2f, 0x07, 0x6a, 0x9a, 0xf0, 0x35, 0x68, 0xca, 0x3e,
 | 
			
		||||
	0x47, 0x2f, 0xc8, 0x4e, 0x7f, 0x9a, 0xcc, 0xcd, 0x90, 0xe7, 0x31, 0x4e, 0xc8, 0x92, 0x49, 0xe4,
 | 
			
		||||
	0x01, 0x49, 0x45, 0x0f, 0x2f, 0x21, 0x0d, 0xd1, 0x1f, 0x22, 0x34, 0x11, 0x51, 0x54, 0xfd, 0xb0,
 | 
			
		||||
	0x05, 0xd7, 0xfb, 0xa7, 0x23, 0x79, 0x3e, 0x68, 0x5a, 0x82, 0xdc, 0x84, 0x2b, 0xa7, 0x23, 0xac,
 | 
			
		||||
	0x4d, 0x9d, 0xea, 0x8e, 0xc7, 0xfa, 0x0c, 0xdf, 0x86, 0xee, 0xc1, 0x6e, 0x94, 0x89, 0xa1, 0x21,
 | 
			
		||||
	0xda, 0x20, 0x6b, 0xb0, 0x2c, 0x25, 0x6f, 0x1b, 0x62, 0xd5, 0xea, 0x91, 0xdb, 0xa8, 0xa0, 0xd2,
 | 
			
		||||
	0x2c, 0x9b, 0x93, 0x25, 0x7f, 0xcc, 0x5c, 0x98, 0x5e, 0x7e, 0xe6, 0xb6, 0xa6, 0x97, 0x6d, 0x77,
 | 
			
		||||
	0x4d, 0x2f, 0xbd, 0xdf, 0x1d, 0x68, 0x4e, 0x74, 0xc6, 0xaa, 0xac, 0x10, 0xa6, 0xca, 0xa6, 0x26,
 | 
			
		||||
	0x77, 0x4e, 0x18, 0x5b, 0xed, 0x75, 0x68, 0x95, 0xfb, 0x31, 0x53, 0xdc, 0x9a, 0x84, 0x9e, 0x87,
 | 
			
		||||
	0x38, 0xc1, 0xd9, 0x56, 0x3f, 0x8e, 0xd1, 0xcb, 0x55, 0x16, 0xbc, 0xbd, 0xbc, 0x97, 0x8e, 0xf7,
 | 
			
		||||
	0xeb, 0xd5, 0xdd, 0x59, 0x0d, 0x71, 0xd2, 0x56, 0x8c, 0x18, 0xb8, 0x63, 0xaf, 0x07, 0x77, 0x56,
 | 
			
		||||
	0xcd, 0xce, 0x06, 0xac, 0x0e, 0xcb, 0x7b, 0x6c, 0x98, 0x11, 0x7a, 0x05, 0x0f, 0x16, 0xea, 0xd2,
 | 
			
		||||
	0xd2, 0x0c, 0xee, 0x42, 0xab, 0xec, 0x86, 0x04, 0xc3, 0x65, 0x63, 0x92, 0xf9, 0x66, 0x6b, 0xff,
 | 
			
		||||
	0x5d, 0x83, 0x15, 0x9b, 0x97, 0xfc, 0xe1, 0x00, 0x99, 0x77, 0x54, 0xb2, 0x13, 0xfc, 0xb7, 0xe1,
 | 
			
		||||
	0x7b, 0xb7, 0x17, 0xf1, 0x64, 0xff, 0x04, 0xfd, 0xf0, 0xdb, 0x17, 0x5c, 0x0d, 0x8a, 0x5c, 0x1a,
 | 
			
		||||
	0xdb, 0x3b, 0xd6, 0xef, 0x0b, 0x35, 0x30, 0x2a, 0xba, 0x94, 0xd1, 0x01, 0xba, 0xf2, 0x9e, 0x09,
 | 
			
		||||
	0x99, 0x04, 0xd4, 0x78, 0x36, 0xc5, 0x02, 0xcd, 0x9e, 0x9e, 0xf0, 0x3d, 0xca, 0xf2, 0x98, 0x26,
 | 
			
		||||
	0x5d, 0x9a, 0xa8, 0xbb, 0x12, 0x23, 0x49, 0x4a, 0x7e, 0x73, 0xc0, 0xb5, 0x85, 0xcd, 0x0f, 0xfb,
 | 
			
		||||
	0x2c, 0xfd, 0x4b, 0x1c, 0x7c, 0x96, 0xfe, 0x65, 0x76, 0xe1, 0x07, 0x48, 0x7f, 0x17, 0x01, 0x96,
 | 
			
		||||
	0xfb, 0x79, 0x1f, 0x97, 0x63, 0x9a, 0x2c, 0x8a, 0xc4, 0x20, 0x57, 0x24, 0x82, 0xe6, 0xd8, 0xd1,
 | 
			
		||||
	0x88, 0x17, 0x5c, 0x6a, 0x81, 0xde, 0x56, 0xf0, 0x1e, 0x07, 0xfc, 0x18, 0xbf, 0x7a, 0xeb, 0x04,
 | 
			
		||||
	0x75, 0xa1, 0x89, 0xd4, 0xa9, 0x31, 0x8e, 0xe3, 0x62, 0xe5, 0x3b, 0xde, 0xf7, 0x1e, 0x62, 0xf8,
 | 
			
		||||
	0xfe, 0x3e, 0xc5, 0xb8, 0x6e, 0x20, 0xc3, 0x41, 0x83, 0xa4, 0xd4, 0x20, 0xab, 0xaf, 0x7d, 0x53,
 | 
			
		||||
	0x29, 0xf6, 0x2c, 0x6b, 0xff, 0x5a, 0x83, 0xb5, 0xe9, 0x3e, 0x22, 0xbf, 0x38, 0x70, 0xc3, 0x38,
 | 
			
		||||
	0xe9, 0xe8, 0xbc, 0x72, 0x9f, 0x04, 0x8b, 0x38, 0xaf, 0xd7, 0x0a, 0x9e, 0x89, 0x31, 0xd9, 0x27,
 | 
			
		||||
	0xc8, 0xe6, 0xab, 0xe9, 0x30, 0xed, 0x16, 0x22, 0x33, 0xec, 0x90, 0x81, 0x12, 0xd5, 0x43, 0x87,
 | 
			
		||||
	0x97, 0x9d, 0xe1, 0x13, 0x51, 0xbd, 0x89, 0x9a, 0xa1, 0x11, 0x91, 0xfc, 0xe9, 0xc0, 0xe6, 0x45,
 | 
			
		||||
	0xad, 0x4d, 0x1e, 0x04, 0x8b, 0xbb, 0xb4, 0xb7, 0x17, 0xfc, 0x8f, 0x61, 0xf1, 0x9f, 0x23, 0xe9,
 | 
			
		||||
	0xa3, 0xf2, 0xa8, 0xe5, 0xab, 0xc5, 0x9d, 0x70, 0x9e, 0x7a, 0xa0, 0xb5, 0xbc, 0xc9, 0x24, 0x87,
 | 
			
		||||
	0x7d, 0xa2, 0x0d, 0x40, 0x77, 0xae, 0xa4, 0x76, 0xe8, 0x3c, 0xdd, 0x29, 0x77, 0xe6, 0xc4, 0xaf,
 | 
			
		||||
	0x92, 0xe4, 0x53, 0xfa, 0xc8, 0x77, 0x67, 0xee, 0xd2, 0x41, 0xed, 0x67, 0xc7, 0xf9, 0x37, 0x00,
 | 
			
		||||
	0x00, 0xff, 0xff, 0x9e, 0xe2, 0xe2, 0x67, 0xb1, 0x09, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2702
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/publishedfile.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2702
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/publishedfile.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										51
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/econ.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/econ.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,51 +0,0 @@
 | 
			
		||||
package protocol
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/binary"
 | 
			
		||||
	"io"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type MsgGCSetItemPosition struct {
 | 
			
		||||
	AssetId, Position uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MsgGCSetItemPosition) Serialize(w io.Writer) error {
 | 
			
		||||
	return binary.Write(w, binary.LittleEndian, m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MsgGCCraft struct {
 | 
			
		||||
	Recipe   int16 // -2 = wildcard
 | 
			
		||||
	numItems int16
 | 
			
		||||
	Items    []uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MsgGCCraft) Serialize(w io.Writer) error {
 | 
			
		||||
	m.numItems = int16(len(m.Items))
 | 
			
		||||
	return binary.Write(w, binary.LittleEndian, m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MsgGCDeleteItem struct {
 | 
			
		||||
	ItemId uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MsgGCDeleteItem) Serialize(w io.Writer) error {
 | 
			
		||||
	return binary.Write(w, binary.LittleEndian, m.ItemId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type MsgGCNameItem struct {
 | 
			
		||||
	Tool, Target uint64
 | 
			
		||||
	Name         string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *MsgGCNameItem) Serialize(w io.Writer) error {
 | 
			
		||||
	err := binary.Write(w, binary.LittleEndian, m.Tool)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = binary.Write(w, binary.LittleEndian, m.Target)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, err = w.Write([]byte(m.Name))
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3676
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3676
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1815
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1815
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1139
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1139
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										545
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										545
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,545 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go.
 | 
			
		||||
// source: gcsystemmsgs.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package protobuf
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
type EGCSystemMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgInvalid                           EGCSystemMsg = 0
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMulti                             EGCSystemMsg = 1
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGenericReply                      EGCSystemMsg = 10
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemBase                        EGCSystemMsg = 50
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAchievementAwarded                EGCSystemMsg = 51
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgConCommand                        EGCSystemMsg = 52
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStartPlaying                      EGCSystemMsg = 53
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStopPlaying                       EGCSystemMsg = 54
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStartGameserver                   EGCSystemMsg = 55
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgStopGameserver                    EGCSystemMsg = 56
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWGRequest                         EGCSystemMsg = 57
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWGResponse                        EGCSystemMsg = 58
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchema            EGCSystemMsg = 59
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchemaResponse    EGCSystemMsg = 60
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStatsDEPRECATED            EGCSystemMsg = 61
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStatsResponse              EGCSystemMsg = 62
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAppInfoUpdated                    EGCSystemMsg = 63
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgValidateSession                   EGCSystemMsg = 64
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgValidateSessionResponse           EGCSystemMsg = 65
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgLookupAccountFromInput            EGCSystemMsg = 66
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendHTTPRequest                   EGCSystemMsg = 67
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendHTTPRequestResponse           EGCSystemMsg = 68
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgPreTestSetup                      EGCSystemMsg = 69
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgRecordSupportAction               EGCSystemMsg = 70
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetails_DEPRECATED      EGCSystemMsg = 71
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgReceiveInterAppMessage            EGCSystemMsg = 73
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgFindAccounts                      EGCSystemMsg = 74
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgPostAlert                         EGCSystemMsg = 75
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetLicenses                       EGCSystemMsg = 76
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetUserStats                      EGCSystemMsg = 77
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetCommands                       EGCSystemMsg = 78
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetCommandsResponse               EGCSystemMsg = 79
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAddFreeLicense                    EGCSystemMsg = 80
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgAddFreeLicenseResponse            EGCSystemMsg = 81
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPLocation                     EGCSystemMsg = 82
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetIPLocationResponse             EGCSystemMsg = 83
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemStatsSchema                 EGCSystemMsg = 84
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetSystemStats                    EGCSystemMsg = 85
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetSystemStatsResponse            EGCSystemMsg = 86
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendEmail                         EGCSystemMsg = 87
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSendEmailResponse                 EGCSystemMsg = 88
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetEmailTemplate                  EGCSystemMsg = 89
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetEmailTemplateResponse          EGCSystemMsg = 90
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGrantGuestPass                    EGCSystemMsg = 91
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGrantGuestPassResponse            EGCSystemMsg = 92
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetails                 EGCSystemMsg = 93
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetAccountDetailsResponse         EGCSystemMsg = 94
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPersonaNames                   EGCSystemMsg = 95
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPersonaNamesResponse           EGCSystemMsg = 96
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMultiplexMsg                      EGCSystemMsg = 97
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIRegisterInterfaces          EGCSystemMsg = 101
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequest                  EGCSystemMsg = 102
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequestHttpResponse      EGCSystemMsg = 104
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgWebAPIJobRequestForwardResponse   EGCSystemMsg = 105
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedGet                      EGCSystemMsg = 200
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedGetResponse              EGCSystemMsg = 201
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedSet                      EGCSystemMsg = 202
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedDelete                   EGCSystemMsg = 203
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedStats                    EGCSystemMsg = 204
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMemCachedStatsResponse            EGCSystemMsg = 205
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSQLStats                          EGCSystemMsg = 210
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSQLStatsResponse                  EGCSystemMsg = 211
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetDirectory                EGCSystemMsg = 220
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetDirectoryResponse        EGCSystemMsg = 221
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRouting            EGCSystemMsg = 222
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRoutingResponse    EGCSystemMsg = 223
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRouting         EGCSystemMsg = 224
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRoutingResponse EGCSystemMsg = 225
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSetOptions                        EGCSystemMsg = 226
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSetOptionsResponse                EGCSystemMsg = 227
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgSystemBase2                       EGCSystemMsg = 500
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatus            EGCSystemMsg = 501
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatusResponse    EGCSystemMsg = 502
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgUpdateSession                     EGCSystemMsg = 503
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGCAccountVacStatusChange          EGCSystemMsg = 504
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgCheckFriendship                   EGCSystemMsg = 505
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgCheckFriendshipResponse           EGCSystemMsg = 506
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPartnerAccountLink             EGCSystemMsg = 507
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgGetPartnerAccountLinkResponse     EGCSystemMsg = 508
 | 
			
		||||
	EGCSystemMsg_k_EGCMsgVSReportedSuspiciousActivity      EGCSystemMsg = 509
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCSystemMsg_name = map[int32]string{
 | 
			
		||||
	0:   "k_EGCMsgInvalid",
 | 
			
		||||
	1:   "k_EGCMsgMulti",
 | 
			
		||||
	10:  "k_EGCMsgGenericReply",
 | 
			
		||||
	50:  "k_EGCMsgSystemBase",
 | 
			
		||||
	51:  "k_EGCMsgAchievementAwarded",
 | 
			
		||||
	52:  "k_EGCMsgConCommand",
 | 
			
		||||
	53:  "k_EGCMsgStartPlaying",
 | 
			
		||||
	54:  "k_EGCMsgStopPlaying",
 | 
			
		||||
	55:  "k_EGCMsgStartGameserver",
 | 
			
		||||
	56:  "k_EGCMsgStopGameserver",
 | 
			
		||||
	57:  "k_EGCMsgWGRequest",
 | 
			
		||||
	58:  "k_EGCMsgWGResponse",
 | 
			
		||||
	59:  "k_EGCMsgGetUserGameStatsSchema",
 | 
			
		||||
	60:  "k_EGCMsgGetUserGameStatsSchemaResponse",
 | 
			
		||||
	61:  "k_EGCMsgGetUserStatsDEPRECATED",
 | 
			
		||||
	62:  "k_EGCMsgGetUserStatsResponse",
 | 
			
		||||
	63:  "k_EGCMsgAppInfoUpdated",
 | 
			
		||||
	64:  "k_EGCMsgValidateSession",
 | 
			
		||||
	65:  "k_EGCMsgValidateSessionResponse",
 | 
			
		||||
	66:  "k_EGCMsgLookupAccountFromInput",
 | 
			
		||||
	67:  "k_EGCMsgSendHTTPRequest",
 | 
			
		||||
	68:  "k_EGCMsgSendHTTPRequestResponse",
 | 
			
		||||
	69:  "k_EGCMsgPreTestSetup",
 | 
			
		||||
	70:  "k_EGCMsgRecordSupportAction",
 | 
			
		||||
	71:  "k_EGCMsgGetAccountDetails_DEPRECATED",
 | 
			
		||||
	73:  "k_EGCMsgReceiveInterAppMessage",
 | 
			
		||||
	74:  "k_EGCMsgFindAccounts",
 | 
			
		||||
	75:  "k_EGCMsgPostAlert",
 | 
			
		||||
	76:  "k_EGCMsgGetLicenses",
 | 
			
		||||
	77:  "k_EGCMsgGetUserStats",
 | 
			
		||||
	78:  "k_EGCMsgGetCommands",
 | 
			
		||||
	79:  "k_EGCMsgGetCommandsResponse",
 | 
			
		||||
	80:  "k_EGCMsgAddFreeLicense",
 | 
			
		||||
	81:  "k_EGCMsgAddFreeLicenseResponse",
 | 
			
		||||
	82:  "k_EGCMsgGetIPLocation",
 | 
			
		||||
	83:  "k_EGCMsgGetIPLocationResponse",
 | 
			
		||||
	84:  "k_EGCMsgSystemStatsSchema",
 | 
			
		||||
	85:  "k_EGCMsgGetSystemStats",
 | 
			
		||||
	86:  "k_EGCMsgGetSystemStatsResponse",
 | 
			
		||||
	87:  "k_EGCMsgSendEmail",
 | 
			
		||||
	88:  "k_EGCMsgSendEmailResponse",
 | 
			
		||||
	89:  "k_EGCMsgGetEmailTemplate",
 | 
			
		||||
	90:  "k_EGCMsgGetEmailTemplateResponse",
 | 
			
		||||
	91:  "k_EGCMsgGrantGuestPass",
 | 
			
		||||
	92:  "k_EGCMsgGrantGuestPassResponse",
 | 
			
		||||
	93:  "k_EGCMsgGetAccountDetails",
 | 
			
		||||
	94:  "k_EGCMsgGetAccountDetailsResponse",
 | 
			
		||||
	95:  "k_EGCMsgGetPersonaNames",
 | 
			
		||||
	96:  "k_EGCMsgGetPersonaNamesResponse",
 | 
			
		||||
	97:  "k_EGCMsgMultiplexMsg",
 | 
			
		||||
	101: "k_EGCMsgWebAPIRegisterInterfaces",
 | 
			
		||||
	102: "k_EGCMsgWebAPIJobRequest",
 | 
			
		||||
	104: "k_EGCMsgWebAPIJobRequestHttpResponse",
 | 
			
		||||
	105: "k_EGCMsgWebAPIJobRequestForwardResponse",
 | 
			
		||||
	200: "k_EGCMsgMemCachedGet",
 | 
			
		||||
	201: "k_EGCMsgMemCachedGetResponse",
 | 
			
		||||
	202: "k_EGCMsgMemCachedSet",
 | 
			
		||||
	203: "k_EGCMsgMemCachedDelete",
 | 
			
		||||
	204: "k_EGCMsgMemCachedStats",
 | 
			
		||||
	205: "k_EGCMsgMemCachedStatsResponse",
 | 
			
		||||
	210: "k_EGCMsgSQLStats",
 | 
			
		||||
	211: "k_EGCMsgSQLStatsResponse",
 | 
			
		||||
	220: "k_EGCMsgMasterSetDirectory",
 | 
			
		||||
	221: "k_EGCMsgMasterSetDirectoryResponse",
 | 
			
		||||
	222: "k_EGCMsgMasterSetWebAPIRouting",
 | 
			
		||||
	223: "k_EGCMsgMasterSetWebAPIRoutingResponse",
 | 
			
		||||
	224: "k_EGCMsgMasterSetClientMsgRouting",
 | 
			
		||||
	225: "k_EGCMsgMasterSetClientMsgRoutingResponse",
 | 
			
		||||
	226: "k_EGCMsgSetOptions",
 | 
			
		||||
	227: "k_EGCMsgSetOptionsResponse",
 | 
			
		||||
	500: "k_EGCMsgSystemBase2",
 | 
			
		||||
	501: "k_EGCMsgGetPurchaseTrustStatus",
 | 
			
		||||
	502: "k_EGCMsgGetPurchaseTrustStatusResponse",
 | 
			
		||||
	503: "k_EGCMsgUpdateSession",
 | 
			
		||||
	504: "k_EGCMsgGCAccountVacStatusChange",
 | 
			
		||||
	505: "k_EGCMsgCheckFriendship",
 | 
			
		||||
	506: "k_EGCMsgCheckFriendshipResponse",
 | 
			
		||||
	507: "k_EGCMsgGetPartnerAccountLink",
 | 
			
		||||
	508: "k_EGCMsgGetPartnerAccountLinkResponse",
 | 
			
		||||
	509: "k_EGCMsgVSReportedSuspiciousActivity",
 | 
			
		||||
}
 | 
			
		||||
var EGCSystemMsg_value = map[string]int32{
 | 
			
		||||
	"k_EGCMsgInvalid":                           0,
 | 
			
		||||
	"k_EGCMsgMulti":                             1,
 | 
			
		||||
	"k_EGCMsgGenericReply":                      10,
 | 
			
		||||
	"k_EGCMsgSystemBase":                        50,
 | 
			
		||||
	"k_EGCMsgAchievementAwarded":                51,
 | 
			
		||||
	"k_EGCMsgConCommand":                        52,
 | 
			
		||||
	"k_EGCMsgStartPlaying":                      53,
 | 
			
		||||
	"k_EGCMsgStopPlaying":                       54,
 | 
			
		||||
	"k_EGCMsgStartGameserver":                   55,
 | 
			
		||||
	"k_EGCMsgStopGameserver":                    56,
 | 
			
		||||
	"k_EGCMsgWGRequest":                         57,
 | 
			
		||||
	"k_EGCMsgWGResponse":                        58,
 | 
			
		||||
	"k_EGCMsgGetUserGameStatsSchema":            59,
 | 
			
		||||
	"k_EGCMsgGetUserGameStatsSchemaResponse":    60,
 | 
			
		||||
	"k_EGCMsgGetUserStatsDEPRECATED":            61,
 | 
			
		||||
	"k_EGCMsgGetUserStatsResponse":              62,
 | 
			
		||||
	"k_EGCMsgAppInfoUpdated":                    63,
 | 
			
		||||
	"k_EGCMsgValidateSession":                   64,
 | 
			
		||||
	"k_EGCMsgValidateSessionResponse":           65,
 | 
			
		||||
	"k_EGCMsgLookupAccountFromInput":            66,
 | 
			
		||||
	"k_EGCMsgSendHTTPRequest":                   67,
 | 
			
		||||
	"k_EGCMsgSendHTTPRequestResponse":           68,
 | 
			
		||||
	"k_EGCMsgPreTestSetup":                      69,
 | 
			
		||||
	"k_EGCMsgRecordSupportAction":               70,
 | 
			
		||||
	"k_EGCMsgGetAccountDetails_DEPRECATED":      71,
 | 
			
		||||
	"k_EGCMsgReceiveInterAppMessage":            73,
 | 
			
		||||
	"k_EGCMsgFindAccounts":                      74,
 | 
			
		||||
	"k_EGCMsgPostAlert":                         75,
 | 
			
		||||
	"k_EGCMsgGetLicenses":                       76,
 | 
			
		||||
	"k_EGCMsgGetUserStats":                      77,
 | 
			
		||||
	"k_EGCMsgGetCommands":                       78,
 | 
			
		||||
	"k_EGCMsgGetCommandsResponse":               79,
 | 
			
		||||
	"k_EGCMsgAddFreeLicense":                    80,
 | 
			
		||||
	"k_EGCMsgAddFreeLicenseResponse":            81,
 | 
			
		||||
	"k_EGCMsgGetIPLocation":                     82,
 | 
			
		||||
	"k_EGCMsgGetIPLocationResponse":             83,
 | 
			
		||||
	"k_EGCMsgSystemStatsSchema":                 84,
 | 
			
		||||
	"k_EGCMsgGetSystemStats":                    85,
 | 
			
		||||
	"k_EGCMsgGetSystemStatsResponse":            86,
 | 
			
		||||
	"k_EGCMsgSendEmail":                         87,
 | 
			
		||||
	"k_EGCMsgSendEmailResponse":                 88,
 | 
			
		||||
	"k_EGCMsgGetEmailTemplate":                  89,
 | 
			
		||||
	"k_EGCMsgGetEmailTemplateResponse":          90,
 | 
			
		||||
	"k_EGCMsgGrantGuestPass":                    91,
 | 
			
		||||
	"k_EGCMsgGrantGuestPassResponse":            92,
 | 
			
		||||
	"k_EGCMsgGetAccountDetails":                 93,
 | 
			
		||||
	"k_EGCMsgGetAccountDetailsResponse":         94,
 | 
			
		||||
	"k_EGCMsgGetPersonaNames":                   95,
 | 
			
		||||
	"k_EGCMsgGetPersonaNamesResponse":           96,
 | 
			
		||||
	"k_EGCMsgMultiplexMsg":                      97,
 | 
			
		||||
	"k_EGCMsgWebAPIRegisterInterfaces":          101,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequest":                  102,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequestHttpResponse":      104,
 | 
			
		||||
	"k_EGCMsgWebAPIJobRequestForwardResponse":   105,
 | 
			
		||||
	"k_EGCMsgMemCachedGet":                      200,
 | 
			
		||||
	"k_EGCMsgMemCachedGetResponse":              201,
 | 
			
		||||
	"k_EGCMsgMemCachedSet":                      202,
 | 
			
		||||
	"k_EGCMsgMemCachedDelete":                   203,
 | 
			
		||||
	"k_EGCMsgMemCachedStats":                    204,
 | 
			
		||||
	"k_EGCMsgMemCachedStatsResponse":            205,
 | 
			
		||||
	"k_EGCMsgSQLStats":                          210,
 | 
			
		||||
	"k_EGCMsgSQLStatsResponse":                  211,
 | 
			
		||||
	"k_EGCMsgMasterSetDirectory":                220,
 | 
			
		||||
	"k_EGCMsgMasterSetDirectoryResponse":        221,
 | 
			
		||||
	"k_EGCMsgMasterSetWebAPIRouting":            222,
 | 
			
		||||
	"k_EGCMsgMasterSetWebAPIRoutingResponse":    223,
 | 
			
		||||
	"k_EGCMsgMasterSetClientMsgRouting":         224,
 | 
			
		||||
	"k_EGCMsgMasterSetClientMsgRoutingResponse": 225,
 | 
			
		||||
	"k_EGCMsgSetOptions":                        226,
 | 
			
		||||
	"k_EGCMsgSetOptionsResponse":                227,
 | 
			
		||||
	"k_EGCMsgSystemBase2":                       500,
 | 
			
		||||
	"k_EGCMsgGetPurchaseTrustStatus":            501,
 | 
			
		||||
	"k_EGCMsgGetPurchaseTrustStatusResponse":    502,
 | 
			
		||||
	"k_EGCMsgUpdateSession":                     503,
 | 
			
		||||
	"k_EGCMsgGCAccountVacStatusChange":          504,
 | 
			
		||||
	"k_EGCMsgCheckFriendship":                   505,
 | 
			
		||||
	"k_EGCMsgCheckFriendshipResponse":           506,
 | 
			
		||||
	"k_EGCMsgGetPartnerAccountLink":             507,
 | 
			
		||||
	"k_EGCMsgGetPartnerAccountLinkResponse":     508,
 | 
			
		||||
	"k_EGCMsgVSReportedSuspiciousActivity":      509,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCSystemMsg) Enum() *EGCSystemMsg {
 | 
			
		||||
	p := new(EGCSystemMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCSystemMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCSystemMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCSystemMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCSystemMsg_value, data, "EGCSystemMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCSystemMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCSystemMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{0} }
 | 
			
		||||
 | 
			
		||||
type ESOMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	ESOMsg_k_ESOMsg_Create                   ESOMsg = 21
 | 
			
		||||
	ESOMsg_k_ESOMsg_Update                   ESOMsg = 22
 | 
			
		||||
	ESOMsg_k_ESOMsg_Destroy                  ESOMsg = 23
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscribed          ESOMsg = 24
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheUnsubscribed        ESOMsg = 25
 | 
			
		||||
	ESOMsg_k_ESOMsg_UpdateMultiple           ESOMsg = 26
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscriptionCheck   ESOMsg = 27
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscriptionRefresh ESOMsg = 28
 | 
			
		||||
	ESOMsg_k_ESOMsg_CacheSubscribedUpToDate  ESOMsg = 29
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var ESOMsg_name = map[int32]string{
 | 
			
		||||
	21: "k_ESOMsg_Create",
 | 
			
		||||
	22: "k_ESOMsg_Update",
 | 
			
		||||
	23: "k_ESOMsg_Destroy",
 | 
			
		||||
	24: "k_ESOMsg_CacheSubscribed",
 | 
			
		||||
	25: "k_ESOMsg_CacheUnsubscribed",
 | 
			
		||||
	26: "k_ESOMsg_UpdateMultiple",
 | 
			
		||||
	27: "k_ESOMsg_CacheSubscriptionCheck",
 | 
			
		||||
	28: "k_ESOMsg_CacheSubscriptionRefresh",
 | 
			
		||||
	29: "k_ESOMsg_CacheSubscribedUpToDate",
 | 
			
		||||
}
 | 
			
		||||
var ESOMsg_value = map[string]int32{
 | 
			
		||||
	"k_ESOMsg_Create":                   21,
 | 
			
		||||
	"k_ESOMsg_Update":                   22,
 | 
			
		||||
	"k_ESOMsg_Destroy":                  23,
 | 
			
		||||
	"k_ESOMsg_CacheSubscribed":          24,
 | 
			
		||||
	"k_ESOMsg_CacheUnsubscribed":        25,
 | 
			
		||||
	"k_ESOMsg_UpdateMultiple":           26,
 | 
			
		||||
	"k_ESOMsg_CacheSubscriptionCheck":   27,
 | 
			
		||||
	"k_ESOMsg_CacheSubscriptionRefresh": 28,
 | 
			
		||||
	"k_ESOMsg_CacheSubscribedUpToDate":  29,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x ESOMsg) Enum() *ESOMsg {
 | 
			
		||||
	p := new(ESOMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x ESOMsg) String() string {
 | 
			
		||||
	return proto.EnumName(ESOMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *ESOMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(ESOMsg_value, data, "ESOMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = ESOMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (ESOMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{1} }
 | 
			
		||||
 | 
			
		||||
type EGCBaseClientMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCPingRequest   EGCBaseClientMsg = 3001
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCPingResponse  EGCBaseClientMsg = 3002
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientWelcome EGCBaseClientMsg = 4004
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerWelcome EGCBaseClientMsg = 4005
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientHello   EGCBaseClientMsg = 4006
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerHello   EGCBaseClientMsg = 4007
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCClientGoodbye EGCBaseClientMsg = 4008
 | 
			
		||||
	EGCBaseClientMsg_k_EMsgGCServerGoodbye EGCBaseClientMsg = 4009
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCBaseClientMsg_name = map[int32]string{
 | 
			
		||||
	3001: "k_EMsgGCPingRequest",
 | 
			
		||||
	3002: "k_EMsgGCPingResponse",
 | 
			
		||||
	4004: "k_EMsgGCClientWelcome",
 | 
			
		||||
	4005: "k_EMsgGCServerWelcome",
 | 
			
		||||
	4006: "k_EMsgGCClientHello",
 | 
			
		||||
	4007: "k_EMsgGCServerHello",
 | 
			
		||||
	4008: "k_EMsgGCClientGoodbye",
 | 
			
		||||
	4009: "k_EMsgGCServerGoodbye",
 | 
			
		||||
}
 | 
			
		||||
var EGCBaseClientMsg_value = map[string]int32{
 | 
			
		||||
	"k_EMsgGCPingRequest":   3001,
 | 
			
		||||
	"k_EMsgGCPingResponse":  3002,
 | 
			
		||||
	"k_EMsgGCClientWelcome": 4004,
 | 
			
		||||
	"k_EMsgGCServerWelcome": 4005,
 | 
			
		||||
	"k_EMsgGCClientHello":   4006,
 | 
			
		||||
	"k_EMsgGCServerHello":   4007,
 | 
			
		||||
	"k_EMsgGCClientGoodbye": 4008,
 | 
			
		||||
	"k_EMsgGCServerGoodbye": 4009,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCBaseClientMsg) Enum() *EGCBaseClientMsg {
 | 
			
		||||
	p := new(EGCBaseClientMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCBaseClientMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCBaseClientMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCBaseClientMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCBaseClientMsg_value, data, "EGCBaseClientMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCBaseClientMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCBaseClientMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{2} }
 | 
			
		||||
 | 
			
		||||
type EGCToGCMsg int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterAck                   EGCToGCMsg = 150
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterAckResponse           EGCToGCMsg = 151
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgRouted                      EGCToGCMsg = 152
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgRoutedReply                 EGCToGCMsg = 153
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCUpdateSubGCSessionInfo          EGCToGCMsg = 154
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfo         EGCToGCMsg = 155
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfoResponse EGCToGCMsg = 156
 | 
			
		||||
	EGCToGCMsg_k_EGCToGCMsgMasterStartupComplete       EGCToGCMsg = 157
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCSOCacheSubscribe            EGCToGCMsg = 158
 | 
			
		||||
	EGCToGCMsg_k_EMsgGCToGCSOCacheUnsubscribe          EGCToGCMsg = 159
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var EGCToGCMsg_name = map[int32]string{
 | 
			
		||||
	150: "k_EGCToGCMsgMasterAck",
 | 
			
		||||
	151: "k_EGCToGCMsgMasterAckResponse",
 | 
			
		||||
	152: "k_EGCToGCMsgRouted",
 | 
			
		||||
	153: "k_EGCToGCMsgRoutedReply",
 | 
			
		||||
	154: "k_EMsgGCUpdateSubGCSessionInfo",
 | 
			
		||||
	155: "k_EMsgGCRequestSubGCSessionInfo",
 | 
			
		||||
	156: "k_EMsgGCRequestSubGCSessionInfoResponse",
 | 
			
		||||
	157: "k_EGCToGCMsgMasterStartupComplete",
 | 
			
		||||
	158: "k_EMsgGCToGCSOCacheSubscribe",
 | 
			
		||||
	159: "k_EMsgGCToGCSOCacheUnsubscribe",
 | 
			
		||||
}
 | 
			
		||||
var EGCToGCMsg_value = map[string]int32{
 | 
			
		||||
	"k_EGCToGCMsgMasterAck":                   150,
 | 
			
		||||
	"k_EGCToGCMsgMasterAckResponse":           151,
 | 
			
		||||
	"k_EGCToGCMsgRouted":                      152,
 | 
			
		||||
	"k_EGCToGCMsgRoutedReply":                 153,
 | 
			
		||||
	"k_EMsgGCUpdateSubGCSessionInfo":          154,
 | 
			
		||||
	"k_EMsgGCRequestSubGCSessionInfo":         155,
 | 
			
		||||
	"k_EMsgGCRequestSubGCSessionInfoResponse": 156,
 | 
			
		||||
	"k_EGCToGCMsgMasterStartupComplete":       157,
 | 
			
		||||
	"k_EMsgGCToGCSOCacheSubscribe":            158,
 | 
			
		||||
	"k_EMsgGCToGCSOCacheUnsubscribe":          159,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x EGCToGCMsg) Enum() *EGCToGCMsg {
 | 
			
		||||
	p := new(EGCToGCMsg)
 | 
			
		||||
	*p = x
 | 
			
		||||
	return p
 | 
			
		||||
}
 | 
			
		||||
func (x EGCToGCMsg) String() string {
 | 
			
		||||
	return proto.EnumName(EGCToGCMsg_name, int32(x))
 | 
			
		||||
}
 | 
			
		||||
func (x *EGCToGCMsg) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	value, err := proto.UnmarshalJSONEnum(EGCToGCMsg_value, data, "EGCToGCMsg")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	*x = EGCToGCMsg(value)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (EGCToGCMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{3} }
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterEnum("EGCSystemMsg", EGCSystemMsg_name, EGCSystemMsg_value)
 | 
			
		||||
	proto.RegisterEnum("ESOMsg", ESOMsg_name, ESOMsg_value)
 | 
			
		||||
	proto.RegisterEnum("EGCBaseClientMsg", EGCBaseClientMsg_name, EGCBaseClientMsg_value)
 | 
			
		||||
	proto.RegisterEnum("EGCToGCMsg", EGCToGCMsg_name, EGCToGCMsg_value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var system_fileDescriptor0 = []byte{
 | 
			
		||||
	// 1379 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x57, 0x49, 0x73, 0x1b, 0x45,
 | 
			
		||||
	0x14, 0xce, 0x44, 0x05, 0x87, 0x2e, 0x28, 0x5e, 0x3a, 0x89, 0xed, 0x24, 0x4e, 0x94, 0x84, 0x2c,
 | 
			
		||||
	0xc4, 0x50, 0x39, 0x84, 0x7d, 0x47, 0x91, 0x64, 0x59, 0xc1, 0x8e, 0x15, 0x49, 0xb6, 0xd9, 0xcd,
 | 
			
		||||
	0x78, 0xd4, 0xb6, 0xa6, 0x2c, 0x4d, 0x0f, 0xdd, 0x3d, 0x06, 0xdd, 0xf8, 0x13, 0xac, 0x61, 0xb9,
 | 
			
		||||
	0xb0, 0xfe, 0x04, 0xf8, 0x05, 0xac, 0x17, 0xb8, 0xb2, 0x73, 0x84, 0x23, 0xfb, 0x52, 0xc5, 0x9b,
 | 
			
		||||
	0xad, 0xa7, 0x47, 0x8b, 0xb9, 0x8d, 0xfa, 0x7b, 0x7b, 0x7f, 0xef, 0xf5, 0x13, 0xa1, 0x5b, 0x8e,
 | 
			
		||||
	0x1c, 0x48, 0xc5, 0xfa, 0x7d, 0xb9, 0x25, 0xcf, 0xfb, 0x82, 0x2b, 0x3e, 0x77, 0xf5, 0x00, 0xb9,
 | 
			
		||||
	0xae, 0x5a, 0x2b, 0xb7, 0xa2, 0xf3, 0x25, 0xb9, 0x45, 0xf7, 0x93, 0x1b, 0xb6, 0xd7, 0xf1, 0x04,
 | 
			
		||||
	0xbf, 0xeb, 0xde, 0x8e, 0xdd, 0x73, 0x3b, 0xb0, 0x87, 0xee, 0x23, 0xd7, 0xa7, 0x87, 0x4b, 0x41,
 | 
			
		||||
	0x4f, 0xb9, 0x60, 0xd1, 0x19, 0x72, 0x20, 0x3d, 0xaa, 0x31, 0x8f, 0x09, 0xd7, 0x69, 0x32, 0xbf,
 | 
			
		||||
	0x37, 0x00, 0x42, 0xa7, 0x08, 0x4d, 0x91, 0xd8, 0xec, 0x45, 0x5b, 0x32, 0xb8, 0x40, 0x8f, 0x91,
 | 
			
		||||
	0xc3, 0xe9, 0x79, 0xc9, 0xe9, 0xba, 0x6c, 0x87, 0xf5, 0x99, 0xa7, 0x4a, 0xcf, 0xda, 0xa2, 0xc3,
 | 
			
		||||
	0x3a, 0x70, 0xab, 0xa9, 0x57, 0xe6, 0x5e, 0x99, 0xf7, 0xfb, 0xb6, 0xd7, 0x81, 0xdb, 0x4c, 0x4f,
 | 
			
		||||
	0x2d, 0x65, 0x0b, 0xd5, 0xe8, 0xd9, 0x03, 0xd7, 0xdb, 0x82, 0xdb, 0xe9, 0x34, 0xd9, 0x9f, 0x21,
 | 
			
		||||
	0xdc, 0x4f, 0x81, 0x3b, 0xe8, 0x11, 0x32, 0x9d, 0x53, 0xa9, 0xd9, 0x7d, 0x26, 0x99, 0xd8, 0x61,
 | 
			
		||||
	0x02, 0xee, 0xa4, 0x87, 0xc9, 0x94, 0xa9, 0x65, 0x60, 0x77, 0xd1, 0x83, 0x64, 0x5f, 0x8a, 0xad,
 | 
			
		||||
	0xd5, 0x9a, 0xec, 0x99, 0x80, 0x49, 0x05, 0x77, 0x9b, 0xa1, 0x85, 0xc7, 0xd2, 0xe7, 0x1e, 0xa6,
 | 
			
		||||
	0x74, 0x0f, 0x3d, 0x49, 0x8e, 0x65, 0x45, 0x50, 0x2b, 0x68, 0x26, 0xb4, 0x86, 0x2e, 0x95, 0x6c,
 | 
			
		||||
	0x39, 0x5d, 0xd6, 0xb7, 0xe1, 0x5e, 0x3a, 0x47, 0xce, 0xec, 0x2e, 0xa3, 0xed, 0xdd, 0x37, 0xc6,
 | 
			
		||||
	0x5e, 0x24, 0x57, 0xa9, 0x36, 0x9a, 0xd5, 0x72, 0xa9, 0x5d, 0xad, 0xc0, 0xfd, 0xf4, 0x38, 0x99,
 | 
			
		||||
	0x1d, 0x27, 0xa3, 0xad, 0x3c, 0x60, 0x26, 0x58, 0xf2, 0xfd, 0xba, 0xb7, 0xc9, 0x57, 0xfc, 0x8e,
 | 
			
		||||
	0xad, 0xb0, 0xc8, 0x0f, 0x9a, 0x95, 0x59, 0x0d, 0x2f, 0x17, 0x8f, 0x5b, 0x4c, 0x4a, 0x97, 0x7b,
 | 
			
		||||
	0xf0, 0x10, 0xbd, 0x91, 0x14, 0x27, 0x80, 0xda, 0x7a, 0xc9, 0x8c, 0x71, 0x91, 0xf3, 0xed, 0xc0,
 | 
			
		||||
	0x2f, 0x39, 0x0e, 0x0f, 0x3c, 0x35, 0x2f, 0x78, 0xbf, 0xee, 0xf9, 0x81, 0x82, 0x8b, 0xb9, 0xfa,
 | 
			
		||||
	0x33, 0xaf, 0xb3, 0xd0, 0x6e, 0x37, 0xd2, 0x62, 0x96, 0x4d, 0x2f, 0x43, 0xa0, 0xf6, 0x52, 0x31,
 | 
			
		||||
	0x2f, 0xbd, 0x21, 0x58, 0x1b, 0xc1, 0x16, 0x53, 0x81, 0x0f, 0x55, 0x5a, 0x24, 0x47, 0x52, 0xa4,
 | 
			
		||||
	0xc9, 0x1c, 0x2e, 0x3a, 0xad, 0xc0, 0xf7, 0xb9, 0x50, 0x25, 0x47, 0x85, 0x59, 0xcc, 0xd3, 0x9b,
 | 
			
		||||
	0xc8, 0x29, 0xa3, 0x40, 0x49, 0x74, 0x15, 0xa6, 0x6c, 0xb7, 0x27, 0xd7, 0x8d, 0x52, 0xd6, 0xcc,
 | 
			
		||||
	0x54, 0xd0, 0x14, 0x73, 0x77, 0x58, 0xdd, 0x53, 0x4c, 0x60, 0xd1, 0x96, 0x30, 0x6d, 0x7b, 0x8b,
 | 
			
		||||
	0x41, 0xdd, 0x0c, 0x64, 0xde, 0xf5, 0x3a, 0x89, 0x39, 0x09, 0x97, 0x4c, 0xae, 0x34, 0xb8, 0x54,
 | 
			
		||||
	0xa5, 0x1e, 0x13, 0x0a, 0x1e, 0x36, 0x49, 0x89, 0xee, 0x17, 0x5d, 0x87, 0x61, 0x46, 0x12, 0x16,
 | 
			
		||||
	0xf3, 0x1d, 0x93, 0x5d, 0x1c, 0x2c, 0x0d, 0xa9, 0x24, 0xcc, 0x97, 0x70, 0xd9, 0xcc, 0xd5, 0x00,
 | 
			
		||||
	0x74, 0x99, 0x96, 0x73, 0x57, 0xdd, 0xe9, 0xcc, 0x0b, 0xc6, 0x12, 0x87, 0xd0, 0x30, 0xb3, 0xcb,
 | 
			
		||||
	0x63, 0x5a, 0xff, 0x0a, 0x3d, 0x44, 0x0e, 0x1a, 0x0e, 0xea, 0x8d, 0x45, 0xee, 0xd8, 0x51, 0x19,
 | 
			
		||||
	0x9b, 0xf4, 0x04, 0x39, 0x3a, 0x16, 0xd2, 0xda, 0x2d, 0x7a, 0x94, 0x1c, 0xca, 0x77, 0xba, 0xc9,
 | 
			
		||||
	0xfc, 0xb6, 0x19, 0x1c, 0x5a, 0x30, 0x24, 0x60, 0x65, 0x88, 0xe9, 0x06, 0xa6, 0xcd, 0xaf, 0x9a,
 | 
			
		||||
	0x05, 0x0e, 0x89, 0x52, 0xed, 0xe3, 0x0d, 0xc2, 0x5a, 0xce, 0x6b, 0x7a, 0xac, 0xb5, 0x1e, 0xa1,
 | 
			
		||||
	0xb3, 0x64, 0xc6, 0xb0, 0x1c, 0xa1, 0x6d, 0xd6, 0xf7, 0x7b, 0x48, 0x66, 0x78, 0x94, 0x9e, 0x22,
 | 
			
		||||
	0xc7, 0x27, 0xa1, 0xda, 0xc6, 0x63, 0xb9, 0xc8, 0x85, 0xed, 0xa9, 0x5a, 0xc8, 0xce, 0x86, 0x2d,
 | 
			
		||||
	0x25, 0x3c, 0x9e, 0x8b, 0x3c, 0x87, 0x69, 0xfd, 0x27, 0xcc, 0x10, 0x47, 0x28, 0x08, 0x4f, 0xd2,
 | 
			
		||||
	0xd3, 0xe4, 0xc4, 0x44, 0x58, 0x5b, 0x79, 0xca, 0xec, 0x22, 0x14, 0x6b, 0x30, 0x21, 0xb9, 0x67,
 | 
			
		||||
	0x5f, 0x0e, 0xc7, 0x15, 0xac, 0x9b, 0x5d, 0x34, 0x04, 0x6a, 0x0b, 0x4f, 0x9b, 0x94, 0x8b, 0xe6,
 | 
			
		||||
	0xb6, 0xdf, 0x63, 0xcf, 0xe1, 0x37, 0xd8, 0x66, 0x1d, 0xd6, 0xd8, 0x46, 0xa9, 0x51, 0x6f, 0xb2,
 | 
			
		||||
	0x2d, 0x17, 0x2f, 0x41, 0x44, 0x1d, 0xb0, 0x69, 0x3b, 0xe8, 0x84, 0x99, 0xb5, 0x8c, 0xa5, 0x2e,
 | 
			
		||||
	0xf1, 0x8d, 0xb4, 0x91, 0x37, 0xcd, 0x46, 0x1b, 0x46, 0x17, 0x94, 0xf2, 0x75, 0x1c, 0x5d, 0x7a,
 | 
			
		||||
	0x33, 0x39, 0x3b, 0x49, 0x72, 0x9e, 0x8b, 0xf0, 0x05, 0xd0, 0xc2, 0x2e, 0x72, 0x32, 0x0b, 0x9a,
 | 
			
		||||
	0xf5, 0xcb, 0x36, 0xd2, 0xa9, 0x83, 0x29, 0xc2, 0x47, 0x16, 0x72, 0x72, 0x76, 0x1c, 0xa4, 0x95,
 | 
			
		||||
	0x3f, 0xb6, 0xc6, 0x6a, 0xe3, 0xe8, 0x80, 0x4f, 0x2c, 0xcc, 0x66, 0x7a, 0x04, 0xaa, 0xb0, 0x1e,
 | 
			
		||||
	0x43, 0x62, 0x7c, 0x6a, 0x61, 0xb5, 0xa7, 0x46, 0x15, 0x23, 0xb6, 0x7e, 0x66, 0x61, 0xb5, 0x8f,
 | 
			
		||||
	0x8d, 0x07, 0xb5, 0xeb, 0xcf, 0x2d, 0xe4, 0x2b, 0x68, 0x62, 0x5e, 0x59, 0x8c, 0x75, 0xbf, 0xb0,
 | 
			
		||||
	0x90, 0x0c, 0x33, 0xc3, 0xc7, 0x5a, 0xeb, 0x4b, 0x0b, 0x7b, 0x5c, 0x3f, 0x8b, 0x4b, 0x76, 0x78,
 | 
			
		||||
	0x03, 0x18, 0x6d, 0xc5, 0x15, 0xcc, 0x51, 0x5c, 0x0c, 0xe0, 0x2b, 0x8b, 0x9e, 0x25, 0x27, 0x27,
 | 
			
		||||
	0x0b, 0x68, 0x4b, 0x5f, 0xe7, 0x83, 0x4c, 0x05, 0x93, 0xcb, 0xe5, 0x81, 0x0a, 0x5f, 0xc6, 0x6f,
 | 
			
		||||
	0x2c, 0xbc, 0x8a, 0x33, 0xbb, 0x0b, 0x69, 0x8b, 0xdf, 0x5a, 0xf4, 0x4c, 0x46, 0x54, 0x2d, 0x5c,
 | 
			
		||||
	0xee, 0xb9, 0xf8, 0x6c, 0x87, 0x23, 0x33, 0x31, 0xfa, 0x9d, 0x45, 0xcf, 0x93, 0x73, 0xff, 0x2b,
 | 
			
		||||
	0xa7, 0xed, 0x7e, 0x6f, 0xe1, 0xc0, 0xcb, 0x56, 0x04, 0xa6, 0x96, 0xfd, 0x70, 0xae, 0x48, 0xf8,
 | 
			
		||||
	0x21, 0x57, 0x8c, 0x0c, 0xd0, 0x9a, 0x3f, 0x86, 0x6b, 0xc7, 0xfe, 0xd1, 0xe5, 0xe2, 0x02, 0xfc,
 | 
			
		||||
	0x52, 0x30, 0xb3, 0x0f, 0x1b, 0x22, 0x10, 0x4e, 0x17, 0xa1, 0xb6, 0x08, 0xf0, 0xe9, 0xc0, 0x9a,
 | 
			
		||||
	0x07, 0x12, 0x7e, 0x2d, 0x98, 0xd9, 0x8f, 0x17, 0xd2, 0xbe, 0x7e, 0x2b, 0xe0, 0x14, 0xd0, 0xc3,
 | 
			
		||||
	0x31, 0x7e, 0x40, 0xd3, 0x97, 0xf2, 0xf7, 0x02, 0xb6, 0x70, 0x36, 0x47, 0xca, 0x49, 0x07, 0xaf,
 | 
			
		||||
	0xda, 0x4e, 0x6c, 0xa4, 0xdc, 0xb5, 0x3d, 0x7c, 0x3c, 0xfe, 0x28, 0x98, 0x94, 0x2b, 0x77, 0x99,
 | 
			
		||||
	0xb3, 0x3d, 0x2f, 0xb0, 0x28, 0x1d, 0xd9, 0x75, 0x7d, 0xf8, 0xb3, 0x80, 0x4d, 0x58, 0x9c, 0x80,
 | 
			
		||||
	0xea, 0x30, 0xfe, 0x2a, 0xe0, 0xc0, 0x31, 0x07, 0x71, 0x03, 0xd7, 0x19, 0x5c, 0xb7, 0x12, 0x97,
 | 
			
		||||
	0x8b, 0xae, 0xb7, 0x0d, 0x7f, 0x17, 0x70, 0xc9, 0x38, 0xbd, 0xab, 0x8c, 0xb6, 0xf7, 0x4f, 0x81,
 | 
			
		||||
	0x9e, 0xcb, 0xda, 0x76, 0xb5, 0x85, 0x4b, 0x1b, 0xbe, 0x9d, 0x48, 0xe6, 0x40, 0xfa, 0xae, 0xe3,
 | 
			
		||||
	0xf2, 0x40, 0x86, 0xef, 0xe8, 0x8e, 0xab, 0x06, 0xf0, 0x6f, 0x61, 0xee, 0x85, 0xbd, 0xe4, 0xda,
 | 
			
		||||
	0x6a, 0x6b, 0x39, 0xdb, 0x0b, 0xa3, 0xef, 0xf5, 0xb2, 0x60, 0xe1, 0x34, 0x3d, 0x98, 0x3b, 0x8c,
 | 
			
		||||
	0x4b, 0x04, 0x53, 0xf4, 0x40, 0xd4, 0x06, 0xf1, 0x61, 0x05, 0x3b, 0x5c, 0xf0, 0x01, 0x4c, 0x27,
 | 
			
		||||
	0xa3, 0x24, 0xd1, 0x0f, 0xfb, 0xa7, 0x15, 0x6c, 0x48, 0x47, 0xb8, 0x1b, 0xb8, 0x96, 0xcc, 0x24,
 | 
			
		||||
	0xbb, 0xa1, 0x81, 0xae, 0x78, 0x32, 0xc3, 0x0f, 0x25, 0xa3, 0xd0, 0x74, 0x94, 0xce, 0x33, 0x38,
 | 
			
		||||
	0x9c, 0x8c, 0xc2, 0x51, 0xd3, 0x11, 0x7b, 0xa2, 0xc2, 0xc2, 0x91, 0x64, 0xe6, 0x4e, 0x10, 0x6a,
 | 
			
		||||
	0xb2, 0x4d, 0xc1, 0x64, 0x17, 0x66, 0x93, 0xb9, 0x38, 0x36, 0xcc, 0x15, 0xbf, 0xcd, 0x2b, 0x61,
 | 
			
		||||
	0x8a, 0x47, 0xe7, 0x7e, 0xb2, 0x08, 0x60, 0x05, 0x43, 0xee, 0x69, 0x9a, 0x27, 0xd4, 0x8c, 0x08,
 | 
			
		||||
	0xd1, 0x88, 0xf8, 0x1e, 0xcf, 0xc9, 0x0f, 0xa6, 0x93, 0x99, 0x64, 0x20, 0xc9, 0x65, 0x7c, 0x38,
 | 
			
		||||
	0x9d, 0x70, 0x2c, 0x82, 0x62, 0x4b, 0x6b, 0xac, 0xe7, 0xf0, 0x3e, 0x83, 0xb7, 0x8a, 0x26, 0xd6,
 | 
			
		||||
	0x8a, 0x16, 0xd4, 0x14, 0x7b, 0xbb, 0x68, 0x3a, 0x8b, 0xf5, 0x16, 0x58, 0xaf, 0xc7, 0xe1, 0x9d,
 | 
			
		||||
	0x1c, 0x12, 0x6b, 0xc5, 0xc8, 0xbb, 0xc5, 0x51, 0x5f, 0x35, 0xce, 0x3b, 0x1b, 0x03, 0x06, 0xef,
 | 
			
		||||
	0x8d, 0xf1, 0x95, 0x62, 0xef, 0x17, 0xe7, 0x7e, 0xde, 0x4b, 0x08, 0x66, 0xdb, 0xe6, 0x11, 0x67,
 | 
			
		||||
	0x74, 0x5b, 0x24, 0xbf, 0xe3, 0x86, 0x2f, 0x61, 0x91, 0x5f, 0xb4, 0x34, 0x57, 0x87, 0x31, 0x9d,
 | 
			
		||||
	0xf2, 0x4b, 0x59, 0xf3, 0x27, 0x32, 0xe1, 0x78, 0xc0, 0x3b, 0x7e, 0x39, 0x9b, 0xcf, 0x39, 0x20,
 | 
			
		||||
	0xfe, 0x57, 0xf1, 0x4a, 0x3a, 0xdd, 0xa2, 0x08, 0x93, 0x6e, 0x0c, 0x36, 0xc2, 0x60, 0xa3, 0x96,
 | 
			
		||||
	0x0c, 0x97, 0x5c, 0x78, 0xd5, 0x4a, 0x3a, 0x2a, 0x12, 0x4a, 0xea, 0x3f, 0x22, 0x75, 0xd5, 0xa2,
 | 
			
		||||
	0xb7, 0x44, 0xcf, 0xd1, 0x6e, 0x52, 0x3a, 0xde, 0xd7, 0xb2, 0x21, 0x98, 0xcb, 0x29, 0xfa, 0x5b,
 | 
			
		||||
	0x11, 0xf8, 0xb8, 0x92, 0xf9, 0xd1, 0x03, 0xf2, 0x7a, 0xfa, 0x38, 0x45, 0x56, 0x43, 0xd1, 0xd6,
 | 
			
		||||
	0x72, 0x9e, 0x3f, 0xf0, 0x46, 0x2e, 0x07, 0x43, 0xc4, 0xe0, 0x3a, 0xbc, 0x69, 0x5d, 0xbc, 0x66,
 | 
			
		||||
	0xc1, 0x7a, 0xde, 0xda, 0xf3, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xd8, 0x05, 0xd1, 0xae,
 | 
			
		||||
	0x0d, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7122
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/tf.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7122
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/tf.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										75
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/tf2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/tf2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,75 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Provides access to TF2 Game Coordinator functionality.
 | 
			
		||||
*/
 | 
			
		||||
package tf2
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/Philipp15b/go-steam"
 | 
			
		||||
	. "github.com/Philipp15b/go-steam/protocol/gamecoordinator"
 | 
			
		||||
	. "github.com/Philipp15b/go-steam/tf2/protocol"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/tf2/protocol/protobuf"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const AppId = 440
 | 
			
		||||
 | 
			
		||||
// To use any methods of this, you'll need to SetPlaying(true) and wait for
 | 
			
		||||
// the GCReadyEvent.
 | 
			
		||||
type TF2 struct {
 | 
			
		||||
	client *steam.Client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Creates a new TF2 instance and registers it as a packet handler
 | 
			
		||||
func New(client *steam.Client) *TF2 {
 | 
			
		||||
	t := &TF2{client}
 | 
			
		||||
	client.GC.RegisterPacketHandler(t)
 | 
			
		||||
	return t
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) SetPlaying(playing bool) {
 | 
			
		||||
	if playing {
 | 
			
		||||
		t.client.GC.SetGamesPlayed(AppId)
 | 
			
		||||
	} else {
 | 
			
		||||
		t.client.GC.SetGamesPlayed()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) SetItemPosition(itemId, position uint64) {
 | 
			
		||||
	t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCSetSingleItemPosition), &MsgGCSetItemPosition{
 | 
			
		||||
		itemId, position,
 | 
			
		||||
	}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// recipe -2 = wildcard
 | 
			
		||||
func (t *TF2) CraftItems(items []uint64, recipe int16) {
 | 
			
		||||
	t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCCraft), &MsgGCCraft{
 | 
			
		||||
		Recipe: recipe,
 | 
			
		||||
		Items:  items,
 | 
			
		||||
	}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) DeleteItem(itemId uint64) {
 | 
			
		||||
	t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCDelete), &MsgGCDeleteItem{itemId}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) NameItem(toolId, target uint64, name string) {
 | 
			
		||||
	t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCNameItem), &MsgGCNameItem{
 | 
			
		||||
		toolId, target, name,
 | 
			
		||||
	}))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GCReadyEvent struct{}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) HandleGCPacket(packet *GCPacket) {
 | 
			
		||||
	if packet.AppId != AppId {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	switch protobuf.EGCBaseClientMsg(packet.MsgType) {
 | 
			
		||||
	case protobuf.EGCBaseClientMsg_k_EMsgGCClientWelcome:
 | 
			
		||||
		t.handleWelcome(packet)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *TF2) handleWelcome(packet *GCPacket) {
 | 
			
		||||
	// the packet's body is pretty useless
 | 
			
		||||
	t.client.Emit(&GCReadyEvent{})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								vendor/github.com/Philipp15b/go-steam/trade/actions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										84
									
								
								vendor/github.com/Philipp15b/go-steam/trade/actions.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,84 +0,0 @@
 | 
			
		||||
package trade
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/Philipp15b/go-steam/economy/inventory"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/trade/tradeapi"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Slot uint
 | 
			
		||||
 | 
			
		||||
func (t *Trade) action(status *tradeapi.Status, err error) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	t.onStatus(status)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns the next batch of events to process. These can be queued from calls to methods
 | 
			
		||||
// like `AddItem` or, if there are no queued events, from a new HTTP request to Steam's API (blocking!).
 | 
			
		||||
// If the latter is the case, this method may also sleep before the request
 | 
			
		||||
// to conform to the polling interval of the official Steam client.
 | 
			
		||||
func (t *Trade) Poll() ([]interface{}, error) {
 | 
			
		||||
	if t.queuedEvents != nil {
 | 
			
		||||
		return t.Events(), nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if d := time.Since(t.lastPoll); d < pollTimeout {
 | 
			
		||||
		time.Sleep(pollTimeout - d)
 | 
			
		||||
	}
 | 
			
		||||
	t.lastPoll = time.Now()
 | 
			
		||||
 | 
			
		||||
	err := t.action(t.api.GetStatus())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return t.Events(), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) GetTheirInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) {
 | 
			
		||||
	return inventory.GetFullInventory(func() (*inventory.PartialInventory, error) {
 | 
			
		||||
		return t.api.GetForeignInventory(contextId, appId, nil)
 | 
			
		||||
	}, func(start uint) (*inventory.PartialInventory, error) {
 | 
			
		||||
		return t.api.GetForeignInventory(contextId, appId, &start)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) GetOwnInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) {
 | 
			
		||||
	return t.api.GetOwnInventory(contextId, appId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) GetMain() (*tradeapi.Main, error) {
 | 
			
		||||
	return t.api.GetMain()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) AddItem(slot Slot, item *Item) error {
 | 
			
		||||
	return t.action(t.api.AddItem(uint(slot), item.AssetId, item.ContextId, item.AppId))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) RemoveItem(slot Slot, item *Item) error {
 | 
			
		||||
	return t.action(t.api.RemoveItem(uint(slot), item.AssetId, item.ContextId, item.AppId))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Chat(message string) error {
 | 
			
		||||
	return t.action(t.api.Chat(message))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) SetCurrency(amount uint, currency *Currency) error {
 | 
			
		||||
	return t.action(t.api.SetCurrency(amount, currency.CurrencyId, currency.ContextId, currency.AppId))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) SetReady(ready bool) error {
 | 
			
		||||
	return t.action(t.api.SetReady(ready))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This may only be called after a successful `SetReady(true)`.
 | 
			
		||||
func (t *Trade) Confirm() error {
 | 
			
		||||
	return t.action(t.api.Confirm())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Cancel() error {
 | 
			
		||||
	return t.action(t.api.Cancel())
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								vendor/github.com/Philipp15b/go-steam/trade/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/Philipp15b/go-steam/trade/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,40 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Allows automation of Steam Trading.
 | 
			
		||||
 | 
			
		||||
Usage
 | 
			
		||||
 | 
			
		||||
Like go-steam, this package is event-based. Call Poll() until the trade has ended, that is until the TradeEndedEvent is emitted.
 | 
			
		||||
 | 
			
		||||
	// After receiving the steam.TradeSessionStartEvent
 | 
			
		||||
	t := trade.New(sessionIdCookie, steamLoginCookie, steamLoginSecure, event.Other)
 | 
			
		||||
	for {
 | 
			
		||||
		eventList, err := t.Poll()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			// error handling here
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		for _, event := range eventList {
 | 
			
		||||
			switch e := event.(type) {
 | 
			
		||||
				case *trade.ChatEvent:
 | 
			
		||||
					// respond to any chat message
 | 
			
		||||
					t.Chat("Trading is awesome!")
 | 
			
		||||
				case *trade.TradeEndedEvent:
 | 
			
		||||
					return
 | 
			
		||||
				// other event handlers here
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
You can either log into steamcommunity.com and use the values of the `sessionId` and `steamLogin` cookies,
 | 
			
		||||
or use go-steam and after logging in with client.Web.LogOn() and receiving the WebLoggedOnEvent use the `SessionId`
 | 
			
		||||
and `SteamLogin` fields of steam.Web for the respective cookies.
 | 
			
		||||
 | 
			
		||||
It is important that there is no delay between the Poll() calls greater than the timeout of the Steam client
 | 
			
		||||
(currently five seconds before the trade partner sees a warning) or the trade will be closed automatically by Steam.
 | 
			
		||||
 | 
			
		||||
Notes
 | 
			
		||||
 | 
			
		||||
All method calls to Steam APIs are blocking. This packages' and its subpackages' types are not thread-safe and no calls to any method of the same
 | 
			
		||||
trade instance may be done concurrently except when otherwise noted.
 | 
			
		||||
*/
 | 
			
		||||
package trade
 | 
			
		||||
							
								
								
									
										122
									
								
								vendor/github.com/Philipp15b/go-steam/trade/trade.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/Philipp15b/go-steam/trade/trade.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,122 +0,0 @@
 | 
			
		||||
package trade
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Philipp15b/go-steam/steamid"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/trade/tradeapi"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const pollTimeout = time.Second
 | 
			
		||||
 | 
			
		||||
type Trade struct {
 | 
			
		||||
	ThemId steamid.SteamId
 | 
			
		||||
 | 
			
		||||
	MeReady, ThemReady bool
 | 
			
		||||
 | 
			
		||||
	lastPoll     time.Time
 | 
			
		||||
	queuedEvents []interface{}
 | 
			
		||||
	api          *tradeapi.Trade
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func New(sessionId, steamLogin, steamLoginSecure string, other steamid.SteamId) *Trade {
 | 
			
		||||
	return &Trade{
 | 
			
		||||
		other,
 | 
			
		||||
		false, false,
 | 
			
		||||
		time.Unix(0, 0),
 | 
			
		||||
		nil,
 | 
			
		||||
		tradeapi.New(sessionId, steamLogin, steamLoginSecure, other),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Version() uint {
 | 
			
		||||
	return t.api.Version
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns all queued events and removes them from the queue without performing a HTTP request, like Poll() would.
 | 
			
		||||
func (t *Trade) Events() []interface{} {
 | 
			
		||||
	qe := t.queuedEvents
 | 
			
		||||
	t.queuedEvents = nil
 | 
			
		||||
	return qe
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) onStatus(status *tradeapi.Status) error {
 | 
			
		||||
	if !status.Success {
 | 
			
		||||
		return errors.New("trade: returned status not successful! error message: " + status.Error)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if status.NewVersion {
 | 
			
		||||
		t.api.Version = status.Version
 | 
			
		||||
 | 
			
		||||
		t.MeReady = status.Me.Ready == true
 | 
			
		||||
		t.ThemReady = status.Them.Ready == true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch status.TradeStatus {
 | 
			
		||||
	case tradeapi.TradeStatus_Complete:
 | 
			
		||||
		t.addEvent(&TradeEndedEvent{TradeEndReason_Complete})
 | 
			
		||||
	case tradeapi.TradeStatus_Cancelled:
 | 
			
		||||
		t.addEvent(&TradeEndedEvent{TradeEndReason_Cancelled})
 | 
			
		||||
	case tradeapi.TradeStatus_Timeout:
 | 
			
		||||
		t.addEvent(&TradeEndedEvent{TradeEndReason_Timeout})
 | 
			
		||||
	case tradeapi.TradeStatus_Failed:
 | 
			
		||||
		t.addEvent(&TradeEndedEvent{TradeEndReason_Failed})
 | 
			
		||||
	case tradeapi.TradeStatus_Open:
 | 
			
		||||
		// nothing
 | 
			
		||||
	default:
 | 
			
		||||
		// ignore too
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	t.updateEvents(status.Events)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) updateEvents(events tradeapi.EventList) {
 | 
			
		||||
	if len(events) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var lastLogPos uint
 | 
			
		||||
	for i, event := range events {
 | 
			
		||||
		if i < t.api.LogPos {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if event.SteamId != t.ThemId {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if lastLogPos < i {
 | 
			
		||||
			lastLogPos = i
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch event.Action {
 | 
			
		||||
		case tradeapi.Action_AddItem:
 | 
			
		||||
			t.addEvent(&ItemAddedEvent{newItem(event)})
 | 
			
		||||
		case tradeapi.Action_RemoveItem:
 | 
			
		||||
			t.addEvent(&ItemRemovedEvent{newItem(event)})
 | 
			
		||||
		case tradeapi.Action_Ready:
 | 
			
		||||
			t.ThemReady = true
 | 
			
		||||
			t.addEvent(new(ReadyEvent))
 | 
			
		||||
		case tradeapi.Action_Unready:
 | 
			
		||||
			t.ThemReady = false
 | 
			
		||||
			t.addEvent(new(UnreadyEvent))
 | 
			
		||||
		case tradeapi.Action_SetCurrency:
 | 
			
		||||
			t.addEvent(&SetCurrencyEvent{
 | 
			
		||||
				newCurrency(event),
 | 
			
		||||
				event.OldAmount,
 | 
			
		||||
				event.NewAmount,
 | 
			
		||||
			})
 | 
			
		||||
		case tradeapi.Action_ChatMessage:
 | 
			
		||||
			t.addEvent(&ChatEvent{
 | 
			
		||||
				event.Text,
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	t.api.LogPos = uint(lastLogPos) + 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) addEvent(event interface{}) {
 | 
			
		||||
	t.queuedEvents = append(t.queuedEvents, event)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										111
									
								
								vendor/github.com/Philipp15b/go-steam/trade/tradeapi/status.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								vendor/github.com/Philipp15b/go-steam/trade/tradeapi/status.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,111 +0,0 @@
 | 
			
		||||
package tradeapi
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/jsont"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/steamid"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Status struct {
 | 
			
		||||
	Success     bool
 | 
			
		||||
	Error       string
 | 
			
		||||
	NewVersion  bool        `json:"newversion"`
 | 
			
		||||
	TradeStatus TradeStatus `json:"trade_status"`
 | 
			
		||||
	Version     uint
 | 
			
		||||
	LogPos      int
 | 
			
		||||
	Me          User
 | 
			
		||||
	Them        User
 | 
			
		||||
	Events      EventList
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type TradeStatus uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	TradeStatus_Open      TradeStatus = 0
 | 
			
		||||
	TradeStatus_Complete              = 1
 | 
			
		||||
	TradeStatus_Empty                 = 2 // when both parties trade no items
 | 
			
		||||
	TradeStatus_Cancelled             = 3
 | 
			
		||||
	TradeStatus_Timeout               = 4 // the partner timed out
 | 
			
		||||
	TradeStatus_Failed                = 5
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type EventList map[uint]*Event
 | 
			
		||||
 | 
			
		||||
// The EventList can either be an array or an object of id -> event
 | 
			
		||||
func (e *EventList) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	// initialize the map if it's nil
 | 
			
		||||
	if *e == nil {
 | 
			
		||||
		*e = make(EventList)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	o := make(map[string]*Event)
 | 
			
		||||
	err := json.Unmarshal(data, &o)
 | 
			
		||||
	// it's an object
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		for is, event := range o {
 | 
			
		||||
			i, err := strconv.ParseUint(is, 10, 32)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
			(*e)[uint(i)] = event
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// it's an array
 | 
			
		||||
	var a []*Event
 | 
			
		||||
	err = json.Unmarshal(data, &a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	for i, event := range a {
 | 
			
		||||
		(*e)[uint(i)] = event
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Event struct {
 | 
			
		||||
	SteamId   steamid.SteamId `json:",string"`
 | 
			
		||||
	Action    Action          `json:",string"`
 | 
			
		||||
	Timestamp uint64
 | 
			
		||||
 | 
			
		||||
	AppId     uint32
 | 
			
		||||
	ContextId uint64 `json:",string"`
 | 
			
		||||
	AssetId   uint64 `json:",string"`
 | 
			
		||||
 | 
			
		||||
	Text string // only used for chat messages
 | 
			
		||||
 | 
			
		||||
	// The following is used for SetCurrency
 | 
			
		||||
	CurrencyId uint64 `json:",string"`
 | 
			
		||||
	OldAmount  uint64 `json:"old_amount,string"`
 | 
			
		||||
	NewAmount  uint64 `json:"amount,string"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Action uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	Action_AddItem     Action = 0
 | 
			
		||||
	Action_RemoveItem         = 1
 | 
			
		||||
	Action_Ready              = 2
 | 
			
		||||
	Action_Unready            = 3
 | 
			
		||||
	Action_Accept             = 4
 | 
			
		||||
	Action_SetCurrency        = 6
 | 
			
		||||
	Action_ChatMessage        = 7
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type User struct {
 | 
			
		||||
	Ready             jsont.UintBool
 | 
			
		||||
	Confirmed         jsont.UintBool
 | 
			
		||||
	SecSinceTouch     int  `json:"sec_since_touch"`
 | 
			
		||||
	ConnectionPending bool `json:"connection_pending"`
 | 
			
		||||
	Assets            interface{}
 | 
			
		||||
	Currency          interface{} // either []*Currency or empty string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Currency struct {
 | 
			
		||||
	AppId      uint64 `json:",string"`
 | 
			
		||||
	ContextId  uint64 `json:",string"`
 | 
			
		||||
	CurrencyId uint64 `json:",string"`
 | 
			
		||||
	Amount     uint64 `json:",string"`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										200
									
								
								vendor/github.com/Philipp15b/go-steam/trade/tradeapi/trade.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										200
									
								
								vendor/github.com/Philipp15b/go-steam/trade/tradeapi/trade.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,200 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Wrapper around the HTTP trading API for type safety 'n' stuff.
 | 
			
		||||
*/
 | 
			
		||||
package tradeapi
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/community"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/economy/inventory"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/netutil"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/steamid"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const tradeUrl = "https://steamcommunity.com/trade/%d/"
 | 
			
		||||
 | 
			
		||||
type Trade struct {
 | 
			
		||||
	client *http.Client
 | 
			
		||||
	other  steamid.SteamId
 | 
			
		||||
 | 
			
		||||
	LogPos  uint // not automatically updated
 | 
			
		||||
	Version uint // Incremented for each item change by Steam; not automatically updated.
 | 
			
		||||
 | 
			
		||||
	// the `sessionid` cookie is sent as a parameter/POST data for CSRF protection.
 | 
			
		||||
	sessionId string
 | 
			
		||||
	baseUrl   string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Creates a new Trade based on the given cookies `sessionid`, `steamLogin`, `steamLoginSecure` and the trade partner's Steam ID.
 | 
			
		||||
func New(sessionId, steamLogin, steamLoginSecure string, other steamid.SteamId) *Trade {
 | 
			
		||||
	client := new(http.Client)
 | 
			
		||||
	client.Timeout = 10 * time.Second
 | 
			
		||||
 | 
			
		||||
	t := &Trade{
 | 
			
		||||
		client:    client,
 | 
			
		||||
		other:     other,
 | 
			
		||||
		sessionId: sessionId,
 | 
			
		||||
		baseUrl:   fmt.Sprintf(tradeUrl, other),
 | 
			
		||||
		Version:   1,
 | 
			
		||||
	}
 | 
			
		||||
	community.SetCookies(t.client, sessionId, steamLogin, steamLoginSecure)
 | 
			
		||||
	return t
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Main struct {
 | 
			
		||||
	PartnerOnProbation bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var onProbationRegex = regexp.MustCompile(`var g_bTradePartnerProbation = (\w+);`)
 | 
			
		||||
 | 
			
		||||
// Fetches the main HTML page and parses it. Thread-safe.
 | 
			
		||||
func (t *Trade) GetMain() (*Main, error) {
 | 
			
		||||
	resp, err := t.client.Get(t.baseUrl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	body, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	match := onProbationRegex.FindSubmatch(body)
 | 
			
		||||
	if len(match) == 0 {
 | 
			
		||||
		return nil, errors.New("tradeapi.GetMain: Could not find probation info")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &Main{
 | 
			
		||||
		string(match[1]) == "true",
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Ajax POSTs to an API endpoint that should return a status
 | 
			
		||||
func (t *Trade) postWithStatus(url string, data map[string]string) (*Status, error) {
 | 
			
		||||
	status := new(Status)
 | 
			
		||||
 | 
			
		||||
	req := netutil.NewPostForm(url, netutil.ToUrlValues(data))
 | 
			
		||||
	// Tales of Madness and Pain, Episode 1: If you forget this, Steam will return an error
 | 
			
		||||
	// saying "missing required parameter", even though they are all there. IT WAS JUST THE HEADER, ARGH!
 | 
			
		||||
	req.Header.Add("Referer", t.baseUrl)
 | 
			
		||||
 | 
			
		||||
	resp, err := t.client.Do(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
 | 
			
		||||
	err = json.NewDecoder(resp.Body).Decode(status)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return status, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) GetStatus() (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"tradestatus/", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"logpos":    strconv.FormatUint(uint64(t.LogPos), 10),
 | 
			
		||||
		"version":   strconv.FormatUint(uint64(t.Version), 10),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Thread-safe.
 | 
			
		||||
func (t *Trade) GetForeignInventory(contextId uint64, appId uint32, start *uint) (*inventory.PartialInventory, error) {
 | 
			
		||||
	data := map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"steamid":   fmt.Sprintf("%d", t.other),
 | 
			
		||||
		"contextid": strconv.FormatUint(contextId, 10),
 | 
			
		||||
		"appid":     strconv.FormatUint(uint64(appId), 10),
 | 
			
		||||
	}
 | 
			
		||||
	if start != nil {
 | 
			
		||||
		data["start"] = strconv.FormatUint(uint64(*start), 10)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	req, err := http.NewRequest("GET", t.baseUrl+"foreigninventory?"+netutil.ToUrlValues(data).Encode(), nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	req.Header.Add("Referer", t.baseUrl)
 | 
			
		||||
 | 
			
		||||
	return inventory.DoInventoryRequest(t.client, req)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Thread-safe.
 | 
			
		||||
func (t *Trade) GetOwnInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) {
 | 
			
		||||
	return inventory.GetOwnInventory(t.client, contextId, appId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Chat(message string) (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"chat", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"logpos":    strconv.FormatUint(uint64(t.LogPos), 10),
 | 
			
		||||
		"version":   strconv.FormatUint(uint64(t.Version), 10),
 | 
			
		||||
		"message":   message,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) AddItem(slot uint, itemId, contextId uint64, appId uint32) (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"additem", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"slot":      strconv.FormatUint(uint64(slot), 10),
 | 
			
		||||
		"itemid":    strconv.FormatUint(itemId, 10),
 | 
			
		||||
		"contextid": strconv.FormatUint(contextId, 10),
 | 
			
		||||
		"appid":     strconv.FormatUint(uint64(appId), 10),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) RemoveItem(slot uint, itemId, contextId uint64, appId uint32) (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"removeitem", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"slot":      strconv.FormatUint(uint64(slot), 10),
 | 
			
		||||
		"itemid":    strconv.FormatUint(itemId, 10),
 | 
			
		||||
		"contextid": strconv.FormatUint(contextId, 10),
 | 
			
		||||
		"appid":     strconv.FormatUint(uint64(appId), 10),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) SetCurrency(amount uint, currencyId, contextId uint64, appId uint32) (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"setcurrency", map[string]string{
 | 
			
		||||
		"sessionid":  t.sessionId,
 | 
			
		||||
		"amount":     strconv.FormatUint(uint64(amount), 10),
 | 
			
		||||
		"currencyid": strconv.FormatUint(uint64(currencyId), 10),
 | 
			
		||||
		"contextid":  strconv.FormatUint(contextId, 10),
 | 
			
		||||
		"appid":      strconv.FormatUint(uint64(appId), 10),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) SetReady(ready bool) (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"toggleready", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"version":   strconv.FormatUint(uint64(t.Version), 10),
 | 
			
		||||
		"ready":     fmt.Sprint(ready),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Confirm() (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"confirm", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
		"version":   strconv.FormatUint(uint64(t.Version), 10),
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *Trade) Cancel() (*Status, error) {
 | 
			
		||||
	return t.postWithStatus(t.baseUrl+"cancel", map[string]string{
 | 
			
		||||
		"sessionid": t.sessionId,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isSuccess(v interface{}) bool {
 | 
			
		||||
	if m, ok := v.(map[string]interface{}); ok {
 | 
			
		||||
		return m["success"] == true
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								vendor/github.com/Philipp15b/go-steam/trade/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										67
									
								
								vendor/github.com/Philipp15b/go-steam/trade/types.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,67 +0,0 @@
 | 
			
		||||
package trade
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/Philipp15b/go-steam/trade/tradeapi"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TradeEndedEvent struct {
 | 
			
		||||
	Reason TradeEndReason
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type TradeEndReason uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	TradeEndReason_Complete  TradeEndReason = 1
 | 
			
		||||
	TradeEndReason_Cancelled                = 2
 | 
			
		||||
	TradeEndReason_Timeout                  = 3
 | 
			
		||||
	TradeEndReason_Failed                   = 4
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newItem(event *tradeapi.Event) *Item {
 | 
			
		||||
	return &Item{
 | 
			
		||||
		event.AppId,
 | 
			
		||||
		event.ContextId,
 | 
			
		||||
		event.AssetId,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Item struct {
 | 
			
		||||
	AppId     uint32
 | 
			
		||||
	ContextId uint64
 | 
			
		||||
	AssetId   uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ItemAddedEvent struct {
 | 
			
		||||
	Item *Item
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ItemRemovedEvent struct {
 | 
			
		||||
	Item *Item
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ReadyEvent struct{}
 | 
			
		||||
type UnreadyEvent struct{}
 | 
			
		||||
 | 
			
		||||
func newCurrency(event *tradeapi.Event) *Currency {
 | 
			
		||||
	return &Currency{
 | 
			
		||||
		event.AppId,
 | 
			
		||||
		event.ContextId,
 | 
			
		||||
		event.CurrencyId,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Currency struct {
 | 
			
		||||
	AppId      uint32
 | 
			
		||||
	ContextId  uint64
 | 
			
		||||
	CurrencyId uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type SetCurrencyEvent struct {
 | 
			
		||||
	Currency  *Currency
 | 
			
		||||
	OldAmount uint64
 | 
			
		||||
	NewAmount uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ChatEvent struct {
 | 
			
		||||
	Message string
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										452
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										452
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,452 +0,0 @@
 | 
			
		||||
package tradeoffer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/community"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/economy/inventory"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/netutil"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/steamid"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type APIKey string
 | 
			
		||||
 | 
			
		||||
const apiUrl = "https://api.steampowered.com/IEconService/%s/v%d"
 | 
			
		||||
 | 
			
		||||
type Client struct {
 | 
			
		||||
	client    *http.Client
 | 
			
		||||
	key       APIKey
 | 
			
		||||
	sessionId string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewClient(key APIKey, sessionId, steamLogin, steamLoginSecure string) *Client {
 | 
			
		||||
	c := &Client{
 | 
			
		||||
		new(http.Client),
 | 
			
		||||
		key,
 | 
			
		||||
		sessionId,
 | 
			
		||||
	}
 | 
			
		||||
	community.SetCookies(c.client, sessionId, steamLogin, steamLoginSecure)
 | 
			
		||||
	return c
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOffer(offerId uint64) (*TradeOfferResult, error) {
 | 
			
		||||
	resp, err := c.client.Get(fmt.Sprintf(apiUrl, "GetTradeOffer", 1) + "?" + netutil.ToUrlValues(map[string]string{
 | 
			
		||||
		"key":          string(c.key),
 | 
			
		||||
		"tradeofferid": strconv.FormatUint(offerId, 10),
 | 
			
		||||
		"language":     "en_us",
 | 
			
		||||
	}).Encode())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	t := new(struct {
 | 
			
		||||
		Response *TradeOfferResult
 | 
			
		||||
	})
 | 
			
		||||
	if err = json.NewDecoder(resp.Body).Decode(t); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if t.Response == nil || t.Response.Offer == nil {
 | 
			
		||||
		return nil, newSteamErrorf("steam returned empty offer result\n")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return t.Response, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOffers(getSent bool, getReceived bool, getDescriptions bool, activeOnly bool, historicalOnly bool, timeHistoricalCutoff *uint32) (*TradeOffersResult, error) {
 | 
			
		||||
	if !getSent && !getReceived {
 | 
			
		||||
		return nil, fmt.Errorf("getSent and getReceived can't be both false\n")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	params := map[string]string{
 | 
			
		||||
		"key": string(c.key),
 | 
			
		||||
	}
 | 
			
		||||
	if getSent {
 | 
			
		||||
		params["get_sent_offers"] = "1"
 | 
			
		||||
	}
 | 
			
		||||
	if getReceived {
 | 
			
		||||
		params["get_received_offers"] = "1"
 | 
			
		||||
	}
 | 
			
		||||
	if getDescriptions {
 | 
			
		||||
		params["get_descriptions"] = "1"
 | 
			
		||||
		params["language"] = "en_us"
 | 
			
		||||
	}
 | 
			
		||||
	if activeOnly {
 | 
			
		||||
		params["active_only"] = "1"
 | 
			
		||||
	}
 | 
			
		||||
	if historicalOnly {
 | 
			
		||||
		params["historical_only"] = "1"
 | 
			
		||||
	}
 | 
			
		||||
	if timeHistoricalCutoff != nil {
 | 
			
		||||
		params["time_historical_cutoff"] = strconv.FormatUint(uint64(*timeHistoricalCutoff), 10)
 | 
			
		||||
	}
 | 
			
		||||
	resp, err := c.client.Get(fmt.Sprintf(apiUrl, "GetTradeOffers", 1) + "?" + netutil.ToUrlValues(params).Encode())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	t := new(struct {
 | 
			
		||||
		Response *TradeOffersResult
 | 
			
		||||
	})
 | 
			
		||||
	if err = json.NewDecoder(resp.Body).Decode(t); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if t.Response == nil {
 | 
			
		||||
		return nil, newSteamErrorf("steam returned empty offers result\n")
 | 
			
		||||
	}
 | 
			
		||||
	return t.Response, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// action() is used by Decline() and Cancel()
 | 
			
		||||
// Steam only return success and error fields for malformed requests,
 | 
			
		||||
// hence client shall use GetOffer() to check action result
 | 
			
		||||
// It is also possible to implement Decline/Cancel using steamcommunity,
 | 
			
		||||
// which have more predictable responses
 | 
			
		||||
func (c *Client) action(method string, version uint, offerId uint64) error {
 | 
			
		||||
	resp, err := c.client.Do(netutil.NewPostForm(fmt.Sprintf(apiUrl, method, version), netutil.ToUrlValues(map[string]string{
 | 
			
		||||
		"key":          string(c.key),
 | 
			
		||||
		"tradeofferid": strconv.FormatUint(offerId, 10),
 | 
			
		||||
	})))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	if resp.StatusCode != 200 {
 | 
			
		||||
		return fmt.Errorf(method+" error: status code %d", resp.StatusCode)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) Decline(offerId uint64) error {
 | 
			
		||||
	return c.action("DeclineTradeOffer", 1, offerId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) Cancel(offerId uint64) error {
 | 
			
		||||
	return c.action("CancelTradeOffer", 1, offerId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Accept received trade offer
 | 
			
		||||
// It is best to confirm that offer was actually accepted
 | 
			
		||||
// by calling GetOffer after Accept and checking offer state
 | 
			
		||||
func (c *Client) Accept(offerId uint64) error {
 | 
			
		||||
	baseurl := fmt.Sprintf("https://steamcommunity.com/tradeoffer/%d/", offerId)
 | 
			
		||||
	req := netutil.NewPostForm(baseurl+"accept", netutil.ToUrlValues(map[string]string{
 | 
			
		||||
		"sessionid":    c.sessionId,
 | 
			
		||||
		"serverid":     "1",
 | 
			
		||||
		"tradeofferid": strconv.FormatUint(offerId, 10),
 | 
			
		||||
	}))
 | 
			
		||||
	req.Header.Add("Referer", baseurl)
 | 
			
		||||
 | 
			
		||||
	resp, err := c.client.Do(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	t := new(struct {
 | 
			
		||||
		StrError string `json:"strError"`
 | 
			
		||||
	})
 | 
			
		||||
	if err = json.NewDecoder(resp.Body).Decode(t); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if t.StrError != "" {
 | 
			
		||||
		return newSteamErrorf("accept error: %v\n", t.StrError)
 | 
			
		||||
	}
 | 
			
		||||
	if resp.StatusCode != 200 {
 | 
			
		||||
		return fmt.Errorf("accept error: status code %d", resp.StatusCode)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type TradeItem struct {
 | 
			
		||||
	AppId      uint32 `json:"appid"`
 | 
			
		||||
	ContextId  uint64 `json:"contextid,string"`
 | 
			
		||||
	Amount     uint64 `json:"amount"`
 | 
			
		||||
	AssetId    uint64 `json:"assetid,string,omitempty"`
 | 
			
		||||
	CurrencyId uint64 `json:"currencyid,string,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sends a new trade offer to the given Steam user. You can optionally specify an access token if you've got one.
 | 
			
		||||
// In addition, `counteredOfferId` can be non-nil, indicating the trade offer this is a counter for.
 | 
			
		||||
// On success returns trade offer id
 | 
			
		||||
func (c *Client) Create(other steamid.SteamId, accessToken *string, myItems, theirItems []TradeItem, counteredOfferId *uint64, message string) (uint64, error) {
 | 
			
		||||
	// Create new trade offer status
 | 
			
		||||
	to := map[string]interface{}{
 | 
			
		||||
		"newversion": true,
 | 
			
		||||
		"version":    3,
 | 
			
		||||
		"me": map[string]interface{}{
 | 
			
		||||
			"assets":   myItems,
 | 
			
		||||
			"currency": make([]struct{}, 0),
 | 
			
		||||
			"ready":    false,
 | 
			
		||||
		},
 | 
			
		||||
		"them": map[string]interface{}{
 | 
			
		||||
			"assets":   theirItems,
 | 
			
		||||
			"currency": make([]struct{}, 0),
 | 
			
		||||
			"ready":    false,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	jto, err := json.Marshal(to)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create url parameters for request
 | 
			
		||||
	data := map[string]string{
 | 
			
		||||
		"sessionid":         c.sessionId,
 | 
			
		||||
		"serverid":          "1",
 | 
			
		||||
		"partner":           other.ToString(),
 | 
			
		||||
		"tradeoffermessage": message,
 | 
			
		||||
		"json_tradeoffer":   string(jto),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var referer string
 | 
			
		||||
	if counteredOfferId != nil {
 | 
			
		||||
		referer = fmt.Sprintf("https://steamcommunity.com/tradeoffer/%d/", *counteredOfferId)
 | 
			
		||||
		data["tradeofferid_countered"] = strconv.FormatUint(*counteredOfferId, 10)
 | 
			
		||||
	} else {
 | 
			
		||||
		// Add token for non-friend offers
 | 
			
		||||
		if accessToken != nil {
 | 
			
		||||
			params := map[string]string{
 | 
			
		||||
				"trade_offer_access_token": *accessToken,
 | 
			
		||||
			}
 | 
			
		||||
			paramsJson, err := json.Marshal(params)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			data["trade_offer_create_params"] = string(paramsJson)
 | 
			
		||||
 | 
			
		||||
			referer = "https://steamcommunity.com/tradeoffer/new/?partner=" + strconv.FormatUint(uint64(other.GetAccountId()), 10) + "&token=" + *accessToken
 | 
			
		||||
		} else {
 | 
			
		||||
 | 
			
		||||
			referer = "https://steamcommunity.com/tradeoffer/new/?partner=" + strconv.FormatUint(uint64(other.GetAccountId()), 10)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create request
 | 
			
		||||
	req := netutil.NewPostForm("https://steamcommunity.com/tradeoffer/new/send", netutil.ToUrlValues(data))
 | 
			
		||||
	req.Header.Add("Referer", referer)
 | 
			
		||||
 | 
			
		||||
	// Send request
 | 
			
		||||
	resp, err := c.client.Do(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	t := new(struct {
 | 
			
		||||
		StrError     string `json:"strError"`
 | 
			
		||||
		TradeOfferId uint64 `json:"tradeofferid,string"`
 | 
			
		||||
	})
 | 
			
		||||
	if err = json.NewDecoder(resp.Body).Decode(t); err != nil {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	// strError code descriptions:
 | 
			
		||||
	// 15	invalide trade access token
 | 
			
		||||
	// 16	timeout
 | 
			
		||||
	// 20	wrong contextid
 | 
			
		||||
	// 25	can't send more offers until some is accepted/cancelled...
 | 
			
		||||
	// 26	object is not in our inventory
 | 
			
		||||
	// error code names are in internal/steamlang/enums.go EResult_name
 | 
			
		||||
	if t.StrError != "" {
 | 
			
		||||
		return 0, newSteamErrorf("create error: %v\n", t.StrError)
 | 
			
		||||
	}
 | 
			
		||||
	if resp.StatusCode != 200 {
 | 
			
		||||
		return 0, fmt.Errorf("create error: status code %d", resp.StatusCode)
 | 
			
		||||
	}
 | 
			
		||||
	if t.TradeOfferId == 0 {
 | 
			
		||||
		return 0, newSteamErrorf("create error: steam returned 0 for trade offer id")
 | 
			
		||||
	}
 | 
			
		||||
	return t.TradeOfferId, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOwnInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) {
 | 
			
		||||
	return inventory.GetOwnInventory(c.client, contextId, appId)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetPartnerInventory(other steamid.SteamId, contextId uint64, appId uint32, offerId *uint64) (*inventory.Inventory, error) {
 | 
			
		||||
	return inventory.GetFullInventory(func() (*inventory.PartialInventory, error) {
 | 
			
		||||
		return c.getPartialPartnerInventory(other, contextId, appId, offerId, nil)
 | 
			
		||||
	}, func(start uint) (*inventory.PartialInventory, error) {
 | 
			
		||||
		return c.getPartialPartnerInventory(other, contextId, appId, offerId, &start)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) getPartialPartnerInventory(other steamid.SteamId, contextId uint64, appId uint32, offerId *uint64, start *uint) (*inventory.PartialInventory, error) {
 | 
			
		||||
	data := map[string]string{
 | 
			
		||||
		"sessionid": c.sessionId,
 | 
			
		||||
		"partner":   other.ToString(),
 | 
			
		||||
		"contextid": strconv.FormatUint(contextId, 10),
 | 
			
		||||
		"appid":     strconv.FormatUint(uint64(appId), 10),
 | 
			
		||||
	}
 | 
			
		||||
	if start != nil {
 | 
			
		||||
		data["start"] = strconv.FormatUint(uint64(*start), 10)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	baseUrl := "https://steamcommunity.com/tradeoffer/%v/"
 | 
			
		||||
	if offerId != nil {
 | 
			
		||||
		baseUrl = fmt.Sprintf(baseUrl, *offerId)
 | 
			
		||||
	} else {
 | 
			
		||||
		baseUrl = fmt.Sprintf(baseUrl, "new")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	req, err := http.NewRequest("GET", baseUrl+"partnerinventory/?"+netutil.ToUrlValues(data).Encode(), nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
	req.Header.Add("Referer", baseUrl+"?partner="+strconv.FormatUint(uint64(other.GetAccountId()), 10))
 | 
			
		||||
 | 
			
		||||
	return inventory.DoInventoryRequest(c.client, req)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Can be used to verify accepted tradeoffer and find out received asset ids
 | 
			
		||||
func (c *Client) GetTradeReceipt(tradeId uint64) ([]*TradeReceiptItem, error) {
 | 
			
		||||
	url := fmt.Sprintf("https://steamcommunity.com/trade/%d/receipt", tradeId)
 | 
			
		||||
	resp, err := c.client.Get(url)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	respBody, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	items, err := parseTradeReceipt(respBody)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, newSteamErrorf("failed to parse trade receipt: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return items, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get duration of escrow in days. Call this before sending a trade offer
 | 
			
		||||
func (c *Client) GetPartnerEscrowDuration(other steamid.SteamId, accessToken *string) (*EscrowDuration, error) {
 | 
			
		||||
	data := map[string]string{
 | 
			
		||||
		"partner": strconv.FormatUint(uint64(other.GetAccountId()), 10),
 | 
			
		||||
	}
 | 
			
		||||
	if accessToken != nil {
 | 
			
		||||
		data["token"] = *accessToken
 | 
			
		||||
	}
 | 
			
		||||
	return c.getEscrowDuration("https://steamcommunity.com/tradeoffer/new/?" + netutil.ToUrlValues(data).Encode())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get duration of escrow in days. Call this after receiving a trade offer
 | 
			
		||||
func (c *Client) GetOfferEscrowDuration(offerId uint64) (*EscrowDuration, error) {
 | 
			
		||||
	return c.getEscrowDuration("http://steamcommunity.com/tradeoffer/" + strconv.FormatUint(offerId, 10))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) getEscrowDuration(queryUrl string) (*EscrowDuration, error) {
 | 
			
		||||
	resp, err := c.client.Get(queryUrl)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to retrieve escrow duration: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	respBody, err := ioutil.ReadAll(resp.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	escrowDuration, err := parseEscrowDuration(respBody)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, newSteamErrorf("failed to parse escrow duration: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return escrowDuration, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOfferWithRetry(offerId uint64, retryCount int, retryDelay time.Duration) (*TradeOfferResult, error) {
 | 
			
		||||
	var res *TradeOfferResult
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.GetOffer(offerId)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOffersWithRetry(getSent bool, getReceived bool, getDescriptions bool, activeOnly bool, historicalOnly bool, timeHistoricalCutoff *uint32, retryCount int, retryDelay time.Duration) (*TradeOffersResult, error) {
 | 
			
		||||
	var res *TradeOffersResult
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.GetOffers(getSent, getReceived, getDescriptions, activeOnly, historicalOnly, timeHistoricalCutoff)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) DeclineWithRetry(offerId uint64, retryCount int, retryDelay time.Duration) error {
 | 
			
		||||
	return withRetry(
 | 
			
		||||
		func() error {
 | 
			
		||||
			return c.Decline(offerId)
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) CancelWithRetry(offerId uint64, retryCount int, retryDelay time.Duration) error {
 | 
			
		||||
	return withRetry(
 | 
			
		||||
		func() error {
 | 
			
		||||
			return c.Cancel(offerId)
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) AcceptWithRetry(offerId uint64, retryCount int, retryDelay time.Duration) error {
 | 
			
		||||
	return withRetry(
 | 
			
		||||
		func() error {
 | 
			
		||||
			return c.Accept(offerId)
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) CreateWithRetry(other steamid.SteamId, accessToken *string, myItems, theirItems []TradeItem, counteredOfferId *uint64, message string, retryCount int, retryDelay time.Duration) (uint64, error) {
 | 
			
		||||
	var res uint64
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.Create(other, accessToken, myItems, theirItems, counteredOfferId, message)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetOwnInventoryWithRetry(contextId uint64, appId uint32, retryCount int, retryDelay time.Duration) (*inventory.Inventory, error) {
 | 
			
		||||
	var res *inventory.Inventory
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.GetOwnInventory(contextId, appId)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetPartnerInventoryWithRetry(other steamid.SteamId, contextId uint64, appId uint32, offerId *uint64, retryCount int, retryDelay time.Duration) (*inventory.Inventory, error) {
 | 
			
		||||
	var res *inventory.Inventory
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.GetPartnerInventory(other, contextId, appId, offerId)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Client) GetTradeReceiptWithRetry(tradeId uint64, retryCount int, retryDelay time.Duration) ([]*TradeReceiptItem, error) {
 | 
			
		||||
	var res []*TradeReceiptItem
 | 
			
		||||
	return res, withRetry(
 | 
			
		||||
		func() (err error) {
 | 
			
		||||
			res, err = c.GetTradeReceipt(tradeId)
 | 
			
		||||
			return err
 | 
			
		||||
		}, retryCount, retryDelay)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func withRetry(f func() error, retryCount int, retryDelay time.Duration) error {
 | 
			
		||||
	if retryCount <= 0 {
 | 
			
		||||
		panic("retry count must be more than 0")
 | 
			
		||||
	}
 | 
			
		||||
	i := 0
 | 
			
		||||
	for {
 | 
			
		||||
		i++
 | 
			
		||||
		if err := f(); err != nil {
 | 
			
		||||
			// If we got steam error do not retry
 | 
			
		||||
			if _, ok := err.(*SteamError); ok {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			if i == retryCount {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			time.Sleep(retryDelay)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		break
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
package tradeoffer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// SteamError can be returned by Create, Accept, Decline and Cancel methods.
 | 
			
		||||
// It means we got response from steam, but it was in unknown format
 | 
			
		||||
// or request was declined.
 | 
			
		||||
type SteamError struct {
 | 
			
		||||
	msg string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e *SteamError) Error() string {
 | 
			
		||||
	return e.msg
 | 
			
		||||
}
 | 
			
		||||
func newSteamErrorf(format string, a ...interface{}) *SteamError {
 | 
			
		||||
	return &SteamError{fmt.Sprintf(format, a...)}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/escrow.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,47 +0,0 @@
 | 
			
		||||
package tradeoffer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type EscrowDuration struct {
 | 
			
		||||
	DaysMyEscrow    uint32
 | 
			
		||||
	DaysTheirEscrow uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseEscrowDuration(data []byte) (*EscrowDuration, error) {
 | 
			
		||||
	// TODO: why we are using case insensitive matching?
 | 
			
		||||
	myRegex := regexp.MustCompile("(?i)g_daysMyEscrow[\\s=]+(\\d+);")
 | 
			
		||||
	theirRegex := regexp.MustCompile("(?i)g_daysTheirEscrow[\\s=]+(\\d+);")
 | 
			
		||||
 | 
			
		||||
	myM := myRegex.FindSubmatch(data)
 | 
			
		||||
	theirM := theirRegex.FindSubmatch(data)
 | 
			
		||||
 | 
			
		||||
	if myM == nil || theirM == nil {
 | 
			
		||||
		// check if access token is valid
 | 
			
		||||
		notFriendsRegex := regexp.MustCompile(">You are not friends with this user<")
 | 
			
		||||
		notFriendsM := notFriendsRegex.FindSubmatch(data)
 | 
			
		||||
		if notFriendsM == nil {
 | 
			
		||||
			return nil, errors.New("regexp does not match")
 | 
			
		||||
		} else {
 | 
			
		||||
			return nil, errors.New("you are not friends with this user")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	myEscrow, err := strconv.ParseUint(string(myM[1]), 10, 32)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to parse my duration into uint: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	theirEscrow, err := strconv.ParseUint(string(theirM[1]), 10, 32)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to parse their duration into uint: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &EscrowDuration{
 | 
			
		||||
		DaysMyEscrow:    uint32(myEscrow),
 | 
			
		||||
		DaysTheirEscrow: uint32(theirEscrow),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/receipt.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/tradeoffer/receipt.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,35 +0,0 @@
 | 
			
		||||
package tradeoffer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/Philipp15b/go-steam/economy/inventory"
 | 
			
		||||
	"regexp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TradeReceiptItem struct {
 | 
			
		||||
	AssetId   uint64 `json:"id,string"`
 | 
			
		||||
	AppId     uint32
 | 
			
		||||
	ContextId uint64
 | 
			
		||||
	Owner     uint64 `json:",string"`
 | 
			
		||||
	Pos       uint32
 | 
			
		||||
	inventory.Description
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseTradeReceipt(data []byte) ([]*TradeReceiptItem, error) {
 | 
			
		||||
	reg := regexp.MustCompile("oItem =\\s+(.+?});")
 | 
			
		||||
	itemMatches := reg.FindAllSubmatch(data, -1)
 | 
			
		||||
	if itemMatches == nil {
 | 
			
		||||
		return nil, fmt.Errorf("items not found\n")
 | 
			
		||||
	}
 | 
			
		||||
	items := make([]*TradeReceiptItem, 0, len(itemMatches))
 | 
			
		||||
	for _, m := range itemMatches {
 | 
			
		||||
		item := new(TradeReceiptItem)
 | 
			
		||||
		err := json.Unmarshal(m[1], &item)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		items = append(items, item)
 | 
			
		||||
	}
 | 
			
		||||
	return items, nil
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user