library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages -------------------------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.3     v purrr   0.3.4
v tibble  3.0.4     v dplyr   1.0.2
v tidyr   1.1.2     v stringr 1.4.0
v readr   1.4.0     v forcats 0.5.0
-- Conflicts ----------------------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(DT)
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
library(trendyy)                # Package to access google search data
library(lubridate)               # Handles dates and times

Attaching package: 㤼㸱lubridate㤼㸲

The following objects are masked from 㤼㸱package:base㤼㸲:

    date, intersect, setdiff, union

INTEREST IN THE WORDS PSYCHOLOGIST VS PSYCHIATRIST

Interest in the Word Psychologist

In this analysis, we will find the interest in the words psychologist and psychiatrist over a period of time in the United States as well as do a comparison of the interest in the two words.

The data table below is a list of hits by the word psychologist. The table shows that September 13, 2020 received the most hits for the word.

psychologist <- trendy("psychologist")

psychologist %>% 
  glimpse()
List of 1
 $ :List of 7
  ..$ interest_over_time :'data.frame': 261 obs. of  7 variables:
  .. ..$ date    : POSIXct[1:261], format: "2016-02-14" "2016-02-21" ...
  .. ..$ hits    : int [1:261] 65 71 74 71 62 66 66 75 72 64 ...
  .. ..$ keyword : chr [1:261] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ geo     : chr [1:261] "world" "world" "world" "world" ...
  .. ..$ time    : chr [1:261] "today+5-y" "today+5-y" "today+5-y" "today+5-y" ...
  .. ..$ gprop   : chr [1:261] "web" "web" "web" "web" ...
  .. ..$ category: int [1:261] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ interest_by_country:'data.frame': 250 obs. of  5 variables:
  .. ..$ location: chr [1:250] "Australia" "South Africa" "Eswatini" "Ireland" ...
  .. ..$ hits    : chr [1:250] "100" "80" "" "50" ...
  .. ..$ keyword : chr [1:250] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ geo     : chr [1:250] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:250] "web" "web" "web" "web" ...
  ..$ interest_by_region : NULL
  ..$ interest_by_dma    :'data.frame': 306 obs. of  5 variables:
  .. ..$ location: chr [1:306] "Fresno-Visalia CA" "New York NY" "Miami-Ft. Lauderdale FL" "West Palm Beach-Ft. Pierce FL" ...
  .. ..$ hits    : int [1:306] 100 99 96 95 95 92 92 89 88 88 ...
  .. ..$ keyword : chr [1:306] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ geo     : chr [1:306] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:306] "web" "web" "web" "web" ...
  ..$ interest_by_city   :'data.frame': 61 obs. of  5 variables:
  .. ..$ location: chr [1:61] "Canberra" "Newcastle" "Sunshine Coast" "Melbourne" ...
  .. ..$ hits    : int [1:61] NA NA NA 100 100 98 NA 90 85 81 ...
  .. ..$ keyword : chr [1:61] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ geo     : chr [1:61] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:61] "web" "web" "web" "web" ...
  ..$ related_topics     :'data.frame': 36 obs. of  5 variables:
  .. ..$ subject       : chr [1:36] "100" "97" "9" "9" ...
  .. ..$ related_topics: chr [1:36] "top" "top" "top" "top" ...
  .. ..$ value         : chr [1:36] "Psychologist" "Psychology" "Psychiatrist" "Psychiatry" ...
  .. ..$ keyword       : chr [1:36] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ category      : int [1:36] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "reshapeLong")=List of 4
  ..$ related_queries    :'data.frame': 50 obs. of  5 variables:
  .. ..$ subject        : chr [1:50] "100" "67" "66" "64" ...
  .. ..$ related_queries: chr [1:50] "top" "top" "top" "top" ...
  .. ..$ value          : chr [1:50] "psychology" "clinical psychologist" "clinical" "psychiatrist" ...
  .. ..$ keyword        : chr [1:50] "psychologist" "psychologist" "psychologist" "psychologist" ...
  .. ..$ category       : int [1:50] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "reshapeLong")=List of 4
  ..- attr(*, "class")= chr [1:2] "gtrends" "list"
 - attr(*, "class")= chr "trendy"
psychologist %>% 
  get_interest() %>% 
  datatable()

The following graph shows interest in the word psychologist over time. You can see that throughout the course of time, interest in the word has remained relatively steady with little increase but this time also included some extreme lows.

psychologist %>%
  get_interest() %>% 
  ggplot(aes(x = date, y = hits)) +
  geom_line() +
  theme_minimal() +
  labs(title = "Internet Searches for Psychologist Over Time")

If we take a closer look at the word psychologist on a monthly basis we can see that interest peaks in September, most likely because that is when the Fall semester of college begins and students are deciding on majors, then it steadily drops off throughout the winter months.


psychologist %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%            # Create a new variable called month
  group_by(month) %>%                        # Combine months across weeks and years
  summarize(hits_per_month = mean(hits)) %>%      # Average number of searches for each month
  ggplot(aes(x = month, y = hits_per_month)) +    # graph it
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Internet Searches for Psychologist Over Time By Month")
`summarise()` ungrouping output (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

Below is a table of what states in the United States showed the most interest in the word psychologist over a period of time. Montana ranked 51 out of 51, which is unfortunate as we have some of the highest suicide rates in the nation.

psychologist_US <- trendy("psychologist", geo = "US", from = "2015-01-01", to = "2020-01-01")
psychologist_US %>%
  get_interest_region() %>% 
  datatable()

NA

Another table reveals which designated market area in the United States had the most interest in the word psychologist. Billings, Montana ranked 199 out of 210 total entries.

psychologist_US %>%
  get_interest_dma() %>% 
  datatable()

NA

Next we will take a look at how our northern neighbor, Canada, viewed the word psychologist and compare it to that of the United States monthly.

psychologist_CA <- trendy("psychologist", geo = "CA", from = "2015-01-01", to = "2020-01-01")
psychologist_countries <- trendy("psychologist", geo = c("US", "CA"), from = "2015-01-01", to = "2020-01-01")
psychologist_countries %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%          
  group_by(month, geo) %>%                              
  summarize(hits_per_month = mean(hits)) %>%           
  ggplot(aes(x = month, y = hits_per_month, color = geo)) +       
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Internet Searches for Psychologist Over Time, By Country")
`summarise()` regrouping output by 'month' (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

Interest in the word in the United States and Canada was pretty equivalent to each other.

Interest in Psychologist and Psychiatrist

Next we are going to compare the interest of the words psychologist and psychiatrist in the United States. In the graph below we can see that interest for both is relatively high throughout time. The word psychologist shows the more extreme highs and lows in interest compared to the word psychiatrist. The word psychologist takes an extreme dip in interest in the Spring of 2020 and again at the beginning of 2021. In the early Fall of 2020, there is an extreme increase in interest of the word as well.

psychiatrist <- trendy("psychiatrist")

psychiatrist %>% 
  glimpse()
List of 1
 $ :List of 7
  ..$ interest_over_time :'data.frame': 261 obs. of  7 variables:
  .. ..$ date    : POSIXct[1:261], format: "2016-02-14" "2016-02-21" ...
  .. ..$ hits    : int [1:261] 64 73 67 66 66 67 68 70 70 68 ...
  .. ..$ keyword : chr [1:261] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ geo     : chr [1:261] "world" "world" "world" "world" ...
  .. ..$ time    : chr [1:261] "today+5-y" "today+5-y" "today+5-y" "today+5-y" ...
  .. ..$ gprop   : chr [1:261] "web" "web" "web" "web" ...
  .. ..$ category: int [1:261] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ interest_by_country:'data.frame': 250 obs. of  5 variables:
  .. ..$ location: chr [1:250] "Australia" "United States" "South Africa" "Philippines" ...
  .. ..$ hits    : int [1:250] 100 86 65 63 60 NA NA 56 NA NA ...
  .. ..$ keyword : chr [1:250] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ geo     : chr [1:250] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:250] "web" "web" "web" "web" ...
  ..$ interest_by_region : NULL
  ..$ interest_by_dma    :'data.frame': 306 obs. of  5 variables:
  .. ..$ location: chr [1:306] "Bluefield-Beckley-Oak Hill WV" "West Palm Beach-Ft. Pierce FL" "Richmond-Petersburg VA" "Victoria TX" ...
  .. ..$ hits    : int [1:306] 100 92 91 87 84 83 82 81 81 78 ...
  .. ..$ keyword : chr [1:306] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ geo     : chr [1:306] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:306] "web" "web" "web" "web" ...
  ..$ interest_by_city   :'data.frame': 69 obs. of  5 variables:
  .. ..$ location: chr [1:69] "St. Louis" "Brisbane" "Pittsburgh" "Virginia Beach" ...
  .. ..$ hits    : int [1:69] NA 100 NA NA NA 94 NA NA 92 NA ...
  .. ..$ keyword : chr [1:69] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ geo     : chr [1:69] "world" "world" "world" "world" ...
  .. ..$ gprop   : chr [1:69] "web" "web" "web" "web" ...
  ..$ related_topics     :'data.frame': 31 obs. of  5 variables:
  .. ..$ subject       : chr [1:31] "100" "96" "18" "12" ...
  .. ..$ related_topics: chr [1:31] "top" "top" "top" "top" ...
  .. ..$ value         : chr [1:31] "Psychiatrist" "Psychiatry" "Physician" "Psychology" ...
  .. ..$ keyword       : chr [1:31] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ category      : int [1:31] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "reshapeLong")=List of 4
  ..$ related_queries    :'data.frame': 50 obs. of  5 variables:
  .. ..$ subject        : chr [1:50] "100" "95" "37" "35" ...
  .. ..$ related_queries: chr [1:50] "top" "top" "top" "top" ...
  .. ..$ value          : chr [1:50] "psychologist" "psychiatrist near me" "psychiatrist salary" "best psychiatrist" ...
  .. ..$ keyword        : chr [1:50] "psychiatrist" "psychiatrist" "psychiatrist" "psychiatrist" ...
  .. ..$ category       : int [1:50] 0 0 0 0 0 0 0 0 0 0 ...
  .. ..- attr(*, "reshapeLong")=List of 4
  ..- attr(*, "class")= chr [1:2] "gtrends" "list"
 - attr(*, "class")= chr "trendy"
psychologist_psychiatrist <- trendy(c("psychologist", "psychiatrist"), geo = "US")

psychologist_psychiatrist %>%
  get_interest() %>%
  ggplot(aes(x = date, y = hits, color = keyword)) +
  geom_line() +
  theme_minimal() +
  labs(title = "Google Searches for Psychologist and Psychiatrist Over Time in the United States")

Taking a closer look at the interest on a monthly time frame, we can see that the word psychologist had high interest in September and very low interest in July and December. The word psychiatrist shows peaked interest in January and during the months of August, September, and October. The interest is lower over the Summer months and in the month of December.

psychologist_psychiatrist %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%          
  group_by(month, keyword) %>%                              
  summarize(hits_per_month = mean(hits)) %>%           
  ggplot(aes(x = month, y = hits_per_month, color = keyword)) +       
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Internet Searches for Psychologist and Psychiatrist Over Time, By Month")
`summarise()` regrouping output by 'month' (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

psychologist_vs_psychiatrist <- trendy("Psychologist vs Psychiatrist", gprop = "images")
psychologist %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%          
  group_by(month) %>%                              
  summarize(hits_per_month = mean(hits)) %>%           
  ggplot(aes(x = month, y = hits_per_month)) +       
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Google Images Search for Psychogist By Month")
`summarise()` ungrouping output (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

psychiatrist %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%          
  group_by(month) %>%                              
  summarize(hits_per_month = mean(hits)) %>%           
  ggplot(aes(x = month, y = hits_per_month)) +       
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Google Images Search for Psychiatrist By Month")
`summarise()` ungrouping output (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

A quick Google Images search reveals the interest levels for psychologists are far higher than those for psychiatrist but that interest for both peaks in the latter half of the year.

psychologist_psychiatrist <- trendy(c("psychologist", "psychiatrist"), geo = "US", gprop = "images")
psychologist_psychiatrist %>%
  get_interest() %>% 
  mutate(month = month(date)) %>%          
  group_by(month, keyword) %>%                              
  summarize(hits_per_month = mean(hits)) %>%           
  ggplot(aes(x = month, y = hits_per_month, color = keyword)) +       
  geom_line() +
  scale_x_discrete(limits = c(1:12)) +
  theme_minimal() +
  labs(title = "Google Images Search for Psychologist and Psychiatrist Over Time, By Month")
`summarise()` regrouping output by 'month' (override with `.groups` argument)
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

LS0tDQp0aXRsZTogIk1pbm5pZSBCZWxsIC0gR29vZ2xlIFRyZW5kcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQpgYGB7ciB9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHRyZW5keXkpICAgICAgICAgICAgICAgICMgUGFja2FnZSB0byBhY2Nlc3MgZ29vZ2xlIHNlYXJjaCBkYXRhDQpsaWJyYXJ5KGx1YnJpZGF0ZSkgICAgICAgICAgICAgICAjIEhhbmRsZXMgZGF0ZXMgYW5kIHRpbWVzDQpgYGANCiMjIElOVEVSRVNUIElOIFRIRSBXT1JEUyBQU1lDSE9MT0dJU1QgVlMgUFNZQ0hJQVRSSVNUIA0KDQoNCiMjIEludGVyZXN0IGluIHRoZSBXb3JkIFBzeWNob2xvZ2lzdA0KDQpJbiB0aGlzIGFuYWx5c2lzLCB3ZSB3aWxsIGZpbmQgdGhlIGludGVyZXN0IGluIHRoZSB3b3JkcyBwc3ljaG9sb2dpc3QgYW5kIHBzeWNoaWF0cmlzdCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYXMgd2VsbCBhcyBkbyBhIGNvbXBhcmlzb24gb2YgdGhlIGludGVyZXN0IGluIHRoZSB0d28gd29yZHMuDQoNClRoZSBkYXRhIHRhYmxlIGJlbG93IGlzIGEgbGlzdCBvZiBoaXRzIGJ5IHRoZSB3b3JkIHBzeWNob2xvZ2lzdC4gVGhlIHRhYmxlIHNob3dzIHRoYXQgU2VwdGVtYmVyIDEzLCAyMDIwIHJlY2VpdmVkIHRoZSBtb3N0IGhpdHMgZm9yIHRoZSB3b3JkLg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3QgPC0gdHJlbmR5KCJwc3ljaG9sb2dpc3QiKQ0KDQpwc3ljaG9sb2dpc3QgJT4lIA0KICBnbGltcHNlKCkNCmBgYA0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3QgJT4lIA0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIGRhdGF0YWJsZSgpDQpgYGANCg0KVGhlIGZvbGxvd2luZyBncmFwaCBzaG93cyBpbnRlcmVzdCBpbiB0aGUgd29yZCBwc3ljaG9sb2dpc3Qgb3ZlciB0aW1lLiBZb3UgY2FuIHNlZSB0aGF0IHRocm91Z2hvdXQgdGhlIGNvdXJzZSBvZiB0aW1lLCBpbnRlcmVzdCBpbiB0aGUgd29yZCBoYXMgcmVtYWluZWQgcmVsYXRpdmVseSBzdGVhZHkgd2l0aCBsaXR0bGUgaW5jcmVhc2UgYnV0IHRoaXMgdGltZSBhbHNvIGluY2x1ZGVkIHNvbWUgZXh0cmVtZSBsb3dzLg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3QgJT4lDQogIGdldF9pbnRlcmVzdCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGF0ZSwgeSA9IGhpdHMpKSArDQogIGdlb21fbGluZSgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJJbnRlcm5ldCBTZWFyY2hlcyBmb3IgUHN5Y2hvbG9naXN0IE92ZXIgVGltZSIpDQpgYGANCklmIHdlIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgd29yZCBwc3ljaG9sb2dpc3Qgb24gYSBtb250aGx5IGJhc2lzIHdlIGNhbiBzZWUgdGhhdCBpbnRlcmVzdCBwZWFrcyBpbiBTZXB0ZW1iZXIsIG1vc3QgbGlrZWx5IGJlY2F1c2UgdGhhdCBpcyB3aGVuIHRoZSBGYWxsIHNlbWVzdGVyIG9mIGNvbGxlZ2UgYmVnaW5zIGFuZCBzdHVkZW50cyBhcmUgZGVjaWRpbmcgb24gbWFqb3JzLCB0aGVuIGl0IHN0ZWFkaWx5IGRyb3BzIG9mZiB0aHJvdWdob3V0IHRoZSB3aW50ZXIgbW9udGhzLg0KDQoNCmBgYHtyIH0NCg0KcHN5Y2hvbG9naXN0ICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKSAlPiUgICAgICAgICAgICAjIENyZWF0ZSBhIG5ldyB2YXJpYWJsZSBjYWxsZWQgbW9udGgNCiAgZ3JvdXBfYnkobW9udGgpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICMgQ29tYmluZSBtb250aHMgYWNyb3NzIHdlZWtzIGFuZCB5ZWFycw0KICBzdW1tYXJpemUoaGl0c19wZXJfbW9udGggPSBtZWFuKGhpdHMpKSAlPiUgICAgICAjIEF2ZXJhZ2UgbnVtYmVyIG9mIHNlYXJjaGVzIGZvciBlYWNoIG1vbnRoDQogIGdncGxvdChhZXMoeCA9IG1vbnRoLCB5ID0gaGl0c19wZXJfbW9udGgpKSArICAgICMgZ3JhcGggaXQNCiAgZ2VvbV9saW5lKCkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoMToxMikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJJbnRlcm5ldCBTZWFyY2hlcyBmb3IgUHN5Y2hvbG9naXN0IE92ZXIgVGltZSBCeSBNb250aCIpDQoNCmBgYA0KDQoNCg0KQmVsb3cgaXMgYSB0YWJsZSBvZiB3aGF0IHN0YXRlcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBzaG93ZWQgdGhlIG1vc3QgaW50ZXJlc3QgaW4gdGhlIHdvcmQgcHN5Y2hvbG9naXN0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZS4gTW9udGFuYSByYW5rZWQgNTEgb3V0IG9mIDUxLCB3aGljaCBpcyB1bmZvcnR1bmF0ZSBhcyB3ZSBoYXZlIHNvbWUgb2YgdGhlIGhpZ2hlc3Qgc3VpY2lkZSByYXRlcyBpbiB0aGUgbmF0aW9uLg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfVVMgPC0gdHJlbmR5KCJwc3ljaG9sb2dpc3QiLCBnZW8gPSAiVVMiLCBmcm9tID0gIjIwMTUtMDEtMDEiLCB0byA9ICIyMDIwLTAxLTAxIikNCmBgYA0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfVVMgJT4lDQogIGdldF9pbnRlcmVzdF9yZWdpb24oKSAlPiUgDQogIGRhdGF0YWJsZSgpDQoNCmBgYA0KDQpBbm90aGVyIHRhYmxlIHJldmVhbHMgd2hpY2ggZGVzaWduYXRlZCBtYXJrZXQgYXJlYSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBoYWQgdGhlIG1vc3QgaW50ZXJlc3QgaW4gdGhlIHdvcmQgcHN5Y2hvbG9naXN0LiBCaWxsaW5ncywgTW9udGFuYSByYW5rZWQgMTk5IG91dCBvZiAyMTAgdG90YWwgZW50cmllcy4NCg0KYGBge3IgfQ0KcHN5Y2hvbG9naXN0X1VTICU+JQ0KICBnZXRfaW50ZXJlc3RfZG1hKCkgJT4lIA0KICBkYXRhdGFibGUoKQ0KDQpgYGANCg0KDQpOZXh0IHdlIHdpbGwgdGFrZSBhIGxvb2sgYXQgaG93IG91ciBub3J0aGVybiBuZWlnaGJvciwgQ2FuYWRhLCB2aWV3ZWQgdGhlIHdvcmQgcHN5Y2hvbG9naXN0IGFuZCBjb21wYXJlIGl0IHRvIHRoYXQgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgbW9udGhseS4NCg0KYGBge3IgfQ0KcHN5Y2hvbG9naXN0X0NBIDwtIHRyZW5keSgicHN5Y2hvbG9naXN0IiwgZ2VvID0gIkNBIiwgZnJvbSA9ICIyMDE1LTAxLTAxIiwgdG8gPSAiMjAyMC0wMS0wMSIpDQpgYGANCg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfY291bnRyaWVzIDwtIHRyZW5keSgicHN5Y2hvbG9naXN0IiwgZ2VvID0gYygiVVMiLCAiQ0EiKSwgZnJvbSA9ICIyMDE1LTAxLTAxIiwgdG8gPSAiMjAyMC0wMS0wMSIpDQpgYGANCg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfY291bnRyaWVzICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKSAlPiUgICAgICAgICAgDQogIGdyb3VwX2J5KG1vbnRoLCBnZW8pICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBzdW1tYXJpemUoaGl0c19wZXJfbW9udGggPSBtZWFuKGhpdHMpKSAlPiUgICAgICAgICAgIA0KICBnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IGhpdHNfcGVyX21vbnRoLCBjb2xvciA9IGdlbykpICsgICAgICAgDQogIGdlb21fbGluZSgpICsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKDE6MTIpKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAiSW50ZXJuZXQgU2VhcmNoZXMgZm9yIFBzeWNob2xvZ2lzdCBPdmVyIFRpbWUsIEJ5IENvdW50cnkiKQ0KDQpgYGANCkludGVyZXN0IGluIHRoZSB3b3JkIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBDYW5hZGEgd2FzIHByZXR0eSBlcXVpdmFsZW50IHRvIGVhY2ggb3RoZXIuDQoNCiMjIEludGVyZXN0IGluIFBzeWNob2xvZ2lzdCBhbmQgUHN5Y2hpYXRyaXN0DQoNCk5leHQgd2UgYXJlIGdvaW5nIHRvIGNvbXBhcmUgdGhlIGludGVyZXN0IG9mIHRoZSB3b3JkcyBwc3ljaG9sb2dpc3QgYW5kIHBzeWNoaWF0cmlzdCBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gSW4gdGhlIGdyYXBoIGJlbG93IHdlIGNhbiBzZWUgdGhhdCBpbnRlcmVzdCBmb3IgYm90aCBpcyByZWxhdGl2ZWx5IGhpZ2ggdGhyb3VnaG91dCB0aW1lLiBUaGUgd29yZCBwc3ljaG9sb2dpc3Qgc2hvd3MgdGhlIG1vcmUgZXh0cmVtZSBoaWdocyBhbmQgbG93cyBpbiBpbnRlcmVzdCBjb21wYXJlZCB0byB0aGUgd29yZCBwc3ljaGlhdHJpc3QuIFRoZSB3b3JkIHBzeWNob2xvZ2lzdCB0YWtlcyBhbiBleHRyZW1lIGRpcCBpbiBpbnRlcmVzdCBpbiB0aGUgU3ByaW5nIG9mIDIwMjAgYW5kIGFnYWluIGF0IHRoZSBiZWdpbm5pbmcgb2YgMjAyMS4gSW4gdGhlIGVhcmx5IEZhbGwgb2YgMjAyMCwgdGhlcmUgaXMgYW4gZXh0cmVtZSBpbmNyZWFzZSBpbiBpbnRlcmVzdCBvZiB0aGUgd29yZCBhcyB3ZWxsLg0KDQoNCmBgYHtyIH0NCnBzeWNoaWF0cmlzdCA8LSB0cmVuZHkoInBzeWNoaWF0cmlzdCIpDQoNCnBzeWNoaWF0cmlzdCAlPiUgDQogIGdsaW1wc2UoKQ0KYGBgDQoNCg0KYGBge3IgfQ0KcHN5Y2hvbG9naXN0X3BzeWNoaWF0cmlzdCA8LSB0cmVuZHkoYygicHN5Y2hvbG9naXN0IiwgInBzeWNoaWF0cmlzdCIpLCBnZW8gPSAiVVMiKQ0KYGBgDQoNCg0KYGBge3IgfQ0KDQpwc3ljaG9sb2dpc3RfcHN5Y2hpYXRyaXN0ICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gZGF0ZSwgeSA9IGhpdHMsIGNvbG9yID0ga2V5d29yZCkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIkdvb2dsZSBTZWFyY2hlcyBmb3IgUHN5Y2hvbG9naXN0IGFuZCBQc3ljaGlhdHJpc3QgT3ZlciBUaW1lIGluIHRoZSBVbml0ZWQgU3RhdGVzIikNCg0KYGBgDQoNCg0KVGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGludGVyZXN0IG9uIGEgbW9udGhseSB0aW1lIGZyYW1lLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIHdvcmQgcHN5Y2hvbG9naXN0IGhhZCBoaWdoIGludGVyZXN0IGluIFNlcHRlbWJlciBhbmQgdmVyeSBsb3cgaW50ZXJlc3QgaW4gSnVseSBhbmQgRGVjZW1iZXIuIFRoZSB3b3JkIHBzeWNoaWF0cmlzdCBzaG93cyBwZWFrZWQgaW50ZXJlc3QgaW4gSmFudWFyeSBhbmQgZHVyaW5nIHRoZSBtb250aHMgb2YgQXVndXN0LCBTZXB0ZW1iZXIsIGFuZCBPY3RvYmVyLiBUaGUgaW50ZXJlc3QgaXMgbG93ZXIgb3ZlciB0aGUgU3VtbWVyIG1vbnRocyBhbmQgaW4gdGhlIG1vbnRoIG9mIERlY2VtYmVyLg0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfcHN5Y2hpYXRyaXN0ICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKSAlPiUgICAgICAgICAgDQogIGdyb3VwX2J5KG1vbnRoLCBrZXl3b3JkKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgc3VtbWFyaXplKGhpdHNfcGVyX21vbnRoID0gbWVhbihoaXRzKSkgJT4lICAgICAgICAgICANCiAgZ2dwbG90KGFlcyh4ID0gbW9udGgsIHkgPSBoaXRzX3Blcl9tb250aCwgY29sb3IgPSBrZXl3b3JkKSkgKyAgICAgICANCiAgZ2VvbV9saW5lKCkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoMToxMikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJJbnRlcm5ldCBTZWFyY2hlcyBmb3IgUHN5Y2hvbG9naXN0IGFuZCBQc3ljaGlhdHJpc3QgT3ZlciBUaW1lLCBCeSBNb250aCIpDQoNCmBgYA0KDQoNCmBgYHtyIH0NCnBzeWNob2xvZ2lzdF92c19wc3ljaGlhdHJpc3QgPC0gdHJlbmR5KCJQc3ljaG9sb2dpc3QgdnMgUHN5Y2hpYXRyaXN0IiwgZ3Byb3AgPSAiaW1hZ2VzIikNCg0KYGBgDQoNCg0KYGBge3IgfQ0KcHN5Y2hvbG9naXN0ICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKSAlPiUgICAgICAgICAgDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgc3VtbWFyaXplKGhpdHNfcGVyX21vbnRoID0gbWVhbihoaXRzKSkgJT4lICAgICAgICAgICANCiAgZ2dwbG90KGFlcyh4ID0gbW9udGgsIHkgPSBoaXRzX3Blcl9tb250aCkpICsgICAgICAgDQogIGdlb21fbGluZSgpICsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKDE6MTIpKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAiR29vZ2xlIEltYWdlcyBTZWFyY2ggZm9yIFBzeWNob2dpc3QgQnkgTW9udGgiKQ0KDQpgYGANCg0KDQpgYGB7ciB9DQpwc3ljaGlhdHJpc3QgJT4lDQogIGdldF9pbnRlcmVzdCgpICU+JSANCiAgbXV0YXRlKG1vbnRoID0gbW9udGgoZGF0ZSkpICU+JSAgICAgICAgICANCiAgZ3JvdXBfYnkobW9udGgpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBzdW1tYXJpemUoaGl0c19wZXJfbW9udGggPSBtZWFuKGhpdHMpKSAlPiUgICAgICAgICAgIA0KICBnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IGhpdHNfcGVyX21vbnRoKSkgKyAgICAgICANCiAgZ2VvbV9saW5lKCkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoMToxMikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJHb29nbGUgSW1hZ2VzIFNlYXJjaCBmb3IgUHN5Y2hpYXRyaXN0IEJ5IE1vbnRoIikNCg0KYGBgDQoNCkEgcXVpY2sgR29vZ2xlIEltYWdlcyBzZWFyY2ggcmV2ZWFscyB0aGUgaW50ZXJlc3QgbGV2ZWxzIGZvciBwc3ljaG9sb2dpc3RzIGFyZSBmYXIgaGlnaGVyIHRoYW4gdGhvc2UgZm9yIHBzeWNoaWF0cmlzdCBidXQgdGhhdCBpbnRlcmVzdCBmb3IgYm90aCBwZWFrcyBpbiB0aGUgbGF0dGVyIGhhbGYgb2YgdGhlIHllYXIuDQoNCmBgYHtyIH0NCnBzeWNob2xvZ2lzdF9wc3ljaGlhdHJpc3QgPC0gdHJlbmR5KGMoInBzeWNob2xvZ2lzdCIsICJwc3ljaGlhdHJpc3QiKSwgZ2VvID0gIlVTIiwgZ3Byb3AgPSAiaW1hZ2VzIikNCmBgYA0KDQpgYGB7ciB9DQpwc3ljaG9sb2dpc3RfcHN5Y2hpYXRyaXN0ICU+JQ0KICBnZXRfaW50ZXJlc3QoKSAlPiUgDQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKSAlPiUgICAgICAgICAgDQogIGdyb3VwX2J5KG1vbnRoLCBrZXl3b3JkKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgc3VtbWFyaXplKGhpdHNfcGVyX21vbnRoID0gbWVhbihoaXRzKSkgJT4lICAgICAgICAgICANCiAgZ2dwbG90KGFlcyh4ID0gbW9udGgsIHkgPSBoaXRzX3Blcl9tb250aCwgY29sb3IgPSBrZXl3b3JkKSkgKyAgICAgICANCiAgZ2VvbV9saW5lKCkgKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cyA9IGMoMToxMikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJHb29nbGUgSW1hZ2VzIFNlYXJjaCBmb3IgUHN5Y2hvbG9naXN0IGFuZCBQc3ljaGlhdHJpc3QgT3ZlciBUaW1lLCBCeSBNb250aCIpDQoNCmBgYA0K