Allow specifying match points

This commit is contained in:
Trevor Slocum 2023-10-19 10:51:28 -07:00
parent 91392d4239
commit 078ec92722
5 changed files with 112 additions and 78 deletions

View file

@ -1,3 +1,6 @@
1.0.2:
- Allow specifying match points
1.0.1:
- Fix checker alignment issues
- Fix checker borders

View file

@ -10,6 +10,7 @@ import (
"log"
"os"
"path"
"regexp"
"runtime/pprof"
"strings"
"time"
@ -30,6 +31,8 @@ import (
const MaxDebug = 1
var onlyNumbers = regexp.MustCompile(`[0-9]+`)
//go:embed assets
var assetsFS embed.FS
@ -303,7 +306,7 @@ func setViewBoard(view bool) {
// Exit create game dialog, if open.
game.lobby.showCreateGame = false
game.lobby.createGameFocusPassword = false
game.lobby.createGameFocus = 0
game.lobby.createGameName.Field.SetText("")
game.lobby.createGamePassword.Field.SetText("")
game.lobby.bufferDirty = true
@ -442,6 +445,7 @@ func NewGame() *Game {
{
headerLabel := etk.NewText("Create match")
nameLabel := etk.NewText("Name")
pointsLabel := etk.NewText("Points")
passwordLabel := etk.NewText("Password")
g.lobby.createGameName = etk.NewInput("", "", func(text string) (handled bool) {
@ -449,6 +453,11 @@ func NewGame() *Game {
})
g.lobby.createGameName.Field.SetHandleKeyboard(true)
g.lobby.createGamePoints = etk.NewInput("", "", func(text string) (handled bool) {
return false
})
g.lobby.createGamePoints.Field.SetHandleKeyboard(false)
g.lobby.createGamePassword = etk.NewInput("", "", func(text string) (handled bool) {
return false
})
@ -458,12 +467,14 @@ func NewGame() *Game {
grid.SetColumnPadding(int(g.Board.horizontalBorderSize / 2))
grid.SetRowPadding(20)
grid.SetColumnSizes(10, 200)
grid.SetRowSizes(60, 50, 50)
grid.SetRowSizes(60, 50, 50, 50)
grid.AddChildAt(headerLabel, 0, 0, 3, 1)
grid.AddChildAt(nameLabel, 1, 1, 1, 1)
grid.AddChildAt(g.lobby.createGameName, 2, 1, 1, 1)
grid.AddChildAt(passwordLabel, 1, 2, 1, 1)
grid.AddChildAt(g.lobby.createGamePassword, 2, 2, 1, 1)
grid.AddChildAt(pointsLabel, 1, 2, 1, 1)
grid.AddChildAt(g.lobby.createGamePoints, 2, 2, 1, 1)
grid.AddChildAt(passwordLabel, 1, 3, 1, 1)
grid.AddChildAt(g.lobby.createGamePassword, 2, 3, 1, 1)
createGameGrid = grid
}
@ -760,32 +771,66 @@ func (g *Game) Update() error {
x, y := ebiten.CursorPosition()
p := image.Point{x, y}
if p.In(g.lobby.createGameName.Rect()) {
g.lobby.createGameFocusPassword = false
g.lobby.createGameFocus = 0
g.lobby.createGameName.Field.SetHandleKeyboard(true)
g.lobby.createGameName.Field.SetSuffix("_")
g.lobby.createGamePoints.Field.SetHandleKeyboard(false)
g.lobby.createGamePoints.Field.SetSuffix("")
g.lobby.createGamePassword.Field.SetHandleKeyboard(false)
g.lobby.createGamePassword.Field.SetSuffix("")
} else if p.In(g.lobby.createGamePoints.Rect()) {
g.lobby.createGameFocus = 1
g.lobby.createGameName.Field.SetHandleKeyboard(false)
g.lobby.createGameName.Field.SetSuffix("")
g.lobby.createGamePoints.Field.SetHandleKeyboard(true)
g.lobby.createGamePoints.Field.SetSuffix("_")
g.lobby.createGamePassword.Field.SetHandleKeyboard(false)
g.lobby.createGamePassword.Field.SetSuffix("")
} else if p.In(g.lobby.createGamePassword.Rect()) {
g.lobby.createGameFocusPassword = true
g.lobby.createGameFocus = 2
g.lobby.createGameName.Field.SetHandleKeyboard(false)
g.lobby.createGameName.Field.SetSuffix("")
g.lobby.createGamePoints.Field.SetHandleKeyboard(false)
g.lobby.createGamePoints.Field.SetSuffix("")
g.lobby.createGamePassword.Field.SetHandleKeyboard(true)
g.lobby.createGamePassword.Field.SetSuffix("_")
}
}
if inpututil.IsKeyJustPressed(ebiten.KeyTab) {
g.lobby.createGameFocusPassword = !g.lobby.createGameFocusPassword
if g.lobby.createGameFocusPassword {
g.lobby.createGameName.Field.SetHandleKeyboard(false)
g.lobby.createGameName.Field.SetSuffix("")
g.lobby.createGamePassword.Field.SetHandleKeyboard(true)
g.lobby.createGamePassword.Field.SetSuffix("_")
if ebiten.IsKeyPressed(ebiten.KeyShift) {
g.lobby.createGameFocus--
if g.lobby.createGameFocus < 0 {
g.lobby.createGameFocus = 2
}
} else {
g.lobby.createGameFocus++
if g.lobby.createGameFocus > 2 {
g.lobby.createGameFocus = 0
}
}
if g.lobby.createGameFocus == 0 {
g.lobby.createGameName.Field.SetHandleKeyboard(true)
g.lobby.createGameName.Field.SetSuffix("_")
g.lobby.createGamePoints.Field.SetHandleKeyboard(false)
g.lobby.createGamePoints.Field.SetSuffix("")
g.lobby.createGamePassword.Field.SetHandleKeyboard(false)
g.lobby.createGamePassword.Field.SetSuffix("")
} else if g.lobby.createGameFocus == 1 {
g.lobby.createGameName.Field.SetHandleKeyboard(false)
g.lobby.createGameName.Field.SetSuffix("")
g.lobby.createGamePoints.Field.SetHandleKeyboard(true)
g.lobby.createGamePoints.Field.SetSuffix("_")
g.lobby.createGamePassword.Field.SetHandleKeyboard(false)
g.lobby.createGamePassword.Field.SetSuffix("")
} else {
g.lobby.createGameName.Field.SetHandleKeyboard(false)
g.lobby.createGameName.Field.SetSuffix("")
g.lobby.createGamePoints.Field.SetHandleKeyboard(false)
g.lobby.createGamePoints.Field.SetSuffix("")
g.lobby.createGamePassword.Field.SetHandleKeyboard(true)
g.lobby.createGamePassword.Field.SetSuffix("_")
}
}
}
@ -794,6 +839,13 @@ func (g *Game) Update() error {
if err != nil {
log.Fatal(err)
}
if g.lobby.showCreateGame {
pointsText := g.lobby.createGamePoints.Text()
if pointsText != "" {
g.lobby.createGamePoints.Field.SetText(strings.Join(onlyNumbers.FindAllString(pointsText, -1), ""))
}
}
}
} else {
g.Board.Update()

View file

@ -6,6 +6,7 @@ import (
"image/color"
"math"
"sort"
"strconv"
"strings"
"time"
@ -86,12 +87,13 @@ type lobby struct {
runeBuffer []rune
showCreateGame bool
createGameNamePrev string
createGamePasswordPrev string
createGameName *etk.Input
createGamePassword *etk.Input
createGameFocusPassword bool
showCreateGame bool
createGameNamePrev string
createGamePasswordPrev string
createGameName *etk.Input
createGamePoints *etk.Input
createGamePassword *etk.Input
createGameFocus int
showJoinGame bool
joinGameID int
@ -173,7 +175,7 @@ func (l *lobby) drawBuffer() {
// Create game dialog is drawn by etk.
} else {
var img *ebiten.Image
drawEntry := func(cx float64, cy float64, colA string, colB string, highlight bool, title bool) {
drawEntry := func(cx float64, cy float64, colA string, colB string, colC string, highlight bool, title bool) {
labelColor := triangleA
if highlight {
labelColor = lightCheckerColor
@ -200,6 +202,7 @@ func (l *lobby) drawBuffer() {
text.Draw(img, colA, mediumFont, 4, standardLineHeight, labelColor)
text.Draw(img, colB, mediumFont, int(250*ebiten.DeviceScaleFactor()), standardLineHeight, labelColor)
text.Draw(img, colC, mediumFont, int(500*ebiten.DeviceScaleFactor()), standardLineHeight, labelColor)
//text.Draw(img, colC, mediumFont, int(500*ebiten.DeviceScaleFactor()), standardLineHeight, labelColor)
op := &ebiten.DrawImageOptions{}
@ -210,7 +213,7 @@ func (l *lobby) drawBuffer() {
titleOffset := 2.0
if !l.loaded {
drawEntry(l.padding, l.padding-titleOffset, "Loading...", "Please wait...", false, true)
drawEntry(l.padding, l.padding-titleOffset, "Loading...", "Please", "wait...", false, true)
return
}
@ -221,11 +224,11 @@ func (l *lobby) drawBuffer() {
}
cx, cy := 0.0, 0.0 // Cursor
drawEntry(cx+l.padding, cy+l.padding-titleOffset, "Status", "Name", false, true)
drawEntry(cx+l.padding, cy+l.padding-titleOffset, "Status", "Points", "Name", false, true)
cy += l.entryH
if len(l.games) == 0 {
drawEntry(cx+l.padding, cy+l.padding, "No matches available. Please create one.", "", false, false)
drawEntry(cx+l.padding, cy+l.padding, "No matches available. Please create one.", "", "", false, false)
} else {
i := 0
var status string
@ -241,7 +244,7 @@ func (l *lobby) drawBuffer() {
}
}
drawEntry(cx+l.padding, cy+l.padding, status, entry.Name, i == l.selected, false)
drawEntry(cx+l.padding, cy+l.padding, status, strconv.Itoa(entry.Points), entry.Name, i == l.selected, false)
cy += l.entryH
}
@ -328,7 +331,7 @@ func (l *lobby) click(x, y int) {
switch buttonIndex {
case lobbyButtonCreateCancel:
game.lobby.showCreateGame = false
game.lobby.createGameFocusPassword = false
game.lobby.createGameFocus = 0
game.lobby.createGameName.Field.SetText("")
game.lobby.createGamePassword.Field.SetText("")
l.bufferDirty = true
@ -338,7 +341,11 @@ func (l *lobby) click(x, y int) {
if len(strings.TrimSpace(game.lobby.createGamePassword.Text())) > 0 {
typeAndPassword = fmt.Sprintf("private %s", strings.ReplaceAll(game.lobby.createGamePassword.Text(), " ", "_"))
}
l.c.Out <- []byte(fmt.Sprintf("c %s %s", typeAndPassword, game.lobby.createGameName.Text()))
points, err := strconv.Atoi(game.lobby.createGamePoints.Text())
if err != nil {
points = 1
}
l.c.Out <- []byte(fmt.Sprintf("c %s %d %s", typeAndPassword, points, game.lobby.createGameName.Text()))
}
return
} else if l.showJoinGame {
@ -367,6 +374,7 @@ func (l *lobby) click(x, y int) {
namePlural += "'s"
}
l.createGameName.Field.SetText(namePlural + " match")
l.createGamePoints.Field.SetText("1")
l.createGamePassword.Field.SetText("")
l.bufferDirty = true
l.bufferButtonsDirty = true

16
go.mod
View file

@ -3,14 +3,14 @@ module code.rocket9labs.com/tslocum/boxcars
go 1.17
require (
code.rocket9labs.com/tslocum/bgammon v0.0.0-20230930205031-db3870b9fec9
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231019025948-f96a4fdb1a66
code.rocketnine.space/tslocum/etk v0.0.0-20230930052629-6c8d555b7d99
code.rocketnine.space/tslocum/kibodo v1.0.0
code.rocketnine.space/tslocum/messeji v1.0.4-0.20230929042029-6dd617c348a7
github.com/hajimehoshi/ebiten/v2 v2.6.0
github.com/hajimehoshi/ebiten/v2 v2.6.2
github.com/llgcode/draw2d v0.0.0-20230723155556-e595d7c7e75e
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
golang.org/x/image v0.12.0
golang.org/x/image v0.13.0
nhooyr.io/websocket v1.8.7
)
@ -18,10 +18,10 @@ require (
github.com/ebitengine/purego v0.5.0 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
github.com/jezek/xgb v1.1.0 // indirect
github.com/klauspost/compress v1.17.0 // indirect
golang.org/x/exp/shiny v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/sys v0.12.0 // indirect
github.com/klauspost/compress v1.17.1 // indirect
golang.org/x/exp/shiny v0.0.0-20231006140011-7918f672742d // indirect
golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe // indirect
golang.org/x/sync v0.4.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
)

61
go.sum
View file

@ -1,5 +1,5 @@
code.rocket9labs.com/tslocum/bgammon v0.0.0-20230930205031-db3870b9fec9 h1:ok+0arGO9ATI2uENfpEFjxY4jesLL5EDxi0drmJA938=
code.rocket9labs.com/tslocum/bgammon v0.0.0-20230930205031-db3870b9fec9/go.mod h1:LS/m5Zq7/93dP8XJrLkL1T5ZTwtddkN8X9TyRrrdCkQ=
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231019025948-f96a4fdb1a66 h1:0G4AFLMqI3a4WrVJMvBAoiY/Np9jwqKSG952rveNgC0=
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231019025948-f96a4fdb1a66/go.mod h1:LS/m5Zq7/93dP8XJrLkL1T5ZTwtddkN8X9TyRrrdCkQ=
code.rocketnine.space/tslocum/etk v0.0.0-20230930052629-6c8d555b7d99 h1:mpNRo6zUdHlpZnxiqfF/1ZoiC1SBvnfAYPVbNpZjWfU=
code.rocketnine.space/tslocum/etk v0.0.0-20230930052629-6c8d555b7d99/go.mod h1:WmeSEakGsdgM/dmfUbEQrL5ueFAdoozlwCVUOz8j1mg=
code.rocketnine.space/tslocum/kibodo v1.0.0 h1:/xs59UCuo+NGs89ABilARlowQnmIsjbNVjss57W5O7k=
@ -38,15 +38,15 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/hajimehoshi/bitmapfont/v3 v3.0.0 h1:r2+6gYK38nfztS/et50gHAswb9hXgxXECYgE8Nczmi4=
github.com/hajimehoshi/ebiten/v2 v2.6.0 h1:nh09FUhjNGFVcUUPsx6oTMbD1pHerNvTKPE+494y3cU=
github.com/hajimehoshi/ebiten/v2 v2.6.0/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI=
github.com/hajimehoshi/ebiten/v2 v2.6.2 h1:tVa3ZJbp4Uz/VSjmpgtQIOvwd7aQH290XehHBLr2iWk=
github.com/hajimehoshi/ebiten/v2 v2.6.2/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI=
github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk=
github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.17.1 h1:NE3C767s2ak2bweCZo3+rdP4U/HoyVXLv/X9f2gPS5g=
github.com/klauspost/compress v1.17.1/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/llgcode/draw2d v0.0.0-20230723155556-e595d7c7e75e h1:hqFckor7F0B63l6cV/PoAsuQUOmDji/1oVF0+24EMUI=
@ -68,51 +68,22 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp/shiny v0.0.0-20230905200255-921286631fa9 h1:rvxT0xShhCtCvCCmF3wMK57nkbTYSaf/0Tp7TAllhMs=
golang.org/x/exp/shiny v0.0.0-20230905200255-921286631fa9/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0=
golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ=
golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk=
golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 h1:Q6NT8ckDYNcwmi/bmxe+XbiDMXqMRW1xFBtJ+bIpie4=
golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57/go.mod h1:wEyOn6VvNW7tcf+bW/wBz1sehi2s2BZ4TimyR7qZen4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/exp/shiny v0.0.0-20231006140011-7918f672742d h1:grE48C8cjIY0aiHVmFyYgYxxSARQWBABLXKZfQPrBhY=
golang.org/x/exp/shiny v0.0.0-20231006140011-7918f672742d/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0=
golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe h1:lrXv4yHeD9FA8PSJATWowP1QvexpyAPWmPia+Kbzql8=
golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe/go.mod h1:BrnXpEObnFxpaT75Jo9hsCazwOWcp7nVIa8NNuH5cuA=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=