From 9e60f3ec531fce5de5fdf88703400b1bfb918fa4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 14 Jul 2023 19:00:48 +0000
Subject: [PATCH] fix(deps): update module github.com/vbauerster/mpb/v8 to
 v8.5.1

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
 go.mod                                        |   2 +-
 go.sum                                        |   4 +-
 vendor/github.com/vbauerster/mpb/v8/bar.go    |  68 ++--
 .../vbauerster/mpb/v8/bar_filler.go           |   8 -
 .../vbauerster/mpb/v8/bar_filler_bar.go       | 314 ++++++++++--------
 .../vbauerster/mpb/v8/bar_filler_nop.go       |  10 +-
 .../vbauerster/mpb/v8/bar_filler_spinner.go   |  66 ++--
 .../vbauerster/mpb/v8/bar_option.go           |  11 +-
 .../github.com/vbauerster/mpb/v8/decor/any.go |  13 +-
 .../vbauerster/mpb/v8/decor/decorator.go      |  50 ++-
 .../github.com/vbauerster/mpb/v8/decor/eta.go |   8 +-
 .../vbauerster/mpb/v8/decor/merge.go          | 111 -------
 .../vbauerster/mpb/v8/decor/meta.go           |  34 ++
 .../vbauerster/mpb/v8/decor/on_abort.go       |  62 ++--
 .../vbauerster/mpb/v8/decor/on_complete.go    |  60 +++-
 .../vbauerster/mpb/v8/decor/speed.go          |   8 +-
 .../vbauerster/mpb/v8/decor/spinner.go        |   4 +-
 vendor/modules.txt                            |   2 +-
 18 files changed, 419 insertions(+), 416 deletions(-)
 delete mode 100644 vendor/github.com/vbauerster/mpb/v8/decor/merge.go
 create mode 100644 vendor/github.com/vbauerster/mpb/v8/decor/meta.go

diff --git a/go.mod b/go.mod
index b6058ee85c..d5f58afd18 100644
--- a/go.mod
+++ b/go.mod
@@ -59,7 +59,7 @@ require (
 	github.com/stretchr/testify v1.8.4
 	github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635
 	github.com/ulikunitz/xz v0.5.11
-	github.com/vbauerster/mpb/v8 v8.4.0
+	github.com/vbauerster/mpb/v8 v8.5.1
 	github.com/vishvananda/netlink v1.2.1-beta.2
 	go.etcd.io/bbolt v1.3.7
 	golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
diff --git a/go.sum b/go.sum
index a345c7742a..7f3f2acf6e 100644
--- a/go.sum
+++ b/go.sum
@@ -1008,8 +1008,8 @@ github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN
 github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI=
 github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck=
 github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY=
-github.com/vbauerster/mpb/v8 v8.4.0 h1:Jq2iNA7T6SydpMVOwaT+2OBWlXS9Th8KEvBqeu5eeTo=
-github.com/vbauerster/mpb/v8 v8.4.0/go.mod h1:vjp3hSTuCtR+x98/+2vW3eZ8XzxvGoP8CPseHMhiPyc=
+github.com/vbauerster/mpb/v8 v8.5.1 h1:HVscg+TKXvAMPizij6g1zDR5monCAX9Vifq+VDFp/hE=
+github.com/vbauerster/mpb/v8 v8.5.1/go.mod h1:YqKyR4ZR6Gd34yD3cDHPMmQxc+uUQMwjgO/LkxiJQ6I=
 github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
 github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
 github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar.go b/vendor/github.com/vbauerster/mpb/v8/bar.go
index de780fcac5..a9131a0d09 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar.go
@@ -144,7 +144,13 @@ func (b *Bar) Current() int64 {
 // operation for example.
 func (b *Bar) SetRefill(amount int64) {
 	select {
-	case b.operateState <- func(s *bState) { s.refill = amount }:
+	case b.operateState <- func(s *bState) {
+		if amount < s.current {
+			s.refill = amount
+		} else {
+			s.refill = s.current
+		}
+	}:
 	case <-b.done:
 	}
 }
@@ -497,47 +503,30 @@ func (s *bState) draw(stat decor.Statistics) (io.Reader, error) {
 }
 
 func (s *bState) drawImpl(stat decor.Statistics) (io.Reader, error) {
-	decorFiller := func(buf *bytes.Buffer, decorators []decor.Decorator) (res struct {
-		width    int
-		truncate bool
-		err      error
-	}) {
-		res.width = stat.AvailableWidth
+	decorFiller := func(buf *bytes.Buffer, decorators []decor.Decorator) (err error) {
 		for _, d := range decorators {
-			str := d.Decor(stat)
-			if stat.AvailableWidth > 0 {
-				stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
-				if res.err == nil {
-					_, res.err = buf.WriteString(str)
-				}
+			// need to call Decor in any case becase of width synchronization
+			str, width := d.Decor(stat)
+			if err != nil {
+				continue
+			}
+			if w := stat.AvailableWidth - width; w >= 0 {
+				_, err = buf.WriteString(str)
+				stat.AvailableWidth = w
+			} else if stat.AvailableWidth > 0 {
+				trunc := runewidth.Truncate(stripansi.Strip(str), stat.AvailableWidth, "…")
+				_, err = buf.WriteString(trunc)
+				stat.AvailableWidth = 0
 			}
 		}
-		res.truncate = stat.AvailableWidth < 0
-		return res
+		return err
 	}
 
 	bufP, bufB, bufA := s.buffers[0], s.buffers[1], s.buffers[2]
 
-	resP := decorFiller(bufP, s.pDecorators)
-	resA := decorFiller(bufA, s.aDecorators)
-
-	for _, err := range []error{resP.err, resA.err} {
-		if err != nil {
-			return nil, err
-		}
-	}
-
-	if resP.truncate {
-		trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufP.String()), resP.width, "…"))
-		bufP.Reset()
-		bufA.Reset()
-		return trunc, nil
-	}
-
-	if resA.truncate {
-		trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufA.String()), resA.width, "…"))
-		bufA.Reset()
-		return io.MultiReader(bufP, trunc), nil
+	err := eitherError(decorFiller(bufP, s.pDecorators), decorFiller(bufA, s.aDecorators))
+	if err != nil {
+		return nil, err
 	}
 
 	if !s.trimSpace && stat.AvailableWidth >= 2 {
@@ -662,3 +651,12 @@ func unwrap(d decor.Decorator) decor.Decorator {
 func writeSpace(buf *bytes.Buffer) error {
 	return buf.WriteByte(' ')
 }
+
+func eitherError(errors ...error) error {
+	for _, err := range errors {
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar_filler.go b/vendor/github.com/vbauerster/mpb/v8/bar_filler.go
index 5ac343c7db..379cfeaba5 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar_filler.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar_filler.go
@@ -29,11 +29,3 @@ type BarFillerFunc func(io.Writer, decor.Statistics) error
 func (f BarFillerFunc) Fill(w io.Writer, stat decor.Statistics) error {
 	return f(w, stat)
 }
-
-// BarFillerBuilderFunc is function type adapter to convert compatible
-// function into BarFillerBuilder interface.
-type BarFillerBuilderFunc func() BarFiller
-
-func (f BarFillerBuilderFunc) Build() BarFiller {
-	return f()
-}
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar_filler_bar.go b/vendor/github.com/vbauerster/mpb/v8/bar_filler_bar.go
index 1db8f0b4b7..5d7837ad9b 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar_filler_bar.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar_filler_bar.go
@@ -3,7 +3,6 @@ package mpb
 import (
 	"io"
 
-	"github.com/acarl005/stripansi"
 	"github.com/mattn/go-runewidth"
 	"github.com/vbauerster/mpb/v8/decor"
 	"github.com/vbauerster/mpb/v8/internal"
@@ -12,143 +11,209 @@ import (
 const (
 	iLbound = iota
 	iRbound
-	iFiller
 	iRefiller
+	iFiller
+	iTip
 	iPadding
 	components
 )
 
+var defaultBarStyle = [components]string{"[", "]", "+", "=", ">", "-"}
+
 // BarStyleComposer interface.
 type BarStyleComposer interface {
 	BarFillerBuilder
 	Lbound(string) BarStyleComposer
+	LboundMeta(func(string) string) BarStyleComposer
 	Rbound(string) BarStyleComposer
+	RboundMeta(func(string) string) BarStyleComposer
 	Filler(string) BarStyleComposer
+	FillerMeta(func(string) string) BarStyleComposer
 	Refiller(string) BarStyleComposer
+	RefillerMeta(func(string) string) BarStyleComposer
 	Padding(string) BarStyleComposer
-	TipOnComplete(string) BarStyleComposer
+	PaddingMeta(func(string) string) BarStyleComposer
 	Tip(frames ...string) BarStyleComposer
+	TipMeta(func(string) string) BarStyleComposer
+	TipOnComplete() BarStyleComposer
 	Reverse() BarStyleComposer
 }
 
-type bFiller struct {
-	rev        bool
-	components [components]*component
-	tip        struct {
-		count      uint
-		frames     []*component
-		onComplete *component
-	}
-}
-
 type component struct {
 	width int
 	bytes []byte
 }
 
+type flushSection struct {
+	meta  func(io.Writer, []byte) error
+	bytes []byte
+}
+
+type bFiller struct {
+	components    [components]component
+	meta          [components]func(io.Writer, []byte) error
+	flush         func(io.Writer, ...flushSection) error
+	tipOnComplete bool
+	tip           struct {
+		frames []component
+		count  uint
+	}
+}
+
 type barStyle struct {
-	lbound        string
-	rbound        string
-	filler        string
-	refiller      string
-	padding       string
-	tipOnComplete string
+	style         [components]string
+	metaFuncs     [components]func(io.Writer, []byte) error
 	tipFrames     []string
+	tipOnComplete bool
 	rev           bool
 }
 
 // BarStyle constructs default bar style which can be altered via
 // BarStyleComposer interface.
 func BarStyle() BarStyleComposer {
-	return &barStyle{
-		lbound:    "[",
-		rbound:    "]",
-		filler:    "=",
-		refiller:  "+",
-		padding:   "-",
-		tipFrames: []string{">"},
+	bs := barStyle{
+		style:     defaultBarStyle,
+		tipFrames: []string{defaultBarStyle[iTip]},
 	}
+	for i := range bs.metaFuncs {
+		bs.metaFuncs[i] = defaultMeta
+	}
+	return bs
 }
 
-func (s *barStyle) Lbound(bound string) BarStyleComposer {
-	s.lbound = bound
+func (s barStyle) Lbound(bound string) BarStyleComposer {
+	s.style[iLbound] = bound
 	return s
 }
 
-func (s *barStyle) Rbound(bound string) BarStyleComposer {
-	s.rbound = bound
+func (s barStyle) LboundMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iLbound] = makeMetaFunc(fn)
 	return s
 }
 
-func (s *barStyle) Filler(filler string) BarStyleComposer {
-	s.filler = filler
+func (s barStyle) Rbound(bound string) BarStyleComposer {
+	s.style[iRbound] = bound
 	return s
 }
 
-func (s *barStyle) Refiller(refiller string) BarStyleComposer {
-	s.refiller = refiller
+func (s barStyle) RboundMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iRbound] = makeMetaFunc(fn)
 	return s
 }
 
-func (s *barStyle) Padding(padding string) BarStyleComposer {
-	s.padding = padding
+func (s barStyle) Filler(filler string) BarStyleComposer {
+	s.style[iFiller] = filler
 	return s
 }
 
-func (s *barStyle) TipOnComplete(tip string) BarStyleComposer {
-	s.tipOnComplete = tip
+func (s barStyle) FillerMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iFiller] = makeMetaFunc(fn)
 	return s
 }
 
-func (s *barStyle) Tip(frames ...string) BarStyleComposer {
+func (s barStyle) Refiller(refiller string) BarStyleComposer {
+	s.style[iRefiller] = refiller
+	return s
+}
+
+func (s barStyle) RefillerMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iRefiller] = makeMetaFunc(fn)
+	return s
+}
+
+func (s barStyle) Padding(padding string) BarStyleComposer {
+	s.style[iPadding] = padding
+	return s
+}
+
+func (s barStyle) PaddingMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iPadding] = makeMetaFunc(fn)
+	return s
+}
+
+func (s barStyle) Tip(frames ...string) BarStyleComposer {
 	if len(frames) != 0 {
-		s.tipFrames = append(s.tipFrames[:0], frames...)
+		s.tipFrames = frames
 	}
 	return s
 }
 
-func (s *barStyle) Reverse() BarStyleComposer {
+func (s barStyle) TipMeta(fn func(string) string) BarStyleComposer {
+	s.metaFuncs[iTip] = makeMetaFunc(fn)
+	return s
+}
+
+func (s barStyle) TipOnComplete() BarStyleComposer {
+	s.tipOnComplete = true
+	return s
+}
+
+func (s barStyle) Reverse() BarStyleComposer {
 	s.rev = true
 	return s
 }
 
-func (s *barStyle) Build() BarFiller {
-	bf := &bFiller{rev: s.rev}
-	bf.components[iLbound] = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.lbound)),
-		bytes: []byte(s.lbound),
+func (s barStyle) Build() BarFiller {
+	bf := &bFiller{
+		meta:          s.metaFuncs,
+		tipOnComplete: s.tipOnComplete,
 	}
-	bf.components[iRbound] = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.rbound)),
-		bytes: []byte(s.rbound),
+	bf.components[iLbound] = component{
+		width: runewidth.StringWidth(s.style[iLbound]),
+		bytes: []byte(s.style[iLbound]),
 	}
-	bf.components[iFiller] = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.filler)),
-		bytes: []byte(s.filler),
+	bf.components[iRbound] = component{
+		width: runewidth.StringWidth(s.style[iRbound]),
+		bytes: []byte(s.style[iRbound]),
 	}
-	bf.components[iRefiller] = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.refiller)),
-		bytes: []byte(s.refiller),
+	bf.components[iFiller] = component{
+		width: runewidth.StringWidth(s.style[iFiller]),
+		bytes: []byte(s.style[iFiller]),
 	}
-	bf.components[iPadding] = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.padding)),
-		bytes: []byte(s.padding),
+	bf.components[iRefiller] = component{
+		width: runewidth.StringWidth(s.style[iRefiller]),
+		bytes: []byte(s.style[iRefiller]),
 	}
-	bf.tip.onComplete = &component{
-		width: runewidth.StringWidth(stripansi.Strip(s.tipOnComplete)),
-		bytes: []byte(s.tipOnComplete),
+	bf.components[iPadding] = component{
+		width: runewidth.StringWidth(s.style[iPadding]),
+		bytes: []byte(s.style[iPadding]),
 	}
-	bf.tip.frames = make([]*component, len(s.tipFrames))
+	bf.tip.frames = make([]component, len(s.tipFrames))
 	for i, t := range s.tipFrames {
-		bf.tip.frames[i] = &component{
-			width: runewidth.StringWidth(stripansi.Strip(t)),
+		bf.tip.frames[i] = component{
+			width: runewidth.StringWidth(t),
 			bytes: []byte(t),
 		}
 	}
+	if s.rev {
+		bf.flush = func(w io.Writer, sections ...flushSection) error {
+			for i := len(sections) - 1; i >= 0; i-- {
+				if s := sections[i]; len(s.bytes) != 0 {
+					err := s.meta(w, s.bytes)
+					if err != nil {
+						return err
+					}
+				}
+			}
+			return nil
+		}
+	} else {
+		bf.flush = func(w io.Writer, sections ...flushSection) error {
+			for _, s := range sections {
+				if len(s.bytes) != 0 {
+					err := s.meta(w, s.bytes)
+					if err != nil {
+						return err
+					}
+				}
+			}
+			return nil
+		}
+	}
 	return bf
 }
 
-func (s *bFiller) Fill(w io.Writer, stat decor.Statistics) (err error) {
+func (s *bFiller) Fill(w io.Writer, stat decor.Statistics) error {
 	width := internal.CheckRequestedWidth(stat.RequestedWidth, stat.AvailableWidth)
 	// don't count brackets as progress
 	width -= (s.components[iLbound].width + s.components[iRbound].width)
@@ -156,104 +221,71 @@ func (s *bFiller) Fill(w io.Writer, stat decor.Statistics) (err error) {
 		return nil
 	}
 
-	_, err = w.Write(s.components[iLbound].bytes)
+	err := s.meta[iLbound](w, s.components[iLbound].bytes)
 	if err != nil {
 		return err
 	}
 
 	if width == 0 {
-		_, err = w.Write(s.components[iRbound].bytes)
-		return err
+		return s.meta[iRbound](w, s.components[iRbound].bytes)
 	}
 
-	var filling [][]byte
-	var padding [][]byte
-	var tip *component
-	var filled int
-	var refWidth int
+	var tip component
+	var refilling, filling, padding []byte
+	var fillCount int
 	curWidth := int(internal.PercentageRound(stat.Total, stat.Current, uint(width)))
 
-	if stat.Completed {
-		tip = s.tip.onComplete
-	} else {
-		tip = s.tip.frames[s.tip.count%uint(len(s.tip.frames))]
-	}
-
-	if curWidth > 0 {
-		filling = append(filling, tip.bytes)
-		filled += tip.width
-		s.tip.count++
-	}
-
-	if stat.Refill > 0 {
-		refWidth = int(internal.PercentageRound(stat.Total, stat.Refill, uint(width)))
-		curWidth -= refWidth
-		refWidth += curWidth
-	}
-
-	for filled < curWidth {
-		if curWidth-filled >= s.components[iFiller].width {
-			filling = append(filling, s.components[iFiller].bytes)
-			if s.components[iFiller].width == 0 {
-				break
+	if curWidth != 0 {
+		if !stat.Completed || s.tipOnComplete {
+			tip = s.tip.frames[s.tip.count%uint(len(s.tip.frames))]
+			s.tip.count++
+			fillCount += tip.width
+		}
+		if stat.Refill != 0 {
+			refWidth := int(internal.PercentageRound(stat.Total, stat.Refill, uint(width)))
+			curWidth -= refWidth
+			refWidth += curWidth
+			for w := s.components[iFiller].width; curWidth-fillCount >= w; fillCount += w {
+				filling = append(filling, s.components[iFiller].bytes...)
+			}
+			for w := s.components[iRefiller].width; refWidth-fillCount >= w; fillCount += w {
+				refilling = append(refilling, s.components[iRefiller].bytes...)
 			}
-			filled += s.components[iFiller].width
 		} else {
-			filling = append(filling, []byte("…"))
-			filled++
+			for w := s.components[iFiller].width; curWidth-fillCount >= w; fillCount += w {
+				filling = append(filling, s.components[iFiller].bytes...)
+			}
 		}
 	}
 
-	for filled < refWidth {
-		if refWidth-filled >= s.components[iRefiller].width {
-			filling = append(filling, s.components[iRefiller].bytes)
-			if s.components[iRefiller].width == 0 {
-				break
-			}
-			filled += s.components[iRefiller].width
-		} else {
-			filling = append(filling, []byte("…"))
-			filled++
-		}
+	for w := s.components[iPadding].width; width-fillCount >= w; fillCount += w {
+		padding = append(padding, s.components[iPadding].bytes...)
 	}
 
-	padWidth := width - filled
-	for padWidth > 0 {
-		if padWidth >= s.components[iPadding].width {
-			padding = append(padding, s.components[iPadding].bytes)
-			if s.components[iPadding].width == 0 {
-				break
-			}
-			padWidth -= s.components[iPadding].width
-		} else {
-			padding = append(padding, []byte("…"))
-			padWidth--
-		}
+	for w := 1; width-fillCount >= w; fillCount += w {
+		padding = append(padding, "…"...)
 	}
 
-	if s.rev {
-		filling, padding = padding, filling
-	}
-	err = flush(w, filling, padding)
+	err = s.flush(w,
+		flushSection{s.meta[iRefiller], refilling},
+		flushSection{s.meta[iFiller], filling},
+		flushSection{s.meta[iTip], tip.bytes},
+		flushSection{s.meta[iPadding], padding},
+	)
 	if err != nil {
 		return err
 	}
-	_, err = w.Write(s.components[iRbound].bytes)
-	return err
+	return s.meta[iRbound](w, s.components[iRbound].bytes)
 }
 
-func flush(w io.Writer, filling, padding [][]byte) error {
-	for i := len(filling) - 1; i >= 0; i-- {
-		_, err := w.Write(filling[i])
-		if err != nil {
-			return err
-		}
+func makeMetaFunc(fn func(string) string) func(io.Writer, []byte) error {
+	return func(w io.Writer, p []byte) (err error) {
+		_, err = io.WriteString(w, fn(string(p)))
+		return err
 	}
-	for i := 0; i < len(padding); i++ {
-		_, err := w.Write(padding[i])
-		if err != nil {
-			return err
-		}
-	}
-	return nil
+}
+
+func defaultMeta(w io.Writer, p []byte) (err error) {
+	_, err = w.Write(p)
+	return err
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar_filler_nop.go b/vendor/github.com/vbauerster/mpb/v8/bar_filler_nop.go
index f7947f1dc8..a23c61b7db 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar_filler_nop.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar_filler_nop.go
@@ -6,9 +6,17 @@ import (
 	"github.com/vbauerster/mpb/v8/decor"
 )
 
+// barFillerBuilderFunc is function type adapter to convert compatible
+// function into BarFillerBuilder interface.
+type barFillerBuilderFunc func() BarFiller
+
+func (f barFillerBuilderFunc) Build() BarFiller {
+	return f()
+}
+
 // NopStyle provides BarFillerBuilder which builds NOP BarFiller.
 func NopStyle() BarFillerBuilder {
-	return BarFillerBuilderFunc(func() BarFiller {
+	return barFillerBuilderFunc(func() BarFiller {
 		return BarFillerFunc(func(io.Writer, decor.Statistics) error {
 			return nil
 		})
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar_filler_spinner.go b/vendor/github.com/vbauerster/mpb/v8/bar_filler_spinner.go
index a28470d6e8..fcd4353a05 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar_filler_spinner.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar_filler_spinner.go
@@ -1,10 +1,10 @@
 package mpb
 
 import (
+	"fmt"
 	"io"
 	"strings"
 
-	"github.com/acarl005/stripansi"
 	"github.com/mattn/go-runewidth"
 	"github.com/vbauerster/mpb/v8/decor"
 	"github.com/vbauerster/mpb/v8/internal"
@@ -15,74 +15,90 @@ const (
 	positionRight
 )
 
+var defaultSpinnerStyle = [...]string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}
+
 // SpinnerStyleComposer interface.
 type SpinnerStyleComposer interface {
 	BarFillerBuilder
 	PositionLeft() SpinnerStyleComposer
 	PositionRight() SpinnerStyleComposer
+	Meta(func(string) string) SpinnerStyleComposer
 }
 
 type sFiller struct {
-	count    uint
-	position uint
 	frames   []string
+	count    uint
+	meta     func(string) string
+	position func(string, int) string
 }
 
 type spinnerStyle struct {
 	position uint
 	frames   []string
+	meta     func(string) string
 }
 
 // SpinnerStyle constructs default spinner style which can be altered via
 // SpinnerStyleComposer interface.
 func SpinnerStyle(frames ...string) SpinnerStyleComposer {
-	ss := new(spinnerStyle)
+	ss := spinnerStyle{
+		meta: func(s string) string { return s },
+	}
 	if len(frames) != 0 {
-		ss.frames = append(ss.frames, frames...)
+		ss.frames = frames
 	} else {
-		ss.frames = []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}
+		ss.frames = defaultSpinnerStyle[:]
 	}
 	return ss
 }
 
-func (s *spinnerStyle) PositionLeft() SpinnerStyleComposer {
+func (s spinnerStyle) PositionLeft() SpinnerStyleComposer {
 	s.position = positionLeft
 	return s
 }
 
-func (s *spinnerStyle) PositionRight() SpinnerStyleComposer {
+func (s spinnerStyle) PositionRight() SpinnerStyleComposer {
 	s.position = positionRight
 	return s
 }
 
-func (s *spinnerStyle) Build() BarFiller {
+func (s spinnerStyle) Meta(fn func(string) string) SpinnerStyleComposer {
+	s.meta = fn
+	return s
+}
+
+func (s spinnerStyle) Build() BarFiller {
 	sf := &sFiller{
-		position: s.position,
-		frames:   s.frames,
+		frames: s.frames,
+		meta:   s.meta,
+	}
+	switch s.position {
+	case positionLeft:
+		sf.position = func(frame string, padWidth int) string {
+			return fmt.Sprint(frame, strings.Repeat(" ", padWidth))
+		}
+	case positionRight:
+		sf.position = func(frame string, padWidth int) string {
+			return fmt.Sprint(strings.Repeat(" ", padWidth), frame)
+		}
+	default:
+		sf.position = func(frame string, padWidth int) string {
+			return fmt.Sprint(strings.Repeat(" ", padWidth/2), frame, strings.Repeat(" ", padWidth/2+padWidth%2))
+		}
 	}
 	return sf
 }
 
-func (s *sFiller) Fill(w io.Writer, stat decor.Statistics) (err error) {
+func (s *sFiller) Fill(w io.Writer, stat decor.Statistics) error {
 	width := internal.CheckRequestedWidth(stat.RequestedWidth, stat.AvailableWidth)
-
 	frame := s.frames[s.count%uint(len(s.frames))]
-	frameWidth := runewidth.StringWidth(stripansi.Strip(frame))
+	frameWidth := runewidth.StringWidth(frame)
+	s.count++
 
 	if width < frameWidth {
 		return nil
 	}
 
-	rest := width - frameWidth
-	switch s.position {
-	case positionLeft:
-		_, err = io.WriteString(w, frame+strings.Repeat(" ", rest))
-	case positionRight:
-		_, err = io.WriteString(w, strings.Repeat(" ", rest)+frame)
-	default:
-		str := strings.Repeat(" ", rest/2) + frame + strings.Repeat(" ", rest/2+rest%2)
-		_, err = io.WriteString(w, str)
-	}
-	s.count++
+	_, err := io.WriteString(w, s.position(s.meta(frame), width-frameWidth))
 	return err
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/bar_option.go b/vendor/github.com/vbauerster/mpb/v8/bar_option.go
index 024f2e1081..d3cb3e2c0b 100644
--- a/vendor/github.com/vbauerster/mpb/v8/bar_option.go
+++ b/vendor/github.com/vbauerster/mpb/v8/bar_option.go
@@ -15,11 +15,6 @@ func inspect(decorators []decor.Decorator) (dest []decor.Decorator) {
 		if decorator == nil {
 			continue
 		}
-		if d, ok := decorator.(interface {
-			PlaceHolders() []decor.Decorator
-		}); ok {
-			dest = append(dest, d.PlaceHolders()...)
-		}
 		dest = append(dest, decorator)
 	}
 	return
@@ -93,10 +88,10 @@ func BarFillerOnComplete(message string) BarOption {
 
 // BarFillerMiddleware provides a way to augment the underlying BarFiller.
 func BarFillerMiddleware(middle func(BarFiller) BarFiller) BarOption {
+	if middle == nil {
+		return nil
+	}
 	return func(s *bState) {
-		if middle == nil {
-			return
-		}
 		s.filler = middle(s.filler)
 	}
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/any.go b/vendor/github.com/vbauerster/mpb/v8/decor/any.go
index 23ad75e940..ca208d8acd 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/any.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/any.go
@@ -1,15 +1,14 @@
 package decor
 
-var _ Decorator = (*any)(nil)
+var _ Decorator = any{}
 
-// Any decorator displays text, that can be changed during decorator's
-// lifetime via provided DecorFunc.
+// Any decorator.
+// Converts DecorFunc into Decorator.
 //
 //	`fn` DecorFunc callback
-//
 //	`wcc` optional WC config
 func Any(fn DecorFunc, wcc ...WC) Decorator {
-	return &any{initWC(wcc...), fn}
+	return any{initWC(wcc...), fn}
 }
 
 type any struct {
@@ -17,6 +16,6 @@ type any struct {
 	fn DecorFunc
 }
 
-func (d *any) Decor(s Statistics) string {
-	return d.FormatMsg(d.fn(s))
+func (d any) Decor(s Statistics) (string, int) {
+	return d.Format(d.fn(s))
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/decorator.go b/vendor/github.com/vbauerster/mpb/v8/decor/decorator.go
index 9e69757121..f537d3f7af 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/decorator.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/decorator.go
@@ -4,14 +4,14 @@ import (
 	"fmt"
 	"time"
 
-	"github.com/acarl005/stripansi"
 	"github.com/mattn/go-runewidth"
 )
 
 const (
 	// DidentRight bit specifies identation direction.
-	// |foo   |b     | With DidentRight
-	// |   foo|     b| Without DidentRight
+	//
+	//	|foo   |b     | With DidentRight
+	//	|   foo|     b| Without DidentRight
 	DidentRight = 1 << iota
 
 	// DextraSpace bit adds extra space, makes sense with DSyncWidth only.
@@ -66,13 +66,13 @@ type Statistics struct {
 // `DecorFunc` into a `Decorator` interface by using provided
 // `func Any(DecorFunc, ...WC) Decorator`.
 type Decorator interface {
-	Configurator
 	Synchronizer
-	Decor(Statistics) string
+	Formatter
+	Decor(Statistics) (str string, viewWidth int)
 }
 
 // DecorFunc func type.
-// To be used with `func Any`(DecorFunc, ...WC) Decorator`.
+// To be used with `func Any(DecorFunc, ...WC) Decorator`.
 type DecorFunc func(Statistics) string
 
 // Synchronizer interface.
@@ -82,10 +82,12 @@ type Synchronizer interface {
 	Sync() (chan int, bool)
 }
 
-// Configurator interface.
-type Configurator interface {
-	GetConf() WC
-	SetConf(WC)
+// Formatter interface.
+// Format method needs to be called from within Decorator.Decor method
+// in order to format string according to decor.WC settings.
+// No need to implement manually as long as decor.WC is embedded.
+type Formatter interface {
+	Format(string) (str string, viewWidth int)
 }
 
 // Wrapper interface.
@@ -135,21 +137,21 @@ type WC struct {
 	wsync chan int
 }
 
-// FormatMsg formats final message according to WC.W and WC.C.
-// Should be called by any Decorator implementation.
-func (wc WC) FormatMsg(msg string) string {
-	pureWidth := runewidth.StringWidth(msg)
-	viewWidth := runewidth.StringWidth(stripansi.Strip(msg))
-	max := wc.W
+// Format should be called by any Decorator implementation.
+// Returns formatted string and its view (visual) width.
+func (wc WC) Format(str string) (string, int) {
+	viewWidth := runewidth.StringWidth(str)
+	if wc.W > viewWidth {
+		viewWidth = wc.W
+	}
 	if (wc.C & DSyncWidth) != 0 {
-		viewWidth := viewWidth
 		if (wc.C & DextraSpace) != 0 {
 			viewWidth++
 		}
 		wc.wsync <- viewWidth
-		max = <-wc.wsync
+		viewWidth = <-wc.wsync
 	}
-	return wc.fill(msg, max-viewWidth+pureWidth)
+	return wc.fill(str, viewWidth), viewWidth
 }
 
 // Init initializes width related config.
@@ -175,16 +177,6 @@ func (wc WC) Sync() (chan int, bool) {
 	return wc.wsync, (wc.C & DSyncWidth) != 0
 }
 
-// GetConf is implementation of Configurator interface.
-func (wc *WC) GetConf() WC {
-	return *wc
-}
-
-// SetConf is implementation of Configurator interface.
-func (wc *WC) SetConf(conf WC) {
-	*wc = conf.Init()
-}
-
 func initWC(wcc ...WC) WC {
 	var wc WC
 	for _, nwc := range wcc {
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/eta.go b/vendor/github.com/vbauerster/mpb/v8/decor/eta.go
index e33631dabc..ecb6f8f926 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/eta.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/eta.go
@@ -68,13 +68,13 @@ type movingAverageETA struct {
 	producer   func(time.Duration) string
 }
 
-func (d *movingAverageETA) Decor(s Statistics) string {
+func (d *movingAverageETA) Decor(s Statistics) (string, int) {
 	v := math.Round(d.average.Value())
 	remaining := time.Duration((s.Total - s.Current) * int64(v))
 	if d.normalizer != nil {
 		remaining = d.normalizer.Normalize(remaining)
 	}
-	return d.FormatMsg(d.producer(remaining))
+	return d.Format(d.producer(remaining))
 }
 
 func (d *movingAverageETA) EwmaUpdate(n int64, dur time.Duration) {
@@ -120,7 +120,7 @@ type averageETA struct {
 	producer   func(time.Duration) string
 }
 
-func (d *averageETA) Decor(s Statistics) string {
+func (d *averageETA) Decor(s Statistics) (string, int) {
 	var remaining time.Duration
 	if s.Current != 0 {
 		durPerItem := float64(time.Since(d.startTime)) / float64(s.Current)
@@ -130,7 +130,7 @@ func (d *averageETA) Decor(s Statistics) string {
 			remaining = d.normalizer.Normalize(remaining)
 		}
 	}
-	return d.FormatMsg(d.producer(remaining))
+	return d.Format(d.producer(remaining))
 }
 
 func (d *averageETA) AverageAdjust(startTime time.Time) {
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/merge.go b/vendor/github.com/vbauerster/mpb/v8/decor/merge.go
deleted file mode 100644
index 02b7a9308f..0000000000
--- a/vendor/github.com/vbauerster/mpb/v8/decor/merge.go
+++ /dev/null
@@ -1,111 +0,0 @@
-package decor
-
-import (
-	"strings"
-
-	"github.com/acarl005/stripansi"
-	"github.com/mattn/go-runewidth"
-)
-
-var (
-	_ Decorator = (*mergeDecorator)(nil)
-	_ Wrapper   = (*mergeDecorator)(nil)
-	_ Decorator = (*placeHolderDecorator)(nil)
-)
-
-// Merge wraps its decorator argument with intention to sync width
-// with several decorators of another bar. Visual example:
-//
-//	+----+--------+---------+--------+
-//	| B1 |      MERGE(D, P1, Pn)     |
-//	+----+--------+---------+--------+
-//	| B2 |   D0   |   D1    |   Dn   |
-//	+----+--------+---------+--------+
-func Merge(decorator Decorator, placeholders ...WC) Decorator {
-	if decorator == nil {
-		return nil
-	}
-	if _, ok := decorator.Sync(); !ok || len(placeholders) == 0 {
-		return decorator
-	}
-	md := &mergeDecorator{
-		Decorator:    decorator,
-		wc:           decorator.GetConf(),
-		placeHolders: make([]Decorator, len(placeholders)),
-	}
-	decorator.SetConf(WC{})
-	for i, wc := range placeholders {
-		if (wc.C & DSyncWidth) == 0 {
-			return decorator
-		}
-		md.placeHolders[i] = &placeHolderDecorator{wc.Init()}
-	}
-	return md
-}
-
-type mergeDecorator struct {
-	Decorator
-	wc           WC
-	placeHolders []Decorator
-}
-
-func (d *mergeDecorator) GetConf() WC {
-	return d.wc
-}
-
-func (d *mergeDecorator) SetConf(conf WC) {
-	d.wc = conf.Init()
-}
-
-func (d *mergeDecorator) PlaceHolders() []Decorator {
-	return d.placeHolders
-}
-
-func (d *mergeDecorator) Sync() (chan int, bool) {
-	return d.wc.Sync()
-}
-
-func (d *mergeDecorator) Unwrap() Decorator {
-	return d.Decorator
-}
-
-func (d *mergeDecorator) Decor(s Statistics) string {
-	msg := d.Decorator.Decor(s)
-	pureWidth := runewidth.StringWidth(msg)
-	stripWidth := runewidth.StringWidth(stripansi.Strip(msg))
-	cellCount := stripWidth
-	if (d.wc.C & DextraSpace) != 0 {
-		cellCount++
-	}
-
-	total := runewidth.StringWidth(d.placeHolders[0].GetConf().FormatMsg(""))
-	pw := (cellCount - total) / len(d.placeHolders)
-	rem := (cellCount - total) % len(d.placeHolders)
-
-	var diff int
-	for i := 1; i < len(d.placeHolders); i++ {
-		wc := d.placeHolders[i].GetConf()
-		width := pw - diff
-		if (wc.C & DextraSpace) != 0 {
-			width--
-			if width < 0 {
-				width = 0
-			}
-		}
-		max := runewidth.StringWidth(wc.FormatMsg(strings.Repeat(" ", width)))
-		total += max
-		diff = max - pw
-	}
-
-	d.wc.wsync <- pw + rem
-	max := <-d.wc.wsync
-	return d.wc.fill(msg, max+total+(pureWidth-stripWidth))
-}
-
-type placeHolderDecorator struct {
-	WC
-}
-
-func (d *placeHolderDecorator) Decor(Statistics) string {
-	return ""
-}
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/meta.go b/vendor/github.com/vbauerster/mpb/v8/decor/meta.go
new file mode 100644
index 0000000000..0045a31f4b
--- /dev/null
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/meta.go
@@ -0,0 +1,34 @@
+package decor
+
+var (
+	_ Decorator = metaWrapper{}
+	_ Wrapper   = metaWrapper{}
+)
+
+// Meta wrap decorator.
+// Provided fn is supposed to wrap output of given decorator
+// with meta information like ANSI escape codes for example.
+// Primary usage intention is to set SGR display attributes.
+//
+//	`decorator` Decorator to wrap
+//	`fn` func to apply meta information
+func Meta(decorator Decorator, fn func(string) string) Decorator {
+	if decorator == nil {
+		return nil
+	}
+	return metaWrapper{decorator, fn}
+}
+
+type metaWrapper struct {
+	Decorator
+	fn func(string) string
+}
+
+func (d metaWrapper) Decor(s Statistics) (string, int) {
+	str, width := d.Decorator.Decor(s)
+	return d.fn(str), width
+}
+
+func (d metaWrapper) Unwrap() Decorator {
+	return d.Decorator
+}
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/on_abort.go b/vendor/github.com/vbauerster/mpb/v8/decor/on_abort.go
index 65a8d9daec..50a1dfbb5d 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/on_abort.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/on_abort.go
@@ -1,30 +1,23 @@
 package decor
 
 var (
-	_ Decorator = (*onAbortWrapper)(nil)
-	_ Wrapper   = (*onAbortWrapper)(nil)
+	_ Decorator = onAbortWrapper{}
+	_ Wrapper   = onAbortWrapper{}
+	_ Decorator = onAbortMetaWrapper{}
+	_ Wrapper   = onAbortMetaWrapper{}
 )
 
-// OnAbort returns decorator, which wraps provided decorator with sole
-// purpose to display provided message on abort event. It has no effect
-// if bar.Abort(drop bool) is called with true argument.
+// OnAbort wrap decorator.
+// Displays provided message on abort event.
+// Has no effect if bar.Abort(true) is called.
 //
 //	`decorator` Decorator to wrap
-//
-//	`message` message to display on abort event
+//	`message` message to display
 func OnAbort(decorator Decorator, message string) Decorator {
 	if decorator == nil {
 		return nil
 	}
-	d := &onAbortWrapper{
-		Decorator: decorator,
-		msg:       message,
-	}
-	if md, ok := decorator.(*mergeDecorator); ok {
-		d.Decorator, md.Decorator = md.Decorator, d
-		return md
-	}
-	return d
+	return onAbortWrapper{decorator, message}
 }
 
 type onAbortWrapper struct {
@@ -32,13 +25,44 @@ type onAbortWrapper struct {
 	msg string
 }
 
-func (d *onAbortWrapper) Decor(s Statistics) string {
+func (d onAbortWrapper) Decor(s Statistics) (string, int) {
 	if s.Aborted {
-		return d.GetConf().FormatMsg(d.msg)
+		return d.Format(d.msg)
 	}
 	return d.Decorator.Decor(s)
 }
 
-func (d *onAbortWrapper) Unwrap() Decorator {
+func (d onAbortWrapper) Unwrap() Decorator {
+	return d.Decorator
+}
+
+// OnAbortMeta wrap decorator.
+// Provided fn is supposed to wrap output of given decorator
+// with meta information like ANSI escape codes for example.
+// Primary usage intention is to set SGR display attributes.
+//
+//	`decorator` Decorator to wrap
+//	`fn` func to apply meta information
+func OnAbortMeta(decorator Decorator, fn func(string) string) Decorator {
+	if decorator == nil {
+		return nil
+	}
+	return onAbortMetaWrapper{decorator, fn}
+}
+
+type onAbortMetaWrapper struct {
+	Decorator
+	fn func(string) string
+}
+
+func (d onAbortMetaWrapper) Decor(s Statistics) (string, int) {
+	if s.Completed {
+		str, width := d.Decorator.Decor(s)
+		return d.fn(str), width
+	}
+	return d.Decorator.Decor(s)
+}
+
+func (d onAbortMetaWrapper) Unwrap() Decorator {
 	return d.Decorator
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/on_complete.go b/vendor/github.com/vbauerster/mpb/v8/decor/on_complete.go
index 0a3897b818..f18b5a60c1 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/on_complete.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/on_complete.go
@@ -1,29 +1,22 @@
 package decor
 
 var (
-	_ Decorator = (*onCompleteWrapper)(nil)
-	_ Wrapper   = (*onCompleteWrapper)(nil)
+	_ Decorator = onCompleteWrapper{}
+	_ Wrapper   = onCompleteWrapper{}
+	_ Decorator = onCompleteMetaWrapper{}
+	_ Wrapper   = onCompleteMetaWrapper{}
 )
 
-// OnComplete returns decorator, which wraps provided decorator with
-// sole purpose to display provided message on complete event.
+// OnComplete wrap decorator.
+// Displays provided message on complete event.
 //
 //	`decorator` Decorator to wrap
-//
-//	`message` message to display on complete event
+//	`message` message to display
 func OnComplete(decorator Decorator, message string) Decorator {
 	if decorator == nil {
 		return nil
 	}
-	d := &onCompleteWrapper{
-		Decorator: decorator,
-		msg:       message,
-	}
-	if md, ok := decorator.(*mergeDecorator); ok {
-		d.Decorator, md.Decorator = md.Decorator, d
-		return md
-	}
-	return d
+	return onCompleteWrapper{decorator, message}
 }
 
 type onCompleteWrapper struct {
@@ -31,13 +24,44 @@ type onCompleteWrapper struct {
 	msg string
 }
 
-func (d *onCompleteWrapper) Decor(s Statistics) string {
+func (d onCompleteWrapper) Decor(s Statistics) (string, int) {
 	if s.Completed {
-		return d.GetConf().FormatMsg(d.msg)
+		return d.Format(d.msg)
 	}
 	return d.Decorator.Decor(s)
 }
 
-func (d *onCompleteWrapper) Unwrap() Decorator {
+func (d onCompleteWrapper) Unwrap() Decorator {
+	return d.Decorator
+}
+
+// OnCompleteMeta wrap decorator.
+// Provided fn is supposed to wrap output of given decorator
+// with meta information like ANSI escape codes for example.
+// Primary usage intention is to set SGR display attributes.
+//
+//	`decorator` Decorator to wrap
+//	`fn` func to apply meta information
+func OnCompleteMeta(decorator Decorator, fn func(string) string) Decorator {
+	if decorator == nil {
+		return nil
+	}
+	return onCompleteMetaWrapper{decorator, fn}
+}
+
+type onCompleteMetaWrapper struct {
+	Decorator
+	fn func(string) string
+}
+
+func (d onCompleteMetaWrapper) Decor(s Statistics) (string, int) {
+	if s.Completed {
+		str, width := d.Decorator.Decor(s)
+		return d.fn(str), width
+	}
+	return d.Decorator.Decor(s)
+}
+
+func (d onCompleteMetaWrapper) Unwrap() Decorator {
 	return d.Decorator
 }
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/speed.go b/vendor/github.com/vbauerster/mpb/v8/decor/speed.go
index d4f644704f..5879d06042 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/speed.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/speed.go
@@ -82,7 +82,7 @@ type movingAverageSpeed struct {
 	msg      string
 }
 
-func (d *movingAverageSpeed) Decor(s Statistics) string {
+func (d *movingAverageSpeed) Decor(s Statistics) (string, int) {
 	if !s.Completed {
 		var speed float64
 		if v := d.average.Value(); v > 0 {
@@ -90,7 +90,7 @@ func (d *movingAverageSpeed) Decor(s Statistics) string {
 		}
 		d.msg = d.producer(speed * 1e9)
 	}
-	return d.FormatMsg(d.msg)
+	return d.Format(d.msg)
 }
 
 func (d *movingAverageSpeed) EwmaUpdate(n int64, dur time.Duration) {
@@ -140,12 +140,12 @@ type averageSpeed struct {
 	msg       string
 }
 
-func (d *averageSpeed) Decor(s Statistics) string {
+func (d *averageSpeed) Decor(s Statistics) (string, int) {
 	if !s.Completed {
 		speed := float64(s.Current) / float64(time.Since(d.startTime))
 		d.msg = d.producer(speed * 1e9)
 	}
-	return d.FormatMsg(d.msg)
+	return d.Format(d.msg)
 }
 
 func (d *averageSpeed) AverageAdjust(startTime time.Time) {
diff --git a/vendor/github.com/vbauerster/mpb/v8/decor/spinner.go b/vendor/github.com/vbauerster/mpb/v8/decor/spinner.go
index 6871639db2..9d2f89094c 100644
--- a/vendor/github.com/vbauerster/mpb/v8/decor/spinner.go
+++ b/vendor/github.com/vbauerster/mpb/v8/decor/spinner.go
@@ -1,6 +1,6 @@
 package decor
 
-var defaultSpinnerStyle = []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}
+var defaultSpinnerStyle = [...]string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}
 
 // Spinner returns spinner decorator.
 //
@@ -9,7 +9,7 @@ var defaultSpinnerStyle = []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "
 //	`wcc` optional WC config
 func Spinner(frames []string, wcc ...WC) Decorator {
 	if len(frames) == 0 {
-		frames = defaultSpinnerStyle
+		frames = defaultSpinnerStyle[:]
 	}
 	var count uint
 	f := func(s Statistics) string {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index fe7725a145..9a5219a5c8 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -978,7 +978,7 @@ github.com/ulikunitz/xz/lzma
 github.com/vbatts/tar-split/archive/tar
 github.com/vbatts/tar-split/tar/asm
 github.com/vbatts/tar-split/tar/storage
-# github.com/vbauerster/mpb/v8 v8.4.0
+# github.com/vbauerster/mpb/v8 v8.5.1
 ## explicit; go 1.17
 github.com/vbauerster/mpb/v8
 github.com/vbauerster/mpb/v8/cwriter