Does one’s belief in global warming change as a function of their political party?

In 2017 we have a president who rejects the notion of climate change and global warming, despite a surplus of scientific evidence that indicates the contrary. Considering this current political climate, I thought it would be interesting to investigate the effect of political party on one’s endorsement of global warming. The data that I used was taken from an ABC poll on global warming that was administered in 2008, when the global warming controversy was recieving a lot of publicity due to Al Gore’s “An Inconveinent Truth”.

I hypothesize to find that republican participants are less likely to report belief of global warming than their democratic counterparts.

library(Zelig)
library(ZeligChoice)
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(tidyr)

Attaching package: ‘tidyr’

The following object is masked from ‘package:texreg’:

    extract
library(foreign)
library(visreg)
glowarm <- read.dta("/Users/sophia.halkitis/Desktop/R/Datasets/ICPSR_27322/DS0001/27322-0001-Data.dta", convert.dates = TRUE, convert.factors = TRUE,
         missing.type = FALSE,
         convert.underscore = FALSE, warn.missing.labels = TRUE)
duplicated levels in factors are deprecatedduplicated levels in factors are deprecatedduplicated levels in factors are deprecatedduplicated levels in factors are deprecated
message = FALSE
gmsub <- subset(glowarm, select=c(CASEID, Q921, Q1, Q10, Q910, Q12, Q3, Q22, Q26, Q901, Q909, Q48, RACENET, RELNET, COLLEDUC)) %>%
rename(
    gender = Q921,
    serious = Q12,
    age = Q910,
    rate = Q1,
    important = Q10, 
    reduce = Q26,
    trust = Q3,
    action = Q22,
    party = Q901,
    educ = Q909,
    source = Q48,
    race = RACENET,
    college = COLLEDUC,
    religion = RELNET)
head(gmsub)
gmsub <- mutate(gmsub, partynew = ifelse(party == "A Democrat",1,
                                  ifelse(party == "A Republican",2,0)))
gmsub <- filter(gmsub, party != "System Missing", party != "Other", party !="DK/No opinion", trust != "System Missing", trust !="DK/No opinion", educ != "System Missing", educ !="DK/No opinion", educ !="8th grade or less", rate != "System Missing", rate !="DK/No opinion")

In the chunk above, I created a subset of the ABC dataset to include variables of interest. I then mutated the variable “political party” into a dichotomous variable to include democrat and republicans. For the sake of the analyses, I did not include people who identified their political affiliation as “independent” or unknown.

Preliminary tables

library(ggplot2)
ggplot(gmsub, aes(x = trust, fill = gender)) + geom_bar(position = "dodge")

The graph above shows the gender distribution of “trust” in what scientists say about global warming (the dependent variable). It shows a near normal distribution of attitudes about trust in scientists, with females trusting more so in scientist’s conclusions than males.

ggplot(gmsub, aes(x = gender, fill = party)) + geom_bar(position = "dodge")+
  facet_wrap("educ")

NA

The faceted graph above shows the distribution of education and party affiliation by gender. It shows a few things:

gmsub <- mutate(gmsub, ratenew = ifelse(rate == "Very poor",1,
                                  ifelse(rate == "Poor",2,
                                  ifelse(rate == "Fair",3,
                                  ifelse(rate == "Good",4,
                                  ifelse(rate == "Excellent",5,0))))))
head(gmsub)
ggplot(gmsub, aes(x = ratenew)) + geom_bar(position = "dodge")+
  facet_wrap("party")+
  xlab("Ratings of the Environment [Very Poor to Excellent]")

NA

The above chart shows the distribution of participant’s ratings of the environment by party affiliation. It shows that republicans are the most likely (though slight) to rate that the state of the natural environmet is “excellent.” In fact, republicans were equally as likely to rate the environment as “fair” or “good”, while democrats and republicans were most likely to indicate “fair” or “poor”. Democrats were the most liely to indicate that the state of the natural environment is “poor” or “very poor”.


Ordinal logit model

gmsub$trust <- factor(gmsub$trust, ordered = TRUE,
                         levels = c("Not at all", "A little", "A moderate amount", "A lot", "Completely"))

I chose my dependent variable to be how much participants trust what scientists say about the environment and global warming. “Trust” is an ordinal level variable, with the above answer choices. I then translated the variable “trust” into a factor and labeled it’s levels accordingly in the above chunk.

Building the model and setting parameters

z.gm <- zelig(trust ~ partynew, model = "ologit",
               data = gmsub, cite = F)
summary(z.gm)
Model: 
Call:
z5$zelig(formula = trust ~ partynew, data = gmsub)

Coefficients:
           Value Std. Error t value
partynew -0.2814    0.07827  -3.596

Intercepts:
                           Value    Std. Error t value 
Not at all|A little         -3.2553   0.1777   -18.3233
A little|A moderate amount  -1.3785   0.1118   -12.3318
A moderate amount|A lot      0.4073   0.1013     4.0192
A lot|Completely             2.6208   0.1645    15.9307

Residual Deviance: 2353.33 
AIC: 2363.33 
Next step: Use 'setx' method

Upon viewing the summary of the model, we see a strong negative relationship between political party and trust of what scientists say about global warming.

#Tabulation of results 
library(texreg)
screenreg(z.gm)

I then ran the simulation, which proved my hypothesis to be correct: republicans are less likely to trust what scientists say about global warming than democrats are.

The probability of trusting what scientists say about global warming decreases as a function of political party, such that republicans are less likely to trust scientists “a lot” or “completely”. Republicans have a higher probability of trusting scientsits “a moderate amount, a little, or not at all” than democrats do.

Supplementary model

To assure that this relationship that I observed was true, I estimated the effect of political party on a similiar dependent variable. I ran an additional simulation to see the effect of political party on participant’s ratings on “the condition of the natural enviroment in the world today”.

gmsub$rate <- factor(gmsub$rate, ordered = TRUE,
                         levels = c("Very poor", "Poor", "Fair", "Good", "Excellent"))
z.rate <- zelig(rate ~ partynew, model = "ologit",
               data = gmsub, cite = F)
screenreg(z.rate)

============================
                Model 1     
----------------------------
partynew            0.41 ***
                   (0.08)   
----------------------------
AIC              2311.40    
BIC              2335.28    
Log Likelihood  -1150.70    
Deviance         2301.40    
Num. obs.         876       
============================
*** p < 0.001, ** p < 0.01, * p < 0.05
summary(z.rate)
Model: 
Call:
z5$zelig(formula = rate ~ partynew, data = gmsub)

Coefficients:
          Value Std. Error t value
partynew 0.4053    0.07947     5.1

Intercepts:
               Value    Std. Error t value 
Very poor|Poor  -2.0787   0.1406   -14.7825
Poor|Fair       -0.1152   0.1003    -1.1477
Fair|Good        1.6153   0.1161    13.9067
Good|Excellent   4.5633   0.2849    16.0198

Residual Deviance: 2301.401 
AIC: 2311.401 
Next step: Use 'setx' method
#Tabulation of the results 
screenreg(z.rate)

============================
                Model 1     
----------------------------
partynew            0.41 ***
                   (0.08)   
----------------------------
AIC              2311.40    
BIC              2335.28    
Log Likelihood  -1150.70    
Deviance         2301.40    
Num. obs.         876       
============================
*** p < 0.001, ** p < 0.01, * p < 0.05

Upon viewing the summary, we see that there is a strong positive relationship between political party and one’s ratings of the environment.

z.rate$setx(partynew = 1)
z.rate$setx1(partynew = 2)
z.rate$sim()
summary(z.rate)

#Graph
plot(z.rate)
#Tablulation of results 
library(texreg)
screenreg(list(z.gm, z.rate))

==========================================
                Model 1       Model 2     
------------------------------------------
partynew           -0.28 ***      0.41 ***
                   (0.08)        (0.08)   
------------------------------------------
AIC              2363.33       2311.40    
BIC              2387.21       2335.28    
Log Likelihood  -1176.66      -1150.70    
Deviance         2353.33       2301.40    
Num. obs.         876           876       
==========================================
*** p < 0.001, ** p < 0.01, * p < 0.05

Upon running the simulation, we see that republicans are less likely to rate the enviornment as “poor” or “very poor” than their democrat counterparts. This is also in line with my hypothesis, as republicans are more likely to deny climate change, and in turn, would less likely to believe that the natural environment is in poor shape.

References

(News 2010)

News, ABC. 2010. “ABC News Poll, July 2008.” Inter-university Consortium for Political and Social Research (ICPSR) [distributor]. doi:10.3886/ICPSR27322.v1.

LS0tCnRpdGxlOiAiSG9tZXdvcmsgNiIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CmJpYmxpb2dyYXBoeTogNzEyY2l0ZXMuYmliCi0tLQojI0RvZXMgb25lJ3MgYmVsaWVmIGluIGdsb2JhbCB3YXJtaW5nIGNoYW5nZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZWlyIHBvbGl0aWNhbCBwYXJ0eT8gCgpJbiAyMDE3IHdlIGhhdmUgYSBwcmVzaWRlbnQgd2hvIHJlamVjdHMgdGhlIG5vdGlvbiBvZiBjbGltYXRlIGNoYW5nZSBhbmQgZ2xvYmFsIHdhcm1pbmcsIGRlc3BpdGUgYSBzdXJwbHVzIG9mIHNjaWVudGlmaWMgZXZpZGVuY2UgdGhhdCBpbmRpY2F0ZXMgdGhlIGNvbnRyYXJ5LgpDb25zaWRlcmluZyB0aGlzIGN1cnJlbnQgcG9saXRpY2FsIGNsaW1hdGUsIEkgdGhvdWdodCBpdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBpbnZlc3RpZ2F0ZSB0aGUgZWZmZWN0IG9mIHBvbGl0aWNhbCBwYXJ0eSBvbiBvbmUncyBlbmRvcnNlbWVudCBvZiBnbG9iYWwgd2FybWluZy4gVGhlIGRhdGEgdGhhdCBJIHVzZWQgd2FzIHRha2VuIGZyb20gYW4gQUJDIHBvbGwgb24gZ2xvYmFsIHdhcm1pbmcgdGhhdCB3YXMgYWRtaW5pc3RlcmVkIGluIDIwMDgsIHdoZW4gdGhlIGdsb2JhbCB3YXJtaW5nIGNvbnRyb3ZlcnN5IHdhcyByZWNpZXZpbmcgYSBsb3Qgb2YgcHVibGljaXR5IGR1ZSB0byBBbCBHb3JlJ3MgIkFuIEluY29udmVpbmVudCBUcnV0aCIuICAKCkkgaHlwb3RoZXNpemUgdG8gZmluZCB0aGF0IHJlcHVibGljYW4gcGFydGljaXBhbnRzIGFyZSBsZXNzIGxpa2VseSB0byByZXBvcnQgYmVsaWVmIG9mIGdsb2JhbCB3YXJtaW5nIHRoYW4gdGhlaXIgZGVtb2NyYXRpYyBjb3VudGVycGFydHMuIAoKYGBge3J9CmxpYnJhcnkoWmVsaWcpCmxpYnJhcnkoWmVsaWdDaG9pY2UpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoZm9yZWlnbikKbGlicmFyeSh2aXNyZWcpCgpnbG93YXJtIDwtIHJlYWQuZHRhKCIvVXNlcnMvc29waGlhLmhhbGtpdGlzL0Rlc2t0b3AvUi9EYXRhc2V0cy9JQ1BTUl8yNzMyMi9EUzAwMDEvMjczMjItMDAwMS1EYXRhLmR0YSIsIGNvbnZlcnQuZGF0ZXMgPSBUUlVFLCBjb252ZXJ0LmZhY3RvcnMgPSBUUlVFLAogICAgICAgICBtaXNzaW5nLnR5cGUgPSBGQUxTRSwKICAgICAgICAgY29udmVydC51bmRlcnNjb3JlID0gRkFMU0UsIHdhcm4ubWlzc2luZy5sYWJlbHMgPSBUUlVFKQoKbWVzc2FnZSA9IEZBTFNFCmBgYAoKYGBge3J9Cmdtc3ViIDwtIHN1YnNldChnbG93YXJtLCBzZWxlY3Q9YyhDQVNFSUQsIFE5MjEsIFExLCBRMTAsIFE5MTAsIFExMiwgUTMsIFEyMiwgUTI2LCBROTAxLCBROTA5LCBRNDgsIFJBQ0VORVQsIFJFTE5FVCwgQ09MTEVEVUMpKSAlPiUKcmVuYW1lKAogICAgZ2VuZGVyID0gUTkyMSwKICAgIHNlcmlvdXMgPSBRMTIsCiAgICBhZ2UgPSBROTEwLAogICAgcmF0ZSA9IFExLAogICAgaW1wb3J0YW50ID0gUTEwLCAKICAgIHJlZHVjZSA9IFEyNiwKICAgIHRydXN0ID0gUTMsCiAgICBhY3Rpb24gPSBRMjIsCiAgICBwYXJ0eSA9IFE5MDEsCiAgICBlZHVjID0gUTkwOSwKICAgIHNvdXJjZSA9IFE0OCwKICAgIHJhY2UgPSBSQUNFTkVULAogICAgY29sbGVnZSA9IENPTExFRFVDLAogICAgcmVsaWdpb24gPSBSRUxORVQpCmhlYWQoZ21zdWIpCgoKZ21zdWIgPC0gbXV0YXRlKGdtc3ViLCBwYXJ0eW5ldyA9IGlmZWxzZShwYXJ0eSA9PSAiQSBEZW1vY3JhdCIsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShwYXJ0eSA9PSAiQSBSZXB1YmxpY2FuIiwyLDApKSkKCmdtc3ViIDwtIGZpbHRlcihnbXN1YiwgcGFydHkgIT0gIlN5c3RlbSBNaXNzaW5nIiwgcGFydHkgIT0gIk90aGVyIiwgcGFydHkgIT0iREsvTm8gb3BpbmlvbiIsIHRydXN0ICE9ICJTeXN0ZW0gTWlzc2luZyIsIHRydXN0ICE9IkRLL05vIG9waW5pb24iLCBlZHVjICE9ICJTeXN0ZW0gTWlzc2luZyIsIGVkdWMgIT0iREsvTm8gb3BpbmlvbiIsIGVkdWMgIT0iOHRoIGdyYWRlIG9yIGxlc3MiLCByYXRlICE9ICJTeXN0ZW0gTWlzc2luZyIsIHJhdGUgIT0iREsvTm8gb3BpbmlvbiIpCgpgYGAKSW4gdGhlIGNodW5rIGFib3ZlLCBJIGNyZWF0ZWQgYSBzdWJzZXQgb2YgdGhlIEFCQyBkYXRhc2V0IHRvIGluY2x1ZGUgdmFyaWFibGVzIG9mIGludGVyZXN0LiBJIHRoZW4gbXV0YXRlZCB0aGUgdmFyaWFibGUgInBvbGl0aWNhbCBwYXJ0eSIgaW50byBhIGRpY2hvdG9tb3VzIHZhcmlhYmxlIHRvIGluY2x1ZGUgZGVtb2NyYXQgYW5kIHJlcHVibGljYW5zLiBGb3IgdGhlIHNha2Ugb2YgdGhlIGFuYWx5c2VzLCBJIGRpZCBub3QgaW5jbHVkZSBwZW9wbGUgd2hvIGlkZW50aWZpZWQgdGhlaXIgcG9saXRpY2FsIGFmZmlsaWF0aW9uIGFzICJpbmRlcGVuZGVudCIgb3IgdW5rbm93bi4gCgojI1ByZWxpbWluYXJ5IHRhYmxlcyAKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmdncGxvdChnbXN1YiwgYWVzKHggPSB0cnVzdCwgZmlsbCA9IGdlbmRlcikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKQoKYGBgClRoZSBncmFwaCBhYm92ZSBzaG93cyB0aGUgZ2VuZGVyIGRpc3RyaWJ1dGlvbiBvZiAidHJ1c3QiIGluIHdoYXQgc2NpZW50aXN0cyBzYXkgYWJvdXQgZ2xvYmFsIHdhcm1pbmcgKHRoZSBkZXBlbmRlbnQgdmFyaWFibGUpLiBJdCBzaG93cyBhIG5lYXIgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiBhdHRpdHVkZXMgYWJvdXQgdHJ1c3QgaW4gc2NpZW50aXN0cywgd2l0aCBmZW1hbGVzIHRydXN0aW5nIG1vcmUgc28gaW4gc2NpZW50aXN0J3MgY29uY2x1c2lvbnMgdGhhbiBtYWxlcy4KCmBgYHtyfQoKZ2dwbG90KGdtc3ViLCBhZXMoeCA9IGdlbmRlciwgZmlsbCA9IHBhcnR5KSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpKwogIGZhY2V0X3dyYXAoImVkdWMiKQogIApgYGAKVGhlIGZhY2V0ZWQgZ3JhcGggYWJvdmUgc2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiBlZHVjYXRpb24gYW5kIHBhcnR5IGFmZmlsaWF0aW9uIGJ5IGdlbmRlci4gSXQgc2hvd3MgYSBmZXcgdGhpbmdzOgoKLSBGZW1hbGVzIGFyZSBtb3JlIGxpa2VseSB0byBiZSBkZW1vY3JhdHMgZGVzcGl0ZSBlZHVjYXRpb25hbCBhdHRhaW5tZW50Ci0gTWFsZXMgaW4gdGhlIHNhbXBsZSB0ZW5kIHRvIGlkZW50aWZ5IG1vc3RseSBhcyBpbmRlcGVuZGVudHMgZGVzcGl0ZSBlZHVjYXRpb25hbCBhdHRhaW5tZW50Ci0gTXVjaCBvZiB0aGUgc2FtcGxlIGhhcyBncmFkdWF0ZWQgZnJvbSBjb2xsZWdlCgpgYGB7cn0KCmdtc3ViIDwtIG11dGF0ZShnbXN1YiwgcmF0ZW5ldyA9IGlmZWxzZShyYXRlID09ICJWZXJ5IHBvb3IiLDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmF0ZSA9PSAiUG9vciIsMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyYXRlID09ICJGYWlyIiwzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJhdGUgPT0gIkdvb2QiLDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmF0ZSA9PSAiRXhjZWxsZW50Iiw1LDApKSkpKSkKaGVhZChnbXN1YikKCmdncGxvdChnbXN1YiwgYWVzKHggPSByYXRlbmV3KSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpKwogIGZhY2V0X3dyYXAoInBhcnR5IikrCiAgeGxhYigiUmF0aW5ncyBvZiB0aGUgRW52aXJvbm1lbnQgW1ZlcnkgUG9vciB0byBFeGNlbGxlbnRdIikKICAKCmBgYApUaGUgYWJvdmUgY2hhcnQgc2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiBwYXJ0aWNpcGFudCdzIHJhdGluZ3Mgb2YgdGhlIGVudmlyb25tZW50IGJ5IHBhcnR5IGFmZmlsaWF0aW9uLiBJdCBzaG93cyB0aGF0IHJlcHVibGljYW5zIGFyZSB0aGUgbW9zdCBsaWtlbHkgKHRob3VnaCBzbGlnaHQpIHRvIHJhdGUgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIG5hdHVyYWwgZW52aXJvbm1ldCBpcyAiZXhjZWxsZW50LiIgSW4gZmFjdCwgcmVwdWJsaWNhbnMgd2VyZSBlcXVhbGx5IGFzIGxpa2VseSB0byByYXRlIHRoZSBlbnZpcm9ubWVudCBhcyAiZmFpciIgb3IgImdvb2QiLCB3aGlsZSBkZW1vY3JhdHMgYW5kIHJlcHVibGljYW5zIHdlcmUgbW9zdCBsaWtlbHkgdG8gaW5kaWNhdGUgImZhaXIiIG9yICJwb29yIi4gRGVtb2NyYXRzIHdlcmUgdGhlIG1vc3QgbGllbHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIG5hdHVyYWwgZW52aXJvbm1lbnQgaXMgInBvb3IiIG9yICJ2ZXJ5IHBvb3IiLgoKKioqKgojIyNPcmRpbmFsIGxvZ2l0IG1vZGVsCmBgYHtyfQpnbXN1YiR0cnVzdCA8LSBmYWN0b3IoZ21zdWIkdHJ1c3QsIG9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm90IGF0IGFsbCIsICJBIGxpdHRsZSIsICJBIG1vZGVyYXRlIGFtb3VudCIsICJBIGxvdCIsICJDb21wbGV0ZWx5IikpCmBgYApJICBjaG9zZSBteSBkZXBlbmRlbnQgdmFyaWFibGUgdG8gYmUgaG93IG11Y2ggcGFydGljaXBhbnRzIHRydXN0IHdoYXQgc2NpZW50aXN0cyBzYXkgYWJvdXQgdGhlIGVudmlyb25tZW50IGFuZCBnbG9iYWwgd2FybWluZy4gIlRydXN0IiBpcyBhbiBvcmRpbmFsIGxldmVsIHZhcmlhYmxlLCB3aXRoIHRoZSBhYm92ZSBhbnN3ZXIgY2hvaWNlcy4gSSB0aGVuIHRyYW5zbGF0ZWQgdGhlIHZhcmlhYmxlICJ0cnVzdCIgaW50byBhIGZhY3RvciBhbmQgbGFiZWxlZCBpdCdzIGxldmVscyBhY2NvcmRpbmdseSBpbiB0aGUgYWJvdmUgY2h1bmsuIAoKIyMjQnVpbGRpbmcgdGhlIG1vZGVsIGFuZCBzZXR0aW5nIHBhcmFtZXRlcnMKYGBge3J9CnouZ20gPC0gemVsaWcodHJ1c3QgfiBwYXJ0eW5ldywgbW9kZWwgPSAib2xvZ2l0IiwKICAgICAgICAgICAgICAgZGF0YSA9IGdtc3ViLCBjaXRlID0gRikKc3VtbWFyeSh6LmdtKQpgYGAKVXBvbiB2aWV3aW5nIHRoZSBzdW1tYXJ5IG9mIHRoZSBtb2RlbCwgd2Ugc2VlIGEgc3Ryb25nIG5lZ2F0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvbGl0aWNhbCBwYXJ0eSBhbmQgdHJ1c3Qgb2Ygd2hhdCBzY2llbnRpc3RzIHNheSBhYm91dCBnbG9iYWwgd2FybWluZy4gCmBgYHtyfQp6LmdtJHNldHgocGFydHluZXcgPSAxKQp6LmdtJHNldHgxKHBhcnR5bmV3ID0gMikKei5nbSRzaW0oKQpzdW1tYXJ5KHouZ20pCgojR3JhcGgKcGxvdCh6LmdtKQoKYGBgCmBgYHtyfQojVGFidWxhdGlvbiBvZiByZXN1bHRzIApsaWJyYXJ5KHRleHJlZykKc2NyZWVucmVnKHouZ20pCmBgYAoKCkkgdGhlbiByYW4gdGhlIHNpbXVsYXRpb24sIHdoaWNoIHByb3ZlZCBteSBoeXBvdGhlc2lzIHRvIGJlIGNvcnJlY3Q6IHJlcHVibGljYW5zIGFyZSBsZXNzIGxpa2VseSB0byB0cnVzdCB3aGF0IHNjaWVudGlzdHMgc2F5IGFib3V0IGdsb2JhbCB3YXJtaW5nIHRoYW4gZGVtb2NyYXRzIGFyZS4gCgpUaGUgcHJvYmFiaWxpdHkgb2YgdHJ1c3Rpbmcgd2hhdCBzY2llbnRpc3RzIHNheSBhYm91dCBnbG9iYWwgd2FybWluZyBkZWNyZWFzZXMgYXMgYSBmdW5jdGlvbiBvZiBwb2xpdGljYWwgcGFydHksIHN1Y2ggdGhhdCByZXB1YmxpY2FucyBhcmUgbGVzcyBsaWtlbHkgdG8gdHJ1c3Qgc2NpZW50aXN0cyAiYSBsb3QiIG9yICJjb21wbGV0ZWx5Ii4gUmVwdWJsaWNhbnMgaGF2ZSBhIGhpZ2hlciBwcm9iYWJpbGl0eSBvZiB0cnVzdGluZyBzY2llbnRzaXRzICJhIG1vZGVyYXRlIGFtb3VudCwgYSBsaXR0bGUsIG9yIG5vdCBhdCBhbGwiIHRoYW4gZGVtb2NyYXRzIGRvLiAKCiMjI1N1cHBsZW1lbnRhcnkgbW9kZWwgCgpUbyBhc3N1cmUgdGhhdCB0aGlzIHJlbGF0aW9uc2hpcCB0aGF0IEkgb2JzZXJ2ZWQgd2FzIHRydWUsIEkgZXN0aW1hdGVkIHRoZSBlZmZlY3Qgb2YgcG9saXRpY2FsIHBhcnR5IG9uIGEgc2ltaWxpYXIgZGVwZW5kZW50IHZhcmlhYmxlLiBJIHJhbiBhbiBhZGRpdGlvbmFsIHNpbXVsYXRpb24gdG8gc2VlIHRoZSBlZmZlY3Qgb2YgcG9saXRpY2FsIHBhcnR5IG9uIHBhcnRpY2lwYW50J3MgcmF0aW5ncyBvbiAidGhlIGNvbmRpdGlvbiBvZiB0aGUgbmF0dXJhbCBlbnZpcm9tZW50IGluIHRoZSB3b3JsZCB0b2RheSIuIAoKYGBge3J9Cmdtc3ViJHJhdGUgPC0gZmFjdG9yKGdtc3ViJHJhdGUsIG9yZGVyZWQgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVmVyeSBwb29yIiwgIlBvb3IiLCAiRmFpciIsICJHb29kIiwgIkV4Y2VsbGVudCIpKQpgYGAKCmBgYHtyfQp6LnJhdGUgPC0gemVsaWcocmF0ZSB+IHBhcnR5bmV3LCBtb2RlbCA9ICJvbG9naXQiLAogICAgICAgICAgICAgICBkYXRhID0gZ21zdWIsIGNpdGUgPSBGKQoKc3VtbWFyeSh6LnJhdGUpCmBgYApgYGB7cn0KI1RhYnVsYXRpb24gb2YgdGhlIHJlc3VsdHMgCnNjcmVlbnJlZyh6LnJhdGUpCmBgYAoKClVwb24gdmlld2luZyB0aGUgc3VtbWFyeSwgd2Ugc2VlIHRoYXQgdGhlcmUgaXMgYSBzdHJvbmcgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9saXRpY2FsIHBhcnR5IGFuZCBvbmUncyByYXRpbmdzIG9mIHRoZSBlbnZpcm9ubWVudC4gIAoKYGBge3J9CnoucmF0ZSRzZXR4KHBhcnR5bmV3ID0gMSkKei5yYXRlJHNldHgxKHBhcnR5bmV3ID0gMikKei5yYXRlJHNpbSgpCnN1bW1hcnkoei5yYXRlKQoKI0dyYXBoCnBsb3Qoei5yYXRlKQoKYGBgCgpgYGB7cn0KCiNUYWJsdWxhdGlvbiBvZiByZXN1bHRzIApsaWJyYXJ5KHRleHJlZykKc2NyZWVucmVnKGxpc3Qoei5nbSwgei5yYXRlKSkKYGBgCgpVcG9uIHJ1bm5pbmcgdGhlIHNpbXVsYXRpb24sIHdlIHNlZSB0aGF0IHJlcHVibGljYW5zIGFyZSBsZXNzIGxpa2VseSB0byByYXRlIHRoZSBlbnZpb3JubWVudCBhcyAicG9vciIgb3IgInZlcnkgcG9vciIgdGhhbiB0aGVpciBkZW1vY3JhdCBjb3VudGVycGFydHMuIFRoaXMgaXMgYWxzbyBpbiBsaW5lIHdpdGggbXkgaHlwb3RoZXNpcywgYXMgcmVwdWJsaWNhbnMgYXJlIG1vcmUgbGlrZWx5IHRvIGRlbnkgY2xpbWF0ZSBjaGFuZ2UsIGFuZCBpbiB0dXJuLCB3b3VsZCBsZXNzIGxpa2VseSB0byBiZWxpZXZlIHRoYXQgdGhlIG5hdHVyYWwgZW52aXJvbm1lbnQgaXMgaW4gcG9vciBzaGFwZS4gCgojIyNSZWZlcmVuY2VzCltAQUJDX3BvbGxdCg==