1 Introduction
The increasing popularity of cycling in New York City has made it an
important focus of transportation and public-health planning. The city’s
Department of Transportation monitors daily cyclist traffic across the
East River bridges to evaluate patterns in commuting, recreation, and
infrastructure usage. Understanding how environmental factors such as
temperature and precipitation affect cycling behavior can help
policymakers improve safety, allocate resources, and encourage
sustainable transportation.
In this study, we analyze daily cyclist counts collected by the
Traffic Information Management System (TIMS) across four major East
River bridges—the Brooklyn, Manhattan, Williamsburg, and Queensboro
Bridges. Each observation represents the total number of cyclists
recorded within a 24-hour period, along with daily weather conditions
including high temperature, low temperature, and precipitation. The
dataset spans multiple months and provides a detailed view of day-to-day
variation in cycling activity.
The primary research question is:
How do temperature and precipitation influence the number of cyclists
crossing the Manhattan Bridge each day?
To address this question, we apply a Poisson regression model, which
is suitable for modeling count data. The response variable in our
analysis is the daily cyclist count on the Manhattan Bridge
(ManhattanBridge), while the explanatory variables include daily high
temperature (HighTemp), low temperature (LowTemp), and precipitation
(Precipitation). By modeling both the raw counts and adjusted rates of
Manhattan Bridge crossings, we aim to quantify how weather conditions
influence daily bicycle traffic on this key New York City route.
2 Description of Dataset
The dataset originates from the Traffic Information Management System
(TIMS), which collects automated bicycle counts across New York City’s
East River bridges. The data are summarized on a daily basis, where each
observation represents the total number of cyclists crossing the bridges
in a 24-hour period, along with corresponding weather conditions for
that day. These data provide a snapshot of how cycling activity
fluctuates with environmental factors such as temperature and
rainfall.
There are 5 exploratory variables in the data set:
Date (categorical) - date of the bike count. This is our
observation ID
LowTemp (numerical) - lowest temperature
Precipitation (numerical) - amount of precipitation
HighTemp (numerical) - highest temperature
Total (numerical) - total number of cyclists per 24 hours on the
Brooklyn Bridge, Manhattan Bridge, Williamsburg Bridge, and Queensboro
Bridge Our response variable is:
ManhattanBridge (numerical) - total number of cyclists per 24
hours crossing the Manhattan Bridge
Assumptions and Conditions for Poisson
Regression:
Count response variable: The dependent variable must represent counts
(non-negative integers), such as the number of cyclists crossing a
bridge per day.
Independence of observations: Each observation (daily count) is
assumed to be independent of the others.
Equidispersion: The mean and variance of the response variable are
approximately equal. Overdispersion (variance greater than mean) can
indicate model misfit and may require a quasi-Poisson or negative
binomial adjustment.
Log-linearity: The logarithm of the expected count is a linear
function of the predictor variables.
No excessive zeros: Poisson regression assumes the count data are not
dominated by zeros (zero-inflated models would be used otherwise).
Explanatory variables measured without error: Predictor variables
(e.g., temperature, precipitation) are assumed to be observed
accurately.
3 Poisson Regression on New York Bike Crossing Counts
We first build a Poisson frequency regression model to evaluate how
daily weather conditions—specifically temperature and
precipitation—affect the number of cyclists crossing the Manhattan
Bridge. The model treats the Manhattan Bridge cyclist count as the
random response variable and uses low temperature, high temperature, and
precipitation as explanatory variables.
3.1
The fitted model is given by:
log(E[ManhattanBridge])=β0+β1(LowTemp)+β2(Precipitation)+β3(HighTemp)
model.freq <- glm(ManhattanBridge ~ LowTemp + Precipitation + HighTemp, family = poisson(link = "log"), data = data)
##
pois.count.coef = summary(model.freq)$coef
kable(pois.count.coef, caption = "Poisson regression of daily total cyclists on temperature and precipitation")
Poisson regression of daily total cyclists on temperature and
precipitation
| (Intercept) |
7.1518810 |
0.0208735 |
342.629009 |
0 |
| LowTemp |
0.0057293 |
0.0007305 |
7.843104 |
0 |
| Precipitation |
-0.9562159 |
0.0171745 |
-55.676552 |
0 |
| HighTemp |
0.0156493 |
0.0005453 |
28.699846 |
0 |
The Poisson regression results show how weather conditions shape
daily cycling activity across the Manhattan Bridge. Both temperature
variables have positive relationships with cyclist counts, meaning
warmer days—both in the morning and afternoon—encourage more people to
bike across the bridge. For every one-degree increase in daily high
temperature, the expected number of cyclists rises by about 1.4 percent,
while a one-degree increase in the low temperature adds roughly 0.7
percent. These effects, though small individually, accumulate to a
substantial increase in cycling volume during warm weather. In contrast,
precipitation has a strong and highly significant negative impact on
cyclist activity. A day with measurable rainfall sees nearly a 60
percent drop in cyclists compared to a dry day, highlighting how
sensitive commuting and recreational biking are to poor weather.
Overall, the model captures intuitive behavioral patterns: people are
more likely to cycle when temperatures are comfortable and far less
likely when it rains. These findings reinforce how weather directly
drives daily changes in cycling traffic across the Manhattan Bridge.
Variable Selection:
To simplify the model, I examined the p-values of each predictor to
determine which variables had statistically significant effects on
Manhattan Bridge cyclist counts. Both temperature variables and
precipitation were highly significant (p < 0.05), so all three
predictors were retained in the final Poisson count model. Because every
variable contributed meaningfully, no further model reduction was
necessary.
3.2 Poisson Regression on Manhattan Bridge Cycling Rates
Next, we build a Poisson rate model to assess the relationship
between cycling rates on the Manhattan Bridge and weather conditions
while adjusting for the overall daily cycling volume across all four
bridges. This adjustment accounts for the fact that daily cycling totals
citywide may vary due to unobserved factors such as holidays, events, or
other conditions affecting all bridges.
The fitted model is:
log(E[ManhattanBridge])=β0+β1(LowTemp)+β2(Precipitation)+β3(HighTemp)+log(Total)
where log(Total) is included as an offset, allowing us to model the
rate of cyclists on the Manhattan Bridge relative to the total number of
cyclists across all bridges.
model.rates <- glm(ManhattanBridge ~ LowTemp + Precipitation + HighTemp, offset = log(Total),
family = poisson(link = "log"), data = data)
kable(summary(model.rates)$coef, caption = "Poisson regression of daily cyclist rates by temperature and precipitation")
Poisson regression of daily cyclist rates by temperature and
precipitation
| (Intercept) |
-1.2821389 |
0.0219865 |
-58.314794 |
0.0000000 |
| LowTemp |
-0.0009331 |
0.0007449 |
-1.252776 |
0.2102872 |
| Precipitation |
-0.0429674 |
0.0164222 |
-2.616430 |
0.0088855 |
| HighTemp |
0.0014200 |
0.0005597 |
2.537243 |
0.0111729 |
The Poisson rate model evaluates how temperature and precipitation
affect the rate of cyclists crossing the Manhattan Bridge, after
accounting for overall citywide cycling activity. Among the predictors,
precipitation has a significant negative impact (p = 0.009). Its
coefficient (−0.043) implies that for each additional inch of rainfall,
the expected rate of Manhattan Bridge crossings decreases by about 4%,
since exp(−0.043) ≈ 0.96. In other words, rainfall substantially lowers
the share of cyclists using the Manhattan Bridge relative to total
cyclists across all bridges.
High temperature has a small but statistically significant positive
relationship (p = 0.011). Each one-degree increase in daily high
temperature corresponds to roughly a 0.14% increase in the expected
cycling rate on the Manhattan Bridge (exp(0.0014) ≈ 1.0014). This
indicates that warmer daytime conditions slightly raise the bridge’s
cycling rate, even when controlling for total activity citywide.
Low temperature, however, shows no significant effect (p = 0.21),
suggesting that overnight or early-morning lows have minimal influence
once other factors are considered.
Overall, the results demonstrate that precipitation sharply reduces
Manhattan Bridge cycling rates, while warmer daily highs modestly
increase them. This pattern reinforces that adverse weather conditions,
particularly rain, discourage bridge cycling even after accounting for
broader citywide trends.
Variable Selection:
For the rate model, I used p-value–based selection to identify the
most important weather predictors after adjusting for total cycling
volume. High temperature (p = 0.011) and precipitation (p = 0.009) were
statistically significant, while low temperature (p = 0.21) was not.
Therefore, the final Poisson rate model retains only HighTemp and
Precipitation as predictors of Manhattan Bridge cycling rates.
4 Conclusion
This study examined how weather conditions influence daily cycling
activity across the Manhattan Bridge in New York City using Poisson
regression models. The analysis revealed consistent and intuitive
patterns: warmer temperatures encourage higher cyclist volumes, while
precipitation sharply reduces them.
In the Poisson count model, both high and low temperatures had
significant positive effects, indicating that warm days—morning and
afternoon alike—lead to greater numbers of cyclists. Precipitation
showed a large and highly significant negative impact, confirming that
rain strongly deters cycling across the bridge.
In the Poisson rate model, which adjusted for the total number of
cyclists across all East River bridges, high temperature remained a
small but significant positive predictor, while precipitation continued
to have a strong negative effect. Low temperature was no longer
significant once overall cycling trends were accounted for.
Together, these results demonstrate that daily variations in weather,
particularly precipitation and temperature, play a key role in shaping
cycling behavior. The findings highlight the importance of favorable
weather conditions for promoting urban cycling and provide useful
insights for city planners and transportation officials seeking to
design policies and infrastructure that support year-round bicycle
commuting in New York City.
LS0tDQp0aXRsZTogIk1vZGVsaW5nIE1hbmhhdHRhbiBCcmlkZ2UgQ3ljbGlzdCBDb3VudHMgVXNpbmcgUG9pc3NvbiBSZWdyZXNzaW9uIg0KYXV0aG9yOiAiTHVrZSBWb2xtIg0KZGF0ZTogIjIwMjUtMTAtMTAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6ICAgICAgICAgICAjIG91dHB1dCBkb2N1bWVudCBmb3JtYXQNCiAgICB0b2M6IHllcyAgICAgICAgICAgICAgICMgYWRkIHRhYmxlIGNvbnRlbnRzDQogICAgdG9jX2Zsb2F0OiB5ZXMgICAgICAgICAjIHRvY19wcm9wZXJ0eTogZmxvYXRpbmcNCiAgICB0b2NfZGVwdGg6IDQgICAgICAgICAgICMgZGVwdGggb2YgVE9DIGhlYWRpbmdzDQogICAgZmlnX3dpZHRoOiA2ICAgICAgICAgICAjIGdsb2JhbCBmaWd1cmUgd2lkdGgNCiAgICBmaWdfaGVpZ2h0OiA0ICAgICAgICAgICMgZ2xvYmFsIGZpZ3VyZSBoZWlnaHQNCiAgICBmaWdfY2FwdGlvbjogeWVzICAgICAgICMgYWRkIGZpZ3VyZSBjYXB0aW9uDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubyAgICMgbnVtYmVyaW5nIHNlY3Rpb24gaGVhZGluZ3MNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMgICAgICMgVE9DIHN1YmhlYWRpbmcgY29sbGFwc2luZw0KICAgIGNvZGVfZm9sZGluZzogaGlkZSAgICAgIyBmb2xkaW5nL3Nob3dpbmcgY29kZSANCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMgICAgICMgYWxsb3cgdG8gZG93bmxvYWQgY29tcGxldGUgUk1hcmtkb3duIHNvdXJjZSBjb2RlDQogICAgc21vb3RoX3Njcm9sbDogeWVzICAgICAjIHNjcm9sbGluZyB0ZXh0IG9mIHRoZSBkb2N1bWVudA0KICAgIHRoZW1lOiBsdW1lbiAgICAgICAgICAgIyB2aXN1YWwgdGhlbWUgZm9yIEhUTUwgZG9jdW1lbnQgb25seQ0KICAgIGhpZ2hsaWdodDogdGFuZ28gICAgICAgIyBjb2RlIHN5bnRheCBoaWdobGlnaHRpbmcgc3R5bGVzDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogJzQnDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KZGl2I1RPQyBsd2V7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLw0KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOw0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOw0KfQ0KDQpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLw0KICBmb250LXNpemU6IDI0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCn0NCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShib290KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShwYW5kZXIpDQoNCiMgU2V0IHNlZWQgZm9yIHJlcHJvZHVjaWJpbGl0eQ0Kc2V0LnNlZWQoMTIzKQ0KDQojIFJlYWQgaW4gZGF0YSAoZHJvcCBmaXJzdCBjb2x1bW4gaWYgaXQncyBqdXN0IGFuIGluZGV4L0lEKQ0Kc2V0d2QoIkM6L1VzZXJzL3ZvbG0xL09uZURyaXZlL0Rlc2t0b3AvU1RBMzIxIG5ldyIpDQpkYXRhIDwtIHJlYWRfZXhjZWwoIncwOS1Bc3NpZ25EYXRhc2V0Lnhsc3giKQ0KIyBHbG9iYWwgY2h1bmsgb3B0aW9ucw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gVFJVRSwgICAgICAjIHNob3cgY29kZQ0KICB3YXJuaW5nID0gRkFMU0UsICAjIHN1cHByZXNzIHdhcm5pbmdzDQogIG1lc3NhZ2UgPSBGQUxTRSwgICMgc3VwcHJlc3MgbWVzc2FnZXMNCiAgcmVzdWx0cyA9IFRSVUUsICAgIyBzaG93IHJlc3VsdHMNCiAgY29tbWVudCA9IE5BICAgICAgIyBjbGVhbmVyIG91dHB1dCAobm8gIiMjIiBwcmVmaXgpDQopDQpgYGANCg0KIyAxIEludHJvZHVjdGlvbg0KDQpUaGUgaW5jcmVhc2luZyBwb3B1bGFyaXR5IG9mIGN5Y2xpbmcgaW4gTmV3IFlvcmsgQ2l0eSBoYXMgbWFkZSBpdCBhbiBpbXBvcnRhbnQgZm9jdXMgb2YgdHJhbnNwb3J0YXRpb24gYW5kIHB1YmxpYy1oZWFsdGggcGxhbm5pbmcuIFRoZSBjaXR54oCZcyBEZXBhcnRtZW50IG9mIFRyYW5zcG9ydGF0aW9uIG1vbml0b3JzIGRhaWx5IGN5Y2xpc3QgdHJhZmZpYyBhY3Jvc3MgdGhlIEVhc3QgUml2ZXIgYnJpZGdlcyB0byBldmFsdWF0ZSBwYXR0ZXJucyBpbiBjb21tdXRpbmcsIHJlY3JlYXRpb24sIGFuZCBpbmZyYXN0cnVjdHVyZSB1c2FnZS4gVW5kZXJzdGFuZGluZyBob3cgZW52aXJvbm1lbnRhbCBmYWN0b3JzIHN1Y2ggYXMgdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24gYWZmZWN0IGN5Y2xpbmcgYmVoYXZpb3IgY2FuIGhlbHAgcG9saWN5bWFrZXJzIGltcHJvdmUgc2FmZXR5LCBhbGxvY2F0ZSByZXNvdXJjZXMsIGFuZCBlbmNvdXJhZ2Ugc3VzdGFpbmFibGUgdHJhbnNwb3J0YXRpb24uDQoNCkluIHRoaXMgc3R1ZHksIHdlIGFuYWx5emUgZGFpbHkgY3ljbGlzdCBjb3VudHMgY29sbGVjdGVkIGJ5IHRoZSBUcmFmZmljIEluZm9ybWF0aW9uIE1hbmFnZW1lbnQgU3lzdGVtIChUSU1TKSBhY3Jvc3MgZm91ciBtYWpvciBFYXN0IFJpdmVyIGJyaWRnZXPigJR0aGUgQnJvb2tseW4sIE1hbmhhdHRhbiwgV2lsbGlhbXNidXJnLCBhbmQgUXVlZW5zYm9ybyBCcmlkZ2VzLiBFYWNoIG9ic2VydmF0aW9uIHJlcHJlc2VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBjeWNsaXN0cyByZWNvcmRlZCB3aXRoaW4gYSAyNC1ob3VyIHBlcmlvZCwgYWxvbmcgd2l0aCBkYWlseSB3ZWF0aGVyIGNvbmRpdGlvbnMgaW5jbHVkaW5nIGhpZ2ggdGVtcGVyYXR1cmUsIGxvdyB0ZW1wZXJhdHVyZSwgYW5kIHByZWNpcGl0YXRpb24uIFRoZSBkYXRhc2V0IHNwYW5zIG11bHRpcGxlIG1vbnRocyBhbmQgcHJvdmlkZXMgYSBkZXRhaWxlZCB2aWV3IG9mIGRheS10by1kYXkgdmFyaWF0aW9uIGluIGN5Y2xpbmcgYWN0aXZpdHkuDQoNClRoZSBwcmltYXJ5IHJlc2VhcmNoIHF1ZXN0aW9uIGlzOg0KDQpIb3cgZG8gdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24gaW5mbHVlbmNlIHRoZSBudW1iZXIgb2YgY3ljbGlzdHMgY3Jvc3NpbmcgdGhlIE1hbmhhdHRhbiBCcmlkZ2UgZWFjaCBkYXk/DQoNClRvIGFkZHJlc3MgdGhpcyBxdWVzdGlvbiwgd2UgYXBwbHkgYSBQb2lzc29uIHJlZ3Jlc3Npb24gbW9kZWwsIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBtb2RlbGluZyBjb3VudCBkYXRhLiBUaGUgcmVzcG9uc2UgdmFyaWFibGUgaW4gb3VyIGFuYWx5c2lzIGlzIHRoZSBkYWlseSBjeWNsaXN0IGNvdW50IG9uIHRoZSBNYW5oYXR0YW4gQnJpZGdlIChNYW5oYXR0YW5CcmlkZ2UpLCB3aGlsZSB0aGUgZXhwbGFuYXRvcnkgdmFyaWFibGVzIGluY2x1ZGUgZGFpbHkgaGlnaCB0ZW1wZXJhdHVyZSAoSGlnaFRlbXApLCBsb3cgdGVtcGVyYXR1cmUgKExvd1RlbXApLCBhbmQgcHJlY2lwaXRhdGlvbiAoUHJlY2lwaXRhdGlvbikuIEJ5IG1vZGVsaW5nIGJvdGggdGhlIHJhdyBjb3VudHMgYW5kIGFkanVzdGVkIHJhdGVzIG9mIE1hbmhhdHRhbiBCcmlkZ2UgY3Jvc3NpbmdzLCB3ZSBhaW0gdG8gcXVhbnRpZnkgaG93IHdlYXRoZXIgY29uZGl0aW9ucyBpbmZsdWVuY2UgZGFpbHkgYmljeWNsZSB0cmFmZmljIG9uIHRoaXMga2V5IE5ldyBZb3JrIENpdHkgcm91dGUuDQoNCiMgMiBEZXNjcmlwdGlvbiBvZiBEYXRhc2V0DQoNClRoZSBkYXRhc2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgVHJhZmZpYyBJbmZvcm1hdGlvbiBNYW5hZ2VtZW50IFN5c3RlbSAoVElNUyksIHdoaWNoIGNvbGxlY3RzIGF1dG9tYXRlZCBiaWN5Y2xlIGNvdW50cyBhY3Jvc3MgTmV3IFlvcmsgQ2l0eeKAmXMgRWFzdCBSaXZlciBicmlkZ2VzLiBUaGUgZGF0YSBhcmUgc3VtbWFyaXplZCBvbiBhIGRhaWx5IGJhc2lzLCB3aGVyZSBlYWNoIG9ic2VydmF0aW9uIHJlcHJlc2VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBjeWNsaXN0cyBjcm9zc2luZyB0aGUgYnJpZGdlcyBpbiBhIDI0LWhvdXIgcGVyaW9kLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgd2VhdGhlciBjb25kaXRpb25zIGZvciB0aGF0IGRheS4gVGhlc2UgZGF0YSBwcm92aWRlIGEgc25hcHNob3Qgb2YgaG93IGN5Y2xpbmcgYWN0aXZpdHkgZmx1Y3R1YXRlcyB3aXRoIGVudmlyb25tZW50YWwgZmFjdG9ycyBzdWNoIGFzIHRlbXBlcmF0dXJlIGFuZCByYWluZmFsbC4NCg0KVGhlcmUgYXJlIDUgZXhwbG9yYXRvcnkgdmFyaWFibGVzIGluIHRoZSBkYXRhIHNldDoNCg0KKiBEYXRlIChjYXRlZ29yaWNhbCkgLSBkYXRlIG9mIHRoZSBiaWtlIGNvdW50LiBUaGlzIGlzIG91ciBvYnNlcnZhdGlvbiBJRA0KKiBMb3dUZW1wIChudW1lcmljYWwpIC0gbG93ZXN0IHRlbXBlcmF0dXJlDQoqIFByZWNpcGl0YXRpb24gKG51bWVyaWNhbCkgLSBhbW91bnQgb2YgcHJlY2lwaXRhdGlvbg0KKiBIaWdoVGVtcCAobnVtZXJpY2FsKSAtIGhpZ2hlc3QgdGVtcGVyYXR1cmUgDQoqIFRvdGFsIChudW1lcmljYWwpIC0gdG90YWwgbnVtYmVyIG9mIGN5Y2xpc3RzIHBlciAyNCBob3VycyBvbiB0aGUgQnJvb2tseW4gQnJpZGdlLCBNYW5oYXR0YW4gQnJpZGdlLCBXaWxsaWFtc2J1cmcgQnJpZGdlLCBhbmQgUXVlZW5zYm9ybyBCcmlkZ2UNCk91ciByZXNwb25zZSB2YXJpYWJsZSBpczoNCg0KKiBNYW5oYXR0YW5CcmlkZ2UgKG51bWVyaWNhbCkgLSB0b3RhbCBudW1iZXIgb2YgY3ljbGlzdHMgcGVyIDI0IGhvdXJzIGNyb3NzaW5nIHRoZSBNYW5oYXR0YW4gQnJpZGdlDQoNCioqQXNzdW1wdGlvbnMgYW5kIENvbmRpdGlvbnMgZm9yIFBvaXNzb24gUmVncmVzc2lvbjoqKg0KDQpDb3VudCByZXNwb25zZSB2YXJpYWJsZTogVGhlIGRlcGVuZGVudCB2YXJpYWJsZSBtdXN0IHJlcHJlc2VudCBjb3VudHMgKG5vbi1uZWdhdGl2ZSBpbnRlZ2VycyksIHN1Y2ggYXMgdGhlIG51bWJlciBvZiBjeWNsaXN0cyBjcm9zc2luZyBhIGJyaWRnZSBwZXIgZGF5Lg0KDQpJbmRlcGVuZGVuY2Ugb2Ygb2JzZXJ2YXRpb25zOiBFYWNoIG9ic2VydmF0aW9uIChkYWlseSBjb3VudCkgaXMgYXNzdW1lZCB0byBiZSBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXJzLg0KDQpFcXVpZGlzcGVyc2lvbjogVGhlIG1lYW4gYW5kIHZhcmlhbmNlIG9mIHRoZSByZXNwb25zZSB2YXJpYWJsZSBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4gT3ZlcmRpc3BlcnNpb24gKHZhcmlhbmNlIGdyZWF0ZXIgdGhhbiBtZWFuKSBjYW4gaW5kaWNhdGUgbW9kZWwgbWlzZml0IGFuZCBtYXkgcmVxdWlyZSBhIHF1YXNpLVBvaXNzb24gb3IgbmVnYXRpdmUgYmlub21pYWwgYWRqdXN0bWVudC4NCg0KTG9nLWxpbmVhcml0eTogVGhlIGxvZ2FyaXRobSBvZiB0aGUgZXhwZWN0ZWQgY291bnQgaXMgYSBsaW5lYXIgZnVuY3Rpb24gb2YgdGhlIHByZWRpY3RvciB2YXJpYWJsZXMuDQoNCk5vIGV4Y2Vzc2l2ZSB6ZXJvczogUG9pc3NvbiByZWdyZXNzaW9uIGFzc3VtZXMgdGhlIGNvdW50IGRhdGEgYXJlIG5vdCBkb21pbmF0ZWQgYnkgemVyb3MgKHplcm8taW5mbGF0ZWQgbW9kZWxzIHdvdWxkIGJlIHVzZWQgb3RoZXJ3aXNlKS4NCg0KRXhwbGFuYXRvcnkgdmFyaWFibGVzIG1lYXN1cmVkIHdpdGhvdXQgZXJyb3I6IFByZWRpY3RvciB2YXJpYWJsZXMgKGUuZy4sIHRlbXBlcmF0dXJlLCBwcmVjaXBpdGF0aW9uKSBhcmUgYXNzdW1lZCB0byBiZSBvYnNlcnZlZCBhY2N1cmF0ZWx5Lg0KDQojIDMgUG9pc3NvbiBSZWdyZXNzaW9uIG9uIE5ldyBZb3JrIEJpa2UgQ3Jvc3NpbmcgQ291bnRzDQoNCldlIGZpcnN0IGJ1aWxkIGEgUG9pc3NvbiBmcmVxdWVuY3kgcmVncmVzc2lvbiBtb2RlbCB0byBldmFsdWF0ZSBob3cgZGFpbHkgd2VhdGhlciBjb25kaXRpb25z4oCUc3BlY2lmaWNhbGx5IHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9u4oCUYWZmZWN0IHRoZSBudW1iZXIgb2YgY3ljbGlzdHMgY3Jvc3NpbmcgdGhlIE1hbmhhdHRhbiBCcmlkZ2UuIFRoZSBtb2RlbCB0cmVhdHMgdGhlIE1hbmhhdHRhbiBCcmlkZ2UgY3ljbGlzdCBjb3VudCBhcyB0aGUgcmFuZG9tIHJlc3BvbnNlIHZhcmlhYmxlIGFuZCB1c2VzIGxvdyB0ZW1wZXJhdHVyZSwgaGlnaCB0ZW1wZXJhdHVyZSwgYW5kIHByZWNpcGl0YXRpb24gYXMgZXhwbGFuYXRvcnkgdmFyaWFibGVzLg0KDQojIyAzLjEgDQoNClRoZSBmaXR0ZWQgbW9kZWwgaXMgZ2l2ZW4gYnk6DQoNCmxvZyhFW01hbmhhdHRhbkJyaWRnZV0pPc6yMOKAiyvOsjHigIsoTG93VGVtcCkrzrIy4oCLKFByZWNpcGl0YXRpb24pK86yM+KAiyhIaWdoVGVtcCkNCg0KYGBge3J9DQoNCm1vZGVsLmZyZXEgPC0gZ2xtKE1hbmhhdHRhbkJyaWRnZSB+IExvd1RlbXAgKyBQcmVjaXBpdGF0aW9uICsgSGlnaFRlbXAsIGZhbWlseSA9IHBvaXNzb24obGluayA9ICJsb2ciKSwgZGF0YSA9IGRhdGEpDQojIw0KcG9pcy5jb3VudC5jb2VmID0gc3VtbWFyeShtb2RlbC5mcmVxKSRjb2VmDQprYWJsZShwb2lzLmNvdW50LmNvZWYsIGNhcHRpb24gPSAiUG9pc3NvbiByZWdyZXNzaW9uIG9mIGRhaWx5IHRvdGFsIGN5Y2xpc3RzIG9uIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uIikNCmBgYA0KDQpUaGUgUG9pc3NvbiByZWdyZXNzaW9uIHJlc3VsdHMgc2hvdyBob3cgd2VhdGhlciBjb25kaXRpb25zIHNoYXBlIGRhaWx5IGN5Y2xpbmcgYWN0aXZpdHkgYWNyb3NzIHRoZSBNYW5oYXR0YW4gQnJpZGdlLiBCb3RoIHRlbXBlcmF0dXJlIHZhcmlhYmxlcyBoYXZlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcHMgd2l0aCBjeWNsaXN0IGNvdW50cywgbWVhbmluZyB3YXJtZXIgZGF5c+KAlGJvdGggaW4gdGhlIG1vcm5pbmcgYW5kIGFmdGVybm9vbuKAlGVuY291cmFnZSBtb3JlIHBlb3BsZSB0byBiaWtlIGFjcm9zcyB0aGUgYnJpZGdlLiBGb3IgZXZlcnkgb25lLWRlZ3JlZSBpbmNyZWFzZSBpbiBkYWlseSBoaWdoIHRlbXBlcmF0dXJlLCB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGN5Y2xpc3RzIHJpc2VzIGJ5IGFib3V0IDEuNCBwZXJjZW50LCB3aGlsZSBhIG9uZS1kZWdyZWUgaW5jcmVhc2UgaW4gdGhlIGxvdyB0ZW1wZXJhdHVyZSBhZGRzIHJvdWdobHkgMC43IHBlcmNlbnQuIFRoZXNlIGVmZmVjdHMsIHRob3VnaCBzbWFsbCBpbmRpdmlkdWFsbHksIGFjY3VtdWxhdGUgdG8gYSBzdWJzdGFudGlhbCBpbmNyZWFzZSBpbiBjeWNsaW5nIHZvbHVtZSBkdXJpbmcgd2FybSB3ZWF0aGVyLiBJbiBjb250cmFzdCwgcHJlY2lwaXRhdGlvbiBoYXMgYSBzdHJvbmcgYW5kIGhpZ2hseSBzaWduaWZpY2FudCBuZWdhdGl2ZSBpbXBhY3Qgb24gY3ljbGlzdCBhY3Rpdml0eS4gQSBkYXkgd2l0aCBtZWFzdXJhYmxlIHJhaW5mYWxsIHNlZXMgbmVhcmx5IGEgNjAgcGVyY2VudCBkcm9wIGluIGN5Y2xpc3RzIGNvbXBhcmVkIHRvIGEgZHJ5IGRheSwgaGlnaGxpZ2h0aW5nIGhvdyBzZW5zaXRpdmUgY29tbXV0aW5nIGFuZCByZWNyZWF0aW9uYWwgYmlraW5nIGFyZSB0byBwb29yIHdlYXRoZXIuIE92ZXJhbGwsIHRoZSBtb2RlbCBjYXB0dXJlcyBpbnR1aXRpdmUgYmVoYXZpb3JhbCBwYXR0ZXJuczogcGVvcGxlIGFyZSBtb3JlIGxpa2VseSB0byBjeWNsZSB3aGVuIHRlbXBlcmF0dXJlcyBhcmUgY29tZm9ydGFibGUgYW5kIGZhciBsZXNzIGxpa2VseSB3aGVuIGl0IHJhaW5zLiBUaGVzZSBmaW5kaW5ncyByZWluZm9yY2UgaG93IHdlYXRoZXIgZGlyZWN0bHkgZHJpdmVzIGRhaWx5IGNoYW5nZXMgaW4gY3ljbGluZyB0cmFmZmljIGFjcm9zcyB0aGUgTWFuaGF0dGFuIEJyaWRnZS4NCg0KKipWYXJpYWJsZSBTZWxlY3Rpb246KioNCg0KVG8gc2ltcGxpZnkgdGhlIG1vZGVsLCBJIGV4YW1pbmVkIHRoZSBwLXZhbHVlcyBvZiBlYWNoIHByZWRpY3RvciB0byBkZXRlcm1pbmUgd2hpY2ggdmFyaWFibGVzIGhhZCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdHMgb24gTWFuaGF0dGFuIEJyaWRnZSBjeWNsaXN0IGNvdW50cy4gQm90aCB0ZW1wZXJhdHVyZSB2YXJpYWJsZXMgYW5kIHByZWNpcGl0YXRpb24gd2VyZSBoaWdobHkgc2lnbmlmaWNhbnQgKHAgPCAwLjA1KSwgc28gYWxsIHRocmVlIHByZWRpY3RvcnMgd2VyZSByZXRhaW5lZCBpbiB0aGUgZmluYWwgUG9pc3NvbiBjb3VudCBtb2RlbC4gQmVjYXVzZSBldmVyeSB2YXJpYWJsZSBjb250cmlidXRlZCBtZWFuaW5nZnVsbHksIG5vIGZ1cnRoZXIgbW9kZWwgcmVkdWN0aW9uIHdhcyBuZWNlc3NhcnkuDQoNCiMjIDMuMiBQb2lzc29uIFJlZ3Jlc3Npb24gb24gTWFuaGF0dGFuIEJyaWRnZSBDeWNsaW5nIFJhdGVzDQoNCk5leHQsIHdlIGJ1aWxkIGEgUG9pc3NvbiByYXRlIG1vZGVsIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY3ljbGluZyByYXRlcyBvbiB0aGUgTWFuaGF0dGFuIEJyaWRnZSBhbmQgd2VhdGhlciBjb25kaXRpb25zIHdoaWxlIGFkanVzdGluZyBmb3IgdGhlIG92ZXJhbGwgZGFpbHkgY3ljbGluZyB2b2x1bWUgYWNyb3NzIGFsbCBmb3VyIGJyaWRnZXMuIFRoaXMgYWRqdXN0bWVudCBhY2NvdW50cyBmb3IgdGhlIGZhY3QgdGhhdCBkYWlseSBjeWNsaW5nIHRvdGFscyBjaXR5d2lkZSBtYXkgdmFyeSBkdWUgdG8gdW5vYnNlcnZlZCBmYWN0b3JzIHN1Y2ggYXMgaG9saWRheXMsIGV2ZW50cywgb3Igb3RoZXIgY29uZGl0aW9ucyBhZmZlY3RpbmcgYWxsIGJyaWRnZXMuDQoNClRoZSBmaXR0ZWQgbW9kZWwgaXM6DQoNCmxvZyhFW01hbmhhdHRhbkJyaWRnZV0pPc6yMOKAiyvOsjHigIsoTG93VGVtcCkrzrIy4oCLKFByZWNpcGl0YXRpb24pK86yM+KAiyhIaWdoVGVtcCkrbG9nKFRvdGFsKQ0KDQp3aGVyZSBsb2coVG90YWwpIGlzIGluY2x1ZGVkIGFzIGFuIG9mZnNldCwgYWxsb3dpbmcgdXMgdG8gbW9kZWwgdGhlIHJhdGUgb2YgY3ljbGlzdHMgb24gdGhlIE1hbmhhdHRhbiBCcmlkZ2UgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBjeWNsaXN0cyBhY3Jvc3MgYWxsIGJyaWRnZXMuDQoNCmBgYHtyfQ0KDQptb2RlbC5yYXRlcyA8LSBnbG0oTWFuaGF0dGFuQnJpZGdlIH4gTG93VGVtcCArIFByZWNpcGl0YXRpb24gKyBIaWdoVGVtcCwgb2Zmc2V0ID0gbG9nKFRvdGFsKSwgDQogICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gcG9pc3NvbihsaW5rID0gImxvZyIpLCBkYXRhID0gZGF0YSkNCmthYmxlKHN1bW1hcnkobW9kZWwucmF0ZXMpJGNvZWYsIGNhcHRpb24gPSAiUG9pc3NvbiByZWdyZXNzaW9uIG9mIGRhaWx5IGN5Y2xpc3QgcmF0ZXMgYnkgdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24iKQ0KYGBgDQoNClRoZSBQb2lzc29uIHJhdGUgbW9kZWwgZXZhbHVhdGVzIGhvdyB0ZW1wZXJhdHVyZSBhbmQgcHJlY2lwaXRhdGlvbiBhZmZlY3QgdGhlIHJhdGUgb2YgY3ljbGlzdHMgY3Jvc3NpbmcgdGhlIE1hbmhhdHRhbiBCcmlkZ2UsIGFmdGVyIGFjY291bnRpbmcgZm9yIG92ZXJhbGwgY2l0eXdpZGUgY3ljbGluZyBhY3Rpdml0eS4gQW1vbmcgdGhlIHByZWRpY3RvcnMsIHByZWNpcGl0YXRpb24gaGFzIGEgc2lnbmlmaWNhbnQgbmVnYXRpdmUgaW1wYWN0IChwID0gMC4wMDkpLiBJdHMgY29lZmZpY2llbnQgKOKIkjAuMDQzKSBpbXBsaWVzIHRoYXQgZm9yIGVhY2ggYWRkaXRpb25hbCBpbmNoIG9mIHJhaW5mYWxsLCB0aGUgZXhwZWN0ZWQgcmF0ZSBvZiBNYW5oYXR0YW4gQnJpZGdlIGNyb3NzaW5ncyBkZWNyZWFzZXMgYnkgYWJvdXQgNCUsIHNpbmNlIGV4cCjiiJIwLjA0Mykg4omIIDAuOTYuIEluIG90aGVyIHdvcmRzLCByYWluZmFsbCBzdWJzdGFudGlhbGx5IGxvd2VycyB0aGUgc2hhcmUgb2YgY3ljbGlzdHMgdXNpbmcgdGhlIE1hbmhhdHRhbiBCcmlkZ2UgcmVsYXRpdmUgdG8gdG90YWwgY3ljbGlzdHMgYWNyb3NzIGFsbCBicmlkZ2VzLg0KDQpIaWdoIHRlbXBlcmF0dXJlIGhhcyBhIHNtYWxsIGJ1dCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHBvc2l0aXZlIHJlbGF0aW9uc2hpcCAocCA9IDAuMDExKS4gRWFjaCBvbmUtZGVncmVlIGluY3JlYXNlIGluIGRhaWx5IGhpZ2ggdGVtcGVyYXR1cmUgY29ycmVzcG9uZHMgdG8gcm91Z2hseSBhIDAuMTQlIGluY3JlYXNlIGluIHRoZSBleHBlY3RlZCBjeWNsaW5nIHJhdGUgb24gdGhlIE1hbmhhdHRhbiBCcmlkZ2UgKGV4cCgwLjAwMTQpIOKJiCAxLjAwMTQpLiBUaGlzIGluZGljYXRlcyB0aGF0IHdhcm1lciBkYXl0aW1lIGNvbmRpdGlvbnMgc2xpZ2h0bHkgcmFpc2UgdGhlIGJyaWRnZeKAmXMgY3ljbGluZyByYXRlLCBldmVuIHdoZW4gY29udHJvbGxpbmcgZm9yIHRvdGFsIGFjdGl2aXR5IGNpdHl3aWRlLg0KDQpMb3cgdGVtcGVyYXR1cmUsIGhvd2V2ZXIsIHNob3dzIG5vIHNpZ25pZmljYW50IGVmZmVjdCAocCA9IDAuMjEpLCBzdWdnZXN0aW5nIHRoYXQgb3Zlcm5pZ2h0IG9yIGVhcmx5LW1vcm5pbmcgbG93cyBoYXZlIG1pbmltYWwgaW5mbHVlbmNlIG9uY2Ugb3RoZXIgZmFjdG9ycyBhcmUgY29uc2lkZXJlZC4NCg0KT3ZlcmFsbCwgdGhlIHJlc3VsdHMgZGVtb25zdHJhdGUgdGhhdCBwcmVjaXBpdGF0aW9uIHNoYXJwbHkgcmVkdWNlcyBNYW5oYXR0YW4gQnJpZGdlIGN5Y2xpbmcgcmF0ZXMsIHdoaWxlIHdhcm1lciBkYWlseSBoaWdocyBtb2Rlc3RseSBpbmNyZWFzZSB0aGVtLiBUaGlzIHBhdHRlcm4gcmVpbmZvcmNlcyB0aGF0IGFkdmVyc2Ugd2VhdGhlciBjb25kaXRpb25zLCBwYXJ0aWN1bGFybHkgcmFpbiwgZGlzY291cmFnZSBicmlkZ2UgY3ljbGluZyBldmVuIGFmdGVyIGFjY291bnRpbmcgZm9yIGJyb2FkZXIgY2l0eXdpZGUgdHJlbmRzLg0KDQoqKlZhcmlhYmxlIFNlbGVjdGlvbjoqKg0KDQpGb3IgdGhlIHJhdGUgbW9kZWwsIEkgdXNlZCBwLXZhbHVl4oCTYmFzZWQgc2VsZWN0aW9uIHRvIGlkZW50aWZ5IHRoZSBtb3N0IGltcG9ydGFudCB3ZWF0aGVyIHByZWRpY3RvcnMgYWZ0ZXIgYWRqdXN0aW5nIGZvciB0b3RhbCBjeWNsaW5nIHZvbHVtZS4gSGlnaCB0ZW1wZXJhdHVyZSAocCA9IDAuMDExKSBhbmQgcHJlY2lwaXRhdGlvbiAocCA9IDAuMDA5KSB3ZXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIHdoaWxlIGxvdyB0ZW1wZXJhdHVyZSAocCA9IDAuMjEpIHdhcyBub3QuIFRoZXJlZm9yZSwgdGhlIGZpbmFsIFBvaXNzb24gcmF0ZSBtb2RlbCByZXRhaW5zIG9ubHkgSGlnaFRlbXAgYW5kIFByZWNpcGl0YXRpb24gYXMgcHJlZGljdG9ycyBvZiBNYW5oYXR0YW4gQnJpZGdlIGN5Y2xpbmcgcmF0ZXMuDQoNCiMgNCBDb25jbHVzaW9uDQoNClRoaXMgc3R1ZHkgZXhhbWluZWQgaG93IHdlYXRoZXIgY29uZGl0aW9ucyBpbmZsdWVuY2UgZGFpbHkgY3ljbGluZyBhY3Rpdml0eSBhY3Jvc3MgdGhlIE1hbmhhdHRhbiBCcmlkZ2UgaW4gTmV3IFlvcmsgQ2l0eSB1c2luZyBQb2lzc29uIHJlZ3Jlc3Npb24gbW9kZWxzLiBUaGUgYW5hbHlzaXMgcmV2ZWFsZWQgY29uc2lzdGVudCBhbmQgaW50dWl0aXZlIHBhdHRlcm5zOiB3YXJtZXIgdGVtcGVyYXR1cmVzIGVuY291cmFnZSBoaWdoZXIgY3ljbGlzdCB2b2x1bWVzLCB3aGlsZSBwcmVjaXBpdGF0aW9uIHNoYXJwbHkgcmVkdWNlcyB0aGVtLg0KDQpJbiB0aGUgUG9pc3NvbiBjb3VudCBtb2RlbCwgYm90aCBoaWdoIGFuZCBsb3cgdGVtcGVyYXR1cmVzIGhhZCBzaWduaWZpY2FudCBwb3NpdGl2ZSBlZmZlY3RzLCBpbmRpY2F0aW5nIHRoYXQgd2FybSBkYXlz4oCUbW9ybmluZyBhbmQgYWZ0ZXJub29uIGFsaWtl4oCUbGVhZCB0byBncmVhdGVyIG51bWJlcnMgb2YgY3ljbGlzdHMuIFByZWNpcGl0YXRpb24gc2hvd2VkIGEgbGFyZ2UgYW5kIGhpZ2hseSBzaWduaWZpY2FudCBuZWdhdGl2ZSBpbXBhY3QsIGNvbmZpcm1pbmcgdGhhdCByYWluIHN0cm9uZ2x5IGRldGVycyBjeWNsaW5nIGFjcm9zcyB0aGUgYnJpZGdlLg0KDQpJbiB0aGUgUG9pc3NvbiByYXRlIG1vZGVsLCB3aGljaCBhZGp1c3RlZCBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBjeWNsaXN0cyBhY3Jvc3MgYWxsIEVhc3QgUml2ZXIgYnJpZGdlcywgaGlnaCB0ZW1wZXJhdHVyZSByZW1haW5lZCBhIHNtYWxsIGJ1dCBzaWduaWZpY2FudCBwb3NpdGl2ZSBwcmVkaWN0b3IsIHdoaWxlIHByZWNpcGl0YXRpb24gY29udGludWVkIHRvIGhhdmUgYSBzdHJvbmcgbmVnYXRpdmUgZWZmZWN0LiBMb3cgdGVtcGVyYXR1cmUgd2FzIG5vIGxvbmdlciBzaWduaWZpY2FudCBvbmNlIG92ZXJhbGwgY3ljbGluZyB0cmVuZHMgd2VyZSBhY2NvdW50ZWQgZm9yLg0KDQpUb2dldGhlciwgdGhlc2UgcmVzdWx0cyBkZW1vbnN0cmF0ZSB0aGF0IGRhaWx5IHZhcmlhdGlvbnMgaW4gd2VhdGhlciwgcGFydGljdWxhcmx5IHByZWNpcGl0YXRpb24gYW5kIHRlbXBlcmF0dXJlLCBwbGF5IGEga2V5IHJvbGUgaW4gc2hhcGluZyBjeWNsaW5nIGJlaGF2aW9yLiBUaGUgZmluZGluZ3MgaGlnaGxpZ2h0IHRoZSBpbXBvcnRhbmNlIG9mIGZhdm9yYWJsZSB3ZWF0aGVyIGNvbmRpdGlvbnMgZm9yIHByb21vdGluZyB1cmJhbiBjeWNsaW5nIGFuZCBwcm92aWRlIHVzZWZ1bCBpbnNpZ2h0cyBmb3IgY2l0eSBwbGFubmVycyBhbmQgdHJhbnNwb3J0YXRpb24gb2ZmaWNpYWxzIHNlZWtpbmcgdG8gZGVzaWduIHBvbGljaWVzIGFuZCBpbmZyYXN0cnVjdHVyZSB0aGF0IHN1cHBvcnQgeWVhci1yb3VuZCBiaWN5Y2xlIGNvbW11dGluZyBpbiBOZXcgWW9yayBDaXR5Lg==