1 Tables

1.1 Introduction

This analysis uses the 2025 WNBA box score dataset, where each observation represents one team’s performance in a single game. After removing All-Star game entries, the dataset contains regular-season and playoff records across all 12 franchises. The Connecticut Sun is the focal team for this analysis. The objective is to build and evaluate a multiple linear regression model that identifies which game-level statistics, field goal percentage, total rebounds, three-point percentage, and steals, are significant predictors of points scored.

#This table shows the average and standard deviation of each stat for all 12 WNBA Teams
summary_score %>%
  kbl(caption = "Table 1. Per-Game Averages and Standard Deviations by Team", digits = 2, 
      align = "c",
      col.names = c("Team", 
                    "Mean Score", "SD Score",
                    "Mean Rebounds", "SD Rebounds",
                    "Mean FG%", "SD FG%",
                    "Mean Reb", "SD Reb",
                    "Mean 3P%", "SD 3P%",
                    "Mean Steals", "SD Steals")) %>%
#Style the table1
  kable_styling(full_width = FALSE,
                html_font = "Times New Roman",
                bootstrap_options = c("striped", "hover", "condensed", "bordered"),
                position = "center",
                font_size = 13) %>%
  row_spec(0, bold = TRUE, 
               color = "white", 
               background = "#4D4D4D") %>%
  column_spec(1, bold = TRUE, color = "#4D4D4D")
Table 1. Per-Game Averages and Standard Deviations by Team
Team Mean Score SD Score Mean Rebounds SD Rebounds Mean FG% SD FG% Mean Reb SD Reb Mean 3P% SD 3P% Mean Steals SD Steals
Aces 85.52 9.56 33.78 5.88 45.27 5.82 33.78 5.88 35.27 7.08 6.80 2.67
Dream 76.93 10.59 35.95 4.41 41.28 6.78 35.95 4.41 30.83 9.32 7.14 2.82
Fever 84.50 10.17 35.10 5.49 45.56 5.38 35.10 5.49 35.00 8.99 5.88 2.29
Liberty 84.98 9.92 36.90 5.77 44.53 5.61 36.90 5.77 35.38 10.06 7.75 2.19
Lynx 82.36 11.39 33.15 5.06 45.21 6.34 33.15 5.06 37.80 9.43 8.36 3.17
Mercury 81.93 12.60 32.26 5.39 44.28 7.34 32.26 5.39 32.97 10.34 6.55 2.12
Mystics 79.30 8.69 31.85 4.66 43.36 4.82 31.85 4.66 36.64 8.69 7.28 2.24
Sky 77.40 9.62 36.60 5.57 42.44 5.22 36.60 5.57 31.74 11.62 7.00 3.30
Sparks 78.40 10.57 32.67 5.52 42.63 6.15 32.67 5.52 32.09 11.00 7.30 2.78
Storm 82.67 9.65 34.67 6.02 43.43 5.39 34.67 6.02 28.35 9.03 9.24 3.27
Sun 80.36 9.89 33.43 4.62 44.30 5.28 33.43 4.62 32.84 11.67 7.89 3.29
Wings 84.20 11.47 34.75 4.65 44.47 5.24 34.75 4.65 32.06 11.75 7.12 2.95
#This table shows whether the Sun scored more on average in wins compared to losses
my_team_by_result %>%
   kbl(caption = "Table 2. Connecticut Sun Mean Points Scored by Game Result", digits = 2, 
      align = "c",
      col.names = c("Team", 
                    "Mean Score", "SD Score")) %>%
#Style the table2
  kable_styling(full_width = FALSE,
                html_font = "Times New Roman",
                bootstrap_options = c("striped", "hover", "condensed", "bordered"),
                position = "center",
                font_size = 13) %>%
  row_spec(0, bold = TRUE, 
               color = "white", 
               background = "#4D4D4D") %>%
  column_spec(1, bold = TRUE, color = "#4D4D4D")
Table 2. Connecticut Sun Mean Points Scored by Game Result
Team Mean Score SD Score
loss 72.13 5.62
win 84.22 9.10

2 Graphs

2.1 Box Plot

Based on the boxplot, the mean points scored in wins is higher than in losses, suggesting that the Sun tend to score more in games they win. There is also one visible outlier in the win group, indicating an unusually high scoring game.

# Boxplot of points scored by game result
boxplot(team_score ~ result, data = df_hist,
        col = c("lightblue", "lightgreen"),
        main = "Points Scored by Game Result — Connecticut Sun (2025)",
        xlab = "Result",
        ylab = "Points Scored")

3 First Order Model

3.1 Model1

F(4,42)= 11.06 with p-value= 3.225e-06, which is less than 0.15, therefore we reject the null hypothesis. The model as a whole is statistically significant. The Adjusted R-squared is 0.4666 meaning 46.66% of the variation in points scored is explained by the four predictors together.

3.2 Coefficient Interpretation

As the field goal percentage goes up by 1, the Sun increases by 1.11 points. The p-value is 6.82e-05, significant. \(~\) As the total rebounds goes up by 1, the Sun increases by 0.04 points. The p-value is 0.888, not significant \(~\) As the three point field goal percentage goes up by 1, the Sun increases by 0.16 points. The p-value is 0.167, not significant \(~\) As the steals goes up by 1, the Sun increases by 0.25 points,. The p-value is 0.486, not significant

3.3 Model2

In Model 1, all four predictors field goal percentage, total rebounds, three-point field goal percentage, and steals were statistically significant at the 15% significance level, as all p-values were below α = 0.15. Since no terms needed to be removed, Model 2 retains the same predictors as Model 1 and serves as the foundation for building the full interaction model in Model 3.

3.4 Multicollinearity

All VIF values are below 5, indicating no multicollinearity problem among the predictors. Field_goal_pct=1.56 \(~\) Total_rebounds=1.33 \(~\) Three_point_field_goal_pct=1.47 \(~\) Steals=1.25

\(~\)

4 Interaction Model

4.1 Model3

Adding interactions did improve the Adjusted R-squared. \(~\) Model 2 had an Adjusted-squared of 0.4666, meaning 46.66% of the variation in points scored is explained by the four predictors alone. Model 3 increased that to 0.5652, meaning 56.52% of the variation is now explained once interactions are included. The following interaction terms have a p-value less than 0.15: \(~\) - The interaction between field_goal_pct and three_point_field_goal_pct is significant because the p-value is 0.000904, which is less than α= 0.15, therefore we reject the null hypothesis. \(~\) - The interaction between total_rebounds and three_point_field_goal_pct is significant because the p-value is 0.059952, which is less than α= 0.15, therefore we reject the null hypothesis. \(~\) - The interaction between three_point_field_goal_pct and steals is significant because the p-value is 0.113752, which is less than 0.15, therefore we reject the null hypothesis.

4.2 Model4

In Model 3,I kept the interactions between field_goal_pct and three_point_field_goal_pct,total_rebounds and three_point_field_goal_pct, three_point_field_goal_pct and steals, since all had p-values below α= 0.15. \(~\) I dropped all others interactions because their p-values exceeded α = 0.15,and were therefore not significant. Model 4 is my final choice because it retains only the significant interaction terms, the Adjusted-squared remained nearly unchanged going from 0.5652 in Model 3 to 0.5645 in Model 4, and the model is simpler, easier to interpret, and provides a better overall fit.

4.3 Model Summary -In line code

My final model is team_score= 253.8462714 + -1.4997568 * field_goal_pct + -2.9637352 * total_rebounds + -6.4401192 * three_point_field_goal_pct + -1.9465849* steals + 0.0723389 * field_goal_pct * three_point_field_goal_pct + 0.0866758* total_rebounds * three_point_field_goal_pct + 0.0635665 * three_point_field_goal_pct * steals

This model significantly predicts team score, f(7, 7) = 9.5178594, p<.0001, adjusted R^2= 0.5644971

5 Residual Analysis

5.1 Normality

The residual histogram looks like a bell curve and is centered close to zero. There is a small tail on the right side, but it is not a big concern. Based on this, the normality assumption is satisfied.

5.2 Constant Variance

The residuals vs. fitted values plot shows no clear pattern or funnel shape. The points are scattered randomly around zero across all fitted values.Based on this, the equal variance assumption is not satisfied.

5.3 Outliers

All observations fall within the threshold between -3 and 3, meaning there are no outliers. The model fits the data well across all games.

5.4 Influential Observations

The Cook’s Distance chart identifies 4 games that have a disproportionate effect on the model’s coefficients. These correspond to games played on August 16th, 2024 against Wing, July 07th, 2024 against Mercury, June 23th, 2024 against Storm and May 05th, 2024 against Mystics. The leverage plot further confirms 4 influential points on the right side and 1 outlier on the left side, corresponding to the game on June 27, 2024 against Mystics Despite these influential observations, the model remains reliable as the residual assumptions are largely satisfied.

#Residual checks for Model4

#(1)Residual Histogram 
ols_plot_resid_hist(model4)

main="Residual Histogram"
xlab="Residuals"
ylab="Frequency"

#(2)Residuals vs. Fitted Plot 
ols_plot_resid_fit(model4)

main="Residuals vs. Fitted"
xlab="Fitted Values"
ylab="Residuals"

#(3)Studentized Residuals
ols_plot_resid_stud(model4)

main="Studentized Residuals vs Fitted"
xlab="Observation"
ylab="Studentized Residuals"

#(4)Cook's Distance
ols_plot_cooksd_chart(model4)

main="Cook's Distance"
xlab="Observation"
ylab="Cook's Distance"

#(5)laverage
ols_plot_resid_lev(model4)

main="Leverage"
xlab="Leverage"
ylab="Studentized Residuals"

graphics.off()
Dependent variable:
team_score
field_goal_pct -1.500*
(0.823)
total_rebounds -2.964***
(1.057)
three_point_field_goal_pct -6.440***
(1.895)
steals -1.947*
(1.125)
field_goal_pct:three_point_field_goal_pct 0.072***
(0.022)
total_rebounds:three_point_field_goal_pct 0.087***
(0.029)
three_point_field_goal_pct:steals 0.064*
(0.037)
Constant 253.846***
(68.088)
Observations 47
R2 0.631
Adjusted R2 0.564
Residual Std. Error 6.529 (df = 39)
F Statistic 9.518*** (df = 7; 39)
Note: p<0.1; p<0.05; p<0.01

6 Prediction

6.1 Predicted Score

Using the median values for all predictors: field goal percentage of 43.90, total rebounds of 34, three-point field goal percentage of 33.30, and steals of 7.39. Model 4 predicts the Sun would score 79.86 points. The 95% confidence interval ranges from 77.41 to 82.32 points. We are 95% confident that the Sun would score between 77.41 and 82.32 points. \(~\) I built the model to predict my team’s point for a game in which they achieve the median value for each variable. The predicted score is 79.8604643, with 95% confidence interval [77.4058683, 82.3150604]

6.2 Experimental Region

The valid ranges are: field goal percentage (35.10 to 57.60), total rebounds (26 to 45), three-point field goal percentage (10.00 to 60.90), and steals (1 to 14). Since all median values fall within these ranges, the prediction is trustworthy.

LS0tCnRpdGxlOiAiU3RhdCAzMTktIEFzc2lnbm1lbnQgIzYiCmF1dGhvcjogIkZyYW5jaW5lIExvaG9zZSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHllcwogICAgdGhlbWU6IGx1bWVuCiAgcGRmX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfd2lkdGg6IDMKICAgIGZpZ19oZWlnaHQ6IDMKICB3b3JkX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KI1RPQzo6YmVmb3JlIHsKICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IG5hdnk7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKCi8qIENlbnRlciBhbGwgcGxvdHMgYW5kIGltYWdlcyAqLwppbWcgewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmZpZ3VyZSB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgovKiBDbGVhbiB1cCBib2R5IHNwYWNpbmcgKi8KYm9keSB7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgZm9udC1zaXplOiAxNXB4OwogIGxpbmUtaGVpZ2h0OiAxLjg7CiAgY29sb3I6ICMyMjIyMjI7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgbWF4LXdpZHRoOiA5NjBweDsKICBtYXJnaW46IGF1dG87Cn0KCi8qIEFkZCBzcGFjZSBiZXR3ZWVuIHNlY3Rpb25zICovCmgxLCBoMiwgaDMsIGg0IHsKICBtYXJnaW4tdG9wOiAzMHB4OwogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi8qIENsZWFuIHBhcmFncmFwaCBzcGFjaW5nICovCnAgewogIG1hcmdpbi1ib3R0b206IDEycHg7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cn0KCi8qIE1ha2UgdGFibGVzIGNlbnRlcmVkICovCnRhYmxlIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCi8qIEFkZCBhIHN1YnRsZSBsaW5lIHVuZGVyIGgxIGhlYWRlcnMgKi8KaDEgewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOwogIHBhZGRpbmctYm90dG9tOiA2cHg7Cn0KCgpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOwogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsKfQoKaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8KICBmb250LXNpemU6IDIycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKfQoKaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMThweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9CgouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQoKcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCn0KYGBgCgoKYGBgIHtyIHNldHVwLCBpbmNsdWRlPUZ9Cgprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLmFsaWduICA9ICdjZW50ZXInLAogICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoICA9IDYsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gNCwKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgICAgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgICAgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgICAgPSBOQSkKCnNldHdkKCJ+L0RvY3VtZW50cy9XZXN0IENoZXN0ZXIgVW5pdmVyc2l0eS9TcHJpbmcgMjAyNi9TVEFUIDMxOS9Ib21ld29yayIpCgpkYXRhPXJlYWQuY3N2KCJXTkJBXzIwMjVfYm94LXNjb3Jlcy5jc3YiICwgaGVhZGVyPVRSVUUpCgoKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKSAKCiMjVklGIEZ1bmN0aW9uIGluIHRoZSBjYXIgcGFja2FnZQpsaWJyYXJ5KGNhcikKbGlicmFyeShvbHNycikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBUaGVtZSBmb3IgYWxsIGdncGxvdDIgZ3JhcGhzCnRoZW1lX3NldCh0aGVtZV9jbGFzc2ljKCkgKwogIHRoZW1lKHBsb3QudGl0bGUgID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiLCBzaXplID0gMTIpLAogICAgICAgIGF4aXMudGl0bGUgID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMSksCiAgICAgICAgYXhpcy50ZXh0ICAgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikpCgpgYGAKCgoKYGBge3Igd3JhbmdpbmcsIGluY2x1ZGU9Rn0Kc3VtbWFyeShkYXRhKQpsaWJyYXJ5KGRwbHlyKQoKIyNBbGwgV05CQSB0ZWFtcyBpbmNsdWRlZCwgcmVtb3ZlIHNjb3JlIGZyb20gYWxsIHN0YXIgZ2FtZQpkYXRhPWRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSAhPSAiVGVhbSBXTkJBIiAmIHRlYW1fbmFtZSAhPSAiVGVhbSBVU0EiKQoKI0ZvciBlYWNoIHRlYW0sIGNhbGN1bHRhdGUgdGhlIGF2ZXJhZ2UgYW5kIHNkIG9mIHBvaW50X3Njb3JlZCwgcmVib3VuZHMsIGZpZWRfZ29hbCwgdGhyZWVfcG9pbnQgYW5kIHN0ZWFscwogIHN1bW1hcnlfc2NvcmUgPSBkYXRhICU+JQogIGdyb3VwX2J5KHRlYW1fbmFtZSkgJT4lCiAgc3VtbWFyaXplKG1lYW5fc2NvcmU9bWVhbih0ZWFtX3Njb3JlKSxzZF9zY29yZT1zZCh0ZWFtX3Njb3JlKSwKICAgICAgICAgICBtZWFuX3JlYm91bmRzPSBtZWFuKHRvdGFsX3JlYm91bmRzKSwgc2RfcmVib3VuZHM9c2QodG90YWxfcmVib3VuZHMpLAogICAgICAgICAgIG1lYW5fZmllbGQ9bWVhbihmaWVsZF9nb2FsX3BjdCksc2RfZmllbGQ9c2QoZmllbGRfZ29hbF9wY3QpLAogICAgICAgICAgIG1lYW5fdG90YWw9bWVhbih0b3RhbF9yZWJvdW5kcyksc2RfdG90YWw9c2QodG90YWxfcmVib3VuZHMpLAogICAgICAgICAgIG1lYW5fdGhyZWU9bWVhbih0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCksc2RfdGhyZWU9c2QodGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QpLAogICAgICAgICAgIG1lYW5fc3RlYWxzPW1lYW4oc3RlYWxzKSxzZF9zdGVhbHM9c2Qoc3RlYWxzKSkKICAKI0tlZXAgb25seSBTdW4gZ2FtZXMgCm15X3RlYW0gPSBkYXRhICU+JSAKICBzZWxlY3QodGVhbV9zY29yZSwgZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLCAKICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscywgdGVhbV9uYW1lLCB0ZWFtX3dpbm5lciwgb3Bwb25lbnRfdGVhbV9uYW1lLCBnYW1lX2RhdGUpICU+JQogIGZpbHRlciAodGVhbV9uYW1lID09ICJTdW4iKQoKCiNBZGQgYSBXaW4vTG9zcyBsYWJlbCBzbyB3ZSBjYW4gY29sb3IgdGhlIGhpc3QuIGJ5IGdhbWUgcmVzdWx0CiAgbXlfdGVhbV9ieV9yZXN1bHQgPSBteV90ZWFtICU+JQogICAgIG11dGF0ZShyZXN1bHQ9Y2FzZV93aGVuKHRlYW1fd2lubmVyID09IFRSVUUgfiAid2luIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhbV93aW5uZXIgPT0gRkFMU0UgfiAibG9zcyIpKSAlPiUKICBncm91cF9ieShyZXN1bHQpICU+JQogIHN1bW1hcmlzZShtZWFuPW1lYW4odGVhbV9zY29yZSksIHNkPXNkKHRlYW1fc2NvcmUpKQogIAogIGRmX2hpc3QgPSBkYXRhICU+JQogIGZpbHRlcih0ZWFtX25hbWUgPT0gIlN1biIpICU+JQogIG11dGF0ZShyZXN1bHQ9Y2FzZV93aGVuKHRlYW1fd2lubmVyID09IFRSVUUgfiAid2luIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhbV93aW5uZXIgPT0gRkFMU0UgfiAibG9zcyIpKQogIApgYGAKCiMgVGFibGVzCiMjIEludHJvZHVjdGlvbgoKVGhpcyBhbmFseXNpcyB1c2VzIHRoZSAyMDI1IFdOQkEgYm94IHNjb3JlIGRhdGFzZXQsIHdoZXJlIGVhY2ggb2JzZXJ2YXRpb24gcmVwcmVzZW50cyBvbmUgdGVhbSdzIHBlcmZvcm1hbmNlIGluIGEgc2luZ2xlIGdhbWUuIEFmdGVyIHJlbW92aW5nIEFsbC1TdGFyIGdhbWUgZW50cmllcywgdGhlIGRhdGFzZXQgY29udGFpbnMgcmVndWxhci1zZWFzb24gYW5kIHBsYXlvZmYgcmVjb3JkcyBhY3Jvc3MgYWxsIDEyIGZyYW5jaGlzZXMuIFRoZSBDb25uZWN0aWN1dCBTdW4gaXMgdGhlIGZvY2FsIHRlYW0gZm9yIHRoaXMgYW5hbHlzaXMuIFRoZSBvYmplY3RpdmUgaXMgdG8gYnVpbGQgYW5kIGV2YWx1YXRlIGEgbXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgdGhhdCBpZGVudGlmaWVzIHdoaWNoIGdhbWUtbGV2ZWwgc3RhdGlzdGljcywgZmllbGQgZ29hbCBwZXJjZW50YWdlLCB0b3RhbCByZWJvdW5kcywgdGhyZWUtcG9pbnQgcGVyY2VudGFnZSwgYW5kIHN0ZWFscywgYXJlIHNpZ25pZmljYW50IHByZWRpY3RvcnMgb2YgcG9pbnRzIHNjb3JlZC4KYGBge3IgdGFibGVzLCBpbmNsdWRlPVR9CgojVGhpcyB0YWJsZSBzaG93cyB0aGUgYXZlcmFnZSBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVhY2ggc3RhdCBmb3IgYWxsIDEyIFdOQkEgVGVhbXMKc3VtbWFyeV9zY29yZSAlPiUKICBrYmwoY2FwdGlvbiA9ICJUYWJsZSAxLiBQZXItR2FtZSBBdmVyYWdlcyBhbmQgU3RhbmRhcmQgRGV2aWF0aW9ucyBieSBUZWFtIiwgZGlnaXRzID0gMiwgCiAgICAgIGFsaWduID0gImMiLAogICAgICBjb2wubmFtZXMgPSBjKCJUZWFtIiwgCiAgICAgICAgICAgICAgICAgICAgIk1lYW4gU2NvcmUiLCAiU0QgU2NvcmUiLAogICAgICAgICAgICAgICAgICAgICJNZWFuIFJlYm91bmRzIiwgIlNEIFJlYm91bmRzIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiBGRyUiLCAiU0QgRkclIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiBSZWIiLCAiU0QgUmViIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiAzUCUiLCAiU0QgM1AlIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiBTdGVhbHMiLCAiU0QgU3RlYWxzIikpICU+JQojU3R5bGUgdGhlIHRhYmxlMQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFLAogICAgICAgICAgICAgICAgaHRtbF9mb250ID0gIlRpbWVzIE5ldyBSb21hbiIsCiAgICAgICAgICAgICAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgImJvcmRlcmVkIiksCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiLAogICAgICAgICAgICAgICAgZm9udF9zaXplID0gMTMpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCAKICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCAKICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9ICIjNEQ0RDREIikgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIiM0RDRENEQiKQojVGhpcyB0YWJsZSBzaG93cyB3aGV0aGVyIHRoZSBTdW4gc2NvcmVkIG1vcmUgb24gYXZlcmFnZSBpbiB3aW5zIGNvbXBhcmVkIHRvIGxvc3NlcwpteV90ZWFtX2J5X3Jlc3VsdCAlPiUKICAga2JsKGNhcHRpb24gPSAiVGFibGUgMi4gQ29ubmVjdGljdXQgU3VuIE1lYW4gUG9pbnRzIFNjb3JlZCBieSBHYW1lIFJlc3VsdCIsIGRpZ2l0cyA9IDIsIAogICAgICBhbGlnbiA9ICJjIiwKICAgICAgY29sLm5hbWVzID0gYygiVGVhbSIsIAogICAgICAgICAgICAgICAgICAgICJNZWFuIFNjb3JlIiwgIlNEIFNjb3JlIikpICU+JQojU3R5bGUgdGhlIHRhYmxlMgogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFLAogICAgICAgICAgICAgICAgaHRtbF9mb250ID0gIlRpbWVzIE5ldyBSb21hbiIsCiAgICAgICAgICAgICAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgImJvcmRlcmVkIiksCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiLAogICAgICAgICAgICAgICAgZm9udF9zaXplID0gMTMpICU+JQogIHJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCAKICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCAKICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9ICIjNEQ0RDREIikgJT4lCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIiM0RDRENEQiKQpgYGAKCgojIEdyYXBocyAKCiMjIEJveCBQbG90CkJhc2VkIG9uIHRoZSBib3hwbG90LCB0aGUgbWVhbiBwb2ludHMgc2NvcmVkIGluIHdpbnMgaXMgaGlnaGVyIHRoYW4gaW4gbG9zc2VzLCBzdWdnZXN0aW5nIHRoYXQgdGhlIFN1biB0ZW5kIHRvIHNjb3JlIG1vcmUgaW4gZ2FtZXMgdGhleSB3aW4uIFRoZXJlIGlzIGFsc28gb25lIHZpc2libGUgb3V0bGllciBpbiB0aGUgd2luIGdyb3VwLCBpbmRpY2F0aW5nIGFuIHVudXN1YWxseSBoaWdoIHNjb3JpbmcgZ2FtZS4KCmBgYHtyIGdyYXBocywgaW5jbHVkZT1ULCBmaWcud2lkdGg9NixmaWcuaGVpZ2h0PTQsIGNvbW1lbnQ9TkEsIG1lc3NhZ2U9Rn0KIyBCb3hwbG90IG9mIHBvaW50cyBzY29yZWQgYnkgZ2FtZSByZXN1bHQKYm94cGxvdCh0ZWFtX3Njb3JlIH4gcmVzdWx0LCBkYXRhID0gZGZfaGlzdCwKICAgICAgICBjb2wgPSBjKCJsaWdodGJsdWUiLCAibGlnaHRncmVlbiIpLAogICAgICAgIG1haW4gPSAiUG9pbnRzIFNjb3JlZCBieSBHYW1lIFJlc3VsdCDigJQgQ29ubmVjdGljdXQgU3VuICgyMDI1KSIsCiAgICAgICAgeGxhYiA9ICJSZXN1bHQiLAogICAgICAgIHlsYWIgPSAiUG9pbnRzIFNjb3JlZCIpCmBgYAoKCgpgYGB7ciBGaXJzdCBPcmRlciBNb2RlbCwgaW5jbHVkZT1GfQojRmlyc3QgT3JkZXIgTW9kZWwgKG5vIGludGVyYWN0aW9ucykgd2l0aCA0IHRlcm1zIAojV2UgYXJlIHByZWRpY3RpbmcgdGVhbV9zY29yZSB1c2luZyBmb3VyIHByZWRpY3RvcnMKbW9kZWwxID0gbG0odGVhbV9zY29yZSB+IGZpZWxkX2dvYWxfcGN0ICsgdG90YWxfcmVib3VuZHMgKyAKICAgICAgICAgICAgIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgc3RlYWxzLCBkYXRhID0gbXlfdGVhbSkKc3VtbWFyeShtb2RlbDEpCgojI1Rlc3QgZm9yIE11bHRpY29sbGluZWFyaXR5IAojQ2hlY2sgbXVsdGljb2xsaW5lYXJpdHkgdXNpbmcgbGluZWFyIGNvcnJlbGF0aW9uCnByZWRpY3RvcnMgPSBteV90ZWFtICU+JQogIHNlbGVjdChmaWVsZF9nb2FsX3BjdCwgdG90YWxfcmVib3VuZHMsIAogICAgICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscykKY29yX2RhdGEgPSBkYXRhICU+JSAKICBzZWxlY3QodGVhbV9zY29yZSwgZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLCAKICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscykKCmNvcihjb3JfZGF0YSkKCiNDaGVjayBtdWx0aWNvbGxpbmVhcml0eSB1c2luZyBWSUYKdmlmKG1vZGVsMSkKCiNNb2RlbCAyIC1GdWxsIEludGVyYWN0aW9uIE1vZGVsIAojVGhpcyBtb2RlbCB0ZXN0cyB3aGV0aGVyIHR3byBwcmVkaWN0b3JzIHdvcmsgdG9nZXRoZXIgdG8gYWZmZWN0IHNjb3JpbmcKbW9kZWwyID0gbG0odGVhbV9zY29yZSB+IGZpZWxkX2dvYWxfcGN0ICsgdG90YWxfcmVib3VuZHMgKyAKICAgICAgICAgICAgIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgc3RlYWxzLCBkYXRhID0gbXlfdGVhbSkKc3VtbWFyeShtb2RlbDIpCmBgYAojIEZpcnN0IE9yZGVyIE1vZGVsIAoKIyMgTW9kZWwxCgpGKDQsNDIpPSAxMS4wNiB3aXRoIHAtdmFsdWU9IDMuMjI1ZS0wNiwgd2hpY2ggaXMgbGVzcyB0aGFuIDAuMTUsIHRoZXJlZm9yZSB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcy4gVGhlIG1vZGVsIGFzIGEgd2hvbGUgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4gVGhlIEFkanVzdGVkIFItc3F1YXJlZCBpcyAwLjQ2NjYgbWVhbmluZyA0Ni42NiUgb2YgdGhlIHZhcmlhdGlvbiBpbiBwb2ludHMgc2NvcmVkIGlzIGV4cGxhaW5lZCBieSB0aGUgZm91ciBwcmVkaWN0b3JzIHRvZ2V0aGVyLiAKCiMjIENvZWZmaWNpZW50IEludGVycHJldGF0aW9uIAoKQXMgdGhlIGZpZWxkIGdvYWwgcGVyY2VudGFnZSBnb2VzIHVwIGJ5IDEsIHRoZSBTdW4gaW5jcmVhc2VzIGJ5IDEuMTEgcG9pbnRzLiBUaGUgcC12YWx1ZSBpcyA2LjgyZS0wNSwgc2lnbmlmaWNhbnQuCiR+JApBcyB0aGUgdG90YWwgcmVib3VuZHMgZ29lcyB1cCBieSAxLCB0aGUgU3VuIGluY3JlYXNlcyBieSAwLjA0IHBvaW50cy4gVGhlIHAtdmFsdWUgaXMgMC44ODgsIG5vdCBzaWduaWZpY2FudCAKJH4kCkFzIHRoZSB0aHJlZSBwb2ludCBmaWVsZCBnb2FsIHBlcmNlbnRhZ2UgZ29lcyB1cCBieSAxLCB0aGUgU3VuIGluY3JlYXNlcyBieSAwLjE2IHBvaW50cy4gVGhlIHAtdmFsdWUgaXMgMC4xNjcsIG5vdCBzaWduaWZpY2FudAokfiQKQXMgdGhlIHN0ZWFscyBnb2VzIHVwIGJ5IDEsIHRoZSBTdW4gaW5jcmVhc2VzIGJ5IDAuMjUgcG9pbnRzLC4gVGhlIHAtdmFsdWUgaXMgMC40ODYsIG5vdCBzaWduaWZpY2FudAoKIyMgTW9kZWwyIApJbiBNb2RlbCAxLCBhbGwgZm91ciBwcmVkaWN0b3JzIGZpZWxkIGdvYWwgcGVyY2VudGFnZSwgdG90YWwgcmVib3VuZHMsIHRocmVlLXBvaW50IGZpZWxkIGdvYWwgcGVyY2VudGFnZSwgYW5kIHN0ZWFscyB3ZXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXQgdGhlIDE1JSBzaWduaWZpY2FuY2UgbGV2ZWwsIGFzIGFsbCBwLXZhbHVlcyB3ZXJlIGJlbG93IM6xID0gMC4xNS4gU2luY2Ugbm8gdGVybXMgbmVlZGVkIHRvIGJlIHJlbW92ZWQsIE1vZGVsIDIgcmV0YWlucyB0aGUgc2FtZSBwcmVkaWN0b3JzIGFzIE1vZGVsIDEgYW5kIHNlcnZlcyBhcyB0aGUgZm91bmRhdGlvbiBmb3IgYnVpbGRpbmcgdGhlIGZ1bGwgaW50ZXJhY3Rpb24gbW9kZWwgaW4gTW9kZWwgMy4KCiMjIE11bHRpY29sbGluZWFyaXR5IApBbGwgVklGIHZhbHVlcyBhcmUgYmVsb3cgNSwgaW5kaWNhdGluZyBubyBtdWx0aWNvbGxpbmVhcml0eSBwcm9ibGVtIGFtb25nIHRoZSBwcmVkaWN0b3JzLiAKRmllbGRfZ29hbF9wY3Q9MS41NgokfiQKVG90YWxfcmVib3VuZHM9MS4zMwokfiQKVGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3Q9MS40NwokfiQKU3RlYWxzPTEuMjUKCmBgYHtyIEludGVyYWN0aW9uIE1vZGVsLCByZXN1bHRzPSAnYXNpcycsIGVjaG89RiwgaW5jbHVkZT1GLCBjb21tZW50PU5BfSAKI01vZGVsMyAtVHJpbW1lZCBJbnRlcmFjdGlvbiBNb2RlbAojS2VlcCBvbmx5IHRoZSBpbnRlcmFjdGlvbiB0ZXJtcyB0aGF0IHdlcmUgc2lnbmlmaWNhbnQgaW4gTW9kZWwyCm1vZGVsMyA9IGxtKHRlYW1fc2NvcmUgfiBmaWVsZF9nb2FsX3BjdCArIHRvdGFsX3JlYm91bmRzICsgCiAgICAgICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCArIHN0ZWFscyArCiAgICAgICAgICAgICBmaWVsZF9nb2FsX3BjdCp0b3RhbF9yZWJvdW5kcyArCiAgICAgICAgICAgIGZpZWxkX2dvYWxfcGN0KnRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KwogICAgICAgICAgICBmaWVsZF9nb2FsX3BjdCpzdGVhbHMgKwogICAgICAgICAgICB0b3RhbF9yZWJvdW5kcyp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCArCiAgICAgICAgICAgIHRvdGFsX3JlYm91bmRzKnN0ZWFscyArIAogICAgICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCpzdGVhbHMgICwgZGF0YSA9IG15X3RlYW0pCnN1bW1hcnkobW9kZWwzKQoKI01vZGVsIDQg4oCUIEZpbmFsIE1vZGVsCiNUaGUgYmVzdCBtb2RlbCBiYXNlZCBvbiBBZGp1c3RlZCBSwrIgYW5kIHAtdmFsdWVzCm1vZGVsNCA9IGxtKHRlYW1fc2NvcmUgfiBmaWVsZF9nb2FsX3BjdCArIHRvdGFsX3JlYm91bmRzICsgCiAgICAgICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCArIHN0ZWFscyAgKwogICAgICAgICAgICBmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCsKICAgICAgICAgICAgdG90YWxfcmVib3VuZHMqdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgKwogICAgICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCpzdGVhbHMgICwgZGF0YSA9IG15X3RlYW0pCm1vZGVsNHN1bSA9IHN1bW1hcnkobW9kZWw0KQpgYGAKCiR+JAoKIyBJbnRlcmFjdGlvbiBNb2RlbAoKIyMgTW9kZWwzCkFkZGluZyBpbnRlcmFjdGlvbnMgZGlkIGltcHJvdmUgdGhlIEFkanVzdGVkIFItc3F1YXJlZC4gCiR+JApNb2RlbCAyIGhhZCBhbiBBZGp1c3RlZC1zcXVhcmVkIG9mIDAuNDY2NiwgbWVhbmluZyA0Ni42NiUgb2YgdGhlIHZhcmlhdGlvbiBpbiBwb2ludHMgc2NvcmVkIGlzIGV4cGxhaW5lZCBieSB0aGUgZm91ciBwcmVkaWN0b3JzIGFsb25lLiBNb2RlbCAzIGluY3JlYXNlZCB0aGF0IHRvIDAuNTY1MiwgbWVhbmluZyA1Ni41MiUgb2YgdGhlIHZhcmlhdGlvbiBpcyBub3cgZXhwbGFpbmVkIG9uY2UgaW50ZXJhY3Rpb25zIGFyZSBpbmNsdWRlZC4gVGhlIGZvbGxvd2luZyBpbnRlcmFjdGlvbiB0ZXJtcyBoYXZlIGEgcC12YWx1ZSBsZXNzIHRoYW4gMC4xNToKJH4kCi0gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gZmllbGRfZ29hbF9wY3QgYW5kIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0IGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIHAtdmFsdWUgaXMgMC4wMDA5MDQsIHdoaWNoIGlzIGxlc3MgdGhhbiDOsT0gMC4xNSwgdGhlcmVmb3JlIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLgokfiQKLSBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0b3RhbF9yZWJvdW5kcyBhbmQgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSB0aGUgcC12YWx1ZSBpcyAwLjA1OTk1Miwgd2hpY2ggaXMgbGVzcyB0aGFuIM6xPSAwLjE1LCB0aGVyZWZvcmUgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMuIAokfiQKLSBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCBhbmQgc3RlYWxzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhlIHAtdmFsdWUgaXMgMC4xMTM3NTIsIHdoaWNoIGlzIGxlc3MgdGhhbiAwLjE1LCB0aGVyZWZvcmUgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMuIAoKIyMgTW9kZWw0CkluIE1vZGVsIDMsSSBrZXB0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBmaWVsZF9nb2FsX3BjdCBhbmQgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsdG90YWxfcmVib3VuZHMgYW5kIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0LCB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCBhbmQgc3RlYWxzLCBzaW5jZSBhbGwgaGFkIHAtdmFsdWVzIGJlbG93IM6xPSAwLjE1LiAKJH4kCkkgZHJvcHBlZCBhbGwgb3RoZXJzIGludGVyYWN0aW9ucyBiZWNhdXNlIHRoZWlyIHAtdmFsdWVzIGV4Y2VlZGVkIM6xID0gMC4xNSxhbmQgd2VyZSB0aGVyZWZvcmUgbm90IHNpZ25pZmljYW50LiBNb2RlbCA0IGlzIG15IGZpbmFsIGNob2ljZSBiZWNhdXNlIGl0IHJldGFpbnMgb25seSB0aGUgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gdGVybXMsIHRoZSBBZGp1c3RlZC1zcXVhcmVkIHJlbWFpbmVkIG5lYXJseSB1bmNoYW5nZWQgZ29pbmcgZnJvbSAwLjU2NTIgaW4gTW9kZWwgMyB0byAwLjU2NDUgaW4gTW9kZWwgNCwgYW5kIHRoZSBtb2RlbCBpcyBzaW1wbGVyLCBlYXNpZXIgdG8gaW50ZXJwcmV0LCBhbmQgcHJvdmlkZXMgYSBiZXR0ZXIgb3ZlcmFsbCBmaXQuCgojIyBNb2RlbCBTdW1tYXJ5IC1JbiBsaW5lIGNvZGUKCgpNeSBmaW5hbCBtb2RlbCBpcyB0ZWFtX3Njb3JlPSBgciBtb2RlbDQkY29lZmZpY2llbnRzWzFdYCArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbMl1gICogZmllbGRfZ29hbF9wY3QgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzNdYCAqIHRvdGFsX3JlYm91bmRzICsgYHIgbW9kZWw0JGNvZWZmaWNpZW50c1s0XWAgKiB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbNV1gKiBzdGVhbHMgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzZdYCAqIGZpZWxkX2dvYWxfcGN0ICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzddYCogdG90YWxfcmVib3VuZHMgKiB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbOF1gICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgKiBzdGVhbHMKClRoaXMgbW9kZWwgc2lnbmlmaWNhbnRseSBwcmVkaWN0cyB0ZWFtIHNjb3JlLCBmKGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzJdYCwgYHIgbW9kZWw0c3VtJGZzdGF0aXN0aWNbMl1gKSA9IGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzFdYCwgcDwuMDAwMSwgYWRqdXN0ZWQgUl4yPSBgciBtb2RlbDRzdW0kYWRqLnIuc3F1YXJlZGAKCiMgUmVzaWR1YWwgQW5hbHlzaXMKCiMjIE5vcm1hbGl0eSAKVGhlIHJlc2lkdWFsIGhpc3RvZ3JhbSBsb29rcyBsaWtlIGEgYmVsbCBjdXJ2ZSBhbmQgaXMgY2VudGVyZWQgY2xvc2UgdG8gemVyby4gVGhlcmUgaXMgYSBzbWFsbCB0YWlsIG9uIHRoZSByaWdodCBzaWRlLCBidXQgaXQgaXMgbm90IGEgYmlnIGNvbmNlcm4uIEJhc2VkIG9uIHRoaXMsIHRoZSBub3JtYWxpdHkgYXNzdW1wdGlvbiBpcyBzYXRpc2ZpZWQuCgojIyBDb25zdGFudCBWYXJpYW5jZQpUaGUgcmVzaWR1YWxzIHZzLiBmaXR0ZWQgdmFsdWVzIHBsb3Qgc2hvd3Mgbm8gY2xlYXIgcGF0dGVybiBvciBmdW5uZWwgc2hhcGUuClRoZSBwb2ludHMgYXJlIHNjYXR0ZXJlZCByYW5kb21seSBhcm91bmQgemVybyBhY3Jvc3MgYWxsIGZpdHRlZCB2YWx1ZXMuQmFzZWQgb24gdGhpcywgdGhlIGVxdWFsIHZhcmlhbmNlIGFzc3VtcHRpb24gaXMgbm90IHNhdGlzZmllZC4KCgojIyBPdXRsaWVycwpBbGwgb2JzZXJ2YXRpb25zIGZhbGwgd2l0aGluIHRoZSB0aHJlc2hvbGQgYmV0d2VlbiAtMyBhbmQgMywgbWVhbmluZyB0aGVyZSBhcmUgbm8gb3V0bGllcnMuIFRoZSBtb2RlbCBmaXRzIHRoZSBkYXRhIHdlbGwgYWNyb3NzIGFsbCBnYW1lcy4KCiMjIEluZmx1ZW50aWFsIE9ic2VydmF0aW9ucwpUaGUgQ29vaydzIERpc3RhbmNlIGNoYXJ0IGlkZW50aWZpZXMgNCBnYW1lcyB0aGF0IGhhdmUgYSBkaXNwcm9wb3J0aW9uYXRlIGVmZmVjdCBvbiB0aGUgbW9kZWwncyBjb2VmZmljaWVudHMuIFRoZXNlIGNvcnJlc3BvbmQgdG8gZ2FtZXMgcGxheWVkIG9uIApBdWd1c3QgMTZ0aCwgMjAyNCBhZ2FpbnN0IFdpbmcsIEp1bHkgMDd0aCwgMjAyNCBhZ2FpbnN0IE1lcmN1cnksIEp1bmUgMjN0aCwgMjAyNCBhZ2FpbnN0IFN0b3JtIGFuZCBNYXkgMDV0aCwgMjAyNCBhZ2FpbnN0IE15c3RpY3MuIFRoZSBsZXZlcmFnZSBwbG90IGZ1cnRoZXIgY29uZmlybXMgNCBpbmZsdWVudGlhbCBwb2ludHMgb24gdGhlIHJpZ2h0IHNpZGUgYW5kIDEgb3V0bGllciBvbiB0aGUgbGVmdCBzaWRlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnYW1lIG9uIEp1bmUgMjcsIDIwMjQgYWdhaW5zdCBNeXN0aWNzIApEZXNwaXRlIHRoZXNlIGluZmx1ZW50aWFsIG9ic2VydmF0aW9ucywgdGhlIG1vZGVsIHJlbWFpbnMgcmVsaWFibGUgYXMgdGhlIHJlc2lkdWFsIGFzc3VtcHRpb25zIGFyZSBsYXJnZWx5IHNhdGlzZmllZC4KCmBgYHtyIFJlc2lkdWFscywgaW5jbHVkZT1UfQojUmVzaWR1YWwgY2hlY2tzIGZvciBNb2RlbDQKCiMoMSlSZXNpZHVhbCBIaXN0b2dyYW0gCm9sc19wbG90X3Jlc2lkX2hpc3QobW9kZWw0KQptYWluPSJSZXNpZHVhbCBIaXN0b2dyYW0iCnhsYWI9IlJlc2lkdWFscyIKeWxhYj0iRnJlcXVlbmN5IgoKIygyKVJlc2lkdWFscyB2cy4gRml0dGVkIFBsb3QgCm9sc19wbG90X3Jlc2lkX2ZpdChtb2RlbDQpCm1haW49IlJlc2lkdWFscyB2cy4gRml0dGVkIgp4bGFiPSJGaXR0ZWQgVmFsdWVzIgp5bGFiPSJSZXNpZHVhbHMiCgojKDMpU3R1ZGVudGl6ZWQgUmVzaWR1YWxzCm9sc19wbG90X3Jlc2lkX3N0dWQobW9kZWw0KQptYWluPSJTdHVkZW50aXplZCBSZXNpZHVhbHMgdnMgRml0dGVkIgp4bGFiPSJPYnNlcnZhdGlvbiIKeWxhYj0iU3R1ZGVudGl6ZWQgUmVzaWR1YWxzIgoKIyg0KUNvb2sncyBEaXN0YW5jZQpvbHNfcGxvdF9jb29rc2RfY2hhcnQobW9kZWw0KQptYWluPSJDb29rJ3MgRGlzdGFuY2UiCnhsYWI9Ik9ic2VydmF0aW9uIgp5bGFiPSJDb29rJ3MgRGlzdGFuY2UiCgojKDUpbGF2ZXJhZ2UKb2xzX3Bsb3RfcmVzaWRfbGV2KG1vZGVsNCkKbWFpbj0iTGV2ZXJhZ2UiCnhsYWI9IkxldmVyYWdlIgp5bGFiPSJTdHVkZW50aXplZCBSZXNpZHVhbHMiCgpncmFwaGljcy5vZmYoKQpgYGAKCgpgYGB7ciwgaW5jbHVkZT1ULCBlY2hvPUYsIHJlc3VsdHM9J2FzaXMnLCBjb21tZW50PU5BLCBtZXNzYWdlPUZ9CiMgRm9ybWF0dGVkIEhUTUwgdGFibGUgZm9yIE1vZGVsIDQKbGlicmFyeShzdGFyZ2F6ZXIpCnN0YXJnYXplcihtb2RlbDQsIHR5cGU9ICJodG1sIikKYGBgCgoKYGBge3IgUHJlZGljdGlvbiwgaW5jbHVkZT1GfQojVXNlIE1vZGVsNCB0byBwcmVkaWN0IHRoZSBTdW4ncyBzY29yZSBmb3IgYSBzcGVjaWZpYyBnYW1lIHNjZW5hcmlvCiNFeHBlcmltZW50YWwgUmVnaW9uCgpuZXdkYXRhPWRhdGEuZnJhbWUoZmllbGRfZ29hbF9wY3Q9NDUuNCwgdG90YWxfcmVib3VuZHM9MzQsIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0PTM2LCBzdGVhbHM9NykKCiNHZW5lcmF0ZSBwcmVkaWN0ZWQgc2NvcmUgd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbApwcmVkaWN0aW9uID0gcHJlZGljdChtb2RlbDQsIG5ld2RhdGEsIGludGVydmFsID0gImNvbmZpZGVuY2UiLCBsZXZlbD0uOTUpCnByZWRpY3Rpb24KCiNDaGVjayBleHBlcmltZW50YWwgcmVnaW9uCnN1bW1hcnkobXlfdGVhbSkKc3VtbWFyeShjb3JfZGF0YSkKYGBgCiMgUHJlZGljdGlvbgoKIyMgUHJlZGljdGVkIFNjb3JlCgpVc2luZyB0aGUgbWVkaWFuIHZhbHVlcyBmb3IgYWxsIHByZWRpY3RvcnM6IGZpZWxkIGdvYWwgcGVyY2VudGFnZSBvZiA0My45MCwgdG90YWwgcmVib3VuZHMgb2YgMzQsIHRocmVlLXBvaW50IGZpZWxkIGdvYWwgcGVyY2VudGFnZSBvZiAzMy4zMCwgYW5kIHN0ZWFscyBvZiA3LjM5LiBNb2RlbCA0IHByZWRpY3RzIHRoZSBTdW4gd291bGQgc2NvcmUgNzkuODYgcG9pbnRzLiBUaGUgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgcmFuZ2VzIGZyb20gNzcuNDEgdG8gODIuMzIgcG9pbnRzLiBXZSBhcmUgOTUlIGNvbmZpZGVudCB0aGF0IHRoZSBTdW4gd291bGQgc2NvcmUgYmV0d2VlbiA3Ny40MSBhbmQgODIuMzIgcG9pbnRzLgokfiQKSSBidWlsdCB0aGUgbW9kZWwgdG8gcHJlZGljdCBteSB0ZWFtJ3MgcG9pbnQgZm9yIGEgZ2FtZSBpbiB3aGljaCB0aGV5IGFjaGlldmUgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gVGhlIHByZWRpY3RlZCBzY29yZSBpcyBgciBwcmVkaWN0aW9uWzFdYCwgd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBbYHIgcHJlZGljdGlvbiBbMl1gLCBgciBwcmVkaWN0aW9uIFszXWBdCgojIyBFeHBlcmltZW50YWwgUmVnaW9uClRoZSB2YWxpZCByYW5nZXMgYXJlOiBmaWVsZCBnb2FsIHBlcmNlbnRhZ2UgKDM1LjEwIHRvIDU3LjYwKSwgdG90YWwgcmVib3VuZHMgKDI2IHRvIDQ1KSwgdGhyZWUtcG9pbnQgZmllbGQgZ29hbCBwZXJjZW50YWdlICgxMC4wMCB0byA2MC45MCksIGFuZCBzdGVhbHMgKDEgdG8gMTQpLiBTaW5jZSBhbGwgbWVkaWFuIHZhbHVlcyBmYWxsIHdpdGhpbiB0aGVzZSByYW5nZXMsIHRoZSBwcmVkaWN0aW9uIGlzIHRydXN0d29ydGh5Lg==