Ernesto Gomez
November 27, 2017
*Note: This report adds to/further polishes Homework 9 to now account for newly created maps and the addition of a more succint first difference graph of simulations, as recommended.
Introduction
Recent events involving mass shooters gunning down large groups of people in the United States has catalyzed a national conversation around guns, gun ownership, background checks, and mental health. This analysis is concerned with the question around mental illness and access to a larger arsenal on the part of a mass shooter and whether this is likelier to result in more deaths/injuries. A poisson regression and simulations will be utilized to further analyze the relationship between injured or killed victims, mental illness, and weapon count.
Literature Review
Much of the literature on mass shootings and its relationship to mental illness and gun violence largely critique the role media plays in scapegoating mental illness, especially in ways that serve as ways to further stigmatize people with mental illness. Indeed, scholars have found that news stories following mass shootings tend to raise publice support for gun control policies but also contribute to less than favorable views towards those with serious mental illness (McGinty et al. 2013). This has generated anational conversation on mental health and the necessity for tighter gun control in the United States.
Studies from other countries, such as Australia, have shown that when stricter gun control measures were enacted the country was free from mass shootings for over a decade and saw significant declines in fatalities from firearms (Chapman et al. 2006). Thus, this bears several questions: Does mental illness affect a shooters ability to injure or kill more victims, and does access to more guns result in a higher incidence of injury/death?
Method
To conduct this analysis, the Stanford Mass Shootings in America (MSA), a non-exhaustive dataset of mass shootings dating from 1966-2016, will be utilzed to focus on the question of mental illness and access to guns, in its relation to mass shootings, and whether mass shooters with a history of mental illness and access to multiple guns results in a higher incidence in injuries from a mass shooting. To accomplish this, data related to the number of victims (injured) from mass shootings (1966-2016), shooter’s history of mental illness, and total number of guns used by shooter will be used to perform a poisson regression and set of simulations to potentially bring clarity to this question. Lastly, the percentage of gun ownership across the United States, taken from a heatmap based on General Social Survey data and stratified on the state-level, is also utilized for both graphical and analytics purposes.
Hypotheses
It is hypothesized that mass shooters with a history of mental illness bears a positive relationship to the number of killed or injured victims after a mass shooting. Furthermore, it will be theorized that access to a larger arsenal of weapons will likely result in more victims.
Data
- totalvictims - The dependent variable, a measurement of the total number of victims injured or killed for every incidence of a mass shooting.
- mentalhistory - A measurement of whether a mass shooter had a reported or confirmed history of mental illness, “Yes” for a history of mental illness and “No” for no history.
- mentalill - A recoded 1,0 variable of history of mental illness, 1 for “Yes” and 0 for “No”.
- totalguns - Measures the total number of guns used during a particular shooting.
- statefull - The state in which a mass shooting incidence took place.
- PercHavGun - The percentage of gun ownership from a particular state (derived from the General Social Survey’s Trends in Gun Ownership in the United States) matched by state.
- newtotalguns - A recoded variable of total number of guns, instead generated to be on a scale from 1 - 4+ (4 or more guns).
Preliminary Analysis
Gun Ownership in the United States and Victims From Mass Shootings
Mass shootings are classified as shooting incidences that results in 2 or more deaths; we see that most mass shootings typically result in 2-10 deaths, with the most deaths occurring in Colorado, the darkest state in the map below. This of course accounts for the infamous 2012 mass shooting in an Aurora, Colorado movie theater.

One might predict that states with higher rates of gun ownership would potentially suggest more victims after a mass shooting. However as the second map below shows, states with some of the highest gun ownership rates (the darker purple, have some of the lowest rates of deaths/injuries.

Mental Illness and its Relationship To Victims
According to the data, history of mental illness bears some kind of relationship to the average number of victims after a mass shooting. Shooters with mental illness tend to injure or kill nearly twice as many victims than those who with no prior history of mentall illness.
Total Number of Guns and its Relationship to Victims
The data also reveals a steady increase in average number of deaths after a mass shooting as the number of guns used during the incident also increases. Number of victims steadily increases by about 5 or so for each additional gun used.
Poisson Models and Results
The poisson regression results indicate strong statistical significance in terms of influence of, as well as the interaction between, mental illness and number of guns used on the number of victims. Our third model, the interaction model, stands as the strongest given its lower AIC value in comparison to other models.
Statistical models
|
|
Model 1
|
Model 2
|
Model 3
|
|
(Intercept)
|
1.90***
|
1.61***
|
1.78***
|
|
|
(0.04)
|
(0.05)
|
(0.06)
|
|
mentalill1
|
0.58***
|
0.46***
|
0.16*
|
|
|
(0.05)
|
(0.05)
|
(0.08)
|
|
newtotalguns2
|
|
0.42***
|
0.16
|
|
|
|
(0.06)
|
(0.10)
|
|
newtotalguns3
|
|
0.85***
|
0.46**
|
|
|
|
(0.07)
|
(0.16)
|
|
newtotalguns4+
|
|
1.12***
|
0.60***
|
|
|
|
(0.07)
|
(0.15)
|
|
mentalill1:newtotalguns2
|
|
|
0.44***
|
|
|
|
|
(0.12)
|
|
mentalill1:newtotalguns3
|
|
|
0.56**
|
|
|
|
|
(0.18)
|
|
mentalill1:newtotalguns4+
|
|
|
0.75***
|
|
|
|
|
(0.17)
|
|
AIC
|
1734.10
|
1451.31
|
1427.76
|
|
BIC
|
1740.51
|
1467.33
|
1453.40
|
|
Log Likelihood
|
-865.05
|
-720.66
|
-705.88
|
|
Deviance
|
1036.26
|
747.47
|
717.92
|
|
Num. obs.
|
182
|
182
|
182
|
|
p < 0.001, p < 0.01, p < 0.05
|
Simulations
Mentall Illness, Guns, & Victims
The simulation results in terms of mentall illness and victims indicates that mass shooters with a history of mental illness tend to kill more victims than those with no history. Ultimately, mass shooters with a history of mental illness may kill or injure more compared to shooters with no mental illness, but it is not by any means a large difference.
In regards to number of guns used, there is a significant difference in number of victims after a mass shooting, about 20 injuries or deaths, when the total number of guns used is 4 or more compared to 1. Shooters equipped with several guns will be more likely to kill or injure four times as many victims compared to a shooter who uses only one gun.

Concluding Analysis
Modeled results confirm initial hypotheses. Indeed, the models and simulations show that:
- Mass shooters with a prior history of mental illness are very slightly more likely to injure or kill more victims than those with no prior history.
- The more guns used during a mass shooting the more likely it is that a higher incidence of injuries or fatalities will occur.
- When accounting for the interaction between mental illness and weaponry size we see consistent statistical significance.
These findings are interesting, particularly because they suggest that shooters with mental illness, while potentially more “dangerous” in the sense that they may be more likely to injure more lives (though the difference may be negligible), the largest difference exists in terms of weaponry count, with more guns resulting in more injuries/deaths. While concerns for the state of access to mental health services and ensuring those who suffer from mental illness are cared for remain paramount, the larger critique lays at the feet of lawmakers who must begin to take gun control efforts more seriously, by reducing the access to guns, if future injuries/fatalities are to be avoided.
Bibliography
McGinty, Emma E., Daniel W. Webster, and Colleen L. Barry. 2013. “Effects of news media messages about mass shootings on attitudes toward persons with serious mental illness and public support for gun control policies.” American Journal of Psychiatry 170, no. 5: 494-501.
Chapman, Simon, Phillip Alpers, Kingsley Agho, and Michael Jones. 2006. “Australia’s 1996 gun law reforms: faster falls in firearm deaths, firearm suicides, and a decade without mass shootings.” Injury Prevention 12, no. 6: 365-372.
LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2YgVGhlIFN0YW5mb3JkIE1hc3MgU2hvb3RpbmcgaW4gQW1lcmljYSAoTVNBKSBVc2luZyBQb2lzc29uIFJlZ3Jlc3Npb24iCm91dHB1dDogaHRtbF9ub3RlYm9vawpiaWJsaW9ncmFwaHk6IHJlZmVyZW5jZXMuYmliCi0tLQoKIyMjIyNFcm5lc3RvIEdvbWV6CiMjIyMjTm92ZW1iZXIgMjcsIDIwMTcKIyMjIyMjKioqTm90ZTogVGhpcyByZXBvcnQgYWRkcyB0by9mdXJ0aGVyIHBvbGlzaGVzIEhvbWV3b3JrIDkgdG8gbm93IGFjY291bnQgZm9yIG5ld2x5IGNyZWF0ZWQgbWFwcyBhbmQgdGhlIGFkZGl0aW9uIG9mIGEgbW9yZSBzdWNjaW50IGZpcnN0IGRpZmZlcmVuY2UgZ3JhcGggb2Ygc2ltdWxhdGlvbnMsIGFzIHJlY29tbWVuZGVkLioqCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKIVtdKGh0dHA6Ly9pNjUudGlueXBpYy5jb20vMmd1amQzOC5qcGcpCgojIyoqSW50cm9kdWN0aW9uKioKCiAgUmVjZW50IGV2ZW50cyBpbnZvbHZpbmcgbWFzcyBzaG9vdGVycyBndW5uaW5nIGRvd24gbGFyZ2UgZ3JvdXBzIG9mIHBlb3BsZSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBoYXMgY2F0YWx5emVkIGEgbmF0aW9uYWwgY29udmVyc2F0aW9uIGFyb3VuZCBndW5zLCBndW4gb3duZXJzaGlwLCBiYWNrZ3JvdW5kIGNoZWNrcywgYW5kIG1lbnRhbCBoZWFsdGguIFRoaXMgYW5hbHlzaXMgaXMgY29uY2VybmVkIHdpdGggdGhlIHF1ZXN0aW9uIGFyb3VuZCBtZW50YWwgaWxsbmVzcyBhbmQgYWNjZXNzIHRvIGEgbGFyZ2VyIGFyc2VuYWwgb24gdGhlIHBhcnQgb2YgYSBtYXNzIHNob290ZXIgYW5kIHdoZXRoZXIgdGhpcyBpcyBsaWtlbGllciB0byByZXN1bHQgaW4gbW9yZSBkZWF0aHMvaW5qdXJpZXMuIEEgcG9pc3NvbiByZWdyZXNzaW9uIGFuZCBzaW11bGF0aW9ucyB3aWxsIGJlIHV0aWxpemVkIHRvIGZ1cnRoZXIgYW5hbHl6ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5qdXJlZCBvciBraWxsZWQgdmljdGltcywgbWVudGFsIGlsbG5lc3MsIGFuZCB3ZWFwb24gY291bnQuIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KCiMjKipMaXRlcmF0dXJlIFJldmlldyoqCgogIE11Y2ggb2YgdGhlIGxpdGVyYXR1cmUgb24gbWFzcyBzaG9vdGluZ3MgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gbWVudGFsIGlsbG5lc3MgYW5kIGd1biB2aW9sZW5jZSBsYXJnZWx5IGNyaXRpcXVlIHRoZSByb2xlIG1lZGlhIHBsYXlzIGluIHNjYXBlZ29hdGluZyBtZW50YWwgaWxsbmVzcywgZXNwZWNpYWxseSBpbiB3YXlzIHRoYXQgc2VydmUgYXMgd2F5cyB0byBmdXJ0aGVyIHN0aWdtYXRpemUgcGVvcGxlIHdpdGggbWVudGFsIGlsbG5lc3MuIEluZGVlZCwgc2Nob2xhcnMgaGF2ZSBmb3VuZCB0aGF0IG5ld3Mgc3RvcmllcyBmb2xsb3dpbmcgbWFzcyBzaG9vdGluZ3MgdGVuZCB0byByYWlzZSBwdWJsaWNlIHN1cHBvcnQgZm9yIGd1biBjb250cm9sIHBvbGljaWVzIGJ1dCBhbHNvIGNvbnRyaWJ1dGUgdG8gbGVzcyB0aGFuIGZhdm9yYWJsZSB2aWV3cyB0b3dhcmRzIHRob3NlIHdpdGggc2VyaW91cyBtZW50YWwgaWxsbmVzcyAoTWNHaW50eSBldCBhbC4gMjAxMykuIFRoaXMgaGFzIGdlbmVyYXRlZCBhbmF0aW9uYWwgY29udmVyc2F0aW9uIG9uIG1lbnRhbCBoZWFsdGggYW5kIHRoZSBuZWNlc3NpdHkgZm9yIHRpZ2h0ZXIgZ3VuIGNvbnRyb2wgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuIAoKICBTdHVkaWVzIGZyb20gb3RoZXIgY291bnRyaWVzLCBzdWNoIGFzIEF1c3RyYWxpYSwgaGF2ZSBzaG93biB0aGF0IHdoZW4gc3RyaWN0ZXIgZ3VuIGNvbnRyb2wgbWVhc3VyZXMgd2VyZSBlbmFjdGVkIHRoZSBjb3VudHJ5IHdhcyBmcmVlIGZyb20gbWFzcyBzaG9vdGluZ3MgZm9yIG92ZXIgYSBkZWNhZGUgYW5kIHNhdyBzaWduaWZpY2FudCBkZWNsaW5lcyBpbiBmYXRhbGl0aWVzIGZyb20gZmlyZWFybXMgKENoYXBtYW4gZXQgYWwuIDIwMDYpLiBUaHVzLCB0aGlzIGJlYXJzIHNldmVyYWwgcXVlc3Rpb25zOiBEb2VzIG1lbnRhbCBpbGxuZXNzIGFmZmVjdCBhIHNob290ZXJzIGFiaWxpdHkgdG8gaW5qdXJlIG9yIGtpbGwgbW9yZSB2aWN0aW1zLCBhbmQgZG9lcyBhY2Nlc3MgdG8gbW9yZSBndW5zIHJlc3VsdCBpbiBhIGhpZ2hlciBpbmNpZGVuY2Ugb2YgaW5qdXJ5L2RlYXRoPyAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCgojIyoqTWV0aG9kKioKCiAgVG8gY29uZHVjdCB0aGlzIGFuYWx5c2lzLCB0aGUgU3RhbmZvcmQgTWFzcyBTaG9vdGluZ3MgaW4gQW1lcmljYSAoTVNBKSwgYSBub24tZXhoYXVzdGl2ZSBkYXRhc2V0IG9mIG1hc3Mgc2hvb3RpbmdzIGRhdGluZyBmcm9tIDE5NjYtMjAxNiwgd2lsbCBiZSB1dGlsemVkIHRvIGZvY3VzIG9uIHRoZSBxdWVzdGlvbiBvZiBtZW50YWwgaWxsbmVzcyBhbmQgYWNjZXNzIHRvIGd1bnMsIGluIGl0cyByZWxhdGlvbiB0byBtYXNzIHNob290aW5ncywgYW5kIHdoZXRoZXIgbWFzcyBzaG9vdGVycyB3aXRoIGEgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcyBhbmQgYWNjZXNzIHRvIG11bHRpcGxlIGd1bnMgcmVzdWx0cyBpbiBhIGhpZ2hlciBpbmNpZGVuY2UgaW4gaW5qdXJpZXMgZnJvbSBhIG1hc3Mgc2hvb3RpbmcuIFRvIGFjY29tcGxpc2ggdGhpcywgZGF0YSByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgdmljdGltcyAoaW5qdXJlZCkgZnJvbSBtYXNzIHNob290aW5ncyAoMTk2Ni0yMDE2KSwgc2hvb3RlcidzIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MsIGFuZCB0b3RhbCBudW1iZXIgb2YgZ3VucyB1c2VkIGJ5IHNob290ZXIgd2lsbCBiZSB1c2VkIHRvIHBlcmZvcm0gYSBwb2lzc29uIHJlZ3Jlc3Npb24gYW5kIHNldCBvZiBzaW11bGF0aW9ucyB0byBwb3RlbnRpYWxseSBicmluZyBjbGFyaXR5IHRvIHRoaXMgcXVlc3Rpb24uIExhc3RseSwgdGhlIHBlcmNlbnRhZ2Ugb2YgZ3VuIG93bmVyc2hpcCBhY3Jvc3MgdGhlIFVuaXRlZCBTdGF0ZXMsIHRha2VuIGZyb20gYSBoZWF0bWFwIGJhc2VkIG9uIEdlbmVyYWwgU29jaWFsIFN1cnZleSBkYXRhIGFuZCBzdHJhdGlmaWVkIG9uIHRoZSBzdGF0ZS1sZXZlbCwgaXMgYWxzbyB1dGlsaXplZCBmb3IgYm90aCBncmFwaGljYWwgYW5kIGFuYWx5dGljcyBwdXJwb3Nlcy4KCiMjIyNIeXBvdGhlc2VzIAoKICBJdCBpcyBoeXBvdGhlc2l6ZWQgdGhhdCBtYXNzIHNob290ZXJzIHdpdGggYSBoaXN0b3J5IG9mIG1lbnRhbCBpbGxuZXNzIGJlYXJzIGEgcG9zaXRpdmUgcmVsYXRpb25zaGlwIHRvIHRoZSBudW1iZXIgb2Yga2lsbGVkIG9yIGluanVyZWQgdmljdGltcyBhZnRlciBhIG1hc3Mgc2hvb3RpbmcuIEZ1cnRoZXJtb3JlLCBpdCB3aWxsIGJlIHRoZW9yaXplZCB0aGF0IGFjY2VzcyB0byBhIGxhcmdlciBhcnNlbmFsIG9mIHdlYXBvbnMgd2lsbCBsaWtlbHkgcmVzdWx0IGluIG1vcmUgdmljdGltcy4KCiMjIyNEYXRhIAoKKiAqKnRvdGFsdmljdGltcyoqIC0gVGhlIGRlcGVuZGVudCB2YXJpYWJsZSwgYSBtZWFzdXJlbWVudCBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHZpY3RpbXMgaW5qdXJlZCBvciBraWxsZWQgZm9yIGV2ZXJ5IGluY2lkZW5jZSBvZiBhIG1hc3Mgc2hvb3RpbmcuCisgKiptZW50YWxoaXN0b3J5KiogLSBBIG1lYXN1cmVtZW50IG9mIHdoZXRoZXIgYSBtYXNzIHNob290ZXIgaGFkIGEgcmVwb3J0ZWQgb3IgY29uZmlybWVkIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MsICJZZXMiIGZvciBhIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgYW5kICJObyIgZm9yIG5vIGhpc3RvcnkuCisgKiptZW50YWxpbGwqKiAtIEEgcmVjb2RlZCAxLDAgdmFyaWFibGUgb2YgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcywgMSBmb3IgIlllcyIgYW5kIDAgZm9yICJObyIuCisgKip0b3RhbGd1bnMqKiAtICBNZWFzdXJlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGd1bnMgdXNlZCBkdXJpbmcgYSBwYXJ0aWN1bGFyIHNob290aW5nLgorICoqc3RhdGVmdWxsKiogLSBUaGUgc3RhdGUgaW4gd2hpY2ggYSBtYXNzIHNob290aW5nIGluY2lkZW5jZSB0b29rIHBsYWNlLgorICoqUGVyY0hhdkd1bioqIC0gVGhlIHBlcmNlbnRhZ2Ugb2YgZ3VuIG93bmVyc2hpcCBmcm9tIGEgcGFydGljdWxhciBzdGF0ZSAoZGVyaXZlZCBmcm9tIHRoZSBHZW5lcmFsIFNvY2lhbCBTdXJ2ZXnigJlzIFRyZW5kcyBpbiBHdW4gT3duZXJzaGlwIGluIHRoZSBVbml0ZWQgU3RhdGVzKSBtYXRjaGVkIGJ5IHN0YXRlLgorICoqbmV3dG90YWxndW5zKiogLSBBIHJlY29kZWQgdmFyaWFibGUgb2YgdG90YWwgbnVtYmVyIG9mIGd1bnMsIGluc3RlYWQgZ2VuZXJhdGVkIHRvIGJlIG9uIGEgc2NhbGUgZnJvbSAxIC0gNCsgKDQgb3IgbW9yZSBndW5zKS4KCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwcmludChtc2hvb3QpCmBgYAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9ImFzaXMifQpsaWJyYXJ5KHRtYXApCmxpYnJhcnkodG1hcHRvb2xzKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShubG1lKQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KHNqbWlzYykKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeShsbWVyVGVzdCkKbGlicmFyeSh0ZXhyZWcpCmxpYnJhcnkodmlzcmVnKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoYWNzKQpsaWJyYXJ5KHRpZ3JpcykKbGlicmFyeShnZ3RoZW1lcykKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoQ2l0ZSkKbGlicmFyeShaZWxpZykKbGlicmFyeShaZWxpZ0Nob2ljZSkKCm1hc3Nob290IDwtIGRhdGEuZnJhbWUocmVhZF9jc3YoIi9Vc2Vycy9lcm5lc3RvL0RvY3VtZW50cy9BZHZhbmNlZCBBbmFseXRpY3MvRGF0YS9NYXNzU2hvb3RpbmdzLmNzdiIpKSAlPiUKICByZW5hbWUoIm1lbnRhbGhpc3RvcnkiID0gSGlzdG9yeS5vZi5NZW50YWwuSWxsbmVzcy4uLkdlbmVyYWwsCiAgICAidG90YWx2aWN0aW1zIiA9IFRvdGFsLk51bWJlci5vZi5WaWN0aW1zLAogICAgICJzdGF0ZSIgPSBTdGF0ZSwKICAgICAidG90YWxndW5zIiA9IFRvdGFsLk51bWJlci5vZi5HdW5zKSAlPiUKICBzZWxlY3Qoc3RhdGUsIHRvdGFsdmljdGltcywgbWVudGFsaGlzdG9yeSwgdG90YWxndW5zKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHRvdGFsdmljdGltcyksCiAgICAgICAgICFpcy5uYShtZW50YWxoaXN0b3J5KSwKICAgICAgICAgIWlzLm5hKHN0YXRlKSwKICAgICAgICAgIWlzLm5hKHRvdGFsZ3VucyksIAogICAgICAgICF0b3RhbHZpY3RpbXMgJWluJSBjKCJVbmtub3duIiksCiAgICAgICAgIXN0YXRlICVpbiUgYygiVW5rbm93biIpLAogICAgICAgICFtZW50YWxoaXN0b3J5ICVpbiUgYygiVW5rbm93biIpLAogICAgICAgICF0b3RhbGd1bnMgJWluJSBjKCJVbmtub3duIikpICU+JQogICAgICAgbXV0YXRlKG1lbnRhbGlsbD1hcy5mYWN0b3IoaWZlbHNlKG1lbnRhbGhpc3Rvcnk9PSJZZXMiLCAxLCAwKSksCiAgICAgICAgICAgICAgdG90YWxndW5zPWFzLm51bWVyaWModG90YWxndW5zKSwKICAgICAgICAgICAgICBuZXd0b3RhbGd1bnM9YXMuZmFjdG9yKGlmZWxzZSh0b3RhbGd1bnM8NCwgdG90YWxndW5zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b3RhbGd1bnM+PTQsICI0KyIsIm5hIikpKSkKCnN0YXRlZnVsbCA9IGMoIkFsYXNrYSIsIkFsYWJhbWEiLCJBcmthbnNhcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJpem9uYSIsIkNhbGlmb3JuaWEiLCJDb2xvcmFkbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aWN1dCIsIkRpc3RyaWN0IG9mIENvbHVtYmlhIiwiRGVsYXdhcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmxvcmlkYSIgLCAiR2VvcmdpYSIgLCJIYXdhaWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW93YSIsIklkYWhvIiwiSWxsaW5vaXMiLCJJbmRpYW5hIiwiS2Fuc2FzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlbnR1Y2t5IiwiTG91aXNpYW5hIiwiTWFzc2FjaHVzZXR0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXJ5bGFuZCIsIk1haW5lIiAsIk1pY2hpZ2FuIiwiTWlubmVzb3RhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NvdXJpIiwiTWlzc2lzc2lwcGkiLCJNb250YW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vcnRoIENhcm9saW5hIiwiTm9ydGggRGFrb3RhIiwiTmVicmFza2EiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV3IEhhbXBzaGlyZSIgLCAiTmV3IEplcnNleSIgLCAgIk5ldyBNZXhpY28iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV2YWRhIiwiTmV3IFlvcmsiLCJPaGlvIiwiT2tsYWhvbWEiICwiT3JlZ29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlbm5zeWx2YW5pYSIgLCAiUmhvZGUgSXNsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdXRoIENhcm9saW5hIiwgIlNvdXRoIERha290YSIgLCJUZW5uZXNzZWUiICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXhhcyIgLCAiVXRhaCIsICJWaXJnaW5pYSIsIlZlcm1vbnQiICwiV2FzaGluZ3RvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaXNjb25zaW4iLCAiV2VzdCBWaXJnaW5pYSIgLCAiV3lvbWluZyIpCgpQZXJjSGF2R3Vucz0gYyg1Ny44LCA1MS43LCA1NS4zLAogICAgICAgICAgICAgICAzMS4xLCAyMS4zLCAzNC43LAogICAgICAgICAgICAgICAxNi43LCAzLjYsIDI1LjUsCiAgICAgICAgICAgICAgIDI0LjUsIDQwLjMsIDYuNywKICAgICAgICAgICAgICAgNDIuOSwgNTUuMywgMjAuMiwgMzkuMSwgNDIuMSwKICAgICAgICAgICAgICAgNDcuNywgNDQuMSwgMTIuNiwKICAgICAgICAgICAgICAgMjEuMywgNDAuNSwgMzguNCwgNDEuNywKICAgICAgICAgICAgICAgNDEuNywgNTUuMywgNTcuNywKICAgICAgICAgICAgICAgNDEuMywgNTAuNywgMzguNiwKICAgICAgICAgICAgICAgMzAuMCwgMTIuMywgMzQuOCwKICAgICAgICAgICAgICAgMzMuOCwgMTguMCwgMzIuNCwgNDIuOSwgMzkuOCwKICAgICAgICAgICAgICAgMzQuNywgMTIuOCwKICAgICAgICAgICAgICAgNDIuMywgNTYuNiwgNDMuOSwKICAgICAgICAgICAgICAgMzUuOSwgNDMuOSwgMzUuMSwgNDIuMCwgMzMuMSwKICAgICAgICAgICAgICAgNDQuNCwgNTUuNCwgNTkuNykKCnN0YXRlZ3VucyA8LSBkYXRhLmZyYW1lKHN0YXRlZnVsbCwgUGVyY0hhdkd1bnMpCgptc2hvb3QgPC0gbWVyZ2Uoc3RhdGVndW5zLCBtYXNzaG9vdCwgYWxsLng9RkFMU0UsIGFsbC55PVRSVUUsIGJ5Lng9InN0YXRlZnVsbCIsIGJ5Lnk9InN0YXRlIikgJT4lCiAgbXV0YXRlKHN0YXRlPXRvbG93ZXIoc3RhdGVmdWxsKSkKCiNjcmVhdGluZyB0bWFwcwpzaG9vdF9tYXAgPC0gc3RfcmVhZCgiL1VzZXJzL2VybmVzdG8vRG9jdW1lbnRzL0FkdmFuY2VkIEFuYWx5dGljcy9Ib21ld29yay90bF8yMDE2X3VzX3N0YXRlIiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQoKc2hvb3RfbWFwIDwtIHNob290X21hcCAlPiUKICBtdXRhdGUoc3RhdGUgPSB0b2xvd2VyKE5BTUUpKQoKY29tYl9kYXRhIDwtIHNob290X21hcCAlPiUKICBsZWZ0X2pvaW4obXNob290LCBieSA9ICJzdGF0ZSIpCgpjb21iX2RhdGFfc3ViIDwtIGNvbWJfZGF0YSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiMDIiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiMTUiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiNjAiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiNjYiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiNjkiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiNzIiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAhPSAiNzkiKSAlPiUKICBtdXRhdGUodG90YWx2aWN0aW1zMSA9IGlmZWxzZShpcy5uYSh0b3RhbHZpY3RpbXMpLCAwLCB0b3RhbHZpY3RpbXMpKQpgYGAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiMjKipQcmVsaW1pbmFyeSBBbmFseXNpcyoqCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyMjR3VuIE93bmVyc2hpcCBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgVmljdGltcyBGcm9tIE1hc3MgU2hvb3RpbmdzCiAgCiAgTWFzcyBzaG9vdGluZ3MgYXJlIGNsYXNzaWZpZWQgYXMgc2hvb3RpbmcgaW5jaWRlbmNlcyB0aGF0IHJlc3VsdHMgaW4gMiBvciBtb3JlIGRlYXRoczsgd2Ugc2VlIHRoYXQgbW9zdCBtYXNzIHNob290aW5ncyB0eXBpY2FsbHkgcmVzdWx0IGluIDItMTAgZGVhdGhzLCB3aXRoIHRoZSBtb3N0IGRlYXRocyBvY2N1cnJpbmcgaW4gQ29sb3JhZG8sIHRoZSBkYXJrZXN0IHN0YXRlIGluIHRoZSBtYXAgYmVsb3cuIFRoaXMgb2YgY291cnNlIGFjY291bnRzIGZvciB0aGUgaW5mYW1vdXMgMjAxMiBtYXNzIHNob290aW5nIGluIGFuIEF1cm9yYSwgQ29sb3JhZG8gbW92aWUgdGhlYXRlci4KCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdG1fc2hhcGUoY29tYl9kYXRhX3N1YiwgcHJvamVjdGlvbiA9IDIxNjMpICsgdG1fcG9seWdvbnMoInRvdGFsdmljdGltczEiLCBwYWxldHRlPSJPclJkIiwgYm9yZGVyLmNvbD0iYmxhY2siLCBib3JkZXIuYWxwaGE9LjUpICsgdG1fbGF5b3V0KCJUb3RhbCBTaG9vdGluZyBWaWN0aW1zIikKYGBgCgpPbmUgbWlnaHQgcHJlZGljdCB0aGF0IHN0YXRlcyB3aXRoIGhpZ2hlciByYXRlcyBvZiBndW4gb3duZXJzaGlwIHdvdWxkIHBvdGVudGlhbGx5IHN1Z2dlc3QgbW9yZSB2aWN0aW1zIGFmdGVyIGEgbWFzcyBzaG9vdGluZy4gSG93ZXZlciBhcyB0aGUgc2Vjb25kIG1hcCBiZWxvdyBzaG93cywgc3RhdGVzIHdpdGggc29tZSBvZiB0aGUgaGlnaGVzdCBndW4gb3duZXJzaGlwIHJhdGVzICh0aGUgZGFya2VyIHB1cnBsZSwgaGF2ZSBzb21lIG9mIHRoZSBsb3dlc3QgcmF0ZXMgb2YgZGVhdGhzL2luanVyaWVzLiAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0bV9zaGFwZShjb21iX2RhdGFfc3ViLCBwcm9qZWN0aW9uID0gMjE2MykgKyB0bV9wb2x5Z29ucygiUGVyY0hhdkd1bnMiLCBwYWxldHRlPSJCdVB1IiwgYm9yZGVyLmNvbD0iYmxhY2siLCBib3JkZXIuYWxwaGE9LjUpICsgdG1fbGF5b3V0KCJHdW4gT3duZXJzaGlwIChVLlMpIikKYGBgCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKIyMjTWVudGFsIElsbG5lc3MgYW5kIGl0cyBSZWxhdGlvbnNoaXAgVG8gVmljdGltcwoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnNob290IDwtIG1hc3Nob290ICU+JQpzZWxlY3QgKHRvdGFsdmljdGltcywgbWVudGFsaWxsLCB0b3RhbGd1bnMpICU+JQogIGdyb3VwX2J5KG1lbnRhbGlsbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHRvdGFsdmljdGltcykpCmBgYAoKICBBY2NvcmRpbmcgdG8gdGhlIGRhdGEsIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgYmVhcnMgc29tZSBraW5kIG9mIHJlbGF0aW9uc2hpcCB0byB0aGUgYXZlcmFnZSBudW1iZXIgb2YgdmljdGltcyBhZnRlciBhIG1hc3Mgc2hvb3RpbmcuIFNob290ZXJzIHdpdGggbWVudGFsIGlsbG5lc3MgdGVuZCB0byBpbmp1cmUgb3Iga2lsbCBuZWFybHkgdHdpY2UgYXMgbWFueSB2aWN0aW1zIHRoYW4gdGhvc2Ugd2hvIHdpdGggbm8gcHJpb3IgaGlzdG9yeSBvZiBtZW50YWxsIGlsbG5lc3MuCgoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdnaGVhbHRoIDwtIGdncGxvdChkYXRhPXNob290KSsKICBnZW9tX2NvbChhZXMoeD1tZW50YWxpbGwsIHk9bWVhbiksIGZpbGw9ImRhcmtibHVlIikrbGFicyh0aXRsZT0iTWVudGFsIElsbG5lc3MgYW5kIEF2ZXJhZ2UgVmljdGltcyIsIHg9Ik1lbnRhbGx5IElsbCBTaG9vdGVycyIsIHk9IkF2ZXJhZ2UgVmljdGltcyIpK3RoZW1lX3R1ZnRlKCkKZ2dwbG90bHkoZ2doZWFsdGgpCmBgYAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojIyNUb3RhbCBOdW1iZXIgb2YgR3VucyBhbmQgaXRzIFJlbGF0aW9uc2hpcCB0byBWaWN0aW1zCmBgYHtyLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRSwgaW5jbHVkZT1GQUxTRX0Kc2hvb3QxIDwtIG1hc3Nob290ICU+JQogIHNlbGVjdCAodG90YWx2aWN0aW1zLCBtZW50YWxpbGwsIG5ld3RvdGFsZ3VucykgJT4lCiAgZ3JvdXBfYnkobmV3dG90YWxndW5zKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4odG90YWx2aWN0aW1zKSkKYGBgCgogIFRoZSBkYXRhIGFsc28gcmV2ZWFscyBhIHN0ZWFkeSBpbmNyZWFzZSBpbiBhdmVyYWdlIG51bWJlciBvZiBkZWF0aHMgYWZ0ZXIgYSBtYXNzIHNob290aW5nIGFzIHRoZSBudW1iZXIgb2YgZ3VucyB1c2VkIGR1cmluZyB0aGUgaW5jaWRlbnQgYWxzbyBpbmNyZWFzZXMuIE51bWJlciBvZiB2aWN0aW1zIHN0ZWFkaWx5IGluY3JlYXNlcyBieSBhYm91dCA1IG9yIHNvIGZvciBlYWNoIGFkZGl0aW9uYWwgZ3VuIHVzZWQuIAoKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdndW5zIDwtIGdncGxvdChkYXRhPXNob290MSkrCiAgZ2VvbV9jb2woYWVzKHg9bmV3dG90YWxndW5zLCB5PW1lYW4pLCBmaWxsPSJkYXJrcmVkIikrbGFicyh0aXRsZT0iTnVtYmVyIG9mIEd1bnMgYW5kIEF2ZXJhZ2UgVmljdGltcyIsCiAgeD0iTnVtYmVyIG9mIEd1bnMgVXNlZCIsIHk9IkF2ZXJhZ2UgVmljdGltcyIpK3RoZW1lX3R1ZnRlKCkKZ2dwbG90bHkoZ2d1bnMpCmBgYApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwojIyoqUG9pc3NvbiBNb2RlbHMgYW5kIFJlc3VsdHMqKgoKICBUaGUgcG9pc3NvbiByZWdyZXNzaW9uIHJlc3VsdHMgaW5kaWNhdGUgc3Ryb25nIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBpbiB0ZXJtcyBvZiBpbmZsdWVuY2Ugb2YsIGFzIHdlbGwgYXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4sIG1lbnRhbCBpbGxuZXNzIGFuZCBudW1iZXIgb2YgZ3VucyB1c2VkIG9uIHRoZSBudW1iZXIgb2YgdmljdGltcy4gT3VyIHRoaXJkIG1vZGVsLCB0aGUgaW50ZXJhY3Rpb24gbW9kZWwsIHN0YW5kcyBhcyB0aGUgc3Ryb25nZXN0IGdpdmVuIGl0cyBsb3dlciBBSUMgdmFsdWUgaW4gY29tcGFyaXNvbiB0byBvdGhlciBtb2RlbHMuCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0iYXNpcyJ9Cmh0bWxyZWcobGlzdCh6Lm91dDEsIHoub3V0Miwgei5vdXQzKSkKYGBgCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIyMqKlNpbXVsYXRpb25zKioKCiMjI01lbnRhbGwgSWxsbmVzcywgR3VucywgJiBWaWN0aW1zCgogIFRoZSBzaW11bGF0aW9uIHJlc3VsdHMgaW4gdGVybXMgb2YgbWVudGFsbCBpbGxuZXNzIGFuZCB2aWN0aW1zIGluZGljYXRlcyB0aGF0IG1hc3Mgc2hvb3RlcnMgd2l0aCBhIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgdGVuZCB0byBraWxsIG1vcmUgdmljdGltcyB0aGFuIHRob3NlIHdpdGggbm8gaGlzdG9yeS4gVWx0aW1hdGVseSwgbWFzcyBzaG9vdGVycyB3aXRoIGEgaGlzdG9yeSBvZiBtZW50YWwgaWxsbmVzcyBtYXkga2lsbCBvciBpbmp1cmUgbW9yZSBjb21wYXJlZCB0byBzaG9vdGVycyB3aXRoIG5vIG1lbnRhbCBpbGxuZXNzLCBidXQgaXQgaXMgbm90IGJ5IGFueSBtZWFucyBhIGxhcmdlIGRpZmZlcmVuY2UuIAoKICBJbiByZWdhcmRzIHRvIG51bWJlciBvZiBndW5zIHVzZWQsIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBudW1iZXIgb2YgdmljdGltcyBhZnRlciBhIG1hc3Mgc2hvb3RpbmcsIGFib3V0IDIwIGluanVyaWVzIG9yIGRlYXRocywgd2hlbiB0aGUgdG90YWwgbnVtYmVyIG9mIGd1bnMgdXNlZCBpcyA0IG9yIG1vcmUgY29tcGFyZWQgdG8gMS4gU2hvb3RlcnMgZXF1aXBwZWQgd2l0aCBzZXZlcmFsIGd1bnMgd2lsbCBiZSBtb3JlIGxpa2VseSB0byBraWxsIG9yIGluanVyZSBmb3VyIHRpbWVzIGFzIG1hbnkgdmljdGltcyBjb21wYXJlZCB0byBhIHNob290ZXIgd2hvIHVzZXMgb25seSBvbmUgZ3VuLgoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojTW9kZWwgMQp6Lm91dDEgPC0gemVsaWcodG90YWx2aWN0aW1zIH4gbWVudGFsaWxsLCBtb2RlbD0icG9pc3NvbiIsIGRhdGE9bWFzc2hvb3QsIGNpdGU9RikKI01vZGVsIDIKei5vdXQyIDwtIHplbGlnKHRvdGFsdmljdGltcyB+IG1lbnRhbGlsbCArIG5ld3RvdGFsZ3VucywgbW9kZWw9InBvaXNzb24iLCBkYXRhPW1hc3Nob290LCBjaXRlPUYpCgojTW9kZWwgMwp6Lm91dDMgPC0gemVsaWcodG90YWx2aWN0aW1zIH4gbWVudGFsaWxsKm5ld3RvdGFsZ3VucywgbW9kZWw9InBvaXNzb24iLCBkYXRhPW1hc3Nob290LCBjaXRlPUYpCiNzaW0xCngubm9pbGwgPC0gc2V0eCh6Lm91dDMsIG1lbnRhbGlsbCA9IDApCngueWVzaWxsIDwtIHNldHgoei5vdXQzLCBtZW50YWxpbGwgPSAxKQpzLm91dCA8LSBzaW0gKHoub3V0MywgeD14Lm5vaWxsLCB4MT14Lnllc2lsbCkKZmQgPC0gcy5vdXQkZ2V0X3FpKHh2YWx1ZT0ieDEiLCBxaT0iZmQiKQoKI3NpbTIKeC5sb2d1biA8LSBzZXR4KHoub3V0MywgbmV3dG90YWxndW5zID0gMSkKeC5oaWd1biA8LSBzZXR4KHoub3V0MywgbmV3dG90YWxndW5zID0gIjQrIikKcyA8LSBzaW0oei5vdXQzLCB4PXgubG9ndW4sIHgxPXguaGlndW4pCmZkMSA8LSBzJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikKCmRmZCA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKGZkLCBmZDEpKQoKdGlkZCA8LSBkZmQgJT4lCiAgZ2F0aGVyKG1vZGVsLCBzaW12LCAxOjIpICU+JQogIG11dGF0ZShtb2RlbD1pZmVsc2UobW9kZWw9PSJWMSIsICJNZW50YWwgSWxsbmVzcyAmIFZpY3RpbXMiLCAiR3VucyAmIFZpY3RpbXMiKSkKCnRpZGQgJT4lCiAgZ3JvdXBfYnkobW9kZWwpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzaW12KSwgc2QgPSBzZChzaW12KSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KHRpZGQsIGFlcyhzaW12KSwgZmlsbD0iYmxhY2siKSArIGdlb21faGlzdG9ncmFtKCkgKyBmYWNldF9ncmlkKH5tb2RlbCkgKyB0aGVtZV90dWZ0ZSgpCmBgYApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiMjKipDb25jbHVkaW5nIEFuYWx5c2lzKioKCk1vZGVsZWQgcmVzdWx0cyBjb25maXJtIGluaXRpYWwgaHlwb3RoZXNlcy4gSW5kZWVkLCB0aGUgbW9kZWxzIGFuZCBzaW11bGF0aW9ucyBzaG93IHRoYXQ6CgoqIE1hc3Mgc2hvb3RlcnMgd2l0aCBhIHByaW9yIGhpc3Rvcnkgb2YgbWVudGFsIGlsbG5lc3MgYXJlIHZlcnkgc2xpZ2h0bHkgbW9yZSBsaWtlbHkgdG8gaW5qdXJlIG9yIGtpbGwgbW9yZSB2aWN0aW1zIHRoYW4gdGhvc2Ugd2l0aCBubyBwcmlvciBoaXN0b3J5LgorIFRoZSBtb3JlIGd1bnMgdXNlZCBkdXJpbmcgYSBtYXNzIHNob290aW5nIHRoZSBtb3JlIGxpa2VseSBpdCBpcyB0aGF0IGEgaGlnaGVyIGluY2lkZW5jZSBvZiBpbmp1cmllcyBvciBmYXRhbGl0aWVzIHdpbGwgb2NjdXIuCisgV2hlbiBhY2NvdW50aW5nIGZvciB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW50YWwgaWxsbmVzcyBhbmQgd2VhcG9ucnkgc2l6ZSB3ZSBzZWUgY29uc2lzdGVudCBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UuCgogIFRoZXNlIGZpbmRpbmdzIGFyZSBpbnRlcmVzdGluZywgcGFydGljdWxhcmx5IGJlY2F1c2UgdGhleSBzdWdnZXN0IHRoYXQgc2hvb3RlcnMgd2l0aCBtZW50YWwgaWxsbmVzcywgd2hpbGUgcG90ZW50aWFsbHkgbW9yZSAiZGFuZ2Vyb3VzIiBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IG1heSBiZSBtb3JlIGxpa2VseSB0byBpbmp1cmUgbW9yZSBsaXZlcyAodGhvdWdoIHRoZSBkaWZmZXJlbmNlIG1heSBiZSBuZWdsaWdpYmxlKSwgdGhlIGxhcmdlc3QgZGlmZmVyZW5jZSBleGlzdHMgaW4gdGVybXMgb2Ygd2VhcG9ucnkgY291bnQsIHdpdGggbW9yZSBndW5zIHJlc3VsdGluZyBpbiBtb3JlIGluanVyaWVzL2RlYXRocy4gCiAgV2hpbGUgY29uY2VybnMgZm9yIHRoZSBzdGF0ZSBvZiBhY2Nlc3MgdG8gbWVudGFsIGhlYWx0aCBzZXJ2aWNlcyBhbmQgZW5zdXJpbmcgdGhvc2Ugd2hvIHN1ZmZlciBmcm9tIG1lbnRhbCBpbGxuZXNzIGFyZSBjYXJlZCBmb3IgcmVtYWluIHBhcmFtb3VudCwgdGhlIGxhcmdlciBjcml0aXF1ZSBsYXlzIGF0IHRoZSBmZWV0IG9mIGxhd21ha2VycyB3aG8gbXVzdCBiZWdpbiB0byB0YWtlIGd1biBjb250cm9sIGVmZm9ydHMgbW9yZSBzZXJpb3VzbHksIGJ5IHJlZHVjaW5nIHRoZSBhY2Nlc3MgdG8gZ3VucywgaWYgZnV0dXJlIGluanVyaWVzL2ZhdGFsaXRpZXMgYXJlIHRvIGJlIGF2b2lkZWQuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKIyMqKkJpYmxpb2dyYXBoeSoqCgpNY0dpbnR5LCBFbW1hIEUuLCBEYW5pZWwgVy4gV2Vic3RlciwgYW5kIENvbGxlZW4gTC4gQmFycnkuIDIwMTMuICJFZmZlY3RzIG9mIG5ld3MgbWVkaWEgbWVzc2FnZXMgYWJvdXQgbWFzcyBzaG9vdGluZ3Mgb24gYXR0aXR1ZGVzIHRvd2FyZCBwZXJzb25zIHdpdGggc2VyaW91cyBtZW50YWwgaWxsbmVzcyBhbmQgcHVibGljIHN1cHBvcnQgZm9yIGd1biBjb250cm9sIHBvbGljaWVzLiIgKkFtZXJpY2FuIEpvdXJuYWwgb2YgUHN5Y2hpYXRyeSogMTcwLCBuby4gNTogNDk0LTUwMS4KCkNoYXBtYW4sIFNpbW9uLCBQaGlsbGlwIEFscGVycywgS2luZ3NsZXkgQWdobywgYW5kIE1pY2hhZWwgSm9uZXMuIDIwMDYuICJBdXN0cmFsaWHigJlzIDE5OTYgZ3VuIGxhdyByZWZvcm1zOiBmYXN0ZXIgZmFsbHMgaW4gZmlyZWFybSBkZWF0aHMsIGZpcmVhcm0gc3VpY2lkZXMsIGFuZCBhIGRlY2FkZSB3aXRob3V0IG1hc3Mgc2hvb3RpbmdzLiIgKkluanVyeSBQcmV2ZW50aW9uKiAxMiwgbm8uIDY6IDM2NS0zNzIu