## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.0.6 ✓ dplyr 1.0.4
## ✓ tidyr 1.1.2 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
Kobe_basket <-glimpse(kobe_basket)
## Rows: 133
## Columns: 6
## $ vs <fct> ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, OR…
## $ game <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ quarter <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, …
## $ time <fct> 9:47, 9:07, 8:11, 7:41, 7:03, 6:01, 4:07, 0:52, 0:00, 6:3…
## $ description <fct> Kobe Bryant makes 4-foot two point shot, Kobe Bryant miss…
## $ shot <chr> "H", "M", "M", "H", "H", "M", "M", "M", "M", "H", "H", "H…
Exercise 1: What does a streak length of 1 mean, i.e. how many hits and misses are in a streak of 1? What about a streak length of 0
kobe_streak <- calc_streak(kobe_basket$shot)
now display the distribution of the streak lengths
ggplot(data = kobe_streak, aes(x = length)) +
geom_bar() + ggtitle("kobe_streak")

length of a shooting streak is the number of consecutive baskets made until a miss occurs. A streak length of 1 means one basket was made during the streak and is represented by the notation HM. A streak length of 0 means one attempt was made and the attempt failed. This is represented by the notation M.
Exercise 2
##the histogram above notes that approximately 40 streaks contain no baskets made (M), nearly 25 streaks contain one basket made (HM), approximately 6 streaks contain 2 baskets made (HHM), approximately 6 streaks contain 3 baskets made (HHH), and finally 2 streaks contain 4 baskets made (HHHH). His most common streak involves nearly 40 streaks with no baskets made. the greatest number of baskets – 4 baskets (HHHH) – occurred in only approximately 2 streaks.
###simulate the independent shooter (control group) in R.
### run coin example simulation x1 .
coin_outcomes <- c("heads", "tails")
sample(coin_outcomes, size = 1, replace = TRUE)
## [1] "tails"
now run coin example x 100
coin_outcomes <- c("heads", "tails")
sample(coin_outcomes, size = 100, replace = TRUE)
## [1] "heads" "heads" "tails" "heads" "tails" "heads" "heads" "tails" "heads"
## [10] "tails" "tails" "tails" "heads" "heads" "heads" "heads" "heads" "tails"
## [19] "tails" "tails" "tails" "heads" "heads" "heads" "tails" "heads" "tails"
## [28] "tails" "heads" "heads" "heads" "heads" "tails" "heads" "heads" "tails"
## [37] "heads" "heads" "heads" "heads" "tails" "tails" "tails" "tails" "heads"
## [46] "heads" "heads" "tails" "tails" "tails" "tails" "heads" "tails" "tails"
## [55] "heads" "tails" "heads" "heads" "tails" "tails" "heads" "heads" "heads"
## [64] "heads" "heads" "heads" "heads" "heads" "heads" "heads" "tails" "tails"
## [73] "heads" "heads" "heads" "tails" "tails" "heads" "heads" "tails" "heads"
## [82] "heads" "tails" "heads" "tails" "heads" "tails" "heads" "heads" "heads"
## [91] "tails" "tails" "tails" "tails" "tails" "heads" "tails" "tails" "heads"
## [100] "tails"
###now simulate flipping a fair coin x 100
sim_fair_coin <- sample(coin_outcomes, size = 100, replace = TRUE)
###now display the fair coin sim as a table
## [1] "heads" "tails" "heads" "heads" "heads" "tails" "tails" "heads" "heads"
## [10] "tails" "heads" "tails" "heads" "heads" "heads" "tails" "tails" "tails"
## [19] "tails" "tails" "heads" "heads" "heads" "heads" "heads" "tails" "tails"
## [28] "heads" "tails" "heads" "heads" "heads" "tails" "heads" "tails" "tails"
## [37] "heads" "heads" "heads" "tails" "tails" "heads" "heads" "tails" "heads"
## [46] "tails" "tails" "heads" "heads" "heads" "tails" "heads" "heads" "tails"
## [55] "heads" "tails" "heads" "heads" "tails" "tails" "heads" "heads" "heads"
## [64] "heads" "heads" "heads" "heads" "tails" "heads" "tails" "tails" "tails"
## [73] "heads" "tails" "heads" "heads" "heads" "heads" "heads" "tails" "tails"
## [82] "heads" "heads" "tails" "tails" "heads" "tails" "heads" "heads" "tails"
## [91] "heads" "heads" "tails" "heads" "tails" "heads" "tails" "heads" "tails"
## [100] "tails"
## sim_fair_coin
## heads tails
## 58 42
###simulate an unfair coin that land heads only 20% of the time.
sim_unfair_coin <- sample(coin_outcomes, size = 100, replace = TRUE, prob = c(0.2, 0.8))
## [1] "tails" "tails" "tails" "tails" "tails" "tails" "heads" "tails" "tails"
## [10] "tails" "tails" "tails" "tails" "heads" "tails" "tails" "tails" "tails"
## [19] "tails" "heads" "tails" "tails" "tails" "heads" "heads" "tails" "tails"
## [28] "heads" "tails" "tails" "tails" "tails" "heads" "tails" "tails" "tails"
## [37] "tails" "tails" "tails" "tails" "tails" "tails" "tails" "heads" "tails"
## [46] "heads" "tails" "tails" "tails" "heads" "tails" "tails" "tails" "tails"
## [55] "tails" "tails" "tails" "heads" "tails" "tails" "tails" "tails" "tails"
## [64] "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails" "tails"
## [73] "tails" "tails" "tails" "tails" "heads" "heads" "tails" "tails" "tails"
## [82] "tails" "tails" "tails" "tails" "heads" "tails" "tails" "tails" "tails"
## [91] "tails" "tails" "heads" "heads" "tails" "tails" "heads" "heads" "tails"
## [100] "heads"
## sim_unfair_coin
## heads tails
## 19 81
Exercise 3 In your simulation of flipping the unfair coin 100 times, how many flips came up heads? Include the code for sampling the unfair coin in your response. Since the markdown file will run the code, and generate a new sample each time you Knit it, you should also “set a seed” before you sample. Read more about setting a seed below.
the unfair coin simulation returned 19 heads and 81 tails. this is the code used #sim_unfair_coin table(sim_unfair_coin)
now simulate the Independent shooter
shot_outcomes <- c("H", "M")
sim_basket <- sample(shot_outcomes, size = 1, replace = TRUE)
## shot_outcomes
## H M
## 1 1
exercise 4 - What change needs to be made to the sample function so that it reflects a shooting percentage of 45%? Make this adjustment, then run a simulation to sample 133 shots. Assign the output of this simulation to a new object called sim_basket . To reflect a shooting % fo 0.45, we insert Prob fx and change the sample size to 133.
shot_outcomes <- c("H", "M")
sim_basket <- sample(shot_outcomes, size = 133, replace = TRUE, prob = c(0.45, 0.55))
## sim_basket
## H M
## 55 78
###now compare Kobe data to independent shooter(control grp).
###exercise 5 – Using calc_streak , compute the streak lengths of sim_basket , and save the results in a data frame called sim_streak .
independent_streak <- calc_streak(sim_basket)
sim_streak <-data.frame(sim_basket)
generate histogram of independent shooter streak
ggplot(data = independent_streak, aes(x = length)) +
geom_bar() + ggtitle("independent_streak")

###Exercise 6: Describe the distribution of streak lengths. What is the typical streak length for this simulated independent shooter with a 45% shooting percentage? How long is the player’s longest streak of baskets in 133 shots? Make sure to include a plot in your answer.
from above the definition of length of a shooting streak is the number of consecutive baskets made until a miss occurs. A streak length of 1 means one basket was made during the streak and is represented by the notation HM. A streak length of 0 means one attempt was made and the attempt failed. This is represented by the notation M.
###the histogram independent_streak notes that approximately 46 streaks contain no baskets made (M), nearly 19 streaks contain one basket made (HM), approximately 8 streaks contain 2 baskets made (HHM), approximately 4 streaks contain 3 baskets made (HHH), and finally 3 streaks contain 4 baskets made (HHHH). Most common streak for Independent_streak data involves nearly 46 streaks with no baskets made. the greatest number of baskets – 4 baskets (HHHH) – occurred in only approximately 3 streaks.
###Exercise 7 If you were to run the simulation of the independent shooter a second time, how would you expect its streak distribution to compare to the distribution from the question above? Exactly the same? Somewhat similar? Totally different? Explain your reasoning.
shot_outcomes_2 <- c("H", "M")
sim_basket <- sample(shot_outcomes_2, size = 133, replace = TRUE, prob = c(0.45, 0.55))
## sim_basket
## H M
## 63 70
independent_streak_2 <- calc_streak(sim_basket)
ggplot(data = independent_streak, aes(x = length)) +
geom_bar() + ggtitle("independent_streak_2")
### comparing the histograms independent_streak to independent_streak_2, we see similar distributions. At the parameters – H 0.45 and M 0.55 – where not changed from the independent_streak simulation this is not an unexpected outcome.
###Exercise 8 - How does Kobe Bryant’s distribution of streak lengths compare to the distribution of streak lengths for the simulated shooter? Using this comparison, do you have evidence that the hot hand model fits Kobe’s shooting patterns? Explain.
using this model to compare the Kobe data with the simulated independent shooter data, it does not appear that there are major differences. Both data sets are similar. Comparing the histograms for Kobe and Independent, both are skewed to the right. Both data sets, note that the most common streaks involved no baskets completed. this analysis does not convincingly show that Kobe’s performance from one shot to another is dependent. If success in completing baskets was dependent on the prior shot, then we should see more streaks of completed baskets in the data. Rather this data shows the opposite. Only few streaks occurred where a string of successful baskets occurred. I will note that I posted to Discord information that notes that subsequent research into the behavior of random sequences. Professors Joshua Miller and Adam Sanjurjo identified errors in the way the data was sampled that introduced bias into the original analysis by Gilovich, Vallone, and Tversky mentioned in the Probability Lab text. I suspect that lab as we follow it is introducing this same bias into our analysis.
LS0tCnRpdGxlOiAiU2NvdHRfUmVocmlnX01hdGggMjE3X3Byb2JhYmxpdHkgbGFiIgphdXRob3I6ICJTY290dF9yZWhyaWciCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQKLS0tCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkob3BlbmludHJvKQpgYGAKCmBgYHtyfQpzZXQuc2VlZCgzNTc5NykKYGBgCgpgYGB7cn0KS29iZV9iYXNrZXQgPC1nbGltcHNlKGtvYmVfYmFza2V0KQpgYGAKCiMjIyBFeGVyY2lzZSAxOiBXaGF0IGRvZXMgYSBzdHJlYWsgbGVuZ3RoIG9mIDEgbWVhbiwgaS5lLiBob3cgbWFueSBoaXRzIGFuZCBtaXNzZXMgYXJlIGluIGEgc3RyZWFrIG9mIDE/IFdoYXQgYWJvdXQgYSBzdHJlYWsgbGVuZ3RoIG9mIDAKCmBgYHtyfQprb2JlX3N0cmVhayA8LSBjYWxjX3N0cmVhayhrb2JlX2Jhc2tldCRzaG90KQpgYGAKCiMjIyBub3cgZGlzcGxheSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBzdHJlYWsgbGVuZ3RocwoKYGBge3J9CmdncGxvdChkYXRhID0ga29iZV9zdHJlYWssIGFlcyh4ID0gbGVuZ3RoKSkgKwogIGdlb21fYmFyKCkgKyBnZ3RpdGxlKCJrb2JlX3N0cmVhayIpCmBgYAoKIyMgbGVuZ3RoIG9mIGEgc2hvb3Rpbmcgc3RyZWFrIGlzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYmFza2V0cyBtYWRlIHVudGlsIGEgbWlzcyBvY2N1cnMuIEEgc3RyZWFrIGxlbmd0aCBvZiAxIG1lYW5zIG9uZSBiYXNrZXQgd2FzIG1hZGUgZHVyaW5nIHRoZSBzdHJlYWsgYW5kIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBub3RhdGlvbiBITS4gQSBzdHJlYWsgbGVuZ3RoIG9mIDAgbWVhbnMgb25lIGF0dGVtcHQgd2FzIG1hZGUgYW5kIHRoZSBhdHRlbXB0IGZhaWxlZC4gVGhpcyBpcyByZXByZXNlbnRlZCBieSB0aGUgbm90YXRpb24gTS4KCiMjIyBFeGVyY2lzZSAyCgpcI1wjdGhlIGhpc3RvZ3JhbSBhYm92ZSBub3RlcyB0aGF0IGFwcHJveGltYXRlbHkgNDAgc3RyZWFrcyBjb250YWluIG5vIGJhc2tldHMgbWFkZSAoTSksIG5lYXJseSAyNSBzdHJlYWtzIGNvbnRhaW4gb25lIGJhc2tldCBtYWRlIChITSksIGFwcHJveGltYXRlbHkgNiBzdHJlYWtzIGNvbnRhaW4gMiBiYXNrZXRzIG1hZGUgKEhITSksIGFwcHJveGltYXRlbHkgNiBzdHJlYWtzIGNvbnRhaW4gMyBiYXNrZXRzIG1hZGUgKEhISCksIGFuZCBmaW5hbGx5IDIgc3RyZWFrcyBjb250YWluIDQgYmFza2V0cyBtYWRlIChISEhIKS4gSGlzIG1vc3QgY29tbW9uIHN0cmVhayBpbnZvbHZlcyBuZWFybHkgNDAgc3RyZWFrcyB3aXRoIG5vIGJhc2tldHMgbWFkZS4gdGhlIGdyZWF0ZXN0IG51bWJlciBvZiBiYXNrZXRzIC0tIDQgYmFza2V0cyAoSEhISCkgLS0gb2NjdXJyZWQgaW4gb25seSBhcHByb3hpbWF0ZWx5IDIgc3RyZWFrcy4KClwjXCNcI3NpbXVsYXRlIHRoZSBpbmRlcGVuZGVudCBzaG9vdGVyIChjb250cm9sIGdyb3VwKSBpbiBSLlwKXCNcI1wjIHJ1biBjb2luIGV4YW1wbGUgc2ltdWxhdGlvbiB4MSAuCgpgYGB7cn0KY29pbl9vdXRjb21lcyA8LSBjKCJoZWFkcyIsICJ0YWlscyIpIAogICAgc2FtcGxlKGNvaW5fb3V0Y29tZXMsIHNpemUgPSAxLCByZXBsYWNlID0gVFJVRSkKYGBgCgojIyMgbm93IHJ1biBjb2luIGV4YW1wbGUgeCAxMDAKCmBgYHtyfQpjb2luX291dGNvbWVzIDwtIGMoImhlYWRzIiwgInRhaWxzIikgCiAgc2FtcGxlKGNvaW5fb3V0Y29tZXMsIHNpemUgPSAxMDAsIHJlcGxhY2UgPSBUUlVFKQpgYGAKClwjXCNcI25vdyBzaW11bGF0ZSBmbGlwcGluZyBhIGZhaXIgY29pbiB4IDEwMAoKYGBge3J9CnNpbV9mYWlyX2NvaW4gPC0gc2FtcGxlKGNvaW5fb3V0Y29tZXMsIHNpemUgPSAxMDAsIHJlcGxhY2UgPSBUUlVFKQpgYGAKClwjXCNcI25vdyBkaXNwbGF5IHRoZSBmYWlyIGNvaW4gc2ltIGFzIGEgdGFibGUKCmBgYHtyfQpzaW1fZmFpcl9jb2luIAogICAgdGFibGUoc2ltX2ZhaXJfY29pbikKYGBgCgpcI1wjXCNzaW11bGF0ZSBhbiB1bmZhaXIgY29pbiB0aGF0IGxhbmQgaGVhZHMgb25seSAyMCUgb2YgdGhlIHRpbWUuCgpgYGB7cn0Kc2ltX3VuZmFpcl9jb2luIDwtIHNhbXBsZShjb2luX291dGNvbWVzLCBzaXplID0gMTAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC4yLCAwLjgpKQpgYGAKCmBgYHtyfQpzaW1fdW5mYWlyX2NvaW4gCiAgICB0YWJsZShzaW1fdW5mYWlyX2NvaW4pCmBgYAoKIyMjIEV4ZXJjaXNlIDMgSW4geW91ciBzaW11bGF0aW9uIG9mIGZsaXBwaW5nIHRoZSB1bmZhaXIgY29pbiAxMDAgdGltZXMsIGhvdyBtYW55IGZsaXBzIGNhbWUgdXAgaGVhZHM/IEluY2x1ZGUgdGhlIGNvZGUgZm9yIHNhbXBsaW5nIHRoZSB1bmZhaXIgY29pbiBpbiB5b3VyIHJlc3BvbnNlLiBTaW5jZSB0aGUgbWFya2Rvd24gZmlsZSB3aWxsIHJ1biB0aGUgY29kZSwgYW5kIGdlbmVyYXRlIGEgbmV3IHNhbXBsZSBlYWNoIHRpbWUgeW91IEtuaXQgaXQsIHlvdSBzaG91bGQgYWxzbyAic2V0IGEgc2VlZCIgYmVmb3JlIHlvdSBzYW1wbGUuIFJlYWQgbW9yZSBhYm91dCBzZXR0aW5nIGEgc2VlZCBiZWxvdy4KCiMjIHRoZSB1bmZhaXIgY29pbiBzaW11bGF0aW9uIHJldHVybmVkIDE5IGhlYWRzIGFuZCA4MSB0YWlscy4gdGhpcyBpcyB0aGUgY29kZSB1c2VkIFwjc2ltX3VuZmFpcl9jb2luIHRhYmxlKHNpbV91bmZhaXJfY29pbikKCiMjIyBub3cgc2ltdWxhdGUgdGhlIEluZGVwZW5kZW50IHNob290ZXIKCmBgYHtyfQpzaG90X291dGNvbWVzIDwtIGMoIkgiLCAiTSIpCnNpbV9iYXNrZXQgPC0gc2FtcGxlKHNob3Rfb3V0Y29tZXMsIHNpemUgPSAxLCByZXBsYWNlID0gVFJVRSkKYGBgCgpgYGB7cn0KdGFibGUoc2hvdF9vdXRjb21lcykKYGBgCgojIyMgZXhlcmNpc2UgNCAtIFdoYXQgY2hhbmdlIG5lZWRzIHRvIGJlIG1hZGUgdG8gdGhlIHNhbXBsZSBmdW5jdGlvbiBzbyB0aGF0IGl0IHJlZmxlY3RzIGEgc2hvb3RpbmcgcGVyY2VudGFnZSBvZiA0NSU/IE1ha2UgdGhpcyBhZGp1c3RtZW50LCB0aGVuIHJ1biBhIHNpbXVsYXRpb24gdG8gc2FtcGxlIDEzMyBzaG90cy4gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBzaW11bGF0aW9uIHRvIGEgbmV3IG9iamVjdCBjYWxsZWQgc2ltX2Jhc2tldCAuICBUbyByZWZsZWN0IGEgc2hvb3RpbmcgJSBmbyAwLjQ1LCB3ZSBpbnNlcnQgUHJvYiBmeCBhbmQgY2hhbmdlIHRoZSBzYW1wbGUgc2l6ZSB0byAxMzMuCgpgYGB7cn0Kc2hvdF9vdXRjb21lcyA8LSBjKCJIIiwgIk0iKQpzaW1fYmFza2V0IDwtIHNhbXBsZShzaG90X291dGNvbWVzLCBzaXplID0gMTMzLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC40NSwgMC41NSkpCmBgYAoKYGBge3J9CnRhYmxlKHNpbV9iYXNrZXQpCmBgYAoKXCNcI1wjbm93IGNvbXBhcmUgS29iZSBkYXRhIHRvIGluZGVwZW5kZW50IHNob290ZXIoY29udHJvbCBncnApLgoKXCNcI1wjZXhlcmNpc2UgNSAtLSBVc2luZyBjYWxjX3N0cmVhayAsIGNvbXB1dGUgdGhlIHN0cmVhayBsZW5ndGhzIG9mIHNpbV9iYXNrZXQgLCBhbmQgc2F2ZSB0aGUgcmVzdWx0cyBpbiBhIGRhdGEgZnJhbWUgY2FsbGVkIHNpbV9zdHJlYWsgLgoKYGBge3J9CmluZGVwZW5kZW50X3N0cmVhayA8LSBjYWxjX3N0cmVhayhzaW1fYmFza2V0KQpgYGAKCmBgYHtyfQpzaW1fc3RyZWFrIDwtZGF0YS5mcmFtZShzaW1fYmFza2V0KQpgYGAKCgojIyBnZW5lcmF0ZSBoaXN0b2dyYW0gb2YgaW5kZXBlbmRlbnQgc2hvb3RlciBzdHJlYWsKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGluZGVwZW5kZW50X3N0cmVhaywgYWVzKHggPSBsZW5ndGgpKSArCiAgZ2VvbV9iYXIoKSArIGdndGl0bGUoImluZGVwZW5kZW50X3N0cmVhayIpCmBgYAoKXCNcI1wjKipFeGVyY2lzZSA2OioqIERlc2NyaWJlIHRoZSBkaXN0cmlidXRpb24gb2Ygc3RyZWFrIGxlbmd0aHMuIFdoYXQgaXMgdGhlIHR5cGljYWwgc3RyZWFrIGxlbmd0aCBmb3IgdGhpcyBzaW11bGF0ZWQgaW5kZXBlbmRlbnQgc2hvb3RlciB3aXRoIGEgNDUlIHNob290aW5nIHBlcmNlbnRhZ2U/IEhvdyBsb25nIGlzIHRoZSBwbGF5ZXIncyBsb25nZXN0IHN0cmVhayBvZiBiYXNrZXRzIGluIDEzMyBzaG90cz8gTWFrZSBzdXJlIHRvIGluY2x1ZGUgYSBwbG90IGluIHlvdXIgYW5zd2VyLgoKIyMjIyMgZnJvbSBhYm92ZSB0aGUgZGVmaW5pdGlvbiBvZiBsZW5ndGggb2YgYSBzaG9vdGluZyBzdHJlYWsgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiYXNrZXRzIG1hZGUgdW50aWwgYSBtaXNzIG9jY3Vycy4gQSBzdHJlYWsgbGVuZ3RoIG9mIDEgbWVhbnMgb25lIGJhc2tldCB3YXMgbWFkZSBkdXJpbmcgdGhlIHN0cmVhayBhbmQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIG5vdGF0aW9uIEhNLiBBIHN0cmVhayBsZW5ndGggb2YgMCBtZWFucyBvbmUgYXR0ZW1wdCB3YXMgbWFkZSBhbmQgdGhlIGF0dGVtcHQgZmFpbGVkLiBUaGlzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBub3RhdGlvbiBNLgoKIyMjdGhlIGhpc3RvZ3JhbSBpbmRlcGVuZGVudF9zdHJlYWsgbm90ZXMgdGhhdCBhcHByb3hpbWF0ZWx5IDQ2IHN0cmVha3MgY29udGFpbiBubyBiYXNrZXRzIG1hZGUgKE0pLCBuZWFybHkgMTkgc3RyZWFrcyBjb250YWluIG9uZSBiYXNrZXQgbWFkZSAoSE0pLCBhcHByb3hpbWF0ZWx5IDggc3RyZWFrcyBjb250YWluIDIgYmFza2V0cyBtYWRlIChISE0pLCBhcHByb3hpbWF0ZWx5IDQgc3RyZWFrcyBjb250YWluIDMgYmFza2V0cyBtYWRlIChISEgpLCBhbmQgZmluYWxseSAzIHN0cmVha3MgY29udGFpbiA0IGJhc2tldHMgbWFkZSAoSEhISCkuIE1vc3QgY29tbW9uIHN0cmVhayBmb3IgSW5kZXBlbmRlbnRfc3RyZWFrIGRhdGEgaW52b2x2ZXMgbmVhcmx5IDQ2IHN0cmVha3Mgd2l0aCBubyBiYXNrZXRzIG1hZGUuIHRoZSBncmVhdGVzdCBudW1iZXIgb2YgYmFza2V0cyAtLSA0IGJhc2tldHMgKEhISEgpIC0tIG9jY3VycmVkIGluIG9ubHkgYXBwcm94aW1hdGVseSAzIHN0cmVha3MuCgoKIyMjRXhlcmNpc2UgNyBJZiB5b3Ugd2VyZSB0byBydW4gdGhlIHNpbXVsYXRpb24gb2YgdGhlIGluZGVwZW5kZW50IHNob290ZXIgYSBzZWNvbmQgdGltZSwgaG93IHdvdWxkIHlvdSBleHBlY3QgaXRzIHN0cmVhayBkaXN0cmlidXRpb24gdG8gY29tcGFyZSB0byB0aGUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIHF1ZXN0aW9uIGFib3ZlPyBFeGFjdGx5IHRoZSBzYW1lPyBTb21ld2hhdCBzaW1pbGFyPyBUb3RhbGx5IGRpZmZlcmVudD8gRXhwbGFpbiB5b3VyIHJlYXNvbmluZy4KYGBge3J9CnNob3Rfb3V0Y29tZXNfMiA8LSBjKCJIIiwgIk0iKQpzaW1fYmFza2V0IDwtIHNhbXBsZShzaG90X291dGNvbWVzXzIsIHNpemUgPSAxMzMsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYygwLjQ1LCAwLjU1KSkKCmBgYAoKYGBge3J9CnRhYmxlKHNpbV9iYXNrZXQpCmBgYAoKYGBge3J9CmluZGVwZW5kZW50X3N0cmVha18yIDwtIGNhbGNfc3RyZWFrKHNpbV9iYXNrZXQpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gaW5kZXBlbmRlbnRfc3RyZWFrLCBhZXMoeCA9IGxlbmd0aCkpICsKICBnZW9tX2JhcigpICsgZ2d0aXRsZSgiaW5kZXBlbmRlbnRfc3RyZWFrXzIiKQpgYGAKIyMjIGNvbXBhcmluZyB0aGUgaGlzdG9ncmFtcyBpbmRlcGVuZGVudF9zdHJlYWsgdG8gaW5kZXBlbmRlbnRfc3RyZWFrXzIsIHdlIHNlZSBzaW1pbGFyIGRpc3RyaWJ1dGlvbnMuICBBdCB0aGUgcGFyYW1ldGVycyAtLSBIIDAuNDUgYW5kIE0gMC41NSAtLSAgd2hlcmUgbm90IGNoYW5nZWQgZnJvbSB0aGUgaW5kZXBlbmRlbnRfc3RyZWFrIHNpbXVsYXRpb24gdGhpcyBpcyBub3QgYW4gdW5leHBlY3RlZCBvdXRjb21lLiAgCgojIyNFeGVyY2lzZSA4IC0gSG93IGRvZXMgS29iZSBCcnlhbnTigJlzIGRpc3RyaWJ1dGlvbiBvZiBzdHJlYWsgbGVuZ3RocyBjb21wYXJlIHRvIHRoZSBkaXN0cmlidXRpb24gb2Ygc3RyZWFrIGxlbmd0aHMgZm9yIHRoZSBzaW11bGF0ZWQgc2hvb3Rlcj8gVXNpbmcgdGhpcyBjb21wYXJpc29uLCBkbyB5b3UgaGF2ZSBldmlkZW5jZSB0aGF0IHRoZSBob3QgaGFuZCBtb2RlbCBmaXRzIEtvYmXigJlzIHNob290aW5nIHBhdHRlcm5zPyBFeHBsYWluLgoKIyMjIHVzaW5nIHRoaXMgbW9kZWwgdG8gY29tcGFyZSB0aGUgS29iZSBkYXRhIHdpdGggdGhlIHNpbXVsYXRlZCBpbmRlcGVuZGVudCBzaG9vdGVyIGRhdGEsIGl0IGRvZXMgbm90IGFwcGVhciB0aGF0IHRoZXJlIGFyZSBtYWpvciBkaWZmZXJlbmNlcy4gQm90aCBkYXRhIHNldHMgYXJlIHNpbWlsYXIuICBDb21wYXJpbmcgdGhlIGhpc3RvZ3JhbXMgZm9yIEtvYmUgYW5kIEluZGVwZW5kZW50LCBib3RoIGFyZSBza2V3ZWQgdG8gdGhlIHJpZ2h0LiAgQm90aCBkYXRhIHNldHMsIG5vdGUgdGhhdCB0aGUgbW9zdCBjb21tb24gc3RyZWFrcyBpbnZvbHZlZCBubyBiYXNrZXRzIGNvbXBsZXRlZC4gdGhpcyBhbmFseXNpcyBkb2VzIG5vdCBjb252aW5jaW5nbHkgc2hvdyB0aGF0IEtvYmUncyBwZXJmb3JtYW5jZSBmcm9tIG9uZSBzaG90IHRvIGFub3RoZXIgaXMgZGVwZW5kZW50LiAgSWYgc3VjY2VzcyBpbiBjb21wbGV0aW5nIGJhc2tldHMgd2FzIGRlcGVuZGVudCBvbiB0aGUgcHJpb3Igc2hvdCwgdGhlbiB3ZSBzaG91bGQgc2VlIG1vcmUgc3RyZWFrcyBvZiBjb21wbGV0ZWQgYmFza2V0cyBpbiB0aGUgZGF0YS4gIFJhdGhlciB0aGlzIGRhdGEgc2hvd3MgdGhlIG9wcG9zaXRlLiAgT25seSBmZXcgc3RyZWFrcyBvY2N1cnJlZCB3aGVyZSBhIHN0cmluZyBvZiBzdWNjZXNzZnVsIGJhc2tldHMgb2NjdXJyZWQuICBJIHdpbGwgbm90ZSB0aGF0IEkgcG9zdGVkIHRvIERpc2NvcmQgaW5mb3JtYXRpb24gdGhhdCBub3RlcyB0aGF0IHN1YnNlcXVlbnQgcmVzZWFyY2ggaW50byB0aGUgYmVoYXZpb3Igb2YgcmFuZG9tIHNlcXVlbmNlcy4gIFByb2Zlc3NvcnMgSm9zaHVhIE1pbGxlciBhbmQgQWRhbSBTYW5qdXJqbyBpZGVudGlmaWVkIGVycm9ycyBpbiB0aGUgd2F5IHRoZSBkYXRhIHdhcyBzYW1wbGVkIHRoYXQgaW50cm9kdWNlZCBiaWFzIGludG8gdGhlIG9yaWdpbmFsIGFuYWx5c2lzIGJ5IEdpbG92aWNoLCBWYWxsb25lLCBhbmQgVHZlcnNreSBtZW50aW9uZWQgaW4gdGhlIFByb2JhYmlsaXR5IExhYiB0ZXh0LiAgSSBzdXNwZWN0IHRoYXQgbGFiIGFzIHdlIGZvbGxvdyBpdCBpcyBpbnRyb2R1Y2luZyB0aGlzIHNhbWUgYmlhcyBpbnRvIG91ciBhbmFseXNpcy4KCgoKCg==