Introduction

The purpose of this data visualization analysis is to examine the allocation of funds across States and Territories in the United States. We will assess whether the allocation is equitable based on population and explore any potential biases favoring the political interests of the Biden administration.

Data Analysis

Import Libraries for this analysis

library(tidyverse)
library(knitr)
library(kableExtra)

Data sources

I merge the files in Excel and upload the data on GitHub.

Data Exploration

Import the data from GitHub

allocation_df <- as.data.frame(read.csv("https://raw.githubusercontent.com/Kossi-Akplaka/Data608-Visualization/main/Story%201/IIJA%20FUNDING%20DATA.csv"))
kable(head(allocation_df,5), "html") %>%
  kable_styling(bootstrap_options = "striped", full_width = T)
State_Teritory_Tribal_Nation Allocation Population Election_Winner
ALABAMA 3.0000 5024279 Republican
ALASKA 3.7000 733391 Republican
AMERICAN SAMOA 0.0686 49710 No electoral Vote
ARIZONA 3.5000 7151502 Democrat
ARKANSAS 2.8000 3011524 Republican

Let’s visualize the data to examine whether the allocation is equitable based on population.

Population vs. Allocation Comparison

allocation_df$Population_millions <- as.numeric(allocation_df$Population) / 1e6

ggplot(allocation_df, aes(x = Population_millions , y = Allocation )) +
  geom_point(color = 'Purple') +
  labs(title = "Population vs. Allocation Comparison",
       x = "Population (millions)",
       y = "Allocation (Billions)") +
  theme_minimal()

Based on the above scatter plot, there is a general trend of proportionality between the population size and allocation of IIJA funds for states and territories. However, notable deviations from this trend are observed, with certain states or territories receiving allocations that either exceed or fall short of what would be expected based solely on their population size.

These variations suggest that factors beyond population alone may influence the allocation of IIJA funds

Per Capita Allocation

Let’s take a closer look on the per capita allocation of funds for each State and Territory.

# Calculate the fund allocation per capita
allocation_df$Per_capita <- round((as.numeric(allocation_df$Allocation)*1e9)/(as.numeric(allocation_df$Population)))

head(allocation_df$Per_capita)
## [1]  597 5045 1380  489  930  465

Plot the Per Capita Allocation

ggplot(allocation_df, aes(x = State_Teritory_Tribal_Nation, y = Per_capita)) +
  geom_point(color = 'purple') +
  labs(title = "Allocation Per Capita Scatter Plot",
       x = "State / Territory / Tribal Nation",
       y = "Per Capita Allocation") +
  theme_minimal() +
  theme(axis.text.x = element_blank())

Ideally, Per Capita Allocation should be relatively consistent across different states and territories to ensure equitable distribution of resources.

Let’s explore the other factors that can lead to variations in Per Capita Allocation

Biases favoring the political interests of the Biden administration

Let’s create a scatter plot comparing Per Capita Allocation for states won by Republican and Democrat candidates in the 2020 election

State_Allocation <- allocation_df %>% 
  filter(Election_Winner == 'Republican'| Election_Winner == 'Democrat')

ggplot(State_Allocation, aes(x = State_Teritory_Tribal_Nation, y = Per_capita, color = Election_Winner)) +
  scale_color_manual(values = c("Republican" = "red", "Democrat" = "blue"))+
  geom_point() +
  labs(title = "Allocation Per Capita Scatter Plot",
       x = "State",
       y = "Per Capita Allocation") +
  geom_hline(yintercept = 1000, linetype = "dotted", color = "black")+
  theme_minimal() +
  theme(axis.text.x = element_blank())

This visualization indicates that the majority of states have a Per Capita Allocation falling below $1000. Among the 9 states with Per Capita Allocation exceeding 1000 dollars, 6 of them were won by Republican in 2020. This observation suggests that there is no apparent evidence supporting the presence of bias favoring the political interests of the Biden administration in the allocation process.

Summary Statistics

Let’s create a table of the minimum, maximum, and average Per Capita Allocation for Republican and Democrat states.

State_Allocation %>%
  group_by(Election_Winner) %>%
  summarise(
    Min_PerCapita = min(Per_capita),
    Max_PerCapita = max(Per_capita),
    Avg_PerCapita = round(mean(Per_capita))
  ) %>%
  bind_rows(
    State_Allocation %>%
      summarise(
        Election_Winner = "Overall",
        Min_PerCapita = min(Per_capita),
        Max_PerCapita = max(Per_capita),
        Avg_PerCapita = round(mean(Per_capita))
      )
  ) %>% 
  kable("html") %>%
  kable_styling(bootstrap_options = "striped", full_width = T)
Election_Winner Min_PerCapita Max_PerCapita Avg_PerCapita
Democrat 437 1595 680
Republican 381 5045 1131
Overall 381 5045 910

The table clearly illustrates that, on average, Republican states received a higher Per Capita Allocation compared to Democrat states. This observation emphasizes that there is no apparent bias of Biden administration in the allocation process.

Create a table that includes counts for both the number of states above and below the average Per Capita Allocation

# Average Per capita allocation
average_allocation <- mean(State_Allocation$Per_capita)
# summary table
State_Allocation %>%
  mutate(Above_Avg = Per_capita > average_allocation) %>%
  group_by(Election_Winner) %>%
  summarise(
    Total_Count = n(),
    Above_Avg_Count = sum(Above_Avg),
    Below_Avg_Count = Total_Count - Above_Avg_Count
  ) %>% 
  select (Election_Winner, Above_Avg_Count, Below_Avg_Count) %>% 
  kable("html") %>%
  kable_styling(bootstrap_options = "striped", full_width = T)
Election_Winner Above_Avg_Count Below_Avg_Count
Democrat 4 21
Republican 8 18

Conclusion

The purpose of this story is to assess whether the allocation is equitable based on population and explore any potential biases favoring the political interests of the Biden administration.

  • Although the biggest factors for allocation is the population, there are others factors influencing funds allocations. This led to variation in the per capita Allocation.

  • There is no evidence of potential biases favoring the political interests of the Biden administration. In contrary, states won by Republican party in 2020 saw a higher allocation on average.

LS0tDQp0aXRsZTogIkluZnJhc3RydWN0dXJlIEludmVzdG1lbnQgJiBKb2JzIEFjdCBGdW5kaW5nIEFsbG9jYXRpb24iDQphdXRob3I6ICJLb3NzaSBBa3BsYWthIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KVGhlIHB1cnBvc2Ugb2YgdGhpcyBkYXRhIHZpc3VhbGl6YXRpb24gYW5hbHlzaXMgaXMgdG8gZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBmdW5kcyBhY3Jvc3MgU3RhdGVzIGFuZCBUZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gV2Ugd2lsbCBhc3Nlc3Mgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBpcyBlcXVpdGFibGUgYmFzZWQgb24gcG9wdWxhdGlvbiBhbmQgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGJpYXNlcyBmYXZvcmluZyB0aGUgcG9saXRpY2FsIGludGVyZXN0cyBvZiB0aGUgQmlkZW4gYWRtaW5pc3RyYXRpb24uDQoNCg0KDQojIyBEYXRhIEFuYWx5c2lzDQoNCkltcG9ydCBMaWJyYXJpZXMgZm9yIHRoaXMgYW5hbHlzaXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmBgYA0KDQojIyMgRGF0YSBzb3VyY2VzDQoNCi0gUHJlc2VudCBhbGxvY2F0aW9uIG9mIHRoZSBJSUpBIGJ5IFN0YXRlIGFuZCBUZXJyaXRvcnk6DQoNCi0gW0xpc3Qgb2YgVS5TIHN0YXRlc19hbmRfdGVycml0b3JpZXNfYnlfcG9wdWxhdGlvbl0oImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfVS5TLl9zdGF0ZXNfYW5kX3RlcnJpdG9yaWVzX2J5X3BvcHVsYXRpb24iKSBhcyBvZiBBcHJpbCAyMDIwIENlbnN1cw0KDQotIFtVLlMuIDIwMjAgUHJlc2lkZW50aWFsIEVsZWN0aW9uIFJlc3VsdHMgUGVyIFN0YXRlXSgiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUQtZWRhVkhUblpOaFZVODQwRVBVaHozQ2dkN20zOVVyeDdITThQcTZQdXMvZWRpdCNnaWQ9Mjk2MjI4NjIiKQ0KDQpJIG1lcmdlIHRoZSBmaWxlcyBpbiBFeGNlbCBhbmQgdXBsb2FkIHRoZSBkYXRhIG9uIEdpdEh1Yi4NCg0KDQojIyMgRGF0YSBFeHBsb3JhdGlvbg0KDQpJbXBvcnQgdGhlIGRhdGEgZnJvbSBHaXRIdWINCg0KYGBge3J9DQphbGxvY2F0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUocmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Lb3NzaS1Ba3BsYWthL0RhdGE2MDgtVmlzdWFsaXphdGlvbi9tYWluL1N0b3J5JTIwMS9JSUpBJTIwRlVORElORyUyMERBVEEuY3N2IikpDQprYWJsZShoZWFkKGFsbG9jYXRpb25fZGYsNSksICJodG1sIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBUKQ0KYGBgDQoNCg0KTGV0J3MgdmlzdWFsaXplIHRoZSBkYXRhIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBpcyBlcXVpdGFibGUgYmFzZWQgb24gcG9wdWxhdGlvbi4NCg0KIyMjIFBvcHVsYXRpb24gdnMuIEFsbG9jYXRpb24gQ29tcGFyaXNvbg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCmFsbG9jYXRpb25fZGYkUG9wdWxhdGlvbl9taWxsaW9ucyA8LSBhcy5udW1lcmljKGFsbG9jYXRpb25fZGYkUG9wdWxhdGlvbikgLyAxZTYNCg0KZ2dwbG90KGFsbG9jYXRpb25fZGYsIGFlcyh4ID0gUG9wdWxhdGlvbl9taWxsaW9ucyAsIHkgPSBBbGxvY2F0aW9uICkpICsNCiAgZ2VvbV9wb2ludChjb2xvciA9ICdQdXJwbGUnKSArDQogIGxhYnModGl0bGUgPSAiUG9wdWxhdGlvbiB2cy4gQWxsb2NhdGlvbiBDb21wYXJpc29uIiwNCiAgICAgICB4ID0gIlBvcHVsYXRpb24gKG1pbGxpb25zKSIsDQogICAgICAgeSA9ICJBbGxvY2F0aW9uIChCaWxsaW9ucykiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCkJhc2VkIG9uIHRoZSBhYm92ZSBzY2F0dGVyIHBsb3QsIHRoZXJlIGlzIGEgZ2VuZXJhbCB0cmVuZCBvZiBwcm9wb3J0aW9uYWxpdHkgYmV0d2VlbiB0aGUgcG9wdWxhdGlvbiBzaXplIGFuZCBhbGxvY2F0aW9uIG9mIElJSkEgZnVuZHMgZm9yIHN0YXRlcyBhbmQgdGVycml0b3JpZXMuIEhvd2V2ZXIsIG5vdGFibGUgZGV2aWF0aW9ucyBmcm9tIHRoaXMgdHJlbmQgYXJlIG9ic2VydmVkLCB3aXRoIGNlcnRhaW4gc3RhdGVzIG9yIHRlcnJpdG9yaWVzIHJlY2VpdmluZyBhbGxvY2F0aW9ucyB0aGF0IGVpdGhlciBleGNlZWQgb3IgZmFsbCBzaG9ydCBvZiB3aGF0IHdvdWxkIGJlIGV4cGVjdGVkIGJhc2VkIHNvbGVseSBvbiB0aGVpciBwb3B1bGF0aW9uIHNpemUuDQoNClRoZXNlIHZhcmlhdGlvbnMgc3VnZ2VzdCB0aGF0IGZhY3RvcnMgYmV5b25kIHBvcHVsYXRpb24gYWxvbmUgbWF5IGluZmx1ZW5jZSB0aGUgYWxsb2NhdGlvbiBvZiBJSUpBIGZ1bmRzDQoNCiMjIyBQZXIgQ2FwaXRhIEFsbG9jYXRpb24NCg0KTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIG9uIHRoZSBwZXIgY2FwaXRhIGFsbG9jYXRpb24gb2YgZnVuZHMgZm9yIGVhY2ggU3RhdGUgYW5kIFRlcnJpdG9yeS4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQ2FsY3VsYXRlIHRoZSBmdW5kIGFsbG9jYXRpb24gcGVyIGNhcGl0YQ0KYWxsb2NhdGlvbl9kZiRQZXJfY2FwaXRhIDwtIHJvdW5kKChhcy5udW1lcmljKGFsbG9jYXRpb25fZGYkQWxsb2NhdGlvbikqMWU5KS8oYXMubnVtZXJpYyhhbGxvY2F0aW9uX2RmJFBvcHVsYXRpb24pKSkNCg0KaGVhZChhbGxvY2F0aW9uX2RmJFBlcl9jYXBpdGEpDQpgYGANCg0KUGxvdCB0aGUgUGVyIENhcGl0YSBBbGxvY2F0aW9uDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KGFsbG9jYXRpb25fZGYsIGFlcyh4ID0gU3RhdGVfVGVyaXRvcnlfVHJpYmFsX05hdGlvbiwgeSA9IFBlcl9jYXBpdGEpKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAncHVycGxlJykgKw0KICBsYWJzKHRpdGxlID0gIkFsbG9jYXRpb24gUGVyIENhcGl0YSBTY2F0dGVyIFBsb3QiLA0KICAgICAgIHggPSAiU3RhdGUgLyBUZXJyaXRvcnkgLyBUcmliYWwgTmF0aW9uIiwNCiAgICAgICB5ID0gIlBlciBDYXBpdGEgQWxsb2NhdGlvbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KSWRlYWxseSwgUGVyIENhcGl0YSBBbGxvY2F0aW9uIHNob3VsZCBiZSByZWxhdGl2ZWx5IGNvbnNpc3RlbnQgYWNyb3NzIGRpZmZlcmVudCBzdGF0ZXMgYW5kIHRlcnJpdG9yaWVzIHRvIGVuc3VyZSBlcXVpdGFibGUgZGlzdHJpYnV0aW9uIG9mIHJlc291cmNlcy4NCg0KTGV0J3MgZXhwbG9yZSB0aGUgb3RoZXIgZmFjdG9ycyB0aGF0IGNhbiBsZWFkIHRvIHZhcmlhdGlvbnMgaW4gUGVyIENhcGl0YSBBbGxvY2F0aW9uDQoNCiMjIyBCaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uDQoNCkxldCdzIGNyZWF0ZSBhIHNjYXR0ZXIgcGxvdCBjb21wYXJpbmcgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZvciBzdGF0ZXMgd29uIGJ5IFJlcHVibGljYW4gYW5kIERlbW9jcmF0IGNhbmRpZGF0ZXMgaW4gdGhlIDIwMjAgZWxlY3Rpb24NCg0KYGBge3Igd2FybmluZz1GQUxTRX0NClN0YXRlX0FsbG9jYXRpb24gPC0gYWxsb2NhdGlvbl9kZiAlPiUgDQogIGZpbHRlcihFbGVjdGlvbl9XaW5uZXIgPT0gJ1JlcHVibGljYW4nfCBFbGVjdGlvbl9XaW5uZXIgPT0gJ0RlbW9jcmF0JykNCg0KZ2dwbG90KFN0YXRlX0FsbG9jYXRpb24sIGFlcyh4ID0gU3RhdGVfVGVyaXRvcnlfVHJpYmFsX05hdGlvbiwgeSA9IFBlcl9jYXBpdGEsIGNvbG9yID0gRWxlY3Rpb25fV2lubmVyKSkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiUmVwdWJsaWNhbiIgPSAicmVkIiwgIkRlbW9jcmF0IiA9ICJibHVlIikpKw0KICBnZW9tX3BvaW50KCkgKw0KICBsYWJzKHRpdGxlID0gIkFsbG9jYXRpb24gUGVyIENhcGl0YSBTY2F0dGVyIFBsb3QiLA0KICAgICAgIHggPSAiU3RhdGUiLA0KICAgICAgIHkgPSAiUGVyIENhcGl0YSBBbGxvY2F0aW9uIikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMDAwLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICJibGFjayIpKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KDQpUaGlzIHZpc3VhbGl6YXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlIG1ham9yaXR5IG9mIHN0YXRlcyBoYXZlIGEgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZhbGxpbmcgYmVsb3cgJDEwMDAuIEFtb25nIHRoZSA5IHN0YXRlcyB3aXRoIFBlciBDYXBpdGEgQWxsb2NhdGlvbiBleGNlZWRpbmcgMTAwMCBkb2xsYXJzLCA2IG9mIHRoZW0gd2VyZSB3b24gYnkgUmVwdWJsaWNhbiBpbiAyMDIwLiBUaGlzIG9ic2VydmF0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgbm8gYXBwYXJlbnQgZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgcHJlc2VuY2Ugb2YgYmlhcyBmYXZvcmluZyB0aGUgcG9saXRpY2FsIGludGVyZXN0cyBvZiB0aGUgQmlkZW4gYWRtaW5pc3RyYXRpb24gaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4NCg0KIyMjIFN1bW1hcnkgU3RhdGlzdGljcw0KDQpMZXQncyBjcmVhdGUgYSB0YWJsZSBvZiB0aGUgbWluaW11bSwgbWF4aW11bSwgYW5kIGF2ZXJhZ2UgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZvciBSZXB1YmxpY2FuIGFuZCBEZW1vY3JhdCBzdGF0ZXMuDQoNCmBgYHtyfQ0KU3RhdGVfQWxsb2NhdGlvbiAlPiUNCiAgZ3JvdXBfYnkoRWxlY3Rpb25fV2lubmVyKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIE1pbl9QZXJDYXBpdGEgPSBtaW4oUGVyX2NhcGl0YSksDQogICAgTWF4X1BlckNhcGl0YSA9IG1heChQZXJfY2FwaXRhKSwNCiAgICBBdmdfUGVyQ2FwaXRhID0gcm91bmQobWVhbihQZXJfY2FwaXRhKSkNCiAgKSAlPiUNCiAgYmluZF9yb3dzKA0KICAgIFN0YXRlX0FsbG9jYXRpb24gJT4lDQogICAgICBzdW1tYXJpc2UoDQogICAgICAgIEVsZWN0aW9uX1dpbm5lciA9ICJPdmVyYWxsIiwNCiAgICAgICAgTWluX1BlckNhcGl0YSA9IG1pbihQZXJfY2FwaXRhKSwNCiAgICAgICAgTWF4X1BlckNhcGl0YSA9IG1heChQZXJfY2FwaXRhKSwNCiAgICAgICAgQXZnX1BlckNhcGl0YSA9IHJvdW5kKG1lYW4oUGVyX2NhcGl0YSkpDQogICAgICApDQogICkgJT4lIA0KICBrYWJsZSgiaHRtbCIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gVCkNCmBgYA0KDQpUaGUgdGFibGUgY2xlYXJseSBpbGx1c3RyYXRlcyB0aGF0LCBvbiBhdmVyYWdlLCBSZXB1YmxpY2FuIHN0YXRlcyByZWNlaXZlZCBhIGhpZ2hlciBQZXIgQ2FwaXRhIEFsbG9jYXRpb24gY29tcGFyZWQgdG8gRGVtb2NyYXQgc3RhdGVzLiBUaGlzIG9ic2VydmF0aW9uIGVtcGhhc2l6ZXMgdGhhdCB0aGVyZSBpcyBubyBhcHBhcmVudCBiaWFzIG9mIEJpZGVuIGFkbWluaXN0cmF0aW9uIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuDQoNCg0KQ3JlYXRlIGEgdGFibGUgdGhhdCBpbmNsdWRlcyBjb3VudHMgZm9yIGJvdGggdGhlIG51bWJlciBvZiBzdGF0ZXMgYWJvdmUgYW5kIGJlbG93IHRoZSBhdmVyYWdlIFBlciBDYXBpdGEgQWxsb2NhdGlvbg0KDQpgYGB7cn0NCiMgQXZlcmFnZSBQZXIgY2FwaXRhIGFsbG9jYXRpb24NCmF2ZXJhZ2VfYWxsb2NhdGlvbiA8LSBtZWFuKFN0YXRlX0FsbG9jYXRpb24kUGVyX2NhcGl0YSkNCiMgc3VtbWFyeSB0YWJsZQ0KU3RhdGVfQWxsb2NhdGlvbiAlPiUNCiAgbXV0YXRlKEFib3ZlX0F2ZyA9IFBlcl9jYXBpdGEgPiBhdmVyYWdlX2FsbG9jYXRpb24pICU+JQ0KICBncm91cF9ieShFbGVjdGlvbl9XaW5uZXIpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgVG90YWxfQ291bnQgPSBuKCksDQogICAgQWJvdmVfQXZnX0NvdW50ID0gc3VtKEFib3ZlX0F2ZyksDQogICAgQmVsb3dfQXZnX0NvdW50ID0gVG90YWxfQ291bnQgLSBBYm92ZV9BdmdfQ291bnQNCiAgKSAlPiUgDQogIHNlbGVjdCAoRWxlY3Rpb25fV2lubmVyLCBBYm92ZV9BdmdfQ291bnQsIEJlbG93X0F2Z19Db3VudCkgJT4lIA0KICBrYWJsZSgiaHRtbCIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gVCkNCmBgYA0KDQojIyBDb25jbHVzaW9uDQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgc3RvcnkgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gaXMgZXF1aXRhYmxlIGJhc2VkIG9uIHBvcHVsYXRpb24gYW5kIGV4cGxvcmUgYW55IHBvdGVudGlhbCBiaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uLg0KDQotIEFsdGhvdWdoIHRoZSBiaWdnZXN0IGZhY3RvcnMgZm9yIGFsbG9jYXRpb24gaXMgdGhlIHBvcHVsYXRpb24sIHRoZXJlIGFyZSBvdGhlcnMgZmFjdG9ycyBpbmZsdWVuY2luZyBmdW5kcyBhbGxvY2F0aW9ucy4gIFRoaXMgbGVkIHRvIHZhcmlhdGlvbiBpbiB0aGUgcGVyIGNhcGl0YSBBbGxvY2F0aW9uLg0KDQotIFRoZXJlIGlzIG5vIGV2aWRlbmNlIG9mIHBvdGVudGlhbCBiaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uLiBJbiBjb250cmFyeSwgc3RhdGVzIHdvbiBieSBSZXB1YmxpY2FuIHBhcnR5IGluIDIwMjAgc2F3IGEgaGlnaGVyIGFsbG9jYXRpb24gb24gYXZlcmFnZS4NCg0KDQo=