introduction
This is the space where I’ll describe the data set and my team and
the year. So on and so forth we go. Below are tables 1 and 2 that
describe the overall summary and stats for the overall season as well as
my team. (rephrase in own words).
Tables/Season
Summary
summary %>%
kbl(caption = "team score summary", digits = 2) %>%
kable_classic(full_width = F)
team score summary
|
team_name
|
mean_score
|
|
Aces
|
85.52
|
|
Dream
|
76.93
|
|
Fever
|
84.50
|
|
Liberty
|
84.98
|
|
Lynx
|
82.36
|
|
Mercury
|
81.93
|
|
Mystics
|
79.30
|
|
Sky
|
77.40
|
|
Sparks
|
78.40
|
|
Storm
|
82.67
|
|
Sun
|
80.36
|
|
Wings
|
84.20
|
my_team %>%
kbl(caption = "Wings Win Summary", digits = 2) %>%
kable_classic(full_width = F)
Wings Win Summary
|
team_score
|
field_goal_pct
|
total_rebounds
|
three_point_field_goal_pct
|
steals
|
team_name
|
team_winner
|
|
84
|
42.9
|
33
|
45.0
|
7
|
Wings
|
FALSE
|
|
109
|
56.8
|
33
|
45.8
|
7
|
Wings
|
FALSE
|
|
81
|
38.5
|
42
|
22.2
|
9
|
Wings
|
FALSE
|
|
67
|
36.6
|
33
|
22.2
|
4
|
Wings
|
FALSE
|
|
91
|
47.2
|
28
|
25.0
|
3
|
Wings
|
FALSE
|
|
77
|
40.5
|
34
|
20.0
|
6
|
Wings
|
FALSE
|
|
96
|
49.3
|
33
|
40.0
|
5
|
Wings
|
FALSE
|
|
86
|
43.1
|
44
|
22.2
|
3
|
Wings
|
FALSE
|
|
93
|
39.2
|
34
|
41.9
|
8
|
Wings
|
FALSE
|
|
94
|
48.2
|
38
|
38.9
|
10
|
Wings
|
TRUE
|
|
93
|
48.0
|
40
|
28.6
|
4
|
Wings
|
TRUE
|
|
113
|
52.6
|
34
|
36.4
|
9
|
Wings
|
TRUE
|
|
71
|
43.5
|
38
|
15.4
|
4
|
Wings
|
FALSE
|
|
74
|
37.9
|
28
|
42.9
|
7
|
Wings
|
FALSE
|
|
91
|
43.9
|
36
|
41.7
|
12
|
Wings
|
FALSE
|
|
101
|
51.3
|
29
|
45.0
|
10
|
Wings
|
TRUE
|
|
81
|
43.7
|
33
|
31.3
|
6
|
Wings
|
FALSE
|
|
84
|
50.0
|
26
|
36.8
|
5
|
Wings
|
FALSE
|
|
85
|
46.1
|
37
|
30.0
|
6
|
Wings
|
FALSE
|
|
85
|
44.9
|
27
|
33.3
|
16
|
Wings
|
TRUE
|
|
96
|
49.3
|
34
|
29.4
|
6
|
Wings
|
FALSE
|
|
71
|
41.9
|
31
|
23.5
|
11
|
Wings
|
FALSE
|
|
76
|
45.7
|
32
|
33.3
|
12
|
Wings
|
FALSE
|
|
94
|
48.7
|
36
|
60.0
|
9
|
Wings
|
TRUE
|
|
84
|
41.2
|
41
|
39.3
|
6
|
Wings
|
FALSE
|
|
69
|
39.4
|
36
|
20.8
|
6
|
Wings
|
FALSE
|
|
72
|
35.4
|
35
|
34.6
|
9
|
Wings
|
FALSE
|
|
78
|
47.9
|
34
|
41.2
|
5
|
Wings
|
FALSE
|
|
67
|
37.7
|
29
|
6.3
|
3
|
Wings
|
FALSE
|
|
84
|
47.7
|
28
|
46.2
|
6
|
Wings
|
FALSE
|
|
90
|
47.4
|
36
|
26.1
|
9
|
Wings
|
FALSE
|
|
72
|
39.7
|
35
|
11.8
|
7
|
Wings
|
FALSE
|
|
81
|
37.8
|
40
|
20.0
|
5
|
Wings
|
FALSE
|
|
76
|
46.2
|
34
|
36.4
|
12
|
Wings
|
FALSE
|
|
72
|
51.6
|
30
|
37.5
|
3
|
Wings
|
FALSE
|
|
84
|
42.1
|
44
|
16.7
|
5
|
Wings
|
TRUE
|
|
107
|
52.0
|
38
|
50.0
|
10
|
Wings
|
TRUE
|
|
78
|
42.9
|
35
|
12.5
|
6
|
Wings
|
FALSE
|
|
74
|
34.8
|
40
|
38.9
|
7
|
Wings
|
FALSE
|
|
87
|
45.1
|
42
|
33.3
|
7
|
Wings
|
TRUE
|
Histograms
below are my histograms and here is a great and wonderful discussion,
through a few sentences, on all they have to offer. looking at winning
vs losing and now here they are so special and great, right?
#i refuse to have a 6-7 joke in my coding. you cannot make me
p <- data %>%
ggplot(aes(x=team_score, fill = team_winner)) +
geom_histogram(color = "#e9ecef", alpha=0.6, position = 'identity') +
scale_fill_manual(values=c("#002b5c", "#c4d600"))
boxplot(team_score ~ result, data = df_hist, notch = TRUE,
col = c("#002b5c", "#c4d600"),
main = "Points score by game result",
xlab = "Result", ylab = "Points")
## Warning in (function (z, notch = FALSE, width = NULL, varwidth = FALSE, : some
## notches went outside hinges ('box'): maybe set notch=FALSE

Models
Interaction Models
Call: lm(formula = team_score ~ field_goal_pct + total_rebounds +
three_point_field_goal_pct + field_goal_pct * total_rebounds +
field_goal_pct * three_point_field_goal_pct + total_rebounds *
three_point_field_goal_pct, data = my_team)
Residuals: Min 1Q Median 3Q Max -20.0621 -2.8317 0.2787 3.8935
16.3294
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept)
22.297634 95.796054 0.233 0.817 field_goal_pct 0.800250 2.399886 0.333
0.741 total_rebounds -0.237118 2.587190 -0.092 0.928
three_point_field_goal_pct -0.034367 1.249697 -0.028 0.978
field_goal_pct:total_rebounds 0.016969 0.063750 0.266 0.792
field_goal_pct:three_point_field_goal_pct 0.001972 0.023458 0.084 0.934
total_rebounds:three_point_field_goal_pct 0.006036 0.027642 0.218
0.829
Residual standard error: 7.467 on 33 degrees of freedom Multiple
R-squared: 0.6414, Adjusted R-squared: 0.5762 F-statistic: 9.836 on 6
and 33 DF, p-value: 3.182e-06
\(~\)
After after running all models and reducing models, my final model is
team_score= -12.3047153 + 1.4462277 * field_goal_pct + 0.6871829 *
total_rebounds + 0.2593569 * three_point_field_goal_pct.
This model significantly predicts team score, F(3, 36) = 21.2378708,
p<.0001, 0.6088799.
See table below for results:
|
|
|
|
Dependent variable:
|
|
|
|
|
|
team_score
|
|
|
|
field_goal_pct
|
1.446***
|
|
|
(0.253)
|
|
|
|
|
total_rebounds
|
0.687**
|
|
|
(0.255)
|
|
|
|
|
three_point_field_goal_pct
|
0.259**
|
|
|
(0.112)
|
|
|
|
|
Constant
|
-12.305
|
|
|
(14.869)
|
|
|
|
|
|
|
Observations
|
40
|
|
R2
|
0.639
|
|
Adjusted R2
|
0.609
|
|
Residual Std. Error
|
7.173 (df = 36)
|
|
F Statistic
|
21.238*** (df = 3; 36)
|
|
|
|
Note:
|
p<0.1; p<0.05;
p<0.01
|
Residuals
#residual plots of a variety of times
ols_plot_resid_fit(model4)

ols_plot_resid_hist(model4)

ols_plot_resid_stud(model4)

ols_plot_resid_lev(model4, threshold = 3)

ols_plot_cooksd_chart(model4)

Prediction
I built this model to predict my team’s points for a game in which
they achieve the median value for each variable. The predicted team
score is 83.908595, with 95% confidence interval (81.5603447,
86.2568453).
LS0tCnRpdGxlOiAiQXNzaWdubWVudCA2IFNUQTMxOSBTcHJpbmcgMjAyNiIKYXV0aG9yOiAiIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jX2NvbGxhcHNlZDogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgc21vb3RoX3Njcm9sbDogeWVzCiAgICB0aGVtZTogbHVtZW4KICBwZGZfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIGZpZ193aWR0aDogMwogICAgZmlnX2hlaWdodDogMwogIHdvcmRfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAga2VlcF9tZDogeWVzCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKYGBge2NzcywgZWNobyA9IEZBTFNFfQojVE9DOjpiZWZvcmUgewogIGNvbnRlbnQ6ICJUYWJsZSBvZiBDb250ZW50cyI7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjJlbTsKICBkaXNwbGF5OiBibG9jazsKICBjb2xvcjogbmF2eTsKICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgoKZGl2I1RPQyBsaSB7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLwogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsKICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsKICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7Cn0KCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovCiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxNXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7CiAgY29sb3I6IG5hdnk7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsKICBjb250ZW50OiAiLiI7Cgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0KCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9Cgp9CmBgYAoKCmBgYCB7ciBzZXR1cCwgaW5jbHVkZT1GfQogc2V0d2QoIn4vRGVza3RvcC9Db2xsZWdlL1NUQTMxOSIpCgpkYXRhPXJlYWQuY3N2KCJXTkJBXzIwMjVfYm94LXNjb3Jlcy5jc3YiLCBoZWFkZXI9VCkKCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKI3ZpZiBmdW5jdGlvbiBpbiB0aGUgY2FyIHBhY2thZ2UKbGlicmFyeShjYXIpCmxpYnJhcnkob2xzcnIpCiNrYWJsZWV4dHJhIGZvciBuaWNlIG1hcmtkb3duIHRhYmxlcwpsaWJyYXJ5KGthYmxlRXh0cmEpCgpgYGAKCgpgYGB7ciB3cmFuZ2xpbmcsIGluY2x1ZGU9Rn0Kc3VtbWFyeShkYXRhKQpsaWJyYXJ5KGRwbHlyKQoKI2ZpbHRlcmluZyBvdXQgZXh0cmFuZW91cyBvYnNlcnZhdGlvbnMsIGFsbCBXTkJBIHRlYW1zIGluY2x1ZGVkLCByZW1vdmUgc2NvcmVzIGZyb20gQUxMIHN0YXJ0IGdhbWUKZGF0YSA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSAhPSAiVGVhbSBXTkJBIiAmIHRlYW1fbmFtZSAhPSAiVGVhbSBVU0EiKQoKI2dyb3VwIGRhdGEgYnkgdGVhbSwgZmluZCBNIGFuZCBTRCBvZiBhbGwgdmFyaWFibGVzCnN1bW1hcnkgPSBkYXRhICU+JQogIGdyb3VwX2J5KHRlYW1fbmFtZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmU9bWVhbih0ZWFtX3Njb3JlLCBzZF9zY29yZT1zZCh0ZWFtX3Njb3JlKSwKICAgICAgICAgICAgbWVhbl9yZWJvdW5kcz1tZWFuKHRvdGFsX3JlYm91bmRzKSwgc2RfcmVib3VuZHM9c2QodG90YWxfcmVib3VuZHMpCiAgICAgICAgICAgICkpCgojc2VsZWN0aW5nIHZhcmlhYmxlcyB3ZSBuZWVkIGFuZCBmaWx0ZXIgbXkgdGVhbSwgd2luZ3MgZGlkIE5PVCBtYWtlIHRoZSBwbGF5b2ZmcywgYiBhbmQgc29tZSBvZiBkCm15X3RlYW0gPSBkYXRhICU+JSAKICBzZWxlY3QodGVhbV9zY29yZSwgZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLCAKICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscywgdGVhbV9uYW1lLCB0ZWFtX3dpbm5lcikgJT4lIAogIGZpbHRlcih0ZWFtX25hbWUgPT0gIldpbmdzIikKCiNncm91cHMgY2FzZXMgYnkgd2luIHZzIGxvc3MKI3N1bW1hcml6ZSBhbGwgdmFyaWFibGVzIHdpdGggbWVhbiBhbmQgU0QKbXlfdGVhbV93aW4gPSBteV90ZWFtICU+JQogIGdyb3VwX2J5KHRlYW1fd2lubmVyKSAlPiUKICBzdW1tYXJpc2UobWVhbj1tZWFuKHRlYW1fc2NvcmUpKQoKZGZfaGlzdCA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiV2luZ3MiKSU+JQogIG11dGF0ZShyZXN1bHQgPSBjYXNlX3doZW4odGVhbV93aW5uZXI9PVRSVUUgfiJXaW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYW1fd2lubmVyPT1GQUxTRSB+ICJsb3NzIikpCmBgYAoKIyBpbnRyb2R1Y3Rpb24KVGhpcyBpcyB0aGUgc3BhY2Ugd2hlcmUgSSdsbCBkZXNjcmliZSB0aGUgZGF0YSBzZXQgYW5kIG15IHRlYW0gYW5kIHRoZSB5ZWFyLiBTbyBvbiBhbmQgc28gZm9ydGggd2UgZ28uIEJlbG93IGFyZSB0YWJsZXMgMSBhbmQgMiB0aGF0IGRlc2NyaWJlIHRoZSBvdmVyYWxsIHN1bW1hcnkgYW5kIHN0YXRzIGZvciB0aGUgb3ZlcmFsbCBzZWFzb24gYXMgd2VsbCBhcyBteSB0ZWFtLiAocmVwaHJhc2UgaW4gb3duIHdvcmRzKS4gCgojIFRhYmxlcy9TZWFzb24gU3VtbWFyeQoKYGBge3IgdGFibGVzLCBpbmNsdWRlPVR9CnN1bW1hcnkgJT4lCiAga2JsKGNhcHRpb24gPSAidGVhbSBzY29yZSBzdW1tYXJ5IiwgZGlnaXRzID0gMikgJT4lCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRikKCm15X3RlYW0gJT4lCiAga2JsKGNhcHRpb24gPSAiV2luZ3MgV2luIFN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKYGBgCgojIEhpc3RvZ3JhbXMKYmVsb3cgYXJlIG15IGhpc3RvZ3JhbXMgYW5kIGhlcmUgaXMgYSBncmVhdCBhbmQgd29uZGVyZnVsIGRpc2N1c3Npb24sIHRocm91Z2ggYSBmZXcgc2VudGVuY2VzLCBvbiBhbGwgdGhleSBoYXZlIHRvIG9mZmVyLiBsb29raW5nIGF0IHdpbm5pbmcgdnMgbG9zaW5nIGFuZCBub3cgaGVyZSB0aGV5IGFyZSBzbyBzcGVjaWFsIGFuZCBncmVhdCwgcmlnaHQ/CgoKYGBge3IgZ3JhcGhzLCBpbmNsdWRlPVQsIGZpZy53aWR0aD03LCBmaWcuaGVpZ2h0PTd9CiNpIHJlZnVzZSB0byBoYXZlIGEgNi03IGpva2UgaW4gbXkgY29kaW5nLiB5b3UgY2Fubm90IG1ha2UgbWUKcCA8LSBkYXRhICU+JQogIGdncGxvdChhZXMoeD10ZWFtX3Njb3JlLCBmaWxsID0gdGVhbV93aW5uZXIpKSArCiAgICBnZW9tX2hpc3RvZ3JhbShjb2xvciA9ICIjZTllY2VmIiwgYWxwaGE9MC42LCBwb3NpdGlvbiA9ICdpZGVudGl0eScpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjMDAyYjVjIiwgIiNjNGQ2MDAiKSkgCgpib3hwbG90KHRlYW1fc2NvcmUgfiByZXN1bHQsIGRhdGEgPSBkZl9oaXN0LCBub3RjaCA9IFRSVUUsIAogICAgICAgIGNvbCA9IGMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpLAogICAgICAgIG1haW4gPSAiUG9pbnRzIHNjb3JlIGJ5IGdhbWUgcmVzdWx0IiwKICAgICAgICB4bGFiID0gIlJlc3VsdCIsIHlsYWIgPSAiUG9pbnRzIikKYGBgCgojIE1vZGVscwoKYGBge3IgRmlyc3QgT3JkZXIgTW9kZWwsIGluY2x1ZGUgPSBGfQoKI2NyZWF0aW5nIG1vZGVsIDEKbW9kZWwxPWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QrCiAgICAgICAgICAgIHN0ZWFscywgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMSkKCiNjcmVhdGluZyBjb3JyZWxhdGlvbiBtYXRyaXgKY29yX2RhdGEgPSBteV90ZWFtICU+JQogIHNlbGVjdCh0ZWFtX3Njb3JlLCBmaWVsZF9nb2FsX3BjdCwgdG90YWxfcmVib3VuZHMsIAogICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgc3RlYWxzKQoKY29yKGNvcl9kYXRhKQoKI2ZpbmRpbmcgdmlmIHZhbHVlcwp2aWYobW9kZWwxKQoKCiNjcmVhdGluZyBtb2RlbCAyLCBzYW1lIGFzIG1vZGVsIDEgZHVlIHRvIG5vIGhpZ2hseSBjb3JyZWxhdGVkIHBhaXJzCm1vZGVsMj1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KwogICAgICAgICAgICBzdGVhbHMsIGRhdGE9bXlfdGVhbSkKc3VtbWFyeShtb2RlbDIpCgpgYGAKCiMgSW50ZXJhY3Rpb24gTW9kZWxzCgpgYGB7ciBJbnRlcmFjdGlvbiBNb2RlbCwgcmVzdWx0cz0nYXNpcycsIGVjaG89RiwgaW5jbHVkZSA9IFQsIGNvbW1lbnQ9TkF9CiNjcmVhdGluZyBtb2RlbCAzCm1vZGVsMz1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgZmllbGRfZ29hbF9wY3QqdG90YWxfcmVib3VuZHMgKyBmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCt0b3RhbF9yZWJvdW5kcyp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMykKCiNtb2RlbDMgaGFkIG5vIHNpZ25pZmljYW50IGVmZmVjdHMsIHNvIHRoaXMgaXMgYSByZWR1Y2VkIG1vZGVsIGluY2x1ZGluZyB0aGUgcmVtb3ZhbCBvZiBzdGVhbHMgZHVlIHRvIGl0IG5vdCBiZWluZyBzaWduaWZpY2FudCBldmVuIHdpdGhvdXQgdGhlIGludGVyYWN0aW9uIGVmZmVjdHMKbW9kZWw0PWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIGRhdGE9bXlfdGVhbSkKbW9kZWw0c3VtPXN1bW1hcnkobW9kZWw0KQoKCmBgYAoKJH4kCgpBZnRlciBhZnRlciBydW5uaW5nIGFsbCBtb2RlbHMgYW5kIHJlZHVjaW5nIG1vZGVscywgbXkgZmluYWwgbW9kZWwgaXMgdGVhbV9zY29yZT0gYHIgbW9kZWw0JGNvZWZmaWNpZW50c1sxXWAgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzJdYCAqIGZpZWxkX2dvYWxfcGN0ICsgYHIgbW9kZWw0JGNvZWZmaWNpZW50c1szXWAgKiB0b3RhbF9yZWJvdW5kcyArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbNF1gICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QuCgpUaGlzIG1vZGVsIHNpZ25pZmljYW50bHkgcHJlZGljdHMgdGVhbSBzY29yZSwgRihgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1syXWAsIGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzNdYCkgPSBgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1sxXWAsIHA8LjAwMDEsIGByIG1vZGVsNHN1bSRhZGouci5zcXVhcmVkYC4KClNlZSB0YWJsZSBiZWxvdyBmb3IgcmVzdWx0czoKYGBge3IsIGluY2x1ZGU9VCwgZWNobz1GLCByZXN1bHRzPSJhc2lzIiwgbWVzc2FnZT1GfQpsaWJyYXJ5KHN0YXJnYXplcikKc3RhcmdhemVyKG1vZGVsNCwgdHlwZSA9ICJodG1sIikKYGBgCgojIFJlc2lkdWFscwoKYGBge3IgUmVzaWR1YWxzfQojcmVzaWR1YWwgcGxvdHMgb2YgYSB2YXJpZXR5IG9mIHRpbWVzCm9sc19wbG90X3Jlc2lkX2ZpdChtb2RlbDQpCm9sc19wbG90X3Jlc2lkX2hpc3QobW9kZWw0KQpvbHNfcGxvdF9yZXNpZF9zdHVkKG1vZGVsNCkKb2xzX3Bsb3RfcmVzaWRfbGV2KG1vZGVsNCwgdGhyZXNob2xkID0gMykKb2xzX3Bsb3RfY29va3NkX2NoYXJ0KG1vZGVsNCkKYGBgCgojIFByZWRpY3Rpb24KCmBgYHtyIFByZWRpY3Rpb24sIGluY2x1ZGUgPSBGfQojZm9yIGZkaW5naW5nIG1lZGlhbiB2YWx1ZXMKc3VtbWFyeShjb3JfZGF0YSkKCiNuZXcgZGF0YSBmcmFtZSBmb3IgdGhlIG1lZGlhbiBnYW1lCm5ld2RhdGE9ZGF0YS5mcmFtZShmaWVsZF9nb2FsX3BjdD00NC40MCwgdG90YWxfcmVib3VuZHM9MzQuMDAsIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0PTMzLjMwLCBzdGVhbHM9Ni41MCkKCiNwcmVkaWNpdG5nIG1lZGlhbiBnYW1lCnByZWRpY3Rpb24gPSBwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsPS45NSkKYGBgCkkgYnVpbHQgdGhpcyBtb2RlbCB0byBwcmVkaWN0IG15IHRlYW0ncyBwb2ludHMgZm9yIGEgZ2FtZSBpbiB3aGljaCB0aGV5IGFjaGlldmUgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gVGhlIHByZWRpY3RlZCB0ZWFtIHNjb3JlIGlzIGByIHByZWRpY3Rpb25bMV1gLCB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFsIChgciBwcmVkaWN0aW9uWzJdYCwgYHIgcHJlZGljdGlvblszXWApLgoKICAgICA=