# Home-runs so far
HR_before <- c(11, 13, 12)

# Average Number of Home-runs per season wanted
wanted_HR <- 20

# Number of seasons
n_seasons <- 4

# Needed Home-runs on season 4
x_4 <- n_seasons*wanted_HR - sum(HR_before)

# Minimum number of Home-runs needed by Robert
x_4
[1] 44
# Robert's performance
Robert_HRs <- c(11, 13, 12,44)

# Find mean
mean(Robert_HRs)
[1] 20

# Find standard deviation
sd(Robert_HRs)
[1] 16.02082

# Find the maximum number of home-runs during the four seasons period
max(Robert_HRs)
[1] 44
summary(Robert_HRs)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.00   11.75   12.50   20.00   20.75   44.00 

##Question 1

Now, you must complete the problem below which represents a similar case scenario. You may use the steps that we executed in Case-scenario 1 as a template for your solution.

This is the sixth season of outfielder Juan Soto in the majors. If during the first five seasons he received 79, 108,41,145, and 135 walks, how many does he need on this season for his overall number of walks per season to be at least 100?


# Home-runs so far
HR_before_Juan <- c(79, 108, 41, 145, 135)

# Average Number of Home-runs per season wanted
wanted_HR_Juan <- 100

# Number of seasons
n_seasons_Juan <- 6

# Needed Home-runs on season 6
x_6 <- n_seasons_Juan*wanted_HR_Juan - sum(HR_before_Juan)

# Minimum number of Home-runs needed by Robert
x_6
[1] 92

#Case-scenario 2

The average salary of 10 baseball players is 72,000 dollars a week and the average salary of 4 soccer players is 84,000. Find the mean salary of all 14 professional players.

##Solution

We can easily find the joined mean by adding both mean and dividing by the total number of people.

Let n1=10 denote the number of baseball players, and y1=72000 their mean salary. Let n2=4 the number of soccer players and y2=84000 their mean salary. Then the mean salary of all 16 individuals is: n1x1+n2x2n1+n2

We can compute this in R as follows:


n_1 <- 10
n_2 <- 4
y_1 <- 72000
y_2 <- 84000

# Mean salary overall
salary_ave <-  (n_1*y_1 + n_2*y_2)/(n_1+n_2)
salary_ave
[1] 75428.57

##Question 2

The average salary of 7 basketball players is 102,000 dollars a week and the average salary of 9 NFL players is 91,000. Find the mean salary of all 16 professional players.


n_1_bb <- 7
n_2_nfl <- 9

y_1_bb <- 102000 
y_2_nfl <- 91000

# Mean salary overall
salary_ave_2 <-  (n_1_bb*y_1_bb + n_2_nfl*y_2_nfl)/(n_1_bb+n_2_nfl)
salary_ave_2
[1] 95812.5

#Case-scenario 3

Find the mean,the median and the standard deviation.

What percentage of the data lies within one standard deviation of the mean?

What percentage of the data lies within two standard deviations of the mean?

What percent of the data lies within three standard deviations of the mean?

Draw a histogram to illustrate the data.

getwd()
[1] "/cloud/project/Sports Analytics"
#No directory error. I added the path native to my computer
#path_contract <- "C:\Users\17866\OneDrive\Desktop\Sports Analytics\Datasets\allcontracts.csv"
#contract_df <- read.csv(path_contract)

# Phased out the top and added allcontracts.csv to working directory
contract_length <- read.table("allcontracts.csv", header = TRUE, sep = ",")
contract_years <- contract_length$years

To find the mean and the standard deviation


# Mean 
contracts_mean  <- mean(contract_years)
contracts_mean
[1] 3.458918
# Median
contracts_median <- median(contract_years)
contracts_median
[1] 3
# Find number of observations
contracts_n <- length(contract_years)

# Find standard deviation
contracts_sd <- sd(contract_years)

contracts_sd
[1] 1.69686

What percentage of the data lies within one standard deviation of the mean?


contracts_w1sd <- sum((contract_years - contracts_mean)/contracts_sd < 1)/ contracts_n

# Percentage of observation within one standard deviation of the mean
contracts_w1sd
[1] 0.8416834

## Difference from empirical 
contracts_w1sd - 0.68
[1] 0.1616834

What percentage of the data lies within two standard deviations of the mean?


## Within 2 sd
contracts_w2sd <- sum((contract_years - contracts_mean)/ contracts_sd < 2)/contracts_n

contracts_w2sd
[1] 1

## Difference from empirical 
contracts_w2sd - 0.95
[1] 0.05

What percent of the data lies within three standard deviations of the mean?


## Within 3 sd 
contracts_w3sd <- sum((contract_years - contracts_mean)/ contracts_sd < 3)/contracts_n

contracts_w3sd
[1] 1
## Difference from empirical 
contracts_w3sd - 0.9973
[1] 0.0027

Draw a histogram

# Create histogram
hist(contract_years,xlab = "Years Left in Contract",col = "green",border = "red", xlim = c(0,8), ylim = c(0,225),
   breaks = 5)

Question 3

Use the skills learned in case scenario number 3 on one the following data sets. You may choose only one dataset. They are both available in Canvas.

triples_hit <- read.table("triples_hit.csv", header = TRUE, sep = ",")
triples_hit_total <- triples_hit$triples_hit

To find the mean and the standard deviation


# Mean 
triples_mean  <- mean(triples_hit_total)
triples_mean
[1] 4.96
# Median
triples_median <- median(triples_hit_total)
triples_median
[1] 5
# Find number of observations
triples_n <- length(triples_hit_total)

# Find standard deviation
triples_sd <- sd(triples_hit_total)

triples_sd
[1] 2.884721

What percentage of the data lies within one standard deviation of the mean?


triples_w1sd <- sum((triples_hit_total - triples_mean)/triples_sd < 1)/ triples_n

# Percentage of observation within one standard deviation of the mean
triples_w1sd
[1] 0.88

## Difference from empirical 
triples_w1sd - 0.68
[1] 0.2

What percentage of the data lies within two standard deviations of the mean?


## Within 2 sd
triples_w2sd <- sum((triples_hit_total - triples_mean)/ triples_sd < 2)/triples_n

triples_w2sd
[1] 0.93

## Difference from empirical 
triples_w2sd - 0.95  
[1] -0.02

What percent of the data lies within three standard deviations of the mean?


## Within 3 sd 
triples_w3sd <- sum((triples_hit_total - triples_mean)/ triples_sd < 3)/triples_n

triples_w3sd
[1] 0.98
## Difference from empirical 
triples_w3sd - 0.9973
[1] -0.0173

Draw a histogram

# Create histogram
hist(triples_hit_total,xlab = "Total Number of Triples",col = "blue",border = "red", xlim = c(0,8), ylim = c(0,225),
   breaks = 5)

LS0tCnRpdGxlOiAiSW4gQ2xhc3MgQWN0aXZpdHkgNSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQoKIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZSA8LSBjKDExLCAxMywgMTIpCgojIEF2ZXJhZ2UgTnVtYmVyIG9mIEhvbWUtcnVucyBwZXIgc2Vhc29uIHdhbnRlZAp3YW50ZWRfSFIgPC0gMjAKCiMgTnVtYmVyIG9mIHNlYXNvbnMKbl9zZWFzb25zIDwtIDQKCiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNAp4XzQgPC0gbl9zZWFzb25zKndhbnRlZF9IUiAtIHN1bShIUl9iZWZvcmUpCgojIE1pbmltdW0gbnVtYmVyIG9mIEhvbWUtcnVucyBuZWVkZWQgYnkgUm9iZXJ0CnhfNAoKYGBgCgoKYGBge3J9CiMgUm9iZXJ0J3MgcGVyZm9ybWFuY2UKUm9iZXJ0X0hScyA8LSBjKDExLCAxMywgMTIsNDQpCgojIEZpbmQgbWVhbgptZWFuKFJvYmVydF9IUnMpCgpgYGAKCgpgYGB7cn0KCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24Kc2QoUm9iZXJ0X0hScykKCmBgYAoKCmBgYHtyfQoKIyBGaW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBob21lLXJ1bnMgZHVyaW5nIHRoZSBmb3VyIHNlYXNvbnMgcGVyaW9kCm1heChSb2JlcnRfSFJzKQoKYGBgCgpgYGB7cn0KCnN1bW1hcnkoUm9iZXJ0X0hScykKCmBgYAoKIyNRdWVzdGlvbiAxCgpOb3csIHlvdSBtdXN0IGNvbXBsZXRlIHRoZSBwcm9ibGVtIGJlbG93IHdoaWNoIHJlcHJlc2VudHMgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8uIFlvdSBtYXkgdXNlIHRoZSBzdGVwcyB0aGF0IHdlIGV4ZWN1dGVkIGluIENhc2Utc2NlbmFyaW8gMSBhcyBhIHRlbXBsYXRlIGZvciB5b3VyIHNvbHV0aW9uLgoKVGhpcyBpcyB0aGUgc2l4dGggc2Vhc29uIG9mIG91dGZpZWxkZXIgSnVhbiBTb3RvIGluIHRoZSBtYWpvcnMuIElmIGR1cmluZyB0aGUgZmlyc3QgZml2ZSBzZWFzb25zIGhlIHJlY2VpdmVkIDc5LCAxMDgsNDEsMTQ1LCBhbmQgMTM1IHdhbGtzLCBob3cgbWFueSBkb2VzIGhlIG5lZWQgb24gdGhpcyBzZWFzb24gZm9yIGhpcyBvdmVyYWxsIG51bWJlciBvZiB3YWxrcyBwZXIgc2Vhc29uIHRvIGJlIGF0IGxlYXN0IDEwMD8KCmBgYHtyfQoKIyBIb21lLXJ1bnMgc28gZmFyCkhSX2JlZm9yZV9KdWFuIDwtIGMoNzksIDEwOCwgNDEsIDE0NSwgMTM1KQoKIyBBdmVyYWdlIE51bWJlciBvZiBIb21lLXJ1bnMgcGVyIHNlYXNvbiB3YW50ZWQKd2FudGVkX0hSX0p1YW4gPC0gMTAwCgojIE51bWJlciBvZiBzZWFzb25zCm5fc2Vhc29uc19KdWFuIDwtIDYKCiMgTmVlZGVkIEhvbWUtcnVucyBvbiBzZWFzb24gNgp4XzYgPC0gbl9zZWFzb25zX0p1YW4qd2FudGVkX0hSX0p1YW4gLSBzdW0oSFJfYmVmb3JlX0p1YW4pCgojIE1pbmltdW0gbnVtYmVyIG9mIEhvbWUtcnVucyBuZWVkZWQgYnkgUm9iZXJ0CnhfNgoKYGBgCgoKI0Nhc2Utc2NlbmFyaW8gMgoKVGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDEwIGJhc2ViYWxsIHBsYXllcnMgaXMgNzIsMDAwIGRvbGxhcnMgYSB3ZWVrIGFuZCB0aGUgYXZlcmFnZSBzYWxhcnkgb2YgNCBzb2NjZXIgcGxheWVycyBpcyA4NCwwMDAuIEZpbmQgdGhlIG1lYW4gc2FsYXJ5IG9mIGFsbCAxNCBwcm9mZXNzaW9uYWwgcGxheWVycy4KCiMjU29sdXRpb24KCldlIGNhbiBlYXNpbHkgZmluZCB0aGUgam9pbmVkIG1lYW4gYnkgYWRkaW5nIGJvdGggbWVhbiBhbmQgZGl2aWRpbmcgYnkgdGhlIHRvdGFsIG51bWJlciBvZiBwZW9wbGUuCgpMZXQgbjE9MTAgZGVub3RlIHRoZSBudW1iZXIgb2YgYmFzZWJhbGwgcGxheWVycywgYW5kIHkxPTcyMDAwIHRoZWlyIG1lYW4gc2FsYXJ5LgpMZXQgbjI9NCB0aGUgbnVtYmVyIG9mIHNvY2NlciBwbGF5ZXJzIGFuZCB5Mj04NDAwMCB0aGVpciBtZWFuIHNhbGFyeS4KVGhlbiB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IGluZGl2aWR1YWxzIGlzOiBuMXgxK24yeDJuMStuMgoKV2UgY2FuIGNvbXB1dGUgdGhpcyBpbiBSIGFzIGZvbGxvd3M6CmBgYHtyfQoKbl8xIDwtIDEwCm5fMiA8LSA0CnlfMSA8LSA3MjAwMAp5XzIgPC0gODQwMDAKCiMgTWVhbiBzYWxhcnkgb3ZlcmFsbApzYWxhcnlfYXZlIDwtICAobl8xKnlfMSArIG5fMip5XzIpLyhuXzErbl8yKQpzYWxhcnlfYXZlCgpgYGAKCiMjUXVlc3Rpb24gMgoKVGhlIGF2ZXJhZ2Ugc2FsYXJ5IG9mIDcgYmFza2V0YmFsbCBwbGF5ZXJzIGlzIDEwMiwwMDAgZG9sbGFycyBhIHdlZWsgYW5kIHRoZSBhdmVyYWdlIHNhbGFyeSBvZiA5IE5GTCBwbGF5ZXJzIGlzIDkxLDAwMC4gRmluZCB0aGUgbWVhbiBzYWxhcnkgb2YgYWxsIDE2IHByb2Zlc3Npb25hbCBwbGF5ZXJzLgoKYGBge3J9CgpuXzFfYmIgPC0gNwpuXzJfbmZsIDwtIDkKCnlfMV9iYiA8LSAxMDIwMDAgCnlfMl9uZmwgPC0gOTEwMDAKCiMgTWVhbiBzYWxhcnkgb3ZlcmFsbApzYWxhcnlfYXZlXzIgPC0gIChuXzFfYmIqeV8xX2JiICsgbl8yX25mbCp5XzJfbmZsKS8obl8xX2JiK25fMl9uZmwpCnNhbGFyeV9hdmVfMgoKYGBgCiNDYXNlLXNjZW5hcmlvIDMKCkZpbmQgdGhlIG1lYW4sdGhlIG1lZGlhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi4KCldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuPwoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwoKV2hhdCBwZXJjZW50IG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHRocmVlIHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdGhlIG1lYW4/CgpEcmF3IGEgaGlzdG9ncmFtIHRvIGlsbHVzdHJhdGUgdGhlIGRhdGEuCgoKYGBge3J9CmdldHdkKCkKYGBgCgpgYGB7cn0KI05vIGRpcmVjdG9yeSBlcnJvci4gSSBhZGRlZCB0aGUgcGF0aCBuYXRpdmUgdG8gbXkgY29tcHV0ZXIKI3BhdGhfY29udHJhY3QgPC0gIkM6XFVzZXJzXDE3ODY2XE9uZURyaXZlXERlc2t0b3BcU3BvcnRzIEFuYWx5dGljc1xEYXRhc2V0c1xhbGxjb250cmFjdHMuY3N2IgojY29udHJhY3RfZGYgPC0gcmVhZC5jc3YocGF0aF9jb250cmFjdCkKCiMgUGhhc2VkIG91dCB0aGUgdG9wIGFuZCBhZGRlZCBhbGxjb250cmFjdHMuY3N2IHRvIHdvcmtpbmcgZGlyZWN0b3J5CmNvbnRyYWN0X2xlbmd0aCA8LSByZWFkLnRhYmxlKCJhbGxjb250cmFjdHMuY3N2IiwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiKQpjb250cmFjdF95ZWFycyA8LSBjb250cmFjdF9sZW5ndGgkeWVhcnMKCmBgYAoKVG8gZmluZCB0aGUgbWVhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbgoKYGBge3J9CgojIE1lYW4gCmNvbnRyYWN0c19tZWFuICA8LSBtZWFuKGNvbnRyYWN0X3llYXJzKQpjb250cmFjdHNfbWVhbgoKIyBNZWRpYW4KY29udHJhY3RzX21lZGlhbiA8LSBtZWRpYW4oY29udHJhY3RfeWVhcnMpCmNvbnRyYWN0c19tZWRpYW4KCiMgRmluZCBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zCmNvbnRyYWN0c19uIDwtIGxlbmd0aChjb250cmFjdF95ZWFycykKCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KY29udHJhY3RzX3NkIDwtIHNkKGNvbnRyYWN0X3llYXJzKQoKY29udHJhY3RzX3NkCmBgYAoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4/CgpgYGB7cn0KCmNvbnRyYWN0c193MXNkIDwtIHN1bSgoY29udHJhY3RfeWVhcnMgLSBjb250cmFjdHNfbWVhbikvY29udHJhY3RzX3NkIDwgMSkvIGNvbnRyYWN0c19uCgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KY29udHJhY3RzX3cxc2QKCmBgYAoKCmBgYHtyfQoKIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCAKY29udHJhY3RzX3cxc2QgLSAwLjY4CgpgYGAKCldoYXQgcGVyY2VudGFnZSBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiB0d28gc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8KCmBgYHtyfQoKIyMgV2l0aGluIDIgc2QKY29udHJhY3RzX3cyc2QgPC0gc3VtKChjb250cmFjdF95ZWFycyAtIGNvbnRyYWN0c19tZWFuKS8gY29udHJhY3RzX3NkIDwgMikvY29udHJhY3RzX24KCmNvbnRyYWN0c193MnNkCmBgYAoKCmBgYHtyfQoKIyMgRGlmZmVyZW5jZSBmcm9tIGVtcGlyaWNhbCAKY29udHJhY3RzX3cyc2QgLSAwLjk1CgpgYGAKCldoYXQgcGVyY2VudCBvZiB0aGUgZGF0YSBsaWVzIHdpdGhpbiB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwpgYGB7cn0KCiMjIFdpdGhpbiAzIHNkIApjb250cmFjdHNfdzNzZCA8LSBzdW0oKGNvbnRyYWN0X3llYXJzIC0gY29udHJhY3RzX21lYW4pLyBjb250cmFjdHNfc2QgPCAzKS9jb250cmFjdHNfbgoKY29udHJhY3RzX3czc2QKCmBgYAoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIApjb250cmFjdHNfdzNzZCAtIDAuOTk3MwpgYGAKCkRyYXcgYSBoaXN0b2dyYW0KCmBgYHtyfQojIENyZWF0ZSBoaXN0b2dyYW0KaGlzdChjb250cmFjdF95ZWFycyx4bGFiID0gIlllYXJzIExlZnQgaW4gQ29udHJhY3QiLGNvbCA9ICJncmVlbiIsYm9yZGVyID0gInJlZCIsIHhsaW0gPSBjKDAsOCksIHlsaW0gPSBjKDAsMjI1KSwKICAgYnJlYWtzID0gNSkKYGBgClF1ZXN0aW9uIDMKClVzZSB0aGUgc2tpbGxzIGxlYXJuZWQgaW4gY2FzZSBzY2VuYXJpbyBudW1iZXIgMyBvbiBvbmUgdGhlIGZvbGxvd2luZyBkYXRhIHNldHMuIFlvdSBtYXkgY2hvb3NlIG9ubHkgb25lIGRhdGFzZXQuIFRoZXkgYXJlIGJvdGggYXZhaWxhYmxlIGluIENhbnZhcy4KCmBgYHtyfQp0cmlwbGVzX2hpdCA8LSByZWFkLnRhYmxlKCJ0cmlwbGVzX2hpdC5jc3YiLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiLCIpCnRyaXBsZXNfaGl0X3RvdGFsIDwtIHRyaXBsZXNfaGl0JHRyaXBsZXNfaGl0CmBgYAoKClRvIGZpbmQgdGhlIG1lYW4gYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24KCmBgYHtyfQoKIyBNZWFuIAp0cmlwbGVzX21lYW4gIDwtIG1lYW4odHJpcGxlc19oaXRfdG90YWwpCnRyaXBsZXNfbWVhbgoKIyBNZWRpYW4KdHJpcGxlc19tZWRpYW4gPC0gbWVkaWFuKHRyaXBsZXNfaGl0X3RvdGFsKQp0cmlwbGVzX21lZGlhbgoKIyBGaW5kIG51bWJlciBvZiBvYnNlcnZhdGlvbnMKdHJpcGxlc19uIDwtIGxlbmd0aCh0cmlwbGVzX2hpdF90b3RhbCkKCiMgRmluZCBzdGFuZGFyZCBkZXZpYXRpb24KdHJpcGxlc19zZCA8LSBzZCh0cmlwbGVzX2hpdF90b3RhbCkKCnRyaXBsZXNfc2QKYGBgCgpXaGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gb25lIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVhbj8KCmBgYHtyfQoKdHJpcGxlc193MXNkIDwtIHN1bSgodHJpcGxlc19oaXRfdG90YWwgLSB0cmlwbGVzX21lYW4pL3RyaXBsZXNfc2QgPCAxKS8gdHJpcGxlc19uCgojIFBlcmNlbnRhZ2Ugb2Ygb2JzZXJ2YXRpb24gd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4KdHJpcGxlc193MXNkCgpgYGAKCgpgYGB7cn0KCiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCnRyaXBsZXNfdzFzZCAtIDAuNjgKCmBgYAoKV2hhdCBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIGxpZXMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuPwoKYGBge3J9CgojIyBXaXRoaW4gMiBzZAp0cmlwbGVzX3cyc2QgPC0gc3VtKCh0cmlwbGVzX2hpdF90b3RhbCAtIHRyaXBsZXNfbWVhbikvIHRyaXBsZXNfc2QgPCAyKS90cmlwbGVzX24KCnRyaXBsZXNfdzJzZApgYGAKCgpgYGB7cn0KCiMjIERpZmZlcmVuY2UgZnJvbSBlbXBpcmljYWwgCnRyaXBsZXNfdzJzZCAtIDAuOTUgIAoKYGBgCgpXaGF0IHBlcmNlbnQgb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdGhyZWUgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0aGUgbWVhbj8KYGBge3J9CgojIyBXaXRoaW4gMyBzZCAKdHJpcGxlc193M3NkIDwtIHN1bSgodHJpcGxlc19oaXRfdG90YWwgLSB0cmlwbGVzX21lYW4pLyB0cmlwbGVzX3NkIDwgMykvdHJpcGxlc19uCgp0cmlwbGVzX3czc2QKCmBgYAoKCmBgYHtyfQojIyBEaWZmZXJlbmNlIGZyb20gZW1waXJpY2FsIAp0cmlwbGVzX3czc2QgLSAwLjk5NzMKYGBgCgpEcmF3IGEgaGlzdG9ncmFtCgpgYGB7cn0KIyBDcmVhdGUgaGlzdG9ncmFtCmhpc3QodHJpcGxlc19oaXRfdG90YWwseGxhYiA9ICJUb3RhbCBOdW1iZXIgb2YgVHJpcGxlcyIsY29sID0gImJsdWUiLGJvcmRlciA9ICJyZWQiLCB4bGltID0gYygwLDgpLCB5bGltID0gYygwLDIyNSksCiAgIGJyZWFrcyA9IDUpCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=