New upstream version 3.3.4
Reinhard Tartler
7 years ago
| 0 | # Test binary, build with `go test -c` | |
| 1 | *.test | |
| 2 | ||
| 3 | # Output of the go coverage tool, specifically when used with LiteIDE | |
| 4 | *.out |
| 0 | language: go | |
| 1 | sudo: false | |
| 2 | go: | |
| 3 | - 1.8.x | |
| 4 | - 1.9.x | |
| 5 | ||
| 6 | before_install: | |
| 7 | - go get -t -v ./... | |
| 8 | ||
| 9 | script: | |
| 10 | - go test -race -coverprofile=coverage.txt -covermode=atomic | |
| 11 | ||
| 12 | after_success: | |
| 13 | - bash <(curl -s https://codecov.io/bash) |
| 0 | BSD 3-Clause License | |
| 1 | ||
| 2 | Copyright (C) 2016-2018 Vladimir Bauer | |
| 3 | All rights reserved. | |
| 4 | ||
| 5 | Redistribution and use in source and binary forms, with or without | |
| 6 | modification, are permitted provided that the following conditions are met: | |
| 7 | ||
| 8 | * Redistributions of source code must retain the above copyright notice, this | |
| 9 | list of conditions and the following disclaimer. | |
| 10 | ||
| 11 | * Redistributions in binary form must reproduce the above copyright notice, | |
| 12 | this list of conditions and the following disclaimer in the documentation | |
| 13 | and/or other materials provided with the distribution. | |
| 14 | ||
| 15 | * Neither the name of the copyright holder nor the names of its | |
| 16 | contributors may be used to endorse or promote products derived from | |
| 17 | this software without specific prior written permission. | |
| 18 | ||
| 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 0 | # Multi Progress Bar | |
| 1 | ||
| 2 | [](https://godoc.org/github.com/vbauerster/mpb) | |
| 3 | [](https://travis-ci.org/vbauerster/mpb) | |
| 4 | [](https://goreportcard.com/report/github.com/vbauerster/mpb) | |
| 5 | [](https://codecov.io/gh/vbauerster/mpb) | |
| 6 | ||
| 7 | **mpb** is a Go lib for rendering progress bars in terminal applications. | |
| 8 | ||
| 9 | ## Features | |
| 10 | ||
| 11 | * __Multiple Bars__: Multiple progress bars are supported | |
| 12 | * __Dynamic Total__: [Set total](https://github.com/vbauerster/mpb/issues/9#issuecomment-344448984) while bar is running | |
| 13 | * __Dynamic Add/Remove__: Dynamically add or remove bars | |
| 14 | * __Cancellation__: Cancel whole rendering process | |
| 15 | * __Predefined Decorators__: Elapsed time, [ewma](https://github.com/VividCortex/ewma) based ETA, Percentage, Bytes counter | |
| 16 | * __Decorator's width sync__: Synchronized decorator's width among multiple bars | |
| 17 | ||
| 18 | ## Installation | |
| 19 | ||
| 20 | ```sh | |
| 21 | go get github.com/vbauerster/mpb | |
| 22 | ``` | |
| 23 | ||
| 24 | _Note:_ it is preferable to go get from github.com, rather than gopkg.in. See issue [#11](https://github.com/vbauerster/mpb/issues/11). | |
| 25 | ||
| 26 | ## Usage | |
| 27 | ||
| 28 | #### [Rendering single bar](examples/singleBar/main.go) | |
| 29 | ```go | |
| 30 | p := mpb.New( | |
| 31 | // override default (80) width | |
| 32 | mpb.WithWidth(64), | |
| 33 | // override default "[=>-]" format | |
| 34 | mpb.WithFormat("╢▌▌░╟"), | |
| 35 | // override default 120ms refresh rate | |
| 36 | mpb.WithRefreshRate(180*time.Millisecond), | |
| 37 | ) | |
| 38 | ||
| 39 | total := 100 | |
| 40 | name := "Single Bar:" | |
| 41 | // adding a single bar | |
| 42 | bar := p.AddBar(int64(total), | |
| 43 | mpb.PrependDecorators( | |
| 44 | // display our name with one space on the right | |
| 45 | decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}), | |
| 46 | // replace ETA decorator with "done" message, OnComplete event | |
| 47 | decor.OnComplete( | |
| 48 | // ETA decorator with ewma age of 60, and width reservation of 4 | |
| 49 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WC{W: 4}), "done", | |
| 50 | ), | |
| 51 | ), | |
| 52 | mpb.AppendDecorators(decor.Percentage()), | |
| 53 | ) | |
| 54 | // simulating some work | |
| 55 | max := 100 * time.Millisecond | |
| 56 | for i := 0; i < total; i++ { | |
| 57 | start := time.Now() | |
| 58 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 59 | // ewma based decorators require work duration measurement | |
| 60 | bar.IncrBy(1, time.Since(start)) | |
| 61 | } | |
| 62 | // wait for our bar to complete and flush | |
| 63 | p.Wait() | |
| 64 | ``` | |
| 65 | ||
| 66 | #### [Rendering multiple bars](examples/simple/main.go) | |
| 67 | ```go | |
| 68 | var wg sync.WaitGroup | |
| 69 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 70 | total, numBars := 100, 3 | |
| 71 | wg.Add(numBars) | |
| 72 | ||
| 73 | for i := 0; i < numBars; i++ { | |
| 74 | name := fmt.Sprintf("Bar#%d:", i) | |
| 75 | bar := p.AddBar(int64(total), | |
| 76 | mpb.PrependDecorators( | |
| 77 | // simple name decorator | |
| 78 | decor.Name(name), | |
| 79 | // decor.DSyncWidth bit enables column width synchronization | |
| 80 | decor.Percentage(decor.WCSyncSpace), | |
| 81 | ), | |
| 82 | mpb.AppendDecorators( | |
| 83 | // replace ETA decorator with "done" message, OnComplete event | |
| 84 | decor.OnComplete( | |
| 85 | // ETA decorator with ewma age of 60 | |
| 86 | decor.EwmaETA(decor.ET_STYLE_GO, 60), "done", | |
| 87 | ), | |
| 88 | ), | |
| 89 | ) | |
| 90 | // simulating some work | |
| 91 | go func() { | |
| 92 | defer wg.Done() | |
| 93 | max := 100 * time.Millisecond | |
| 94 | for i := 0; i < total; i++ { | |
| 95 | start := time.Now() | |
| 96 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 97 | // ewma based decorators require work duration measurement | |
| 98 | bar.IncrBy(1, time.Since(start)) | |
| 99 | } | |
| 100 | }() | |
| 101 | } | |
| 102 | // wait for all bars to complete and flush | |
| 103 | p.Wait() | |
| 104 | ``` | |
| 105 | ||
| 106 | #### [Dynamic total](examples/dynTotal/main.go) | |
| 107 | ||
| 108 |  | |
| 109 | ||
| 110 | #### [Complex example](examples/complex/main.go) | |
| 111 | ||
| 112 |  | |
| 113 | ||
| 114 | #### [Bytes counters](examples/io/single/main.go) | |
| 115 | ||
| 116 |  |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "fmt" | |
| 5 | "io" | |
| 6 | "io/ioutil" | |
| 7 | "strings" | |
| 8 | "sync" | |
| 9 | "time" | |
| 10 | "unicode/utf8" | |
| 11 | ||
| 12 | "github.com/vbauerster/mpb/decor" | |
| 13 | "github.com/vbauerster/mpb/internal" | |
| 14 | ) | |
| 15 | ||
| 16 | const ( | |
| 17 | rLeft = iota | |
| 18 | rFill | |
| 19 | rTip | |
| 20 | rEmpty | |
| 21 | rRight | |
| 22 | ) | |
| 23 | ||
| 24 | const formatLen = 5 | |
| 25 | ||
| 26 | type barRunes [formatLen]rune | |
| 27 | ||
| 28 | // Bar represents a progress Bar | |
| 29 | type Bar struct { | |
| 30 | priority int | |
| 31 | index int | |
| 32 | ||
| 33 | runningBar *Bar | |
| 34 | cacheState *bState | |
| 35 | operateState chan func(*bState) | |
| 36 | int64Ch chan int64 | |
| 37 | boolCh chan bool | |
| 38 | frameReaderCh chan *frameReader | |
| 39 | syncTableCh chan [][]chan int | |
| 40 | ||
| 41 | // done is closed by Bar's goroutine, after cacheState is written | |
| 42 | done chan struct{} | |
| 43 | // shutdown is closed from master Progress goroutine only | |
| 44 | shutdown chan struct{} | |
| 45 | } | |
| 46 | ||
| 47 | type ( | |
| 48 | bState struct { | |
| 49 | id int | |
| 50 | width int | |
| 51 | total int64 | |
| 52 | current int64 | |
| 53 | runes barRunes | |
| 54 | trimLeftSpace bool | |
| 55 | trimRightSpace bool | |
| 56 | toComplete bool | |
| 57 | removeOnComplete bool | |
| 58 | barClearOnComplete bool | |
| 59 | completeFlushed bool | |
| 60 | aDecorators []decor.Decorator | |
| 61 | pDecorators []decor.Decorator | |
| 62 | amountReceivers []decor.AmountReceiver | |
| 63 | shutdownListeners []decor.ShutdownListener | |
| 64 | refill *refill | |
| 65 | bufP, bufB, bufA *bytes.Buffer | |
| 66 | bufNL *bytes.Buffer | |
| 67 | panicMsg string | |
| 68 | newLineExtendFn func(io.Writer, *decor.Statistics) | |
| 69 | ||
| 70 | // following options are assigned to the *Bar | |
| 71 | priority int | |
| 72 | runningBar *Bar | |
| 73 | } | |
| 74 | refill struct { | |
| 75 | char rune | |
| 76 | till int64 | |
| 77 | } | |
| 78 | frameReader struct { | |
| 79 | io.Reader | |
| 80 | extendedLines int | |
| 81 | toShutdown bool | |
| 82 | removeOnComplete bool | |
| 83 | } | |
| 84 | ) | |
| 85 | ||
| 86 | func newBar(wg *sync.WaitGroup, id int, total int64, cancel <-chan struct{}, options ...BarOption) *Bar { | |
| 87 | if total <= 0 { | |
| 88 | total = time.Now().Unix() | |
| 89 | } | |
| 90 | ||
| 91 | s := &bState{ | |
| 92 | id: id, | |
| 93 | priority: id, | |
| 94 | total: total, | |
| 95 | } | |
| 96 | ||
| 97 | for _, opt := range options { | |
| 98 | if opt != nil { | |
| 99 | opt(s) | |
| 100 | } | |
| 101 | } | |
| 102 | ||
| 103 | s.bufP = bytes.NewBuffer(make([]byte, 0, s.width)) | |
| 104 | s.bufB = bytes.NewBuffer(make([]byte, 0, s.width)) | |
| 105 | s.bufA = bytes.NewBuffer(make([]byte, 0, s.width)) | |
| 106 | ||
| 107 | b := &Bar{ | |
| 108 | priority: s.priority, | |
| 109 | runningBar: s.runningBar, | |
| 110 | operateState: make(chan func(*bState)), | |
| 111 | int64Ch: make(chan int64), | |
| 112 | boolCh: make(chan bool), | |
| 113 | frameReaderCh: make(chan *frameReader, 1), | |
| 114 | syncTableCh: make(chan [][]chan int), | |
| 115 | done: make(chan struct{}), | |
| 116 | shutdown: make(chan struct{}), | |
| 117 | } | |
| 118 | ||
| 119 | if b.runningBar != nil { | |
| 120 | b.priority = b.runningBar.priority | |
| 121 | } | |
| 122 | ||
| 123 | if s.newLineExtendFn != nil { | |
| 124 | s.bufNL = bytes.NewBuffer(make([]byte, 0, s.width)) | |
| 125 | } | |
| 126 | ||
| 127 | go b.serve(wg, s, cancel) | |
| 128 | return b | |
| 129 | } | |
| 130 | ||
| 131 | // RemoveAllPrependers removes all prepend functions. | |
| 132 | func (b *Bar) RemoveAllPrependers() { | |
| 133 | select { | |
| 134 | case b.operateState <- func(s *bState) { s.pDecorators = nil }: | |
| 135 | case <-b.done: | |
| 136 | } | |
| 137 | } | |
| 138 | ||
| 139 | // RemoveAllAppenders removes all append functions. | |
| 140 | func (b *Bar) RemoveAllAppenders() { | |
| 141 | select { | |
| 142 | case b.operateState <- func(s *bState) { s.aDecorators = nil }: | |
| 143 | case <-b.done: | |
| 144 | } | |
| 145 | } | |
| 146 | ||
| 147 | // ProxyReader wraps r with metrics required for progress tracking. | |
| 148 | func (b *Bar) ProxyReader(r io.Reader) io.ReadCloser { | |
| 149 | if r == nil { | |
| 150 | panic("expect io.Reader, got nil") | |
| 151 | } | |
| 152 | rc, ok := r.(io.ReadCloser) | |
| 153 | if !ok { | |
| 154 | rc = ioutil.NopCloser(r) | |
| 155 | } | |
| 156 | return &proxyReader{rc, b, time.Now()} | |
| 157 | } | |
| 158 | ||
| 159 | // ID returs id of the bar. | |
| 160 | func (b *Bar) ID() int { | |
| 161 | select { | |
| 162 | case b.operateState <- func(s *bState) { b.int64Ch <- int64(s.id) }: | |
| 163 | return int(<-b.int64Ch) | |
| 164 | case <-b.done: | |
| 165 | return b.cacheState.id | |
| 166 | } | |
| 167 | } | |
| 168 | ||
| 169 | // Current returns bar's current number, in other words sum of all increments. | |
| 170 | func (b *Bar) Current() int64 { | |
| 171 | select { | |
| 172 | case b.operateState <- func(s *bState) { b.int64Ch <- s.current }: | |
| 173 | return <-b.int64Ch | |
| 174 | case <-b.done: | |
| 175 | return b.cacheState.current | |
| 176 | } | |
| 177 | } | |
| 178 | ||
| 179 | // SetTotal sets total dynamically. | |
| 180 | // Set final to true, when total is known, it will trigger bar complete event. | |
| 181 | func (b *Bar) SetTotal(total int64, final bool) bool { | |
| 182 | select { | |
| 183 | case b.operateState <- func(s *bState) { | |
| 184 | if total > 0 { | |
| 185 | s.total = total | |
| 186 | } | |
| 187 | if final { | |
| 188 | s.current = s.total | |
| 189 | s.toComplete = true | |
| 190 | } | |
| 191 | }: | |
| 192 | return true | |
| 193 | case <-b.done: | |
| 194 | return false | |
| 195 | } | |
| 196 | } | |
| 197 | ||
| 198 | // SetRefill sets fill rune to r, up until n. | |
| 199 | func (b *Bar) SetRefill(n int, r rune) { | |
| 200 | if n <= 0 { | |
| 201 | return | |
| 202 | } | |
| 203 | b.operateState <- func(s *bState) { | |
| 204 | s.refill = &refill{r, int64(n)} | |
| 205 | } | |
| 206 | } | |
| 207 | ||
| 208 | // RefillBy is deprecated, use SetRefill | |
| 209 | func (b *Bar) RefillBy(n int, r rune) { | |
| 210 | b.SetRefill(n, r) | |
| 211 | } | |
| 212 | ||
| 213 | // Increment is a shorthand for b.IncrBy(1). | |
| 214 | func (b *Bar) Increment() { | |
| 215 | b.IncrBy(1) | |
| 216 | } | |
| 217 | ||
| 218 | // IncrBy increments progress bar by amount of n. | |
| 219 | // wdd is optional work duration i.e. time.Since(start), | |
| 220 | // which expected to be provided, if any ewma based decorator is used. | |
| 221 | func (b *Bar) IncrBy(n int, wdd ...time.Duration) { | |
| 222 | select { | |
| 223 | case b.operateState <- func(s *bState) { | |
| 224 | s.current += int64(n) | |
| 225 | if s.current >= s.total { | |
| 226 | s.current = s.total | |
| 227 | s.toComplete = true | |
| 228 | } | |
| 229 | for _, ar := range s.amountReceivers { | |
| 230 | ar.NextAmount(n, wdd...) | |
| 231 | } | |
| 232 | }: | |
| 233 | case <-b.done: | |
| 234 | } | |
| 235 | } | |
| 236 | ||
| 237 | // Completed reports whether the bar is in completed state. | |
| 238 | func (b *Bar) Completed() bool { | |
| 239 | // omit select here, because primary usage of the method is for loop | |
| 240 | // condition, like for !bar.Completed() {...} | |
| 241 | // so when toComplete=true it is called once (at which time, the bar is still alive), | |
| 242 | // then quits the loop and never suppose to be called afterwards. | |
| 243 | return <-b.boolCh | |
| 244 | } | |
| 245 | ||
| 246 | func (b *Bar) wSyncTable() [][]chan int { | |
| 247 | select { | |
| 248 | case b.operateState <- func(s *bState) { b.syncTableCh <- s.wSyncTable() }: | |
| 249 | return <-b.syncTableCh | |
| 250 | case <-b.done: | |
| 251 | return b.cacheState.wSyncTable() | |
| 252 | } | |
| 253 | } | |
| 254 | ||
| 255 | func (b *Bar) serve(wg *sync.WaitGroup, s *bState, cancel <-chan struct{}) { | |
| 256 | defer wg.Done() | |
| 257 | for { | |
| 258 | select { | |
| 259 | case op := <-b.operateState: | |
| 260 | op(s) | |
| 261 | case b.boolCh <- s.toComplete: | |
| 262 | case <-cancel: | |
| 263 | s.toComplete = true | |
| 264 | cancel = nil | |
| 265 | case <-b.shutdown: | |
| 266 | b.cacheState = s | |
| 267 | close(b.done) | |
| 268 | for _, sl := range s.shutdownListeners { | |
| 269 | sl.Shutdown() | |
| 270 | } | |
| 271 | return | |
| 272 | } | |
| 273 | } | |
| 274 | } | |
| 275 | ||
| 276 | func (b *Bar) render(debugOut io.Writer, tw int) { | |
| 277 | select { | |
| 278 | case b.operateState <- func(s *bState) { | |
| 279 | defer func() { | |
| 280 | // recovering if user defined decorator panics for example | |
| 281 | if p := recover(); p != nil { | |
| 282 | s.panicMsg = fmt.Sprintf("panic: %v", p) | |
| 283 | fmt.Fprintf(debugOut, "%s %s bar id %02d %v\n", "[mpb]", time.Now(), s.id, s.panicMsg) | |
| 284 | b.frameReaderCh <- &frameReader{ | |
| 285 | Reader: strings.NewReader(fmt.Sprintf(fmt.Sprintf("%%.%ds\n", tw), s.panicMsg)), | |
| 286 | toShutdown: true, | |
| 287 | } | |
| 288 | } | |
| 289 | }() | |
| 290 | r := s.draw(tw) | |
| 291 | var extendedLines int | |
| 292 | if s.newLineExtendFn != nil { | |
| 293 | s.bufNL.Reset() | |
| 294 | s.newLineExtendFn(s.bufNL, newStatistics(s)) | |
| 295 | extendedLines = countLines(s.bufNL.Bytes()) | |
| 296 | r = io.MultiReader(r, s.bufNL) | |
| 297 | } | |
| 298 | b.frameReaderCh <- &frameReader{ | |
| 299 | Reader: r, | |
| 300 | extendedLines: extendedLines, | |
| 301 | toShutdown: s.toComplete && !s.completeFlushed, | |
| 302 | removeOnComplete: s.removeOnComplete, | |
| 303 | } | |
| 304 | s.completeFlushed = s.toComplete | |
| 305 | }: | |
| 306 | case <-b.done: | |
| 307 | s := b.cacheState | |
| 308 | r := s.draw(tw) | |
| 309 | var extendedLines int | |
| 310 | if s.newLineExtendFn != nil { | |
| 311 | s.bufNL.Reset() | |
| 312 | s.newLineExtendFn(s.bufNL, newStatistics(s)) | |
| 313 | extendedLines = countLines(s.bufNL.Bytes()) | |
| 314 | r = io.MultiReader(r, s.bufNL) | |
| 315 | } | |
| 316 | b.frameReaderCh <- &frameReader{ | |
| 317 | Reader: r, | |
| 318 | extendedLines: extendedLines, | |
| 319 | } | |
| 320 | } | |
| 321 | } | |
| 322 | ||
| 323 | func (s *bState) draw(termWidth int) io.Reader { | |
| 324 | defer s.bufA.WriteByte('\n') | |
| 325 | ||
| 326 | if s.panicMsg != "" { | |
| 327 | return strings.NewReader(fmt.Sprintf(fmt.Sprintf("%%.%ds\n", termWidth), s.panicMsg)) | |
| 328 | } | |
| 329 | ||
| 330 | stat := newStatistics(s) | |
| 331 | ||
| 332 | for _, d := range s.pDecorators { | |
| 333 | s.bufP.WriteString(d.Decor(stat)) | |
| 334 | } | |
| 335 | ||
| 336 | for _, d := range s.aDecorators { | |
| 337 | s.bufA.WriteString(d.Decor(stat)) | |
| 338 | } | |
| 339 | ||
| 340 | prependCount := utf8.RuneCount(s.bufP.Bytes()) | |
| 341 | appendCount := utf8.RuneCount(s.bufA.Bytes()) | |
| 342 | ||
| 343 | if s.barClearOnComplete && s.completeFlushed { | |
| 344 | return io.MultiReader(s.bufP, s.bufA) | |
| 345 | } | |
| 346 | ||
| 347 | s.fillBar(s.width) | |
| 348 | barCount := utf8.RuneCount(s.bufB.Bytes()) | |
| 349 | totalCount := prependCount + barCount + appendCount | |
| 350 | if spaceCount := 0; totalCount > termWidth { | |
| 351 | if !s.trimLeftSpace { | |
| 352 | spaceCount++ | |
| 353 | } | |
| 354 | if !s.trimRightSpace { | |
| 355 | spaceCount++ | |
| 356 | } | |
| 357 | s.fillBar(termWidth - prependCount - appendCount - spaceCount) | |
| 358 | } | |
| 359 | ||
| 360 | return io.MultiReader(s.bufP, s.bufB, s.bufA) | |
| 361 | } | |
| 362 | ||
| 363 | func (s *bState) fillBar(width int) { | |
| 364 | defer func() { | |
| 365 | s.bufB.WriteRune(s.runes[rRight]) | |
| 366 | if !s.trimRightSpace { | |
| 367 | s.bufB.WriteByte(' ') | |
| 368 | } | |
| 369 | }() | |
| 370 | ||
| 371 | s.bufB.Reset() | |
| 372 | if !s.trimLeftSpace { | |
| 373 | s.bufB.WriteByte(' ') | |
| 374 | } | |
| 375 | s.bufB.WriteRune(s.runes[rLeft]) | |
| 376 | if width <= 2 { | |
| 377 | return | |
| 378 | } | |
| 379 | ||
| 380 | // bar s.width without leftEnd and rightEnd runes | |
| 381 | barWidth := width - 2 | |
| 382 | ||
| 383 | completedWidth := internal.Percentage(s.total, s.current, int64(barWidth)) | |
| 384 | ||
| 385 | if s.refill != nil { | |
| 386 | till := internal.Percentage(s.total, s.refill.till, int64(barWidth)) | |
| 387 | // append refill rune | |
| 388 | var i int64 | |
| 389 | for i = 0; i < till; i++ { | |
| 390 | s.bufB.WriteRune(s.refill.char) | |
| 391 | } | |
| 392 | for i = till; i < completedWidth; i++ { | |
| 393 | s.bufB.WriteRune(s.runes[rFill]) | |
| 394 | } | |
| 395 | } else { | |
| 396 | var i int64 | |
| 397 | for i = 0; i < completedWidth; i++ { | |
| 398 | s.bufB.WriteRune(s.runes[rFill]) | |
| 399 | } | |
| 400 | } | |
| 401 | ||
| 402 | if completedWidth < int64(barWidth) && completedWidth > 0 { | |
| 403 | _, size := utf8.DecodeLastRune(s.bufB.Bytes()) | |
| 404 | s.bufB.Truncate(s.bufB.Len() - size) | |
| 405 | s.bufB.WriteRune(s.runes[rTip]) | |
| 406 | } | |
| 407 | ||
| 408 | for i := completedWidth; i < int64(barWidth); i++ { | |
| 409 | s.bufB.WriteRune(s.runes[rEmpty]) | |
| 410 | } | |
| 411 | } | |
| 412 | ||
| 413 | func (s *bState) wSyncTable() [][]chan int { | |
| 414 | columns := make([]chan int, 0, len(s.pDecorators)+len(s.aDecorators)) | |
| 415 | var pCount int | |
| 416 | for _, d := range s.pDecorators { | |
| 417 | if ok, ch := d.Syncable(); ok { | |
| 418 | columns = append(columns, ch) | |
| 419 | pCount++ | |
| 420 | } | |
| 421 | } | |
| 422 | var aCount int | |
| 423 | for _, d := range s.aDecorators { | |
| 424 | if ok, ch := d.Syncable(); ok { | |
| 425 | columns = append(columns, ch) | |
| 426 | aCount++ | |
| 427 | } | |
| 428 | } | |
| 429 | table := make([][]chan int, 2) | |
| 430 | table[0] = columns[0:pCount] | |
| 431 | table[1] = columns[pCount : pCount+aCount : pCount+aCount] | |
| 432 | return table | |
| 433 | } | |
| 434 | ||
| 435 | func newStatistics(s *bState) *decor.Statistics { | |
| 436 | return &decor.Statistics{ | |
| 437 | ID: s.id, | |
| 438 | Completed: s.completeFlushed, | |
| 439 | Total: s.total, | |
| 440 | Current: s.current, | |
| 441 | } | |
| 442 | } | |
| 443 | ||
| 444 | func strToBarRunes(format string) (array barRunes) { | |
| 445 | for i, n := 0, 0; len(format) > 0; i++ { | |
| 446 | array[i], n = utf8.DecodeRuneInString(format) | |
| 447 | format = format[n:] | |
| 448 | } | |
| 449 | return | |
| 450 | } | |
| 451 | ||
| 452 | func countLines(b []byte) int { | |
| 453 | return bytes.Count(b, []byte("\n")) | |
| 454 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "io" | |
| 4 | ||
| 5 | "github.com/vbauerster/mpb/decor" | |
| 6 | ) | |
| 7 | ||
| 8 | // BarOption is a function option which changes the default behavior of a bar, | |
| 9 | // if passed to p.AddBar(int64, ...BarOption) | |
| 10 | type BarOption func(*bState) | |
| 11 | ||
| 12 | // AppendDecorators let you inject decorators to the bar's right side | |
| 13 | func AppendDecorators(appenders ...decor.Decorator) BarOption { | |
| 14 | return func(s *bState) { | |
| 15 | for _, decorator := range appenders { | |
| 16 | if ar, ok := decorator.(decor.AmountReceiver); ok { | |
| 17 | s.amountReceivers = append(s.amountReceivers, ar) | |
| 18 | } | |
| 19 | if sl, ok := decorator.(decor.ShutdownListener); ok { | |
| 20 | s.shutdownListeners = append(s.shutdownListeners, sl) | |
| 21 | } | |
| 22 | s.aDecorators = append(s.aDecorators, decorator) | |
| 23 | } | |
| 24 | } | |
| 25 | } | |
| 26 | ||
| 27 | // PrependDecorators let you inject decorators to the bar's left side | |
| 28 | func PrependDecorators(prependers ...decor.Decorator) BarOption { | |
| 29 | return func(s *bState) { | |
| 30 | for _, decorator := range prependers { | |
| 31 | if ar, ok := decorator.(decor.AmountReceiver); ok { | |
| 32 | s.amountReceivers = append(s.amountReceivers, ar) | |
| 33 | } | |
| 34 | if sl, ok := decorator.(decor.ShutdownListener); ok { | |
| 35 | s.shutdownListeners = append(s.shutdownListeners, sl) | |
| 36 | } | |
| 37 | s.pDecorators = append(s.pDecorators, decorator) | |
| 38 | } | |
| 39 | } | |
| 40 | } | |
| 41 | ||
| 42 | // BarTrimLeft trims left side space of the bar | |
| 43 | func BarTrimLeft() BarOption { | |
| 44 | return func(s *bState) { | |
| 45 | s.trimLeftSpace = true | |
| 46 | } | |
| 47 | } | |
| 48 | ||
| 49 | // BarTrimRight trims right space of the bar | |
| 50 | func BarTrimRight() BarOption { | |
| 51 | return func(s *bState) { | |
| 52 | s.trimRightSpace = true | |
| 53 | } | |
| 54 | } | |
| 55 | ||
| 56 | // BarTrim trims both left and right spaces of the bar | |
| 57 | func BarTrim() BarOption { | |
| 58 | return func(s *bState) { | |
| 59 | s.trimLeftSpace = true | |
| 60 | s.trimRightSpace = true | |
| 61 | } | |
| 62 | } | |
| 63 | ||
| 64 | // BarID overwrites internal bar id | |
| 65 | func BarID(id int) BarOption { | |
| 66 | return func(s *bState) { | |
| 67 | s.id = id | |
| 68 | } | |
| 69 | } | |
| 70 | ||
| 71 | // BarRemoveOnComplete is a flag, if set whole bar line will be removed on complete event. | |
| 72 | // If both BarRemoveOnComplete and BarClearOnComplete are set, first bar section gets cleared | |
| 73 | // and then whole bar line gets removed completely. | |
| 74 | func BarRemoveOnComplete() BarOption { | |
| 75 | return func(s *bState) { | |
| 76 | s.removeOnComplete = true | |
| 77 | } | |
| 78 | } | |
| 79 | ||
| 80 | // BarReplaceOnComplete is indicator for delayed bar start, after the `runningBar` is complete. | |
| 81 | // To achieve bar replacement effect, `runningBar` should has its `BarRemoveOnComplete` option set. | |
| 82 | func BarReplaceOnComplete(runningBar *Bar) BarOption { | |
| 83 | return func(s *bState) { | |
| 84 | s.runningBar = runningBar | |
| 85 | } | |
| 86 | } | |
| 87 | ||
| 88 | // BarClearOnComplete is a flag, if set will clear bar section on complete event. | |
| 89 | // If you need to remove a whole bar line, refer to BarRemoveOnComplete. | |
| 90 | func BarClearOnComplete() BarOption { | |
| 91 | return func(s *bState) { | |
| 92 | s.barClearOnComplete = true | |
| 93 | } | |
| 94 | } | |
| 95 | ||
| 96 | // BarPriority sets bar's priority. | |
| 97 | // Zero is highest priority, i.e. bar will be on top. | |
| 98 | // If `BarReplaceOnComplete` option is supplied, this option is ignored. | |
| 99 | func BarPriority(priority int) BarOption { | |
| 100 | return func(s *bState) { | |
| 101 | s.priority = priority | |
| 102 | } | |
| 103 | } | |
| 104 | ||
| 105 | // BarNewLineExtend takes user defined efn, which gets called each render cycle. | |
| 106 | // Any write to provided writer of efn, will appear on new line of respective bar. | |
| 107 | func BarNewLineExtend(efn func(io.Writer, *decor.Statistics)) BarOption { | |
| 108 | return func(s *bState) { | |
| 109 | s.newLineExtendFn = efn | |
| 110 | } | |
| 111 | } | |
| 112 | ||
| 113 | func barWidth(w int) BarOption { | |
| 114 | return func(s *bState) { | |
| 115 | s.width = w | |
| 116 | } | |
| 117 | } | |
| 118 | ||
| 119 | func barFormat(format string) BarOption { | |
| 120 | return func(s *bState) { | |
| 121 | s.runes = strToBarRunes(format) | |
| 122 | } | |
| 123 | } |
| 0 | package mpb_test | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "fmt" | |
| 5 | "io/ioutil" | |
| 6 | "strings" | |
| 7 | "testing" | |
| 8 | "time" | |
| 9 | ||
| 10 | . "github.com/vbauerster/mpb" | |
| 11 | "github.com/vbauerster/mpb/decor" | |
| 12 | ) | |
| 13 | ||
| 14 | func TestBarCompleted(t *testing.T) { | |
| 15 | p := New(WithOutput(ioutil.Discard)) | |
| 16 | total := 80 | |
| 17 | bar := p.AddBar(int64(total)) | |
| 18 | ||
| 19 | var count int | |
| 20 | for !bar.Completed() { | |
| 21 | time.Sleep(10 * time.Millisecond) | |
| 22 | bar.Increment() | |
| 23 | count++ | |
| 24 | } | |
| 25 | ||
| 26 | p.Wait() | |
| 27 | if count != total { | |
| 28 | t.Errorf("got count: %d, expected %d\n", count, total) | |
| 29 | } | |
| 30 | } | |
| 31 | ||
| 32 | func TestBarID(t *testing.T) { | |
| 33 | p := New(WithOutput(ioutil.Discard)) | |
| 34 | total := 80 | |
| 35 | wantID := 11 | |
| 36 | bar := p.AddBar(int64(total), BarID(wantID)) | |
| 37 | ||
| 38 | go func() { | |
| 39 | for i := 0; i < total; i++ { | |
| 40 | time.Sleep(50 * time.Millisecond) | |
| 41 | bar.Increment() | |
| 42 | } | |
| 43 | }() | |
| 44 | ||
| 45 | gotID := bar.ID() | |
| 46 | if gotID != wantID { | |
| 47 | t.Errorf("Expected bar id: %d, got %d\n", wantID, gotID) | |
| 48 | } | |
| 49 | ||
| 50 | p.Abort(bar, true) | |
| 51 | p.Wait() | |
| 52 | } | |
| 53 | ||
| 54 | func TestBarSetRefill(t *testing.T) { | |
| 55 | var buf bytes.Buffer | |
| 56 | ||
| 57 | width := 100 | |
| 58 | p := New(WithOutput(&buf), WithWidth(width)) | |
| 59 | ||
| 60 | total := 100 | |
| 61 | till := 30 | |
| 62 | refillRune := '+' | |
| 63 | ||
| 64 | bar := p.AddBar(int64(total), BarTrim()) | |
| 65 | ||
| 66 | bar.SetRefill(till, refillRune) | |
| 67 | bar.IncrBy(till) | |
| 68 | ||
| 69 | for i := 0; i < total-till; i++ { | |
| 70 | bar.Increment() | |
| 71 | time.Sleep(10 * time.Millisecond) | |
| 72 | } | |
| 73 | ||
| 74 | p.Wait() | |
| 75 | ||
| 76 | wantBar := fmt.Sprintf("[%s%s]", | |
| 77 | strings.Repeat(string(refillRune), till-1), | |
| 78 | strings.Repeat("=", total-till-1)) | |
| 79 | ||
| 80 | if !strings.Contains(buf.String(), wantBar) { | |
| 81 | t.Errorf("Want bar: %s, got bar: %s\n", wantBar, buf.String()) | |
| 82 | } | |
| 83 | } | |
| 84 | ||
| 85 | func TestBarPanics(t *testing.T) { | |
| 86 | var buf bytes.Buffer | |
| 87 | p := New(WithDebugOutput(&buf), WithOutput(ioutil.Discard)) | |
| 88 | ||
| 89 | wantPanic := "Upps!!!" | |
| 90 | total := 100 | |
| 91 | ||
| 92 | bar := p.AddBar(int64(total), PrependDecorators(panicDecorator(wantPanic))) | |
| 93 | ||
| 94 | go func() { | |
| 95 | for i := 0; i < 100; i++ { | |
| 96 | time.Sleep(10 * time.Millisecond) | |
| 97 | bar.Increment() | |
| 98 | } | |
| 99 | }() | |
| 100 | ||
| 101 | p.Wait() | |
| 102 | ||
| 103 | wantPanic = fmt.Sprintf("panic: %s", wantPanic) | |
| 104 | debugStr := buf.String() | |
| 105 | if !strings.Contains(debugStr, wantPanic) { | |
| 106 | t.Errorf("%q doesn't contain %q\n", debugStr, wantPanic) | |
| 107 | } | |
| 108 | } | |
| 109 | ||
| 110 | func panicDecorator(panicMsg string) decor.Decorator { | |
| 111 | d := &decorator{ | |
| 112 | panicMsg: panicMsg, | |
| 113 | } | |
| 114 | d.Init() | |
| 115 | return d | |
| 116 | } | |
| 117 | ||
| 118 | type decorator struct { | |
| 119 | decor.WC | |
| 120 | panicMsg string | |
| 121 | } | |
| 122 | ||
| 123 | func (d *decorator) Decor(st *decor.Statistics) string { | |
| 124 | if st.Current >= 42 { | |
| 125 | panic(d.panicMsg) | |
| 126 | } | |
| 127 | return d.FormatMsg("") | |
| 128 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "io/ioutil" | |
| 4 | "testing" | |
| 5 | ||
| 6 | "github.com/vbauerster/mpb/decor" | |
| 7 | ) | |
| 8 | ||
| 9 | func BenchmarkIncrSingleBar(b *testing.B) { | |
| 10 | p := New(WithOutput(ioutil.Discard)) | |
| 11 | bar := p.AddBar(int64(b.N)) | |
| 12 | for i := 0; i < b.N; i++ { | |
| 13 | bar.Increment() | |
| 14 | } | |
| 15 | } | |
| 16 | ||
| 17 | func BenchmarkIncrSingleBarWhileIsNotCompleted(b *testing.B) { | |
| 18 | p := New(WithOutput(ioutil.Discard)) | |
| 19 | bar := p.AddBar(int64(b.N)) | |
| 20 | for !bar.Completed() { | |
| 21 | bar.Increment() | |
| 22 | } | |
| 23 | } | |
| 24 | ||
| 25 | func BenchmarkIncrSingleBarWithNameDecorator(b *testing.B) { | |
| 26 | p := New(WithOutput(ioutil.Discard)) | |
| 27 | bar := p.AddBar(int64(b.N), PrependDecorators(decor.Name("test"))) | |
| 28 | for i := 0; i < b.N; i++ { | |
| 29 | bar.Increment() | |
| 30 | } | |
| 31 | } | |
| 32 | ||
| 33 | func BenchmarkIncrSingleBarWithNameAndEwmaETADecorator(b *testing.B) { | |
| 34 | p := New(WithOutput(ioutil.Discard)) | |
| 35 | bar := p.AddBar(int64(b.N), | |
| 36 | PrependDecorators(decor.Name("test")), | |
| 37 | AppendDecorators(decor.EwmaETA(decor.ET_STYLE_GO, 60)), | |
| 38 | ) | |
| 39 | for i := 0; i < b.N; i++ { | |
| 40 | bar.Increment() | |
| 41 | } | |
| 42 | } |
| 0 | package cwriter | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "errors" | |
| 5 | "fmt" | |
| 6 | "io" | |
| 7 | "os" | |
| 8 | ||
| 9 | isatty "github.com/mattn/go-isatty" | |
| 10 | "golang.org/x/crypto/ssh/terminal" | |
| 11 | ) | |
| 12 | ||
| 13 | // ESC is the ASCII code for escape character | |
| 14 | const ESC = 27 | |
| 15 | ||
| 16 | var NotATTY = errors.New("not a terminal") | |
| 17 | ||
| 18 | var ( | |
| 19 | cursorUp = fmt.Sprintf("%c[%dA", ESC, 1) | |
| 20 | clearLine = fmt.Sprintf("%c[2K\r", ESC) | |
| 21 | clearCursorAndLine = cursorUp + clearLine | |
| 22 | ) | |
| 23 | ||
| 24 | // Writer is a buffered the writer that updates the terminal. | |
| 25 | // The contents of writer will be flushed when Flush is called. | |
| 26 | type Writer struct { | |
| 27 | out io.Writer | |
| 28 | buf bytes.Buffer | |
| 29 | isTerminal bool | |
| 30 | fd int | |
| 31 | lineCount int | |
| 32 | } | |
| 33 | ||
| 34 | // New returns a new Writer with defaults | |
| 35 | func New(out io.Writer) *Writer { | |
| 36 | w := &Writer{out: out} | |
| 37 | if f, ok := out.(*os.File); ok { | |
| 38 | fd := f.Fd() | |
| 39 | w.isTerminal = isatty.IsTerminal(fd) | |
| 40 | w.fd = int(fd) | |
| 41 | } | |
| 42 | return w | |
| 43 | } | |
| 44 | ||
| 45 | // Flush flushes the underlying buffer | |
| 46 | func (w *Writer) Flush(lineCount int) error { | |
| 47 | err := w.clearLines() | |
| 48 | w.lineCount = lineCount | |
| 49 | // WriteTo takes care of w.buf.Reset | |
| 50 | if _, e := w.buf.WriteTo(w.out); err == nil { | |
| 51 | err = e | |
| 52 | } | |
| 53 | return err | |
| 54 | } | |
| 55 | ||
| 56 | // Write appends the contents of p to the underlying buffer | |
| 57 | func (w *Writer) Write(p []byte) (n int, err error) { | |
| 58 | return w.buf.Write(p) | |
| 59 | } | |
| 60 | ||
| 61 | // WriteString writes string to the underlying buffer | |
| 62 | func (w *Writer) WriteString(s string) (n int, err error) { | |
| 63 | return w.buf.WriteString(s) | |
| 64 | } | |
| 65 | ||
| 66 | // ReadFrom reads from the provided io.Reader and writes to the underlying buffer. | |
| 67 | func (w *Writer) ReadFrom(r io.Reader) (n int64, err error) { | |
| 68 | return w.buf.ReadFrom(r) | |
| 69 | } | |
| 70 | ||
| 71 | func (w *Writer) GetWidth() (int, error) { | |
| 72 | if w.isTerminal { | |
| 73 | tw, _, err := terminal.GetSize(w.fd) | |
| 74 | return tw, err | |
| 75 | } | |
| 76 | return -1, NotATTY | |
| 77 | } |
| 0 | // +build !windows | |
| 1 | ||
| 2 | package cwriter | |
| 3 | ||
| 4 | import ( | |
| 5 | "io" | |
| 6 | "strings" | |
| 7 | ) | |
| 8 | ||
| 9 | func (w *Writer) clearLines() error { | |
| 10 | _, err := io.WriteString(w.out, strings.Repeat(clearCursorAndLine, w.lineCount)) | |
| 11 | return err | |
| 12 | } |
| 0 | // +build !windows | |
| 1 | ||
| 2 | package cwriter_test | |
| 3 | ||
| 4 | import ( | |
| 5 | "bytes" | |
| 6 | "testing" | |
| 7 | ||
| 8 | . "github.com/vbauerster/mpb/cwriter" | |
| 9 | ) | |
| 10 | ||
| 11 | // TestWriterPosix by writing and flushing many times. The output buffer | |
| 12 | // must contain the clearCursor and clearLine sequences. | |
| 13 | func TestWriterPosix(t *testing.T) { | |
| 14 | out := new(bytes.Buffer) | |
| 15 | w := New(out) | |
| 16 | ||
| 17 | for _, tcase := range []struct { | |
| 18 | input, expectedOutput string | |
| 19 | }{ | |
| 20 | {input: "foo\n", expectedOutput: "foo\n"}, | |
| 21 | {input: "bar\n", expectedOutput: "foo\n" + ClearCursorAndLine + "bar\n"}, | |
| 22 | {input: "fizz\n", expectedOutput: "foo\n" + ClearCursorAndLine + "bar\n" + ClearCursorAndLine + "fizz\n"}, | |
| 23 | } { | |
| 24 | t.Run(tcase.input, func(t *testing.T) { | |
| 25 | s := []byte(tcase.input) | |
| 26 | lc := bytes.Count(s, []byte("\n")) | |
| 27 | w.Write(s) | |
| 28 | w.Flush(lc) | |
| 29 | output := out.String() | |
| 30 | if output != tcase.expectedOutput { | |
| 31 | t.Fatalf("want %q, got %q", tcase.expectedOutput, output) | |
| 32 | } | |
| 33 | }) | |
| 34 | } | |
| 35 | } |
| 0 | // +build windows | |
| 1 | ||
| 2 | package cwriter | |
| 3 | ||
| 4 | import ( | |
| 5 | "io" | |
| 6 | "strings" | |
| 7 | "syscall" | |
| 8 | "unsafe" | |
| 9 | ||
| 10 | "github.com/mattn/go-isatty" | |
| 11 | ) | |
| 12 | ||
| 13 | var kernel32 = syscall.NewLazyDLL("kernel32.dll") | |
| 14 | ||
| 15 | var ( | |
| 16 | procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") | |
| 17 | procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") | |
| 18 | procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") | |
| 19 | procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") | |
| 20 | ) | |
| 21 | ||
| 22 | type ( | |
| 23 | short int16 | |
| 24 | word uint16 | |
| 25 | dword uint32 | |
| 26 | ||
| 27 | coord struct { | |
| 28 | x short | |
| 29 | y short | |
| 30 | } | |
| 31 | smallRect struct { | |
| 32 | left short | |
| 33 | top short | |
| 34 | right short | |
| 35 | bottom short | |
| 36 | } | |
| 37 | consoleScreenBufferInfo struct { | |
| 38 | size coord | |
| 39 | cursorPosition coord | |
| 40 | attributes word | |
| 41 | window smallRect | |
| 42 | maximumWindowSize coord | |
| 43 | } | |
| 44 | ) | |
| 45 | ||
| 46 | // FdWriter is a writer with a file descriptor. | |
| 47 | type FdWriter interface { | |
| 48 | io.Writer | |
| 49 | Fd() uintptr | |
| 50 | } | |
| 51 | ||
| 52 | func (w *Writer) clearLines() error { | |
| 53 | f, ok := w.out.(FdWriter) | |
| 54 | if ok && !isatty.IsTerminal(f.Fd()) { | |
| 55 | _, err := io.WriteString(w.out, strings.Repeat(clearCursorAndLine, w.lineCount)) | |
| 56 | return err | |
| 57 | } | |
| 58 | fd := f.Fd() | |
| 59 | var info consoleScreenBufferInfo | |
| 60 | procGetConsoleScreenBufferInfo.Call(fd, uintptr(unsafe.Pointer(&info))) | |
| 61 | ||
| 62 | for i := 0; i < w.lineCount; i++ { | |
| 63 | // move the cursor up | |
| 64 | info.cursorPosition.y-- | |
| 65 | procSetConsoleCursorPosition.Call(fd, uintptr(*(*int32)(unsafe.Pointer(&info.cursorPosition)))) | |
| 66 | // clear the line | |
| 67 | cursor := coord{ | |
| 68 | x: info.window.left, | |
| 69 | y: info.window.top + info.cursorPosition.y, | |
| 70 | } | |
| 71 | var count, w dword | |
| 72 | count = dword(info.size.x) | |
| 73 | procFillConsoleOutputCharacter.Call(fd, uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&w))) | |
| 74 | } | |
| 75 | return nil | |
| 76 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "io" | |
| 5 | "strconv" | |
| 6 | "strings" | |
| 7 | ) | |
| 8 | ||
| 9 | const ( | |
| 10 | _ = iota | |
| 11 | KiB = 1 << (iota * 10) | |
| 12 | MiB | |
| 13 | GiB | |
| 14 | TiB | |
| 15 | ) | |
| 16 | ||
| 17 | const ( | |
| 18 | KB = 1000 | |
| 19 | MB = KB * 1000 | |
| 20 | GB = MB * 1000 | |
| 21 | TB = GB * 1000 | |
| 22 | ) | |
| 23 | ||
| 24 | const ( | |
| 25 | _ = iota | |
| 26 | UnitKiB | |
| 27 | UnitKB | |
| 28 | ) | |
| 29 | ||
| 30 | type CounterKiB int64 | |
| 31 | ||
| 32 | func (c CounterKiB) Format(st fmt.State, verb rune) { | |
| 33 | prec, ok := st.Precision() | |
| 34 | ||
| 35 | if verb == 'd' || !ok { | |
| 36 | prec = 0 | |
| 37 | } | |
| 38 | if verb == 'f' && !ok { | |
| 39 | prec = 6 | |
| 40 | } | |
| 41 | // retain old beahavior if s verb used | |
| 42 | if verb == 's' { | |
| 43 | prec = 1 | |
| 44 | } | |
| 45 | ||
| 46 | var res, unit string | |
| 47 | switch { | |
| 48 | case c >= TiB: | |
| 49 | unit = "TiB" | |
| 50 | res = strconv.FormatFloat(float64(c)/TiB, 'f', prec, 64) | |
| 51 | case c >= GiB: | |
| 52 | unit = "GiB" | |
| 53 | res = strconv.FormatFloat(float64(c)/GiB, 'f', prec, 64) | |
| 54 | case c >= MiB: | |
| 55 | unit = "MiB" | |
| 56 | res = strconv.FormatFloat(float64(c)/MiB, 'f', prec, 64) | |
| 57 | case c >= KiB: | |
| 58 | unit = "KiB" | |
| 59 | res = strconv.FormatFloat(float64(c)/KiB, 'f', prec, 64) | |
| 60 | default: | |
| 61 | unit = "b" | |
| 62 | res = strconv.FormatInt(int64(c), 10) | |
| 63 | } | |
| 64 | ||
| 65 | if st.Flag(' ') { | |
| 66 | res += " " | |
| 67 | } | |
| 68 | res += unit | |
| 69 | ||
| 70 | if w, ok := st.Width(); ok { | |
| 71 | if len(res) < w { | |
| 72 | pad := strings.Repeat(" ", w-len(res)) | |
| 73 | if st.Flag(int('-')) { | |
| 74 | res += pad | |
| 75 | } else { | |
| 76 | res = pad + res | |
| 77 | } | |
| 78 | } | |
| 79 | } | |
| 80 | ||
| 81 | io.WriteString(st, res) | |
| 82 | } | |
| 83 | ||
| 84 | type CounterKB int64 | |
| 85 | ||
| 86 | func (c CounterKB) Format(st fmt.State, verb rune) { | |
| 87 | prec, ok := st.Precision() | |
| 88 | ||
| 89 | if verb == 'd' || !ok { | |
| 90 | prec = 0 | |
| 91 | } | |
| 92 | if verb == 'f' && !ok { | |
| 93 | prec = 6 | |
| 94 | } | |
| 95 | // retain old beahavior if s verb used | |
| 96 | if verb == 's' { | |
| 97 | prec = 1 | |
| 98 | } | |
| 99 | ||
| 100 | var res, unit string | |
| 101 | switch { | |
| 102 | case c >= TB: | |
| 103 | unit = "TB" | |
| 104 | res = strconv.FormatFloat(float64(c)/TB, 'f', prec, 64) | |
| 105 | case c >= GB: | |
| 106 | unit = "GB" | |
| 107 | res = strconv.FormatFloat(float64(c)/GB, 'f', prec, 64) | |
| 108 | case c >= MB: | |
| 109 | unit = "MB" | |
| 110 | res = strconv.FormatFloat(float64(c)/MB, 'f', prec, 64) | |
| 111 | case c >= KB: | |
| 112 | unit = "kB" | |
| 113 | res = strconv.FormatFloat(float64(c)/KB, 'f', prec, 64) | |
| 114 | default: | |
| 115 | unit = "b" | |
| 116 | res = strconv.FormatInt(int64(c), 10) | |
| 117 | } | |
| 118 | ||
| 119 | if st.Flag(' ') { | |
| 120 | res += " " | |
| 121 | } | |
| 122 | res += unit | |
| 123 | ||
| 124 | if w, ok := st.Width(); ok { | |
| 125 | if len(res) < w { | |
| 126 | pad := strings.Repeat(" ", w-len(res)) | |
| 127 | if st.Flag(int('-')) { | |
| 128 | res += pad | |
| 129 | } else { | |
| 130 | res = pad + res | |
| 131 | } | |
| 132 | } | |
| 133 | } | |
| 134 | ||
| 135 | io.WriteString(st, res) | |
| 136 | } | |
| 137 | ||
| 138 | // CountersNoUnit is a wrapper around Counters with no unit param. | |
| 139 | func CountersNoUnit(pairFormat string, wcc ...WC) Decorator { | |
| 140 | return Counters(0, pairFormat, wcc...) | |
| 141 | } | |
| 142 | ||
| 143 | // CountersKibiByte is a wrapper around Counters with predefined unit UnitKiB (bytes/1024). | |
| 144 | func CountersKibiByte(pairFormat string, wcc ...WC) Decorator { | |
| 145 | return Counters(UnitKiB, pairFormat, wcc...) | |
| 146 | } | |
| 147 | ||
| 148 | // CountersKiloByte is a wrapper around Counters with predefined unit UnitKB (bytes/1000). | |
| 149 | func CountersKiloByte(pairFormat string, wcc ...WC) Decorator { | |
| 150 | return Counters(UnitKB, pairFormat, wcc...) | |
| 151 | } | |
| 152 | ||
| 153 | // Counters decorator with dynamic unit measure adjustment. | |
| 154 | // | |
| 155 | // `unit` one of [0|UnitKiB|UnitKB] zero for no unit | |
| 156 | // | |
| 157 | // `pairFormat` printf compatible verbs for current and total, like "%f" or "%d" | |
| 158 | // | |
| 159 | // `wcc` optional WC config | |
| 160 | // | |
| 161 | // pairFormat example if UnitKB is chosen: | |
| 162 | // | |
| 163 | // "%.1f / %.1f" = "1.0MB / 12.0MB" or "% .1f / % .1f" = "1.0 MB / 12.0 MB" | |
| 164 | func Counters(unit int, pairFormat string, wcc ...WC) Decorator { | |
| 165 | var wc WC | |
| 166 | for _, widthConf := range wcc { | |
| 167 | wc = widthConf | |
| 168 | } | |
| 169 | wc.Init() | |
| 170 | d := &countersDecorator{ | |
| 171 | WC: wc, | |
| 172 | unit: unit, | |
| 173 | pairFormat: pairFormat, | |
| 174 | } | |
| 175 | return d | |
| 176 | } | |
| 177 | ||
| 178 | type countersDecorator struct { | |
| 179 | WC | |
| 180 | unit int | |
| 181 | pairFormat string | |
| 182 | completeMsg *string | |
| 183 | } | |
| 184 | ||
| 185 | func (d *countersDecorator) Decor(st *Statistics) string { | |
| 186 | if st.Completed && d.completeMsg != nil { | |
| 187 | return d.FormatMsg(*d.completeMsg) | |
| 188 | } | |
| 189 | ||
| 190 | var str string | |
| 191 | switch d.unit { | |
| 192 | case UnitKiB: | |
| 193 | str = fmt.Sprintf(d.pairFormat, CounterKiB(st.Current), CounterKiB(st.Total)) | |
| 194 | case UnitKB: | |
| 195 | str = fmt.Sprintf(d.pairFormat, CounterKB(st.Current), CounterKB(st.Total)) | |
| 196 | default: | |
| 197 | str = fmt.Sprintf(d.pairFormat, st.Current, st.Total) | |
| 198 | } | |
| 199 | ||
| 200 | return d.FormatMsg(str) | |
| 201 | } | |
| 202 | ||
| 203 | func (d *countersDecorator) OnCompleteMessage(msg string) { | |
| 204 | d.completeMsg = &msg | |
| 205 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "testing" | |
| 5 | ) | |
| 6 | ||
| 7 | func TestCounterKiB(t *testing.T) { | |
| 8 | cases := map[string]struct { | |
| 9 | value int64 | |
| 10 | verb string | |
| 11 | expected string | |
| 12 | }{ | |
| 13 | "verb %f": {12345678, "%f", "11.773756MiB"}, | |
| 14 | "verb %.0f": {12345678, "%.0f", "12MiB"}, | |
| 15 | "verb %.1f": {12345678, "%.1f", "11.8MiB"}, | |
| 16 | "verb %.2f": {12345678, "%.2f", "11.77MiB"}, | |
| 17 | "verb %.3f": {12345678, "%.3f", "11.774MiB"}, | |
| 18 | ||
| 19 | "verb % f": {12345678, "% f", "11.773756 MiB"}, | |
| 20 | "verb % .0f": {12345678, "% .0f", "12 MiB"}, | |
| 21 | "verb % .1f": {12345678, "% .1f", "11.8 MiB"}, | |
| 22 | "verb % .2f": {12345678, "% .2f", "11.77 MiB"}, | |
| 23 | "verb % .3f": {12345678, "% .3f", "11.774 MiB"}, | |
| 24 | ||
| 25 | "verb %8.f": {12345678, "%8.f", " 12MiB"}, | |
| 26 | "verb %8.0f": {12345678, "%8.0f", " 12MiB"}, | |
| 27 | "verb %8.1f": {12345678, "%8.1f", " 11.8MiB"}, | |
| 28 | "verb %8.2f": {12345678, "%8.2f", "11.77MiB"}, | |
| 29 | "verb %8.3f": {12345678, "%8.3f", "11.774MiB"}, | |
| 30 | ||
| 31 | "verb % 8.f": {12345678, "% 8.f", " 12 MiB"}, | |
| 32 | "verb % 8.0f": {12345678, "% 8.0f", " 12 MiB"}, | |
| 33 | "verb % 8.1f": {12345678, "% 8.1f", "11.8 MiB"}, | |
| 34 | ||
| 35 | "verb %-8.f": {12345678, "%-8.f", "12MiB "}, | |
| 36 | "verb %-8.0f": {12345678, "%-8.0f", "12MiB "}, | |
| 37 | "verb %-8.1f": {12345678, "%-8.1f", "11.8MiB "}, | |
| 38 | "verb %-8.2f": {12345678, "%8.2f", "11.77MiB"}, | |
| 39 | "verb %-8.3f": {12345678, "%8.3f", "11.774MiB"}, | |
| 40 | ||
| 41 | "verb % -8.f": {12345678, "% -8.f", "12 MiB "}, | |
| 42 | "verb % -8.0f": {12345678, "% -8.0f", "12 MiB "}, | |
| 43 | "verb % -8.1f": {12345678, "% -8.1f", "11.8 MiB"}, | |
| 44 | ||
| 45 | "1000 %f": {1000, "%f", "1000b"}, | |
| 46 | "1000 %d": {1000, "%d", "1000b"}, | |
| 47 | "1000 %s": {1000, "%s", "1000b"}, | |
| 48 | "1024 %f": {1024, "%f", "1.000000KiB"}, | |
| 49 | "1024 %d": {1024, "%d", "1KiB"}, | |
| 50 | "1024 %.1f": {1024, "%.1f", "1.0KiB"}, | |
| 51 | "1024 %s": {1024, "%s", "1.0KiB"}, | |
| 52 | "3*MiB+140KiB %f": {3*MiB + 140*KiB, "%f", "3.136719MiB"}, | |
| 53 | "3*MiB+140KiB %d": {3*MiB + 140*KiB, "%d", "3MiB"}, | |
| 54 | "3*MiB+140KiB %.1f": {3*MiB + 140*KiB, "%.1f", "3.1MiB"}, | |
| 55 | "3*MiB+140KiB %s": {3*MiB + 140*KiB, "%s", "3.1MiB"}, | |
| 56 | "2*GiB %f": {2 * GiB, "%f", "2.000000GiB"}, | |
| 57 | "2*GiB %d": {2 * GiB, "%d", "2GiB"}, | |
| 58 | "2*GiB %.1f": {2 * GiB, "%.1f", "2.0GiB"}, | |
| 59 | "2*GiB %s": {2 * GiB, "%s", "2.0GiB"}, | |
| 60 | "4*TiB %f": {4 * TiB, "%f", "4.000000TiB"}, | |
| 61 | "4*TiB %d": {4 * TiB, "%d", "4TiB"}, | |
| 62 | "4*TiB %.1f": {4 * TiB, "%.1f", "4.0TiB"}, | |
| 63 | "4*TiB %s": {4 * TiB, "%s", "4.0TiB"}, | |
| 64 | } | |
| 65 | for name, tc := range cases { | |
| 66 | t.Run(name, func(t *testing.T) { | |
| 67 | got := fmt.Sprintf(tc.verb, CounterKiB(tc.value)) | |
| 68 | if got != tc.expected { | |
| 69 | t.Fatalf("expected: %q, got: %q\n", tc.expected, got) | |
| 70 | } | |
| 71 | }) | |
| 72 | } | |
| 73 | } | |
| 74 | ||
| 75 | func TestCounterKB(t *testing.T) { | |
| 76 | cases := map[string]struct { | |
| 77 | value int64 | |
| 78 | verb string | |
| 79 | expected string | |
| 80 | }{ | |
| 81 | "verb %f": {12345678, "%f", "12.345678MB"}, | |
| 82 | "verb %.0f": {12345678, "%.0f", "12MB"}, | |
| 83 | "verb %.1f": {12345678, "%.1f", "12.3MB"}, | |
| 84 | "verb %.2f": {12345678, "%.2f", "12.35MB"}, | |
| 85 | "verb %.3f": {12345678, "%.3f", "12.346MB"}, | |
| 86 | ||
| 87 | "verb % f": {12345678, "% f", "12.345678 MB"}, | |
| 88 | "verb % .0f": {12345678, "% .0f", "12 MB"}, | |
| 89 | "verb % .1f": {12345678, "% .1f", "12.3 MB"}, | |
| 90 | "verb % .2f": {12345678, "% .2f", "12.35 MB"}, | |
| 91 | "verb % .3f": {12345678, "% .3f", "12.346 MB"}, | |
| 92 | ||
| 93 | "verb %8.f": {12345678, "%8.f", " 12MB"}, | |
| 94 | "verb %8.0f": {12345678, "%8.0f", " 12MB"}, | |
| 95 | "verb %8.1f": {12345678, "%8.1f", " 12.3MB"}, | |
| 96 | "verb %8.2f": {12345678, "%8.2f", " 12.35MB"}, | |
| 97 | "verb %8.3f": {12345678, "%8.3f", "12.346MB"}, | |
| 98 | ||
| 99 | "verb % 8.f": {12345678, "% 8.f", " 12 MB"}, | |
| 100 | "verb % 8.0f": {12345678, "% 8.0f", " 12 MB"}, | |
| 101 | "verb % 8.1f": {12345678, "% 8.1f", " 12.3 MB"}, | |
| 102 | ||
| 103 | "verb %-8.f": {12345678, "%-8.f", "12MB "}, | |
| 104 | "verb %-8.0f": {12345678, "%-8.0f", "12MB "}, | |
| 105 | "verb %-8.1f": {12345678, "%-8.1f", "12.3MB "}, | |
| 106 | "verb %-8.2f": {12345678, "%8.2f", " 12.35MB"}, | |
| 107 | "verb %-8.3f": {12345678, "%8.3f", "12.346MB"}, | |
| 108 | ||
| 109 | "verb % -8.f": {12345678, "% -8.f", "12 MB "}, | |
| 110 | "verb % -8.0f": {12345678, "% -8.0f", "12 MB "}, | |
| 111 | "verb % -8.1f": {12345678, "% -8.1f", "12.3 MB "}, | |
| 112 | ||
| 113 | "1000 %f": {1000, "%f", "1.000000kB"}, | |
| 114 | "1000 %d": {1000, "%d", "1kB"}, | |
| 115 | "1000 %s": {1000, "%s", "1.0kB"}, | |
| 116 | "1024 %f": {1024, "%f", "1.024000kB"}, | |
| 117 | "1024 %d": {1024, "%d", "1kB"}, | |
| 118 | "1024 %.1f": {1024, "%.1f", "1.0kB"}, | |
| 119 | "1024 %s": {1024, "%s", "1.0kB"}, | |
| 120 | "3*MB+140*KB %f": {3*MB + 140*KB, "%f", "3.140000MB"}, | |
| 121 | "3*MB+140*KB %d": {3*MB + 140*KB, "%d", "3MB"}, | |
| 122 | "3*MB+140*KB %.1f": {3*MB + 140*KB, "%.1f", "3.1MB"}, | |
| 123 | "3*MB+140*KB %s": {3*MB + 140*KB, "%s", "3.1MB"}, | |
| 124 | "2*GB %f": {2 * GB, "%f", "2.000000GB"}, | |
| 125 | "2*GB %d": {2 * GB, "%d", "2GB"}, | |
| 126 | "2*GB %.1f": {2 * GB, "%.1f", "2.0GB"}, | |
| 127 | "2*GB %s": {2 * GB, "%s", "2.0GB"}, | |
| 128 | "4*TB %f": {4 * TB, "%f", "4.000000TB"}, | |
| 129 | "4*TB %d": {4 * TB, "%d", "4TB"}, | |
| 130 | "4*TB %.1f": {4 * TB, "%.1f", "4.0TB"}, | |
| 131 | "4*TB %s": {4 * TB, "%s", "4.0TB"}, | |
| 132 | } | |
| 133 | for name, tc := range cases { | |
| 134 | t.Run(name, func(t *testing.T) { | |
| 135 | got := fmt.Sprintf(tc.verb, CounterKB(tc.value)) | |
| 136 | if got != tc.expected { | |
| 137 | t.Fatalf("expected: %q, got: %q\n", tc.expected, got) | |
| 138 | } | |
| 139 | }) | |
| 140 | } | |
| 141 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "time" | |
| 5 | "unicode/utf8" | |
| 6 | ) | |
| 7 | ||
| 8 | const ( | |
| 9 | // DidentRight bit specifies identation direction. | |
| 10 | // |foo |b | With DidentRight | |
| 11 | // | foo| b| Without DidentRight | |
| 12 | DidentRight = 1 << iota | |
| 13 | ||
| 14 | // DextraSpace bit adds extra space, makes sense with DSyncWidth only. | |
| 15 | // When DidentRight bit set, the space will be added to the right, | |
| 16 | // otherwise to the left. | |
| 17 | DextraSpace | |
| 18 | ||
| 19 | // DSyncWidth bit enables same column width synchronization. | |
| 20 | // Effective with multiple bars only. | |
| 21 | DSyncWidth | |
| 22 | ||
| 23 | // DSyncWidthR is shortcut for DSyncWidth|DidentRight | |
| 24 | DSyncWidthR = DSyncWidth | DidentRight | |
| 25 | ||
| 26 | // DSyncSpace is shortcut for DSyncWidth|DextraSpace | |
| 27 | DSyncSpace = DSyncWidth | DextraSpace | |
| 28 | ||
| 29 | // DSyncSpaceR is shortcut for DSyncWidth|DextraSpace|DidentRight | |
| 30 | DSyncSpaceR = DSyncWidth | DextraSpace | DidentRight | |
| 31 | ) | |
| 32 | ||
| 33 | const ( | |
| 34 | ET_STYLE_GO = iota | |
| 35 | ET_STYLE_HHMMSS | |
| 36 | ET_STYLE_HHMM | |
| 37 | ET_STYLE_MMSS | |
| 38 | ) | |
| 39 | ||
| 40 | // Statistics is a struct, which gets passed to a Decorator. | |
| 41 | type Statistics struct { | |
| 42 | ID int | |
| 43 | Completed bool | |
| 44 | Total int64 | |
| 45 | Current int64 | |
| 46 | } | |
| 47 | ||
| 48 | // Decorator interface. | |
| 49 | // A decorator must implement this interface, in order to be used with mpb library. | |
| 50 | type Decorator interface { | |
| 51 | Decor(*Statistics) string | |
| 52 | Syncable | |
| 53 | } | |
| 54 | ||
| 55 | // Syncable interface. | |
| 56 | // All decorators implement this interface implicitly. | |
| 57 | // Its Syncable method exposes width sync channel, if sync is enabled. | |
| 58 | type Syncable interface { | |
| 59 | Syncable() (bool, chan int) | |
| 60 | } | |
| 61 | ||
| 62 | // OnCompleteMessenger interface. | |
| 63 | // Decorators implementing this interface suppose to return provided string on complete event. | |
| 64 | type OnCompleteMessenger interface { | |
| 65 | OnCompleteMessage(string) | |
| 66 | } | |
| 67 | ||
| 68 | // AmountReceiver interface. | |
| 69 | // If decorator needs to receive increment amount, | |
| 70 | // so this is the right interface to implement. | |
| 71 | type AmountReceiver interface { | |
| 72 | NextAmount(int, ...time.Duration) | |
| 73 | } | |
| 74 | ||
| 75 | // ShutdownListener interface. | |
| 76 | // If decorator needs to be notified once upon bar shutdown event, | |
| 77 | // so this is the right interface to implement. | |
| 78 | type ShutdownListener interface { | |
| 79 | Shutdown() | |
| 80 | } | |
| 81 | ||
| 82 | // Global convenience shortcuts | |
| 83 | var ( | |
| 84 | WCSyncWidth = WC{C: DSyncWidth} | |
| 85 | WCSyncWidthR = WC{C: DSyncWidthR} | |
| 86 | WCSyncSpace = WC{C: DSyncSpace} | |
| 87 | WCSyncSpaceR = WC{C: DSyncSpaceR} | |
| 88 | ) | |
| 89 | ||
| 90 | // WC is a struct with two public fields W and C, both of int type. | |
| 91 | // W represents width and C represents bit set of width related config. | |
| 92 | type WC struct { | |
| 93 | W int | |
| 94 | C int | |
| 95 | format string | |
| 96 | wsync chan int | |
| 97 | } | |
| 98 | ||
| 99 | // FormatMsg formats final message according to WC.W and WC.C. | |
| 100 | // Should be called by any Decorator implementation. | |
| 101 | func (wc WC) FormatMsg(msg string) string { | |
| 102 | if (wc.C & DSyncWidth) != 0 { | |
| 103 | wc.wsync <- utf8.RuneCountInString(msg) | |
| 104 | max := <-wc.wsync | |
| 105 | if max == 0 { | |
| 106 | max = wc.W | |
| 107 | } | |
| 108 | if (wc.C & DextraSpace) != 0 { | |
| 109 | max++ | |
| 110 | } | |
| 111 | return fmt.Sprintf(fmt.Sprintf(wc.format, max), msg) | |
| 112 | } | |
| 113 | return fmt.Sprintf(fmt.Sprintf(wc.format, wc.W), msg) | |
| 114 | } | |
| 115 | ||
| 116 | // Init initializes width related config. | |
| 117 | func (wc *WC) Init() { | |
| 118 | wc.format = "%%" | |
| 119 | if (wc.C & DidentRight) != 0 { | |
| 120 | wc.format += "-" | |
| 121 | } | |
| 122 | wc.format += "%ds" | |
| 123 | if (wc.C & DSyncWidth) != 0 { | |
| 124 | wc.wsync = make(chan int) | |
| 125 | } | |
| 126 | } | |
| 127 | ||
| 128 | func (wc *WC) Syncable() (bool, chan int) { | |
| 129 | return (wc.C & DSyncWidth) != 0, wc.wsync | |
| 130 | } | |
| 131 | ||
| 132 | // OnComplete returns decorator, which wraps provided decorator, with sole | |
| 133 | // purpose to display provided message on complete event. | |
| 134 | // | |
| 135 | // `decorator` Decorator to wrap | |
| 136 | // | |
| 137 | // `message` message to display on complete event | |
| 138 | func OnComplete(decorator Decorator, message string) Decorator { | |
| 139 | if d, ok := decorator.(OnCompleteMessenger); ok { | |
| 140 | d.OnCompleteMessage(message) | |
| 141 | } | |
| 142 | return decorator | |
| 143 | } |
| 0 | // Copyright (C) 2016-2018 Vladimir Bauer | |
| 1 | // Use of this source code is governed by a BSD-style | |
| 2 | // license that can be found in the LICENSE file. | |
| 3 | ||
| 4 | /* | |
| 5 | Package decor contains common decorators used by "github.com/vbauerster/mpb" package. | |
| 6 | ||
| 7 | Some decorators returned by this package might have a closure state. It is ok to use | |
| 8 | decorators concurrently, unless you share the same decorator among multiple | |
| 9 | *mpb.Bar instances. To avoid data races, create new decorator per *mpb.Bar instance. | |
| 10 | ||
| 11 | Don't: | |
| 12 | ||
| 13 | p := mpb.New() | |
| 14 | name := decor.Name("bar") | |
| 15 | p.AddBar(100, mpb.AppendDecorators(name)) | |
| 16 | p.AddBar(100, mpb.AppendDecorators(name)) | |
| 17 | ||
| 18 | Do: | |
| 19 | ||
| 20 | p := mpb.New() | |
| 21 | p.AddBar(100, mpb.AppendDecorators(decor.Name("bar1"))) | |
| 22 | p.AddBar(100, mpb.AppendDecorators(decor.Name("bar2"))) | |
| 23 | */ | |
| 24 | package decor |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "time" | |
| 5 | ) | |
| 6 | ||
| 7 | // Elapsed returns elapsed time decorator. | |
| 8 | // | |
| 9 | // `style` one of [ET_STYLE_GO|ET_STYLE_HHMMSS|ET_STYLE_HHMM|ET_STYLE_MMSS] | |
| 10 | // | |
| 11 | // `wcc` optional WC config | |
| 12 | func Elapsed(style int, wcc ...WC) Decorator { | |
| 13 | var wc WC | |
| 14 | for _, widthConf := range wcc { | |
| 15 | wc = widthConf | |
| 16 | } | |
| 17 | wc.Init() | |
| 18 | d := &elapsedDecorator{ | |
| 19 | WC: wc, | |
| 20 | style: style, | |
| 21 | startTime: time.Now(), | |
| 22 | } | |
| 23 | return d | |
| 24 | } | |
| 25 | ||
| 26 | type elapsedDecorator struct { | |
| 27 | WC | |
| 28 | style int | |
| 29 | startTime time.Time | |
| 30 | msg string | |
| 31 | completeMsg *string | |
| 32 | } | |
| 33 | ||
| 34 | func (d *elapsedDecorator) Decor(st *Statistics) string { | |
| 35 | if st.Completed { | |
| 36 | if d.completeMsg != nil { | |
| 37 | return d.FormatMsg(*d.completeMsg) | |
| 38 | } | |
| 39 | return d.FormatMsg(d.msg) | |
| 40 | } | |
| 41 | ||
| 42 | timeElapsed := time.Since(d.startTime) | |
| 43 | hours := int64((timeElapsed / time.Hour) % 60) | |
| 44 | minutes := int64((timeElapsed / time.Minute) % 60) | |
| 45 | seconds := int64((timeElapsed / time.Second) % 60) | |
| 46 | ||
| 47 | switch d.style { | |
| 48 | case ET_STYLE_GO: | |
| 49 | d.msg = fmt.Sprint(time.Duration(timeElapsed.Seconds()) * time.Second) | |
| 50 | case ET_STYLE_HHMMSS: | |
| 51 | d.msg = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 52 | case ET_STYLE_HHMM: | |
| 53 | d.msg = fmt.Sprintf("%02d:%02d", hours, minutes) | |
| 54 | case ET_STYLE_MMSS: | |
| 55 | if hours > 0 { | |
| 56 | d.msg = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 57 | } else { | |
| 58 | d.msg = fmt.Sprintf("%02d:%02d", minutes, seconds) | |
| 59 | } | |
| 60 | } | |
| 61 | ||
| 62 | return d.FormatMsg(d.msg) | |
| 63 | } | |
| 64 | ||
| 65 | func (d *elapsedDecorator) OnCompleteMessage(msg string) { | |
| 66 | d.completeMsg = &msg | |
| 67 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math" | |
| 5 | "time" | |
| 6 | ||
| 7 | "github.com/VividCortex/ewma" | |
| 8 | "github.com/vbauerster/mpb/internal" | |
| 9 | ) | |
| 10 | ||
| 11 | type TimeNormalizer func(time.Duration) time.Duration | |
| 12 | ||
| 13 | // EwmaETA exponential-weighted-moving-average based ETA decorator. | |
| 14 | // | |
| 15 | // `style` one of [ET_STYLE_GO|ET_STYLE_HHMMSS|ET_STYLE_HHMM|ET_STYLE_MMSS] | |
| 16 | // | |
| 17 | // `age` is the previous N samples to average over. | |
| 18 | // | |
| 19 | // `wcc` optional WC config | |
| 20 | func EwmaETA(style int, age float64, wcc ...WC) Decorator { | |
| 21 | return MovingAverageETA(style, ewma.NewMovingAverage(age), NopNormalizer(), wcc...) | |
| 22 | } | |
| 23 | ||
| 24 | // MovingAverageETA decorator relies on MovingAverage implementation to calculate its average. | |
| 25 | // | |
| 26 | // `style` one of [ET_STYLE_GO|ET_STYLE_HHMMSS|ET_STYLE_HHMM|ET_STYLE_MMSS] | |
| 27 | // | |
| 28 | // `average` available implementations of MovingAverage [ewma.MovingAverage|NewMedian|NewMedianEwma] | |
| 29 | // | |
| 30 | // `normalizer` available implementations are [NopNormalizer|FixedIntervalTimeNormalizer|MaxTolerateTimeNormalizer] | |
| 31 | // | |
| 32 | // `wcc` optional WC config | |
| 33 | func MovingAverageETA(style int, average MovingAverage, normalizer TimeNormalizer, wcc ...WC) Decorator { | |
| 34 | var wc WC | |
| 35 | for _, widthConf := range wcc { | |
| 36 | wc = widthConf | |
| 37 | } | |
| 38 | wc.Init() | |
| 39 | d := &movingAverageETA{ | |
| 40 | WC: wc, | |
| 41 | style: style, | |
| 42 | average: average, | |
| 43 | normalizer: normalizer, | |
| 44 | } | |
| 45 | return d | |
| 46 | } | |
| 47 | ||
| 48 | type movingAverageETA struct { | |
| 49 | WC | |
| 50 | style int | |
| 51 | average ewma.MovingAverage | |
| 52 | completeMsg *string | |
| 53 | normalizer TimeNormalizer | |
| 54 | } | |
| 55 | ||
| 56 | func (d *movingAverageETA) Decor(st *Statistics) string { | |
| 57 | if st.Completed && d.completeMsg != nil { | |
| 58 | return d.FormatMsg(*d.completeMsg) | |
| 59 | } | |
| 60 | ||
| 61 | v := internal.Round(d.average.Value()) | |
| 62 | remaining := d.normalizer(time.Duration((st.Total - st.Current) * int64(v))) | |
| 63 | hours := int64((remaining / time.Hour) % 60) | |
| 64 | minutes := int64((remaining / time.Minute) % 60) | |
| 65 | seconds := int64((remaining / time.Second) % 60) | |
| 66 | ||
| 67 | var str string | |
| 68 | switch d.style { | |
| 69 | case ET_STYLE_GO: | |
| 70 | str = fmt.Sprint(time.Duration(remaining.Seconds()) * time.Second) | |
| 71 | case ET_STYLE_HHMMSS: | |
| 72 | str = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 73 | case ET_STYLE_HHMM: | |
| 74 | str = fmt.Sprintf("%02d:%02d", hours, minutes) | |
| 75 | case ET_STYLE_MMSS: | |
| 76 | if hours > 0 { | |
| 77 | str = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 78 | } else { | |
| 79 | str = fmt.Sprintf("%02d:%02d", minutes, seconds) | |
| 80 | } | |
| 81 | } | |
| 82 | ||
| 83 | return d.FormatMsg(str) | |
| 84 | } | |
| 85 | ||
| 86 | func (d *movingAverageETA) NextAmount(n int, wdd ...time.Duration) { | |
| 87 | var workDuration time.Duration | |
| 88 | for _, wd := range wdd { | |
| 89 | workDuration = wd | |
| 90 | } | |
| 91 | lastItemEstimate := float64(workDuration) / float64(n) | |
| 92 | if math.IsInf(lastItemEstimate, 0) || math.IsNaN(lastItemEstimate) { | |
| 93 | return | |
| 94 | } | |
| 95 | d.average.Add(lastItemEstimate) | |
| 96 | } | |
| 97 | ||
| 98 | func (d *movingAverageETA) OnCompleteMessage(msg string) { | |
| 99 | d.completeMsg = &msg | |
| 100 | } | |
| 101 | ||
| 102 | // AverageETA decorator. | |
| 103 | // | |
| 104 | // `style` one of [ET_STYLE_GO|ET_STYLE_HHMMSS|ET_STYLE_HHMM|ET_STYLE_MMSS] | |
| 105 | // | |
| 106 | // `wcc` optional WC config | |
| 107 | func AverageETA(style int, wcc ...WC) Decorator { | |
| 108 | var wc WC | |
| 109 | for _, widthConf := range wcc { | |
| 110 | wc = widthConf | |
| 111 | } | |
| 112 | wc.Init() | |
| 113 | d := &averageETA{ | |
| 114 | WC: wc, | |
| 115 | style: style, | |
| 116 | startTime: time.Now(), | |
| 117 | } | |
| 118 | return d | |
| 119 | } | |
| 120 | ||
| 121 | type averageETA struct { | |
| 122 | WC | |
| 123 | style int | |
| 124 | startTime time.Time | |
| 125 | completeMsg *string | |
| 126 | } | |
| 127 | ||
| 128 | func (d *averageETA) Decor(st *Statistics) string { | |
| 129 | if st.Completed && d.completeMsg != nil { | |
| 130 | return d.FormatMsg(*d.completeMsg) | |
| 131 | } | |
| 132 | ||
| 133 | var str string | |
| 134 | timeElapsed := time.Since(d.startTime) | |
| 135 | v := internal.Round(float64(timeElapsed) / float64(st.Current)) | |
| 136 | if math.IsInf(v, 0) || math.IsNaN(v) { | |
| 137 | v = 0 | |
| 138 | } | |
| 139 | remaining := time.Duration((st.Total - st.Current) * int64(v)) | |
| 140 | hours := int64((remaining / time.Hour) % 60) | |
| 141 | minutes := int64((remaining / time.Minute) % 60) | |
| 142 | seconds := int64((remaining / time.Second) % 60) | |
| 143 | ||
| 144 | switch d.style { | |
| 145 | case ET_STYLE_GO: | |
| 146 | str = fmt.Sprint(time.Duration(remaining.Seconds()) * time.Second) | |
| 147 | case ET_STYLE_HHMMSS: | |
| 148 | str = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 149 | case ET_STYLE_HHMM: | |
| 150 | str = fmt.Sprintf("%02d:%02d", hours, minutes) | |
| 151 | case ET_STYLE_MMSS: | |
| 152 | if hours > 0 { | |
| 153 | str = fmt.Sprintf("%02d:%02d:%02d", hours, minutes, seconds) | |
| 154 | } else { | |
| 155 | str = fmt.Sprintf("%02d:%02d", minutes, seconds) | |
| 156 | } | |
| 157 | } | |
| 158 | ||
| 159 | return d.FormatMsg(str) | |
| 160 | } | |
| 161 | ||
| 162 | func (d *averageETA) OnCompleteMessage(msg string) { | |
| 163 | d.completeMsg = &msg | |
| 164 | } | |
| 165 | ||
| 166 | func MaxTolerateTimeNormalizer(maxTolerate time.Duration) TimeNormalizer { | |
| 167 | var normalized time.Duration | |
| 168 | var lastCall time.Time | |
| 169 | return func(remaining time.Duration) time.Duration { | |
| 170 | if diff := normalized - remaining; diff <= 0 || diff > maxTolerate || remaining < maxTolerate/2 { | |
| 171 | normalized = remaining | |
| 172 | lastCall = time.Now() | |
| 173 | return remaining | |
| 174 | } | |
| 175 | normalized -= time.Since(lastCall) | |
| 176 | lastCall = time.Now() | |
| 177 | return normalized | |
| 178 | } | |
| 179 | } | |
| 180 | ||
| 181 | func FixedIntervalTimeNormalizer(updInterval int) TimeNormalizer { | |
| 182 | var normalized time.Duration | |
| 183 | var lastCall time.Time | |
| 184 | var count int | |
| 185 | return func(remaining time.Duration) time.Duration { | |
| 186 | if count == 0 || remaining <= time.Duration(15*time.Second) { | |
| 187 | count = updInterval | |
| 188 | normalized = remaining | |
| 189 | lastCall = time.Now() | |
| 190 | return remaining | |
| 191 | } | |
| 192 | count-- | |
| 193 | normalized -= time.Since(lastCall) | |
| 194 | lastCall = time.Now() | |
| 195 | if normalized > 0 { | |
| 196 | return normalized | |
| 197 | } | |
| 198 | return remaining | |
| 199 | } | |
| 200 | } | |
| 201 | ||
| 202 | func NopNormalizer() TimeNormalizer { | |
| 203 | return func(remaining time.Duration) time.Duration { | |
| 204 | return remaining | |
| 205 | } | |
| 206 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "sort" | |
| 4 | ||
| 5 | "github.com/VividCortex/ewma" | |
| 6 | ) | |
| 7 | ||
| 8 | // MovingAverage is the interface that computes a moving average over a time- | |
| 9 | // series stream of numbers. The average may be over a window or exponentially | |
| 10 | // decaying. | |
| 11 | type MovingAverage interface { | |
| 12 | Add(float64) | |
| 13 | Value() float64 | |
| 14 | Set(float64) | |
| 15 | } | |
| 16 | ||
| 17 | type medianWindow [3]float64 | |
| 18 | ||
| 19 | func (s *medianWindow) Len() int { return len(s) } | |
| 20 | func (s *medianWindow) Swap(i, j int) { s[i], s[j] = s[j], s[i] } | |
| 21 | func (s *medianWindow) Less(i, j int) bool { return s[i] < s[j] } | |
| 22 | ||
| 23 | func (s *medianWindow) Add(value float64) { | |
| 24 | s[0], s[1] = s[1], s[2] | |
| 25 | s[2] = value | |
| 26 | } | |
| 27 | ||
| 28 | func (s *medianWindow) Value() float64 { | |
| 29 | tmp := *s | |
| 30 | sort.Sort(&tmp) | |
| 31 | return tmp[1] | |
| 32 | } | |
| 33 | ||
| 34 | func (s *medianWindow) Set(value float64) { | |
| 35 | for i := 0; i < len(s); i++ { | |
| 36 | s[i] = value | |
| 37 | } | |
| 38 | } | |
| 39 | ||
| 40 | // NewMedian is fixed last 3 samples median MovingAverage. | |
| 41 | func NewMedian() MovingAverage { | |
| 42 | return new(medianWindow) | |
| 43 | } | |
| 44 | ||
| 45 | type medianEwma struct { | |
| 46 | count uint | |
| 47 | median MovingAverage | |
| 48 | MovingAverage | |
| 49 | } | |
| 50 | ||
| 51 | func (s *medianEwma) Add(v float64) { | |
| 52 | s.median.Add(v) | |
| 53 | if s.count >= 2 { | |
| 54 | s.MovingAverage.Add(s.median.Value()) | |
| 55 | } | |
| 56 | s.count++ | |
| 57 | } | |
| 58 | ||
| 59 | // NewMedianEwma is ewma based MovingAverage, which gets its values from median MovingAverage. | |
| 60 | func NewMedianEwma(age ...float64) MovingAverage { | |
| 61 | return &medianEwma{ | |
| 62 | MovingAverage: ewma.NewMovingAverage(age...), | |
| 63 | median: NewMedian(), | |
| 64 | } | |
| 65 | } |
| 0 | package decor | |
| 1 | ||
| 2 | // StaticName returns name decorator. | |
| 3 | // | |
| 4 | // `name` string to display | |
| 5 | // | |
| 6 | // `wcc` optional WC config | |
| 7 | func StaticName(name string, wcc ...WC) Decorator { | |
| 8 | return Name(name, wcc...) | |
| 9 | } | |
| 10 | ||
| 11 | // Name returns name decorator. | |
| 12 | // | |
| 13 | // `name` string to display | |
| 14 | // | |
| 15 | // `wcc` optional WC config | |
| 16 | func Name(name string, wcc ...WC) Decorator { | |
| 17 | var wc WC | |
| 18 | for _, widthConf := range wcc { | |
| 19 | wc = widthConf | |
| 20 | } | |
| 21 | wc.Init() | |
| 22 | d := &nameDecorator{ | |
| 23 | WC: wc, | |
| 24 | msg: name, | |
| 25 | } | |
| 26 | return d | |
| 27 | } | |
| 28 | ||
| 29 | type nameDecorator struct { | |
| 30 | WC | |
| 31 | msg string | |
| 32 | complete *string | |
| 33 | } | |
| 34 | ||
| 35 | func (d *nameDecorator) Decor(st *Statistics) string { | |
| 36 | if st.Completed && d.complete != nil { | |
| 37 | return d.FormatMsg(*d.complete) | |
| 38 | } | |
| 39 | return d.FormatMsg(d.msg) | |
| 40 | } | |
| 41 | ||
| 42 | func (d *nameDecorator) OnCompleteMessage(msg string) { | |
| 43 | d.complete = &msg | |
| 44 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | ||
| 5 | "github.com/vbauerster/mpb/internal" | |
| 6 | ) | |
| 7 | ||
| 8 | // Percentage returns percentage decorator. | |
| 9 | // | |
| 10 | // `wcc` optional WC config | |
| 11 | func Percentage(wcc ...WC) Decorator { | |
| 12 | var wc WC | |
| 13 | for _, widthConf := range wcc { | |
| 14 | wc = widthConf | |
| 15 | } | |
| 16 | wc.Init() | |
| 17 | d := &percentageDecorator{ | |
| 18 | WC: wc, | |
| 19 | } | |
| 20 | return d | |
| 21 | } | |
| 22 | ||
| 23 | type percentageDecorator struct { | |
| 24 | WC | |
| 25 | completeMsg *string | |
| 26 | } | |
| 27 | ||
| 28 | func (d *percentageDecorator) Decor(st *Statistics) string { | |
| 29 | if st.Completed && d.completeMsg != nil { | |
| 30 | return d.FormatMsg(*d.completeMsg) | |
| 31 | } | |
| 32 | str := fmt.Sprintf("%d %%", internal.Percentage(st.Total, st.Current, 100)) | |
| 33 | return d.FormatMsg(str) | |
| 34 | } | |
| 35 | ||
| 36 | func (d *percentageDecorator) OnCompleteMessage(msg string) { | |
| 37 | d.completeMsg = &msg | |
| 38 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "io" | |
| 5 | "math" | |
| 6 | "strconv" | |
| 7 | "strings" | |
| 8 | "time" | |
| 9 | ||
| 10 | "github.com/VividCortex/ewma" | |
| 11 | ) | |
| 12 | ||
| 13 | type SpeedKiB float64 | |
| 14 | ||
| 15 | func (s SpeedKiB) Format(st fmt.State, verb rune) { | |
| 16 | prec, ok := st.Precision() | |
| 17 | ||
| 18 | if verb == 'd' || !ok { | |
| 19 | prec = 0 | |
| 20 | } | |
| 21 | if verb == 'f' && !ok { | |
| 22 | prec = 6 | |
| 23 | } | |
| 24 | // retain old beahavior if s verb used | |
| 25 | if verb == 's' { | |
| 26 | prec = 1 | |
| 27 | } | |
| 28 | ||
| 29 | var res, unit string | |
| 30 | switch { | |
| 31 | case s >= TiB: | |
| 32 | unit = "TiB/s" | |
| 33 | res = strconv.FormatFloat(float64(s)/TiB, 'f', prec, 64) | |
| 34 | case s >= GiB: | |
| 35 | unit = "GiB/s" | |
| 36 | res = strconv.FormatFloat(float64(s)/GiB, 'f', prec, 64) | |
| 37 | case s >= MiB: | |
| 38 | unit = "MiB/s" | |
| 39 | res = strconv.FormatFloat(float64(s)/MiB, 'f', prec, 64) | |
| 40 | case s >= KiB: | |
| 41 | unit = "KiB/s" | |
| 42 | res = strconv.FormatFloat(float64(s)/KiB, 'f', prec, 64) | |
| 43 | default: | |
| 44 | unit = "b/s" | |
| 45 | res = strconv.FormatInt(int64(s), 10) | |
| 46 | } | |
| 47 | ||
| 48 | if st.Flag(' ') { | |
| 49 | res += " " | |
| 50 | } | |
| 51 | res += unit | |
| 52 | ||
| 53 | if w, ok := st.Width(); ok { | |
| 54 | if len(res) < w { | |
| 55 | pad := strings.Repeat(" ", w-len(res)) | |
| 56 | if st.Flag(int('-')) { | |
| 57 | res += pad | |
| 58 | } else { | |
| 59 | res = pad + res | |
| 60 | } | |
| 61 | } | |
| 62 | } | |
| 63 | ||
| 64 | io.WriteString(st, res) | |
| 65 | } | |
| 66 | ||
| 67 | type SpeedKB float64 | |
| 68 | ||
| 69 | func (s SpeedKB) Format(st fmt.State, verb rune) { | |
| 70 | prec, ok := st.Precision() | |
| 71 | ||
| 72 | if verb == 'd' || !ok { | |
| 73 | prec = 0 | |
| 74 | } | |
| 75 | if verb == 'f' && !ok { | |
| 76 | prec = 6 | |
| 77 | } | |
| 78 | // retain old beahavior if s verb used | |
| 79 | if verb == 's' { | |
| 80 | prec = 1 | |
| 81 | } | |
| 82 | ||
| 83 | var res, unit string | |
| 84 | switch { | |
| 85 | case s >= TB: | |
| 86 | unit = "TB/s" | |
| 87 | res = strconv.FormatFloat(float64(s)/TB, 'f', prec, 64) | |
| 88 | case s >= GB: | |
| 89 | unit = "GB/s" | |
| 90 | res = strconv.FormatFloat(float64(s)/GB, 'f', prec, 64) | |
| 91 | case s >= MB: | |
| 92 | unit = "MB/s" | |
| 93 | res = strconv.FormatFloat(float64(s)/MB, 'f', prec, 64) | |
| 94 | case s >= KB: | |
| 95 | unit = "kB/s" | |
| 96 | res = strconv.FormatFloat(float64(s)/KB, 'f', prec, 64) | |
| 97 | default: | |
| 98 | unit = "b/s" | |
| 99 | res = strconv.FormatInt(int64(s), 10) | |
| 100 | } | |
| 101 | ||
| 102 | if st.Flag(' ') { | |
| 103 | res += " " | |
| 104 | } | |
| 105 | res += unit | |
| 106 | ||
| 107 | if w, ok := st.Width(); ok { | |
| 108 | if len(res) < w { | |
| 109 | pad := strings.Repeat(" ", w-len(res)) | |
| 110 | if st.Flag(int('-')) { | |
| 111 | res += pad | |
| 112 | } else { | |
| 113 | res = pad + res | |
| 114 | } | |
| 115 | } | |
| 116 | } | |
| 117 | ||
| 118 | io.WriteString(st, res) | |
| 119 | } | |
| 120 | ||
| 121 | // EwmaSpeed exponential-weighted-moving-average based speed decorator, | |
| 122 | // with dynamic unit measure adjustment. | |
| 123 | // | |
| 124 | // `unit` one of [0|UnitKiB|UnitKB] zero for no unit | |
| 125 | // | |
| 126 | // `unitFormat` printf compatible verb for value, like "%f" or "%d" | |
| 127 | // | |
| 128 | // `average` MovingAverage implementation | |
| 129 | // | |
| 130 | // `wcc` optional WC config | |
| 131 | // | |
| 132 | // unitFormat example if UnitKiB is chosen: | |
| 133 | // | |
| 134 | // "%.1f" = "1.0MiB/s" or "% .1f" = "1.0 MiB/s" | |
| 135 | func EwmaSpeed(unit int, unitFormat string, age float64, wcc ...WC) Decorator { | |
| 136 | return MovingAverageSpeed(unit, unitFormat, ewma.NewMovingAverage(age), wcc...) | |
| 137 | } | |
| 138 | ||
| 139 | // MovingAverageSpeed decorator relies on MovingAverage implementation to calculate its average. | |
| 140 | // | |
| 141 | // `unit` one of [0|UnitKiB|UnitKB] zero for no unit | |
| 142 | // | |
| 143 | // `unitFormat` printf compatible verb for value, like "%f" or "%d" | |
| 144 | // | |
| 145 | // `average` MovingAverage implementation | |
| 146 | // | |
| 147 | // `wcc` optional WC config | |
| 148 | func MovingAverageSpeed(unit int, unitFormat string, average MovingAverage, wcc ...WC) Decorator { | |
| 149 | var wc WC | |
| 150 | for _, widthConf := range wcc { | |
| 151 | wc = widthConf | |
| 152 | } | |
| 153 | wc.Init() | |
| 154 | d := &movingAverageSpeed{ | |
| 155 | WC: wc, | |
| 156 | unit: unit, | |
| 157 | unitFormat: unitFormat, | |
| 158 | average: average, | |
| 159 | } | |
| 160 | return d | |
| 161 | } | |
| 162 | ||
| 163 | type movingAverageSpeed struct { | |
| 164 | WC | |
| 165 | unit int | |
| 166 | unitFormat string | |
| 167 | average ewma.MovingAverage | |
| 168 | msg string | |
| 169 | completeMsg *string | |
| 170 | } | |
| 171 | ||
| 172 | func (d *movingAverageSpeed) Decor(st *Statistics) string { | |
| 173 | if st.Completed { | |
| 174 | if d.completeMsg != nil { | |
| 175 | return d.FormatMsg(*d.completeMsg) | |
| 176 | } | |
| 177 | return d.FormatMsg(d.msg) | |
| 178 | } | |
| 179 | ||
| 180 | speed := d.average.Value() | |
| 181 | switch d.unit { | |
| 182 | case UnitKiB: | |
| 183 | d.msg = fmt.Sprintf(d.unitFormat, SpeedKiB(speed)) | |
| 184 | case UnitKB: | |
| 185 | d.msg = fmt.Sprintf(d.unitFormat, SpeedKB(speed)) | |
| 186 | default: | |
| 187 | d.msg = fmt.Sprintf(d.unitFormat, speed) | |
| 188 | } | |
| 189 | ||
| 190 | return d.FormatMsg(d.msg) | |
| 191 | } | |
| 192 | ||
| 193 | func (s *movingAverageSpeed) NextAmount(n int, wdd ...time.Duration) { | |
| 194 | var workDuration time.Duration | |
| 195 | for _, wd := range wdd { | |
| 196 | workDuration = wd | |
| 197 | } | |
| 198 | speed := float64(n) / workDuration.Seconds() / 1000 | |
| 199 | if math.IsInf(speed, 0) || math.IsNaN(speed) { | |
| 200 | return | |
| 201 | } | |
| 202 | s.average.Add(speed) | |
| 203 | } | |
| 204 | ||
| 205 | func (d *movingAverageSpeed) OnCompleteMessage(msg string) { | |
| 206 | d.completeMsg = &msg | |
| 207 | } | |
| 208 | ||
| 209 | // AverageSpeed decorator with dynamic unit measure adjustment. | |
| 210 | // | |
| 211 | // `unit` one of [0|UnitKiB|UnitKB] zero for no unit | |
| 212 | // | |
| 213 | // `unitFormat` printf compatible verb for value, like "%f" or "%d" | |
| 214 | // | |
| 215 | // `wcc` optional WC config | |
| 216 | // | |
| 217 | // unitFormat example if UnitKiB is chosen: | |
| 218 | // | |
| 219 | // "%.1f" = "1.0MiB/s" or "% .1f" = "1.0 MiB/s" | |
| 220 | func AverageSpeed(unit int, unitFormat string, wcc ...WC) Decorator { | |
| 221 | var wc WC | |
| 222 | for _, widthConf := range wcc { | |
| 223 | wc = widthConf | |
| 224 | } | |
| 225 | wc.Init() | |
| 226 | d := &averageSpeed{ | |
| 227 | WC: wc, | |
| 228 | unit: unit, | |
| 229 | unitFormat: unitFormat, | |
| 230 | startTime: time.Now(), | |
| 231 | } | |
| 232 | return d | |
| 233 | } | |
| 234 | ||
| 235 | type averageSpeed struct { | |
| 236 | WC | |
| 237 | unit int | |
| 238 | unitFormat string | |
| 239 | startTime time.Time | |
| 240 | msg string | |
| 241 | completeMsg *string | |
| 242 | } | |
| 243 | ||
| 244 | func (d *averageSpeed) Decor(st *Statistics) string { | |
| 245 | if st.Completed { | |
| 246 | if d.completeMsg != nil { | |
| 247 | return d.FormatMsg(*d.completeMsg) | |
| 248 | } | |
| 249 | return d.FormatMsg(d.msg) | |
| 250 | } | |
| 251 | ||
| 252 | timeElapsed := time.Since(d.startTime) | |
| 253 | speed := float64(st.Current) / timeElapsed.Seconds() | |
| 254 | ||
| 255 | switch d.unit { | |
| 256 | case UnitKiB: | |
| 257 | d.msg = fmt.Sprintf(d.unitFormat, SpeedKiB(speed)) | |
| 258 | case UnitKB: | |
| 259 | d.msg = fmt.Sprintf(d.unitFormat, SpeedKB(speed)) | |
| 260 | default: | |
| 261 | d.msg = fmt.Sprintf(d.unitFormat, speed) | |
| 262 | } | |
| 263 | ||
| 264 | return d.FormatMsg(d.msg) | |
| 265 | } | |
| 266 | ||
| 267 | func (d *averageSpeed) OnCompleteMessage(msg string) { | |
| 268 | d.completeMsg = &msg | |
| 269 | } |
| 0 | package decor | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "testing" | |
| 5 | ) | |
| 6 | ||
| 7 | func TestSpeedKiB(t *testing.T) { | |
| 8 | cases := map[string]struct { | |
| 9 | value int64 | |
| 10 | verb string | |
| 11 | expected string | |
| 12 | }{ | |
| 13 | "verb %f": {12345678, "%f", "11.773756MiB/s"}, | |
| 14 | "verb %.0f": {12345678, "%.0f", "12MiB/s"}, | |
| 15 | "verb %.1f": {12345678, "%.1f", "11.8MiB/s"}, | |
| 16 | "verb %.2f": {12345678, "%.2f", "11.77MiB/s"}, | |
| 17 | "verb %.3f": {12345678, "%.3f", "11.774MiB/s"}, | |
| 18 | ||
| 19 | "verb % f": {12345678, "% f", "11.773756 MiB/s"}, | |
| 20 | "verb % .0f": {12345678, "% .0f", "12 MiB/s"}, | |
| 21 | "verb % .1f": {12345678, "% .1f", "11.8 MiB/s"}, | |
| 22 | "verb % .2f": {12345678, "% .2f", "11.77 MiB/s"}, | |
| 23 | "verb % .3f": {12345678, "% .3f", "11.774 MiB/s"}, | |
| 24 | ||
| 25 | "verb %10.f": {12345678, "%10.f", " 12MiB/s"}, | |
| 26 | "verb %10.0f": {12345678, "%10.0f", " 12MiB/s"}, | |
| 27 | "verb %10.1f": {12345678, "%10.1f", " 11.8MiB/s"}, | |
| 28 | "verb %10.2f": {12345678, "%10.2f", "11.77MiB/s"}, | |
| 29 | "verb %10.3f": {12345678, "%10.3f", "11.774MiB/s"}, | |
| 30 | ||
| 31 | "verb % 10.f": {12345678, "% 10.f", " 12 MiB/s"}, | |
| 32 | "verb % 10.0f": {12345678, "% 10.0f", " 12 MiB/s"}, | |
| 33 | "verb % 10.1f": {12345678, "% 10.1f", "11.8 MiB/s"}, | |
| 34 | ||
| 35 | "verb %-10.f": {12345678, "%-10.f", "12MiB/s "}, | |
| 36 | "verb %-10.0f": {12345678, "%-10.0f", "12MiB/s "}, | |
| 37 | "verb %-10.1f": {12345678, "%-10.1f", "11.8MiB/s "}, | |
| 38 | "verb %-10.2f": {12345678, "%10.2f", "11.77MiB/s"}, | |
| 39 | "verb %-10.3f": {12345678, "%10.3f", "11.774MiB/s"}, | |
| 40 | ||
| 41 | "verb % -10.f": {12345678, "% -10.f", "12 MiB/s "}, | |
| 42 | "verb % -10.0f": {12345678, "% -10.0f", "12 MiB/s "}, | |
| 43 | "verb % -10.1f": {12345678, "% -10.1f", "11.8 MiB/s"}, | |
| 44 | ||
| 45 | "1000 %f": {1000, "%f", "1000b/s"}, | |
| 46 | "1000 %d": {1000, "%d", "1000b/s"}, | |
| 47 | "1000 %s": {1000, "%s", "1000b/s"}, | |
| 48 | "1024 %f": {1024, "%f", "1.000000KiB/s"}, | |
| 49 | "1024 %d": {1024, "%d", "1KiB/s"}, | |
| 50 | "1024 %.1f": {1024, "%.1f", "1.0KiB/s"}, | |
| 51 | "1024 %s": {1024, "%s", "1.0KiB/s"}, | |
| 52 | "3*MiB/s+140KiB/s %f": {3*MiB + 140*KiB, "%f", "3.136719MiB/s"}, | |
| 53 | "3*MiB/s+140KiB/s %d": {3*MiB + 140*KiB, "%d", "3MiB/s"}, | |
| 54 | "3*MiB/s+140KiB/s %.1f": {3*MiB + 140*KiB, "%.1f", "3.1MiB/s"}, | |
| 55 | "3*MiB/s+140KiB/s %s": {3*MiB + 140*KiB, "%s", "3.1MiB/s"}, | |
| 56 | "2*GiB/s %f": {2 * GiB, "%f", "2.000000GiB/s"}, | |
| 57 | "2*GiB/s %d": {2 * GiB, "%d", "2GiB/s"}, | |
| 58 | "2*GiB/s %.1f": {2 * GiB, "%.1f", "2.0GiB/s"}, | |
| 59 | "2*GiB/s %s": {2 * GiB, "%s", "2.0GiB/s"}, | |
| 60 | "4*TiB/s %f": {4 * TiB, "%f", "4.000000TiB/s"}, | |
| 61 | "4*TiB/s %d": {4 * TiB, "%d", "4TiB/s"}, | |
| 62 | "4*TiB/s %.1f": {4 * TiB, "%.1f", "4.0TiB/s"}, | |
| 63 | "4*TiB/s %s": {4 * TiB, "%s", "4.0TiB/s"}, | |
| 64 | } | |
| 65 | for name, tc := range cases { | |
| 66 | t.Run(name, func(t *testing.T) { | |
| 67 | got := fmt.Sprintf(tc.verb, SpeedKiB(tc.value)) | |
| 68 | if got != tc.expected { | |
| 69 | t.Fatalf("expected: %q, got: %q\n", tc.expected, got) | |
| 70 | } | |
| 71 | }) | |
| 72 | } | |
| 73 | } | |
| 74 | ||
| 75 | func TestSpeedKB(t *testing.T) { | |
| 76 | cases := map[string]struct { | |
| 77 | value int64 | |
| 78 | verb string | |
| 79 | expected string | |
| 80 | }{ | |
| 81 | "verb %f": {12345678, "%f", "12.345678MB/s"}, | |
| 82 | "verb %.0f": {12345678, "%.0f", "12MB/s"}, | |
| 83 | "verb %.1f": {12345678, "%.1f", "12.3MB/s"}, | |
| 84 | "verb %.2f": {12345678, "%.2f", "12.35MB/s"}, | |
| 85 | "verb %.3f": {12345678, "%.3f", "12.346MB/s"}, | |
| 86 | ||
| 87 | "verb % f": {12345678, "% f", "12.345678 MB/s"}, | |
| 88 | "verb % .0f": {12345678, "% .0f", "12 MB/s"}, | |
| 89 | "verb % .1f": {12345678, "% .1f", "12.3 MB/s"}, | |
| 90 | "verb % .2f": {12345678, "% .2f", "12.35 MB/s"}, | |
| 91 | "verb % .3f": {12345678, "% .3f", "12.346 MB/s"}, | |
| 92 | ||
| 93 | "verb %10.f": {12345678, "%10.f", " 12MB/s"}, | |
| 94 | "verb %10.0f": {12345678, "%10.0f", " 12MB/s"}, | |
| 95 | "verb %10.1f": {12345678, "%10.1f", " 12.3MB/s"}, | |
| 96 | "verb %10.2f": {12345678, "%10.2f", " 12.35MB/s"}, | |
| 97 | "verb %10.3f": {12345678, "%10.3f", "12.346MB/s"}, | |
| 98 | ||
| 99 | "verb % 10.f": {12345678, "% 10.f", " 12 MB/s"}, | |
| 100 | "verb % 10.0f": {12345678, "% 10.0f", " 12 MB/s"}, | |
| 101 | "verb % 10.1f": {12345678, "% 10.1f", " 12.3 MB/s"}, | |
| 102 | ||
| 103 | "verb %-10.f": {12345678, "%-10.f", "12MB/s "}, | |
| 104 | "verb %-10.0f": {12345678, "%-10.0f", "12MB/s "}, | |
| 105 | "verb %-10.1f": {12345678, "%-10.1f", "12.3MB/s "}, | |
| 106 | "verb %-10.2f": {12345678, "%10.2f", " 12.35MB/s"}, | |
| 107 | "verb %-10.3f": {12345678, "%10.3f", "12.346MB/s"}, | |
| 108 | ||
| 109 | "verb % -10.f": {12345678, "% -10.f", "12 MB/s "}, | |
| 110 | "verb % -10.0f": {12345678, "% -10.0f", "12 MB/s "}, | |
| 111 | "verb % -10.1f": {12345678, "% -10.1f", "12.3 MB/s "}, | |
| 112 | ||
| 113 | "1000 %f": {1000, "%f", "1.000000kB/s"}, | |
| 114 | "1000 %d": {1000, "%d", "1kB/s"}, | |
| 115 | "1000 %s": {1000, "%s", "1.0kB/s"}, | |
| 116 | "1024 %f": {1024, "%f", "1.024000kB/s"}, | |
| 117 | "1024 %d": {1024, "%d", "1kB/s"}, | |
| 118 | "1024 %.1f": {1024, "%.1f", "1.0kB/s"}, | |
| 119 | "1024 %s": {1024, "%s", "1.0kB/s"}, | |
| 120 | "3*MB/s+140*KB/s %f": {3*MB + 140*KB, "%f", "3.140000MB/s"}, | |
| 121 | "3*MB/s+140*KB/s %d": {3*MB + 140*KB, "%d", "3MB/s"}, | |
| 122 | "3*MB/s+140*KB/s %.1f": {3*MB + 140*KB, "%.1f", "3.1MB/s"}, | |
| 123 | "3*MB/s+140*KB/s %s": {3*MB + 140*KB, "%s", "3.1MB/s"}, | |
| 124 | "2*GB/s %f": {2 * GB, "%f", "2.000000GB/s"}, | |
| 125 | "2*GB/s %d": {2 * GB, "%d", "2GB/s"}, | |
| 126 | "2*GB/s %.1f": {2 * GB, "%.1f", "2.0GB/s"}, | |
| 127 | "2*GB/s %s": {2 * GB, "%s", "2.0GB/s"}, | |
| 128 | "4*TB/s %f": {4 * TB, "%f", "4.000000TB/s"}, | |
| 129 | "4*TB/s %d": {4 * TB, "%d", "4TB/s"}, | |
| 130 | "4*TB/s %.1f": {4 * TB, "%.1f", "4.0TB/s"}, | |
| 131 | "4*TB/s %s": {4 * TB, "%s", "4.0TB/s"}, | |
| 132 | } | |
| 133 | for name, tc := range cases { | |
| 134 | t.Run(name, func(t *testing.T) { | |
| 135 | got := fmt.Sprintf(tc.verb, SpeedKB(tc.value)) | |
| 136 | if got != tc.expected { | |
| 137 | t.Fatalf("expected: %q, got: %q\n", tc.expected, got) | |
| 138 | } | |
| 139 | }) | |
| 140 | } | |
| 141 | } |
| 0 | package mpb_test | |
| 1 | ||
| 2 | import ( | |
| 3 | "sync" | |
| 4 | "testing" | |
| 5 | ||
| 6 | . "github.com/vbauerster/mpb" | |
| 7 | "github.com/vbauerster/mpb/decor" | |
| 8 | ) | |
| 9 | ||
| 10 | func TestNameDecorator(t *testing.T) { | |
| 11 | tests := []struct { | |
| 12 | decorator decor.Decorator | |
| 13 | want string | |
| 14 | }{ | |
| 15 | { | |
| 16 | decorator: decor.Name("Test"), | |
| 17 | want: "Test", | |
| 18 | }, | |
| 19 | { | |
| 20 | decorator: decor.Name("Test", decor.WC{W: len("Test")}), | |
| 21 | want: "Test", | |
| 22 | }, | |
| 23 | { | |
| 24 | decorator: decor.Name("Test", decor.WC{W: 10}), | |
| 25 | want: " Test", | |
| 26 | }, | |
| 27 | { | |
| 28 | decorator: decor.Name("Test", decor.WC{W: 10, C: decor.DidentRight}), | |
| 29 | want: "Test ", | |
| 30 | }, | |
| 31 | } | |
| 32 | ||
| 33 | for _, test := range tests { | |
| 34 | got := test.decorator.Decor(new(decor.Statistics)) | |
| 35 | if got != test.want { | |
| 36 | t.Errorf("Want: %q, Got: %q\n", test.want, got) | |
| 37 | } | |
| 38 | } | |
| 39 | } | |
| 40 | ||
| 41 | type step struct { | |
| 42 | stat *decor.Statistics | |
| 43 | decorator decor.Decorator | |
| 44 | want string | |
| 45 | } | |
| 46 | ||
| 47 | func TestPercentageDwidthSync(t *testing.T) { | |
| 48 | ||
| 49 | testCases := [][]step{ | |
| 50 | []step{ | |
| 51 | { | |
| 52 | &decor.Statistics{Total: 100, Current: 8}, | |
| 53 | decor.Percentage(decor.WCSyncWidth), | |
| 54 | "8 %", | |
| 55 | }, | |
| 56 | { | |
| 57 | &decor.Statistics{Total: 100, Current: 9}, | |
| 58 | decor.Percentage(decor.WCSyncWidth), | |
| 59 | "9 %", | |
| 60 | }, | |
| 61 | }, | |
| 62 | []step{ | |
| 63 | { | |
| 64 | &decor.Statistics{Total: 100, Current: 9}, | |
| 65 | decor.Percentage(decor.WCSyncWidth), | |
| 66 | " 9 %", | |
| 67 | }, | |
| 68 | { | |
| 69 | &decor.Statistics{Total: 100, Current: 10}, | |
| 70 | decor.Percentage(decor.WCSyncWidth), | |
| 71 | "10 %", | |
| 72 | }, | |
| 73 | }, | |
| 74 | []step{ | |
| 75 | { | |
| 76 | &decor.Statistics{Total: 100, Current: 9}, | |
| 77 | decor.Percentage(decor.WCSyncWidth), | |
| 78 | " 9 %", | |
| 79 | }, | |
| 80 | { | |
| 81 | &decor.Statistics{Total: 100, Current: 100}, | |
| 82 | decor.Percentage(decor.WCSyncWidth), | |
| 83 | "100 %", | |
| 84 | }, | |
| 85 | }, | |
| 86 | } | |
| 87 | ||
| 88 | testDecoratorConcurrently(t, testCases) | |
| 89 | } | |
| 90 | ||
| 91 | func TestPercentageDwidthSyncDidentRight(t *testing.T) { | |
| 92 | ||
| 93 | testCases := [][]step{ | |
| 94 | []step{ | |
| 95 | { | |
| 96 | &decor.Statistics{Total: 100, Current: 8}, | |
| 97 | decor.Percentage(decor.WCSyncWidthR), | |
| 98 | "8 %", | |
| 99 | }, | |
| 100 | { | |
| 101 | &decor.Statistics{Total: 100, Current: 9}, | |
| 102 | decor.Percentage(decor.WCSyncWidthR), | |
| 103 | "9 %", | |
| 104 | }, | |
| 105 | }, | |
| 106 | []step{ | |
| 107 | { | |
| 108 | &decor.Statistics{Total: 100, Current: 9}, | |
| 109 | decor.Percentage(decor.WCSyncWidthR), | |
| 110 | "9 % ", | |
| 111 | }, | |
| 112 | { | |
| 113 | &decor.Statistics{Total: 100, Current: 10}, | |
| 114 | decor.Percentage(decor.WCSyncWidthR), | |
| 115 | "10 %", | |
| 116 | }, | |
| 117 | }, | |
| 118 | []step{ | |
| 119 | { | |
| 120 | &decor.Statistics{Total: 100, Current: 9}, | |
| 121 | decor.Percentage(decor.WCSyncWidthR), | |
| 122 | "9 % ", | |
| 123 | }, | |
| 124 | { | |
| 125 | &decor.Statistics{Total: 100, Current: 100}, | |
| 126 | decor.Percentage(decor.WCSyncWidthR), | |
| 127 | "100 %", | |
| 128 | }, | |
| 129 | }, | |
| 130 | } | |
| 131 | ||
| 132 | testDecoratorConcurrently(t, testCases) | |
| 133 | } | |
| 134 | ||
| 135 | func TestPercentageDSyncSpace(t *testing.T) { | |
| 136 | ||
| 137 | testCases := [][]step{ | |
| 138 | []step{ | |
| 139 | { | |
| 140 | &decor.Statistics{Total: 100, Current: 8}, | |
| 141 | decor.Percentage(decor.WCSyncSpace), | |
| 142 | " 8 %", | |
| 143 | }, | |
| 144 | { | |
| 145 | &decor.Statistics{Total: 100, Current: 9}, | |
| 146 | decor.Percentage(decor.WCSyncSpace), | |
| 147 | " 9 %", | |
| 148 | }, | |
| 149 | }, | |
| 150 | []step{ | |
| 151 | { | |
| 152 | &decor.Statistics{Total: 100, Current: 9}, | |
| 153 | decor.Percentage(decor.WCSyncSpace), | |
| 154 | " 9 %", | |
| 155 | }, | |
| 156 | { | |
| 157 | &decor.Statistics{Total: 100, Current: 10}, | |
| 158 | decor.Percentage(decor.WCSyncSpace), | |
| 159 | " 10 %", | |
| 160 | }, | |
| 161 | }, | |
| 162 | []step{ | |
| 163 | { | |
| 164 | &decor.Statistics{Total: 100, Current: 9}, | |
| 165 | decor.Percentage(decor.WCSyncSpace), | |
| 166 | " 9 %", | |
| 167 | }, | |
| 168 | { | |
| 169 | &decor.Statistics{Total: 100, Current: 100}, | |
| 170 | decor.Percentage(decor.WCSyncSpace), | |
| 171 | " 100 %", | |
| 172 | }, | |
| 173 | }, | |
| 174 | } | |
| 175 | ||
| 176 | testDecoratorConcurrently(t, testCases) | |
| 177 | } | |
| 178 | ||
| 179 | func testDecoratorConcurrently(t *testing.T, testCases [][]step) { | |
| 180 | if len(testCases) == 0 { | |
| 181 | t.Fail() | |
| 182 | } | |
| 183 | ||
| 184 | numBars := len(testCases[0]) | |
| 185 | var wg sync.WaitGroup | |
| 186 | for _, columnCase := range testCases { | |
| 187 | wg.Add(numBars) | |
| 188 | SyncWidth(toSyncMatrix(columnCase)) | |
| 189 | gott := make([]chan string, numBars) | |
| 190 | for i := 0; i < numBars; i++ { | |
| 191 | gott[i] = make(chan string, 1) | |
| 192 | go func(s step, ch chan string) { | |
| 193 | defer wg.Done() | |
| 194 | ch <- s.decorator.Decor(s.stat) | |
| 195 | }(columnCase[i], gott[i]) | |
| 196 | } | |
| 197 | wg.Wait() | |
| 198 | ||
| 199 | for i, ch := range gott { | |
| 200 | got := <-ch | |
| 201 | want := columnCase[i].want | |
| 202 | if got != want { | |
| 203 | t.Errorf("Want: %q, Got: %q\n", want, got) | |
| 204 | } | |
| 205 | } | |
| 206 | ||
| 207 | } | |
| 208 | } | |
| 209 | ||
| 210 | func toSyncMatrix(ss []step) map[int][]chan int { | |
| 211 | var column []chan int | |
| 212 | for _, s := range ss { | |
| 213 | if ok, ch := s.decorator.Syncable(); ok { | |
| 214 | column = append(column, ch) | |
| 215 | } | |
| 216 | } | |
| 217 | return map[int][]chan int{0: column} | |
| 218 | } |
| 0 | // Copyright (C) 2016-2018 Vladimir Bauer | |
| 1 | // Use of this source code is governed by a BSD-style | |
| 2 | // license that can be found in the LICENSE file. | |
| 3 | ||
| 4 | // Package mpb is a library for rendering progress bars in terminal applications. | |
| 5 | package mpb |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "testing" | |
| 5 | ) | |
| 6 | ||
| 7 | func TestDraw(t *testing.T) { | |
| 8 | // key is termWidth | |
| 9 | testSuite := map[int]map[string]struct { | |
| 10 | total, current int64 | |
| 11 | barWidth int | |
| 12 | barRefill *refill | |
| 13 | want string | |
| 14 | }{ | |
| 15 | 100: { | |
| 16 | "t,c,bw{100,100,0}": { | |
| 17 | total: 100, | |
| 18 | current: 0, | |
| 19 | barWidth: 100, | |
| 20 | want: "[--------------------------------------------------------------------------------------------------]", | |
| 21 | }, | |
| 22 | "t,c,bw{100,1,100}": { | |
| 23 | total: 100, | |
| 24 | current: 1, | |
| 25 | barWidth: 100, | |
| 26 | want: "[>-------------------------------------------------------------------------------------------------]", | |
| 27 | }, | |
| 28 | "t,c,bw{100,40,100}": { | |
| 29 | total: 100, | |
| 30 | current: 40, | |
| 31 | barWidth: 100, | |
| 32 | want: "[======================================>-----------------------------------------------------------]", | |
| 33 | }, | |
| 34 | "t,c,bw{100,40,100}refill{'+', 32}": { | |
| 35 | total: 100, | |
| 36 | current: 40, | |
| 37 | barWidth: 100, | |
| 38 | barRefill: &refill{'+', 32}, | |
| 39 | want: "[+++++++++++++++++++++++++++++++=======>-----------------------------------------------------------]", | |
| 40 | }, | |
| 41 | "t,c,bw{100,99,100}": { | |
| 42 | total: 100, | |
| 43 | current: 99, | |
| 44 | barWidth: 100, | |
| 45 | want: "[================================================================================================>-]", | |
| 46 | }, | |
| 47 | "t,c,bw{100,100,100}": { | |
| 48 | total: 100, | |
| 49 | current: 100, | |
| 50 | barWidth: 100, | |
| 51 | want: "[==================================================================================================]", | |
| 52 | }, | |
| 53 | }, | |
| 54 | 2: { | |
| 55 | "t,c,bw{0,0,100}": { | |
| 56 | barWidth: 100, | |
| 57 | want: "[]", | |
| 58 | }, | |
| 59 | "t,c,bw{60,20,80}": { | |
| 60 | total: 60, | |
| 61 | current: 20, | |
| 62 | barWidth: 80, | |
| 63 | want: "[]", | |
| 64 | }, | |
| 65 | }, | |
| 66 | 3: { | |
| 67 | "t,c,bw{100,20,100}": { | |
| 68 | total: 100, | |
| 69 | current: 20, | |
| 70 | barWidth: 100, | |
| 71 | want: "[-]", | |
| 72 | }, | |
| 73 | "t,c,bw{100,98,100}": { | |
| 74 | total: 100, | |
| 75 | current: 98, | |
| 76 | barWidth: 100, | |
| 77 | want: "[=]", | |
| 78 | }, | |
| 79 | "t,c,bw{100,100,100}": { | |
| 80 | total: 100, | |
| 81 | current: 100, | |
| 82 | barWidth: 100, | |
| 83 | want: "[=]", | |
| 84 | }, | |
| 85 | }, | |
| 86 | 5: { | |
| 87 | "t,c,bw{100,20,100}": { | |
| 88 | total: 100, | |
| 89 | current: 20, | |
| 90 | barWidth: 100, | |
| 91 | want: "[>--]", | |
| 92 | }, | |
| 93 | "t,c,bw{100,98,100}": { | |
| 94 | total: 100, | |
| 95 | current: 98, | |
| 96 | barWidth: 100, | |
| 97 | want: "[===]", | |
| 98 | }, | |
| 99 | "t,c,bw{100,100,100}": { | |
| 100 | total: 100, | |
| 101 | current: 100, | |
| 102 | barWidth: 100, | |
| 103 | want: "[===]", | |
| 104 | }, | |
| 105 | }, | |
| 106 | 6: { | |
| 107 | "t,c,bw{100,20,100}": { | |
| 108 | total: 100, | |
| 109 | current: 20, | |
| 110 | barWidth: 100, | |
| 111 | want: "[>---]", | |
| 112 | }, | |
| 113 | "t,c,bw{100,98,100}": { | |
| 114 | total: 100, | |
| 115 | current: 98, | |
| 116 | barWidth: 100, | |
| 117 | want: "[====]", | |
| 118 | }, | |
| 119 | "t,c,bw{100,100,100}": { | |
| 120 | total: 100, | |
| 121 | current: 100, | |
| 122 | barWidth: 100, | |
| 123 | want: "[====]", | |
| 124 | }, | |
| 125 | }, | |
| 126 | 20: { | |
| 127 | "t,c,bw{100,20,100}": { | |
| 128 | total: 100, | |
| 129 | current: 20, | |
| 130 | barWidth: 100, | |
| 131 | want: "[===>--------------]", | |
| 132 | }, | |
| 133 | "t,c,bw{100,60,100}": { | |
| 134 | total: 100, | |
| 135 | current: 60, | |
| 136 | barWidth: 100, | |
| 137 | want: "[==========>-------]", | |
| 138 | }, | |
| 139 | "t,c,bw{100,98,100}": { | |
| 140 | total: 100, | |
| 141 | current: 98, | |
| 142 | barWidth: 100, | |
| 143 | want: "[==================]", | |
| 144 | }, | |
| 145 | "t,c,bw{100,100,100}": { | |
| 146 | total: 100, | |
| 147 | current: 100, | |
| 148 | barWidth: 100, | |
| 149 | want: "[==================]", | |
| 150 | }, | |
| 151 | }, | |
| 152 | 50: { | |
| 153 | "t,c,bw{100,20,100}": { | |
| 154 | total: 100, | |
| 155 | current: 20, | |
| 156 | barWidth: 100, | |
| 157 | want: "[=========>--------------------------------------]", | |
| 158 | }, | |
| 159 | "t,c,bw{100,60,100}": { | |
| 160 | total: 100, | |
| 161 | current: 60, | |
| 162 | barWidth: 100, | |
| 163 | want: "[============================>-------------------]", | |
| 164 | }, | |
| 165 | "t,c,bw{100,98,100}": { | |
| 166 | total: 100, | |
| 167 | current: 98, | |
| 168 | barWidth: 100, | |
| 169 | want: "[==============================================>-]", | |
| 170 | }, | |
| 171 | "t,c,bw{100,100,100}": { | |
| 172 | total: 100, | |
| 173 | current: 100, | |
| 174 | barWidth: 100, | |
| 175 | want: "[================================================]", | |
| 176 | }, | |
| 177 | }, | |
| 178 | } | |
| 179 | ||
| 180 | var tmpBuf bytes.Buffer | |
| 181 | for termWidth, cases := range testSuite { | |
| 182 | for name, tc := range cases { | |
| 183 | s := newTestState() | |
| 184 | s.width = tc.barWidth | |
| 185 | s.total = tc.total | |
| 186 | s.current = tc.current | |
| 187 | if tc.barRefill != nil { | |
| 188 | s.refill = tc.barRefill | |
| 189 | } | |
| 190 | tmpBuf.Reset() | |
| 191 | tmpBuf.ReadFrom(s.draw(termWidth)) | |
| 192 | got := tmpBuf.String() | |
| 193 | want := tc.want + "\n" | |
| 194 | if got != want { | |
| 195 | t.Errorf("termWidth %d; %s: want: %s %d, got: %s %d\n", termWidth, name, want, len(want), got, len(got)) | |
| 196 | } | |
| 197 | } | |
| 198 | } | |
| 199 | } | |
| 200 | ||
| 201 | func newTestState() *bState { | |
| 202 | s := &bState{ | |
| 203 | trimLeftSpace: true, | |
| 204 | trimRightSpace: true, | |
| 205 | bufP: new(bytes.Buffer), | |
| 206 | bufB: new(bytes.Buffer), | |
| 207 | bufA: new(bytes.Buffer), | |
| 208 | } | |
| 209 | s.runes = strToBarRunes(pformat) | |
| 210 | return s | |
| 211 | } |
| 0 | package mpb_test | |
| 1 | ||
| 2 | import ( | |
| 3 | "io" | |
| 4 | "io/ioutil" | |
| 5 | "math/rand" | |
| 6 | "net/http" | |
| 7 | "time" | |
| 8 | ||
| 9 | "github.com/vbauerster/mpb" | |
| 10 | "github.com/vbauerster/mpb/decor" | |
| 11 | ) | |
| 12 | ||
| 13 | func Example() { | |
| 14 | p := mpb.New( | |
| 15 | // override default (80) width | |
| 16 | mpb.WithWidth(64), | |
| 17 | // override default "[=>-]" format | |
| 18 | mpb.WithFormat("╢▌▌░╟"), | |
| 19 | // override default 120ms refresh rate | |
| 20 | mpb.WithRefreshRate(180*time.Millisecond), | |
| 21 | ) | |
| 22 | ||
| 23 | total := 100 | |
| 24 | name := "Single Bar:" | |
| 25 | // adding a single bar | |
| 26 | bar := p.AddBar(int64(total), | |
| 27 | mpb.PrependDecorators( | |
| 28 | // display our name with one space on the right | |
| 29 | decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}), | |
| 30 | // replace ETA decorator with "done" message, OnComplete event | |
| 31 | decor.OnComplete( | |
| 32 | // ETA decorator with ewma age of 60, and width reservation of 4 | |
| 33 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WC{W: 4}), "done", | |
| 34 | ), | |
| 35 | ), | |
| 36 | mpb.AppendDecorators(decor.Percentage()), | |
| 37 | ) | |
| 38 | // simulating some work | |
| 39 | max := 100 * time.Millisecond | |
| 40 | for i := 0; i < total; i++ { | |
| 41 | start := time.Now() | |
| 42 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 43 | // ewma based decorators require work duration measurement | |
| 44 | bar.IncrBy(1, time.Since(start)) | |
| 45 | } | |
| 46 | // wait for our bar to complete and flush | |
| 47 | p.Wait() | |
| 48 | } | |
| 49 | ||
| 50 | func ExampleBar_Completed() { | |
| 51 | p := mpb.New() | |
| 52 | bar := p.AddBar(100) | |
| 53 | ||
| 54 | max := 100 * time.Millisecond | |
| 55 | for !bar.Completed() { | |
| 56 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 57 | bar.Increment() | |
| 58 | } | |
| 59 | ||
| 60 | p.Wait() | |
| 61 | } | |
| 62 | ||
| 63 | func ExampleBar_ProxyReader() { | |
| 64 | p := mpb.New() | |
| 65 | // make http get request, ignoring errors | |
| 66 | resp, _ := http.Get("https://homebrew.bintray.com/bottles/libtiff-4.0.7.sierra.bottle.tar.gz") | |
| 67 | defer resp.Body.Close() | |
| 68 | ||
| 69 | // Assuming ContentLength > 0 | |
| 70 | bar := p.AddBar(resp.ContentLength, | |
| 71 | mpb.AppendDecorators( | |
| 72 | decor.CountersKibiByte("%6.1f / %6.1f"), | |
| 73 | ), | |
| 74 | ) | |
| 75 | ||
| 76 | // create proxy reader | |
| 77 | reader := bar.ProxyReader(resp.Body) | |
| 78 | ||
| 79 | // and copy from reader, ignoring errors | |
| 80 | io.Copy(ioutil.Discard, reader) | |
| 81 | ||
| 82 | p.Wait() | |
| 83 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "io" | |
| 5 | "math/rand" | |
| 6 | "sync" | |
| 7 | "time" | |
| 8 | ||
| 9 | "github.com/vbauerster/mpb" | |
| 10 | "github.com/vbauerster/mpb/decor" | |
| 11 | ) | |
| 12 | ||
| 13 | func init() { | |
| 14 | rand.Seed(time.Now().UnixNano()) | |
| 15 | } | |
| 16 | ||
| 17 | func main() { | |
| 18 | var wg sync.WaitGroup | |
| 19 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 20 | total, numBars := 100, 3 | |
| 21 | wg.Add(numBars) | |
| 22 | ||
| 23 | for i := 0; i < numBars; i++ { | |
| 24 | name := fmt.Sprintf("Bar#%d:", i) | |
| 25 | efn := func(w io.Writer, s *decor.Statistics) { | |
| 26 | if s.Completed { | |
| 27 | fmt.Fprintf(w, "Bar id: %d has been completed\n", s.ID) | |
| 28 | } | |
| 29 | } | |
| 30 | bar := p.AddBar(int64(total), mpb.BarNewLineExtend(efn), | |
| 31 | mpb.PrependDecorators( | |
| 32 | // simple name decorator | |
| 33 | decor.Name(name), | |
| 34 | // decor.DSyncWidth bit enables column width synchronization | |
| 35 | decor.Percentage(decor.WCSyncSpace), | |
| 36 | ), | |
| 37 | mpb.AppendDecorators( | |
| 38 | // replace ETA decorator with "done" message, OnComplete event | |
| 39 | decor.OnComplete( | |
| 40 | // ETA decorator with ewma age of 60 | |
| 41 | decor.EwmaETA(decor.ET_STYLE_GO, 60), "done", | |
| 42 | ), | |
| 43 | ), | |
| 44 | ) | |
| 45 | // simulating some work | |
| 46 | go func() { | |
| 47 | defer wg.Done() | |
| 48 | max := 100 * time.Millisecond | |
| 49 | for i := 0; i < total; i++ { | |
| 50 | start := time.Now() | |
| 51 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 52 | // ewma based decorators require work duration measurement | |
| 53 | bar.IncrBy(1, time.Since(start)) | |
| 54 | } | |
| 55 | }() | |
| 56 | } | |
| 57 | // wait for all bars to complete and flush | |
| 58 | p.Wait() | |
| 59 | } |
| 0 | //+build go1.7 | |
| 1 | ||
| 2 | package main | |
| 3 | ||
| 4 | import ( | |
| 5 | "context" | |
| 6 | "fmt" | |
| 7 | "math/rand" | |
| 8 | "sync" | |
| 9 | "time" | |
| 10 | ||
| 11 | "github.com/vbauerster/mpb" | |
| 12 | "github.com/vbauerster/mpb/decor" | |
| 13 | ) | |
| 14 | ||
| 15 | func init() { | |
| 16 | rand.Seed(time.Now().UnixNano()) | |
| 17 | } | |
| 18 | ||
| 19 | func main() { | |
| 20 | ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) | |
| 21 | defer cancel() | |
| 22 | ||
| 23 | var wg sync.WaitGroup | |
| 24 | p := mpb.New( | |
| 25 | mpb.WithWaitGroup(&wg), | |
| 26 | mpb.WithContext(ctx), | |
| 27 | ) | |
| 28 | total := 300 | |
| 29 | numBars := 3 | |
| 30 | wg.Add(numBars) | |
| 31 | ||
| 32 | for i := 0; i < numBars; i++ { | |
| 33 | name := fmt.Sprintf("Bar#%d:", i) | |
| 34 | bar := p.AddBar(int64(total), | |
| 35 | mpb.PrependDecorators( | |
| 36 | decor.Name(name), | |
| 37 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncSpace), | |
| 38 | ), | |
| 39 | mpb.AppendDecorators( | |
| 40 | decor.Percentage(decor.WC{W: 5}), | |
| 41 | ), | |
| 42 | ) | |
| 43 | ||
| 44 | go func() { | |
| 45 | defer wg.Done() | |
| 46 | max := 100 * time.Millisecond | |
| 47 | for !bar.Completed() { | |
| 48 | start := time.Now() | |
| 49 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 50 | // ewma based decorators require work duration measurement | |
| 51 | bar.IncrBy(1, time.Since(start)) | |
| 52 | } | |
| 53 | }() | |
| 54 | } | |
| 55 | ||
| 56 | p.Wait() | |
| 57 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math/rand" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | func init() { | |
| 13 | rand.Seed(time.Now().UnixNano()) | |
| 14 | } | |
| 15 | ||
| 16 | func main() { | |
| 17 | doneWg := new(sync.WaitGroup) | |
| 18 | p := mpb.New(mpb.WithWidth(64), mpb.WithWaitGroup(doneWg)) | |
| 19 | numBars := 4 | |
| 20 | ||
| 21 | var bars []*mpb.Bar | |
| 22 | var downloadWgg []*sync.WaitGroup | |
| 23 | for i := 0; i < numBars; i++ { | |
| 24 | wg := new(sync.WaitGroup) | |
| 25 | wg.Add(1) | |
| 26 | downloadWgg = append(downloadWgg, wg) | |
| 27 | task := fmt.Sprintf("Task#%02d:", i) | |
| 28 | job := "downloading" | |
| 29 | b := p.AddBar(rand.Int63n(201)+100, | |
| 30 | mpb.BarRemoveOnComplete(), | |
| 31 | mpb.PrependDecorators( | |
| 32 | decor.Name(task, decor.WC{W: len(task) + 1, C: decor.DidentRight}), | |
| 33 | decor.Name(job, decor.WCSyncSpaceR), | |
| 34 | decor.CountersNoUnit("%d / %d", decor.WCSyncWidth), | |
| 35 | ), | |
| 36 | mpb.AppendDecorators(decor.Percentage(decor.WC{W: 5})), | |
| 37 | ) | |
| 38 | go newTask(wg, b, i+1) | |
| 39 | bars = append(bars, b) | |
| 40 | } | |
| 41 | ||
| 42 | for i := 0; i < numBars; i++ { | |
| 43 | doneWg.Add(1) | |
| 44 | i := i | |
| 45 | go func() { | |
| 46 | task := fmt.Sprintf("Task#%02d:", i) | |
| 47 | job := "installing" | |
| 48 | // preparing delayed bars | |
| 49 | b := p.AddBar(rand.Int63n(101)+100, | |
| 50 | mpb.BarReplaceOnComplete(bars[i]), | |
| 51 | mpb.BarClearOnComplete(), | |
| 52 | mpb.PrependDecorators( | |
| 53 | decor.Name(task, decor.WC{W: len(task) + 1, C: decor.DidentRight}), | |
| 54 | decor.OnComplete(decor.Name(job, decor.WCSyncSpaceR), "done!"), | |
| 55 | decor.OnComplete(decor.EwmaETA(decor.ET_STYLE_MMSS, 60, decor.WCSyncWidth), "")), | |
| 56 | mpb.AppendDecorators( | |
| 57 | decor.OnComplete(decor.Percentage(decor.WC{W: 5}), ""), | |
| 58 | ), | |
| 59 | ) | |
| 60 | // waiting for download to complete, before starting install job | |
| 61 | downloadWgg[i].Wait() | |
| 62 | go newTask(doneWg, b, numBars-i) | |
| 63 | }() | |
| 64 | } | |
| 65 | ||
| 66 | p.Wait() | |
| 67 | } | |
| 68 | ||
| 69 | func newTask(wg *sync.WaitGroup, b *mpb.Bar, incrBy int) { | |
| 70 | defer wg.Done() | |
| 71 | max := 100 * time.Millisecond | |
| 72 | for !b.Completed() { | |
| 73 | start := time.Now() | |
| 74 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 75 | // ewma based decorators require work duration measurement | |
| 76 | b.IncrBy(incrBy, time.Since(start)) | |
| 77 | } | |
| 78 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "io" | |
| 4 | "math/rand" | |
| 5 | "time" | |
| 6 | ||
| 7 | "github.com/vbauerster/mpb" | |
| 8 | "github.com/vbauerster/mpb/decor" | |
| 9 | ) | |
| 10 | ||
| 11 | func init() { | |
| 12 | rand.Seed(time.Now().UnixNano()) | |
| 13 | } | |
| 14 | ||
| 15 | func main() { | |
| 16 | p := mpb.New(mpb.WithWidth(64)) | |
| 17 | ||
| 18 | var total int64 | |
| 19 | bar := p.AddBar(total, | |
| 20 | mpb.PrependDecorators(decor.Counters(decor.UnitKiB, "% .1f / % .1f")), | |
| 21 | mpb.AppendDecorators(decor.Percentage()), | |
| 22 | ) | |
| 23 | ||
| 24 | maxSleep := 100 * time.Millisecond | |
| 25 | read := makeStream(200) | |
| 26 | for { | |
| 27 | n, err := read() | |
| 28 | total += int64(n) | |
| 29 | time.Sleep(time.Duration(rand.Intn(10)+1) * maxSleep / 10) | |
| 30 | bar.IncrBy(n) | |
| 31 | if err == io.EOF { | |
| 32 | // total is known, final=true | |
| 33 | bar.SetTotal(total, true) | |
| 34 | break | |
| 35 | } | |
| 36 | // total is unknown, final=false | |
| 37 | bar.SetTotal(total+2048, false) | |
| 38 | } | |
| 39 | ||
| 40 | p.Wait() | |
| 41 | } | |
| 42 | ||
| 43 | func makeStream(limit int) func() (int, error) { | |
| 44 | return func() (int, error) { | |
| 45 | if limit <= 0 { | |
| 46 | return 0, io.EOF | |
| 47 | } | |
| 48 | limit-- | |
| 49 | return rand.Intn(1024) + 1, nil | |
| 50 | } | |
| 51 | } |
| 0 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1020" height="130.26"><rect width="1020" height="130.26" rx="0" ry="0" class="a"/><svg height="130.26" viewBox="0 0 102 13.026" width="1020" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>@keyframes n{0%{transform:translateX(0)}2.4%{transform:translateX(-408px)}2.5%{transform:translateX(-612px)}2.7%{transform:translateX(-714px)}2.8%{transform:translateX(-918px)}5.7%{transform:translateX(-1020px)}6.4%{transform:translateX(-1122px)}7.2%{transform:translateX(-1224px)}8.3%{transform:translateX(-1326px)}9.5%{transform:translateX(-1428px)}10%{transform:translateX(-1530px)}12.6%{transform:translateX(-1734px)}14.4%{transform:translateX(-1938px)}14.5%{transform:translateX(-2244px)}17.4%{transform:translateX(-2346px)}18.1%{transform:translateX(-2448px)}18.9%{transform:translateX(-2550px)}19.6%{transform:translateX(-2652px)}20.3%{transform:translateX(-2754px)}21.1%{transform:translateX(-2856px)}21.8%{transform:translateX(-2958px)}22.6%{transform:translateX(-3060px)}23.3%{transform:translateX(-3162px)}24%{transform:translateX(-3264px)}24.8%{transform:translateX(-3366px)}25.5%{transform:translateX(-3468px)}26.2%{transform:translateX(-3570px)}27%{transform:translateX(-3672px)}27.7%{transform:translateX(-3774px)}28.4%{transform:translateX(-3876px)}29.2%{transform:translateX(-3978px)}29.9%{transform:translateX(-4080px)}30.6%{transform:translateX(-4182px)}31.4%{transform:translateX(-4284px)}32.1%{transform:translateX(-4386px)}32.9%{transform:translateX(-4488px)}33.6%{transform:translateX(-4590px)}34.4%{transform:translateX(-4692px)}35.1%{transform:translateX(-4794px)}35.8%{transform:translateX(-4896px)}36.5%{transform:translateX(-4998px)}37.3%{transform:translateX(-5100px)}38%{transform:translateX(-5202px)}38.8%{transform:translateX(-5304px)}39.5%{transform:translateX(-5406px)}40.2%{transform:translateX(-5508px)}41%{transform:translateX(-5610px)}41.7%{transform:translateX(-5712px)}42.4%{transform:translateX(-5814px)}43.2%{transform:translateX(-5916px)}43.9%{transform:translateX(-6018px)}44.6%{transform:translateX(-6120px)}45.4%{transform:translateX(-6222px)}46.1%{transform:translateX(-6324px)}46.8%{transform:translateX(-6426px)}47.6%{transform:translateX(-6528px)}48.3%{transform:translateX(-6630px)}49.1%{transform:translateX(-6732px)}49.8%{transform:translateX(-6834px)}50.5%{transform:translateX(-6936px)}51.3%{transform:translateX(-7038px)}52%{transform:translateX(-7140px)}52.7%{transform:translateX(-7242px)}53.5%{transform:translateX(-7344px)}54.2%{transform:translateX(-7446px)}55%{transform:translateX(-7548px)}55.7%{transform:translateX(-7650px)}56.4%{transform:translateX(-7752px)}57.2%{transform:translateX(-7854px)}57.9%{transform:translateX(-7956px)}58.6%{transform:translateX(-8058px)}59.4%{transform:translateX(-8160px)}60.1%{transform:translateX(-8262px)}60.8%{transform:translateX(-8364px)}61.5%{transform:translateX(-8466px)}62.3%{transform:translateX(-8568px)}63%{transform:translateX(-8670px)}63.8%{transform:translateX(-8772px)}64.5%{transform:translateX(-8874px)}65.2%{transform:translateX(-8976px)}66%{transform:translateX(-9078px)}66.7%{transform:translateX(-9180px)}67.5%{transform:translateX(-9282px)}68.2%{transform:translateX(-9384px)}68.9%{transform:translateX(-9486px)}69.7%{transform:translateX(-9588px)}70.4%{transform:translateX(-9690px)}71.1%{transform:translateX(-9792px)}71.9%{transform:translateX(-9894px)}72.6%{transform:translateX(-9996px)}73.3%{transform:translateX(-10098px)}74.1%{transform:translateX(-10200px)}74.8%{transform:translateX(-10302px)}75.5%{transform:translateX(-10404px)}76.3%{transform:translateX(-10506px)}77%{transform:translateX(-10608px)}77.8%{transform:translateX(-10710px)}78.5%{transform:translateX(-10812px)}79.2%{transform:translateX(-10914px)}79.9%{transform:translateX(-11016px)}80.7%{transform:translateX(-11118px)}81.4%{transform:translateX(-11220px)}82.2%{transform:translateX(-11322px)}82.9%{transform:translateX(-11424px)}83.6%{transform:translateX(-11526px)}84.4%{transform:translateX(-11628px)}85.1%{transform:translateX(-11730px)}85.9%{transform:translateX(-11832px)}86.6%{transform:translateX(-11934px)}87.3%{transform:translateX(-12036px)}88%{transform:translateX(-12138px)}95%{transform:translateX(-12342px)}95.3%{transform:translateX(-12750px)}to{transform:translateX(-12852px)}}.a{fill:#f8f8f8}.c{fill:#4f97d7}.d{fill:#a31db1}.e{fill:#6c6c6c}.f{fill:#2d9574}.g{fill:#67b11d}.h{fill:#afafaf}.i{fill:#444155}</style><g font-size="1.67" font-family="Monaco,Consolas,Menlo,'Bitstream Vera Sans Mono','Powerline Symbols',monospace"><defs><symbol id="1"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/dynTotal</text></symbol><symbol id="2"><text y="1.67" class="d">❯</text></symbol><symbol id="3"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/dynTotal</text><text x="53.106" y="1.67" class="e">master*</text><text x="61.122" y="1.67" class="f">⇡</text></symbol><symbol id="4"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="g">go</text><text x="5.01" y="1.67" class="h">run</text><text x="9.018" y="1.67" class="h">-race</text><text x="15.03" y="1.67" class="h">main.go</text></symbol><symbol id="5"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="g">go</text><text x="5.01" y="1.67" class="i">run</text><path fill="#b9c0cb" d="M8.016 0h1v2.171h-1z"/><text x="8.016" y="1.67" class="a"></text><text x="9.018" y="1.67" class="i">-race</text><text x="15.03" y="1.67" class="i">main.go</text></symbol><symbol id="6"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="g">go</text><text x="5.01" y="1.67" class="i">run</text><text x="9.018" y="1.67" class="i">-race</text><text x="15.03" y="1.67" fill="#444155" text-decoration="underline">main.go</text></symbol><symbol id="7"><text y="1.67" class="i">55.7</text><text x="5.01" y="1.67" class="i">KiB</text><text x="9.018" y="1.67" class="i">/</text><text x="11.022" y="1.67" class="i">56.7</text><text x="16.032" y="1.67" class="i">KiB</text><text x="20.04" y="1.67" class="i">[============================================================>-]</text><text x="85.17" y="1.67" class="i">98</text><text x="88.176" y="1.67" class="i">%</text></symbol><symbol id="8"><text y="1.67" class="i">100.7</text><text x="6.012" y="1.67" class="i">KiB</text><text x="10.02" y="1.67" class="i">/</text><text x="12.024" y="1.67" class="i">100.7</text><text x="18.036" y="1.67" class="i">KiB</text><text x="22.044" y="1.67" class="i">[==============================================================]</text><text x="87.174" y="1.67" class="i">100</text><text x="91.182" y="1.67" class="i">%</text></symbol><symbol id="9"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/dynTotal</text><text x="53.106" y="1.67" class="e">master*</text><text x="61.122" y="1.67" class="f">⇡</text><text x="63.126" y="1.67" fill="#b1951d">13s</text></symbol><symbol id="a"><path fill="transparent" d="M0 0h102v7H0z"/></symbol><symbol id="b"><path class="i" d="M0 0h1.102v2.171H0z"/></symbol></defs><path class="a" d="M0 0h102v13.026H0z"/><g style="animation-duration:16.308492s;animation-iteration-count:infinite;animation-name:n;animation-timing-function:steps(1,end)"><svg width="12954"><svg><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="102"><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="204"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="2.146"/></svg><svg x="306"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="408"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="510"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="612"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="714"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><text y="3.841" class="c">~/go/src/github.com/vbauerster/mpb/examples/dynTotal</text><text x="53.106" y="3.841" class="e">master</text><use xlink:href="#2" y="4.342"/></svg><svg x="816"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><text y="3.841" class="c">~/go/src/github.com/vbauerster/mpb/examples/dynTotal</text><text x="53.106" y="3.841" class="e">master</text><text x="60.12" y="3.841" class="f">⇡</text><use xlink:href="#2" y="4.342"/></svg><svg x="918"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="1020"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="g">g</text><text x="3.006" y="6.012" class="h">o</text><text x="5.01" y="6.012" class="h">run</text><text x="9.018" y="6.012" class="h">-race</text><text x="15.03" y="6.012" class="h">main.go</text></svg><svg x="1122"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1224"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1326"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="g">go</text><text x="5.01" y="6.012" class="i">r</text><text x="6.012" y="6.012" class="h">un</text><text x="9.018" y="6.012" class="h">-race</text><text x="15.03" y="6.012" class="h">main.go</text></svg><svg x="1428"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="g">go</text><text x="5.01" y="6.012" class="i">ru</text><text x="7.014" y="6.012" class="h">n</text><text x="9.018" y="6.012" class="h">-race</text><text x="15.03" y="6.012" class="h">main.go</text></svg><svg x="1530"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="g">go</text><text x="5.01" y="6.012" class="i">run</text><text x="9.018" y="6.012" class="h">-race</text><text x="15.03" y="6.012" class="h">main.go</text></svg><svg x="1632"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1734"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1836"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="1938"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2040"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2142"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2244"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2346"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">519</text><text x="4.008" y="8.183" class="i">b</text><text x="6.012" y="8.183" class="i">/</text><text x="8.016" y="8.183" class="i">1.5</text><text x="12.024" y="8.183" class="i">KiB</text><text x="16.032" y="8.183" class="i">[====================>-----------------------------------------]</text><text x="81.162" y="8.183" class="i">34</text><text x="84.168" y="8.183" class="i">%</text></svg><svg x="2448"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">2.2</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">3.2</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[==========================================>-------------------]</text><text x="83.166" y="8.183" class="i">69</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="2550"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">2.5</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">3.5</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[===========================================>------------------]</text><text x="83.166" y="8.183" class="i">72</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="2652"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">3.2</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">4.2</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[==============================================>---------------]</text><text x="83.166" y="8.183" class="i">76</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="2754"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">3.6</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">4.6</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[================================================>-------------]</text><text x="83.166" y="8.183" class="i">78</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="2856"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">6.5</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">7.5</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[=====================================================>--------]</text><text x="83.166" y="8.183" class="i">87</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="2958"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">8.0</text><text x="4.008" y="8.183" class="i">KiB</text><text x="8.016" y="8.183" class="i">/</text><text x="10.02" y="8.183" class="i">9.0</text><text x="14.028" y="8.183" class="i">KiB</text><text x="18.036" y="8.183" class="i">[======================================================>-------]</text><text x="83.166" y="8.183" class="i">89</text><text x="86.172" y="8.183" class="i">%</text></svg><svg x="3060"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">10.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">11.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[========================================================>-----]</text><text x="85.17" y="8.183" class="i">91</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3162"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">12.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">13.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[========================================================>-----]</text><text x="85.17" y="8.183" class="i">92</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3264"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">13.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">14.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[=========================================================>----]</text><text x="85.17" y="8.183" class="i">93</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3366"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">13.2</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">14.2</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[=========================================================>----]</text><text x="85.17" y="8.183" class="i">93</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3468"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">13.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">14.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[=========================================================>----]</text><text x="85.17" y="8.183" class="i">93</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3570"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">15.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">16.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[=========================================================>----]</text><text x="85.17" y="8.183" class="i">94</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3672"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">15.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">16.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[=========================================================>----]</text><text x="85.17" y="8.183" class="i">94</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3774"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">17.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">18.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">95</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3876"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">18.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">19.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">95</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="3978"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">20.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">21.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">95</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4080"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">21.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">22.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">95</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4182"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">21.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">22.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4284"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">22.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">23.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[==========================================================>---]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4386"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">23.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">24.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4488"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">25.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">26.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4590"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">26.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">27.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4692"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">26.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">27.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">96</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4794"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">28.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">29.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4896"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">28.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">29.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="4998"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">29.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">30.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5100"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">30.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">31.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5202"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">30.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">31.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5304"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">31.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">32.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5406"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">34.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">35.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5508"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">34.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">35.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5610"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">37.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">38.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5712"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">38.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">39.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[===========================================================>--]</text><text x="85.17" y="8.183" class="i">97</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5814"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">40.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">41.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="5916"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">41.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">42.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6018"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">42.2</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">43.2</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6120"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">43.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">44.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6222"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">44.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">45.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6324"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">46.2</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">47.2</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6426"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">46.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">47.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6528"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">48.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">49.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6630"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">48.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">49.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6732"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">49.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">50.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6834"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">50.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">51.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="6936"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">50.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">51.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7038"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">50.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">51.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7140"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">50.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">51.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7242"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">51.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">52.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7344"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">52.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">53.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7446"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">53.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">54.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7548"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="7650"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="7752"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">57.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">58.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7854"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">58.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">59.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="7956"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">58.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">59.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8058"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">60.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">61.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8160"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">62.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">63.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8262"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">63.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">64.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8364"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">64.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">65.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8466"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">65.2</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">66.2</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">98</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8568"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">65.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">66.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8670"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">66.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">67.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8772"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">67.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">68.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8874"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">68.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">69.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="8976"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">70.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">71.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9078"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">70.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">71.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9180"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">70.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">71.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9282"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">72.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">73.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9384"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">73.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">74.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9486"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">74.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">75.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9588"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">75.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">76.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9690"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">78.2</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">79.2</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9792"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">79.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">80.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9894"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">80.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">81.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="9996"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">81.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">82.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10098"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">82.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">83.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10200"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">82.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">83.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10302"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">84.0</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">85.0</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10404"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">84.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">85.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10506"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">85.9</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">86.9</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10608"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">87.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">88.7</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10710"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">88.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">89.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10812"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">90.3</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">91.3</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="10914"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">91.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">92.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11016"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">92.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">93.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11118"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">93.5</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">94.5</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11220"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">93.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">94.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11322"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">95.1</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">96.1</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11424"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">96.4</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">97.4</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11526"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">97.6</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">98.6</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11628"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">98.8</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">99.8</text><text x="16.032" y="8.183" class="i">KiB</text><text x="20.04" y="8.183" class="i">[============================================================>-]</text><text x="85.17" y="8.183" class="i">99</text><text x="88.176" y="8.183" class="i">%</text></svg><svg x="11730"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">99.7</text><text x="5.01" y="8.183" class="i">KiB</text><text x="9.018" y="8.183" class="i">/</text><text x="11.022" y="8.183" class="i">100.7</text><text x="17.034" y="8.183" class="i">KiB</text><text x="21.042" y="8.183" class="i">[============================================================>-]</text><text x="86.172" y="8.183" class="i">99</text><text x="89.178" y="8.183" class="i">%</text></svg><svg x="11832"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">100.6</text><text x="6.012" y="8.183" class="i">KiB</text><text x="10.02" y="8.183" class="i">/</text><text x="12.024" y="8.183" class="i">101.6</text><text x="18.036" y="8.183" class="i">KiB</text><text x="22.044" y="8.183" class="i">[============================================================>-]</text><text x="87.174" y="8.183" class="i">99</text><text x="90.18" y="8.183" class="i">%</text></svg><svg x="11934"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="i">100.7</text><text x="6.012" y="8.183" class="i">KiB</text><text x="10.02" y="8.183" class="i">/</text><text x="12.024" y="8.183" class="i">101.7</text><text x="18.036" y="8.183" class="i">KiB</text><text x="22.044" y="8.183" class="i">[============================================================>-]</text><text x="87.174" y="8.183" class="i">99</text><text x="90.18" y="8.183" class="i">%</text></svg><svg x="12036"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/></svg><svg x="12138"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/></svg><svg x="12240"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/></svg><svg x="12342"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="10.83"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/></svg><svg x="12444"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/><use xlink:href="#9" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="12546"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/><use xlink:href="#9" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="12648"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/><use xlink:href="#9" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="12750"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#8" y="6.513"/><use xlink:href="#9" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="12852"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="13.001"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#8" y="4.342"/><use xlink:href="#9" y="8.684"/><use xlink:href="#2" y="10.855"/></svg></svg></g></g></svg></svg>⏎ |
| 0 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1020" height="130.26"><rect width="1020" height="130.26" rx="0" ry="0" class="a"/><svg height="130.26" viewBox="0 0 102 13.026" width="1020" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>@keyframes m{0%{transform:translateX(0)}.7%{transform:translateX(-102px)}.71%{transform:translateX(-510px)}.72%{transform:translateX(-612px)}.79%{transform:translateX(-714px)}.84%{transform:translateX(-816px)}2.29%{transform:translateX(-918px)}2.55%{transform:translateX(-1020px)}2.91%{transform:translateX(-1122px)}3.85%{transform:translateX(-1224px)}4.22%{transform:translateX(-1326px)}4.37%{transform:translateX(-1428px)}5.29%{transform:translateX(-1632px)}5.91%{transform:translateX(-1836px)}5.92%{transform:translateX(-1938px)}5.94%{transform:translateX(-2142px)}10.72%{transform:translateX(-2244px)}11.08%{transform:translateX(-2346px)}11.44%{transform:translateX(-2448px)}11.79%{transform:translateX(-2550px)}12.15%{transform:translateX(-2652px)}12.52%{transform:translateX(-2754px)}12.87%{transform:translateX(-2856px)}13.22%{transform:translateX(-2958px)}13.58%{transform:translateX(-3060px)}13.94%{transform:translateX(-3162px)}14.29%{transform:translateX(-3264px)}14.65%{transform:translateX(-3366px)}15.01%{transform:translateX(-3468px)}15.36%{transform:translateX(-3570px)}15.72%{transform:translateX(-3672px)}16.08%{transform:translateX(-3774px)}16.44%{transform:translateX(-3876px)}16.8%{transform:translateX(-3978px)}17.15%{transform:translateX(-4080px)}17.51%{transform:translateX(-4182px)}17.87%{transform:translateX(-4284px)}18.23%{transform:translateX(-4386px)}18.59%{transform:translateX(-4488px)}18.94%{transform:translateX(-4590px)}19.3%{transform:translateX(-4692px)}19.66%{transform:translateX(-4794px)}20.01%{transform:translateX(-4896px)}20.38%{transform:translateX(-4998px)}20.73%{transform:translateX(-5100px)}21.09%{transform:translateX(-5202px)}21.45%{transform:translateX(-5304px)}21.8%{transform:translateX(-5406px)}22.16%{transform:translateX(-5508px)}22.52%{transform:translateX(-5610px)}22.87%{transform:translateX(-5712px)}23.23%{transform:translateX(-5814px)}23.59%{transform:translateX(-5916px)}23.95%{transform:translateX(-6018px)}24.31%{transform:translateX(-6120px)}24.66%{transform:translateX(-6222px)}25.02%{transform:translateX(-6324px)}25.38%{transform:translateX(-6426px)}25.74%{transform:translateX(-6528px)}26.09%{transform:translateX(-6630px)}26.45%{transform:translateX(-6732px)}26.81%{transform:translateX(-6834px)}27.17%{transform:translateX(-6936px)}27.52%{transform:translateX(-7038px)}27.88%{transform:translateX(-7140px)}28.24%{transform:translateX(-7242px)}28.59%{transform:translateX(-7344px)}28.95%{transform:translateX(-7446px)}29.31%{transform:translateX(-7548px)}29.67%{transform:translateX(-7650px)}30.02%{transform:translateX(-7752px)}30.39%{transform:translateX(-7854px)}30.74%{transform:translateX(-7956px)}31.1%{transform:translateX(-8058px)}31.46%{transform:translateX(-8160px)}31.81%{transform:translateX(-8262px)}32.17%{transform:translateX(-8364px)}32.52%{transform:translateX(-8466px)}32.88%{transform:translateX(-8568px)}33.25%{transform:translateX(-8670px)}33.6%{transform:translateX(-8772px)}33.96%{transform:translateX(-8874px)}34.31%{transform:translateX(-8976px)}34.68%{transform:translateX(-9078px)}35.03%{transform:translateX(-9180px)}35.39%{transform:translateX(-9282px)}35.75%{transform:translateX(-9384px)}36.11%{transform:translateX(-9486px)}36.46%{transform:translateX(-9588px)}36.81%{transform:translateX(-9690px)}37.18%{transform:translateX(-9792px)}37.53%{transform:translateX(-9894px)}37.89%{transform:translateX(-9996px)}38.25%{transform:translateX(-10098px)}38.6%{transform:translateX(-10200px)}38.96%{transform:translateX(-10302px)}39.32%{transform:translateX(-10404px)}39.68%{transform:translateX(-10506px)}40.03%{transform:translateX(-10608px)}40.39%{transform:translateX(-10710px)}40.75%{transform:translateX(-10812px)}41.1%{transform:translateX(-10914px)}41.46%{transform:translateX(-11016px)}41.82%{transform:translateX(-11118px)}42.18%{transform:translateX(-11220px)}42.53%{transform:translateX(-11322px)}42.9%{transform:translateX(-11424px)}43.25%{transform:translateX(-11526px)}43.61%{transform:translateX(-11628px)}43.97%{transform:translateX(-11730px)}44.33%{transform:translateX(-11832px)}44.69%{transform:translateX(-11934px)}45.04%{transform:translateX(-12036px)}45.4%{transform:translateX(-12138px)}45.76%{transform:translateX(-12240px)}46.11%{transform:translateX(-12342px)}46.47%{transform:translateX(-12444px)}46.82%{transform:translateX(-12546px)}47.19%{transform:translateX(-12648px)}47.54%{transform:translateX(-12750px)}47.9%{transform:translateX(-12852px)}48.25%{transform:translateX(-12954px)}48.62%{transform:translateX(-13056px)}48.98%{transform:translateX(-13158px)}49.33%{transform:translateX(-13260px)}49.69%{transform:translateX(-13362px)}50.05%{transform:translateX(-13464px)}50.4%{transform:translateX(-13566px)}50.76%{transform:translateX(-13668px)}51.11%{transform:translateX(-13770px)}51.48%{transform:translateX(-13872px)}51.83%{transform:translateX(-13974px)}52.19%{transform:translateX(-14076px)}52.54%{transform:translateX(-14178px)}52.91%{transform:translateX(-14280px)}53.26%{transform:translateX(-14382px)}53.62%{transform:translateX(-14484px)}53.97%{transform:translateX(-14586px)}54.33%{transform:translateX(-14688px)}54.69%{transform:translateX(-14790px)}55.05%{transform:translateX(-14892px)}55.4%{transform:translateX(-14994px)}55.76%{transform:translateX(-15096px)}56.12%{transform:translateX(-15198px)}56.48%{transform:translateX(-15300px)}56.84%{transform:translateX(-15402px)}57.19%{transform:translateX(-15504px)}57.55%{transform:translateX(-15606px)}57.91%{transform:translateX(-15708px)}58.27%{transform:translateX(-15810px)}58.63%{transform:translateX(-15912px)}58.98%{transform:translateX(-16014px)}59.34%{transform:translateX(-16116px)}59.7%{transform:translateX(-16218px)}60.05%{transform:translateX(-16320px)}60.41%{transform:translateX(-16422px)}60.77%{transform:translateX(-16524px)}61.12%{transform:translateX(-16626px)}61.49%{transform:translateX(-16728px)}61.84%{transform:translateX(-16830px)}62.2%{transform:translateX(-16932px)}62.56%{transform:translateX(-17034px)}62.91%{transform:translateX(-17136px)}63.27%{transform:translateX(-17238px)}63.63%{transform:translateX(-17340px)}63.99%{transform:translateX(-17442px)}64.34%{transform:translateX(-17544px)}64.7%{transform:translateX(-17646px)}65.06%{transform:translateX(-17748px)}65.42%{transform:translateX(-17850px)}65.78%{transform:translateX(-17952px)}66.13%{transform:translateX(-18054px)}66.49%{transform:translateX(-18156px)}66.85%{transform:translateX(-18258px)}67.2%{transform:translateX(-18360px)}67.56%{transform:translateX(-18462px)}67.92%{transform:translateX(-18564px)}68.27%{transform:translateX(-18666px)}68.63%{transform:translateX(-18768px)}68.99%{transform:translateX(-18870px)}69.35%{transform:translateX(-18972px)}69.7%{transform:translateX(-19074px)}70.06%{transform:translateX(-19176px)}70.42%{transform:translateX(-19278px)}70.78%{transform:translateX(-19380px)}71.14%{transform:translateX(-19482px)}71.49%{transform:translateX(-19584px)}71.85%{transform:translateX(-19686px)}72.21%{transform:translateX(-19788px)}72.57%{transform:translateX(-19890px)}72.93%{transform:translateX(-19992px)}73.28%{transform:translateX(-20094px)}73.64%{transform:translateX(-20196px)}74%{transform:translateX(-20298px)}74.35%{transform:translateX(-20400px)}74.71%{transform:translateX(-20502px)}75.07%{transform:translateX(-20604px)}75.43%{transform:translateX(-20706px)}75.78%{transform:translateX(-20808px)}76.14%{transform:translateX(-20910px)}76.5%{transform:translateX(-21012px)}76.86%{transform:translateX(-21114px)}77.21%{transform:translateX(-21216px)}77.57%{transform:translateX(-21318px)}77.93%{transform:translateX(-21420px)}78.29%{transform:translateX(-21522px)}78.64%{transform:translateX(-21624px)}79%{transform:translateX(-21726px)}79.35%{transform:translateX(-21828px)}79.72%{transform:translateX(-21930px)}80.08%{transform:translateX(-22032px)}80.43%{transform:translateX(-22134px)}80.79%{transform:translateX(-22236px)}81.14%{transform:translateX(-22338px)}81.5%{transform:translateX(-22440px)}81.86%{transform:translateX(-22542px)}82.22%{transform:translateX(-22644px)}82.57%{transform:translateX(-22746px)}82.93%{transform:translateX(-22848px)}83.29%{transform:translateX(-22950px)}83.65%{transform:translateX(-23052px)}84%{transform:translateX(-23154px)}84.36%{transform:translateX(-23256px)}84.71%{transform:translateX(-23358px)}85.08%{transform:translateX(-23460px)}85.44%{transform:translateX(-23562px)}85.79%{transform:translateX(-23664px)}86.15%{transform:translateX(-23766px)}86.51%{transform:translateX(-23868px)}86.86%{transform:translateX(-23970px)}87.23%{transform:translateX(-24072px)}87.57%{transform:translateX(-24174px)}87.94%{transform:translateX(-24276px)}88.3%{transform:translateX(-24378px)}88.65%{transform:translateX(-24480px)}89.01%{transform:translateX(-24582px)}89.37%{transform:translateX(-24684px)}89.72%{transform:translateX(-24786px)}90.08%{transform:translateX(-24888px)}90.44%{transform:translateX(-24990px)}90.8%{transform:translateX(-25092px)}91.15%{transform:translateX(-25194px)}91.51%{transform:translateX(-25296px)}91.86%{transform:translateX(-25398px)}92.22%{transform:translateX(-25500px)}92.59%{transform:translateX(-25602px)}92.94%{transform:translateX(-25704px)}93.29%{transform:translateX(-25806px)}93.66%{transform:translateX(-25908px)}94.01%{transform:translateX(-26010px)}94.37%{transform:translateX(-26112px)}94.72%{transform:translateX(-26214px)}97.1%{transform:translateX(-26316px)}97.11%{transform:translateX(-26418px)}97.21%{transform:translateX(-26622px)}97.22%{transform:translateX(-26826px)}to{transform:translateX(-26928px)}}.a{fill:#282d35}.c{fill:#71bef2}.d{fill:#d290e4}.e{fill:#6c6c6c}.f{fill:#a8cc8c}.g{fill:#afafaf}.h{fill:#b9c0cb}</style><g font-size="1.67" font-family="Monaco,Consolas,Menlo,'Bitstream Vera Sans Mono','Powerline Symbols',monospace"><defs><symbol id="1"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/io/single</text></symbol><symbol id="2"><text y="1.67" class="d">❯</text></symbol><symbol id="3"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/io/single</text><text x="54.108" y="1.67" class="e">master*</text></symbol><symbol id="4"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="g">run</text><text x="9.018" y="1.67" class="g">-race</text><text x="15.03" y="1.67" class="g">main.go</text></symbol><symbol id="5"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="h">run</text><path class="h" d="M8.016 0h1v2.171h-1z"/><text x="8.016" y="1.67" class="a"></text><text x="9.018" y="1.67" class="h">-race</text><text x="15.03" y="1.67" class="h">main.go</text></symbol><symbol id="6"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="h">run</text><text x="9.018" y="1.67" class="h">-race</text><text x="15.03" y="1.67" fill="#b9c0cb" text-decoration="underline">main.go</text></symbol><symbol id="7"><text y="1.67" class="h">40.6</text><text x="5.01" y="1.67" class="h">MiB</text><text x="9.018" y="1.67" class="h">/</text><text x="11.022" y="1.67" class="h">40.6</text><text x="16.032" y="1.67" class="h">MiB</text><text x="20.04" y="1.67" class="h">[==========================================================|</text><text x="81.162" y="1.67" class="h">00:00</text><text x="87.174" y="1.67" class="h">]</text><text x="89.178" y="1.67" class="h">7.54</text><text x="94.188" y="1.67" class="h">MiB/s</text></symbol><symbol id="8"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/io/single</text><text x="54.108" y="1.67" class="e">master*</text><text x="62.124" y="1.67" fill="#dbab79">46s</text></symbol><symbol id="a"><path fill="transparent" d="M0 0h102v7H0z"/></symbol><symbol id="b"><path fill="#6f7683" d="M0 0h1.102v2.171H0z"/></symbol></defs><path class="a" d="M0 0h102v13.026H0z"/><g style="animation-duration:50.351952s;animation-iteration-count:infinite;animation-name:m;animation-timing-function:steps(1,end)"><svg width="27030"><svg><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="102"><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="204"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="2.146"/></svg><svg x="306"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="408"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="510"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="612"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="714"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><text y="3.841" class="c">~/go/src/github.com/vbauerster/mpb/examples/io/single</text><text x="54.108" y="3.841" class="e">master</text><use xlink:href="#2" y="4.342"/></svg><svg x="816"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="918"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">g</text><text x="3.006" y="6.012" class="g">it</text><text x="6.012" y="6.012" class="g">clean</text><text x="12.024" y="6.012" class="g">-fdx</text></svg><svg x="1020"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1122"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1224"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">r</text><text x="6.012" y="6.012" class="g">un</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1326"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">ru</text><text x="7.014" y="6.012" class="g">n</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1428"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">run</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1530"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1632"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1734"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="1836"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="1938"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2040"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2142"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2244"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.6</text><text x="5.01" y="8.183" class="h">KiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[----------------------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:00</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">0</text><text x="91.182" y="8.183" class="h">b/s</text></svg><svg x="2346"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">66.5</text><text x="5.01" y="8.183" class="h">KiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[----------------------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:00</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">0</text><text x="91.182" y="8.183" class="h">b/s</text></svg><svg x="2448"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">134.5</text><text x="6.012" y="8.183" class="h">KiB</text><text x="10.02" y="8.183" class="h">/</text><text x="12.024" y="8.183" class="h">40.6</text><text x="17.034" y="8.183" class="h">MiB</text><text x="21.042" y="8.183" class="h">[----------------------------------------------------------|</text><text x="82.164" y="8.183" class="h">09:01</text><text x="88.176" y="8.183" class="h">]</text><text x="90.18" y="8.183" class="h">6.18</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="2550"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">339.6</text><text x="6.012" y="8.183" class="h">KiB</text><text x="10.02" y="8.183" class="h">/</text><text x="12.024" y="8.183" class="h">40.6</text><text x="17.034" y="8.183" class="h">MiB</text><text x="21.042" y="8.183" class="h">[----------------------------------------------------------|</text><text x="82.164" y="8.183" class="h">08:18</text><text x="88.176" y="8.183" class="h">]</text><text x="90.18" y="8.183" class="h">6.41</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="2652"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">577.6</text><text x="6.012" y="8.183" class="h">KiB</text><text x="10.02" y="8.183" class="h">/</text><text x="12.024" y="8.183" class="h">40.6</text><text x="17.034" y="8.183" class="h">MiB</text><text x="21.042" y="8.183" class="h">[>---------------------------------------------------------|</text><text x="82.164" y="8.183" class="h">07:32</text><text x="88.176" y="8.183" class="h">]</text><text x="90.18" y="8.183" class="h">7.05</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="2754"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">866.6</text><text x="6.012" y="8.183" class="h">KiB</text><text x="10.02" y="8.183" class="h">/</text><text x="12.024" y="8.183" class="h">40.6</text><text x="17.034" y="8.183" class="h">MiB</text><text x="21.042" y="8.183" class="h">[>---------------------------------------------------------|</text><text x="82.164" y="8.183" class="h">06:43</text><text x="88.176" y="8.183" class="h">]</text><text x="90.18" y="8.183" class="h">7.36</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="2856"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">1.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=>--------------------------------------------------------|</text><text x="80.16" y="8.183" class="h">05:12</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">8.12</text><text x="93.186" y="8.183" class="h">MiB/s</text></svg><svg x="2958"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">1.8</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[==>-------------------------------------------------------|</text><text x="80.16" y="8.183" class="h">04:28</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">8.48</text><text x="93.186" y="8.183" class="h">MiB/s</text></svg><svg x="3060"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">2.4</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[==>-------------------------------------------------------|</text><text x="80.16" y="8.183" class="h">03:29</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">16.62</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3162"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">2.9</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[===>------------------------------------------------------|</text><text x="80.16" y="8.183" class="h">02:52</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">15.37</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3264"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">3.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[====>-----------------------------------------------------|</text><text x="80.16" y="8.183" class="h">02:17</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">14.22</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3366"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">3.9</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=====>----------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:59</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">13.18</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3468"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">4.3</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=====>----------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:40</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">12.42</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3570"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">4.9</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[======>---------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:19</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">18.55</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3672"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">5.2</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[======>---------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:11</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">17.39</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3774"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">5.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=======>--------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:03</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">16.23</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3876"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">5.6</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=======>--------------------------------------------------|</text><text x="80.16" y="8.183" class="h">01:02</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">16.04</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="3978"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">6.2</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[========>-------------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:50</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">17.91</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4080"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">6.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[========>-------------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:47</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">16.80</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4182"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">6.7</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=========>------------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:45</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">15.85</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4284"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">7.0</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=========>------------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:41</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">14.66</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4386"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">7.3</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=========>------------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:38</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">17.03</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4488"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">7.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[==========>-----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:39</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">16.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4590"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">7.7</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[==========>-----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:38</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">15.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4692"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">8.0</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[==========>-----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:36</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">14.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4794"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">8.1</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[===========>----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:35</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">13.56</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4896"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">8.4</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[===========>----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:36</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">13.08</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="4998"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">8.6</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[===========>----------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:34</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">12.51</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5100"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">8.8</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[============>---------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:34</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">12.05</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5202"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">9.0</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[============>---------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:35</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">11.56</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5304"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">9.3</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[============>---------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:32</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">11.12</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5406"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">9.5</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=============>--------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:31</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">10.75</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5508"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">9.7</text><text x="4.008" y="8.183" class="h">MiB</text><text x="8.016" y="8.183" class="h">/</text><text x="10.02" y="8.183" class="h">40.6</text><text x="15.03" y="8.183" class="h">MiB</text><text x="19.038" y="8.183" class="h">[=============>--------------------------------------------|</text><text x="80.16" y="8.183" class="h">00:30</text><text x="86.172" y="8.183" class="h">]</text><text x="88.176" y="8.183" class="h">10.23</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5610"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">10.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============>--------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:29</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.89</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5712"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">10.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============>-------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:30</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.54</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5814"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">10.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============>-------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:28</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.34</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="5916"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">10.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============>-------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.04</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6018"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">10.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============>------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:26</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.79</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6120"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">11.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============>------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:26</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.75</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6222"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">11.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============>------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">11.13</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="6324"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">11.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============>------------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.81</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="6426"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">11.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================>-----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.45</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="6528"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">11.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================>-----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.00</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="6630"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================>-----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.63</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6732"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================>----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6834"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================>----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.14</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="6936"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================>----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.79</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7038"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================>----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.07</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="7140"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">12.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================>----------------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.96</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7242"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================>---------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.80</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7344"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================>---------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.71</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7446"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================>---------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.61</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7548"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================>---------------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.36</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7650"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================>--------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.19</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7752"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">13.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================>--------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.93</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7854"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================>--------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.65</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="7956"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================>--------------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.48</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8058"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================>-------------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.32</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8160"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================>-------------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.20</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8262"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================>-------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.12</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8364"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">14.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================>-------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.97</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8466"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================>-------------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8568"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================>------------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.74</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8670"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================>------------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.73</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8772"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================>------------------------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.07</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8874"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================>------------------------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.84</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="8976"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================>------------------------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.72</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9078"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">15.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================>-----------------------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.45</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9180"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================>-----------------------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.27</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9282"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================>-----------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.05</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9384"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================>-----------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9486"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================>-----------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.69</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9588"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================>----------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.60</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9690"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================>----------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.49</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9792"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">16.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================>----------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.41</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9894"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================>----------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.43</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="9996"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================>---------------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.38</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10098"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================>---------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.23</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10200"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================>---------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.15</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10302"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================>---------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10404"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">17.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================>--------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.90</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10506"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================>--------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.83</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10608"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================>--------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.15</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10710"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================>--------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10812"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================>--------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="10914"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================>-------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.62</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11016"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================>-------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.58</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11118"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">18.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================>-------------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.47</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11220"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================>-------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.39</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11322"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================>-------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.33</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11424"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.48</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11526"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.27</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11628"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.13</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11730"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.89</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11832"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.67</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="11934"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">19.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================>------------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.52</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12036"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.42</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12138"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.25</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12240"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.12</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12342"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.94</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12444"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.75</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12546"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================>-----------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.59</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12648"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.57</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12750"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">20.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.45</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12852"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:28</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.40</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="12954"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:30</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.36</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13056"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:29</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.28</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13158"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================>----------------------------|</text><text x="81.162" y="8.183" class="h">00:28</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.22</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13260"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================>---------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.19</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13362"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================>---------------------------|</text><text x="81.162" y="8.183" class="h">00:29</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.10</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13464"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================>---------------------------|</text><text x="81.162" y="8.183" class="h">00:28</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.09</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13566"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================>---------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.04</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13668"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">21.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================>---------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13770"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:27</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.83</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13872"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:26</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.78</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="13974"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.80</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14076"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.76</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14178"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.72</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14280"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================>--------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.70</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14382"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.60</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14484"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">22.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.58</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14586"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.35</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14688"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.33</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14790"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.33</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14892"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================>-------------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.31</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="14994"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.28</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15096"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.20</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15198"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15300"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15402"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">23.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.31</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15504"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================>------------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15606"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.25</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15708"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:25</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.20</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15810"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.20</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="15912"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.14</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16014"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16116"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================>-----------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.13</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16218"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">24.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.14</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16320"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.17</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16422"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16524"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.05</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16626"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.14</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16728"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================>----------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.06</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16830"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================>---------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.04</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="16932"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================>---------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.02</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17034"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">25.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================>---------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.96</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17136"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================>---------------------|</text><text x="81.162" y="8.183" class="h">00:24</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.05</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17238"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================>---------------------|</text><text x="81.162" y="8.183" class="h">00:23</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.03</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17340"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.18</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17442"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:22</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.10</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17544"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.09</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17646"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.09</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17748"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.07</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17850"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.02</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="17952"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">26.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================>--------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.92</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18054"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.89</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18156"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18258"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.98</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18360"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18462"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.98</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18564"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================>-------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.94</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18666"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.98</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18768"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18870"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">27.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.81</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="18972"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.71</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19074"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.58</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19176"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.44</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19278"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================>------------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.38</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19380"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.33</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19482"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.19</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19584"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.17</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19686"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.17</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19788"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.11</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19890"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.03</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="19992"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">28.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================>-----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.89</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20094"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.79</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20196"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.72</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20298"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.60</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20400"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.50</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20502"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.48</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20604"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.44</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20706"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=========================================>----------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.37</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20808"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.31</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="20910"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:21</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.31</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21012"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">29.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.34</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21114"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:20</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.32</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21216"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.22</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21318"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.18</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21420"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================>---------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21522"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:19</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.21</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21624"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:18</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.19</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21726"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.18</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21828"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.19</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="21930"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">30.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22032"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===========================================>--------------|</text><text x="81.162" y="8.183" class="h">00:17</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.89</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22134"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================================>-------------|</text><text x="81.162" y="8.183" class="h">00:16</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.92</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22236"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================================>-------------|</text><text x="81.162" y="8.183" class="h">00:15</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.80</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22338"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================================>-------------|</text><text x="81.162" y="8.183" class="h">00:15</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.85</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22440"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================================>-------------|</text><text x="81.162" y="8.183" class="h">00:14</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.87</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22542"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[============================================>-------------|</text><text x="81.162" y="8.183" class="h">00:13</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.93</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22644"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">31.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================================>------------|</text><text x="81.162" y="8.183" class="h">00:13</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.95</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22746"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================================>------------|</text><text x="81.162" y="8.183" class="h">00:12</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.98</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22848"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================================>------------|</text><text x="81.162" y="8.183" class="h">00:11</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">5.99</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="22950"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================================>------------|</text><text x="81.162" y="8.183" class="h">00:11</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.04</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23052"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=============================================>------------|</text><text x="81.162" y="8.183" class="h">00:10</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.08</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23154"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================================>-----------|</text><text x="81.162" y="8.183" class="h">00:10</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.03</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23256"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">32.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================================>-----------|</text><text x="81.162" y="8.183" class="h">00:09</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.05</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23358"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">33.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==============================================>-----------|</text><text x="81.162" y="8.183" class="h">00:09</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.08</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23460"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">33.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================================>----------|</text><text x="81.162" y="8.183" class="h">00:08</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.13</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23562"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">33.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================================>----------|</text><text x="81.162" y="8.183" class="h">00:07</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.30</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23664"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">33.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===============================================>----------|</text><text x="81.162" y="8.183" class="h">00:07</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.33</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23766"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">34.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================================>---------|</text><text x="81.162" y="8.183" class="h">00:07</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.44</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23868"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">34.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================================>---------|</text><text x="81.162" y="8.183" class="h">00:06</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="23970"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">34.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[================================================>---------|</text><text x="81.162" y="8.183" class="h">00:05</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24072"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">34.8</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================================>--------|</text><text x="81.162" y="8.183" class="h">00:05</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">6.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24174"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">35.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=================================================>--------|</text><text x="81.162" y="8.183" class="h">00:04</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.50</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="24276"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">35.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================================>-------|</text><text x="81.162" y="8.183" class="h">00:04</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">10.17</text><text x="95.19" y="8.183" class="h">MiB/s</text></svg><svg x="24378"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">35.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================================>-------|</text><text x="81.162" y="8.183" class="h">00:03</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.88</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24480"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">35.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==================================================>-------|</text><text x="81.162" y="8.183" class="h">00:03</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.36</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24582"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">36.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================================>------|</text><text x="81.162" y="8.183" class="h">00:03</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.27</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24684"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">36.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================================>------|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">9.08</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24786"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">36.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[===================================================>------|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.83</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24888"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">37.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================================>-----|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.64</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="24990"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">37.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[====================================================>-----|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.48</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25092"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">37.5</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================================>----|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.26</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25194"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">37.9</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================================>----|</text><text x="81.162" y="8.183" class="h">00:02</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.16</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25296"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">38.1</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=====================================================>----|</text><text x="81.162" y="8.183" class="h">00:01</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.21</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25398"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">38.4</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================================>---|</text><text x="81.162" y="8.183" class="h">00:01</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.38</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25500"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">38.7</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[======================================================>---|</text><text x="81.162" y="8.183" class="h">00:01</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.31</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25602"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">39.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================================>--|</text><text x="81.162" y="8.183" class="h">00:01</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.40</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25704"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">39.3</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[=======================================================>--|</text><text x="81.162" y="8.183" class="h">00:01</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.21</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25806"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">39.6</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================================>-|</text><text x="81.162" y="8.183" class="h">00:00</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">8.14</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="25908"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">40.0</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[========================================================>-|</text><text x="81.162" y="8.183" class="h">00:00</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.97</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="26010"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">40.2</text><text x="5.01" y="8.183" class="h">MiB</text><text x="9.018" y="8.183" class="h">/</text><text x="11.022" y="8.183" class="h">40.6</text><text x="16.032" y="8.183" class="h">MiB</text><text x="20.04" y="8.183" class="h">[==========================================================|</text><text x="81.162" y="8.183" class="h">00:00</text><text x="87.174" y="8.183" class="h">]</text><text x="89.178" y="8.183" class="h">7.75</text><text x="94.188" y="8.183" class="h">MiB/s</text></svg><svg x="26112"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="26214"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="26316"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="26418"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="10.83"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/></svg><svg x="26520"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/><use xlink:href="#8" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="26622"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/><use xlink:href="#8" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="26724"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/><use xlink:href="#8" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="26826"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#7" y="6.513"/><use xlink:href="#8" y="10.855"/><use xlink:href="#2" y="13.026"/></svg><svg x="26928"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="13.001"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#7" y="4.342"/><use xlink:href="#8" y="8.684"/><use xlink:href="#2" y="10.855"/></svg></svg></g></g></svg></svg>⏎ |
| 0 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1020" height="173.68"><rect width="1020" height="173.68" rx="0" ry="0" class="a"/><svg height="173.68" viewBox="0 0 102 17.368" width="1020" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>@keyframes m{0%{transform:translateX(0)}1.87%{transform:translateX(-102px)}1.89%{transform:translateX(-408px)}1.9%{transform:translateX(-510px)}1.92%{transform:translateX(-612px)}2.07%{transform:translateX(-714px)}2.16%{transform:translateX(-816px)}4.56%{transform:translateX(-918px)}5.18%{transform:translateX(-1020px)}5.77%{transform:translateX(-1122px)}6.6%{transform:translateX(-1224px)}7.36%{transform:translateX(-1326px)}7.71%{transform:translateX(-1428px)}9.58%{transform:translateX(-1632px)}10.82%{transform:translateX(-1836px)}10.84%{transform:translateX(-1938px)}10.88%{transform:translateX(-2040px)}10.89%{transform:translateX(-2142px)}14.85%{transform:translateX(-2244px)}15.4%{transform:translateX(-2346px)}15.95%{transform:translateX(-2448px)}16.51%{transform:translateX(-2550px)}17.06%{transform:translateX(-2652px)}17.61%{transform:translateX(-2754px)}18.16%{transform:translateX(-2856px)}18.72%{transform:translateX(-2958px)}19.28%{transform:translateX(-3060px)}19.82%{transform:translateX(-3162px)}20.39%{transform:translateX(-3264px)}20.93%{transform:translateX(-3366px)}21.47%{transform:translateX(-3468px)}22.04%{transform:translateX(-3570px)}22.57%{transform:translateX(-3672px)}23.15%{transform:translateX(-3774px)}23.7%{transform:translateX(-3876px)}24.23%{transform:translateX(-3978px)}24.8%{transform:translateX(-4080px)}25.34%{transform:translateX(-4182px)}25.9%{transform:translateX(-4284px)}26.46%{transform:translateX(-4386px)}27%{transform:translateX(-4488px)}27.56%{transform:translateX(-4590px)}28.12%{transform:translateX(-4692px)}28.66%{transform:translateX(-4794px)}29.22%{transform:translateX(-4896px)}29.76%{transform:translateX(-4998px)}30.33%{transform:translateX(-5100px)}30.88%{transform:translateX(-5202px)}31.42%{transform:translateX(-5304px)}31.98%{transform:translateX(-5406px)}32.53%{transform:translateX(-5508px)}33.08%{transform:translateX(-5610px)}33.65%{transform:translateX(-5712px)}34.18%{transform:translateX(-5814px)}34.75%{transform:translateX(-5916px)}35.29%{transform:translateX(-6018px)}35.85%{transform:translateX(-6120px)}36.42%{transform:translateX(-6222px)}36.96%{transform:translateX(-6324px)}37.51%{transform:translateX(-6426px)}38.05%{transform:translateX(-6528px)}38.61%{transform:translateX(-6630px)}39.17%{transform:translateX(-6732px)}39.71%{transform:translateX(-6834px)}40.28%{transform:translateX(-6936px)}40.82%{transform:translateX(-7038px)}41.39%{transform:translateX(-7140px)}41.95%{transform:translateX(-7242px)}42.48%{transform:translateX(-7344px)}43.03%{transform:translateX(-7446px)}43.58%{transform:translateX(-7548px)}44.15%{transform:translateX(-7650px)}44.69%{transform:translateX(-7752px)}45.26%{transform:translateX(-7854px)}45.81%{transform:translateX(-7956px)}46.34%{transform:translateX(-8058px)}46.92%{transform:translateX(-8160px)}47.46%{transform:translateX(-8262px)}48%{transform:translateX(-8364px)}48.57%{transform:translateX(-8466px)}49.11%{transform:translateX(-8568px)}49.67%{transform:translateX(-8670px)}50.21%{transform:translateX(-8772px)}50.77%{transform:translateX(-8874px)}51.32%{transform:translateX(-8976px)}51.87%{transform:translateX(-9078px)}52.44%{transform:translateX(-9180px)}52.98%{transform:translateX(-9282px)}53.54%{transform:translateX(-9384px)}54.1%{transform:translateX(-9486px)}54.64%{transform:translateX(-9588px)}55.21%{transform:translateX(-9690px)}55.75%{transform:translateX(-9792px)}56.32%{transform:translateX(-9894px)}56.86%{transform:translateX(-9996px)}57.4%{transform:translateX(-10098px)}57.98%{transform:translateX(-10200px)}58.52%{transform:translateX(-10302px)}59.08%{transform:translateX(-10404px)}59.63%{transform:translateX(-10506px)}60.19%{transform:translateX(-10608px)}60.72%{transform:translateX(-10710px)}61.28%{transform:translateX(-10812px)}61.83%{transform:translateX(-10914px)}62.39%{transform:translateX(-11016px)}62.93%{transform:translateX(-11118px)}63.49%{transform:translateX(-11220px)}64.04%{transform:translateX(-11322px)}64.6%{transform:translateX(-11424px)}65.16%{transform:translateX(-11526px)}65.69%{transform:translateX(-11628px)}66.26%{transform:translateX(-11730px)}66.8%{transform:translateX(-11832px)}67.37%{transform:translateX(-11934px)}67.92%{transform:translateX(-12036px)}68.45%{transform:translateX(-12138px)}69.02%{transform:translateX(-12240px)}69.56%{transform:translateX(-12342px)}70.14%{transform:translateX(-12444px)}70.69%{transform:translateX(-12546px)}71.22%{transform:translateX(-12648px)}71.79%{transform:translateX(-12750px)}72.33%{transform:translateX(-12852px)}72.9%{transform:translateX(-12954px)}73.45%{transform:translateX(-13056px)}73.98%{transform:translateX(-13158px)}74.56%{transform:translateX(-13260px)}75.09%{transform:translateX(-13362px)}75.65%{transform:translateX(-13464px)}76.21%{transform:translateX(-13566px)}76.75%{transform:translateX(-13668px)}77.32%{transform:translateX(-13770px)}77.85%{transform:translateX(-13872px)}78.41%{transform:translateX(-13974px)}78.98%{transform:translateX(-14076px)}79.51%{transform:translateX(-14178px)}80.08%{transform:translateX(-14280px)}80.63%{transform:translateX(-14382px)}81.18%{transform:translateX(-14484px)}81.74%{transform:translateX(-14586px)}82.29%{transform:translateX(-14688px)}82.85%{transform:translateX(-14790px)}83.39%{transform:translateX(-14892px)}83.96%{transform:translateX(-14994px)}84.5%{transform:translateX(-15096px)}85.04%{transform:translateX(-15198px)}85.61%{transform:translateX(-15300px)}86.15%{transform:translateX(-15402px)}86.72%{transform:translateX(-15504px)}87.27%{transform:translateX(-15606px)}87.81%{transform:translateX(-15708px)}88.37%{transform:translateX(-15810px)}88.92%{transform:translateX(-15912px)}89.49%{transform:translateX(-16014px)}90.04%{transform:translateX(-16116px)}90.57%{transform:translateX(-16218px)}91.14%{transform:translateX(-16320px)}96.34%{transform:translateX(-16524px)}96.56%{transform:translateX(-16728px)}96.57%{transform:translateX(-16830px)}96.59%{transform:translateX(-16932px)}to{transform:translateX(-17034px)}}.a{fill:#f8f8f8}.c{fill:#4f97d7}.d{fill:#a31db1}.e{fill:#6c6c6c}.f{fill:#67b11d}.g{fill:#afafaf}.h{fill:#444155}</style><g font-size="1.67" font-family="Monaco,Consolas,Menlo,'Bitstream Vera Sans Mono','Powerline Symbols',monospace"><defs><symbol id="1"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/complex</text></symbol><symbol id="2"><text y="1.67" class="d">❯</text></symbol><symbol id="3"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/complex</text><text x="52.104" y="1.67" class="e">master*</text></symbol><symbol id="4"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="g">run</text><text x="9.018" y="1.67" class="g">-race</text><text x="15.03" y="1.67" class="g">main.go</text></symbol><symbol id="5"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="h">run</text><path fill="#b9c0cb" d="M8.016 0h1v2.171h-1z"/><text x="8.016" y="1.67" class="a"></text><text x="9.018" y="1.67" class="h">-race</text><text x="15.03" y="1.67" class="h">main.go</text></symbol><symbol id="6"><text y="1.67" class="d">❯</text><text x="2.004" y="1.67" class="f">go</text><text x="5.01" y="1.67" class="h">run</text><text x="9.018" y="1.67" class="h">-race</text><text x="15.03" y="1.67" fill="#444155" text-decoration="underline">main.go</text></symbol><symbol id="7"><text y="1.67" class="h">Task#03:</text><text x="9.018" y="1.67" class="h">installing</text><text x="24.048" y="1.67" class="h">00:08</text><text x="30.06" y="1.67" class="h">[======>-------------------------------------------------------]</text><text x="96.192" y="1.67" class="h">11</text><text x="99.198" y="1.67" class="h">%</text></symbol><symbol id="8"><text y="1.67" class="h">Task#03:</text><text x="9.018" y="1.67" class="h">installing</text><text x="25.05" y="1.67" class="h">00:07</text><text x="31.062" y="1.67" class="h">[==============>-----------------------------------------------]</text><text x="97.194" y="1.67" class="h">24</text><text x="100.2" y="1.67" class="h">%</text></symbol><symbol id="9"><text y="1.67" class="h">Task#02:</text><text x="9.018" y="1.67" class="h">done!</text></symbol><symbol id="10"><text y="1.67" class="h">Task#03:</text><text x="9.018" y="1.67" class="h">done!</text></symbol><symbol id="11"><text y="1.67" class="h">Task#01:</text><text x="9.018" y="1.67" class="h">done!</text></symbol><symbol id="12"><text y="1.67" class="h">Task#00:</text><text x="9.018" y="1.67" class="h">done!</text></symbol><symbol id="13"><text y="1.67" class="c">~/go/src/github.com/vbauerster/mpb/examples/complex</text><text x="52.104" y="1.67" class="e">master*</text><text x="60.12" y="1.67" fill="#b1951d">19s</text></symbol><symbol id="a"><path fill="transparent" d="M0 0h102v9H0z"/></symbol><symbol id="b"><path class="h" d="M0 0h1.102v2.171H0z"/></symbol></defs><path class="a" d="M0 0h102v17.368H0z"/><g style="animation-duration:21.706843s;animation-iteration-count:infinite;animation-name:m;animation-timing-function:steps(1,end)"><svg width="17136"><svg><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="102"><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="204"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="2.146"/></svg><svg x="306"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="408"><use xlink:href="#a"/><use xlink:href="#b" x=".996" y="4.317"/><use xlink:href="#1" y="2.171"/></svg><svg x="510"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="612"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#1" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="714"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><text y="3.841" class="c">~/go/src/github.com/vbauerster/mpb/examples/complex</text><text x="52.104" y="3.841" class="e">master</text><use xlink:href="#2" y="4.342"/></svg><svg x="816"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="918"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">g</text><text x="3.006" y="6.012" class="g">o</text><text x="5.01" y="6.012" class="g">run</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1020"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1122"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="1224"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">r</text><text x="6.012" y="6.012" class="g">un</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1326"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">ru</text><text x="7.014" y="6.012" class="g">n</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1428"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="4.317"/><use xlink:href="#3" y="2.171"/><text y="6.012" class="d">❯</text><text x="2.004" y="6.012" class="f">go</text><text x="5.01" y="6.012" class="h">run</text><text x="9.018" y="6.012" class="g">-race</text><text x="15.03" y="6.012" class="g">main.go</text></svg><svg x="1530"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1632"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#5" y="4.342"/></svg><svg x="1734"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="1836"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="1938"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2040"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2142"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/></svg><svg x="2244"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">4</text><text x="23.046" y="8.183" class="h">/</text><text x="25.05" y="8.183" class="h">268</text><text x="29.058" y="8.183" class="h">[>-------------------------------------------------------------]</text><text x="96.192" y="8.183" class="h">1</text><text x="98.196" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">2</text><text x="23.046" y="10.354" class="h">/</text><text x="25.05" y="10.354" class="h">274</text><text x="29.058" y="10.354" class="h">[--------------------------------------------------------------]</text><text x="96.192" y="10.354" class="h">1</text><text x="98.196" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">3</text><text x="23.046" y="12.525" class="h">/</text><text x="25.05" y="12.525" class="h">114</text><text x="29.058" y="12.525" class="h">[=>------------------------------------------------------------]</text><text x="96.192" y="12.525" class="h">3</text><text x="98.196" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">4</text><text x="23.046" y="14.696" class="h">/</text><text x="25.05" y="14.696" class="h">114</text><text x="29.058" y="14.696" class="h">[=>------------------------------------------------------------]</text><text x="96.192" y="14.696" class="h">4</text><text x="98.196" y="14.696" class="h">%</text></svg><svg x="2346"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">6</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[>-------------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">2</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">8</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[=>------------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">3</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="22.044" y="12.525" class="h">9</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="12.525" class="h">8</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">12</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[======>-------------------------------------------------------]</text><text x="96.192" y="14.696" class="h">11</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2448"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">9</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[=>------------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">3</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">12</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[==>-----------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">4</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">12</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[======>-------------------------------------------------------]</text><text x="96.192" y="12.525" class="h">11</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">24</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[============>-------------------------------------------------]</text><text x="96.192" y="14.696" class="h">21</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2550"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">11</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[==>-----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">4</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">16</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[===>----------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">6</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">18</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[=========>----------------------------------------------------]</text><text x="96.192" y="12.525" class="h">16</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">36</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[===================>------------------------------------------]</text><text x="96.192" y="14.696" class="h">32</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2652"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">13</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[==>-----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">5</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">22</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">8</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">27</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[==============>-----------------------------------------------]</text><text x="96.192" y="12.525" class="h">24</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">40</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[=====================>----------------------------------------]</text><text x="96.192" y="14.696" class="h">35</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2754"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">15</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[==>-----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">6</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">24</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">9</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">30</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[===============>----------------------------------------------]</text><text x="96.192" y="12.525" class="h">26</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">48</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[=========================>------------------------------------]</text><text x="96.192" y="14.696" class="h">42</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2856"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">16</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===>----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">6</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">30</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[======>-------------------------------------------------------]</text><text x="96.192" y="10.354" class="h">11</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">39</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[====================>-----------------------------------------]</text><text x="96.192" y="12.525" class="h">34</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">56</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[=============================>--------------------------------]</text><text x="96.192" y="14.696" class="h">49</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="2958"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">18</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===>----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">7</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">34</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[=======>------------------------------------------------------]</text><text x="96.192" y="10.354" class="h">12</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">42</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[======================>---------------------------------------]</text><text x="96.192" y="12.525" class="h">37</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">64</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[==================================>---------------------------]</text><text x="96.192" y="14.696" class="h">56</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3060"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">19</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===>----------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">7</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">40</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[========>-----------------------------------------------------]</text><text x="96.192" y="10.354" class="h">15</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">45</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[=======================>--------------------------------------]</text><text x="96.192" y="12.525" class="h">39</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">68</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[====================================>-------------------------]</text><text x="96.192" y="14.696" class="h">60</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3162"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">21</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">8</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">44</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[=========>----------------------------------------------------]</text><text x="96.192" y="10.354" class="h">16</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">54</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[============================>---------------------------------]</text><text x="96.192" y="12.525" class="h">47</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">76</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[========================================>---------------------]</text><text x="96.192" y="14.696" class="h">67</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3264"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">25</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[=====>--------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">9</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">52</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[===========>--------------------------------------------------]</text><text x="96.192" y="10.354" class="h">19</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">60</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[================================>-----------------------------]</text><text x="96.192" y="12.525" class="h">53</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">80</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[===========================================>------------------]</text><text x="96.192" y="14.696" class="h">70</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3366"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">27</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[=====>--------------------------------------------------------]</text><text x="96.192" y="8.183" class="h">10</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">54</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[===========>--------------------------------------------------]</text><text x="96.192" y="10.354" class="h">20</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">63</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[=================================>----------------------------]</text><text x="96.192" y="12.525" class="h">55</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">88</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[===============================================>--------------]</text><text x="96.192" y="14.696" class="h">77</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3468"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">29</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[======>-------------------------------------------------------]</text><text x="96.192" y="8.183" class="h">11</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">58</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[============>-------------------------------------------------]</text><text x="96.192" y="10.354" class="h">21</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">69</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[=====================================>------------------------]</text><text x="96.192" y="12.525" class="h">61</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">92</text><text x="24.048" y="14.696" class="h">/</text><text x="26.052" y="14.696" class="h">114</text><text x="30.06" y="14.696" class="h">[=================================================>------------]</text><text x="96.192" y="14.696" class="h">81</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3570"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">30</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======>-------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">11</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">60</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=============>------------------------------------------------]</text><text x="97.194" y="10.354" class="h">22</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="22.044" y="12.525" class="h">75</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[========================================>---------------------]</text><text x="97.194" y="12.525" class="h">66</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">100</text><text x="25.05" y="14.696" class="h">/</text><text x="27.054" y="14.696" class="h">114</text><text x="31.062" y="14.696" class="h">[=====================================================>--------]</text><text x="97.194" y="14.696" class="h">88</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="3672"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">32</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======>-------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">12</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">66</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==============>-----------------------------------------------]</text><text x="97.194" y="10.354" class="h">24</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="22.044" y="12.525" class="h">78</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[=========================================>--------------------]</text><text x="97.194" y="12.525" class="h">68</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">108</text><text x="25.05" y="14.696" class="h">/</text><text x="27.054" y="14.696" class="h">114</text><text x="31.062" y="14.696" class="h">[==========================================================>---]</text><text x="97.194" y="14.696" class="h">95</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="3774"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">34</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======>------------------------------------------------------]</text><text x="97.194" y="8.183" class="h">13</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">70</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="10.354" class="h">26</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="22.044" y="12.525" class="h">84</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[=============================================>----------------]</text><text x="97.194" y="12.525" class="h">74</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">downloading</text><text x="21.042" y="14.696" class="h">114</text><text x="25.05" y="14.696" class="h">/</text><text x="27.054" y="14.696" class="h">114</text><text x="31.062" y="14.696" class="h">[==============================================================]</text><text x="96.192" y="14.696" class="h">100</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="3876"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">35</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[=======>------------------------------------------------------]</text><text x="96.192" y="8.183" class="h">13</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">74</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[================>---------------------------------------------]</text><text x="96.192" y="10.354" class="h">27</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">90</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[================================================>-------------]</text><text x="96.192" y="12.525" class="h">79</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="24.048" y="14.696" class="h">00:00</text><text x="30.06" y="14.696" class="h">[--------------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">1</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="3978"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">37</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[========>-----------------------------------------------------]</text><text x="96.192" y="8.183" class="h">14</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">76</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[================>---------------------------------------------]</text><text x="96.192" y="10.354" class="h">28</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">96</text><text x="24.048" y="12.525" class="h">/</text><text x="26.052" y="12.525" class="h">114</text><text x="30.06" y="12.525" class="h">[===================================================>----------]</text><text x="96.192" y="12.525" class="h">84</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="24.048" y="14.696" class="h">00:00</text><text x="30.06" y="14.696" class="h">[=>------------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">2</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="4080"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">40</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========>-----------------------------------------------------]</text><text x="97.194" y="8.183" class="h">15</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">78</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=================>--------------------------------------------]</text><text x="97.194" y="10.354" class="h">28</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">102</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[======================================================>-------]</text><text x="97.194" y="12.525" class="h">89</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[=>------------------------------------------------------------]</text><text x="98.196" y="14.696" class="h">4</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="4182"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">42</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========>----------------------------------------------------]</text><text x="97.194" y="8.183" class="h">16</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">82</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="10.354" class="h">30</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">108</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[==========================================================>---]</text><text x="97.194" y="12.525" class="h">95</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[==>-----------------------------------------------------------]</text><text x="98.196" y="14.696" class="h">4</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="4284"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">44</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========>----------------------------------------------------]</text><text x="97.194" y="8.183" class="h">16</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="22.044" y="10.354" class="h">86</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="10.354" class="h">31</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">downloading</text><text x="21.042" y="12.525" class="h">114</text><text x="25.05" y="12.525" class="h">/</text><text x="27.054" y="12.525" class="h">114</text><text x="31.062" y="12.525" class="h">[==============================================================]</text><text x="96.192" y="12.525" class="h">100</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[==>-----------------------------------------------------------]</text><text x="98.196" y="14.696" class="h">6</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="4386"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">47</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[==========>---------------------------------------------------]</text><text x="96.192" y="8.183" class="h">18</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">88</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[===================>------------------------------------------]</text><text x="96.192" y="10.354" class="h">32</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="24.048" y="12.525" class="h">00:00</text><text x="30.06" y="12.525" class="h">[=>------------------------------------------------------------]</text><text x="97.194" y="12.525" class="h">3</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="24.048" y="14.696" class="h">00:09</text><text x="30.06" y="14.696" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">7</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="4488"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">50</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===========>--------------------------------------------------]</text><text x="96.192" y="8.183" class="h">19</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">92</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[====================>-----------------------------------------]</text><text x="96.192" y="10.354" class="h">34</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="24.048" y="12.525" class="h">00:00</text><text x="30.06" y="12.525" class="h">[===>----------------------------------------------------------]</text><text x="97.194" y="12.525" class="h">6</text><text x="99.198" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="24.048" y="14.696" class="h">00:09</text><text x="30.06" y="14.696" class="h">[====>---------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">9</text><text x="99.198" y="14.696" class="h">%</text></svg><svg x="4590"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">52</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===========>--------------------------------------------------]</text><text x="96.192" y="8.183" class="h">19</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">96</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[=====================>----------------------------------------]</text><text x="96.192" y="10.354" class="h">35</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="24.048" y="12.525" class="h">00:00</text><text x="30.06" y="12.525" class="h">[=====>--------------------------------------------------------]</text><text x="97.194" y="12.525" class="h">9</text><text x="99.198" y="12.525" class="h">%</text><use xlink:href="#7" y="13.026"/></svg><svg x="4692"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">54</text><text x="24.048" y="8.183" class="h">/</text><text x="26.052" y="8.183" class="h">268</text><text x="30.06" y="8.183" class="h">[===========>--------------------------------------------------]</text><text x="96.192" y="8.183" class="h">20</text><text x="99.198" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">98</text><text x="24.048" y="10.354" class="h">/</text><text x="26.052" y="10.354" class="h">274</text><text x="30.06" y="10.354" class="h">[=====================>----------------------------------------]</text><text x="96.192" y="10.354" class="h">36</text><text x="99.198" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="24.048" y="12.525" class="h">00:03</text><text x="30.06" y="12.525" class="h">[========>-----------------------------------------------------]</text><text x="96.192" y="12.525" class="h">14</text><text x="99.198" y="12.525" class="h">%</text><use xlink:href="#7" y="13.026"/></svg><svg x="4794"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">56</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============>-------------------------------------------------]</text><text x="97.194" y="8.183" class="h">21</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">102</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[======================>---------------------------------------]</text><text x="97.194" y="10.354" class="h">37</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:03</text><text x="31.062" y="12.525" class="h">[=========>----------------------------------------------------]</text><text x="97.194" y="12.525" class="h">17</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[=======>------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">12</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="4896"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">57</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============>-------------------------------------------------]</text><text x="97.194" y="8.183" class="h">21</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">106</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=======================>--------------------------------------]</text><text x="97.194" y="10.354" class="h">39</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:03</text><text x="31.062" y="12.525" class="h">[===========>--------------------------------------------------]</text><text x="97.194" y="12.525" class="h">19</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[=======>------------------------------------------------------]</text><text x="97.194" y="14.696" class="h">14</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="4998"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">59</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=============>------------------------------------------------]</text><text x="97.194" y="8.183" class="h">22</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">114</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=========================>------------------------------------]</text><text x="97.194" y="10.354" class="h">42</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:03</text><text x="31.062" y="12.525" class="h">[=============>------------------------------------------------]</text><text x="97.194" y="12.525" class="h">23</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[========>-----------------------------------------------------]</text><text x="97.194" y="14.696" class="h">14</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5100"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">61</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=============>------------------------------------------------]</text><text x="97.194" y="8.183" class="h">23</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">120</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==========================>-----------------------------------]</text><text x="97.194" y="10.354" class="h">44</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:03</text><text x="31.062" y="12.525" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="12.525" class="h">25</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[=========>----------------------------------------------------]</text><text x="97.194" y="14.696" class="h">16</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5202"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">63</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============>-----------------------------------------------]</text><text x="97.194" y="8.183" class="h">24</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">126</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[============================>---------------------------------]</text><text x="97.194" y="10.354" class="h">46</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[=================>--------------------------------------------]</text><text x="97.194" y="12.525" class="h">29</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[=========>----------------------------------------------------]</text><text x="97.194" y="14.696" class="h">17</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5304"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">67</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="8.183" class="h">25</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">130</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[============================>---------------------------------]</text><text x="97.194" y="10.354" class="h">47</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="12.525" class="h">31</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[==========>---------------------------------------------------]</text><text x="97.194" y="14.696" class="h">17</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5406"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">68</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="8.183" class="h">25</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">132</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=============================>--------------------------------]</text><text x="97.194" y="10.354" class="h">48</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="12.525" class="h">36</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[===========>--------------------------------------------------]</text><text x="97.194" y="14.696" class="h">19</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5508"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">69</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="8.183" class="h">26</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">136</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==============================>-------------------------------]</text><text x="97.194" y="10.354" class="h">50</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[======================>---------------------------------------]</text><text x="97.194" y="12.525" class="h">37</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:08</text><text x="31.062" y="14.696" class="h">[============>-------------------------------------------------]</text><text x="97.194" y="14.696" class="h">20</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5610"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">71</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="8.183" class="h">26</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">140</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===============================>------------------------------]</text><text x="97.194" y="10.354" class="h">51</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[========================>-------------------------------------]</text><text x="97.194" y="12.525" class="h">41</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:07</text><text x="31.062" y="14.696" class="h">[============>-------------------------------------------------]</text><text x="97.194" y="14.696" class="h">22</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="5712"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">73</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================>---------------------------------------------]</text><text x="97.194" y="8.183" class="h">27</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">144</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[================================>-----------------------------]</text><text x="97.194" y="10.354" class="h">53</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[=========================>------------------------------------]</text><text x="97.194" y="12.525" class="h">42</text><text x="100.2" y="12.525" class="h">%</text><use xlink:href="#8" y="13.026"/></svg><svg x="5814"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">75</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================>---------------------------------------------]</text><text x="97.194" y="8.183" class="h">28</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">150</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=================================>----------------------------]</text><text x="97.194" y="10.354" class="h">55</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[===========================>----------------------------------]</text><text x="97.194" y="12.525" class="h">45</text><text x="100.2" y="12.525" class="h">%</text><use xlink:href="#8" y="13.026"/></svg><svg x="5916"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">78</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=================>--------------------------------------------]</text><text x="97.194" y="8.183" class="h">29</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">154</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==================================>---------------------------]</text><text x="97.194" y="10.354" class="h">56</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[============================>---------------------------------]</text><text x="97.194" y="12.525" class="h">47</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:07</text><text x="31.062" y="14.696" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="14.696" class="h">26</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6018"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">80</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="8.183" class="h">30</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">158</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===================================>--------------------------]</text><text x="97.194" y="10.354" class="h">58</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[==============================>-------------------------------]</text><text x="97.194" y="12.525" class="h">50</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:07</text><text x="31.062" y="14.696" class="h">[================>---------------------------------------------]</text><text x="97.194" y="14.696" class="h">27</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6120"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">82</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="8.183" class="h">31</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">162</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[====================================>-------------------------]</text><text x="97.194" y="10.354" class="h">59</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:02</text><text x="31.062" y="12.525" class="h">[===============================>------------------------------]</text><text x="97.194" y="12.525" class="h">51</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:06</text><text x="31.062" y="14.696" class="h">[=================>--------------------------------------------]</text><text x="97.194" y="14.696" class="h">29</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6222"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">87</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===================>------------------------------------------]</text><text x="97.194" y="8.183" class="h">32</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">164</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[====================================>-------------------------]</text><text x="97.194" y="10.354" class="h">60</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[==================================>---------------------------]</text><text x="97.194" y="12.525" class="h">56</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:06</text><text x="31.062" y="14.696" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="14.696" class="h">31</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6324"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">90</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================>-----------------------------------------]</text><text x="97.194" y="8.183" class="h">34</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">166</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=====================================>------------------------]</text><text x="97.194" y="10.354" class="h">61</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[====================================>-------------------------]</text><text x="97.194" y="12.525" class="h">60</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:06</text><text x="31.062" y="14.696" class="h">[===================>------------------------------------------]</text><text x="97.194" y="14.696" class="h">32</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6426"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">92</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================>-----------------------------------------]</text><text x="97.194" y="8.183" class="h">34</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">172</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[======================================>-----------------------]</text><text x="97.194" y="10.354" class="h">63</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[======================================>-----------------------]</text><text x="97.194" y="12.525" class="h">62</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[====================>-----------------------------------------]</text><text x="97.194" y="14.696" class="h">34</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6528"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">93</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="8.183" class="h">35</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">176</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=======================================>----------------------]</text><text x="97.194" y="10.354" class="h">64</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[=======================================>----------------------]</text><text x="97.194" y="12.525" class="h">65</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="14.696" class="h">35</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6630"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">96</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="8.183" class="h">36</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">178</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=======================================>----------------------]</text><text x="97.194" y="10.354" class="h">65</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[==========================================>-------------------]</text><text x="97.194" y="12.525" class="h">69</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="14.696" class="h">36</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6732"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="22.044" y="8.183" class="h">99</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======================>---------------------------------------]</text><text x="97.194" y="8.183" class="h">37</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">182</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[========================================>---------------------]</text><text x="97.194" y="10.354" class="h">66</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:01</text><text x="31.062" y="12.525" class="h">[===========================================>------------------]</text><text x="97.194" y="12.525" class="h">71</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[======================>---------------------------------------]</text><text x="97.194" y="14.696" class="h">37</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6834"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">102</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================>--------------------------------------]</text><text x="97.194" y="8.183" class="h">38</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">186</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=========================================>--------------------]</text><text x="97.194" y="10.354" class="h">68</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[==============================================>---------------]</text><text x="97.194" y="12.525" class="h">75</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:06</text><text x="31.062" y="14.696" class="h">[======================>---------------------------------------]</text><text x="97.194" y="14.696" class="h">37</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="6936"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">105</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================>--------------------------------------]</text><text x="97.194" y="8.183" class="h">39</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">188</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==========================================>-------------------]</text><text x="97.194" y="10.354" class="h">69</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[===============================================>--------------]</text><text x="97.194" y="12.525" class="h">78</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:06</text><text x="31.062" y="14.696" class="h">[=======================>--------------------------------------]</text><text x="97.194" y="14.696" class="h">39</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7038"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">107</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========================>-------------------------------------]</text><text x="97.194" y="8.183" class="h">40</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">192</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==========================================>-------------------]</text><text x="97.194" y="10.354" class="h">70</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[=================================================>------------]</text><text x="97.194" y="12.525" class="h">80</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[========================>-------------------------------------]</text><text x="97.194" y="14.696" class="h">40</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7140"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">109</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========================>-------------------------------------]</text><text x="97.194" y="8.183" class="h">41</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">194</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===========================================>------------------]</text><text x="97.194" y="10.354" class="h">71</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[==================================================>-----------]</text><text x="97.194" y="12.525" class="h">82</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[========================>-------------------------------------]</text><text x="97.194" y="14.696" class="h">41</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7242"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">112</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================>------------------------------------]</text><text x="97.194" y="8.183" class="h">42</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">198</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[============================================>-----------------]</text><text x="97.194" y="10.354" class="h">72</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[===================================================>----------]</text><text x="97.194" y="12.525" class="h">84</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[=========================>------------------------------------]</text><text x="97.194" y="14.696" class="h">42</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7344"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">114</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================>------------------------------------]</text><text x="97.194" y="8.183" class="h">43</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">202</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=============================================>----------------]</text><text x="97.194" y="10.354" class="h">74</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[=====================================================>--------]</text><text x="97.194" y="12.525" class="h">88</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:05</text><text x="31.062" y="14.696" class="h">[==========================>-----------------------------------]</text><text x="97.194" y="14.696" class="h">44</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7446"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">116</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================>-----------------------------------]</text><text x="97.194" y="8.183" class="h">43</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">206</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==============================================>---------------]</text><text x="97.194" y="10.354" class="h">75</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[========================================================>-----]</text><text x="97.194" y="12.525" class="h">92</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[===========================>----------------------------------]</text><text x="97.194" y="14.696" class="h">46</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7548"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">119</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================>----------------------------------]</text><text x="97.194" y="8.183" class="h">44</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">210</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===============================================>--------------]</text><text x="97.194" y="10.354" class="h">77</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[=========================================================>----]</text><text x="97.194" y="12.525" class="h">94</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[=============================>--------------------------------]</text><text x="97.194" y="14.696" class="h">48</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7650"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">122</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================>----------------------------------]</text><text x="97.194" y="8.183" class="h">46</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">212</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===============================================>--------------]</text><text x="97.194" y="10.354" class="h">77</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[===========================================================>--]</text><text x="97.194" y="12.525" class="h">97</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[=============================>--------------------------------]</text><text x="97.194" y="14.696" class="h">49</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7752"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">124</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================>---------------------------------]</text><text x="97.194" y="8.183" class="h">46</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">214</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===============================================>--------------]</text><text x="97.194" y="10.354" class="h">78</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[==============================================================]</text><text x="97.194" y="12.525" class="h">99</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[==============================>-------------------------------]</text><text x="97.194" y="14.696" class="h">50</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7854"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">126</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================>---------------------------------]</text><text x="97.194" y="8.183" class="h">47</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">218</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[================================================>-------------]</text><text x="97.194" y="10.354" class="h">80</text><text x="100.2" y="10.354" class="h">%</text><text y="12.525" class="h">Task#02:</text><text x="9.018" y="12.525" class="h">installing</text><text x="25.05" y="12.525" class="h">00:00</text><text x="31.062" y="12.525" class="h">[==============================================================]</text><text x="96.192" y="12.525" class="h">100</text><text x="100.2" y="12.525" class="h">%</text><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[===============================>------------------------------]</text><text x="97.194" y="14.696" class="h">52</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="7956"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">127</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================>---------------------------------]</text><text x="97.194" y="8.183" class="h">47</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">220</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=================================================>------------]</text><text x="97.194" y="10.354" class="h">80</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:04</text><text x="31.062" y="14.696" class="h">[================================>-----------------------------]</text><text x="97.194" y="14.696" class="h">53</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8058"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">130</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=============================>--------------------------------]</text><text x="97.194" y="8.183" class="h">49</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">224</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==================================================>-----------]</text><text x="97.194" y="10.354" class="h">82</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[=================================>----------------------------]</text><text x="97.194" y="14.696" class="h">55</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8160"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">132</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================>-------------------------------]</text><text x="97.194" y="8.183" class="h">49</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">230</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[===================================================>----------]</text><text x="97.194" y="10.354" class="h">84</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[==================================>---------------------------]</text><text x="97.194" y="14.696" class="h">57</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8262"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">134</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================>-------------------------------]</text><text x="97.194" y="8.183" class="h">50</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">234</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[====================================================>---------]</text><text x="97.194" y="10.354" class="h">85</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[====================================>-------------------------]</text><text x="97.194" y="14.696" class="h">59</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8364"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">136</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================>-------------------------------]</text><text x="97.194" y="8.183" class="h">51</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">238</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=====================================================>--------]</text><text x="97.194" y="10.354" class="h">87</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[====================================>-------------------------]</text><text x="97.194" y="14.696" class="h">60</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8466"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">139</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============================>------------------------------]</text><text x="97.194" y="8.183" class="h">52</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">242</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[======================================================>-------]</text><text x="97.194" y="10.354" class="h">88</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[=====================================>------------------------]</text><text x="97.194" y="14.696" class="h">61</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8568"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">141</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================================>-----------------------------]</text><text x="97.194" y="8.183" class="h">53</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">246</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=======================================================>------]</text><text x="97.194" y="10.354" class="h">90</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:03</text><text x="31.062" y="14.696" class="h">[======================================>-----------------------]</text><text x="97.194" y="14.696" class="h">63</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8670"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">143</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================================>-----------------------------]</text><text x="97.194" y="8.183" class="h">53</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">254</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[========================================================>-----]</text><text x="97.194" y="10.354" class="h">93</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[=======================================>----------------------]</text><text x="97.194" y="14.696" class="h">65</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8772"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">147</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=================================>----------------------------]</text><text x="97.194" y="8.183" class="h">55</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">258</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[=========================================================>----]</text><text x="97.194" y="10.354" class="h">94</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[========================================>---------------------]</text><text x="97.194" y="14.696" class="h">66</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8874"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">149</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=================================>----------------------------]</text><text x="97.194" y="8.183" class="h">56</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">262</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==========================================================>---]</text><text x="97.194" y="10.354" class="h">96</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[=========================================>--------------------]</text><text x="97.194" y="14.696" class="h">68</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="8976"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">150</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================================>---------------------------]</text><text x="97.194" y="8.183" class="h">56</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">268</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[============================================================>-]</text><text x="97.194" y="10.354" class="h">98</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[==========================================>-------------------]</text><text x="97.194" y="14.696" class="h">69</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9078"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">152</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================================>---------------------------]</text><text x="97.194" y="8.183" class="h">57</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">272</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==============================================================]</text><text x="97.194" y="10.354" class="h">99</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[===========================================>------------------]</text><text x="97.194" y="14.696" class="h">70</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9180"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">156</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===================================>--------------------------]</text><text x="97.194" y="8.183" class="h">58</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">downloading</text><text x="21.042" y="10.354" class="h">274</text><text x="25.05" y="10.354" class="h">/</text><text x="27.054" y="10.354" class="h">274</text><text x="31.062" y="10.354" class="h">[==============================================================]</text><text x="96.192" y="10.354" class="h">100</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[===========================================>------------------]</text><text x="97.194" y="14.696" class="h">71</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9282"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">160</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================================>-------------------------]</text><text x="97.194" y="8.183" class="h">60</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[==>-----------------------------------------------------------]</text><text x="98.196" y="10.354" class="h">5</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[============================================>-----------------]</text><text x="97.194" y="14.696" class="h">73</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9384"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">162</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================================>-------------------------]</text><text x="97.194" y="8.183" class="h">60</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[====>---------------------------------------------------------]</text><text x="98.196" y="10.354" class="h">8</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[=============================================>----------------]</text><text x="97.194" y="14.696" class="h">74</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9486"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">163</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================================>------------------------]</text><text x="97.194" y="8.183" class="h">61</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[=======>------------------------------------------------------]</text><text x="97.194" y="10.354" class="h">14</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[=============================================>----------------]</text><text x="97.194" y="14.696" class="h">75</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9588"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">168</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======================================>-----------------------]</text><text x="97.194" y="8.183" class="h">63</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[==========>---------------------------------------------------]</text><text x="97.194" y="10.354" class="h">17</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[==============================================>---------------]</text><text x="97.194" y="14.696" class="h">76</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9690"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">170</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======================================>-----------------------]</text><text x="97.194" y="8.183" class="h">63</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:02</text><text x="31.062" y="10.354" class="h">[============>-------------------------------------------------]</text><text x="97.194" y="10.354" class="h">20</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:02</text><text x="31.062" y="14.696" class="h">[===============================================>--------------]</text><text x="97.194" y="14.696" class="h">77</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9792"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">173</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================================>----------------------]</text><text x="97.194" y="8.183" class="h">65</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:02</text><text x="31.062" y="10.354" class="h">[===============>----------------------------------------------]</text><text x="97.194" y="10.354" class="h">25</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[================================================>-------------]</text><text x="97.194" y="14.696" class="h">78</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9894"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">176</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========================================>---------------------]</text><text x="97.194" y="8.183" class="h">66</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:02</text><text x="31.062" y="10.354" class="h">[==================>-------------------------------------------]</text><text x="97.194" y="10.354" class="h">31</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[================================================>-------------]</text><text x="97.194" y="14.696" class="h">79</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="9996"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">178</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========================================>---------------------]</text><text x="97.194" y="8.183" class="h">66</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[=====================>----------------------------------------]</text><text x="97.194" y="10.354" class="h">36</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[=================================================>------------]</text><text x="97.194" y="14.696" class="h">81</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10098"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">180</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================================>--------------------]</text><text x="97.194" y="8.183" class="h">67</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[======================>---------------------------------------]</text><text x="97.194" y="10.354" class="h">37</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[==================================================>-----------]</text><text x="97.194" y="14.696" class="h">83</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10200"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">182</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================================>--------------------]</text><text x="97.194" y="8.183" class="h">68</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[========================>-------------------------------------]</text><text x="97.194" y="10.354" class="h">41</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[===================================================>----------]</text><text x="97.194" y="14.696" class="h">83</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10302"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">185</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================================>-------------------]</text><text x="97.194" y="8.183" class="h">69</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[=========================>------------------------------------]</text><text x="97.194" y="10.354" class="h">42</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[===================================================>----------]</text><text x="97.194" y="14.696" class="h">84</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10404"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">188</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================================>-------------------]</text><text x="97.194" y="8.183" class="h">70</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[===========================>----------------------------------]</text><text x="97.194" y="10.354" class="h">46</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[====================================================>---------]</text><text x="97.194" y="14.696" class="h">85</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10506"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">190</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================================>------------------]</text><text x="97.194" y="8.183" class="h">71</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[=============================>--------------------------------]</text><text x="97.194" y="10.354" class="h">49</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[=====================================================>--------]</text><text x="97.194" y="14.696" class="h">87</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10608"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">192</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================================>------------------]</text><text x="97.194" y="8.183" class="h">72</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[================================>-----------------------------]</text><text x="97.194" y="10.354" class="h">53</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:01</text><text x="31.062" y="14.696" class="h">[======================================================>-------]</text><text x="97.194" y="14.696" class="h">88</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10710"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">194</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================================>-----------------]</text><text x="97.194" y="8.183" class="h">72</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[=================================>----------------------------]</text><text x="97.194" y="10.354" class="h">54</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[======================================================>-------]</text><text x="97.194" y="14.696" class="h">89</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10812"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">197</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=============================================>----------------]</text><text x="97.194" y="8.183" class="h">74</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[===================================>--------------------------]</text><text x="97.194" y="10.354" class="h">58</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[=======================================================>------]</text><text x="97.194" y="14.696" class="h">91</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="10914"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">198</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=============================================>----------------]</text><text x="97.194" y="8.183" class="h">74</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[=====================================>------------------------]</text><text x="97.194" y="10.354" class="h">61</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[========================================================>-----]</text><text x="97.194" y="14.696" class="h">93</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11016"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">202</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================================>---------------]</text><text x="97.194" y="8.183" class="h">75</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[======================================>-----------------------]</text><text x="97.194" y="10.354" class="h">63</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[=========================================================>----]</text><text x="97.194" y="14.696" class="h">93</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11118"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">204</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================================>---------------]</text><text x="97.194" y="8.183" class="h">76</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[========================================>---------------------]</text><text x="97.194" y="10.354" class="h">66</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[==========================================================>---]</text><text x="97.194" y="14.696" class="h">94</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11220"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">206</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============================================>--------------]</text><text x="97.194" y="8.183" class="h">77</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:01</text><text x="31.062" y="10.354" class="h">[==========================================>-------------------]</text><text x="97.194" y="10.354" class="h">69</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[===========================================================>--]</text><text x="97.194" y="14.696" class="h">97</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11322"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">209</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===============================================>--------------]</text><text x="97.194" y="8.183" class="h">78</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[============================================>-----------------]</text><text x="97.194" y="10.354" class="h">73</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[===========================================================>--]</text><text x="97.194" y="14.696" class="h">98</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11424"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">212</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================================================>-------------]</text><text x="97.194" y="8.183" class="h">79</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[==============================================>---------------]</text><text x="97.194" y="10.354" class="h">76</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[============================================================>-]</text><text x="97.194" y="14.696" class="h">99</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11526"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">213</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[================================================>-------------]</text><text x="97.194" y="8.183" class="h">79</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[================================================>-------------]</text><text x="97.194" y="10.354" class="h">80</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><text y="14.696" class="h">Task#03:</text><text x="9.018" y="14.696" class="h">installing</text><text x="25.05" y="14.696" class="h">00:00</text><text x="31.062" y="14.696" class="h">[==============================================================]</text><text x="96.192" y="14.696" class="h">100</text><text x="100.2" y="14.696" class="h">%</text></svg><svg x="11628"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">215</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=================================================>------------]</text><text x="97.194" y="8.183" class="h">80</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[=================================================>------------]</text><text x="97.194" y="10.354" class="h">81</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="11730"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">217</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=================================================>------------]</text><text x="97.194" y="8.183" class="h">81</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[=====================================================>--------]</text><text x="97.194" y="10.354" class="h">86</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="11832"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">219</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================================================>-----------]</text><text x="97.194" y="8.183" class="h">82</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[======================================================>-------]</text><text x="97.194" y="10.354" class="h">88</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="11934"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">220</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================================================>-----------]</text><text x="97.194" y="8.183" class="h">82</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[========================================================>-----]</text><text x="97.194" y="10.354" class="h">92</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12036"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">221</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==================================================>-----------]</text><text x="97.194" y="8.183" class="h">82</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[=========================================================>----]</text><text x="97.194" y="10.354" class="h">93</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12138"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">225</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===================================================>----------]</text><text x="97.194" y="8.183" class="h">84</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[===========================================================>--]</text><text x="97.194" y="10.354" class="h">97</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12240"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">227</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================================================>---------]</text><text x="97.194" y="8.183" class="h">85</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[============================================================>-]</text><text x="97.194" y="10.354" class="h">98</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12342"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">229</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================================================>---------]</text><text x="97.194" y="8.183" class="h">85</text><text x="100.2" y="8.183" class="h">%</text><text y="10.354" class="h">Task#01:</text><text x="9.018" y="10.354" class="h">installing</text><text x="25.05" y="10.354" class="h">00:00</text><text x="31.062" y="10.354" class="h">[==============================================================]</text><text x="96.192" y="10.354" class="h">100</text><text x="100.2" y="10.354" class="h">%</text><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12444"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">230</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[====================================================>---------]</text><text x="97.194" y="8.183" class="h">86</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12546"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">232</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================================================>--------]</text><text x="97.194" y="8.183" class="h">87</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12648"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">233</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================================================>--------]</text><text x="97.194" y="8.183" class="h">87</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12750"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">235</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=====================================================>--------]</text><text x="97.194" y="8.183" class="h">88</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12852"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">236</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======================================================>-------]</text><text x="97.194" y="8.183" class="h">88</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="12954"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">237</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[======================================================>-------]</text><text x="97.194" y="8.183" class="h">88</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13056"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">240</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================================================>------]</text><text x="97.194" y="8.183" class="h">90</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13158"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">241</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================================================>------]</text><text x="97.194" y="8.183" class="h">90</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13260"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">244</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=======================================================>------]</text><text x="97.194" y="8.183" class="h">91</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13362"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">246</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[========================================================>-----]</text><text x="97.194" y="8.183" class="h">92</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13464"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">249</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================================================>----]</text><text x="97.194" y="8.183" class="h">93</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13566"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">251</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[=========================================================>----]</text><text x="97.194" y="8.183" class="h">94</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13668"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">253</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================================================>---]</text><text x="97.194" y="8.183" class="h">94</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13770"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">256</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================================================>---]</text><text x="97.194" y="8.183" class="h">96</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13872"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">257</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==========================================================>---]</text><text x="97.194" y="8.183" class="h">96</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="13974"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">259</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================================================>--]</text><text x="97.194" y="8.183" class="h">97</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14076"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">261</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[===========================================================>--]</text><text x="97.194" y="8.183" class="h">97</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14178"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">262</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================================================>-]</text><text x="97.194" y="8.183" class="h">98</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14280"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">263</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[============================================================>-]</text><text x="97.194" y="8.183" class="h">98</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14382"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">266</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================================================]</text><text x="97.194" y="8.183" class="h">99</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14484"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">downloading</text><text x="21.042" y="8.183" class="h">268</text><text x="25.05" y="8.183" class="h">/</text><text x="27.054" y="8.183" class="h">268</text><text x="31.062" y="8.183" class="h">[==============================================================]</text><text x="96.192" y="8.183" class="h">100</text><text x="100.2" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14586"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=>------------------------------------------------------------]</text><text x="93.186" y="8.183" class="h">3</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14688"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[======>-------------------------------------------------------]</text><text x="92.184" y="8.183" class="h">12</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14790"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[========>-----------------------------------------------------]</text><text x="92.184" y="8.183" class="h">14</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14892"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[============>-------------------------------------------------]</text><text x="92.184" y="8.183" class="h">20</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="14994"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=================>--------------------------------------------]</text><text x="92.184" y="8.183" class="h">29</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15096"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:01</text><text x="26.052" y="8.183" class="h">[===================>------------------------------------------]</text><text x="92.184" y="8.183" class="h">32</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15198"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:01</text><text x="26.052" y="8.183" class="h">[==========================>-----------------------------------]</text><text x="92.184" y="8.183" class="h">43</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15300"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:01</text><text x="26.052" y="8.183" class="h">[==============================>-------------------------------]</text><text x="92.184" y="8.183" class="h">49</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15402"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=================================>----------------------------]</text><text x="92.184" y="8.183" class="h">55</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15504"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=====================================>------------------------]</text><text x="92.184" y="8.183" class="h">61</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15606"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[========================================>---------------------]</text><text x="92.184" y="8.183" class="h">67</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15708"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[============================================>-----------------]</text><text x="92.184" y="8.183" class="h">72</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15810"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=================================================>------------]</text><text x="92.184" y="8.183" class="h">81</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="15912"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=====================================================>--------]</text><text x="92.184" y="8.183" class="h">87</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16014"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[=========================================================>----]</text><text x="92.184" y="8.183" class="h">93</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16116"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[============================================================>-]</text><text x="92.184" y="8.183" class="h">99</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16218"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><text y="8.183" class="h">Task#00:</text><text x="9.018" y="8.183" class="h">installing</text><text x="20.04" y="8.183" class="h">00:00</text><text x="26.052" y="8.183" class="h">[==============================================================]</text><text x="91.182" y="8.183" class="h">100</text><text x="95.19" y="8.183" class="h">%</text><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16320"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#12" y="6.513"/><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16422"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#12" y="6.513"/><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16524"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="17.343"/><use xlink:href="#3" y="2.171"/><use xlink:href="#6" y="4.342"/><use xlink:href="#12" y="6.513"/><use xlink:href="#11" y="8.684"/><use xlink:href="#9" y="10.855"/><use xlink:href="#10" y="13.026"/></svg><svg x="16626"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="17.343"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#11" y="6.513"/><use xlink:href="#9" y="8.684"/><use xlink:href="#10" y="10.855"/><use xlink:href="#13" y="15.197"/><use xlink:href="#2" y="17.368"/></svg><svg x="16728"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="17.343"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#11" y="6.513"/><use xlink:href="#9" y="8.684"/><use xlink:href="#10" y="10.855"/><use xlink:href="#13" y="15.197"/><use xlink:href="#2" y="17.368"/></svg><svg x="16830"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="17.343"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#11" y="6.513"/><use xlink:href="#9" y="8.684"/><use xlink:href="#10" y="10.855"/><use xlink:href="#13" y="15.197"/><use xlink:href="#2" y="17.368"/></svg><svg x="16932"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="17.343"/><use xlink:href="#3"/><use xlink:href="#6" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#11" y="6.513"/><use xlink:href="#9" y="8.684"/><use xlink:href="#10" y="10.855"/><use xlink:href="#13" y="15.197"/><use xlink:href="#2" y="17.368"/></svg><svg x="17034"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="17.343"/><use xlink:href="#6"/><use xlink:href="#12" y="2.171"/><use xlink:href="#11" y="4.342"/><use xlink:href="#9" y="6.513"/><use xlink:href="#10" y="8.684"/><use xlink:href="#13" y="13.026"/><use xlink:href="#2" y="15.197"/></svg></svg></g></g></svg></svg>⏎ |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "io" | |
| 5 | "log" | |
| 6 | "net/http" | |
| 7 | "os" | |
| 8 | "path/filepath" | |
| 9 | "sync" | |
| 10 | ||
| 11 | "github.com/vbauerster/mpb" | |
| 12 | "github.com/vbauerster/mpb/decor" | |
| 13 | ) | |
| 14 | ||
| 15 | func main() { | |
| 16 | log.SetOutput(os.Stderr) | |
| 17 | ||
| 18 | url1 := "https://homebrew.bintray.com/bottles/youtube-dl-2016.12.12.sierra.bottle.tar.gz" | |
| 19 | url2 := "https://homebrew.bintray.com/bottles/libtiff-4.0.7.sierra.bottle.tar.gz" | |
| 20 | ||
| 21 | var wg sync.WaitGroup | |
| 22 | p := mpb.New(mpb.WithWidth(64), mpb.WithWaitGroup(&wg)) | |
| 23 | ||
| 24 | for i, url := range [...]string{url1, url2} { | |
| 25 | wg.Add(1) | |
| 26 | name := fmt.Sprintf("url%d:", i+1) | |
| 27 | go download(&wg, p, name, url, i) | |
| 28 | } | |
| 29 | ||
| 30 | p.Wait() | |
| 31 | } | |
| 32 | ||
| 33 | func download(wg *sync.WaitGroup, p *mpb.Progress, name, url string, n int) { | |
| 34 | defer wg.Done() | |
| 35 | resp, err := http.Get(url) | |
| 36 | if err != nil { | |
| 37 | log.Printf("%s: %v", name, err) | |
| 38 | return | |
| 39 | } | |
| 40 | defer resp.Body.Close() | |
| 41 | ||
| 42 | if resp.StatusCode != http.StatusOK { | |
| 43 | err = fmt.Errorf("non-200 status: %s", resp.Status) | |
| 44 | log.Printf("%s: %v", name, err) | |
| 45 | return | |
| 46 | } | |
| 47 | ||
| 48 | size := resp.ContentLength | |
| 49 | ||
| 50 | // create dest | |
| 51 | destName := filepath.Base(url) | |
| 52 | dest, err := os.Create(destName) | |
| 53 | if err != nil { | |
| 54 | err = fmt.Errorf("Can't create %s: %v", destName, err) | |
| 55 | log.Printf("%s: %v", name, err) | |
| 56 | return | |
| 57 | } | |
| 58 | ||
| 59 | // create bar with appropriate decorators | |
| 60 | bar := p.AddBar(size, mpb.BarPriority(n), | |
| 61 | mpb.PrependDecorators( | |
| 62 | decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}), | |
| 63 | decor.CountersKibiByte("%6.1f / %6.1f", decor.WCSyncWidth), | |
| 64 | ), | |
| 65 | mpb.AppendDecorators( | |
| 66 | decor.EwmaETA(decor.ET_STYLE_HHMMSS, 1024*4, decor.WCSyncWidth), | |
| 67 | decor.AverageSpeed(decor.UnitKiB, "% .2f"), | |
| 68 | ), | |
| 69 | ) | |
| 70 | ||
| 71 | // create proxy reader | |
| 72 | reader := bar.ProxyReader(resp.Body) | |
| 73 | // and copy from reader | |
| 74 | _, err = io.Copy(dest, reader) | |
| 75 | ||
| 76 | if e := dest.Close(); err == nil { | |
| 77 | err = e | |
| 78 | } | |
| 79 | if err != nil { | |
| 80 | log.Printf("%s: %v", name, err) | |
| 81 | } | |
| 82 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "io" | |
| 5 | "net/http" | |
| 6 | "os" | |
| 7 | "path/filepath" | |
| 8 | "time" | |
| 9 | ||
| 10 | "github.com/vbauerster/mpb" | |
| 11 | "github.com/vbauerster/mpb/decor" | |
| 12 | ) | |
| 13 | ||
| 14 | func main() { | |
| 15 | url := "https://github.com/onivim/oni/releases/download/v0.3.4/Oni-0.3.4-amd64-linux.deb" | |
| 16 | ||
| 17 | resp, err := http.Get(url) | |
| 18 | if err != nil { | |
| 19 | panic(err) | |
| 20 | } | |
| 21 | defer resp.Body.Close() | |
| 22 | ||
| 23 | if resp.StatusCode != http.StatusOK { | |
| 24 | fmt.Printf("Server return non-200 status: %s\n", resp.Status) | |
| 25 | return | |
| 26 | } | |
| 27 | ||
| 28 | size := resp.ContentLength | |
| 29 | ||
| 30 | // create dest | |
| 31 | destName := filepath.Base(url) | |
| 32 | dest, err := os.Create(destName) | |
| 33 | if err != nil { | |
| 34 | fmt.Printf("Can't create %s: %v\n", destName, err) | |
| 35 | return | |
| 36 | } | |
| 37 | defer dest.Close() | |
| 38 | ||
| 39 | p := mpb.New( | |
| 40 | mpb.WithWidth(60), | |
| 41 | mpb.WithFormat("[=>-|"), | |
| 42 | mpb.WithRefreshRate(180*time.Millisecond), | |
| 43 | ) | |
| 44 | ||
| 45 | bar := p.AddBar(size, | |
| 46 | mpb.PrependDecorators( | |
| 47 | decor.CountersKibiByte("% 6.1f / % 6.1f"), | |
| 48 | ), | |
| 49 | mpb.AppendDecorators( | |
| 50 | decor.EwmaETA(decor.ET_STYLE_MMSS, float64(size)/2048), | |
| 51 | decor.Name(" ] "), | |
| 52 | decor.AverageSpeed(decor.UnitKiB, "% .2f"), | |
| 53 | ), | |
| 54 | ) | |
| 55 | ||
| 56 | // create proxy reader | |
| 57 | reader := bar.ProxyReader(resp.Body) | |
| 58 | ||
| 59 | // and copy from reader, ignoring errors | |
| 60 | io.Copy(dest, reader) | |
| 61 | ||
| 62 | p.Wait() | |
| 63 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "os" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | func main() { | |
| 13 | var wg sync.WaitGroup | |
| 14 | p := mpb.New(mpb.WithWaitGroup(&wg), mpb.WithDebugOutput(os.Stderr)) | |
| 15 | ||
| 16 | wantPanic := "Some really long panic panic panic panic panic panic panic, really it is very long" | |
| 17 | numBars := 3 | |
| 18 | wg.Add(numBars) | |
| 19 | ||
| 20 | for i := 0; i < numBars; i++ { | |
| 21 | name := fmt.Sprintf("b#%02d:", i) | |
| 22 | bar := p.AddBar(100, mpb.BarID(i), mpb.PrependDecorators(panicDecorator(name, wantPanic))) | |
| 23 | ||
| 24 | go func() { | |
| 25 | defer wg.Done() | |
| 26 | for i := 0; i < 100; i++ { | |
| 27 | time.Sleep(50 * time.Millisecond) | |
| 28 | bar.Increment() | |
| 29 | } | |
| 30 | }() | |
| 31 | } | |
| 32 | ||
| 33 | p.Wait() | |
| 34 | } | |
| 35 | ||
| 36 | func panicDecorator(name, panicMsg string) decor.Decorator { | |
| 37 | d := &decorator{ | |
| 38 | msg: name, | |
| 39 | panicMsg: panicMsg, | |
| 40 | } | |
| 41 | d.Init() | |
| 42 | return d | |
| 43 | } | |
| 44 | ||
| 45 | type decorator struct { | |
| 46 | decor.WC | |
| 47 | msg string | |
| 48 | panicMsg string | |
| 49 | } | |
| 50 | ||
| 51 | func (d *decorator) Decor(st *decor.Statistics) string { | |
| 52 | if st.ID == 1 && st.Current >= 42 { | |
| 53 | panic(d.panicMsg) | |
| 54 | } | |
| 55 | return d.FormatMsg(d.msg) | |
| 56 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math/rand" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | func init() { | |
| 13 | rand.Seed(time.Now().UnixNano()) | |
| 14 | } | |
| 15 | ||
| 16 | func main() { | |
| 17 | var wg sync.WaitGroup | |
| 18 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 19 | total := 100 | |
| 20 | numBars := 3 | |
| 21 | wg.Add(numBars) | |
| 22 | ||
| 23 | for i := 0; i < numBars; i++ { | |
| 24 | name := fmt.Sprintf("Bar#%d:", i) | |
| 25 | ||
| 26 | var bOption mpb.BarOption | |
| 27 | if i == 0 { | |
| 28 | bOption = mpb.BarRemoveOnComplete() | |
| 29 | } | |
| 30 | ||
| 31 | b := p.AddBar(int64(total), mpb.BarID(i), | |
| 32 | bOption, | |
| 33 | mpb.PrependDecorators( | |
| 34 | decor.Name(name), | |
| 35 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncSpace), | |
| 36 | ), | |
| 37 | mpb.AppendDecorators(decor.Percentage()), | |
| 38 | ) | |
| 39 | go func() { | |
| 40 | defer wg.Done() | |
| 41 | max := 100 * time.Millisecond | |
| 42 | for i := 0; i < total; i++ { | |
| 43 | start := time.Now() | |
| 44 | if b.ID() == 2 && i == 42 { | |
| 45 | p.Abort(b, true) | |
| 46 | return | |
| 47 | } | |
| 48 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 49 | // ewma based decorators require work duration measurement | |
| 50 | b.IncrBy(1, time.Since(start)) | |
| 51 | } | |
| 52 | }() | |
| 53 | } | |
| 54 | ||
| 55 | p.Wait() | |
| 56 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math/rand" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | func init() { | |
| 13 | rand.Seed(time.Now().UnixNano()) | |
| 14 | } | |
| 15 | ||
| 16 | func main() { | |
| 17 | var wg sync.WaitGroup | |
| 18 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 19 | total, numBars := 100, 3 | |
| 20 | wg.Add(numBars) | |
| 21 | ||
| 22 | for i := 0; i < numBars; i++ { | |
| 23 | name := fmt.Sprintf("Bar#%d:", i) | |
| 24 | bar := p.AddBar(int64(total), | |
| 25 | mpb.PrependDecorators( | |
| 26 | // simple name decorator | |
| 27 | decor.Name(name), | |
| 28 | // decor.DSyncWidth bit enables column width synchronization | |
| 29 | decor.Percentage(decor.WCSyncSpace), | |
| 30 | ), | |
| 31 | mpb.AppendDecorators( | |
| 32 | // replace ETA decorator with "done" message, OnComplete event | |
| 33 | decor.OnComplete( | |
| 34 | // ETA decorator with ewma age of 60 | |
| 35 | decor.EwmaETA(decor.ET_STYLE_GO, 60), "done", | |
| 36 | ), | |
| 37 | ), | |
| 38 | ) | |
| 39 | // simulating some work | |
| 40 | go func() { | |
| 41 | defer wg.Done() | |
| 42 | max := 100 * time.Millisecond | |
| 43 | for i := 0; i < total; i++ { | |
| 44 | start := time.Now() | |
| 45 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 46 | // ewma based decorators require work duration measurement | |
| 47 | bar.IncrBy(1, time.Since(start)) | |
| 48 | } | |
| 49 | }() | |
| 50 | } | |
| 51 | // wait for all bars to complete and flush | |
| 52 | p.Wait() | |
| 53 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "math/rand" | |
| 4 | "time" | |
| 5 | ||
| 6 | "github.com/vbauerster/mpb" | |
| 7 | "github.com/vbauerster/mpb/decor" | |
| 8 | ) | |
| 9 | ||
| 10 | func main() { | |
| 11 | p := mpb.New( | |
| 12 | // override default (80) width | |
| 13 | mpb.WithWidth(64), | |
| 14 | // override default "[=>-]" format | |
| 15 | mpb.WithFormat("╢▌▌░╟"), | |
| 16 | // override default 120ms refresh rate | |
| 17 | mpb.WithRefreshRate(180*time.Millisecond), | |
| 18 | ) | |
| 19 | ||
| 20 | total := 100 | |
| 21 | name := "Single Bar:" | |
| 22 | // adding a single bar | |
| 23 | bar := p.AddBar(int64(total), | |
| 24 | mpb.PrependDecorators( | |
| 25 | // display our name with one space on the right | |
| 26 | decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}), | |
| 27 | // replace ETA decorator with "done" message, OnComplete event | |
| 28 | decor.OnComplete( | |
| 29 | // ETA decorator with ewma age of 60, and width reservation of 4 | |
| 30 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WC{W: 4}), "done", | |
| 31 | ), | |
| 32 | ), | |
| 33 | mpb.AppendDecorators(decor.Percentage()), | |
| 34 | ) | |
| 35 | // simulating some work | |
| 36 | max := 100 * time.Millisecond | |
| 37 | for i := 0; i < total; i++ { | |
| 38 | start := time.Now() | |
| 39 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 40 | // ewma based decorators require work duration measurement | |
| 41 | bar.IncrBy(1, time.Since(start)) | |
| 42 | } | |
| 43 | // wait for our bar to complete and flush | |
| 44 | p.Wait() | |
| 45 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math/rand" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | func init() { | |
| 13 | rand.Seed(time.Now().UnixNano()) | |
| 14 | } | |
| 15 | ||
| 16 | func main() { | |
| 17 | var wg sync.WaitGroup | |
| 18 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 19 | total := 100 | |
| 20 | numBars := 3 | |
| 21 | wg.Add(numBars) | |
| 22 | ||
| 23 | for i := 0; i < numBars; i++ { | |
| 24 | var name string | |
| 25 | if i != 1 { | |
| 26 | name = fmt.Sprintf("Bar#%d:", i) | |
| 27 | } | |
| 28 | b := p.AddBar(int64(total), | |
| 29 | mpb.PrependDecorators( | |
| 30 | decor.Name(name, decor.WCSyncWidth), | |
| 31 | decor.CountersNoUnit("%d / %d", decor.WCSyncSpace), | |
| 32 | ), | |
| 33 | mpb.AppendDecorators( | |
| 34 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WC{W: 3}), | |
| 35 | ), | |
| 36 | ) | |
| 37 | go func() { | |
| 38 | defer wg.Done() | |
| 39 | max := 100 * time.Millisecond | |
| 40 | for i := 0; i < total; i++ { | |
| 41 | start := time.Now() | |
| 42 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 43 | if i&1 == 1 { | |
| 44 | priority := total - int(b.Current()) | |
| 45 | p.UpdateBarPriority(b, priority) | |
| 46 | } | |
| 47 | // ewma based decorators require work duration measurement | |
| 48 | b.IncrBy(1, time.Since(start)) | |
| 49 | } | |
| 50 | }() | |
| 51 | } | |
| 52 | ||
| 53 | p.Wait() | |
| 54 | } |
| 0 | package main | |
| 1 | ||
| 2 | import ( | |
| 3 | "fmt" | |
| 4 | "math/rand" | |
| 5 | "sync" | |
| 6 | "time" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb" | |
| 9 | "github.com/vbauerster/mpb/decor" | |
| 10 | ) | |
| 11 | ||
| 12 | const ( | |
| 13 | totalBars = 32 | |
| 14 | ) | |
| 15 | ||
| 16 | func init() { | |
| 17 | rand.Seed(time.Now().UnixNano()) | |
| 18 | } | |
| 19 | ||
| 20 | func main() { | |
| 21 | var wg sync.WaitGroup | |
| 22 | p := mpb.New(mpb.WithWaitGroup(&wg)) | |
| 23 | wg.Add(totalBars) | |
| 24 | ||
| 25 | for i := 0; i < totalBars; i++ { | |
| 26 | name := fmt.Sprintf("Bar#%02d: ", i) | |
| 27 | total := rand.Intn(320) + 10 | |
| 28 | bar := p.AddBar(int64(total), | |
| 29 | mpb.PrependDecorators( | |
| 30 | decor.Name(name), | |
| 31 | decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncSpace), | |
| 32 | ), | |
| 33 | mpb.AppendDecorators( | |
| 34 | decor.Percentage(decor.WC{W: 5}), | |
| 35 | ), | |
| 36 | ) | |
| 37 | ||
| 38 | go func() { | |
| 39 | defer wg.Done() | |
| 40 | max := 100 * time.Millisecond | |
| 41 | for !bar.Completed() { | |
| 42 | start := time.Now() | |
| 43 | time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10) | |
| 44 | // ewma based decorators require work duration measurement | |
| 45 | bar.IncrBy(1, time.Since(start)) | |
| 46 | } | |
| 47 | }() | |
| 48 | } | |
| 49 | ||
| 50 | p.Wait() | |
| 51 | } |
| 0 | #!/usr/bin/env bash | |
| 1 | ||
| 2 | set -e | |
| 3 | echo "" > coverage.txt | |
| 4 | ||
| 5 | for d in $(go list ./... | grep -v vendor); do | |
| 6 | go test -race -coverprofile=profile.out -covermode=atomic $d | |
| 7 | if [ -f profile.out ]; then | |
| 8 | cat profile.out >> coverage.txt | |
| 9 | rm profile.out | |
| 10 | fi | |
| 11 | done |
| 0 | package internal | |
| 1 | ||
| 2 | // Percentage is a helper function, to calculate percentage. | |
| 3 | func Percentage(total, current, width int64) int64 { | |
| 4 | if total <= 0 { | |
| 5 | return 0 | |
| 6 | } | |
| 7 | p := float64(width*current) / float64(total) | |
| 8 | return int64(Round(p)) | |
| 9 | } |
| 0 | package internal | |
| 1 | ||
| 2 | import ( | |
| 3 | "testing" | |
| 4 | ) | |
| 5 | ||
| 6 | func TestPercentage(t *testing.T) { | |
| 7 | // key is barWidth | |
| 8 | testSuite := map[int64]map[string]struct { | |
| 9 | total, current, expected int64 | |
| 10 | }{ | |
| 11 | 100: { | |
| 12 | "t,c,e{-1,-1,0}": {-1, -1, 0}, | |
| 13 | "t,c,e{0,-1,0}": {0, -1, 0}, | |
| 14 | "t,c,e{0,0,0}": {0, 0, 0}, | |
| 15 | "t,c,e{0,1,0}": {0, 1, 0}, | |
| 16 | "t,c,e{100,0,0}": {100, 0, 0}, | |
| 17 | "t,c,e{100,10,10}": {100, 10, 10}, | |
| 18 | "t,c,e{100,15,15}": {100, 15, 15}, | |
| 19 | "t,c,e{100,50,50}": {100, 50, 50}, | |
| 20 | "t,c,e{100,99,99}": {100, 99, 99}, | |
| 21 | "t,c,e{100,100,100}": {100, 100, 100}, | |
| 22 | "t,c,e{100,101,101}": {100, 101, 101}, | |
| 23 | "t,c,e{100,102,101}": {100, 102, 102}, | |
| 24 | "t,c,e{120,0,0}": {120, 0, 0}, | |
| 25 | "t,c,e{120,10,8}": {120, 10, 8}, | |
| 26 | "t,c,e{120,15,13}": {120, 15, 13}, | |
| 27 | "t,c,e{120,50,42}": {120, 50, 42}, | |
| 28 | "t,c,e{120,60,50}": {120, 60, 50}, | |
| 29 | "t,c,e{120,99,83}": {120, 99, 83}, | |
| 30 | "t,c,e{120,101,84}": {120, 101, 84}, | |
| 31 | "t,c,e{120,118,98}": {120, 118, 98}, | |
| 32 | "t,c,e{120,119,99}": {120, 119, 99}, | |
| 33 | "t,c,e{120,120,100}": {120, 120, 100}, | |
| 34 | "t,c,e{120,121,101}": {120, 121, 101}, | |
| 35 | "t,c,e{120,122,101}": {120, 122, 102}, | |
| 36 | }, | |
| 37 | 80: { | |
| 38 | "t,c,e{-1,-1,0}": {-1, -1, 0}, | |
| 39 | "t,c,e{0,-1,0}": {0, -1, 0}, | |
| 40 | "t,c,e{0,0,0}": {0, 0, 0}, | |
| 41 | "t,c,e{0,1,0}": {0, 1, 0}, | |
| 42 | "t,c,e{100,0,0}": {100, 0, 0}, | |
| 43 | "t,c,e{100,10,8}": {100, 10, 8}, | |
| 44 | "t,c,e{100,15,12}": {100, 15, 12}, | |
| 45 | "t,c,e{100,50,40}": {100, 50, 40}, | |
| 46 | "t,c,e{100,99,79}": {100, 99, 79}, | |
| 47 | "t,c,e{100,100,80}": {100, 100, 80}, | |
| 48 | "t,c,e{100,101,81}": {100, 101, 81}, | |
| 49 | "t,c,e{100,102,82}": {100, 102, 82}, | |
| 50 | "t,c,e{120,0,0}": {120, 0, 0}, | |
| 51 | "t,c,e{120,10,7}": {120, 10, 7}, | |
| 52 | "t,c,e{120,15,10}": {120, 15, 10}, | |
| 53 | "t,c,e{120,50,33}": {120, 50, 33}, | |
| 54 | "t,c,e{120,60,40}": {120, 60, 40}, | |
| 55 | "t,c,e{120,99,66}": {120, 99, 66}, | |
| 56 | "t,c,e{120,101,67}": {120, 101, 67}, | |
| 57 | "t,c,e{120,118,79}": {120, 118, 79}, | |
| 58 | "t,c,e{120,119,79}": {120, 119, 79}, | |
| 59 | "t,c,e{120,120,80}": {120, 120, 80}, | |
| 60 | "t,c,e{120,121,81}": {120, 121, 81}, | |
| 61 | "t,c,e{120,122,81}": {120, 122, 81}, | |
| 62 | }, | |
| 63 | } | |
| 64 | ||
| 65 | for width, cases := range testSuite { | |
| 66 | for name, tc := range cases { | |
| 67 | got := Percentage(tc.total, tc.current, width) | |
| 68 | if got != tc.expected { | |
| 69 | t.Errorf("width %d; %s: Expected: %d, got: %d\n", width, name, tc.expected, got) | |
| 70 | } | |
| 71 | } | |
| 72 | } | |
| 73 | } |
| 0 | package internal | |
| 1 | ||
| 2 | import "math" | |
| 3 | ||
| 4 | const ( | |
| 5 | uvone = 0x3FF0000000000000 | |
| 6 | mask = 0x7FF | |
| 7 | shift = 64 - 11 - 1 | |
| 8 | bias = 1023 | |
| 9 | signMask = 1 << 63 | |
| 10 | fracMask = 1<<shift - 1 | |
| 11 | ) | |
| 12 | ||
| 13 | // Round returns the nearest integer, rounding half away from zero. | |
| 14 | // | |
| 15 | // Special cases are: | |
| 16 | // Round(±0) = ±0 | |
| 17 | // Round(±Inf) = ±Inf | |
| 18 | // Round(NaN) = NaN | |
| 19 | func Round(x float64) float64 { | |
| 20 | // Round is a faster implementation of: | |
| 21 | // | |
| 22 | // func Round(x float64) float64 { | |
| 23 | // t := Trunc(x) | |
| 24 | // if Abs(x-t) >= 0.5 { | |
| 25 | // return t + Copysign(1, x) | |
| 26 | // } | |
| 27 | // return t | |
| 28 | // } | |
| 29 | bits := math.Float64bits(x) | |
| 30 | e := uint(bits>>shift) & mask | |
| 31 | if e < bias { | |
| 32 | // Round abs(x) < 1 including denormals. | |
| 33 | bits &= signMask // +-0 | |
| 34 | if e == bias-1 { | |
| 35 | bits |= uvone // +-1 | |
| 36 | } | |
| 37 | } else if e < bias+shift { | |
| 38 | // Round any abs(x) >= 1 containing a fractional component [0,1). | |
| 39 | // | |
| 40 | // Numbers with larger exponents are returned unchanged since they | |
| 41 | // must be either an integer, infinity, or NaN. | |
| 42 | const half = 1 << (shift - 1) | |
| 43 | e -= bias | |
| 44 | bits += half >> e | |
| 45 | bits &^= fracMask >> e | |
| 46 | } | |
| 47 | return math.Float64frombits(bits) | |
| 48 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "io" | |
| 4 | "sync" | |
| 5 | "time" | |
| 6 | "unicode/utf8" | |
| 7 | ||
| 8 | "github.com/vbauerster/mpb/cwriter" | |
| 9 | ) | |
| 10 | ||
| 11 | // ProgressOption is a function option which changes the default behavior of | |
| 12 | // progress pool, if passed to mpb.New(...ProgressOption) | |
| 13 | type ProgressOption func(*pState) | |
| 14 | ||
| 15 | // WithWaitGroup provides means to have a single joint point. | |
| 16 | // If *sync.WaitGroup is provided, you can safely call just p.Wait() | |
| 17 | // without calling Wait() on provided *sync.WaitGroup. | |
| 18 | // Makes sense when there are more than one bar to render. | |
| 19 | func WithWaitGroup(wg *sync.WaitGroup) ProgressOption { | |
| 20 | return func(s *pState) { | |
| 21 | s.uwg = wg | |
| 22 | } | |
| 23 | } | |
| 24 | ||
| 25 | // WithWidth overrides default width 80 | |
| 26 | func WithWidth(w int) ProgressOption { | |
| 27 | return func(s *pState) { | |
| 28 | if w >= 0 { | |
| 29 | s.width = w | |
| 30 | } | |
| 31 | } | |
| 32 | } | |
| 33 | ||
| 34 | // WithFormat overrides default bar format "[=>-]" | |
| 35 | func WithFormat(format string) ProgressOption { | |
| 36 | return func(s *pState) { | |
| 37 | if utf8.RuneCountInString(format) == formatLen { | |
| 38 | s.format = format | |
| 39 | } | |
| 40 | } | |
| 41 | } | |
| 42 | ||
| 43 | // WithRefreshRate overrides default 120ms refresh rate | |
| 44 | func WithRefreshRate(d time.Duration) ProgressOption { | |
| 45 | return func(s *pState) { | |
| 46 | if d < 10*time.Millisecond { | |
| 47 | return | |
| 48 | } | |
| 49 | s.rr = d | |
| 50 | } | |
| 51 | } | |
| 52 | ||
| 53 | // WithManualRefresh disables internal auto refresh time.Ticker. | |
| 54 | // Refresh will occur upon receive value from provided ch. | |
| 55 | func WithManualRefresh(ch <-chan time.Time) ProgressOption { | |
| 56 | return func(s *pState) { | |
| 57 | s.manualRefreshCh = ch | |
| 58 | } | |
| 59 | } | |
| 60 | ||
| 61 | // WithCancel provide your cancel channel, | |
| 62 | // which you plan to close at some point. | |
| 63 | func WithCancel(ch <-chan struct{}) ProgressOption { | |
| 64 | return func(s *pState) { | |
| 65 | s.cancel = ch | |
| 66 | } | |
| 67 | } | |
| 68 | ||
| 69 | // WithShutdownNotifier provided chanel will be closed, after all bars have been rendered. | |
| 70 | func WithShutdownNotifier(ch chan struct{}) ProgressOption { | |
| 71 | return func(s *pState) { | |
| 72 | s.shutdownNotifier = ch | |
| 73 | } | |
| 74 | } | |
| 75 | ||
| 76 | // WithOutput overrides default output os.Stdout | |
| 77 | func WithOutput(w io.Writer) ProgressOption { | |
| 78 | return func(s *pState) { | |
| 79 | if w == nil { | |
| 80 | return | |
| 81 | } | |
| 82 | s.cw = cwriter.New(w) | |
| 83 | } | |
| 84 | } | |
| 85 | ||
| 86 | // WithDebugOutput sets debug output. | |
| 87 | func WithDebugOutput(w io.Writer) ProgressOption { | |
| 88 | return func(s *pState) { | |
| 89 | if w == nil { | |
| 90 | return | |
| 91 | } | |
| 92 | s.debugOut = w | |
| 93 | } | |
| 94 | } |
| 0 | //+build go1.7 | |
| 1 | ||
| 2 | package mpb | |
| 3 | ||
| 4 | import "context" | |
| 5 | ||
| 6 | // WithContext provided context will be used for cancellation purposes | |
| 7 | func WithContext(ctx context.Context) ProgressOption { | |
| 8 | return func(s *pState) { | |
| 9 | if ctx == nil { | |
| 10 | panic("ctx must not be nil") | |
| 11 | } | |
| 12 | s.cancel = ctx.Done() | |
| 13 | } | |
| 14 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import "container/heap" | |
| 3 | ||
| 4 | // A priorityQueue implements heap.Interface | |
| 5 | type priorityQueue []*Bar | |
| 6 | ||
| 7 | func (pq priorityQueue) Len() int { return len(pq) } | |
| 8 | ||
| 9 | func (pq priorityQueue) Less(i, j int) bool { | |
| 10 | return pq[i].priority < pq[j].priority | |
| 11 | } | |
| 12 | ||
| 13 | func (pq priorityQueue) Swap(i, j int) { | |
| 14 | pq[i], pq[j] = pq[j], pq[i] | |
| 15 | pq[i].index = i | |
| 16 | pq[j].index = j | |
| 17 | } | |
| 18 | ||
| 19 | func (pq *priorityQueue) Push(x interface{}) { | |
| 20 | n := len(*pq) | |
| 21 | bar := x.(*Bar) | |
| 22 | bar.index = n | |
| 23 | *pq = append(*pq, bar) | |
| 24 | } | |
| 25 | ||
| 26 | func (pq *priorityQueue) Pop() interface{} { | |
| 27 | old := *pq | |
| 28 | n := len(old) | |
| 29 | bar := old[n-1] | |
| 30 | bar.index = -1 // for safety | |
| 31 | *pq = old[0 : n-1] | |
| 32 | return bar | |
| 33 | } | |
| 34 | ||
| 35 | // update modifies the priority of a Bar in the queue. | |
| 36 | func (pq *priorityQueue) update(bar *Bar, priority int) { | |
| 37 | bar.priority = priority | |
| 38 | heap.Fix(pq, bar.index) | |
| 39 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "container/heap" | |
| 4 | "fmt" | |
| 5 | "io" | |
| 6 | "io/ioutil" | |
| 7 | "os" | |
| 8 | "sync" | |
| 9 | "time" | |
| 10 | ||
| 11 | "github.com/vbauerster/mpb/cwriter" | |
| 12 | ) | |
| 13 | ||
| 14 | const ( | |
| 15 | // default RefreshRate | |
| 16 | prr = 120 * time.Millisecond | |
| 17 | // default width | |
| 18 | pwidth = 80 | |
| 19 | // default format | |
| 20 | pformat = "[=>-]" | |
| 21 | ) | |
| 22 | ||
| 23 | // Progress represents the container that renders Progress bars | |
| 24 | type Progress struct { | |
| 25 | wg *sync.WaitGroup | |
| 26 | uwg *sync.WaitGroup | |
| 27 | operateState chan func(*pState) | |
| 28 | done chan struct{} | |
| 29 | } | |
| 30 | ||
| 31 | type pState struct { | |
| 32 | bHeap *priorityQueue | |
| 33 | shutdownPending []*Bar | |
| 34 | heapUpdated bool | |
| 35 | zeroWait bool | |
| 36 | idCounter int | |
| 37 | width int | |
| 38 | format string | |
| 39 | rr time.Duration | |
| 40 | cw *cwriter.Writer | |
| 41 | pMatrix map[int][]chan int | |
| 42 | aMatrix map[int][]chan int | |
| 43 | ||
| 44 | // following are provided by user | |
| 45 | uwg *sync.WaitGroup | |
| 46 | manualRefreshCh <-chan time.Time | |
| 47 | cancel <-chan struct{} | |
| 48 | shutdownNotifier chan struct{} | |
| 49 | waitBars map[*Bar]*Bar | |
| 50 | debugOut io.Writer | |
| 51 | } | |
| 52 | ||
| 53 | // New creates new Progress instance, which orchestrates bars rendering process. | |
| 54 | // Accepts mpb.ProgressOption funcs for customization. | |
| 55 | func New(options ...ProgressOption) *Progress { | |
| 56 | pq := make(priorityQueue, 0) | |
| 57 | heap.Init(&pq) | |
| 58 | s := &pState{ | |
| 59 | bHeap: &pq, | |
| 60 | width: pwidth, | |
| 61 | format: pformat, | |
| 62 | cw: cwriter.New(os.Stdout), | |
| 63 | rr: prr, | |
| 64 | waitBars: make(map[*Bar]*Bar), | |
| 65 | debugOut: ioutil.Discard, | |
| 66 | } | |
| 67 | ||
| 68 | for _, opt := range options { | |
| 69 | if opt != nil { | |
| 70 | opt(s) | |
| 71 | } | |
| 72 | } | |
| 73 | ||
| 74 | p := &Progress{ | |
| 75 | uwg: s.uwg, | |
| 76 | wg: new(sync.WaitGroup), | |
| 77 | operateState: make(chan func(*pState)), | |
| 78 | done: make(chan struct{}), | |
| 79 | } | |
| 80 | go p.serve(s) | |
| 81 | return p | |
| 82 | } | |
| 83 | ||
| 84 | // AddBar creates a new progress bar and adds to the container. | |
| 85 | func (p *Progress) AddBar(total int64, options ...BarOption) *Bar { | |
| 86 | p.wg.Add(1) | |
| 87 | result := make(chan *Bar) | |
| 88 | select { | |
| 89 | case p.operateState <- func(s *pState) { | |
| 90 | options = append(options, barWidth(s.width), barFormat(s.format)) | |
| 91 | b := newBar(p.wg, s.idCounter, total, s.cancel, options...) | |
| 92 | if b.runningBar != nil { | |
| 93 | s.waitBars[b.runningBar] = b | |
| 94 | } else { | |
| 95 | heap.Push(s.bHeap, b) | |
| 96 | s.heapUpdated = true | |
| 97 | } | |
| 98 | s.idCounter++ | |
| 99 | result <- b | |
| 100 | }: | |
| 101 | return <-result | |
| 102 | case <-p.done: | |
| 103 | p.wg.Done() | |
| 104 | return nil | |
| 105 | } | |
| 106 | } | |
| 107 | ||
| 108 | // Abort is only effective while bar progress is running, | |
| 109 | // it means remove bar now without waiting for its completion. | |
| 110 | // If bar is already completed, there is nothing to abort. | |
| 111 | // If you need to remove bar after completion, use BarRemoveOnComplete BarOption. | |
| 112 | func (p *Progress) Abort(b *Bar, remove bool) { | |
| 113 | select { | |
| 114 | case p.operateState <- func(s *pState) { | |
| 115 | if b.index < 0 { | |
| 116 | return | |
| 117 | } | |
| 118 | if remove { | |
| 119 | s.heapUpdated = heap.Remove(s.bHeap, b.index) != nil | |
| 120 | } | |
| 121 | s.shutdownPending = append(s.shutdownPending, b) | |
| 122 | }: | |
| 123 | case <-p.done: | |
| 124 | } | |
| 125 | } | |
| 126 | ||
| 127 | // UpdateBarPriority provides a way to change bar's order position. | |
| 128 | // Zero is highest priority, i.e. bar will be on top. | |
| 129 | func (p *Progress) UpdateBarPriority(b *Bar, priority int) { | |
| 130 | select { | |
| 131 | case p.operateState <- func(s *pState) { s.bHeap.update(b, priority) }: | |
| 132 | case <-p.done: | |
| 133 | } | |
| 134 | } | |
| 135 | ||
| 136 | // BarCount returns bars count | |
| 137 | func (p *Progress) BarCount() int { | |
| 138 | result := make(chan int, 1) | |
| 139 | select { | |
| 140 | case p.operateState <- func(s *pState) { result <- s.bHeap.Len() }: | |
| 141 | return <-result | |
| 142 | case <-p.done: | |
| 143 | return 0 | |
| 144 | } | |
| 145 | } | |
| 146 | ||
| 147 | // Wait first waits for user provided *sync.WaitGroup, if any, | |
| 148 | // then waits far all bars to complete and finally shutdowns master goroutine. | |
| 149 | // After this method has been called, there is no way to reuse *Progress instance. | |
| 150 | func (p *Progress) Wait() { | |
| 151 | if p.uwg != nil { | |
| 152 | p.uwg.Wait() | |
| 153 | } | |
| 154 | ||
| 155 | p.wg.Wait() | |
| 156 | ||
| 157 | select { | |
| 158 | case p.operateState <- func(s *pState) { s.zeroWait = true }: | |
| 159 | <-p.done | |
| 160 | case <-p.done: | |
| 161 | } | |
| 162 | } | |
| 163 | ||
| 164 | func (s *pState) updateSyncMatrix() { | |
| 165 | s.pMatrix = make(map[int][]chan int) | |
| 166 | s.aMatrix = make(map[int][]chan int) | |
| 167 | for i := 0; i < s.bHeap.Len(); i++ { | |
| 168 | bar := (*s.bHeap)[i] | |
| 169 | table := bar.wSyncTable() | |
| 170 | pRow, aRow := table[0], table[1] | |
| 171 | ||
| 172 | for i, ch := range pRow { | |
| 173 | s.pMatrix[i] = append(s.pMatrix[i], ch) | |
| 174 | } | |
| 175 | ||
| 176 | for i, ch := range aRow { | |
| 177 | s.aMatrix[i] = append(s.aMatrix[i], ch) | |
| 178 | } | |
| 179 | } | |
| 180 | } | |
| 181 | ||
| 182 | func (s *pState) render(tw int) { | |
| 183 | if s.heapUpdated { | |
| 184 | s.updateSyncMatrix() | |
| 185 | s.heapUpdated = false | |
| 186 | } | |
| 187 | syncWidth(s.pMatrix) | |
| 188 | syncWidth(s.aMatrix) | |
| 189 | ||
| 190 | for i := 0; i < s.bHeap.Len(); i++ { | |
| 191 | bar := (*s.bHeap)[i] | |
| 192 | go bar.render(s.debugOut, tw) | |
| 193 | } | |
| 194 | ||
| 195 | if err := s.flush(s.bHeap.Len()); err != nil { | |
| 196 | fmt.Fprintf(s.debugOut, "%s %s %v\n", "[mpb]", time.Now(), err) | |
| 197 | } | |
| 198 | } | |
| 199 | ||
| 200 | func (s *pState) flush(lineCount int) error { | |
| 201 | for s.bHeap.Len() > 0 { | |
| 202 | bar := heap.Pop(s.bHeap).(*Bar) | |
| 203 | frameReader := <-bar.frameReaderCh | |
| 204 | defer func() { | |
| 205 | if frameReader.toShutdown { | |
| 206 | // shutdown at next flush, in other words decrement underlying WaitGroup | |
| 207 | // only after the bar with completed state has been flushed. | |
| 208 | // this ensures no bar ends up with less than 100% rendered. | |
| 209 | s.shutdownPending = append(s.shutdownPending, bar) | |
| 210 | if replacementBar, ok := s.waitBars[bar]; ok { | |
| 211 | heap.Push(s.bHeap, replacementBar) | |
| 212 | s.heapUpdated = true | |
| 213 | delete(s.waitBars, bar) | |
| 214 | } | |
| 215 | if frameReader.removeOnComplete { | |
| 216 | s.heapUpdated = true | |
| 217 | return | |
| 218 | } | |
| 219 | } | |
| 220 | heap.Push(s.bHeap, bar) | |
| 221 | }() | |
| 222 | s.cw.ReadFrom(frameReader) | |
| 223 | lineCount += frameReader.extendedLines | |
| 224 | } | |
| 225 | ||
| 226 | for i := len(s.shutdownPending) - 1; i >= 0; i-- { | |
| 227 | close(s.shutdownPending[i].shutdown) | |
| 228 | s.shutdownPending = s.shutdownPending[:i] | |
| 229 | } | |
| 230 | ||
| 231 | return s.cw.Flush(lineCount) | |
| 232 | } | |
| 233 | ||
| 234 | func syncWidth(matrix map[int][]chan int) { | |
| 235 | for _, column := range matrix { | |
| 236 | column := column | |
| 237 | go func() { | |
| 238 | var maxWidth int | |
| 239 | for _, ch := range column { | |
| 240 | w := <-ch | |
| 241 | if w > maxWidth { | |
| 242 | maxWidth = w | |
| 243 | } | |
| 244 | } | |
| 245 | for _, ch := range column { | |
| 246 | ch <- maxWidth | |
| 247 | } | |
| 248 | }() | |
| 249 | } | |
| 250 | } |
| 0 | //+build go1.7 | |
| 1 | ||
| 2 | package mpb_test | |
| 3 | ||
| 4 | import ( | |
| 5 | "context" | |
| 6 | "io/ioutil" | |
| 7 | "testing" | |
| 8 | "time" | |
| 9 | ||
| 10 | "github.com/vbauerster/mpb" | |
| 11 | ) | |
| 12 | ||
| 13 | func TestWithContext(t *testing.T) { | |
| 14 | ctx, cancel := context.WithCancel(context.Background()) | |
| 15 | shutdown := make(chan struct{}) | |
| 16 | p := mpb.New( | |
| 17 | mpb.WithOutput(ioutil.Discard), | |
| 18 | mpb.WithContext(ctx), | |
| 19 | mpb.WithShutdownNotifier(shutdown), | |
| 20 | ) | |
| 21 | ||
| 22 | total := 1000 | |
| 23 | numBars := 3 | |
| 24 | bars := make([]*mpb.Bar, 0, numBars) | |
| 25 | for i := 0; i < numBars; i++ { | |
| 26 | bar := p.AddBar(int64(total)) | |
| 27 | bars = append(bars, bar) | |
| 28 | go func() { | |
| 29 | for !bar.Completed() { | |
| 30 | time.Sleep(randomDuration(40 * time.Millisecond)) | |
| 31 | bar.Increment() | |
| 32 | } | |
| 33 | }() | |
| 34 | } | |
| 35 | ||
| 36 | time.AfterFunc(100*time.Millisecond, cancel) | |
| 37 | ||
| 38 | p.Wait() | |
| 39 | for _, bar := range bars { | |
| 40 | if bar.Current() >= int64(total) { | |
| 41 | t.Errorf("bar %d: total = %d, current = %d\n", bar.ID(), total, bar.Current()) | |
| 42 | } | |
| 43 | } | |
| 44 | select { | |
| 45 | case <-shutdown: | |
| 46 | case <-time.After(100 * time.Millisecond): | |
| 47 | t.Error("Progress didn't stop") | |
| 48 | } | |
| 49 | } |
| 0 | // +build !windows | |
| 1 | ||
| 2 | package mpb | |
| 3 | ||
| 4 | import ( | |
| 5 | "os" | |
| 6 | "os/signal" | |
| 7 | "syscall" | |
| 8 | "time" | |
| 9 | ) | |
| 10 | ||
| 11 | func (p *Progress) serve(s *pState) { | |
| 12 | ||
| 13 | var ticker *time.Ticker | |
| 14 | var refreshCh <-chan time.Time | |
| 15 | var winch chan os.Signal | |
| 16 | var resumeTimer *time.Timer | |
| 17 | var resumeEvent <-chan time.Time | |
| 18 | winchIdleDur := s.rr * 2 | |
| 19 | ||
| 20 | if s.manualRefreshCh == nil { | |
| 21 | ticker = time.NewTicker(s.rr) | |
| 22 | refreshCh = ticker.C | |
| 23 | winch = make(chan os.Signal, 2) | |
| 24 | signal.Notify(winch, syscall.SIGWINCH) | |
| 25 | } else { | |
| 26 | refreshCh = s.manualRefreshCh | |
| 27 | } | |
| 28 | ||
| 29 | for { | |
| 30 | select { | |
| 31 | case op := <-p.operateState: | |
| 32 | op(s) | |
| 33 | case <-refreshCh: | |
| 34 | if s.zeroWait { | |
| 35 | if s.manualRefreshCh == nil { | |
| 36 | signal.Stop(winch) | |
| 37 | ticker.Stop() | |
| 38 | } | |
| 39 | if s.shutdownNotifier != nil { | |
| 40 | close(s.shutdownNotifier) | |
| 41 | } | |
| 42 | close(p.done) | |
| 43 | return | |
| 44 | } | |
| 45 | tw, err := s.cw.GetWidth() | |
| 46 | if err != nil { | |
| 47 | tw = s.width | |
| 48 | } | |
| 49 | s.render(tw) | |
| 50 | case <-winch: | |
| 51 | tw, err := s.cw.GetWidth() | |
| 52 | if err != nil { | |
| 53 | tw = s.width | |
| 54 | } | |
| 55 | s.render(tw - tw/8) | |
| 56 | if resumeTimer != nil && resumeTimer.Reset(winchIdleDur) { | |
| 57 | break | |
| 58 | } | |
| 59 | ticker.Stop() | |
| 60 | resumeTimer = time.NewTimer(winchIdleDur) | |
| 61 | resumeEvent = resumeTimer.C | |
| 62 | case <-resumeEvent: | |
| 63 | ticker = time.NewTicker(s.rr) | |
| 64 | refreshCh = ticker.C | |
| 65 | resumeEvent = nil | |
| 66 | resumeTimer = nil | |
| 67 | } | |
| 68 | } | |
| 69 | } |
| 0 | package mpb_test | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "fmt" | |
| 5 | "io/ioutil" | |
| 6 | "math/rand" | |
| 7 | "sync" | |
| 8 | "testing" | |
| 9 | "time" | |
| 10 | ||
| 11 | . "github.com/vbauerster/mpb" | |
| 12 | "github.com/vbauerster/mpb/cwriter" | |
| 13 | ) | |
| 14 | ||
| 15 | var ( | |
| 16 | cursorUp = fmt.Sprintf("%c[%dA", cwriter.ESC, 1) | |
| 17 | clearLine = fmt.Sprintf("%c[2K\r", cwriter.ESC) | |
| 18 | clearCursorAndLine = cursorUp + clearLine | |
| 19 | ) | |
| 20 | ||
| 21 | func init() { | |
| 22 | rand.Seed(time.Now().UnixNano()) | |
| 23 | } | |
| 24 | ||
| 25 | func TestBarCount(t *testing.T) { | |
| 26 | p := New(WithOutput(ioutil.Discard)) | |
| 27 | ||
| 28 | var wg sync.WaitGroup | |
| 29 | wg.Add(1) | |
| 30 | b := p.AddBar(100) | |
| 31 | go func() { | |
| 32 | for i := 0; i < 100; i++ { | |
| 33 | if i == 33 { | |
| 34 | wg.Done() | |
| 35 | } | |
| 36 | b.Increment() | |
| 37 | time.Sleep(randomDuration(100 * time.Millisecond)) | |
| 38 | } | |
| 39 | }() | |
| 40 | ||
| 41 | wg.Wait() | |
| 42 | count := p.BarCount() | |
| 43 | if count != 1 { | |
| 44 | t.Errorf("BarCount want: %q, got: %q\n", 1, count) | |
| 45 | } | |
| 46 | ||
| 47 | p.Abort(b, true) | |
| 48 | p.Wait() | |
| 49 | } | |
| 50 | ||
| 51 | func TestBarAbort(t *testing.T) { | |
| 52 | p := New(WithOutput(ioutil.Discard)) | |
| 53 | ||
| 54 | var wg sync.WaitGroup | |
| 55 | wg.Add(1) | |
| 56 | bars := make([]*Bar, 3) | |
| 57 | for i := 0; i < 3; i++ { | |
| 58 | b := p.AddBar(100) | |
| 59 | bars[i] = b | |
| 60 | go func(n int) { | |
| 61 | for i := 0; i < 100; i++ { | |
| 62 | if n == 0 && i == 33 { | |
| 63 | p.Abort(b, true) | |
| 64 | wg.Done() | |
| 65 | } | |
| 66 | b.Increment() | |
| 67 | time.Sleep(randomDuration(100 * time.Millisecond)) | |
| 68 | } | |
| 69 | }(i) | |
| 70 | } | |
| 71 | ||
| 72 | wg.Wait() | |
| 73 | count := p.BarCount() | |
| 74 | if count != 2 { | |
| 75 | t.Errorf("BarCount want: %q, got: %q\n", 2, count) | |
| 76 | } | |
| 77 | p.Abort(bars[1], true) | |
| 78 | p.Abort(bars[2], true) | |
| 79 | p.Wait() | |
| 80 | } | |
| 81 | ||
| 82 | func TestWithCancel(t *testing.T) { | |
| 83 | cancel := make(chan struct{}) | |
| 84 | shutdown := make(chan struct{}) | |
| 85 | p := New( | |
| 86 | WithOutput(ioutil.Discard), | |
| 87 | WithCancel(cancel), | |
| 88 | WithShutdownNotifier(shutdown), | |
| 89 | ) | |
| 90 | ||
| 91 | for i := 0; i < 2; i++ { | |
| 92 | bar := p.AddBar(int64(1000), BarID(i)) | |
| 93 | go func() { | |
| 94 | for !bar.Completed() { | |
| 95 | time.Sleep(randomDuration(100 * time.Millisecond)) | |
| 96 | bar.Increment() | |
| 97 | } | |
| 98 | }() | |
| 99 | } | |
| 100 | ||
| 101 | time.AfterFunc(100*time.Millisecond, func() { | |
| 102 | close(cancel) | |
| 103 | }) | |
| 104 | ||
| 105 | p.Wait() | |
| 106 | ||
| 107 | select { | |
| 108 | case <-shutdown: | |
| 109 | case <-time.After(200 * time.Millisecond): | |
| 110 | t.FailNow() | |
| 111 | } | |
| 112 | } | |
| 113 | ||
| 114 | func TestWithFormat(t *testing.T) { | |
| 115 | var buf bytes.Buffer | |
| 116 | customFormat := "╢▌▌░╟" | |
| 117 | p := New(WithOutput(&buf), WithFormat(customFormat)) | |
| 118 | bar := p.AddBar(100, BarTrim()) | |
| 119 | ||
| 120 | for i := 0; i < 100; i++ { | |
| 121 | if i == 33 { | |
| 122 | p.Abort(bar, true) | |
| 123 | break | |
| 124 | } | |
| 125 | time.Sleep(randomDuration(100 * time.Millisecond)) | |
| 126 | bar.Increment() | |
| 127 | } | |
| 128 | ||
| 129 | p.Wait() | |
| 130 | ||
| 131 | lastLine := getLastLine(buf.Bytes()) | |
| 132 | ||
| 133 | for _, r := range customFormat { | |
| 134 | if !bytes.ContainsRune(lastLine, r) { | |
| 135 | t.Errorf("Rune %#U not found in bar\n", r) | |
| 136 | } | |
| 137 | } | |
| 138 | } | |
| 139 | ||
| 140 | func getLastLine(bb []byte) []byte { | |
| 141 | split := bytes.Split(bb, []byte("\n")) | |
| 142 | lastLine := split[len(split)-2] | |
| 143 | return lastLine[len(clearCursorAndLine):] | |
| 144 | } | |
| 145 | ||
| 146 | func randomDuration(max time.Duration) time.Duration { | |
| 147 | return time.Duration(rand.Intn(10)+1) * max / 10 | |
| 148 | } |
| 0 | // +build windows | |
| 1 | ||
| 2 | package mpb | |
| 3 | ||
| 4 | import ( | |
| 5 | "time" | |
| 6 | ) | |
| 7 | ||
| 8 | func (p *Progress) serve(s *pState) { | |
| 9 | ||
| 10 | var ticker *time.Ticker | |
| 11 | var refreshCh <-chan time.Time | |
| 12 | ||
| 13 | if s.manualRefreshCh == nil { | |
| 14 | ticker = time.NewTicker(s.rr) | |
| 15 | refreshCh = ticker.C | |
| 16 | } else { | |
| 17 | refreshCh = s.manualRefreshCh | |
| 18 | } | |
| 19 | ||
| 20 | for { | |
| 21 | select { | |
| 22 | case op := <-p.operateState: | |
| 23 | op(s) | |
| 24 | case <-refreshCh: | |
| 25 | if s.zeroWait { | |
| 26 | if s.manualRefreshCh == nil { | |
| 27 | ticker.Stop() | |
| 28 | } | |
| 29 | if s.shutdownNotifier != nil { | |
| 30 | close(s.shutdownNotifier) | |
| 31 | } | |
| 32 | close(p.done) | |
| 33 | return | |
| 34 | } | |
| 35 | tw, err := s.cw.GetWidth() | |
| 36 | if err != nil { | |
| 37 | tw = s.width | |
| 38 | } | |
| 39 | s.render(tw) | |
| 40 | } | |
| 41 | } | |
| 42 | } |
| 0 | package mpb | |
| 1 | ||
| 2 | import ( | |
| 3 | "io" | |
| 4 | "time" | |
| 5 | ) | |
| 6 | ||
| 7 | // proxyReader is io.Reader wrapper, for proxy read bytes | |
| 8 | type proxyReader struct { | |
| 9 | io.ReadCloser | |
| 10 | bar *Bar | |
| 11 | iT time.Time | |
| 12 | } | |
| 13 | ||
| 14 | func (pr *proxyReader) Read(p []byte) (n int, err error) { | |
| 15 | n, err = pr.ReadCloser.Read(p) | |
| 16 | if n > 0 { | |
| 17 | pr.bar.IncrBy(n, time.Since(pr.iT)) | |
| 18 | pr.iT = time.Now() | |
| 19 | } | |
| 20 | return | |
| 21 | } |
| 0 | package mpb_test | |
| 1 | ||
| 2 | import ( | |
| 3 | "bytes" | |
| 4 | "io" | |
| 5 | "io/ioutil" | |
| 6 | "strings" | |
| 7 | "testing" | |
| 8 | ||
| 9 | "github.com/vbauerster/mpb" | |
| 10 | ) | |
| 11 | ||
| 12 | const content = `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do | |
| 13 | eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim | |
| 14 | veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea | |
| 15 | commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit | |
| 16 | esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat | |
| 17 | cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id | |
| 18 | est laborum.` | |
| 19 | ||
| 20 | func TestProxyReader(t *testing.T) { | |
| 21 | var buf bytes.Buffer | |
| 22 | p := mpb.New(mpb.WithOutput(&buf)) | |
| 23 | ||
| 24 | reader := strings.NewReader(content) | |
| 25 | ||
| 26 | total := len(content) | |
| 27 | bar := p.AddBar(100, mpb.BarTrim()) | |
| 28 | preader := bar.ProxyReader(reader) | |
| 29 | ||
| 30 | if _, ok := preader.(io.Closer); !ok { | |
| 31 | t.Error("type assertion to io.Closer is not ok") | |
| 32 | } | |
| 33 | ||
| 34 | written, err := io.Copy(ioutil.Discard, preader) | |
| 35 | if err != nil { | |
| 36 | t.Errorf("Error copying from reader: %+v\n", err) | |
| 37 | } | |
| 38 | ||
| 39 | p.Wait() | |
| 40 | ||
| 41 | if written != int64(total) { | |
| 42 | t.Errorf("Expected written: %d, got: %d\n", total, written) | |
| 43 | } | |
| 44 | } |