General Issues

1. Find a Better Visualization

The original:

Some issues:

A simple bar chart with a zero base line:

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
d <- data.frame(pres = c("Obama", "Carter", "Clinton",
                         "G.W. Bush", "Reagan", "G.H.W Bush", "Trump"),
                appr = c(79, 78, 68, 65, 58, 56, 40),
                party = c("D", "D", "D", "R", "R", "R", "R"),
                year = c(2009, 1977, 1993, 2001, 1981, 1989, 2017))
d <- mutate(d, pres = reorder(pres, appr))

p <- ggplot(d, aes(x = pres, y = appr, fill = party)) +
    geom_col() + coord_flip()
p

This can be changed using scale_fill_manual:

p + scale_fill_manual(values = c(R = "red", D = "blue"))

We can reduce the saturation and the value in the HSV color representation to obtain less intense colors; this is commonly used in red state/blue state maps:

myred <- hsv(0, 0.6, 0.8)
myblue <- hsv(2 / 3, 0.6, 0.8)
p + scale_fill_manual(values = c(R = myred, D = myblue))

Some enhancements:

p + scale_fill_manual(values = c(R = myred, D = myblue)) + theme_void() +
    geom_text(aes(y = 3, label = pres),
              size = 8, hjust = "left", color = "white") +
    geom_text(aes(y = appr - 3, label = appr),
              size = 8, hjust = "right", color = "white")

Some notes:

2. EPA Fuel Economy Data

library(lubridate)
library(readr)
if (! file.exists("vehicles.csv.zip") ||
    file.mtime("vehicles.csv.zip") + months(6) < now())
    download.file("http://www.stat.uiowa.edu/~luke/data/vehicles.csv.zip",
                  "vehicles.csv.zip")
newmpg <- read_csv("vehicles.csv.zip", guess_max = 100000)

From the documentation for the data the appropriate variables seem to be:

The primary fuel type counts are

library(dplyr)
tbl <- count(newmpg, fuelType1)
kbl <- knitr::kable(tbl, format = "html")
kableExtra::kable_styling(kbl, full_width = FALSE)
fuelType1 n
Diesel 1231
Electricity 353
Midgrade Gasoline 142
Natural Gas 60
Premium Gasoline 13517
Regular Gasoline 29384

A bar chart of these numbers:

thm <- theme_minimal() + theme(text = element_text(size = 16))
ggplot(tbl, aes(x = n, y = reorder(fuelType1, n))) +
    geom_col() +
    scale_x_continuous(expand = expansion(mult = c(0, .1))) +
    thm +
    ylab(NULL)

Regular gas is the dominant fuel type over all years, with premium second. All other fuel types, including electricity, make up a small fraction.

3. Fuel Type Over the Years

A filled bar chart shows changes in the primary fuel type used over the years:

newmpg2 <- filter(newmpg, year <= 2021) %>%
    mutate(year = factor(year))
ggplot(newmpg2, aes(y = year, fill = fuelType1)) +
    geom_bar(position = "fill") +
    scale_x_continuous(expand = c(0, 0)) +
    labs(x = "Proportion", y = NULL)

Regular gas was the predominant fuel type in the mid 1980s, but premium’s share has gradually increased to the point where almost as many models use premium as regular. Diesel’s popularity declined early and had a small resurgence recently. The market share for electricity is still quite small but is growing.

4. Highway Fuel Economy Over the Years

newmpg3 <- filter(newmpg, year <= 2021, year >= 2000) %>%
    mutate(year = factor(year))
alpha <- 0.2
size <- 0.3

A strip chart is a useful way to look at the full data for a numeric variable at several different levels of a discrete variable, but some tuning is needed for larger data sets. For examining 22 years of highway gas mileage data from the EPA data set using alpha = 0.2 and size = 0.3 along with jittering seems to work reasonably well:

ggplot(newmpg3, aes(x = highway08, y = year)) +
    geom_point(position = "jitter", size = size, alpha = alpha) +
    ylab(NULL) +
    thm

Over time the highway gas mileage distributions are moving upward a little bit, with the upper tails becoming gradually longer and an increasing number of very high efficiency models (mostly electric).

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA0IE5vdGVzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6ICJoaWRlIgotLS0KCSAgCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChjb2xsYXBzZSA9IFRSVUUsIGZpZy5hbGlnbiA9ICJjZW50ZXIiKQpgYGAKCiMjIEdlbmVyYWwgSXNzdWVzCgoqIE1ha2Ugc3VyZSB5b3UgbmFtZSB5b3VyIGZpbGVzIGFzIHJlcXVlc3RlZCwgaW5jbHVkaW5nIG1hdGNoaW5nIHRoZQogIHNwZWNpZmllZCB1c2Ugb2YgdXBwZXIgYW5kIGxvd2VyIGNhc2UuIFRoaXMgbWF0dGVycyBvbiBmaWxlIHN5c3RlbXMKICB0aGF0IGFyZSBjYXNlLXNlbnNpdGl2ZS4KCiogTWFrZSBzdXJlIHRvIGNvbW1pdCB5b3VyIHdvcmsgdG8geW91ciBsb2NhbCByZXBvc2l0b3J5IGFuZCBwdXNoIHlvdXIKICBjb21taXRzIHRvIEdpdExhYi4gV2UgY2FuIG9ubHkgc2VlIHdoYXQgaXMgb24gR2l0TGFiLCBub3Qgd2hhdCBpcyBvbgogIHlvdXIgY29tcHV0ZXIuIFlvdSBjYW4gY2hlY2sgd2hhdCB3ZSBzZWUgYnkgZ29pbmcgdG8gdGhlIEdpdExhYiB3ZWIKICBpbnRlcmZhY2UuCiAKKiBJbmNsdWRlIHlvdXIgbmFtZSBhbmQgdGhlIGRhdGUgaW4gdGhlIGhlYWRlciBvZiB5b3VyIGAuUm1kYCBmaWxlCiAgdXNpbmcgYGF1dGhvcjpgIGFuZCBgZGF0ZTpgIHRhZ3MuCgoqIFlvdXIgSFRNTCBmaWxlIHNob3VsZCBiZSBhIHJlcG9ydCBvZiB5b3VyIGZpbmRpbmdzLgoKICAgICogQW55IGdyYXBoIHlvdSBzaG93IHNob3VsZCBiZSBkaXNjdXNzZWQgaW4geW91ciBuYXJyYXRpdmUuCgogICAgKiBBbnkgY29kZSB5b3Ugc2hvdyBzaG91bGQgYmUgZGlzY3Vzc2VkIGluIHlvdXIgbmFycmF0aXZlLgoKICAgICogSWYgeW91IGRvIG5vdCBuZWVkIHRvIGRpc2N1c3MgYSBwaWVjZSBvZiBjb2RlIGluIHRoZSBuYXJyYXRpdmUsCiAgICAgIHVzZSBgZWNobyBGQUxTRWAgdG8gYXZvaWQgc2hvd2luZyBpdC4KCiogSWYgeW91IGxvYWQgYSBmaWxlIHRoYXQgeW91IGhhdmUgaW5jbHVkZWQgaW4geW91ciByZXBvc2l0b3J5IG9yIHRoYXQKICB5b3UgZG93bmxvYWQgdG8geW91ciByZXBvc2l0b3J5IHRoZW4geW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlCiAgaW4geW91ciBSbWFya2Rvd24gZG9jdW1lbnQgdXNlcyBhIHJlbGF0aXZlIHBhdGgsIG5vdCBhbiBhYnNvbHV0ZQogIG9uZS4gIEFic29sdXRlIHBhdGhzIHdpbGwgb25seSBtYWtlIHNlbnNlIG9uIHlvdXIgY29tcHV0ZXIsIG5vdCBvbgogIHRoZSBjb21wdXRlciBvZiBzb21lb25lIGVsc2Ugd2hvIGRvd25sb2FkcyB5b3VyIHJlcG9zaXRvcnkuCgoqIElmIHlvdSB3YW50IHRvIGNoZWNrIHlvdXIgd29yayBpcyByZXByb2R1Y2libGUgeW91IGNhbiBkb3dubG9hZCB5b3VyCiAgd29yayB0byBhIGNvbXB1dGVyIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgdXNlIGZvciBkZXZlbG9waW5nIGl0LgogIE9uZSBvcHRpb24gaXMgdGhlIENMQVMgTGludXggc3lzdGVtcyBhY2Nlc3NlZCB2aWEKICBbRmFzdFhdKGh0dHBzOi8vY2xhcy51aW93YS5lZHUvbGludXgvaGVscC9mYXN0eCkuIFlvdSBjYW4gdXNlCiAgUlN0dWRpbyB0aGVyZSB0byBzZXQgdXAgYSBjbGVhbiBjb3B5IG9mIHlvdXIgcmVwb3NpdG9yeSBhbmQgdGhlbgogIGp1c3QgcHVsbCB5b3VyIGNoYW5nZXMgYW5kIGNoZWNrIHRoYXQgdGhleSBrbml0IHN1Y2Nlc3NmdWxseS4KICBVc2luZyBgU1RBVDQ1ODA6OmNoZWNrSFdgIGlzIGEgY29udmVuaWVudCB3YXkgdG8gZG8gdGhpcy4KCgojIyAxLiBGaW5kIGEgQmV0dGVyIFZpc3VhbGl6YXRpb24KClRoZSBvcmlnaW5hbDoKCjxjZW50ZXI+CiFbXShpbWcvYWJjbmV3c190cnVtcHRyYW5zaXRpb24ucG5nKQo8L2NlbnRlcj4KClNvbWUgaXNzdWVzOgoKKiBUaGUgd2hpdGUgYmFycyBhcmUgc3VwcG9zZWQgdG8gcmVwcmVzZW50IHRoZSBudW1iZXJzLCBidXQgYXJlIG5vdAogIHVzaW5nIGEgemVybyBiYXNlIGxpbmUgLS0gdGhlIGJhciBmb3IgT2JhbWEncyA3OSAlIHdob3VsZCBiZSBuZWFybHkKICB0d2ljZSBhcyBsb25nIGFzIHRoZSBiYXIgZm9yIFRydW1wJ3MgNDAgJS4KKiBUaGUgYmx1ZSBhbmQgcmVkIGJhcnMgYXJlIGRpc3RyYWN0aW5nIGF0IGJlc3QsIG1pc2xlYWRpbmcgYXQKICB3b3JzdC4gVGhleSBjb3VsZCByZXByZXNlbnQgdGhlIGNvbXBsZW1lbnRhcnkgcHJvcG9ydGlvbiwgYnV0IHRoZQogIGxlbmd0aHMgYXJlIHdyb25nIHJlbGF0aXZlIHRvIHRoZSB3aGl0ZSBiYXJzIGFuZCB0byBlYWNoIG90aGVyLgoqIFRoZSBwbGFjZW1lbnQgb2YgdGhlIEdNQSBsb2dvIGFkZHMgdG8gdGhlIGNvbmZ1c2lvbi4KCkEgc2ltcGxlIGJhciBjaGFydCB3aXRoIGEgemVybyBiYXNlIGxpbmU6CgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpkIDwtIGRhdGEuZnJhbWUocHJlcyA9IGMoIk9iYW1hIiwgIkNhcnRlciIsICJDbGludG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJHLlcuIEJ1c2giLCAiUmVhZ2FuIiwgIkcuSC5XIEJ1c2giLCAiVHJ1bXAiKSwKICAgICAgICAgICAgICAgIGFwcHIgPSBjKDc5LCA3OCwgNjgsIDY1LCA1OCwgNTYsIDQwKSwKICAgICAgICAgICAgICAgIHBhcnR5ID0gYygiRCIsICJEIiwgIkQiLCAiUiIsICJSIiwgIlIiLCAiUiIpLAogICAgICAgICAgICAgICAgeWVhciA9IGMoMjAwOSwgMTk3NywgMTk5MywgMjAwMSwgMTk4MSwgMTk4OSwgMjAxNykpCmQgPC0gbXV0YXRlKGQsIHByZXMgPSByZW9yZGVyKHByZXMsIGFwcHIpKQoKcCA8LSBnZ3Bsb3QoZCwgYWVzKHggPSBwcmVzLCB5ID0gYXBwciwgZmlsbCA9IHBhcnR5KSkgKwogICAgZ2VvbV9jb2woKSArIGNvb3JkX2ZsaXAoKQpwCmBgYAoKKiBJbiByZWNlbnQgeWVhcnMgaXQgaGFzIGJlY29tZSBjb21tb24gdG8gcmVwcmVzZW50IERlbW9jcmF0cyBhcyBibHVlLAogIFJlcHVibGljYW5zIGFzIHJlZC4KCiogVGhlIGRlZmF1bHQgY29sb3JzIGFyZSBjbG9zZSB0byByZWQgYW5kIGJsdWUsIGJ1dCB0aGVpciB1c2UgaXMKICBvcHBvc2l0ZSB0byBjdXJyZW50IGNvbnZlbnRpb24uCgpUaGlzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIGBzY2FsZV9maWxsX21hbnVhbGA6CgpgYGB7cn0KcCArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoUiA9ICJyZWQiLCBEID0gImJsdWUiKSkKYGBgCgoqIFB1cmUgY29sb3JzIGFyZSB2ZXJ5IGludGVuc2Ugd2hlbiB1c2VkIGluIGxhcmdlciBhcmVhcy4KCiogUHVyZSB3YXJtIGNvbG9ycywgbGlrZSByZWQsIGFyZSBtb3JlIGludGVuc2UgdGhhbiBwdXJlIGNvb2wgY29sb3JzLAogIGxpa2UgYmx1ZS4KCldlIGNhbiByZWR1Y2UgdGhlIHNhdHVyYXRpb24gYW5kIHRoZSB2YWx1ZSBpbiB0aGUgSFNWIGNvbG9yCnJlcHJlc2VudGF0aW9uIHRvIG9idGFpbiBsZXNzIGludGVuc2UgY29sb3JzOyB0aGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4KcmVkIHN0YXRlL2JsdWUgc3RhdGUgbWFwczoKCmBgYHtyfQpteXJlZCA8LSBoc3YoMCwgMC42LCAwLjgpCm15Ymx1ZSA8LSBoc3YoMiAvIDMsIDAuNiwgMC44KQpwICsgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYyhSID0gbXlyZWQsIEQgPSBteWJsdWUpKQpgYGAKClNvbWUgZW5oYW5jZW1lbnRzOgpgYGB7cn0KcCArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoUiA9IG15cmVkLCBEID0gbXlibHVlKSkgKyB0aGVtZV92b2lkKCkgKwogICAgZ2VvbV90ZXh0KGFlcyh5ID0gMywgbGFiZWwgPSBwcmVzKSwKICAgICAgICAgICAgICBzaXplID0gOCwgaGp1c3QgPSAibGVmdCIsIGNvbG9yID0gIndoaXRlIikgKwogICAgZ2VvbV90ZXh0KGFlcyh5ID0gYXBwciAtIDMsIGxhYmVsID0gYXBwciksCiAgICAgICAgICAgICAgc2l6ZSA9IDgsIGhqdXN0ID0gInJpZ2h0IiwgY29sb3IgPSAid2hpdGUiKQpgYGAKClNvbWUgbm90ZXM6CgoqIEEgZG90IGNoYXJ0IGlzIGEgcmVhc29uYWJsZSBhbHRlcm5hdGl2ZSBpbiB0aGlzIGNhc2UuCgoqIEhvcml6b250YWwgYmFyIGNoYXJ0cyBhcmUgdGhlIG5vcm0gaW4gdGhlc2Ugc2V0dGluZ3Mgc2luY2UgdGhleQogIGFsbG93IGhvcml6b250YWwgbGFiZWxzIG9mIHJlYXNvbmFibGUgc2l6ZS4KCiogUGFydHkgaXMgYSBub21pbmFsIG9yIGNhdGVnb3JpY2FsIGF0dHJpYnV0ZSwgbm90IGEgbnVtZXJpYyBhdHRyaWJ1dGUuCgoKIyMgMi4gRVBBIEZ1ZWwgRWNvbm9teSBEYXRhCgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShyZWFkcikKaWYgKCEgZmlsZS5leGlzdHMoInZlaGljbGVzLmNzdi56aXAiKSB8fAoJZmlsZS5tdGltZSgidmVoaWNsZXMuY3N2LnppcCIpICsgbW9udGhzKDYpIDwgbm93KCkpCiAgICBkb3dubG9hZC5maWxlKCJodHRwOi8vd3d3LnN0YXQudWlvd2EuZWR1L35sdWtlL2RhdGEvdmVoaWNsZXMuY3N2LnppcCIsCiAgICAgICAgICAgICAgICAgICJ2ZWhpY2xlcy5jc3YuemlwIikKbmV3bXBnIDwtIHJlYWRfY3N2KCJ2ZWhpY2xlcy5jc3YuemlwIiwgZ3Vlc3NfbWF4ID0gMTAwMDAwKQpgYGAKCkZyb20gdGhlIFtkb2N1bWVudGF0aW9uIGZvciB0aGUKZGF0YV0oaHR0cHM6Ly93d3cuZnVlbGVjb25vbXkuZ292L2ZlZy93cy9pbmRleC5zaHRtbCN2ZWhpY2xlKSB0aGUKYXBwcm9wcmlhdGUgdmFyaWFibGVzIHNlZW0gdG8gYmU6CgogICogYGhpZ2h3YXkwOGAgY29ycmVzcG9uZHMgdG8gYGh3YXlgIGluIGBtcGdgOwogICogYGN5bGluZGVyc2AgY29ycmVzcG9uZHMgdG8gYGN5bGAgaW4gYG1wZ2A7CiAgKiBgZGlzcGxgIGNvcnJlc3BvbmRzIHRvIGBkaXNwbGAgaW4gYG1wZ2A7CiAgKiBgZnVlbFR5cGUxYCByZXByZXNlbnRzIHRoZSBwcmltYXJ5IGZ1ZWwgdHlwZSwgYGZsYCBpbiBgbXBnYC4KClRoZSBwcmltYXJ5IGZ1ZWwgdHlwZSBjb3VudHMgYXJlCgpgYGB7ciwgbWVzc2FnZSA9IEZBTFNFfQpsaWJyYXJ5KGRwbHlyKQp0YmwgPC0gY291bnQobmV3bXBnLCBmdWVsVHlwZTEpCmtibCA8LSBrbml0cjo6a2FibGUodGJsLCBmb3JtYXQgPSAiaHRtbCIpCmthYmxlRXh0cmE6OmthYmxlX3N0eWxpbmcoa2JsLCBmdWxsX3dpZHRoID0gRkFMU0UpCmBgYAoKQSBiYXIgY2hhcnQgb2YgdGhlc2UgbnVtYmVyczoKCmBgYHtyfQp0aG0gPC0gdGhlbWVfbWluaW1hbCgpICsgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpKQpnZ3Bsb3QodGJsLCBhZXMoeCA9IG4sIHkgPSByZW9yZGVyKGZ1ZWxUeXBlMSwgbikpKSArCiAgICBnZW9tX2NvbCgpICsKICAgIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBleHBhbnNpb24obXVsdCA9IGMoMCwgLjEpKSkgKwogICAgdGhtICsKICAgIHlsYWIoTlVMTCkKYGBgCgpSZWd1bGFyIGdhcyBpcyB0aGUgZG9taW5hbnQgZnVlbCB0eXBlIG92ZXIgYWxsIHllYXJzLCB3aXRoIHByZW1pdW0gc2Vjb25kLgpBbGwgb3RoZXIgZnVlbCB0eXBlcywgaW5jbHVkaW5nIGVsZWN0cmljaXR5LCBtYWtlIHVwIGEgc21hbGwgZnJhY3Rpb24uCgoKIyMgMy4gRnVlbCBUeXBlIE92ZXIgdGhlIFllYXJzCgpBIGZpbGxlZCBiYXIgY2hhcnQgc2hvd3MgY2hhbmdlcyBpbiB0aGUgcHJpbWFyeSBmdWVsIHR5cGUgdXNlZCBvdmVyCnRoZSB5ZWFyczoKICAKYGBge3J9Cm5ld21wZzIgPC0gZmlsdGVyKG5ld21wZywgeWVhciA8PSAyMDIxKSAlPiUKICAgIG11dGF0ZSh5ZWFyID0gZmFjdG9yKHllYXIpKQpnZ3Bsb3QobmV3bXBnMiwgYWVzKHkgPSB5ZWFyLCBmaWxsID0gZnVlbFR5cGUxKSkgKwogICAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsKICAgIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArCiAgICBsYWJzKHggPSAiUHJvcG9ydGlvbiIsIHkgPSBOVUxMKQpgYGAKClJlZ3VsYXIgZ2FzIHdhcyB0aGUgcHJlZG9taW5hbnQgZnVlbCB0eXBlIGluIHRoZSBtaWQgMTk4MHMsIGJ1dApwcmVtaXVtJ3Mgc2hhcmUgaGFzIGdyYWR1YWxseSBpbmNyZWFzZWQgdG8gdGhlIHBvaW50IHdoZXJlIGFsbW9zdCBhcwptYW55IG1vZGVscyB1c2UgcHJlbWl1bSBhcyByZWd1bGFyLiBEaWVzZWwncyBwb3B1bGFyaXR5IGRlY2xpbmVkIGVhcmx5CmFuZCBoYWQgYSBzbWFsbCByZXN1cmdlbmNlIHJlY2VudGx5LiBUaGUgbWFya2V0IHNoYXJlIGZvciBlbGVjdHJpY2l0eQppcyBzdGlsbCBxdWl0ZSBzbWFsbCBidXQgaXMgZ3Jvd2luZy4KCgojIyA0LiBIaWdod2F5IEZ1ZWwgRWNvbm9teSBPdmVyIHRoZSBZZWFycwoKYGBge3J9Cm5ld21wZzMgPC0gZmlsdGVyKG5ld21wZywgeWVhciA8PSAyMDIxLCB5ZWFyID49IDIwMDApICU+JQogICAgbXV0YXRlKHllYXIgPSBmYWN0b3IoeWVhcikpCmFscGhhIDwtIDAuMgpzaXplIDwtIDAuMwpgYGAKCkEgc3RyaXAgY2hhcnQgaXMgYSB1c2VmdWwgd2F5IHRvIGxvb2sgYXQgdGhlIGZ1bGwgZGF0YSBmb3IgYSBudW1lcmljCnZhcmlhYmxlIGF0IHNldmVyYWwgZGlmZmVyZW50IGxldmVscyBvZiBhIGRpc2NyZXRlIHZhcmlhYmxlLCBidXQgc29tZQp0dW5pbmcgaXMgbmVlZGVkIGZvciBsYXJnZXIgZGF0YSBzZXRzLiBGb3IgZXhhbWluaW5nIDIyIHllYXJzIG9mCmhpZ2h3YXkgZ2FzIG1pbGVhZ2UgZGF0YSBmcm9tIHRoZSBFUEEgZGF0YSBzZXQgdXNpbmcKYGFscGhhYCA9IGByIGFscGhhYCBhbmQgYHNpemVgID0gYHIgc2l6ZWAgYWxvbmcgd2l0aCBqaXR0ZXJpbmcgc2VlbXMgdG8Kd29yayByZWFzb25hYmx5IHdlbGw6CgkKYGBge3J9CmdncGxvdChuZXdtcGczLCBhZXMoeCA9IGhpZ2h3YXkwOCwgeSA9IHllYXIpKSArCiAgICBnZW9tX3BvaW50KHBvc2l0aW9uID0gImppdHRlciIsIHNpemUgPSBzaXplLCBhbHBoYSA9IGFscGhhKSArCiAgICB5bGFiKE5VTEwpICsKICAgIHRobQpgYGAKCk92ZXIgdGltZSB0aGUgaGlnaHdheSBnYXMgbWlsZWFnZSBkaXN0cmlidXRpb25zIGFyZSBtb3ZpbmcgdXB3YXJkCmEgbGl0dGxlIGJpdCwgd2l0aCB0aGUgdXBwZXIgdGFpbHMgYmVjb21pbmcgZ3JhZHVhbGx5IGxvbmdlciBhbmQgYW4KaW5jcmVhc2luZyBudW1iZXIgb2YgdmVyeSBoaWdoIGVmZmljaWVuY3kgbW9kZWxzIChtb3N0bHkgZWxlY3RyaWMpLgoKPCEtLQpMb2NhbCBWYXJpYWJsZXM6IAptb2RlOiBwb2x5LW1hcmtkb3duK1IKbW9kZTogZmx5c3BlbGwKRW5kOgotLT4K