aiib <- read_dta("C:/Users/Paula/Desktop/AIIB-ForResubmission.dta")
aiib %<>%
select(ccode, aiibmember:adbnonregionalmember, asiapacific, chinaalignment, usmilitaryalliance)
the_df <- merge(the_df, aiib, by.x = c("cow_code"), by.y = c("ccode"), all.x = TRUE)
russia_dyad <- read.csv("C:/Users/Paula/Desktop/PD_original_datasets/russia_dyad.csv")
russia_dyad$X <- NULL
the_df <- merge(the_df, russia_dyad, by = c("cow_code", "year"), all.x = TRUE)
soviet_iron_curtain_vector <- c("Albania", "Bulgaria", "Czech Republic",
"Poland", "Kosovo", "Romania",
"Hungary", "Slovakia", "Bosnia and Herzegovina",
"Croatia", "Macedonia", "Montenegro", "Serbia")
soviet_republics_vector <- c("Russia", "Lithuania", "Georgia",
"Estonia", "Latvia", "Ukraine" ,
"Belarus", "Moldova", "Kyrgyzstan",
"Uzbekistan", "Tajikistan", "Armenia" ,
"Azerbaijan", "Turkmenistan", "Kazakhstan")
the_df %<>%
dplyr::mutate(soviet_iron_curtain = ifelse(country %in% soviet_iron_curtain_vector, 1, 0))
the_df %<>%
dplyr::mutate(soviet_republics = ifelse(country %in% soviet_republics_vector, 1, 0))
the_df %<>% mutate(rus_influence = ifelse(country == "Russia", 1,
ifelse(level_contig_rus == 1, 1,
ifelse(soviet_republics == 1, 1,
ifelse(soviet_iron_curtain == 1, 1, 0)))))
the_df %>%
mutate(budget_pc = budget / pop, na.rm = TRUE) %>%
mutate(exports_pc = exports_bop / pop, na.rm = TRUE) %>%
mutate(total_trade = exports_bop + imports_bop, na.rm = TRUE) %>%
mutate(trade_openess = total_trade / gdp_const, na.rm = TRUE) %>%
mutate(us_total_trade = us_exports_to_country + us_imports_from_country, na.rm = TRUE) %>%
mutate(us_trade_dependence = us_total_trade / balance_trade, na.rm = TRUE) %>%
mutate(us_exports_pc = us_exports_to_country / pop, na.rm = TRUE) %>%
mutate(muslim_percent = percent_muslim_jitter / pop, na.rm = TRUE) %>%
mutate(us_imports_pc = us_imports_from_country / pop, na.rm = TRUE) -> the_df
Cost of living ranking
The main problem
Source: “https://www.numbeo.com/cost-of-living/rankings_by_country.jsp?title=2019”
url <- "https://www.numbeo.com/cost-of-living/rankings_by_country.jsp?title=2019"
# Countries with no INDEX
col_url <- read_html(url)
col_table <- col_url %>% html_table(header = TRUE, fill = TRUE)
col_19 <- col_table[[2]]
col_19$year <- replicate(119, 2019)
col_19$rank <- NULL
col_19 %<>%
clean_names()
col_19$cow_code <- countrycode(col_19$country, "country.name", "cown")
col_19 %<>% dplyr::mutate(cow_code = ifelse(country == "Palestine", 6666,
ifelse(country == "Serbia", 345,
ifelse(country == "Hong Kong", 997, cow_code))))
names(col_19)
[1] “rank” “country”
[3] “cost_of_living_index” “rent_index”
[5] “cost_of_living_plus_rent_index” “groceries_index”
[7] “restaurant_price_index” “local_purchasing_power_index”
[9] “year” “cow_code”
col_19 %>%
arrange(desc(cost_of_living_index)) %>%
select(country, cost_of_living = cost_of_living_index) %>%
head() %>%
kbl() %>%
kable_paper("striped",
full_width = F)
|
country
|
cost_of_living
|
|
Switzerland
|
121.16
|
|
Iceland
|
101.86
|
|
Norway
|
100.99
|
|
Bahamas
|
92.40
|
|
Luxembourg
|
86.09
|
|
Japan
|
83.33
|
col_19 %>%
arrange(desc(cost_of_living_index)) %>%
select(country, cost_of_living = cost_of_living_index) %>%
tail() %>%
kbl() %>%
kable_paper("striped",
full_width = F)
|
country
|
cost_of_living
|
|
Egypt
|
26.46
|
|
Kosovo (Disputed Territory)
|
26.18
|
|
Venezuela
|
25.73
|
|
India
|
24.17
|
|
Tunisia
|
23.69
|
|
Pakistan
|
20.40
|
# df_19 %>%
# group_by(country) %>%
# mutate(ppp_budget = budget * ppp) %>%
# select(country, ppp_budget) %>%
# arrange(desc(ppp_budget)) -> table3_mult
#
# df_19 %>%
# group_by(country) %>%
# mutate(ppp_budget = budget * ppp) %>%
# select(country, raw_budget = budget) %>%
# arrange(desc(raw_budget)) -> table4_mult
# kbl(list(table3_mult, table4_mult), digits = 0,
# caption = "Arranged By PPP Adjusted Budget LEFT and By PPP Raw Budget RIGHT") %>%
# kable_paper("striped", full_width = T)
Adjust to 2019 prices
country <- "United States"
countries_dataframe <- show_countries()
Generating URL to request all 299 results
inflation_dataframe <- retrieve_inflation_data(country, countries_dataframe)
Retrieving inflation data for US Generating URL to request all 61 results
# Provide a World Bank API URL and url_all_results will convert it into one with all results for that indicator
original_url <- "http://api.worldbank.org/v2/country"
# "http://api.worldbank.org/v2/country?format=json&per_page=304"
url_all_results(original_url)
Generating URL to request all 299 results [1] “http://api.worldbank.org/v2/country?format=json&per_page=299”
the_df$budget_const <- adjust_for_inflation(the_df$budget,
the_df$year,
country,
to_date = 2019,
inflation_dataframe = inflation_dataframe,
countries_dataframe = countries_dataframe)
the_df$budget_pc_const <- adjust_for_inflation(the_df$budget_pc,
the_df$year,
country,
to_date = 2019,
inflation_dataframe = inflation_dataframe,
countries_dataframe = countries_dataframe)
Price level ratio
Source: https://data.worldbank.org/indicator/PA.NUS.PPPC.RF
Price level ratio is the ratio of a purchasing power parity (PPP) conversion factor to an exchange rate. It provides a measure of the differences in price levels between countries by indicating the number of units of the common currency needed to buy the same volume of the aggregation level in each country.
Indicator source: International Comparison Program, World Bank
library(WDI)
ppp = WDI(indicator='PA.NUS.PPPC.RF', country="all", start=2013, end=2019)
ppp$ppp <- ppp$PA.NUS.PPPC.RF
ppp$PA.NUS.PPPC.RF <- NULL
ppp$cow_code <- countrycode(ppp$iso2c, "iso2c", "cown")
ppp %<>%
dplyr::mutate(cow_code = ifelse(country == "West Bank and Gaza", 6666,
ifelse(country == "Serbia", 345,
ifelse(country == "Hong Kong SAR, China", 997, cow_code))))
ppp$country <- NULL
the_df <- merge(the_df, ppp, by = c("cow_code", "year"), all.x = TRUE)
the_df %<>%
mutate(ppp_budget = budget / ppp, na.rm = TRUE) %>%
mutate(ppp_budget_pc = budget_pc * ppp, na.rm = TRUE) %>%
mutate(ppp_budget_const = budget_const / ppp, na.rm = TRUE) %>%
mutate(ppp_budget_pc_const = budget_pc_const * ppp, na.rm = TRUE) %>%
select(ppp_budget, ppp_budget_pc, ppp_budget_const, ppp_budget_pc_const, everything())
the_df %>%
filter(year == 2014) %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
select(country, ppp_budget) %>%
arrange(desc(ppp_budget)) ->t1
the_df %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
filter(year == 2014) %>%
select(country, ppp_budget_pc) %>%
arrange(desc(ppp_budget_pc)) -> t2
the_df %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
filter(year == 2014) %>%
select(country, ppp_budget_const) %>%
arrange(desc(ppp_budget_const)) -> t3
the_df %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
filter(year == 2014) %>%
select(country, ppp_budget_pc_const) %>%
arrange(desc(ppp_budget_pc_const)) -> t4
the_df %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
filter(year == 2014) %>%
select(country, budget) %>%
arrange(desc(budget)) -> t0
the_df %>%
filter(country != "Kosovo") %>%
filter(country != "Curacao") %>%
filter(country != "Vatican City") %>%
filter(year == 2014) %>%
select(country, budget_pc) %>%
arrange(desc(budget_pc)) -> tpc
kbl(list(t0, t1, t3, tpc, t2, t4), digits = 4) %>%
kable_paper("striped", full_width = FALSE)
|
country
|
budget
|
|
Afghanistan
|
56507034
|
|
Pakistan
|
36561172
|
|
Kenya
|
19795614
|
|
Mozambique
|
15227740
|
|
Zimbabwe
|
13688543
|
|
Iraq
|
12178606
|
|
South Africa
|
10905073
|
|
India
|
10195170
|
|
Ethiopia
|
9929613
|
|
Botswana
|
9665209
|
|
Brazil
|
9537682
|
|
Japan
|
9176177
|
|
China
|
7760211
|
|
Germany
|
7058232
|
|
Nigeria
|
6708386
|
|
Tanzania
|
6015504
|
|
Mexico
|
5742427
|
|
Indonesia
|
5517627
|
|
Russia
|
5455594
|
|
Zambia
|
4703058
|
|
South Korea
|
4681751
|
|
Israel
|
4474507
|
|
France
|
4355206
|
|
Palestinian Territories
|
4037115
|
|
Italy
|
4011391
|
|
Vietnam
|
3968612
|
|
Kazakhstan
|
3964445
|
|
Argentina
|
3938010
|
|
Turkey
|
3691430
|
|
Colombia
|
3677446
|
|
Jordan
|
3506201
|
|
Democratic Republic of the Congo
|
3411433
|
|
Uganda
|
3302523
|
|
Burma
|
3126713
|
|
United Kingdom
|
3110483
|
|
Spain
|
3085913
|
|
Cameroon
|
3009714
|
|
Ukraine
|
2987964
|
|
Egypt
|
2906309
|
|
Canada
|
2707912
|
|
Australia
|
2648692
|
|
Tajikistan
|
2644280
|
|
Peru
|
2616332
|
|
Chile
|
2597870
|
|
Poland
|
2578556
|
|
Philippines
|
2577410
|
|
Venezuela
|
2534132
|
|
Austria
|
2505317
|
|
Kyrgyzstan
|
2421388
|
|
Turkmenistan
|
2361743
|
|
Morocco
|
2358837
|
|
United Arab Emirates
|
2209363
|
|
Saudi Arabia
|
2143931
|
|
Thailand
|
2086208
|
|
Malaysia
|
2027167
|
|
Belgium
|
2018477
|
|
Bangladesh
|
2011284
|
|
Greece
|
2009268
|
|
Bolivia
|
2008954
|
|
Namibia
|
1979443
|
|
Ecuador
|
1904677
|
|
Malawi
|
1882776
|
|
Niger
|
1747531
|
|
Nepal
|
1744895
|
|
Serbia
|
1720045
|
|
Romania
|
1598707
|
|
Cote D’Ivoire
|
1575511
|
|
Czech Republic
|
1555711
|
|
Lebanon
|
1501240
|
|
Guinea
|
1497955
|
|
Bosnia and Herzegovina
|
1473503
|
|
Slovakia
|
1449542
|
|
Georgia
|
1387092
|
|
Hong Kong
|
1386503
|
|
Swaziland
|
1378799
|
|
Netherlands
|
1366532
|
|
Yemen
|
1365845
|
|
Uruguay
|
1352551
|
|
Croatia
|
1326867
|
|
New Zealand
|
1314910
|
|
Hungary
|
1300689
|
|
Senegal
|
1280760
|
|
Panama
|
1249559
|
|
Haiti
|
1213622
|
|
Sweden
|
1178719
|
|
El Salvador
|
1177991
|
|
Uzbekistan
|
1171380
|
|
Guatemala
|
1168731
|
|
Costa Rica
|
1146747
|
|
Singapore
|
1138221
|
|
Ghana
|
1110674
|
|
Portugal
|
1110465
|
|
Dominican Republic
|
1101621
|
|
Azerbaijan
|
1060545
|
|
Finland
|
1035227
|
|
Qatar
|
1025813
|
|
Bulgaria
|
958440
|
|
Tunisia
|
952028
|
|
Mali
|
949585
|
|
Rwanda
|
942289
|
|
Norway
|
939131
|
|
Honduras
|
937705
|
|
Sri Lanka
|
928094
|
|
Denmark
|
917589
|
|
Paraguay
|
917447
|
|
Barbados
|
878464
|
|
Belarus
|
872016
|
|
Angola
|
866831
|
|
Macedonia
|
850132
|
|
Cambodia
|
807945
|
|
Burkina Faso
|
798255
|
|
Kuwait
|
790326
|
|
Estonia
|
790305
|
|
Algeria
|
789224
|
|
Cyprus
|
788327
|
|
Slovenia
|
780576
|
|
Benin
|
764483
|
|
Liberia
|
760289
|
|
Albania
|
731251
|
|
Madagascar
|
726846
|
|
Switzerland
|
718489
|
|
Nicaragua
|
717722
|
|
Bahrain
|
717495
|
|
Lesotho
|
710854
|
|
Latvia
|
710842
|
|
Chad
|
690727
|
|
Armenia
|
681237
|
|
Jamaica
|
674810
|
|
Togo
|
673389
|
|
Lithuania
|
658067
|
|
Sudan
|
643546
|
|
Mauritania
|
618838
|
|
Burundi
|
593574
|
|
Ireland
|
592969
|
|
Trinidad and Tobago
|
579294
|
|
Mongolia
|
553217
|
|
Somalia
|
537622
|
|
Moldova
|
519919
|
|
Laos
|
519120
|
|
Mauritius
|
489636
|
|
Oman
|
487697
|
|
Fiji
|
484194
|
|
Cuba
|
472517
|
|
Papua New Guinea
|
414550
|
|
Montenegro
|
399569
|
|
Djibouti
|
378363
|
|
Eritrea
|
366500
|
|
Sierra Leone
|
362906
|
|
Iceland
|
348400
|
|
Luxembourg
|
344249
|
|
Libya
|
334681
|
|
Gambia, The
|
297170
|
|
Republic of Congo
|
289381
|
|
Equatorial Guinea
|
262009
|
|
Bahamas, The
|
253473
|
|
Brunei
|
250151
|
|
Gabon
|
246842
|
|
South Sudan
|
224115
|
|
Cape Verde
|
224077
|
|
Syria
|
214051
|
|
Suriname
|
180079
|
|
Malta
|
176495
|
|
East Timor
|
134714
|
|
Central African Republic
|
129296
|
|
Belize
|
122015
|
|
Guyana
|
110596
|
|
Guinea-Bissau
|
76785
|
|
Marshall Islands
|
67305
|
|
Samoa
|
61791
|
|
Micronesia
|
57651
|
|
Palau
|
14204
|
|
|
country
|
ppp_budget
|
|
Afghanistan
|
190495681.90
|
|
Pakistan
|
123859038.79
|
|
Kenya
|
45455933.79
|
|
India
|
33903556.16
|
|
Ethiopia
|
26512237.31
|
|
Mozambique
|
25735870.54
|
|
Iraq
|
25481387.90
|
|
Zimbabwe
|
24922160.74
|
|
South Africa
|
21224206.85
|
|
Botswana
|
20249109.36
|
|
Indonesia
|
16241992.12
|
|
Tanzania
|
13102254.37
|
|
China
|
12683156.30
|
|
Brazil
|
12377097.12
|
|
Nigeria
|
11921390.17
|
|
Burma
|
11637278.58
|
|
Vietnam
|
11230228.32
|
|
Ukraine
|
10339819.15
|
|
Russia
|
9970814.04
|
|
Mexico
|
9487656.16
|
|
Zambia
|
9445024.91
|
|
Japan
|
9433755.25
|
|
Egypt
|
9370153.68
|
|
Kyrgyzstan
|
8101423.84
|
|
Tajikistan
|
7910283.60
|
|
Uganda
|
7806212.75
|
|
Jordan
|
7791602.13
|
|
Kazakhstan
|
7653997.54
|
|
Turkey
|
7314318.97
|
|
Germany
|
6918650.56
|
|
Palestinian Territories
|
6636125.63
|
|
Argentina
|
6284244.58
|
|
Cameroon
|
6214755.63
|
|
Nepal
|
6087161.96
|
|
Philippines
|
6061906.91
|
|
Bangladesh
|
6054407.05
|
|
Colombia
|
6030966.33
|
|
Democratic Republic of the Congo
|
5955174.51
|
|
South Korea
|
5654116.38
|
|
Malawi
|
5471705.49
|
|
Thailand
|
5426003.33
|
|
Morocco
|
4915658.63
|
|
Saudi Arabia
|
4883579.15
|
|
Poland
|
4602943.57
|
|
Bolivia
|
4600065.21
|
|
Peru
|
4513002.30
|
|
Malaysia
|
4407066.08
|
|
Italy
|
4087789.12
|
|
France
|
4064877.29
|
|
Israel
|
4062913.23
|
|
Chile
|
4034951.97
|
|
Turkmenistan
|
4001668.89
|
|
Serbia
|
3820449.35
|
|
Namibia
|
3787871.07
|
|
United Arab Emirates
|
3717588.13
|
|
Niger
|
3536300.28
|
|
Spain
|
3511611.50
|
|
Ecuador
|
3498430.01
|
|
Guinea
|
3433679.14
|
|
Georgia
|
3387995.54
|
|
Romania
|
3288200.07
|
|
Bosnia and Herzegovina
|
3160983.35
|
|
Cote D’Ivoire
|
3155614.81
|
|
Ghana
|
3073400.98
|
|
Swaziland
|
3003367.27
|
|
Lebanon
|
2934866.70
|
|
Uzbekistan
|
2894451.13
|
|
Sri Lanka
|
2735461.39
|
|
United Kingdom
|
2706491.39
|
|
Senegal
|
2595800.55
|
|
Czech Republic
|
2542087.48
|
|
Haiti
|
2507754.96
|
|
Greece
|
2478089.21
|
|
Canada
|
2431453.30
|
|
Guatemala
|
2399060.72
|
|
El Salvador
|
2374069.95
|
|
Austria
|
2363972.86
|
|
Cambodia
|
2353530.85
|
|
Azerbaijan
|
2344352.27
|
|
Hungary
|
2337769.89
|
|
Tunisia
|
2309834.65
|
|
Slovakia
|
2250798.00
|
|
Dominican Republic
|
2246141.21
|
|
Panama
|
2235971.40
|
|
Rwanda
|
2162813.04
|
|
Croatia
|
2152422.04
|
|
Mali
|
2144040.23
|
|
Bulgaria
|
2136830.83
|
|
Madagascar
|
2130205.96
|
|
Macedonia
|
2078358.52
|
|
Belarus
|
1987116.55
|
|
Australia
|
1986397.28
|
|
Belgium
|
1901226.62
|
|
Honduras
|
1892616.08
|
|
Hong Kong
|
1884022.82
|
|
Algeria
|
1868265.86
|
|
Nicaragua
|
1833842.40
|
|
Albania
|
1798216.58
|
|
Sudan
|
1781927.47
|
|
Paraguay
|
1717601.34
|
|
Armenia
|
1715279.33
|
|
Burkina Faso
|
1703848.06
|
|
Costa Rica
|
1698614.84
|
|
Burundi
|
1678072.83
|
|
Benin
|
1677310.62
|
|
Singapore
|
1669354.14
|
|
Lesotho
|
1668677.63
|
|
Uruguay
|
1614646.80
|
|
Mauritania
|
1584835.00
|
|
Qatar
|
1578855.79
|
|
Laos
|
1525862.09
|
|
Mongolia
|
1470843.03
|
|
Bahrain
|
1467236.43
|
|
Liberia
|
1456876.09
|
|
Portugal
|
1445910.99
|
|
Togo
|
1395645.06
|
|
Moldova
|
1378680.35
|
|
Somalia
|
1337955.82
|
|
Angola
|
1310933.65
|
|
Netherlands
|
1273491.24
|
|
Kuwait
|
1257036.99
|
|
Jamaica
|
1192797.29
|
|
Chad
|
1135377.07
|
|
Estonia
|
1130553.19
|
|
Lithuania
|
1120612.09
|
|
New Zealand
|
1100161.96
|
|
Latvia
|
1076826.15
|
|
Slovenia
|
995105.40
|
|
Gambia, The
|
991677.21
|
|
Fiji
|
980111.69
|
|
Oman
|
940201.52
|
|
Eritrea
|
928052.58
|
|
Sweden
|
926643.32
|
|
Sierra Leone
|
907720.65
|
|
Mauritius
|
891517.95
|
|
Cyprus
|
872982.44
|
|
Finland
|
860090.18
|
|
Trinidad and Tobago
|
848712.92
|
|
Montenegro
|
831311.05
|
|
Barbados
|
808482.52
|
|
Libya
|
740221.84
|
|
Denmark
|
702710.71
|
|
Djibouti
|
658529.15
|
|
Norway
|
637831.26
|
|
Ireland
|
545685.70
|
|
Papua New Guinea
|
533877.23
|
|
Switzerland
|
513546.95
|
|
Brunei
|
487829.16
|
|
Equatorial Guinea
|
455227.15
|
|
Republic of Congo
|
454485.38
|
|
Gabon
|
392635.20
|
|
Cape Verde
|
358916.28
|
|
Suriname
|
328165.42
|
|
East Timor
|
297425.74
|
|
Iceland
|
293629.53
|
|
Luxembourg
|
293473.48
|
|
Bahamas, The
|
280307.80
|
|
South Sudan
|
253372.40
|
|
Malta
|
226564.37
|
|
Guyana
|
224004.35
|
|
Central African Republic
|
219425.66
|
|
Belize
|
185929.88
|
|
Guinea-Bissau
|
169783.00
|
|
Samoa
|
87377.65
|
|
Marshall Islands
|
72078.27
|
|
Micronesia
|
62353.75
|
|
Palau
|
17035.35
|
|
Cuba
|
NA
|
|
Venezuela
|
NA
|
|
Syria
|
NA
|
|
Yemen
|
NA
|
|
|
country
|
ppp_budget_const
|
|
Afghanistan
|
205721139.31
|
|
Pakistan
|
133758531.00
|
|
Kenya
|
49089020.78
|
|
India
|
36613313.91
|
|
Ethiopia
|
28631240.41
|
|
Mozambique
|
27792822.15
|
|
Iraq
|
27517999.87
|
|
Zimbabwe
|
26914076.21
|
|
South Africa
|
22920561.61
|
|
Botswana
|
21867528.99
|
|
Indonesia
|
17540141.01
|
|
Tanzania
|
14149458.24
|
|
China
|
13696863.56
|
|
Brazil
|
13366342.46
|
|
Nigeria
|
12874212.91
|
|
Burma
|
12567393.57
|
|
Vietnam
|
12127809.63
|
|
Ukraine
|
11166234.09
|
|
Russia
|
10767736.06
|
|
Mexico
|
10245961.56
|
|
Zambia
|
10199922.99
|
|
Japan
|
10187752.60
|
|
Egypt
|
10119067.64
|
|
Kyrgyzstan
|
8748933.97
|
|
Tajikistan
|
8542516.76
|
|
Uganda
|
8430127.99
|
|
Jordan
|
8414349.61
|
|
Kazakhstan
|
8265746.91
|
|
Turkey
|
7898919.37
|
|
Germany
|
7471626.98
|
|
Palestinian Territories
|
7166521.11
|
|
Argentina
|
6786515.80
|
|
Cameroon
|
6711472.91
|
|
Nepal
|
6573681.25
|
|
Philippines
|
6546407.68
|
|
Bangladesh
|
6538308.40
|
|
Colombia
|
6512994.17
|
|
Democratic Republic of the Congo
|
6431144.64
|
|
South Korea
|
6106024.30
|
|
Malawi
|
5909034.14
|
|
Thailand
|
5859679.21
|
|
Morocco
|
5308544.97
|
|
Saudi Arabia
|
5273901.52
|
|
Poland
|
4970836.01
|
|
Bolivia
|
4967727.60
|
|
Peru
|
4873706.15
|
|
Malaysia
|
4759302.92
|
|
Italy
|
4414507.59
|
|
France
|
4389764.53
|
|
Israel
|
4387643.49
|
|
Chile
|
4357447.42
|
|
Turkmenistan
|
4321504.17
|
|
Serbia
|
4125800.57
|
|
Namibia
|
4090618.46
|
|
United Arab Emirates
|
4014718.12
|
|
Niger
|
3818940.75
|
|
Spain
|
3792278.70
|
|
Ecuador
|
3778043.68
|
|
Guinea
|
3708117.56
|
|
Georgia
|
3658782.68
|
|
Romania
|
3551011.01
|
|
Bosnia and Herzegovina
|
3413626.44
|
|
Cote D’Ivoire
|
3407828.81
|
|
Ghana
|
3319044.00
|
|
Swaziland
|
3243412.82
|
|
Lebanon
|
3169437.31
|
|
Uzbekistan
|
3125791.50
|
|
Sri Lanka
|
2954094.43
|
|
United Kingdom
|
2922808.99
|
|
Senegal
|
2803271.13
|
|
Czech Republic
|
2745265.02
|
|
Haiti
|
2708188.46
|
|
Greece
|
2676151.66
|
|
Canada
|
2625788.35
|
|
Guatemala
|
2590806.79
|
|
El Salvador
|
2563818.62
|
|
Austria
|
2552914.51
|
|
Cambodia
|
2541637.92
|
|
Azerbaijan
|
2531725.73
|
|
Hungary
|
2524617.25
|
|
Tunisia
|
2494449.28
|
|
Slovakia
|
2430694.10
|
|
Dominican Republic
|
2425665.10
|
|
Panama
|
2414682.47
|
|
Rwanda
|
2335676.89
|
|
Croatia
|
2324455.39
|
|
Mali
|
2315403.66
|
|
Bulgaria
|
2307618.04
|
|
Madagascar
|
2300463.67
|
|
Macedonia
|
2244472.30
|
|
Belarus
|
2145937.78
|
|
Australia
|
2145161.02
|
|
Belgium
|
2053183.05
|
|
Honduras
|
2043884.31
|
|
Hong Kong
|
2034604.24
|
|
Algeria
|
2017587.89
|
|
Nicaragua
|
1980413.12
|
|
Albania
|
1941939.89
|
|
Sudan
|
1924348.86
|
|
Paraguay
|
1854881.44
|
|
Armenia
|
1852373.85
|
|
Burkina Faso
|
1840028.92
|
|
Costa Rica
|
1834377.43
|
|
Burundi
|
1812193.60
|
|
Benin
|
1811370.46
|
|
Singapore
|
1802778.06
|
|
Lesotho
|
1802047.47
|
|
Uruguay
|
1743698.21
|
|
Mauritania
|
1711503.69
|
|
Qatar
|
1705046.58
|
|
Laos
|
1647817.34
|
|
Mongolia
|
1588400.85
|
|
Bahrain
|
1584505.99
|
|
Liberia
|
1573317.60
|
|
Portugal
|
1561476.11
|
|
Togo
|
1507192.65
|
|
Moldova
|
1488872.03
|
|
Somalia
|
1444892.58
|
|
Angola
|
1415710.65
|
|
Netherlands
|
1375275.63
|
|
Kuwait
|
1357506.27
|
|
Jamaica
|
1288132.17
|
|
Chad
|
1226122.62
|
|
Estonia
|
1220913.19
|
|
Lithuania
|
1210177.54
|
|
New Zealand
|
1188092.93
|
|
Latvia
|
1162891.99
|
|
Slovenia
|
1074639.66
|
|
Gambia, The
|
1070937.48
|
|
Fiji
|
1058447.58
|
|
Oman
|
1015347.58
|
|
Eritrea
|
1002227.62
|
|
Sweden
|
1000705.72
|
|
Sierra Leone
|
980270.65
|
|
Mauritius
|
962772.95
|
|
Cyprus
|
942755.97
|
|
Finland
|
928833.29
|
|
Trinidad and Tobago
|
916546.70
|
|
Montenegro
|
897753.97
|
|
Barbados
|
873100.86
|
|
Libya
|
799384.42
|
|
Denmark
|
758875.19
|
|
Djibouti
|
711162.41
|
|
Norway
|
688810.22
|
|
Ireland
|
589299.89
|
|
Papua New Guinea
|
576547.62
|
|
Switzerland
|
554592.43
|
|
Brunei
|
526819.13
|
|
Equatorial Guinea
|
491611.39
|
|
Republic of Congo
|
490810.33
|
|
Gabon
|
424016.76
|
|
Cape Verde
|
387602.84
|
|
Suriname
|
354394.19
|
|
East Timor
|
321197.63
|
|
Iceland
|
317098.01
|
|
Luxembourg
|
316929.48
|
|
Bahamas, The
|
302711.54
|
|
South Sudan
|
273623.31
|
|
Malta
|
244672.63
|
|
Guyana
|
241908.00
|
|
Central African Republic
|
236963.36
|
|
Belize
|
200790.42
|
|
Guinea-Bissau
|
183352.99
|
|
Samoa
|
94361.35
|
|
Marshall Islands
|
77839.16
|
|
Micronesia
|
67337.41
|
|
Palau
|
18396.91
|
|
Cuba
|
NA
|
|
Venezuela
|
NA
|
|
Syria
|
NA
|
|
Yemen
|
NA
|
|
|
country
|
budget_pc
|
|
Botswana
|
4.6276
|
|
Barbados
|
3.0842
|
|
Afghanistan
|
1.6933
|
|
Swaziland
|
1.2592
|
|
Marshall Islands
|
1.1771
|
|
Iceland
|
1.0642
|
|
Zimbabwe
|
1.0075
|
|
Palestinian Territories
|
0.9673
|
|
Namibia
|
0.8707
|
|
Palau
|
0.8059
|
|
Cyprus
|
0.6841
|
|
Bahamas, The
|
0.6839
|
|
Montenegro
|
0.6426
|
|
Luxembourg
|
0.6188
|
|
Brunei
|
0.6105
|
|
Estonia
|
0.6012
|
|
Mozambique
|
0.5793
|
|
Fiji
|
0.5588
|
|
Israel
|
0.5446
|
|
Bahrain
|
0.5370
|
|
Micronesia
|
0.5366
|
|
Cape Verde
|
0.4324
|
|
Turkmenistan
|
0.4321
|
|
Trinidad and Tobago
|
0.4252
|
|
Kenya
|
0.4239
|
|
Bosnia and Herzegovina
|
0.4232
|
|
Djibouti
|
0.4210
|
|
Qatar
|
0.4171
|
|
Kyrgyzstan
|
0.4149
|
|
Macedonia
|
0.4092
|
|
Malta
|
0.4061
|
|
Uruguay
|
0.3978
|
|
Jordan
|
0.3931
|
|
Mauritius
|
0.3883
|
|
Slovenia
|
0.3786
|
|
Georgia
|
0.3729
|
|
Latvia
|
0.3565
|
|
Iraq
|
0.3539
|
|
Lesotho
|
0.3479
|
|
Belize
|
0.3453
|
|
Suriname
|
0.3255
|
|
Samoa
|
0.3215
|
|
Tajikistan
|
0.3204
|
|
Panama
|
0.3203
|
|
Croatia
|
0.3131
|
|
Zambia
|
0.3054
|
|
Austria
|
0.2931
|
|
New Zealand
|
0.2911
|
|
Slovakia
|
0.2675
|
|
Albania
|
0.2531
|
|
Serbia
|
0.2412
|
|
United Arab Emirates
|
0.2398
|
|
Lebanon
|
0.2397
|
|
Costa Rica
|
0.2391
|
|
Jamaica
|
0.2347
|
|
Armenia
|
0.2339
|
|
Equatorial Guinea
|
0.2335
|
|
Kazakhstan
|
0.2293
|
|
Lithuania
|
0.2244
|
|
Kuwait
|
0.2141
|
|
Singapore
|
0.2081
|
|
South Africa
|
0.1999
|
|
Hong Kong
|
0.1918
|
|
Finland
|
0.1895
|
|
Mongolia
|
0.1882
|
|
Bolivia
|
0.1876
|
|
Pakistan
|
0.1872
|
|
El Salvador
|
0.1871
|
|
Greece
|
0.1845
|
|
Norway
|
0.1828
|
|
Moldova
|
0.1820
|
|
Belgium
|
0.1801
|
|
Liberia
|
0.1744
|
|
Denmark
|
0.1626
|
|
Mauritania
|
0.1574
|
|
Czech Republic
|
0.1478
|
|
Gambia, The
|
0.1468
|
|
Chile
|
0.1463
|
|
Guyana
|
0.1449
|
|
Paraguay
|
0.1390
|
|
Guinea
|
0.1343
|
|
Cameroon
|
0.1327
|
|
Bulgaria
|
0.1327
|
|
Hungary
|
0.1318
|
|
Gabon
|
0.1310
|
|
Ireland
|
0.1273
|
|
Sweden
|
0.1216
|
|
Oman
|
0.1211
|
|
Tanzania
|
0.1204
|
|
Ecuador
|
0.1194
|
|
Nicaragua
|
0.1168
|
|
Malawi
|
0.1156
|
|
Haiti
|
0.1150
|
|
East Timor
|
0.1147
|
|
Australia
|
0.1128
|
|
Azerbaijan
|
0.1112
|
|
Dominican Republic
|
0.1084
|
|
Portugal
|
0.1068
|
|
Honduras
|
0.1047
|
|
Ethiopia
|
0.1012
|
|
Togo
|
0.0943
|
|
Argentina
|
0.0923
|
|
South Korea
|
0.0923
|
|
Belarus
|
0.0920
|
|
Niger
|
0.0908
|
|
Senegal
|
0.0904
|
|
Uganda
|
0.0895
|
|
Switzerland
|
0.0877
|
|
Germany
|
0.0872
|
|
Peru
|
0.0869
|
|
Tunisia
|
0.0861
|
|
Rwanda
|
0.0850
|
|
Venezuela
|
0.0843
|
|
Netherlands
|
0.0810
|
|
Romania
|
0.0803
|
|
Colombia
|
0.0783
|
|
Laos
|
0.0782
|
|
Canada
|
0.0764
|
|
Guatemala
|
0.0764
|
|
Benin
|
0.0743
|
|
Japan
|
0.0721
|
|
Cote D’Ivoire
|
0.0696
|
|
Saudi Arabia
|
0.0693
|
|
Morocco
|
0.0690
|
|
Malaysia
|
0.0679
|
|
Poland
|
0.0678
|
|
Spain
|
0.0664
|
|
Ukraine
|
0.0660
|
|
Italy
|
0.0660
|
|
France
|
0.0657
|
|
Nepal
|
0.0648
|
|
Republic of Congo
|
0.0611
|
|
Burundi
|
0.0603
|
|
Burma
|
0.0598
|
|
Mali
|
0.0561
|
|
Cambodia
|
0.0529
|
|
Yemen
|
0.0529
|
|
Libya
|
0.0526
|
|
Papua New Guinea
|
0.0522
|
|
Sierra Leone
|
0.0517
|
|
Chad
|
0.0506
|
|
United Kingdom
|
0.0481
|
|
Turkey
|
0.0478
|
|
Mexico
|
0.0477
|
|
Brazil
|
0.0470
|
|
Democratic Republic of the Congo
|
0.0462
|
|
Burkina Faso
|
0.0454
|
|
Guinea-Bissau
|
0.0454
|
|
Sri Lanka
|
0.0447
|
|
Vietnam
|
0.0433
|
|
Cuba
|
0.0418
|
|
Ghana
|
0.0408
|
|
Somalia
|
0.0401
|
|
Uzbekistan
|
0.0381
|
|
Nigeria
|
0.0380
|
|
Russia
|
0.0379
|
|
Angola
|
0.0322
|
|
Egypt
|
0.0321
|
|
Madagascar
|
0.0308
|
|
Thailand
|
0.0305
|
|
Central African Republic
|
0.0290
|
|
Philippines
|
0.0256
|
|
Indonesia
|
0.0216
|
|
South Sudan
|
0.0212
|
|
Algeria
|
0.0203
|
|
Sudan
|
0.0169
|
|
Bangladesh
|
0.0130
|
|
Syria
|
0.0114
|
|
India
|
0.0079
|
|
China
|
0.0057
|
|
Eritrea
|
NA
|
|
|
country
|
ppp_budget_pc
|
|
Barbados
|
3.3512
|
|
Botswana
|
2.2088
|
|
Iceland
|
1.2627
|
|
Marshall Islands
|
1.0991
|
|
Luxembourg
|
0.7259
|
|
Palau
|
0.6719
|
|
Bahamas, The
|
0.6184
|
|
Cyprus
|
0.6178
|
|
Israel
|
0.5998
|
|
Palestinian Territories
|
0.5885
|
|
Swaziland
|
0.5781
|
|
Zimbabwe
|
0.5534
|
|
Afghanistan
|
0.5023
|
|
Micronesia
|
0.4961
|
|
Namibia
|
0.4550
|
|
Estonia
|
0.4203
|
|
New Zealand
|
0.3480
|
|
Mozambique
|
0.3428
|
|
Uruguay
|
0.3332
|
|
Malta
|
0.3164
|
|
Brunei
|
0.3130
|
|
Austria
|
0.3107
|
|
Montenegro
|
0.3089
|
|
Slovenia
|
0.2969
|
|
Trinidad and Tobago
|
0.2902
|
|
Fiji
|
0.2761
|
|
Qatar
|
0.2710
|
|
Cape Verde
|
0.2699
|
|
Norway
|
0.2692
|
|
Bahrain
|
0.2626
|
|
Turkmenistan
|
0.2550
|
|
Djibouti
|
0.2419
|
|
Latvia
|
0.2354
|
|
Finland
|
0.2281
|
|
Samoa
|
0.2273
|
|
Belize
|
0.2266
|
|
Mauritius
|
0.2133
|
|
Denmark
|
0.2123
|
|
Bosnia and Herzegovina
|
0.1973
|
|
Croatia
|
0.1930
|
|
Belgium
|
0.1912
|
|
Kenya
|
0.1846
|
|
Panama
|
0.1790
|
|
Suriname
|
0.1786
|
|
Jordan
|
0.1769
|
|
Slovakia
|
0.1723
|
|
Iraq
|
0.1691
|
|
Macedonia
|
0.1674
|
|
Costa Rica
|
0.1614
|
|
Sweden
|
0.1546
|
|
Georgia
|
0.1527
|
|
Zambia
|
0.1521
|
|
Australia
|
0.1504
|
|
Greece
|
0.1496
|
|
Lesotho
|
0.1482
|
|
United Arab Emirates
|
0.1425
|
|
Singapore
|
0.1419
|
|
Hong Kong
|
0.1411
|
|
Ireland
|
0.1383
|
|
Kuwait
|
0.1346
|
|
Equatorial Guinea
|
0.1344
|
|
Jamaica
|
0.1328
|
|
Lithuania
|
0.1318
|
|
Kyrgyzstan
|
0.1240
|
|
Switzerland
|
0.1228
|
|
Lebanon
|
0.1226
|
|
Kazakhstan
|
0.1188
|
|
Serbia
|
0.1086
|
|
Tajikistan
|
0.1071
|
|
Albania
|
0.1029
|
|
South Africa
|
0.1027
|
|
Chile
|
0.0942
|
|
Armenia
|
0.0929
|
|
El Salvador
|
0.0929
|
|
Liberia
|
0.0910
|
|
Czech Republic
|
0.0905
|
|
Germany
|
0.0889
|
|
Netherlands
|
0.0869
|
|
Canada
|
0.0851
|
|
Gabon
|
0.0824
|
|
Portugal
|
0.0820
|
|
Bolivia
|
0.0819
|
|
South Korea
|
0.0764
|
|
Paraguay
|
0.0743
|
|
Hungary
|
0.0733
|
|
Guyana
|
0.0715
|
|
Mongolia
|
0.0708
|
|
France
|
0.0704
|
|
Japan
|
0.0701
|
|
Moldova
|
0.0686
|
|
Ecuador
|
0.0650
|
|
Italy
|
0.0648
|
|
Cameroon
|
0.0643
|
|
Oman
|
0.0628
|
|
Mauritania
|
0.0615
|
|
Bulgaria
|
0.0595
|
|
Guinea
|
0.0586
|
|
Spain
|
0.0583
|
|
Argentina
|
0.0578
|
|
Haiti
|
0.0557
|
|
United Kingdom
|
0.0553
|
|
Tanzania
|
0.0553
|
|
Pakistan
|
0.0553
|
|
Dominican Republic
|
0.0532
|
|
East Timor
|
0.0520
|
|
Honduras
|
0.0519
|
|
Peru
|
0.0504
|
|
Azerbaijan
|
0.0503
|
|
Colombia
|
0.0477
|
|
Nicaragua
|
0.0457
|
|
Togo
|
0.0455
|
|
Niger
|
0.0449
|
|
Senegal
|
0.0446
|
|
Gambia, The
|
0.0440
|
|
Papua New Guinea
|
0.0405
|
|
Belarus
|
0.0404
|
|
Malawi
|
0.0398
|
|
Romania
|
0.0390
|
|
Republic of Congo
|
0.0389
|
|
Poland
|
0.0380
|
|
Ethiopia
|
0.0379
|
|
Uganda
|
0.0379
|
|
Guatemala
|
0.0372
|
|
Rwanda
|
0.0370
|
|
Brazil
|
0.0362
|
|
Tunisia
|
0.0355
|
|
Cote D’Ivoire
|
0.0347
|
|
Benin
|
0.0339
|
|
Morocco
|
0.0331
|
|
Malaysia
|
0.0312
|
|
Chad
|
0.0308
|
|
Saudi Arabia
|
0.0304
|
|
Mexico
|
0.0289
|
|
Laos
|
0.0266
|
|
Democratic Republic of the Congo
|
0.0265
|
|
Mali
|
0.0248
|
|
Turkey
|
0.0241
|
|
Libya
|
0.0238
|
|
Nigeria
|
0.0214
|
|
Burundi
|
0.0213
|
|
Angola
|
0.0213
|
|
Burkina Faso
|
0.0213
|
|
Russia
|
0.0208
|
|
Sierra Leone
|
0.0207
|
|
Guinea-Bissau
|
0.0205
|
|
Ukraine
|
0.0191
|
|
South Sudan
|
0.0188
|
|
Nepal
|
0.0186
|
|
Cambodia
|
0.0182
|
|
Central African Republic
|
0.0171
|
|
Somalia
|
0.0161
|
|
Burma
|
0.0161
|
|
Uzbekistan
|
0.0154
|
|
Vietnam
|
0.0153
|
|
Sri Lanka
|
0.0152
|
|
Ghana
|
0.0147
|
|
Thailand
|
0.0117
|
|
Philippines
|
0.0109
|
|
Madagascar
|
0.0105
|
|
Egypt
|
0.0100
|
|
Algeria
|
0.0086
|
|
Indonesia
|
0.0073
|
|
Sudan
|
0.0061
|
|
Bangladesh
|
0.0043
|
|
China
|
0.0035
|
|
India
|
0.0024
|
|
Cuba
|
NA
|
|
Venezuela
|
NA
|
|
Eritrea
|
NA
|
|
Syria
|
NA
|
|
Yemen
|
NA
|
|
|
country
|
ppp_budget_pc_const
|
|
Barbados
|
3.6190
|
|
Botswana
|
2.3854
|
|
Iceland
|
1.3636
|
|
Marshall Islands
|
1.1870
|
|
Luxembourg
|
0.7839
|
|
Palau
|
0.7256
|
|
Bahamas, The
|
0.6678
|
|
Cyprus
|
0.6672
|
|
Israel
|
0.6477
|
|
Palestinian Territories
|
0.6355
|
|
Swaziland
|
0.6243
|
|
Zimbabwe
|
0.5976
|
|
Afghanistan
|
0.5424
|
|
Micronesia
|
0.5357
|
|
Namibia
|
0.4914
|
|
Estonia
|
0.4539
|
|
New Zealand
|
0.3758
|
|
Mozambique
|
0.3702
|
|
Uruguay
|
0.3598
|
|
Malta
|
0.3417
|
|
Brunei
|
0.3381
|
|
Austria
|
0.3355
|
|
Montenegro
|
0.3335
|
|
Slovenia
|
0.3207
|
|
Trinidad and Tobago
|
0.3134
|
|
Fiji
|
0.2981
|
|
Qatar
|
0.2927
|
|
Cape Verde
|
0.2915
|
|
Norway
|
0.2907
|
|
Bahrain
|
0.2836
|
|
Turkmenistan
|
0.2754
|
|
Djibouti
|
0.2612
|
|
Latvia
|
0.2542
|
|
Finland
|
0.2464
|
|
Samoa
|
0.2455
|
|
Belize
|
0.2447
|
|
Mauritius
|
0.2303
|
|
Denmark
|
0.2293
|
|
Bosnia and Herzegovina
|
0.2130
|
|
Croatia
|
0.2084
|
|
Belgium
|
0.2065
|
|
Kenya
|
0.1994
|
|
Panama
|
0.1933
|
|
Suriname
|
0.1929
|
|
Jordan
|
0.1910
|
|
Slovakia
|
0.1860
|
|
Iraq
|
0.1827
|
|
Macedonia
|
0.1807
|
|
Costa Rica
|
0.1743
|
|
Sweden
|
0.1670
|
|
Georgia
|
0.1649
|
|
Zambia
|
0.1642
|
|
Australia
|
0.1625
|
|
Greece
|
0.1615
|
|
Lesotho
|
0.1600
|
|
United Arab Emirates
|
0.1539
|
|
Singapore
|
0.1532
|
|
Hong Kong
|
0.1524
|
|
Ireland
|
0.1494
|
|
Kuwait
|
0.1454
|
|
Equatorial Guinea
|
0.1451
|
|
Jamaica
|
0.1434
|
|
Lithuania
|
0.1423
|
|
Kyrgyzstan
|
0.1339
|
|
Switzerland
|
0.1326
|
|
Lebanon
|
0.1324
|
|
Kazakhstan
|
0.1283
|
|
Serbia
|
0.1173
|
|
Tajikistan
|
0.1157
|
|
Albania
|
0.1112
|
|
South Africa
|
0.1109
|
|
Chile
|
0.1017
|
|
Armenia
|
0.1003
|
|
El Salvador
|
0.1003
|
|
Liberia
|
0.0983
|
|
Czech Republic
|
0.0977
|
|
Germany
|
0.0960
|
|
Netherlands
|
0.0939
|
|
Canada
|
0.0919
|
|
Gabon
|
0.0890
|
|
Portugal
|
0.0885
|
|
Bolivia
|
0.0885
|
|
South Korea
|
0.0825
|
|
Paraguay
|
0.0802
|
|
Hungary
|
0.0792
|
|
Guyana
|
0.0772
|
|
Mongolia
|
0.0764
|
|
France
|
0.0760
|
|
Japan
|
0.0757
|
|
Moldova
|
0.0741
|
|
Ecuador
|
0.0702
|
|
Italy
|
0.0699
|
|
Cameroon
|
0.0694
|
|
Oman
|
0.0678
|
|
Mauritania
|
0.0664
|
|
Bulgaria
|
0.0643
|
|
Guinea
|
0.0633
|
|
Spain
|
0.0630
|
|
Argentina
|
0.0625
|
|
Haiti
|
0.0601
|
|
United Kingdom
|
0.0598
|
|
Tanzania
|
0.0597
|
|
Pakistan
|
0.0597
|
|
Dominican Republic
|
0.0574
|
|
East Timor
|
0.0561
|
|
Honduras
|
0.0560
|
|
Peru
|
0.0544
|
|
Azerbaijan
|
0.0543
|
|
Colombia
|
0.0516
|
|
Nicaragua
|
0.0494
|
|
Togo
|
0.0492
|
|
Niger
|
0.0485
|
|
Senegal
|
0.0481
|
|
Gambia, The
|
0.0475
|
|
Papua New Guinea
|
0.0437
|
|
Belarus
|
0.0436
|
|
Malawi
|
0.0429
|
|
Romania
|
0.0422
|
|
Republic of Congo
|
0.0420
|
|
Poland
|
0.0410
|
|
Ethiopia
|
0.0409
|
|
Uganda
|
0.0409
|
|
Guatemala
|
0.0402
|
|
Rwanda
|
0.0400
|
|
Brazil
|
0.0391
|
|
Tunisia
|
0.0383
|
|
Cote D’Ivoire
|
0.0375
|
|
Benin
|
0.0366
|
|
Morocco
|
0.0358
|
|
Malaysia
|
0.0337
|
|
Chad
|
0.0332
|
|
Saudi Arabia
|
0.0329
|
|
Mexico
|
0.0312
|
|
Laos
|
0.0287
|
|
Democratic Republic of the Congo
|
0.0286
|
|
Mali
|
0.0268
|
|
Turkey
|
0.0261
|
|
Libya
|
0.0257
|
|
Nigeria
|
0.0231
|
|
Burundi
|
0.0230
|
|
Angola
|
0.0230
|
|
Burkina Faso
|
0.0230
|
|
Russia
|
0.0224
|
|
Sierra Leone
|
0.0223
|
|
Guinea-Bissau
|
0.0222
|
|
Ukraine
|
0.0206
|
|
South Sudan
|
0.0203
|
|
Nepal
|
0.0201
|
|
Cambodia
|
0.0196
|
|
Central African Republic
|
0.0184
|
|
Somalia
|
0.0174
|
|
Burma
|
0.0174
|
|
Uzbekistan
|
0.0166
|
|
Vietnam
|
0.0165
|
|
Sri Lanka
|
0.0164
|
|
Ghana
|
0.0159
|
|
Thailand
|
0.0127
|
|
Philippines
|
0.0118
|
|
Madagascar
|
0.0114
|
|
Egypt
|
0.0108
|
|
Algeria
|
0.0092
|
|
Indonesia
|
0.0079
|
|
Sudan
|
0.0066
|
|
Bangladesh
|
0.0047
|
|
China
|
0.0038
|
|
India
|
0.0026
|
|
Cuba
|
NA
|
|
Venezuela
|
NA
|
|
Eritrea
|
NA
|
|
Syria
|
NA
|
|
Yemen
|
NA
|
|
library(troopdata)
troops_us <- get_troopdata(startyear = 2013, endyear = 2020)
the_df <- merge(the_df, troops_us, by.x = c("cow_code", "year"), by.y = c("ccode", "year"), all.x = TRUE)
us_base_df <-read.csv("C:/Users/Paula/Desktop/PD_original_datasets/Bases.csv")
us_base_df %>%
filter(base == 1) %>%
group_by(Country.Name) %>%
count() %>%
arrange(desc(n)) %>%
filter(n > 2) %>%
kbl() %>%
kable_paper("striped",
full_width = F)
|
Country.Name
|
n
|
|
Japan
|
42
|
|
Germany
|
40
|
|
Korea, South
|
30
|
|
Puerto Rico
|
19
|
|
United Kingdom
|
16
|
|
Italy
|
14
|
|
Afghanistan
|
9
|
|
Kuwait
|
9
|
|
Marshall Islands
|
6
|
|
Oman
|
6
|
|
Turkey
|
6
|
|
Belgium
|
5
|
|
Qatar
|
5
|
|
Bahrain
|
4
|
|
Australia
|
3
|
|
Guam
|
3
|
|
Northern Mariana Islands
|
3
|
|
Romania
|
3
|
|
United Arab Emirates
|
3
|
us_base_df %>%
filter(lilypad == 1) %>%
group_by(Country.Name) %>%
count() %>%
arrange(desc(n)) %>%
filter(n > 2) %>%
kbl() %>%
kable_paper("striped",
full_width = F)
|
Country.Name
|
n
|
|
Saudi Arabia
|
9
|
|
Syria
|
8
|
|
Israel
|
6
|
|
Pakistan
|
6
|
|
Philippines
|
6
|
|
Colombia
|
4
|
|
Germany
|
4
|
|
Netherlands
|
4
|
|
Bulgaria
|
3
|
|
Cameroon
|
3
|
|
Peru
|
3
|
us_base_df %>%
group_by(Country.Name) %>%
count() %>%
arrange(desc(n)) %>%
filter(n > 5) %>%
kbl() %>%
kable_paper("striped",
full_width = F)
|
Country.Name
|
n
|
|
Germany
|
44
|
|
Japan
|
42
|
|
Korea, South
|
32
|
|
Puerto Rico
|
19
|
|
United Kingdom
|
16
|
|
Italy
|
15
|
|
Syria
|
10
|
|
Afghanistan
|
9
|
|
Honduras
|
9
|
|
Kuwait
|
9
|
|
Saudi Arabia
|
9
|
|
Belize
|
8
|
|
Guatemala
|
7
|
|
Belgium
|
6
|
|
Israel
|
6
|
|
Marshall Islands
|
6
|
|
Netherlands
|
6
|
|
Oman
|
6
|
|
Pakistan
|
6
|
|
Panama
|
6
|
|
Philippines
|
6
|
|
Turkey
|
6
|
war_on_terror <- c("Afghanistan", "Yemen", "Syria", "Iraq", "Pakistan")
the_df %<>%
dplyr::mutate(war_on_terror = ifelse(country %in% war_on_terror, 1, 0))
Drone attacks
# drone_wars <- read.csv("C:/Users/Paula/Desktop/drone_war.csv")
# substrRight <- function(x, n){
# substr(x, nchar(x)-n+1, nchar(x)) }
# drone_wars$year <- as.numeric(substrRight(drone_wars$Date..MM.DD.YYYY., 4))
# drone_wars %<>%
# mutate(Country = ifelse(grepl('Afghanistan', Country), 'Afghanistan', as.character(Country)))
# drone_wars %>%
# clean_names() %>%
# group_by(country) %>%
# summarise(sum_drone = n()) %>%
# arrange(desc(sum_drone)) %>%
# ggplot(aes(x = reorder(country, sum_drone),
# y = sum_drone,
# fill = as.factor(country))) +
# geom_bar(stat = "identity") +
# coord_flip() +
# scale_fill_manual(values = c("#9b2226","#0a9396","#94d2bd","#ee9b00"),
# name = NULL) +
# theme(axis.text.y = element_text(size = 10),
# axis.title.y = element_blank(),
# legend.position = "bottom") +
# xlab("country") +
# ylab("Total drone strikes") +
# ggthemes::theme_pander()
# drone_wars %>%
# clean_names() %>%
# group_by(country, year) %>%
# summarise(sum_drone = n()) -> drone_sum
# drone_sum$cow_code <- countrycode(drone_sum$country, "country.name", "cown")
#
# the_df <- merge(the_df, drone_sum, by = c("cow_code", "year"), all.x = TRUE)
# the_df$sum_drone[is.na(the_df$sum_drone)] <- 0
# the_df %>%
# select(country,
# year,
# sum_drone.x) %>%
# arrange(desc(sum_drone))
# the_df %>%
# mutate(drones_binary = ifelse(sum_drone > 0, 1, 0)) %>%
# mutate(drones_binary = as.factor(drones_binary)) %>%
# group_by(country.x) %>%
# # filter(country.x == "Afghanistan" | country.x == "Somalia" | country.x == "Yemen" | country.x == "Pakistan" ) %>%
# ggplot(aes(budget)) +
# # geom_smooth(method = "lm", aes(color = as.factor(region_6)), se = FALSE) +
# geom_histogram() +
# # scale_shape_manual(values = c(15,16,17,18,19,10),
# # name = NULL) +
# facet_wrap(~drones_binary) +
# ggtitle("Drone attacks and PD spending") +
# ylab("Logged PD budget per capita") +
# theme(legend.position = "left") +
# ggthemes::theme_pander()
the_df %>%
group_by(president, cow_code) %>%
mutate(pres_pd_budget_pc = sum(budget_pc_const, na.rm = TRUE)) %>%
mutate(pres_pd_budget = sum(budget_const, na.rm = TRUE)) %>%
mutate(pres_avg_pd_budget_pc = mean(budget_pc_const, na.rm = TRUE)) %>%
mutate(pres_avg_pd_budget = mean(budget_const, na.rm = TRUE)) %>%
mutate(pres_ppp_budget = sum(ppp_budget, na.rm = TRUE)) %>%
mutate(pres_ppp_budget_pc = sum(ppp_budget_pc, na.rm = TRUE)) %>%
mutate(pres_ppp_budget_const = sum(ppp_budget_const, na.rm = TRUE)) %>%
mutate(pres_ppp_budget_pc_const = sum(ppp_budget_pc_const, na.rm = TRUE)) %>%
mutate(pres_avg_polity = mean(polity_index, na.rm = TRUE)) %>%
mutate(pres_avg_elect = mean(electoral_demo, na.rm = TRUE)) %>%
mutate(pres_avg_gdp = mean(gdp_const, na.rm = TRUE)) %>%
mutate(pres_avg_gdp_pc = mean(gdp_pc_const, na.rm = TRUE)) %>%
mutate(pres_avg_pop = mean(pop, na.rm = TRUE)) %>%
mutate(pres_avg_un_dist = mean(ideal_point_distance, na.rm = TRUE)) %>%
mutate(pres_avg_pol_rights = mean(pol_right_fh, na.rm = TRUE)) %>%
mutate(pres_avg_civ_lib = mean(civ_lib_fh, na.rm = TRUE)) %>%
mutate(pres_avg_mil_exp = mean(mil_exp_gdp, na.rm = TRUE)) %>%
mutate(pres_avg_trade_dep_us = mean(us_trade_dependence, na.rm = TRUE)) %>%
mutate(pres_avg_us_exp = mean(us_exports_pc, na.rm = TRUE)) %>%
mutate(pres_sum_us_exp = sum(us_exports_pc, na.rm = TRUE)) %>%
mutate(pres_avg_us_imp = mean(us_imports_pc, na.rm = TRUE)) %>%
mutate(pres_sum_us_imp = sum(us_imports_pc, na.rm = TRUE)) %>%
mutate(pres_avg_trade_open = mean(trade_openess, na.rm = TRUE)) %>%
mutate(pres_avg_ethno_frac = mean(ethno_frac, na.rm = TRUE)) %>%
mutate(pres_avg_mus_perc = mean(muslim_percent, na.rm = TRUE)) %>%
mutate(pres_avg_us_troops = mean(troops, na.rm = TRUE)) %>%
mutate(pres_sum_us_troops = sum(troops, na.rm = TRUE)) %>%
mutate(pres_avg_suicide = mean(sum_suicides, na.rm = TRUE)) %>%
mutate(pres_sum_suicide = sum(sum_suicides, na.rm = TRUE)) %>%
mutate(pres_avg_cso_repress = mean(cso_repress, na.rm = TRUE)) %>%
mutate(pres_avg_mountain = mean(mountainous, na.rm = TRUE)) %>%
distinct(pres_pd_budget_pc, .keep_all = TRUE) %>%
filter(!is.na(president)) %>%
select(president,
year,
country,
region_6,
pres_ppp_budget,
pres_ppp_budget_pc,
pres_ppp_budget_const,
pres_ppp_budget_pc_const,
pres_avg_pd_budget_pc,
pres_avg_pd_budget,
pres_pd_budget_pc,
pres_pd_budget,
pres_avg_polity,
pres_avg_elect,
pres_avg_us_troops,
pres_sum_us_troops,
pres_avg_pol_rights,
pres_avg_civ_lib,
pres_avg_gdp,
pres_avg_gdp_pc,
pres_avg_pop,
pres_avg_mil_exp,
pres_avg_un_dist,
pres_avg_trade_dep_us,
pres_avg_us_exp,
pres_sum_us_exp,
pres_avg_us_imp,
pres_sum_us_imp,
pres_avg_trade_open,
pres_avg_ethno_frac,
pres_avg_mus_perc,
pres_avg_cso_repress,
pres_avg_mountain,
defense_pact_us,
pres_avg_suicide,
pres_sum_suicide,
dist_moscow = dist_soto_moscow,
dist_dc = dist_to_wash_dc,
dist_beijing = dist_to_beijing) %>%
ungroup() -> pd_pres
pooling_model1 <-lm(log(pres_ppp_budget + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
# pres_avg_un_dist +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# as.factor(region_6) +
as.factor(president),
data = pd_pres)
pooling_model2 <-lm(log(pres_ppp_budget_pc + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
# pres_avg_un_dist +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# as.factor(region_6) +
as.factor(president),
data = pd_pres)
stargazer(pooling_model1, pooling_model2,
type = "html")
|
|
|
|
Dependent variable:
|
|
|
|
|
|
log(pres_ppp_budget + 1)
|
log(pres_ppp_budget_pc + 1)
|
|
|
(1)
|
(2)
|
|
|
|
log(pres_avg_gdp_pc)
|
-0.210
|
0.057***
|
|
|
(0.149)
|
(0.018)
|
|
|
|
|
|
log(pres_avg_pop)
|
0.460***
|
-0.150***
|
|
|
(0.095)
|
(0.012)
|
|
|
|
|
|
pres_avg_mus_perc
|
0.910**
|
-0.020
|
|
|
(0.435)
|
(0.053)
|
|
|
|
|
|
log(pres_avg_us_exp + 1)
|
0.067
|
0.007
|
|
|
(0.107)
|
(0.013)
|
|
|
|
|
|
log(pres_sum_suicide + 1)
|
0.068
|
0.052***
|
|
|
(0.115)
|
(0.014)
|
|
|
|
|
|
pres_avg_elect
|
1.491**
|
0.123*
|
|
|
(0.588)
|
(0.072)
|
|
|
|
|
|
log(pres_sum_us_troops + 1)
|
0.025
|
0.004
|
|
|
(0.061)
|
(0.007)
|
|
|
|
|
|
as.factor(president)Trump
|
-0.599**
|
-0.180***
|
|
|
(0.238)
|
(0.029)
|
|
|
|
|
|
Constant
|
9.198***
|
2.235***
|
|
|
(1.864)
|
(0.229)
|
|
|
|
|
|
|
|
Observations
|
299
|
299
|
|
R2
|
0.173
|
0.557
|
|
Adjusted R2
|
0.150
|
0.545
|
|
Residual Std. Error (df = 290)
|
2.035
|
0.250
|
|
F Statistic (df = 8; 290)
|
7.588***
|
45.545***
|
|
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
pd_pres %>%
filter(pres_avg_un_dist < 2.8) -> high_un
pd_pres %>%
filter(pres_avg_un_dist >= 2.8) -> low_un
high_pc <-lm(log(pres_ppp_budget_pc + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
# pres_avg_un_dist +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# (region_6) +
as.factor(president),
data = high_un)
low_pc <-lm(log(pres_ppp_budget_pc + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# as.factor(region_6) +
as.factor(president),
data = low_un)
high_total <-lm(log(pres_ppp_budget + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
# pres_avg_un_dist +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# (region_6) +
as.factor(president),
data = high_un)
low_total <-lm(log(pres_ppp_budget + 1) ~
log(pres_avg_gdp_pc) +
log(pres_avg_pop) +
pres_avg_mus_perc +
log(pres_avg_us_exp + 1) +
log(pres_sum_suicide + 1) +
pres_avg_elect +
# I(pres_avg_elect^2) +
log(pres_sum_us_troops + 1) +
# as.factor(region_6) +
as.factor(president),
data = low_un)
stargazer(high_total, low_total, high_pc, low_pc,
# column.labels = c("High_total", "Low_total", "High PC", "Low PC"),
type = "html")
|
|
|
|
Dependent variable:
|
|
|
|
|
|
log(pres_ppp_budget + 1)
|
log(pres_ppp_budget_pc + 1)
|
|
|
(1)
|
(2)
|
(3)
|
(4)
|
|
|
|
log(pres_avg_gdp_pc)
|
0.023
|
-0.212
|
0.088***
|
0.066**
|
|
|
(0.100)
|
(0.286)
|
(0.033)
|
(0.029)
|
|
|
|
|
|
|
|
log(pres_avg_pop)
|
0.484***
|
0.496***
|
-0.182***
|
-0.130***
|
|
|
(0.065)
|
(0.141)
|
(0.022)
|
(0.014)
|
|
|
|
|
|
|
|
pres_avg_mus_perc
|
0.590
|
1.115*
|
0.257**
|
-0.099
|
|
|
(0.384)
|
(0.597)
|
(0.128)
|
(0.061)
|
|
|
|
|
|
|
|
log(pres_avg_us_exp + 1)
|
-0.135**
|
0.121
|
0.023
|
-0.006
|
|
|
(0.055)
|
(0.193)
|
(0.018)
|
(0.020)
|
|
|
|
|
|
|
|
log(pres_sum_suicide + 1)
|
-0.142
|
0.031
|
0.018
|
0.044***
|
|
|
(0.103)
|
(0.161)
|
(0.034)
|
(0.016)
|
|
|
|
|
|
|
|
pres_avg_elect
|
-1.177*
|
2.052**
|
-0.084
|
0.193**
|
|
|
(0.688)
|
(0.948)
|
(0.229)
|
(0.097)
|
|
|
|
|
|
|
|
log(pres_sum_us_troops + 1)
|
0.018
|
0.046
|
-0.005
|
0.028**
|
|
|
(0.034)
|
(0.107)
|
(0.011)
|
(0.011)
|
|
|
|
|
|
|
|
as.factor(president)Trump
|
-0.437***
|
-0.719*
|
-0.177***
|
-0.179***
|
|
|
(0.123)
|
(0.376)
|
(0.041)
|
(0.038)
|
|
|
|
|
|
|
|
Constant
|
9.745***
|
8.030**
|
2.559***
|
1.798***
|
|
|
(1.180)
|
(3.137)
|
(0.394)
|
(0.320)
|
|
|
|
|
|
|
|
|
|
Observations
|
113
|
185
|
113
|
185
|
|
R2
|
0.645
|
0.156
|
0.689
|
0.512
|
|
Adjusted R2
|
0.618
|
0.118
|
0.665
|
0.490
|
|
Residual Std. Error
|
0.644 (df = 104)
|
2.526 (df = 176)
|
0.215 (df = 104)
|
0.257 (df = 176)
|
|
F Statistic
|
23.650*** (df = 8; 104)
|
4.064*** (df = 8; 176)
|
28.834*** (df = 8; 104)
|
23.080*** (df = 8; 176)
|
|
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
dv <- "log(budget + 1)"
ivs <- c("electoral_demo",
"log(gdp_pc_const)",
"log(pop)",
"muslim_percent"
)
form_1 <- as.formula(paste(dv, paste(ivs, collapse = " + "), sep = " ~ "))
the_df %>%
filter(ideal_point_distance < 2.7) -> high_df
the_df %>%
filter(ideal_point_distance >= 2.7) -> low_df
pooled <- plm(form_1, data = high_df, model = "pooling")
fixed_ind <- plm(form_1, data = high_df, model = "within", effect = "individual")
fixed_time <- plm(form_1, data = high_df, model = "within", effect = "time")
fixed_two <- plm(form_1, data = high_df, model = "within", effect = "twoways")
rand_ind <- plm(form_1, data = high_df, model = "random", effect = "individual")
rand_time <- plm(form_1, data = high_df, model = "random", effect = "time")
rand_two <- plm(form_1, data = high_df, model = "random", effect = "twoways")
Hausman Test
When we run the Hausman test with phtest() command, we see the p-value is is 0.8.
It is not less that 0.05 so we can look at random effects model.
phtest(fixed_time, rand_time)
Hausman Test
data: form_1 chisq = 0.1681, df = 4, p-value = 0.9967 alternative hypothesis: one model is inconsistent
Regression output
stargazer(rand_ind,
rand_time,
rand_two,
column.labels = c(
# "Fixed Ind", "Fixed Time", "Fixed Two",
"Rand Ind", "Rand Time", "Rand Two"),
type = "html")
|
|
|
|
Dependent variable:
|
|
|
|
|
|
log(budget + 1)
|
|
|
Rand Ind
|
Rand Time
|
Rand Two
|
|
|
(1)
|
(2)
|
(3)
|
|
|
|
electoral_demo
|
0.909*
|
-0.221
|
0.163
|
|
|
(0.480)
|
(0.294)
|
(1.460)
|
|
|
|
|
|
|
log(gdp_pc_const)
|
-0.002
|
0.052
|
0.113
|
|
|
(0.072)
|
(0.042)
|
(0.239)
|
|
|
|
|
|
|
log(pop)
|
0.479***
|
0.479***
|
0.468***
|
|
|
(0.049)
|
(0.021)
|
(0.172)
|
|
|
|
|
|
|
muslim_percent
|
0.984**
|
0.558***
|
0.909
|
|
|
(0.399)
|
(0.172)
|
(1.408)
|
|
|
|
|
|
|
Constant
|
5.881***
|
6.260***
|
5.501*
|
|
|
(0.913)
|
(0.422)
|
(3.297)
|
|
|
|
|
|
|
|
|
Observations
|
353
|
353
|
353
|
|
R2
|
0.785
|
0.639
|
0.559
|
|
Adjusted R2
|
0.783
|
0.635
|
0.554
|
|
F Statistic
|
102.985***
|
610.171***
|
8.258*
|
|
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
Correct for heteroskedasticity with robust standard errors
stargazer(
# coeftest(fixed_ind, vcov = vcovHC, type = "HC1"),
# coeftest(fixed_time, vcov = vcovHC, type = "HC1"),
# coeftest(fixed_two, vcov = vcovHC, type = "HC1"),
coeftest(rand_ind, vcov = vcovHC, type = "HC1"),
coeftest(rand_time, vcov = vcovHC, type = "HC1"),
coeftest(rand_two, vcov = vcovHC, type = "HC1"),
column.labels = c(
# "Fixed Ind", "Fixed Time", "Fixed Two",
"Rand Ind", "Rand Time", "Rand Two"),
type = "html")
|
|
|
|
Dependent variable:
|
|
|
|
|
|
|
|
|
Rand Ind
|
Rand Time
|
Rand Two
|
|
|
(1)
|
(2)
|
(3)
|
|
|
|
electoral_demo
|
0.909
|
-0.221
|
0.163
|
|
|
(0.782)
|
(0.670)
|
(0.812)
|
|
|
|
|
|
|
log(gdp_pc_const)
|
-0.002
|
0.052
|
0.113
|
|
|
(0.112)
|
(0.105)
|
(0.115)
|
|
|
|
|
|
|
log(pop)
|
0.479***
|
0.479***
|
0.468***
|
|
|
(0.044)
|
(0.041)
|
(0.044)
|
|
|
|
|
|
|
muslim_percent
|
0.984***
|
0.558
|
0.909*
|
|
|
(0.375)
|
(0.455)
|
(0.470)
|
|
|
|
|
|
|
Constant
|
5.881***
|
6.260***
|
5.501***
|
|
|
(1.054)
|
(1.108)
|
(1.049)
|
|
|
|
|
|
|
|
|
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
Lagrange Multiplier Test
Time effects (Breusch-Pagan)
We look at the Lagrange Multiplier test to see if there are time-effects in the model.
If the p-value < 0.05 then use time-fixed effects.
In our model, the , p-value is far below 0.05 so we can support the alternative hypothesis that there are time effects in the model
plmtest(pooled, c("time"), type=("bp"))
Lagrange Multiplier Test - time effects (Breusch-Pagan) for unbalanced
panels
data: form_1 chisq = 330.26, df = 1, p-value < 2.2e-16 alternative hypothesis: significant effects
Test of individual and/or time effects
We can use the pFtest() to also look at whether we use individual or time effects, based on the comparison of the within and the pooling model.
pFtest(fixed_time, pooled)
F test for time effects
data: form_1 F = 16.092, df1 = 6, df2 = 342, p-value = 2.566e-16 alternative hypothesis: significant effects
stargazer(rand_time, coeftest(rand_time, vcov = vcovHC, type = "HC1"),
column.labels = c("Random Model (Time Effects) ||", " Rand Time Robust Std. Error"),
type = "html")
|
|
|
|
Dependent variable:
|
|
|
|
|
|
log(budget + 1)
|
|
|
|
panel
|
coefficient
|
|
|
linear
|
test
|
|
|
Random Model (Time Effects) ||
|
Rand Time Robust Std. Error
|
|
|
(1)
|
(2)
|
|
|
|
electoral_demo
|
-0.221
|
-0.221
|
|
|
(0.294)
|
(0.670)
|
|
|
|
|
|
log(gdp_pc_const)
|
0.052
|
0.052
|
|
|
(0.042)
|
(0.105)
|
|
|
|
|
|
log(pop)
|
0.479***
|
0.479***
|
|
|
(0.021)
|
(0.041)
|
|
|
|
|
|
muslim_percent
|
0.558***
|
0.558
|
|
|
(0.172)
|
(0.455)
|
|
|
|
|
|
Constant
|
6.260***
|
6.260***
|
|
|
(0.422)
|
(1.108)
|
|
|
|
|
|
|
|
Observations
|
353
|
|
|
R2
|
0.639
|
|
|
Adjusted R2
|
0.635
|
|
|
F Statistic
|
610.171***
|
|
|
|
|
Note:
|
p<0.1; p<0.05; p<0.01
|
LS0tDQp0aXRsZTogIlNjYXR0ZXJwbG90cyBhbmQgYmFyY2hhcnRzIg0KYXV0aG9yOiAiUGF1bGEiDQpkYXRlOiAiOC8xOS8yMDIxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgdG9jX2RlcHRoOiA1DQogICAgDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KDQojIHRib2R5IHRyOm50aC1jaGlsZChvZGQpIHtiYWNrZ3JvdW5kOiAjZWVlO30NCiAgICANCmgxLCBoMiwgaDMge3RleHQtYWxpZ246IGNlbnRlcjt9DQoNCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQoNCmxpYnJhcnkocGxtKQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkoc2FuZHdpY2gpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KHdlc2FuZGVyc29uKQ0KbGlicmFyeShjb3VudHJ5Y29kZSkNCmxpYnJhcnkoc2tpbXIpDQpsaWJyYXJ5KHByaWNlUikNCmxpYnJhcnkoa25pdHIpIA0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHJlc2hhcGUyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShybmF0dXJhbGVhcnRoKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KGhhdmVuKQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShwcmljZVIpDQpsaWJyYXJ5KGZvcmVpZ24pDQpsaWJyYXJ5KHJlYWR4bCkNCg0KDQp0aGVfZGYgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL1BhdWxhL0Rlc2t0b3AvUERfb3JpZ2luYWxfZGF0YXNldHMvcHJvdG8yLmNzdiIpDQoNCnRoZV9kZiRYLjEgPC0gTlVMTA0KdGhlX2RmJFgxIDwtIE5VTEwNCnRoZV9kZiRYIDwtIE5VTEwNCg0KdGhlX2RmICU8PiUgDQogIG11dGF0ZShjb3VudHJ5ID0gaWZlbHNlKGNvdW50cnkgPT0gIlRyaW5pZGFkIEFuZCBUb2JhZ28iLCAiVHJpbmlkYWQgYW5kIFRvYmFnbyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShjb3VudHJ5ID09ICJCb3NuaWEgQW5kIEhlcnplZ292aW5hIiwgIkJvc25pYSBhbmQgSGVyemVnb3ZpbmEiLCBjb3VudHJ5KSkpICU+JSANCiAgbXV0YXRlKGNvd19jb2RlID0gaWZlbHNlKGNvdW50cnkgPT0gIlRhaXdhbiIsIDcxMywgY293X2NvZGUpKQ0KDQpndGQgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL1BhdWxhL0Rlc2t0b3AvUERfb3JpZ2luYWxfZGF0YXNldHMvZ3RkLmNzdiIpDQoNCnRoZV9kZiRyZWdpb25fNiA8LSByZWNvZGVfZmFjdG9yKHRoZV9kZiRyZWdpb25fNiwgIkFzaWEgYW5kIFBhY2lmaWMiID0gIkFzaWEiLA0KICAgICAgICAgICAgICAgICJMYXRpbiBBbWVyaWNhIENhcmliYmVhbiIgPSAiTGF0aW4iLA0KICAgICAgICAgICAgICAgICJTdWItU2FoYXJhIiA9ICJBZnJpY2EiKQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCByZXN1bHRzID0gImFzaXMiLCBvdXQud2lkdGggPSAiNDAwJSIpDQoNCm9wdGlvbnMoa25pdHIudGFibGUuZm9ybWF0ID0gImh0bWwiKSANCmBgYA0KDQoNCmBgYHtyIGFkZF90ZXJyb3Jpc3RfdmFyaWFibGVzLCBlY2hvID0gRkFMU0V9DQoNCmd0ZCRjb3dfY29kZSA8LSBjb3VudHJ5Y29kZShndGQkY291bnRyeV90eHQsICJjb3VudHJ5Lm5hbWUiLCAiY293biIpDQoNCmd0ZCAlPD4lIA0KICAgbXV0YXRlKGNvd19jb2RlID0gaWZlbHNlKGNvdW50cnlfdHh0ID09ICJXZXN0IEJhbmsgYW5kIEdhemEgU3RyaXAiLCA2NjY2LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShjb3VudHJ5X3R4dCA9PSAiU2VyYmlhIiwgMzQ1LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShjb3VudHJ5X3R4dCA9PSAiSG9uZyBLb25nIiwgOTk3LCBjb3dfY29kZSkpKSkNCg0KZ3RkJGNvdW50cnkgPC0gTlVMTA0KDQoNCmd0ZCAlPiUgDQogIGdyb3VwX2J5KGNvd19jb2RlLCBpeWVhcikgJT4lIA0KICBzZWxlY3QoeWVhciA9IGl5ZWFyLCBldmVyeXRoaW5nKCkpICU+JSANCiAgc3VtbWFyaXNlKHN1bV9hdHRhY2tzID0gbigpKSAlPiUgDQogIHVuZ3JvdXAoKSAtPiBndGRfYW5udWFsX3N1bQ0KDQpndGQgJT4lIA0KICBncm91cF9ieShjb3dfY29kZSwgaXllYXIpICU+JSANCiAgc2VsZWN0KHllYXIgPSBpeWVhciwgZXZlcnl0aGluZygpKSAlPiUgDQogIGZpbHRlcihzdWljaWRlID09IDEpICU+JSANCiAgc3VtbWFyaXNlKHN1bV9zdWljaWRlcyA9IG4oKSkgJT4lIA0KICB1bmdyb3VwKCkgLT4gZ3RkX2FubnVhbF9zdWljaWRlDQoNCmd0ZCAlPiUgDQogIGdyb3VwX2J5KGNvd19jb2RlLCBpeWVhcikgJT4lIA0KICBzZWxlY3QoeWVhciA9IGl5ZWFyLCBldmVyeXRoaW5nKCkpICU+JSANCiAgZmlsdGVyKHN1aWNpZGUgPT0gMSkgJT4lIA0KICBzdW1tYXJpc2Uoc3VtX2FsbF95ZWFyX3N1aWNpZGVzID0gbigpKSAlPiUgDQogIHVuZ3JvdXAoKSAtPiBndGRfdG90YWxfc3VpY2lkZQ0KDQpndGQgJT4lIA0KICBncm91cF9ieShjb3dfY29kZSwgaXllYXIsIHJlZ2lvbl90eHQpICU+JSANCiAgc2VsZWN0KHllYXIgPSBpeWVhciwgZXZlcnl0aGluZygpKSAlPiUgDQogIHN1bW1hcmlzZShzdW1fYWxsX3llYXJfYXR0YWNrcyA9IG4oKSkgJT4lIA0KICB1bmdyb3VwKCkgLT4gZ3RkX3RvdGFsX3N1bQ0KDQp0aGVfZGYgPC0gbWVyZ2UodGhlX2RmLCBndGRfYW5udWFsX3N1bSwgYnkgPSBjKCJjb3dfY29kZSIsICJ5ZWFyIiksIGFsbC54ID0gVFJVRSkNCnRoZV9kZiA8LSBtZXJnZSh0aGVfZGYsIGd0ZF9hbm51YWxfc3VpY2lkZSwgYnkgPSBjKCJjb3dfY29kZSIsICJ5ZWFyIiksIGFsbC54ID0gVFJVRSkNCnRoZV9kZiA8LSBtZXJnZSh0aGVfZGYsIGd0ZF90b3RhbF9zdWljaWRlLCBieSA9IGMoImNvd19jb2RlIiwgInllYXIiKSwgYWxsLnggPSBUUlVFKQ0KdGhlX2RmIDwtIG1lcmdlKHRoZV9kZiwgZ3RkX3RvdGFsX3N1bSwgYnkgPSBjKCJjb3dfY29kZSIsICJ5ZWFyIiksIGFsbC54ID0gVFJVRSkNCg0KYGBgDQoNCmBgYHtyIGFkZF9haWliX3ZhcnN9DQoNCmFpaWIgPC0gcmVhZF9kdGEoIkM6L1VzZXJzL1BhdWxhL0Rlc2t0b3AvQUlJQi1Gb3JSZXN1Ym1pc3Npb24uZHRhIikNCg0KYWlpYiAlPD4lIA0KICBzZWxlY3QoY2NvZGUsIGFpaWJtZW1iZXI6YWRibm9ucmVnaW9uYWxtZW1iZXIsIGFzaWFwYWNpZmljLCBjaGluYWFsaWdubWVudCwgdXNtaWxpdGFyeWFsbGlhbmNlKQ0KDQp0aGVfZGYgPC0gbWVyZ2UodGhlX2RmLCBhaWliLCBieS54ID0gYygiY293X2NvZGUiKSwgYnkueSA9IGMoImNjb2RlIiksIGFsbC54ID0gVFJVRSkNCg0KYGBgDQoNCmBgYHtyfQ0KDQpydXNzaWFfZHlhZCA8LSByZWFkLmNzdigiQzovVXNlcnMvUGF1bGEvRGVza3RvcC9QRF9vcmlnaW5hbF9kYXRhc2V0cy9ydXNzaWFfZHlhZC5jc3YiKQ0KcnVzc2lhX2R5YWQkWCA8LSBOVUxMDQoNCnRoZV9kZiA8LSBtZXJnZSh0aGVfZGYsIHJ1c3NpYV9keWFkLCBieSA9IGMoImNvd19jb2RlIiwgInllYXIiKSwgYWxsLnggPSBUUlVFKQ0KDQpzb3ZpZXRfaXJvbl9jdXJ0YWluX3ZlY3RvciA8LSBjKCJBbGJhbmlhIiwgIkJ1bGdhcmlhIiwgIkN6ZWNoIFJlcHVibGljIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQb2xhbmQiLCAgIktvc292byIsICAgIlJvbWFuaWEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkh1bmdhcnkiLCAgIlNsb3Zha2lhIiwgICJCb3NuaWEgYW5kIEhlcnplZ292aW5hIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNyb2F0aWEiLCAgIk1hY2Vkb25pYSIsICJNb250ZW5lZ3JvIiwgIlNlcmJpYSIpDQoNCnNvdmlldF9yZXB1YmxpY3NfdmVjdG9yIDwtIGMoIlJ1c3NpYSIsICJMaXRodWFuaWEiLCAiR2VvcmdpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFc3RvbmlhIiwgIkxhdHZpYSIsICAiVWtyYWluZSIJLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsYXJ1cyIsICJNb2xkb3ZhIiwgIkt5cmd5enN0YW4iLAkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlV6YmVraXN0YW4iLCAiVGFqaWtpc3RhbiIsICJBcm1lbmlhIgksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBemVyYmFpamFuIiwgIlR1cmttZW5pc3RhbiIsICJLYXpha2hzdGFuIikNCg0KdGhlX2RmICU8PiUNCiAgZHBseXI6Om11dGF0ZShzb3ZpZXRfaXJvbl9jdXJ0YWluID0gaWZlbHNlKGNvdW50cnkgJWluJSBzb3ZpZXRfaXJvbl9jdXJ0YWluX3ZlY3RvciwgMSwgMCkpIA0KDQp0aGVfZGYgJTw+JQ0KICBkcGx5cjo6bXV0YXRlKHNvdmlldF9yZXB1YmxpY3MgPSBpZmVsc2UoY291bnRyeSAlaW4lIHNvdmlldF9yZXB1YmxpY3NfdmVjdG9yLCAxLCAwKSkgDQoNCnRoZV9kZiAlPD4lIG11dGF0ZShydXNfaW5mbHVlbmNlID0gaWZlbHNlKGNvdW50cnkgPT0gIlJ1c3NpYSIsIDEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxldmVsX2NvbnRpZ19ydXMgPT0gMSwgMSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHNvdmlldF9yZXB1YmxpY3MgPT0gMSwgMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzb3ZpZXRfaXJvbl9jdXJ0YWluID09IDEsIDEsIDApKSkpKQ0KYGBgDQoNCmBgYHtyfQ0KdGhlX2RmICU+JSANCiAgbXV0YXRlKGJ1ZGdldF9wYyA9IGJ1ZGdldCAvIHBvcCwgbmEucm0gPSBUUlVFKSAlPiUNCiAgbXV0YXRlKGV4cG9ydHNfcGMgPSBleHBvcnRzX2JvcCAvIHBvcCwgbmEucm0gPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh0b3RhbF90cmFkZSA9IGV4cG9ydHNfYm9wICsgaW1wb3J0c19ib3AsIG5hLnJtID0gVFJVRSkgJT4lIA0KICBtdXRhdGUodHJhZGVfb3BlbmVzcyA9IHRvdGFsX3RyYWRlIC8gZ2RwX2NvbnN0LCBuYS5ybSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHVzX3RvdGFsX3RyYWRlID0gdXNfZXhwb3J0c190b19jb3VudHJ5ICsgdXNfaW1wb3J0c19mcm9tX2NvdW50cnksIG5hLnJtID0gVFJVRSkgJT4lIA0KICBtdXRhdGUodXNfdHJhZGVfZGVwZW5kZW5jZSA9IHVzX3RvdGFsX3RyYWRlIC8gYmFsYW5jZV90cmFkZSwgbmEucm0gPSBUUlVFKSAlPiUgDQogIG11dGF0ZSh1c19leHBvcnRzX3BjID0gdXNfZXhwb3J0c190b19jb3VudHJ5IC8gcG9wLCBuYS5ybSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKG11c2xpbV9wZXJjZW50ID0gcGVyY2VudF9tdXNsaW1faml0dGVyIC8gcG9wLCBuYS5ybSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHVzX2ltcG9ydHNfcGMgPSB1c19pbXBvcnRzX2Zyb21fY291bnRyeSAvIHBvcCwgbmEucm0gPSBUUlVFKSAtPiB0aGVfZGYNCg0KYGBgDQoNCiMgQ29zdCBvZiBsaXZpbmcgcmFua2luZw0KDQpUaGUgbWFpbiBwcm9ibGVtIA0KDQpTb3VyY2U6ICAiaHR0cHM6Ly93d3cubnVtYmVvLmNvbS9jb3N0LW9mLWxpdmluZy9yYW5raW5nc19ieV9jb3VudHJ5LmpzcD90aXRsZT0yMDE5Ig0KDQpgYGB7cn0NCg0KDQp1cmwgPC0gImh0dHBzOi8vd3d3Lm51bWJlby5jb20vY29zdC1vZi1saXZpbmcvcmFua2luZ3NfYnlfY291bnRyeS5qc3A/dGl0bGU9MjAxOSINCg0KIyBDb3VudHJpZXMgd2l0aCBubyBJTkRFWA0KY29sX3VybCA8LSByZWFkX2h0bWwodXJsKQ0KY29sX3RhYmxlIDwtIGNvbF91cmwgJT4lIGh0bWxfdGFibGUoaGVhZGVyID0gVFJVRSwgZmlsbCA9IFRSVUUpDQpjb2xfMTkgPC0gY29sX3RhYmxlW1syXV0NCg0KY29sXzE5JHllYXIgPC0gcmVwbGljYXRlKDExOSwgMjAxOSkNCmNvbF8xOSRyYW5rIDwtIE5VTEwNCmNvbF8xOSAlPD4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmNvbF8xOSRjb3dfY29kZSA8LSBjb3VudHJ5Y29kZShjb2xfMTkkY291bnRyeSwgImNvdW50cnkubmFtZSIsICJjb3duIikNCg0KY29sXzE5ICU8PiUgZHBseXI6Om11dGF0ZShjb3dfY29kZSA9IGlmZWxzZShjb3VudHJ5ID09ICJQYWxlc3RpbmUiLCA2NjY2LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoY291bnRyeSA9PSAiU2VyYmlhIiwgMzQ1LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShjb3VudHJ5ID09ICJIb25nIEtvbmciLCA5OTcsIGNvd19jb2RlKSkpKQ0KDQpuYW1lcyhjb2xfMTkpDQpjb2xfMTkgJT4lIA0KICBhcnJhbmdlKGRlc2MoY29zdF9vZl9saXZpbmdfaW5kZXgpKSAlPiUgDQogIHNlbGVjdChjb3VudHJ5LCBjb3N0X29mX2xpdmluZyA9IGNvc3Rfb2ZfbGl2aW5nX2luZGV4KSAlPiUgDQogIGhlYWQoKSAlPiUgDQogIGtibCgpICU+JQ0KICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQogICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGKQ0KDQpjb2xfMTkgJT4lIA0KICBhcnJhbmdlKGRlc2MoY29zdF9vZl9saXZpbmdfaW5kZXgpKSAlPiUgDQogIHNlbGVjdChjb3VudHJ5LCBjb3N0X29mX2xpdmluZyA9IGNvc3Rfb2ZfbGl2aW5nX2luZGV4KSAlPiUgDQogIHRhaWwoKSAlPiUgDQogIGtibCgpICU+JQ0KICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQogICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGKQ0KDQpgYGANCg0KYGBge3IsIGVjaG8gLSBGQUxTRX0NCg0KIyBkZl8xOSAlPiUgDQojICAgZ3JvdXBfYnkoY291bnRyeSkgJT4lIA0KIyAgIG11dGF0ZShwcHBfYnVkZ2V0ID0gYnVkZ2V0ICogcHBwKSAlPiUgDQojICAgc2VsZWN0KGNvdW50cnksIHBwcF9idWRnZXQpICU+JSANCiMgICBhcnJhbmdlKGRlc2MocHBwX2J1ZGdldCkpIC0+IHRhYmxlM19tdWx0DQojIA0KIyBkZl8xOSAlPiUgDQojICAgZ3JvdXBfYnkoY291bnRyeSkgJT4lIA0KIyAgIG11dGF0ZShwcHBfYnVkZ2V0ID0gYnVkZ2V0ICogcHBwKSAlPiUgDQojICAgc2VsZWN0KGNvdW50cnksIHJhd19idWRnZXQgPSBidWRnZXQpICU+JSANCiMgICBhcnJhbmdlKGRlc2MocmF3X2J1ZGdldCkpIC0+IHRhYmxlNF9tdWx0DQoNCiMga2JsKGxpc3QodGFibGUzX211bHQsIHRhYmxlNF9tdWx0KSwgZGlnaXRzID0gMCwgDQojICAgICBjYXB0aW9uID0gIkFycmFuZ2VkIEJ5IFBQUCBBZGp1c3RlZCBCdWRnZXQgTEVGVCBhbmQgQnkgUFBQIFJhdyBCdWRnZXQgUklHSFQiKSAlPiUNCiMgICAgIGthYmxlX3BhcGVyKCJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IFQpIA0KDQpgYGANCg0KIyBBZGp1c3QgdG8gMjAxOSBwcmljZXMNCg0KDQpgYGB7cn0NCg0KY291bnRyeSA8LSAiVW5pdGVkIFN0YXRlcyINCmNvdW50cmllc19kYXRhZnJhbWUgPC0gc2hvd19jb3VudHJpZXMoKQ0KaW5mbGF0aW9uX2RhdGFmcmFtZSA8LSByZXRyaWV2ZV9pbmZsYXRpb25fZGF0YShjb3VudHJ5LCBjb3VudHJpZXNfZGF0YWZyYW1lKQ0KDQojIFByb3ZpZGUgYSBXb3JsZCBCYW5rIEFQSSBVUkwgYW5kIHVybF9hbGxfcmVzdWx0cyB3aWxsIGNvbnZlcnQgaXQgaW50byBvbmUgd2l0aCBhbGwgcmVzdWx0cyBmb3IgdGhhdCBpbmRpY2F0b3INCm9yaWdpbmFsX3VybCA8LSAiaHR0cDovL2FwaS53b3JsZGJhbmsub3JnL3YyL2NvdW50cnkiIA0KDQojICJodHRwOi8vYXBpLndvcmxkYmFuay5vcmcvdjIvY291bnRyeT9mb3JtYXQ9anNvbiZwZXJfcGFnZT0zMDQiDQp1cmxfYWxsX3Jlc3VsdHMob3JpZ2luYWxfdXJsKQ0KDQp0aGVfZGYkYnVkZ2V0X2NvbnN0IDwtIGFkanVzdF9mb3JfaW5mbGF0aW9uKHRoZV9kZiRidWRnZXQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2RmJHllYXIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19kYXRlID0gMjAxOSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGlvbl9kYXRhZnJhbWUgPSBpbmZsYXRpb25fZGF0YWZyYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyaWVzX2RhdGFmcmFtZSA9IGNvdW50cmllc19kYXRhZnJhbWUpDQoNCnRoZV9kZiRidWRnZXRfcGNfY29uc3QgPC0gYWRqdXN0X2Zvcl9pbmZsYXRpb24odGhlX2RmJGJ1ZGdldF9wYywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2RmJHllYXIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19kYXRlID0gMjAxOSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGlvbl9kYXRhZnJhbWUgPSBpbmZsYXRpb25fZGF0YWZyYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyaWVzX2RhdGFmcmFtZSA9IGNvdW50cmllc19kYXRhZnJhbWUpDQoNCmBgYA0KDQoNCiMgUHJpY2UgbGV2ZWwgcmF0aW8NCiANClNvdXJjZTogaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1BBLk5VUy5QUFBDLlJGDQoNClByaWNlIGxldmVsIHJhdGlvIGlzIHRoZSByYXRpbyBvZiBhIHB1cmNoYXNpbmcgcG93ZXIgcGFyaXR5IChQUFApIGNvbnZlcnNpb24gZmFjdG9yIHRvIGFuIGV4Y2hhbmdlIHJhdGUuIEl0IHByb3ZpZGVzIGEgbWVhc3VyZSBvZiB0aGUgZGlmZmVyZW5jZXMgaW4gcHJpY2UgbGV2ZWxzIGJldHdlZW4gY291bnRyaWVzIGJ5IGluZGljYXRpbmcgdGhlIG51bWJlciBvZiB1bml0cyBvZiB0aGUgY29tbW9uIGN1cnJlbmN5IG5lZWRlZCB0byBidXkgdGhlIHNhbWUgdm9sdW1lIG9mIHRoZSBhZ2dyZWdhdGlvbiBsZXZlbCBpbiBlYWNoIGNvdW50cnkuDQoNCkluZGljYXRvciBzb3VyY2U6IA0KSW50ZXJuYXRpb25hbCBDb21wYXJpc29uIFByb2dyYW0sIFdvcmxkIEJhbmsNCg0KDQpgYGB7cn0NCg0KbGlicmFyeShXREkpDQpwcHAgPSBXREkoaW5kaWNhdG9yPSdQQS5OVVMuUFBQQy5SRicsIGNvdW50cnk9ImFsbCIsIHN0YXJ0PTIwMTMsIGVuZD0yMDE5KQ0KcHBwJHBwcCA8LSBwcHAkUEEuTlVTLlBQUEMuUkYNCnBwcCRQQS5OVVMuUFBQQy5SRiA8LSBOVUxMDQoNCnBwcCRjb3dfY29kZSA8LSBjb3VudHJ5Y29kZShwcHAkaXNvMmMsICJpc28yYyIsICJjb3duIikNCg0KcHBwICU8PiUgDQpkcGx5cjo6bXV0YXRlKGNvd19jb2RlID0gaWZlbHNlKGNvdW50cnkgPT0gIldlc3QgQmFuayBhbmQgR2F6YSIsIDY2NjYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoY291bnRyeSA9PSAiU2VyYmlhIiwgMzQ1LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShjb3VudHJ5ID09ICJIb25nIEtvbmcgU0FSLCBDaGluYSIsIDk5NywgY293X2NvZGUpKSkpDQoNCnBwcCRjb3VudHJ5IDwtIE5VTEwNCg0KdGhlX2RmIDwtIG1lcmdlKHRoZV9kZiwgcHBwLCBieSA9IGMoImNvd19jb2RlIiwgInllYXIiKSwgYWxsLnggPSBUUlVFKQ0KDQp0aGVfZGYgJTw+JSAgDQogIG11dGF0ZShwcHBfYnVkZ2V0ID0gYnVkZ2V0IC8gcHBwLCBuYS5ybSA9IFRSVUUpICU+JSANCiAgbXV0YXRlKHBwcF9idWRnZXRfcGMgPSBidWRnZXRfcGMgKiBwcHAsIG5hLnJtID0gVFJVRSkgJT4lIA0KICBtdXRhdGUocHBwX2J1ZGdldF9jb25zdCA9IGJ1ZGdldF9jb25zdCAvIHBwcCwgbmEucm0gPSBUUlVFKSAlPiUgDQogIG11dGF0ZShwcHBfYnVkZ2V0X3BjX2NvbnN0ID0gYnVkZ2V0X3BjX2NvbnN0ICogcHBwLCBuYS5ybSA9IFRSVUUpICU+JSANCiAgc2VsZWN0KHBwcF9idWRnZXQsIHBwcF9idWRnZXRfcGMsIHBwcF9idWRnZXRfY29uc3QsIHBwcF9idWRnZXRfcGNfY29uc3QsIGV2ZXJ5dGhpbmcoKSkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCnRoZV9kZiAlPiUNCiAgZmlsdGVyKHllYXIgPT0gMjAxNCkgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiS29zb3ZvIikgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiQ3VyYWNhbyIpICU+JSANCiAgZmlsdGVyKGNvdW50cnkgIT0gIlZhdGljYW4gQ2l0eSIpICU+JQ0KICBzZWxlY3QoY291bnRyeSwgcHBwX2J1ZGdldCkgJT4lDQogIGFycmFuZ2UoZGVzYyhwcHBfYnVkZ2V0KSkgLT50MQ0KDQp0aGVfZGYgJT4lDQogIGZpbHRlcihjb3VudHJ5ICE9ICJLb3Nvdm8iKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ICE9ICJDdXJhY2FvIikgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiVmF0aWNhbiBDaXR5IikgJT4lDQogIGZpbHRlcih5ZWFyID09IDIwMTQpICU+JSANCiAgc2VsZWN0KGNvdW50cnksIHBwcF9idWRnZXRfcGMpICU+JQ0KICBhcnJhbmdlKGRlc2MocHBwX2J1ZGdldF9wYykpIC0+IHQyDQoNCnRoZV9kZiAlPiUNCiAgZmlsdGVyKGNvdW50cnkgIT0gIktvc292byIpICU+JQ0KICBmaWx0ZXIoY291bnRyeSAhPSAiQ3VyYWNhbyIpICU+JSANCiAgZmlsdGVyKGNvdW50cnkgIT0gIlZhdGljYW4gQ2l0eSIpICU+JSANCiAgZmlsdGVyKHllYXIgPT0gMjAxNCkgJT4lIA0KICBzZWxlY3QoY291bnRyeSwgcHBwX2J1ZGdldF9jb25zdCkgJT4lDQogIGFycmFuZ2UoZGVzYyhwcHBfYnVkZ2V0X2NvbnN0KSkgLT4gdDMNCg0KdGhlX2RmICU+JQ0KICBmaWx0ZXIoY291bnRyeSAhPSAiS29zb3ZvIikgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiQ3VyYWNhbyIpICU+JSANCiAgZmlsdGVyKGNvdW50cnkgIT0gIlZhdGljYW4gQ2l0eSIpICU+JQ0KICBmaWx0ZXIoeWVhciA9PSAyMDE0KSAlPiUgDQogIHNlbGVjdChjb3VudHJ5LCBwcHBfYnVkZ2V0X3BjX2NvbnN0KSAlPiUNCiAgYXJyYW5nZShkZXNjKHBwcF9idWRnZXRfcGNfY29uc3QpKSAtPiB0NA0KDQp0aGVfZGYgJT4lDQogIGZpbHRlcihjb3VudHJ5ICE9ICJLb3Nvdm8iKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ICE9ICJDdXJhY2FvIikgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiVmF0aWNhbiBDaXR5IikgJT4lDQogIGZpbHRlcih5ZWFyID09IDIwMTQpICU+JSANCiAgc2VsZWN0KGNvdW50cnksIGJ1ZGdldCkgJT4lDQogIGFycmFuZ2UoZGVzYyhidWRnZXQpKSAtPiB0MA0KDQp0aGVfZGYgJT4lDQogIGZpbHRlcihjb3VudHJ5ICE9ICJLb3Nvdm8iKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ICE9ICJDdXJhY2FvIikgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAhPSAiVmF0aWNhbiBDaXR5IikgJT4lDQogIGZpbHRlcih5ZWFyID09IDIwMTQpICU+JSANCiAgc2VsZWN0KGNvdW50cnksIGJ1ZGdldF9wYykgJT4lDQogIGFycmFuZ2UoZGVzYyhidWRnZXRfcGMpKSAtPiB0cGMNCg0Ka2JsKGxpc3QodDAsIHQxLCAgdDMsIHRwYywgdDIsIHQ0KSwgZGlnaXRzID0gNCkgJT4lIA0KICAgICBrYWJsZV9wYXBlcigic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGQUxTRSkgDQoNCmBgYA0KDQpgYGB7cn0NCg0KbGlicmFyeSh0cm9vcGRhdGEpDQoNCnRyb29wc191cyA8LSBnZXRfdHJvb3BkYXRhKHN0YXJ0eWVhciA9IDIwMTMsIGVuZHllYXIgPSAyMDIwKQ0KDQp0aGVfZGYgPC0gbWVyZ2UodGhlX2RmLCB0cm9vcHNfdXMsIGJ5LnggPSBjKCJjb3dfY29kZSIsICJ5ZWFyIiksIGJ5LnkgPSBjKCJjY29kZSIsICJ5ZWFyIiksIGFsbC54ID0gVFJVRSkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KdXNfYmFzZV9kZiA8LXJlYWQuY3N2KCJDOi9Vc2Vycy9QYXVsYS9EZXNrdG9wL1BEX29yaWdpbmFsX2RhdGFzZXRzL0Jhc2VzLmNzdiIpIA0KICANCnVzX2Jhc2VfZGYgJT4lIA0KICBmaWx0ZXIoYmFzZSA9PSAxKSAlPiUNCiAgZ3JvdXBfYnkoQ291bnRyeS5OYW1lKSAlPiUgDQogIGNvdW50KCkgJT4lIA0KICBhcnJhbmdlKGRlc2MobikpICU+JSANCiAgZmlsdGVyKG4gPiAyKSAlPiUgDQogIGtibCgpICU+JQ0KICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQogICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGKQ0KDQogIHVzX2Jhc2VfZGYgJT4lIA0KICBmaWx0ZXIobGlseXBhZCA9PSAxKSAlPiUNCiAgZ3JvdXBfYnkoQ291bnRyeS5OYW1lKSAlPiUgDQogIGNvdW50KCkgJT4lIA0KICBhcnJhbmdlKGRlc2MobikpICU+JSANCiAgZmlsdGVyKG4gPiAyKSAlPiUgDQogIGtibCgpICU+JQ0KICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQogICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGKQ0KDQp1c19iYXNlX2RmICU+JSANCiAgZ3JvdXBfYnkoQ291bnRyeS5OYW1lKSAlPiUgDQogIGNvdW50KCkgJT4lIA0KICBhcnJhbmdlKGRlc2MobikpICU+JSANCiAgZmlsdGVyKG4gPiA1KSAlPiUgDQogIGtibCgpICU+JQ0KICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQogICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGKQ0KICANCiANCndhcl9vbl90ZXJyb3IgPC0gYygiQWZnaGFuaXN0YW4iLCAiWWVtZW4iLCAiU3lyaWEiLCAiSXJhcSIsICJQYWtpc3RhbiIpDQoNCiB0aGVfZGYgJTw+JQ0KICAgZHBseXI6Om11dGF0ZSh3YXJfb25fdGVycm9yID0gaWZlbHNlKGNvdW50cnkgJWluJSB3YXJfb25fdGVycm9yLCAxLCAwKSkgDQoNCiAgDQpgYGANCg0KDQojIERyb25lIGF0dGFja3MNCg0KYGBge3J9DQogDQojIGRyb25lX3dhcnMgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL1BhdWxhL0Rlc2t0b3AvZHJvbmVfd2FyLmNzdiIpDQoNCiMgc3Vic3RyUmlnaHQgPC0gZnVuY3Rpb24oeCwgbil7DQojICAgc3Vic3RyKHgsIG5jaGFyKHgpLW4rMSwgbmNoYXIoeCkpIH0NCiANCiMgZHJvbmVfd2FycyR5ZWFyIDwtIGFzLm51bWVyaWMoc3Vic3RyUmlnaHQoZHJvbmVfd2FycyREYXRlLi5NTS5ERC5ZWVlZLiwgNCkpDQogDQojIGRyb25lX3dhcnMgJTw+JSANCiMgICBtdXRhdGUoQ291bnRyeSA9IGlmZWxzZShncmVwbCgnQWZnaGFuaXN0YW4nLCBDb3VudHJ5KSwgJ0FmZ2hhbmlzdGFuJywgYXMuY2hhcmFjdGVyKENvdW50cnkpKSkNCg0KIyBkcm9uZV93YXJzICU+JQ0KIyAgIGNsZWFuX25hbWVzKCkgJT4lIA0KIyAgIGdyb3VwX2J5KGNvdW50cnkpICU+JQ0KIyAgIHN1bW1hcmlzZShzdW1fZHJvbmUgPSBuKCkpICU+JSANCiMgICBhcnJhbmdlKGRlc2Moc3VtX2Ryb25lKSkgJT4lIA0KIyAgIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoY291bnRyeSwgc3VtX2Ryb25lKSwgIA0KIyAgICAgICAgICAgICAgeSA9IHN1bV9kcm9uZSwgDQojICAgICAgICAgICAgICBmaWxsID0gYXMuZmFjdG9yKGNvdW50cnkpKSkgKyANCiMgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKyANCiMgICBjb29yZF9mbGlwKCkgKyANCiMgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjOWIyMjI2IiwiIzBhOTM5NiIsIiM5NGQyYmQiLCIjZWU5YjAwIiksIA0KIyAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQojICAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiMgICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksIA0KIyAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArIA0KIyAgIHhsYWIoImNvdW50cnkiKSArDQojICAgeWxhYigiVG90YWwgZHJvbmUgc3RyaWtlcyIpICsNCiMgICBnZ3RoZW1lczo6dGhlbWVfcGFuZGVyKCkgDQoNCmBgYA0KDQpgYGB7cn0NCg0KIyBkcm9uZV93YXJzICU+JQ0KIyAgIGNsZWFuX25hbWVzKCkgJT4lDQojICAgZ3JvdXBfYnkoY291bnRyeSwgeWVhcikgJT4lDQojICAgc3VtbWFyaXNlKHN1bV9kcm9uZSA9IG4oKSkgLT4gZHJvbmVfc3VtDQoNCiMgZHJvbmVfc3VtJGNvd19jb2RlIDwtIGNvdW50cnljb2RlKGRyb25lX3N1bSRjb3VudHJ5LCAiY291bnRyeS5uYW1lIiwgImNvd24iKQ0KIyANCiMgdGhlX2RmIDwtIG1lcmdlKHRoZV9kZiwgZHJvbmVfc3VtLCBieSA9IGMoImNvd19jb2RlIiwgInllYXIiKSwgYWxsLnggPSBUUlVFKQ0KIyB0aGVfZGYkc3VtX2Ryb25lW2lzLm5hKHRoZV9kZiRzdW1fZHJvbmUpXSA8LSAwDQoNCiMgdGhlX2RmICU+JSANCiMgICBzZWxlY3QoY291bnRyeSwgDQojICAgICAgICAgIHllYXIsDQojICAgICAgICAgIHN1bV9kcm9uZS54KSAlPiUgDQojICAgYXJyYW5nZShkZXNjKHN1bV9kcm9uZSkpDQoNCiMgdGhlX2RmICU+JQ0KIyAgIG11dGF0ZShkcm9uZXNfYmluYXJ5ID0gaWZlbHNlKHN1bV9kcm9uZSA+IDAsIDEsIDApKSAlPiUgDQojICAgbXV0YXRlKGRyb25lc19iaW5hcnkgPSBhcy5mYWN0b3IoZHJvbmVzX2JpbmFyeSkpICU+JSANCiMgICBncm91cF9ieShjb3VudHJ5LngpICU+JSANCiMgICAjIGZpbHRlcihjb3VudHJ5LnggPT0gIkFmZ2hhbmlzdGFuIiB8IGNvdW50cnkueCAgPT0gIlNvbWFsaWEiIHwgY291bnRyeS54ICA9PSAiWWVtZW4iIHwgY291bnRyeS54ICA9PSAiUGFraXN0YW4iICkgJT4lIA0KIyAgIGdncGxvdChhZXMoYnVkZ2V0KSkgKw0KIyAgICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgYWVzKGNvbG9yID0gYXMuZmFjdG9yKHJlZ2lvbl82KSksIHNlID0gRkFMU0UpICsgDQojICAgZ2VvbV9oaXN0b2dyYW0oKSArDQojICAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNSwxNiwxNywxOCwxOSwxMCksDQojICAgIyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IE5VTEwpICsNCiMgICBmYWNldF93cmFwKH5kcm9uZXNfYmluYXJ5KSArDQojICAgZ2d0aXRsZSgiRHJvbmUgYXR0YWNrcyBhbmQgUEQgc3BlbmRpbmciKSArDQojICAgeWxhYigiTG9nZ2VkIFBEIGJ1ZGdldCBwZXIgY2FwaXRhIikgKw0KIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJsZWZ0IikgKyANCiMgICBnZ3RoZW1lczo6dGhlbWVfcGFuZGVyKCkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCnRoZV9kZiAlPiUgDQogIGdyb3VwX2J5KHByZXNpZGVudCwgY293X2NvZGUpICU+JSANCiAgDQogIG11dGF0ZShwcmVzX3BkX2J1ZGdldF9wYyA9IHN1bShidWRnZXRfcGNfY29uc3QsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHByZXNfcGRfYnVkZ2V0ID0gc3VtKGJ1ZGdldF9jb25zdCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICANCiAgbXV0YXRlKHByZXNfYXZnX3BkX2J1ZGdldF9wYyA9IG1lYW4oYnVkZ2V0X3BjX2NvbnN0LCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwcmVzX2F2Z19wZF9idWRnZXQgPSBtZWFuKGJ1ZGdldF9jb25zdCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICANCiAgbXV0YXRlKHByZXNfcHBwX2J1ZGdldCA9IHN1bShwcHBfYnVkZ2V0LCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwcmVzX3BwcF9idWRnZXRfcGMgPSBzdW0ocHBwX2J1ZGdldF9wYywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICANCiAgbXV0YXRlKHByZXNfcHBwX2J1ZGdldF9jb25zdCA9IHN1bShwcHBfYnVkZ2V0X2NvbnN0LCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwcmVzX3BwcF9idWRnZXRfcGNfY29uc3QgPSBzdW0ocHBwX2J1ZGdldF9wY19jb25zdCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KDQogIG11dGF0ZShwcmVzX2F2Z19wb2xpdHkgPSBtZWFuKHBvbGl0eV9pbmRleCwgbmEucm0gPSBUUlVFKSkgJT4lDQogIG11dGF0ZShwcmVzX2F2Z19lbGVjdCA9IG1lYW4oZWxlY3RvcmFsX2RlbW8sIG5hLnJtID0gVFJVRSkpICU+JQ0KDQogIG11dGF0ZShwcmVzX2F2Z19nZHAgPSBtZWFuKGdkcF9jb25zdCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUocHJlc19hdmdfZ2RwX3BjID0gbWVhbihnZHBfcGNfY29uc3QsIG5hLnJtID0gVFJVRSkpICU+JSANCg0KICBtdXRhdGUocHJlc19hdmdfcG9wID0gbWVhbihwb3AsIG5hLnJtID0gVFJVRSkpICU+JSAgDQogIG11dGF0ZShwcmVzX2F2Z191bl9kaXN0ID0gbWVhbihpZGVhbF9wb2ludF9kaXN0YW5jZSwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICANCiAgbXV0YXRlKHByZXNfYXZnX3BvbF9yaWdodHMgPSBtZWFuKHBvbF9yaWdodF9maCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUocHJlc19hdmdfY2l2X2xpYiA9IG1lYW4oY2l2X2xpYl9maCwgbmEucm0gPSBUUlVFKSkgJT4lICANCg0KICBtdXRhdGUocHJlc19hdmdfbWlsX2V4cCA9IG1lYW4obWlsX2V4cF9nZHAsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHByZXNfYXZnX3RyYWRlX2RlcF91cyA9IG1lYW4odXNfdHJhZGVfZGVwZW5kZW5jZSwgbmEucm0gPSBUUlVFKSkgJT4lICANCiAgDQogIG11dGF0ZShwcmVzX2F2Z191c19leHAgPSBtZWFuKHVzX2V4cG9ydHNfcGMsIG5hLnJtID0gVFJVRSkpICU+JSAgDQogIG11dGF0ZShwcmVzX3N1bV91c19leHAgPSBzdW0odXNfZXhwb3J0c19wYywgbmEucm0gPSBUUlVFKSkgJT4lICANCg0KICBtdXRhdGUocHJlc19hdmdfdXNfaW1wID0gbWVhbih1c19pbXBvcnRzX3BjLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwcmVzX3N1bV91c19pbXAgPSBzdW0odXNfaW1wb3J0c19wYywgbmEucm0gPSBUUlVFKSkgJT4lIA0KDQogIG11dGF0ZShwcmVzX2F2Z190cmFkZV9vcGVuID0gbWVhbih0cmFkZV9vcGVuZXNzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwcmVzX2F2Z19ldGhub19mcmFjID0gbWVhbihldGhub19mcmFjLCBuYS5ybSA9IFRSVUUpKSAlPiUgIA0KIA0KICBtdXRhdGUocHJlc19hdmdfbXVzX3BlcmMgPSBtZWFuKG11c2xpbV9wZXJjZW50LCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgDQogIG11dGF0ZShwcmVzX2F2Z191c190cm9vcHMgPSBtZWFuKHRyb29wcywgbmEucm0gPSBUUlVFKSkgJT4lICANCiAgbXV0YXRlKHByZXNfc3VtX3VzX3Ryb29wcyA9IHN1bSh0cm9vcHMsIG5hLnJtID0gVFJVRSkpICU+JSAgDQoNCiAgbXV0YXRlKHByZXNfYXZnX3N1aWNpZGUgPSBtZWFuKHN1bV9zdWljaWRlcywgbmEucm0gPSBUUlVFKSkgJT4lICANCiAgbXV0YXRlKHByZXNfc3VtX3N1aWNpZGUgPSBzdW0oc3VtX3N1aWNpZGVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgIA0KDQogIG11dGF0ZShwcmVzX2F2Z19jc29fcmVwcmVzcyA9IG1lYW4oY3NvX3JlcHJlc3MsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHByZXNfYXZnX21vdW50YWluID0gbWVhbihtb3VudGFpbm91cywgbmEucm0gPSBUUlVFKSkgICU+JSANCiAgDQogIGRpc3RpbmN0KHByZXNfcGRfYnVkZ2V0X3BjLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgDQogIGZpbHRlcighaXMubmEocHJlc2lkZW50KSkgJT4lIA0KICBzZWxlY3QocHJlc2lkZW50LCANCiAgICAgICAgIHllYXIsIA0KICAgICAgICAgY291bnRyeSwgDQogICAgICAgICByZWdpb25fNiwNCiAgICAgICAgIHByZXNfcHBwX2J1ZGdldCwNCiAgICAgICAgIHByZXNfcHBwX2J1ZGdldF9wYywNCiAgICAgICAgIHByZXNfcHBwX2J1ZGdldF9jb25zdCwNCiAgICAgICAgIHByZXNfcHBwX2J1ZGdldF9wY19jb25zdCwNCiAgICAgICAgIHByZXNfYXZnX3BkX2J1ZGdldF9wYywNCiAgICAgICAgIHByZXNfYXZnX3BkX2J1ZGdldCwNCiAgICAgICAgIHByZXNfcGRfYnVkZ2V0X3BjLA0KICAgICAgICAgcHJlc19wZF9idWRnZXQsDQogICAgICAgICBwcmVzX2F2Z19wb2xpdHksDQogICAgICAgICBwcmVzX2F2Z19lbGVjdCwNCiAgICAgICAgIHByZXNfYXZnX3VzX3Ryb29wcywNCiAgICAgICAgIHByZXNfc3VtX3VzX3Ryb29wcywNCiAgICAgICAgIHByZXNfYXZnX3BvbF9yaWdodHMsDQogICAgICAgICBwcmVzX2F2Z19jaXZfbGliLA0KICAgICAgICAgcHJlc19hdmdfZ2RwLA0KICAgICAgICAgcHJlc19hdmdfZ2RwX3BjLA0KICAgICAgICAgcHJlc19hdmdfcG9wLA0KICAgICAgICAgcHJlc19hdmdfbWlsX2V4cCwNCiAgICAgICAgIHByZXNfYXZnX3VuX2Rpc3QsDQogICAgICAgICBwcmVzX2F2Z190cmFkZV9kZXBfdXMsDQogICAgICAgICBwcmVzX2F2Z191c19leHAsDQogICAgICAgICBwcmVzX3N1bV91c19leHAsDQogICAgICAgICBwcmVzX2F2Z191c19pbXAsDQogICAgICAgICBwcmVzX3N1bV91c19pbXAsDQogICAgICAgICBwcmVzX2F2Z190cmFkZV9vcGVuLA0KICAgICAgICAgcHJlc19hdmdfZXRobm9fZnJhYywNCiAgICAgICAgIHByZXNfYXZnX211c19wZXJjLA0KICAgICAgICAgcHJlc19hdmdfY3NvX3JlcHJlc3MsDQogICAgICAgICBwcmVzX2F2Z19tb3VudGFpbiwNCiAgICAgICAgIGRlZmVuc2VfcGFjdF91cywNCiAgICAgICAgIHByZXNfYXZnX3N1aWNpZGUsDQogICAgICAgICBwcmVzX3N1bV9zdWljaWRlLA0KICAgICAgICAgZGlzdF9tb3Njb3cgPSBkaXN0X3NvdG9fbW9zY293LA0KICAgICAgICAgZGlzdF9kYyA9IGRpc3RfdG9fd2FzaF9kYywNCiAgICAgICAgIGRpc3RfYmVpamluZyA9IGRpc3RfdG9fYmVpamluZykgICU+JSANCiAgICB1bmdyb3VwKCkgLT4gcGRfcHJlcw0KDQpgYGANCg0KDQpgYGB7cn0NCg0KcG9vbGluZ19tb2RlbDEgPC1sbShsb2cocHJlc19wcHBfYnVkZ2V0ICsgMSkgfiANCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19nZHBfcGMpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19wb3ApICsNCiAgICAgICAgICAgICAgIHByZXNfYXZnX211c19wZXJjICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z191c19leHAgKyAxKSArDQogICAgICAgICAgICAgICAjIHByZXNfYXZnX3VuX2Rpc3QgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfc3VtX3N1aWNpZGUgKyAxKSArDQogICAgICAgICAgICAgICBwcmVzX2F2Z19lbGVjdCArDQogICAgICAgICAgICAgICAjIEkocHJlc19hdmdfZWxlY3ReMikgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfc3VtX3VzX3Ryb29wcyArIDEpICsNCiAgICAgICAgICAgICAgICMgYXMuZmFjdG9yKHJlZ2lvbl82KSArDQogICAgICAgICAgICAgICBhcy5mYWN0b3IocHJlc2lkZW50KSwNCiAgICAgICAgICAgICAgIGRhdGEgPSBwZF9wcmVzKQ0KDQoNCnBvb2xpbmdfbW9kZWwyIDwtbG0obG9nKHByZXNfcHBwX2J1ZGdldF9wYyArIDEpIH4gDQogICAgICAgICAgICAgICBsb2cocHJlc19hdmdfZ2RwX3BjKSArDQogICAgICAgICAgICAgICBsb2cocHJlc19hdmdfcG9wKSArDQogICAgICAgICAgICAgICBwcmVzX2F2Z19tdXNfcGVyYyArDQogICAgICAgICAgICAgICBsb2cocHJlc19hdmdfdXNfZXhwICsgMSkgKw0KICAgICAgICAgICAgICAgIyBwcmVzX2F2Z191bl9kaXN0ICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX3N1bV9zdWljaWRlICsgMSkgKw0KICAgICAgICAgICAgICAgcHJlc19hdmdfZWxlY3QgKw0KICAgICAgICAgICAgICAgIyBJKHByZXNfYXZnX2VsZWN0XjIpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX3N1bV91c190cm9vcHMgKyAxKSArDQogICAgICAgICAgICAgICAjIGFzLmZhY3RvcihyZWdpb25fNikgKw0KICAgICAgICAgICAgICAgYXMuZmFjdG9yKHByZXNpZGVudCksDQogICAgICAgICAgICAgICBkYXRhID0gcGRfcHJlcykNCg0KDQpzdGFyZ2F6ZXIocG9vbGluZ19tb2RlbDEsIHBvb2xpbmdfbW9kZWwyLA0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCg0KDQpgYGANCg0KDQpgYGB7cn0NCg0KcGRfcHJlcyAlPiUgDQogICBmaWx0ZXIocHJlc19hdmdfdW5fZGlzdCA8IDIuOCkgLT4gaGlnaF91bg0KIA0KcGRfcHJlcyAlPiUgDQogICBmaWx0ZXIocHJlc19hdmdfdW5fZGlzdCA+PSAyLjgpIC0+IGxvd191bg0KDQoNCg0KaGlnaF9wYyA8LWxtKGxvZyhwcmVzX3BwcF9idWRnZXRfcGMgKyAxKSB+IA0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX2dkcF9wYykgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX3BvcCkgKw0KICAgICAgICAgICAgICAgcHJlc19hdmdfbXVzX3BlcmMgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX3VzX2V4cCArIDEpICsNCiAgICAgICAgICAgICAgICMgcHJlc19hdmdfdW5fZGlzdCArDQogICAgICAgICAgICAgICBsb2cocHJlc19zdW1fc3VpY2lkZSArIDEpICsNCiAgICAgICAgICAgICAgIHByZXNfYXZnX2VsZWN0ICsNCiAgICAgICAgICAgICAgICAjIEkocHJlc19hdmdfZWxlY3ReMikgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfc3VtX3VzX3Ryb29wcyArIDEpICsNCiAgICAgICAgICAgICAgICMgKHJlZ2lvbl82KSArDQogICAgICAgICAgICAgICBhcy5mYWN0b3IocHJlc2lkZW50KSwNCiAgICAgICAgICAgICAgIGRhdGEgPSBoaWdoX3VuKQ0KDQoNCmxvd19wYyA8LWxtKGxvZyhwcmVzX3BwcF9idWRnZXRfcGMgKyAxKSB+IA0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX2dkcF9wYykgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX3BvcCkgKw0KICAgICAgICAgICAgICAgcHJlc19hdmdfbXVzX3BlcmMgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfYXZnX3VzX2V4cCArIDEpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX3N1bV9zdWljaWRlICsgMSkgKw0KICAgICAgICAgICAgICAgcHJlc19hdmdfZWxlY3QgKw0KICAgICAgICAgICAgICAgICMgSShwcmVzX2F2Z19lbGVjdF4yKSArDQogICAgICAgICAgICAgICBsb2cocHJlc19zdW1fdXNfdHJvb3BzICsgMSkgKw0KICAgICAgICAgICAgICAgIyBhcy5mYWN0b3IocmVnaW9uXzYpICsNCiAgICAgICAgICAgICAgIGFzLmZhY3RvcihwcmVzaWRlbnQpLA0KICAgICAgICAgICAgICAgZGF0YSA9IGxvd191bikNCg0KDQoNCmhpZ2hfdG90YWwgPC1sbShsb2cocHJlc19wcHBfYnVkZ2V0ICsgMSkgfiANCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19nZHBfcGMpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19wb3ApICsNCiAgICAgICAgICAgICAgIHByZXNfYXZnX211c19wZXJjICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z191c19leHAgKyAxKSArDQogICAgICAgICAgICAgICAjIHByZXNfYXZnX3VuX2Rpc3QgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfc3VtX3N1aWNpZGUgKyAxKSArDQogICAgICAgICAgICAgICBwcmVzX2F2Z19lbGVjdCArDQogICAgICAgICAgICAgICAgIyBJKHByZXNfYXZnX2VsZWN0XjIpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX3N1bV91c190cm9vcHMgKyAxKSArDQogICAgICAgICAgICAgICAjIChyZWdpb25fNikgKw0KICAgICAgICAgICAgICAgYXMuZmFjdG9yKHByZXNpZGVudCksDQogICAgICAgICAgICAgICBkYXRhID0gaGlnaF91bikNCg0KDQpsb3dfdG90YWwgPC1sbShsb2cocHJlc19wcHBfYnVkZ2V0ICsgMSkgfiANCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19nZHBfcGMpICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z19wb3ApICsNCiAgICAgICAgICAgICAgIHByZXNfYXZnX211c19wZXJjICsNCiAgICAgICAgICAgICAgIGxvZyhwcmVzX2F2Z191c19leHAgKyAxKSArDQogICAgICAgICAgICAgICBsb2cocHJlc19zdW1fc3VpY2lkZSArIDEpICsNCiAgICAgICAgICAgICAgIHByZXNfYXZnX2VsZWN0ICsNCiAgICAgICAgICAgICAgICAjIEkocHJlc19hdmdfZWxlY3ReMikgKw0KICAgICAgICAgICAgICAgbG9nKHByZXNfc3VtX3VzX3Ryb29wcyArIDEpICsNCiAgICAgICAgICAgICAgICMgYXMuZmFjdG9yKHJlZ2lvbl82KSArDQogICAgICAgICAgICAgICBhcy5mYWN0b3IocHJlc2lkZW50KSwNCiAgICAgICAgICAgICAgIGRhdGEgPSBsb3dfdW4pDQoNCg0Kc3RhcmdhemVyKGhpZ2hfdG90YWwsIGxvd190b3RhbCwgaGlnaF9wYywgbG93X3BjLCANCiAgICAgICAgICAjIGNvbHVtbi5sYWJlbHMgPSBjKCJIaWdoX3RvdGFsIiwgIkxvd190b3RhbCIsICJIaWdoIFBDIiwgIkxvdyBQQyIpLA0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCg0KYGBgDQoNCg0KYGBge3J9DQoNCmR2IDwtICJsb2coYnVkZ2V0ICsgMSkiDQoNCml2cyA8LSBjKCJlbGVjdG9yYWxfZGVtbyIsDQogICAgICAgICAibG9nKGdkcF9wY19jb25zdCkiLA0KICAgICAgICAgImxvZyhwb3ApIiwNCiAgICAgICAgICJtdXNsaW1fcGVyY2VudCINCiAgICAgICAgICkNCg0KZm9ybV8xIDwtIGFzLmZvcm11bGEocGFzdGUoZHYsIHBhc3RlKGl2cywgY29sbGFwc2UgPSAiICsgIiksIHNlcCA9ICIgfiAiKSkNCg0KdGhlX2RmICU+JSANCiAgIGZpbHRlcihpZGVhbF9wb2ludF9kaXN0YW5jZSA8IDIuNykgLT4gaGlnaF9kZg0KIA0KdGhlX2RmICU+JSANCiAgIGZpbHRlcihpZGVhbF9wb2ludF9kaXN0YW5jZSA+PSAyLjcpIC0+IGxvd19kZg0KDQpwb29sZWQgPC0gcGxtKGZvcm1fMSwgZGF0YSA9IGhpZ2hfZGYsIG1vZGVsID0gInBvb2xpbmciKQ0KDQpmaXhlZF9pbmQgPC0gcGxtKGZvcm1fMSwgZGF0YSA9IGhpZ2hfZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJpbmRpdmlkdWFsIikNCg0KZml4ZWRfdGltZSA8LSBwbG0oZm9ybV8xLCBkYXRhID0gaGlnaF9kZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KDQpmaXhlZF90d28gPC0gcGxtKGZvcm1fMSwgZGF0YSA9IGhpZ2hfZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0d293YXlzIikNCg0KcmFuZF9pbmQgPC0gcGxtKGZvcm1fMSwgZGF0YSA9IGhpZ2hfZGYsIG1vZGVsID0gInJhbmRvbSIsIGVmZmVjdCA9ICJpbmRpdmlkdWFsIikNCg0KcmFuZF90aW1lIDwtIHBsbShmb3JtXzEsIGRhdGEgPSBoaWdoX2RmLCBtb2RlbCA9ICJyYW5kb20iLCBlZmZlY3QgPSAidGltZSIpDQoNCnJhbmRfdHdvIDwtIHBsbShmb3JtXzEsIGRhdGEgPSBoaWdoX2RmLCBtb2RlbCA9ICJyYW5kb20iLCBlZmZlY3QgPSAidHdvd2F5cyIpDQoNCg0KYGBgDQoNCg0KIyBIYXVzbWFuIFRlc3QNCg0KV2hlbiB3ZSBydW4gdGhlIEhhdXNtYW4gdGVzdCB3aXRoIHBodGVzdCgpIGNvbW1hbmQsIHdlIHNlZSB0aGUgcC12YWx1ZSBpcyBpcyAwLjguIA0KDQpJdCBpcyBub3QgbGVzcyB0aGF0IDAuMDUgc28gd2UgY2FuIGxvb2sgYXQgcmFuZG9tIGVmZmVjdHMgbW9kZWwuDQoNCg0KYGBge3J9DQoNCnBodGVzdChmaXhlZF90aW1lLCByYW5kX3RpbWUpDQoNCmBgYA0KDQojIFJlZ3Jlc3Npb24gb3V0cHV0IA0KDQpgYGB7cn0NCnN0YXJnYXplcihyYW5kX2luZCwgDQogICAgICAgICAgcmFuZF90aW1lLCANCiAgICAgICAgICByYW5kX3R3bywgDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoDQogICAgICAgICAgICAjICJGaXhlZCBJbmQiLCAiRml4ZWQgVGltZSIsICJGaXhlZCBUd28iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYW5kIEluZCIsICJSYW5kIFRpbWUiLCAiUmFuZCBUd28iKSwgDQogICAgICAgICAgdHlwZSA9ICJodG1sIikNCg0KYGBgDQoNCiMgQ29ycmVjdCBmb3IgaGV0ZXJvc2tlZGFzdGljaXR5IHdpdGggcm9idXN0IHN0YW5kYXJkIGVycm9ycw0KDQpgYGB7cn0NCg0Kc3RhcmdhemVyKA0KIyBjb2VmdGVzdChmaXhlZF9pbmQsIHZjb3YgPSB2Y292SEMsIHR5cGUgPSAiSEMxIiksDQojIGNvZWZ0ZXN0KGZpeGVkX3RpbWUsIHZjb3YgPSB2Y292SEMsIHR5cGUgPSAiSEMxIiksDQojIGNvZWZ0ZXN0KGZpeGVkX3R3bywgdmNvdiA9IHZjb3ZIQywgdHlwZSA9ICJIQzEiKSwNCmNvZWZ0ZXN0KHJhbmRfaW5kLCB2Y292ID0gdmNvdkhDLCB0eXBlID0gIkhDMSIpLA0KY29lZnRlc3QocmFuZF90aW1lLCB2Y292ID0gdmNvdkhDLCB0eXBlID0gIkhDMSIpLA0KY29lZnRlc3QocmFuZF90d28sIHZjb3YgPSB2Y292SEMsIHR5cGUgPSAiSEMxIiksDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoDQogICAgICAgICAgICAjICJGaXhlZCBJbmQiLCAiRml4ZWQgVGltZSIsICJGaXhlZCBUd28iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYW5kIEluZCIsICJSYW5kIFRpbWUiLCAiUmFuZCBUd28iKSwgDQogICAgICAgICAgdHlwZSA9ICJodG1sIikNCg0KDQpgYGANCg0KDQoNCiMgTGFncmFuZ2UgTXVsdGlwbGllciBUZXN0IA0KDQojIyMgVGltZSBlZmZlY3RzIChCcmV1c2NoLVBhZ2FuKQ0KDQpXZSBsb29rIGF0IHRoZSBMYWdyYW5nZSBNdWx0aXBsaWVyIHRlc3QgdG8gc2VlIGlmIHRoZXJlIGFyZSB0aW1lLWVmZmVjdHMgaW4gdGhlIG1vZGVsLiANCg0KSWYgdGhlIHAtdmFsdWUgPCAwLjA1IHRoZW4gdXNlIHRpbWUtZml4ZWQgZWZmZWN0cy4NCg0KSW4gb3VyIG1vZGVsLCB0aGUgLCBwLXZhbHVlIGlzIGZhciBiZWxvdyAwLjA1IHNvIHdlIGNhbiBzdXBwb3J0IHRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIHRoYXQgdGhlcmUgYXJlIHRpbWUgZWZmZWN0cyBpbiB0aGUgbW9kZWwNCmBgYHtyfQ0KDQpwbG10ZXN0KHBvb2xlZCwgYygidGltZSIpLCB0eXBlPSgiYnAiKSkNCg0KYGBgDQoNCiMgVGVzdCBvZiBpbmRpdmlkdWFsIGFuZC9vciB0aW1lIGVmZmVjdHMNCg0KV2UgY2FuIHVzZSB0aGUgcEZ0ZXN0KCkgdG8gYWxzbyBsb29rIGF0IHdoZXRoZXIgd2UgdXNlIGluZGl2aWR1YWwgb3IgdGltZSBlZmZlY3RzLCBiYXNlZCBvbiB0aGUgY29tcGFyaXNvbiBvZiB0aGUgd2l0aGluIGFuZCB0aGUgcG9vbGluZyBtb2RlbC4gDQoNCg0KYGBge3J9DQoNCnBGdGVzdChmaXhlZF90aW1lLCBwb29sZWQpDQpgYGANCg0KDQpgYGB7cn0NCg0KDQpzdGFyZ2F6ZXIocmFuZF90aW1lLCBjb2VmdGVzdChyYW5kX3RpbWUsIHZjb3YgPSB2Y292SEMsIHR5cGUgPSAiSEMxIiksDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoIlJhbmRvbSBNb2RlbCAoVGltZSBFZmZlY3RzKSB8fCIsICIgUmFuZCBUaW1lIFJvYnVzdCBTdGQuIEVycm9yIiksIA0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCmBgYA0KDQo=