This is the documentation for the package at prettydates

A beginner level knowledge of R is assumed.

Totally new to R? Some resources are cited at the bottom of the page. Also if you have any questions about this or any issues with getting or using the package, feel free to reach me at my twitter

Package can be installed using install_github('ebinabo/prettydates')

Load the Libaries

  library(prettydates)
  library(purrr) # map functions
  library(knitr) # to use the kable function for pretty tables

The library takes in dates in Date, POSIXct, POSIXt, etc formats and prints them to the screen in a more easily readable format.

These are particularly useful for creating documents where you might want the date out in full, so they could be easily read out or skimmed through.

Let’s list out all the functions currently listed in the package…

Some of the prefixes and suffixes used and their descriptions for a better overview;

Usage

Functions can be used on different classes of objects including;

There is also the as_ordinal() function which is used alongside the above functions. It parses the date to an ordinal format eg. “Monday, December 31st, 2018” instead of “Monday, December 31st, 2018” if you just ran long_dt12_us_w(()

Here are some examples

Single Date or Datetime object

long_date(Sys.Date())
long_dt12_us(Sys.time()) %>% as_ordinal()

Vector of Dates or Datetime objects

seq_date <- seq.Date(Sys.Date()-70, Sys.Date(), 7)
short_date(seq_date)

times <- c(Sys.time(), Sys.time()-1e07, Sys.time()-2e07, Sys.time()-3e07, Sys.time()-4e07)
times <- short_dt24_us(times)

times

map_chr(times, as_ordinal) # explained later on in tutorial

Column of Dates or Datetime objects

Lets create a sample dataframe showing different orders made on different days

order_id <- paste("Order", 1:10, sep = " ")
order_dates <- seq.Date(Sys.Date()-70, Sys.Date(), 1)
order_dates <- sample(order_dates, 10)
order_history <- as.data.frame(order_dates)
row.names(order_history) <- order_id
names(order_history) <- "Date"
kable(order_history)

Now let’s use one of the funtions from prettydates to change the display rendered. The time of order is set to a default 12:00:00 AM because we’re using a sample of dates

order_history$Date <- short_dt12_us_w(order_history$Date)
kable(order_history)

Column of Dates or Datetime objects in a list

For this we’ll be using the map() function from the purrr package. map() takes in two arguments, map(.x, .f)

.x is a list or vector .f is the function to be applied to the individual elements

order_history_1 <- order_history
order_history_1$Date <- map(order_history_1$Date, long_day_month)
order_history_1$Date <- map(order_history_1$Date, ~as_ordinal(.x))
kable(order_history_1)

Notice that while using map(), two different syntaxes are used. This is because, as_ordinal() is not a mapper function like all the other functions so we need a ~ (pronounced tilde) to tell r that for all the elements in order_history_1$Date also represented as .x, call as_ordinal.

However, it can also be used as without them :). This is something you could try if you have a map() function that isn’t working.

map() always returns a list, to return a vector use map_chr() instead.

Resources

Some useful resources are cited below to help you grasp some of these functions better

https://www.datacamp.com/courses/free-introduction-to-r for an introduction to R

https://jennybc.github.io/purrr-tutorial for a purrr tutorial

https://www.datacamp.com/courses/intermediate-functional-programming-with-purrr for creating mappers

All the functions in action

Here are what all the functions should return if used on the current date

todays_date <- Sys.Date()
current_time <- Sys.time()

long_date(todays_date) #1
long_date_us(todays_date) #2
long_date_us_w(todays_date) #3
long_date_w(todays_date) #4
long_day_month(todays_date) #5
long_day_month_dt12(current_time) #6
long_day_month_dt12_us(current_time) #7
long_day_month_dt12_us_w(current_time) #8
long_day_month_dt12_w(current_time) #9
long_day_month_dt24(current_time) #10
long_day_month_dt24_us(current_time) #11
long_day_month_dt24_us_w(current_time) #12
long_day_month_us(todays_date) #13
long_day_month_us_w(todays_date) #14
long_day_month_w(current_time) #15
long_dt12(current_time) #16
long_dt12_us(current_time) #17
long_dt12_us_w(current_time) #18
long_dt12_w(current_time) #19
long_dt24(current_time) #20
long_dt24_us(current_time) #21
long_dt24_us_w(current_time) #22
long_dt24_w(current_time) #23

short_date(todays_date) #24
short_date_us(todays_date) #25
short_date_us_w(todays_date) #26
short_date_w(todays_date) #27
short_day_month(todays_date) #28
short_day_month_dt12(current_time) #29
short_day_month_dt12_us(current_time) #30
short_day_month_dt12_us_w(current_time) #31
short_day_month_dt12_w(current_time) #32
short_day_month_dt24(current_time) #33
short_day_month_dt24_us(current_time) #34
short_day_month_dt24_us_w(current_time) #35
short_day_month_us(todays_date) #36
short_day_month_us_w(todays_date) #37
short_day_month_w(current_time) #38
short_dt12(current_time) #39
short_dt12_us(current_time) #40
short_dt12_us_w(current_time) #41
short_dt12_w(current_time) #42
short_dt24(current_time) #43
short_dt24_us(current_time) #44
short_dt24_us_w(current_time) #45
short_dt24_w(current_time) #46

long_date(todays_date) %>% as_ordinal() #47
long_date_us(todays_date) %>% as_ordinal() #48
long_date_us_w(todays_date) %>% as_ordinal() #49
long_date_w(todays_date) %>% as_ordinal() #50
long_day_month(todays_date) %>% as_ordinal() #51
long_day_month_dt12(current_time) %>% as_ordinal() #52
long_day_month_dt12_us(current_time) %>% as_ordinal() #53
long_day_month_dt12_us_w(current_time) %>% as_ordinal() #54
long_day_month_dt12_w(current_time) %>% as_ordinal() #55
long_day_month_dt24(current_time) %>% as_ordinal() #56
long_day_month_dt24_us(current_time) %>% as_ordinal() #57
long_day_month_dt24_us_w(current_time) %>% as_ordinal() #58
long_day_month_us(todays_date) %>% as_ordinal() #59
long_day_month_us_w(todays_date) %>% as_ordinal() #60
long_day_month_w(current_time) %>% as_ordinal() #61
long_dt12(current_time) %>% as_ordinal() #62
long_dt12_us(current_time) %>% as_ordinal() #63
long_dt12_us_w(current_time) %>% as_ordinal() #64
long_dt12_w(current_time) %>% as_ordinal() #65
long_dt24(current_time) %>% as_ordinal() #66
long_dt24_us(current_time) %>% as_ordinal() #67
long_dt24_us_w(current_time) %>% as_ordinal() #68
long_dt24_w(current_time) %>% as_ordinal() #69

short_date(todays_date) %>% as_ordinal() #70
short_date_us(todays_date) %>% as_ordinal() #71
short_date_us_w(todays_date) %>% as_ordinal() #72
short_date_w(todays_date) %>% as_ordinal() #73
short_day_month(todays_date) %>% as_ordinal() #74
short_day_month_dt12(current_time) %>% as_ordinal() #75
short_day_month_dt12_us(current_time) %>% as_ordinal() #76
short_day_month_dt12_us_w(current_time) %>% as_ordinal() #77
short_day_month_dt12_w(current_time) %>% as_ordinal() #78
short_day_month_dt24(current_time) %>% as_ordinal() #79
short_day_month_dt24_us(current_time) %>% as_ordinal() #80
short_day_month_dt24_us_w(current_time) %>% as_ordinal() #81
short_day_month_us(todays_date) %>% as_ordinal() #82
short_day_month_us_w(todays_date) %>% as_ordinal() #83
short_day_month_w(current_time) %>% as_ordinal() #84
short_dt12(current_time) %>% as_ordinal() #85
short_dt12_us(current_time) %>% as_ordinal() #86
short_dt12_us_w(current_time) %>% as_ordinal() #87
short_dt12_w(current_time) %>% as_ordinal() #88
short_dt24(current_time) %>% as_ordinal() #89
short_dt24_us(current_time) %>% as_ordinal() #90
short_dt24_us_w(current_time) %>% as_ordinal() #91
short_dt24_w(current_time) %>% as_ordinal() #92
LS0tDQp0aXRsZTogInByZXR0eWRhdGVzIg0KYXV0aG9yOiAiZWJpbmFibyINCmRhdGU6ICJEZWNlbWJlciAzMSwgMjAxOCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCg0KVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHBhY2thZ2UgYXQgW3ByZXR0eWRhdGVzXShodHRwczovL2dpdGh1Yi5jb20vZWJpbmFiby9wcmV0dHlkYXRlcykNCg0KQSBiZWdpbm5lciBsZXZlbCBrbm93bGVkZ2Ugb2YgUiBpcyBhc3N1bWVkLg0KDQpUb3RhbGx5IG5ldyB0byBSPyBTb21lIHJlc291cmNlcyBhcmUgY2l0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZS4gQWxzbyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMgb3IgYW55IGlzc3VlcyB3aXRoIGdldHRpbmcgb3IgdXNpbmcgdGhlIHBhY2thZ2UsIGZlZWwgZnJlZSB0byByZWFjaCBtZSBhdCBbbXkgdHdpdHRlcl0oaHR0cHM6Ly93d3cudHdpdHRlci5jb20va2luZ25hbWVkam9obm55KQ0KDQpQYWNrYWdlIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgYGluc3RhbGxfZ2l0aHViKCdlYmluYWJvL3ByZXR0eWRhdGVzJylgDQoNCg0KIyMgTG9hZCB0aGUgTGliYXJpZXMNCg0KDQpgYGB7ciBsaWJyYXJpZXMsIG1lc3NhZ2U9RkFMU0V9DQogIGxpYnJhcnkocHJldHR5ZGF0ZXMpDQogIGxpYnJhcnkocHVycnIpICMgbWFwIGZ1bmN0aW9ucw0KICBsaWJyYXJ5KGtuaXRyKSAjIHRvIHVzZSB0aGUga2FibGUgZnVuY3Rpb24gZm9yIHByZXR0eSB0YWJsZXMNCmBgYA0KDQpUaGUgbGlicmFyeSB0YWtlcyBpbiBkYXRlcyBpbiBgRGF0ZWAsIGBQT1NJWGN0YCwgYFBPU0lYdGAsIGV0YyBmb3JtYXRzIGFuZCBwcmludHMgdGhlbSB0byB0aGUgc2NyZWVuIGluIGEgbW9yZSBlYXNpbHkgcmVhZGFibGUgZm9ybWF0Lg0KDQpUaGVzZSBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3JlYXRpbmcgZG9jdW1lbnRzIHdoZXJlIHlvdSBtaWdodCB3YW50IHRoZSBkYXRlIG91dCBpbiBmdWxsLCBzbyB0aGV5IGNvdWxkIGJlIGVhc2lseSByZWFkIG91dCBvciBza2ltbWVkIHRocm91Z2guDQoNCkxldCdzIGxpc3Qgb3V0IGFsbCB0aGUgZnVuY3Rpb25zIGN1cnJlbnRseSBsaXN0ZWQgaW4gdGhlIHBhY2thZ2UuLi4NCg0KU29tZSBvZiB0aGUgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHVzZWQgYW5kIHRoZWlyIGRlc2NyaXB0aW9ucyBmb3IgYSBiZXR0ZXIgb3ZlcnZpZXc7DQoNCi0gYGxvbmdfYCBkYXRlcyB3aXRoIHdlZWtkYXksIG1vbnRoLCB5ZWFyIGluIGZ1bGwNCi0gYHNob3J0X2AgZGF0ZXMgd2l0aCB3ZWVrZGF5LCBtb250aCwgeWVhciBpbiBzaG9ydA0KLSBgX2RheV9tb250aF9gIGRpc3BsYXlpbmcgZGF5IGFuZCBtb250aCwgdy9vIHllYXINCi0gYF9kdDEyYCBkYXRldGltZSBpbiBhIDEyaHIgZm9ybWF0DQotIGBfZHQyNGAgZGF0ZXRpbWUgaW4gYSAyNGhyIGZvcm1hdA0KLSBgX3dgIGRhdGVzIGluY2x1ZGluZyBkYXkgb2Ygd2Vlaw0KLSBgX3VzYCBkYXRlcyBpbiB0aGUgYW1lcmljYW4gZm9ybWF0DQoNCmBgYHtyIGxzIGZ1bmN0aW9ucywgZWNobz1GQUxTRX0NCnVuY2xhc3MobHNmLnN0cihlbnZpciA9IGFzTmFtZXNwYWNlKCJwcmV0dHlkYXRlcyIpLCBhbGwgPSBUKSkNCmBgYA0KDQoNCiMjIFVzYWdlDQoNCg0KRnVuY3Rpb25zIGNhbiBiZSB1c2VkIG9uIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9iamVjdHMgaW5jbHVkaW5nOw0KDQotIGEgc2luZ2xlIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0DQotIGEgdmVjdG9yIG9mIGRhdGVzIG9yIGRhdGV0aW1lIG9iamVjdHMNCi0gYSBjb2x1bW4gb2YgZGF0ZXMgb3IgZGF0ZXRpbWUgb2JqZWN0cw0KLSBhIGNvbHVtbiBvZiBkYXRlcyBvciBkYXRldGltZSBvYmplY3RzIHdpdGhpbiBhIGxpc3QgdXNpbmcgdGhlIG1hcCgpIGZhbWlseSBvZiBmdW5jdGlvbnMNCg0KVGhlcmUgaXMgYWxzbyB0aGUgYGFzX29yZGluYWwoKWAgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBhbG9uZ3NpZGUgdGhlIGFib3ZlIGZ1bmN0aW9ucy4gSXQgcGFyc2VzIHRoZSBkYXRlIHRvIGFuIG9yZGluYWwgZm9ybWF0IGVnLiAgKiJNb25kYXksIERlY2VtYmVyIDMxc3QsIDIwMTgiKiAgaW5zdGVhZCBvZiAgKiJNb25kYXksIERlY2VtYmVyIDMxc3QsIDIwMTgiKiAgaWYgeW91IGp1c3QgcmFuIGBsb25nX2R0MTJfdXNfdygoKWANCg0KSGVyZSBhcmUgc29tZSBleGFtcGxlcw0KDQoNCiMjIyBTaW5nbGUgRGF0ZSBvciBEYXRldGltZSBvYmplY3QNCg0KDQpgYGB7ciBzaW5nbGV9DQpsb25nX2RhdGUoU3lzLkRhdGUoKSkNCmxvbmdfZHQxMl91cyhTeXMudGltZSgpKSAlPiUgYXNfb3JkaW5hbCgpDQpgYGANCg0KDQojIyMgVmVjdG9yIG9mIERhdGVzIG9yIERhdGV0aW1lIG9iamVjdHMNCg0KDQpgYGB7ciB2ZWN0b3J9DQpzZXFfZGF0ZSA8LSBzZXEuRGF0ZShTeXMuRGF0ZSgpLTcwLCBTeXMuRGF0ZSgpLCA3KQ0Kc2hvcnRfZGF0ZShzZXFfZGF0ZSkNCg0KdGltZXMgPC0gYyhTeXMudGltZSgpLCBTeXMudGltZSgpLTFlMDcsIFN5cy50aW1lKCktMmUwNywgU3lzLnRpbWUoKS0zZTA3LCBTeXMudGltZSgpLTRlMDcpDQp0aW1lcyA8LSBzaG9ydF9kdDI0X3VzKHRpbWVzKQ0KDQp0aW1lcw0KDQptYXBfY2hyKHRpbWVzLCBhc19vcmRpbmFsKSAjIGV4cGxhaW5lZCBsYXRlciBvbiBpbiB0dXRvcmlhbA0KYGBgDQoNCg0KIyMjIENvbHVtbiBvZiBEYXRlcyBvciBEYXRldGltZSBvYmplY3RzDQoNCg0KTGV0cyBjcmVhdGUgYSBzYW1wbGUgZGF0YWZyYW1lIHNob3dpbmcgZGlmZmVyZW50IG9yZGVycyBtYWRlIG9uIGRpZmZlcmVudCBkYXlzDQoNCmBgYHtyIGRmIGluaXR9DQpvcmRlcl9pZCA8LSBwYXN0ZSgiT3JkZXIiLCAxOjEwLCBzZXAgPSAiICIpDQpvcmRlcl9kYXRlcyA8LSBzZXEuRGF0ZShTeXMuRGF0ZSgpLTcwLCBTeXMuRGF0ZSgpLCAxKQ0Kb3JkZXJfZGF0ZXMgPC0gc2FtcGxlKG9yZGVyX2RhdGVzLCAxMCkNCm9yZGVyX2hpc3RvcnkgPC0gYXMuZGF0YS5mcmFtZShvcmRlcl9kYXRlcykNCnJvdy5uYW1lcyhvcmRlcl9oaXN0b3J5KSA8LSBvcmRlcl9pZA0KbmFtZXMob3JkZXJfaGlzdG9yeSkgPC0gIkRhdGUiDQprYWJsZShvcmRlcl9oaXN0b3J5KQ0KYGBgDQoNCk5vdyBsZXQncyB1c2Ugb25lIG9mIHRoZSBmdW50aW9ucyBmcm9tIHByZXR0eWRhdGVzIHRvIGNoYW5nZSB0aGUgZGlzcGxheSByZW5kZXJlZC4gVGhlIHRpbWUgb2Ygb3JkZXIgaXMgc2V0IHRvIGEgZGVmYXVsdCAxMjowMDowMCBBTSBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgc2FtcGxlIG9mIGRhdGVzDQoNCmBgYHtyIGRmIHcgcHJldHR5ZGF0ZXN9DQpvcmRlcl9oaXN0b3J5JERhdGUgPC0gc2hvcnRfZHQxMl91c193KG9yZGVyX2hpc3RvcnkkRGF0ZSkNCmthYmxlKG9yZGVyX2hpc3RvcnkpDQpgYGANCg0KDQojIyMgQ29sdW1uIG9mIERhdGVzIG9yIERhdGV0aW1lIG9iamVjdHMgaW4gYSBsaXN0DQoNCg0KRm9yIHRoaXMgd2UnbGwgYmUgdXNpbmcgdGhlIGBtYXAoKWAgZnVuY3Rpb24gZnJvbSB0aGUgcHVycnIgcGFja2FnZS4NCmBtYXAoKWAgdGFrZXMgaW4gdHdvIGFyZ3VtZW50cywgYG1hcCgueCwgLmYpYCANCg0KYC54YCBpcyBhIGxpc3Qgb3IgdmVjdG9yDQpgLmZgIGlzIHRoZSBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzIA0KDQpgYGB7ciBlcnJvcj1GfQ0Kb3JkZXJfaGlzdG9yeV8xIDwtIG9yZGVyX2hpc3RvcnkNCm9yZGVyX2hpc3RvcnlfMSREYXRlIDwtIG1hcChvcmRlcl9oaXN0b3J5XzEkRGF0ZSwgbG9uZ19kYXlfbW9udGgpDQpvcmRlcl9oaXN0b3J5XzEkRGF0ZSA8LSBtYXAob3JkZXJfaGlzdG9yeV8xJERhdGUsIH5hc19vcmRpbmFsKC54KSkNCmthYmxlKG9yZGVyX2hpc3RvcnlfMSkNCg0KYGBgDQoNCg0KTm90aWNlIHRoYXQgd2hpbGUgdXNpbmcgYG1hcCgpYCwgdHdvIGRpZmZlcmVudCBzeW50YXhlcyBhcmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlLCBgYXNfb3JkaW5hbCgpYCBpcyBub3QgYSBtYXBwZXIgZnVuY3Rpb24gbGlrZSBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyBzbyB3ZSBuZWVkIGEgYH5gICoocHJvbm91bmNlZCB0aWxkZSkqIHRvIHRlbGwgciB0aGF0IGZvciBhbGwgdGhlIGVsZW1lbnRzIGluIGBvcmRlcl9oaXN0b3J5XzEkRGF0ZWAgYWxzbyByZXByZXNlbnRlZCBhcyBgLnhgLCBjYWxsIGBhc19vcmRpbmFsYC4gDQoNCkhvd2V2ZXIsIGl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgd2l0aG91dCB0aGVtIDopLiBUaGlzIGlzIHNvbWV0aGluZyB5b3UgY291bGQgdHJ5IGlmIHlvdSBoYXZlIGEgYG1hcCgpYCBmdW5jdGlvbiB0aGF0IGlzbid0IHdvcmtpbmcuDQoNCmBtYXAoKWAgYWx3YXlzIHJldHVybnMgYSBsaXN0LCB0byByZXR1cm4gYSB2ZWN0b3IgdXNlIGBtYXBfY2hyKClgIGluc3RlYWQuDQoNCg0KIyMjIFJlc291cmNlcw0KDQoNClNvbWUgdXNlZnVsIHJlc291cmNlcyBhcmUgY2l0ZWQgYmVsb3cgdG8gaGVscCB5b3UgZ3Jhc3Agc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgYmV0dGVyDQoNCjxodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY291cnNlcy9mcmVlLWludHJvZHVjdGlvbi10by1yPiBmb3IgYW4gaW50cm9kdWN0aW9uIHRvIFINCg0KPGh0dHBzOi8vamVubnliYy5naXRodWIuaW8vcHVycnItdHV0b3JpYWw+IGZvciBhIHB1cnJyIHR1dG9yaWFsDQoNCjxodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY291cnNlcy9pbnRlcm1lZGlhdGUtZnVuY3Rpb25hbC1wcm9ncmFtbWluZy13aXRoLXB1cnJyPiBmb3IgY3JlYXRpbmcgbWFwcGVycw0KDQoNCiMjIyBBbGwgdGhlIGZ1bmN0aW9ucyBpbiBhY3Rpb24NCg0KDQpIZXJlIGFyZSB3aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gaWYgdXNlZCBvbiB0aGUgY3VycmVudCBkYXRlDQoNCmBgYHtyIGluIGFjdGlvbiwgZXJyb3I9Rn0NCnRvZGF5c19kYXRlIDwtIFN5cy5EYXRlKCkNCmN1cnJlbnRfdGltZSA8LSBTeXMudGltZSgpDQoNCmxvbmdfZGF0ZSh0b2RheXNfZGF0ZSkgIzENCmxvbmdfZGF0ZV91cyh0b2RheXNfZGF0ZSkgIzINCmxvbmdfZGF0ZV91c193KHRvZGF5c19kYXRlKSAjMw0KbG9uZ19kYXRlX3codG9kYXlzX2RhdGUpICM0DQpsb25nX2RheV9tb250aCh0b2RheXNfZGF0ZSkgIzUNCmxvbmdfZGF5X21vbnRoX2R0MTIoY3VycmVudF90aW1lKSAjNg0KbG9uZ19kYXlfbW9udGhfZHQxMl91cyhjdXJyZW50X3RpbWUpICM3DQpsb25nX2RheV9tb250aF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjOA0KbG9uZ19kYXlfbW9udGhfZHQxMl93KGN1cnJlbnRfdGltZSkgIzkNCmxvbmdfZGF5X21vbnRoX2R0MjQoY3VycmVudF90aW1lKSAjMTANCmxvbmdfZGF5X21vbnRoX2R0MjRfdXMoY3VycmVudF90aW1lKSAjMTENCmxvbmdfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICMxMg0KbG9uZ19kYXlfbW9udGhfdXModG9kYXlzX2RhdGUpICMxMw0KbG9uZ19kYXlfbW9udGhfdXNfdyh0b2RheXNfZGF0ZSkgIzE0DQpsb25nX2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgIzE1DQpsb25nX2R0MTIoY3VycmVudF90aW1lKSAjMTYNCmxvbmdfZHQxMl91cyhjdXJyZW50X3RpbWUpICMxNw0KbG9uZ19kdDEyX3VzX3coY3VycmVudF90aW1lKSAjMTgNCmxvbmdfZHQxMl93KGN1cnJlbnRfdGltZSkgIzE5DQpsb25nX2R0MjQoY3VycmVudF90aW1lKSAjMjANCmxvbmdfZHQyNF91cyhjdXJyZW50X3RpbWUpICMyMQ0KbG9uZ19kdDI0X3VzX3coY3VycmVudF90aW1lKSAjMjINCmxvbmdfZHQyNF93KGN1cnJlbnRfdGltZSkgIzIzDQoNCnNob3J0X2RhdGUodG9kYXlzX2RhdGUpICMyNA0Kc2hvcnRfZGF0ZV91cyh0b2RheXNfZGF0ZSkgIzI1DQpzaG9ydF9kYXRlX3VzX3codG9kYXlzX2RhdGUpICMyNg0Kc2hvcnRfZGF0ZV93KHRvZGF5c19kYXRlKSAjMjcNCnNob3J0X2RheV9tb250aCh0b2RheXNfZGF0ZSkgIzI4DQpzaG9ydF9kYXlfbW9udGhfZHQxMihjdXJyZW50X3RpbWUpICMyOQ0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXMoY3VycmVudF90aW1lKSAjMzANCnNob3J0X2RheV9tb250aF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjMzENCnNob3J0X2RheV9tb250aF9kdDEyX3coY3VycmVudF90aW1lKSAjMzINCnNob3J0X2RheV9tb250aF9kdDI0KGN1cnJlbnRfdGltZSkgIzMzDQpzaG9ydF9kYXlfbW9udGhfZHQyNF91cyhjdXJyZW50X3RpbWUpICMzNA0Kc2hvcnRfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICMzNQ0Kc2hvcnRfZGF5X21vbnRoX3VzKHRvZGF5c19kYXRlKSAjMzYNCnNob3J0X2RheV9tb250aF91c193KHRvZGF5c19kYXRlKSAjMzcNCnNob3J0X2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgIzM4DQpzaG9ydF9kdDEyKGN1cnJlbnRfdGltZSkgIzM5DQpzaG9ydF9kdDEyX3VzKGN1cnJlbnRfdGltZSkgIzQwDQpzaG9ydF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjNDENCnNob3J0X2R0MTJfdyhjdXJyZW50X3RpbWUpICM0Mg0Kc2hvcnRfZHQyNChjdXJyZW50X3RpbWUpICM0Mw0Kc2hvcnRfZHQyNF91cyhjdXJyZW50X3RpbWUpICM0NA0Kc2hvcnRfZHQyNF91c193KGN1cnJlbnRfdGltZSkgIzQ1DQpzaG9ydF9kdDI0X3coY3VycmVudF90aW1lKSAjNDYNCg0KbG9uZ19kYXRlKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM0Nw0KbG9uZ19kYXRlX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM0OA0KbG9uZ19kYXRlX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzQ5DQpsb25nX2RhdGVfdyh0b2RheXNfZGF0ZSkgJT4lIGFzX29yZGluYWwoKSAjNTANCmxvbmdfZGF5X21vbnRoKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM1MQ0KbG9uZ19kYXlfbW9udGhfZHQxMihjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzUyDQpsb25nX2RheV9tb250aF9kdDEyX3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNTMNCmxvbmdfZGF5X21vbnRoX2R0MTJfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU0DQpsb25nX2RheV9tb250aF9kdDEyX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM1NQ0KbG9uZ19kYXlfbW9udGhfZHQyNChjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU2DQpsb25nX2RheV9tb250aF9kdDI0X3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNTcNCmxvbmdfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU4DQpsb25nX2RheV9tb250aF91cyh0b2RheXNfZGF0ZSkgJT4lIGFzX29yZGluYWwoKSAjNTkNCmxvbmdfZGF5X21vbnRoX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzYwDQpsb25nX2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNjENCmxvbmdfZHQxMihjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzYyDQpsb25nX2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2Mw0KbG9uZ19kdDEyX3VzX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2NA0KbG9uZ19kdDEyX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2NQ0KbG9uZ19kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNjYNCmxvbmdfZHQyNF91cyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY3DQpsb25nX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY4DQpsb25nX2R0MjRfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY5DQoNCnNob3J0X2RhdGUodG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzcwDQpzaG9ydF9kYXRlX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3MQ0Kc2hvcnRfZGF0ZV91c193KHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3Mg0Kc2hvcnRfZGF0ZV93KHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3Mw0Kc2hvcnRfZGF5X21vbnRoKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3NA0Kc2hvcnRfZGF5X21vbnRoX2R0MTIoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM3NQ0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM3Ng0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzc3DQpzaG9ydF9kYXlfbW9udGhfZHQxMl93KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNzgNCnNob3J0X2RheV9tb250aF9kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNzkNCnNob3J0X2RheV9tb250aF9kdDI0X3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODANCnNob3J0X2RheV9tb250aF9kdDI0X3VzX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM4MQ0Kc2hvcnRfZGF5X21vbnRoX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM4Mg0Kc2hvcnRfZGF5X21vbnRoX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzgzDQpzaG9ydF9kYXlfbW9udGhfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzg0DQpzaG9ydF9kdDEyKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODUNCnNob3J0X2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM4Ng0Kc2hvcnRfZHQxMl91c193KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODcNCnNob3J0X2R0MTJfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzg4DQpzaG9ydF9kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODkNCnNob3J0X2R0MjRfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM5MA0Kc2hvcnRfZHQyNF91c193KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjOTENCnNob3J0X2R0MjRfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzkyDQpgYGANCg0KDQo=