This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

```r
plot(cars)

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


Add a new chunk by clicking the *Insert Chunk* button on the toolbar or by pressing *Ctrl+Alt+I*.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the *Preview* button or press *Ctrl+Shift+K* to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike *Knit*, *Preview* does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.


<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuMSsxXG5cbmBgYFxuYGBgIn0= -->

```r
```r
1+1

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDJcbiJ9 -->

[1] 2




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuNC8yXG5cbmBgYFxuYGBgIn0= -->

```r
```r
4/2

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDJcbiJ9 -->

[1] 2




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubG9nKDIpI05hdHJ1YWwgbG9nXG5cbmBgYFxuYGBgIn0= -->

```r
```r
log(2)#Natrual log

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuNjkzMTQ3MlxuIn0= -->

[1] 0.6931472




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


# Question 1 log 10

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubG9nMTAoMTApXG5cbmBgYFxuYGBgIn0= -->

```r
```r
log10(10)

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDFcbiJ9 -->

[1] 1




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubG9nKDEwLDUpXG5cbmBgYFxuYGBgIn0= -->

```r
```r
log(10,5)

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDEuNDMwNjc3XG4ifQ== -->

[1] 1.430677




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubG9nKDEwLDEwKVxuYGBgXG5gYGAifQ== -->

```r
```r
log(10,10)

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDFcbiJ9 -->

[1] 1




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubG9nKDEwMCw0KVxuYGBgXG5gYGAifQ== -->

```r
```r
log(100,4)

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDMuMzIxOTI4XG4ifQ== -->

[1] 3.321928




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->





<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuQkE9MTI5LzQxMlxuQkFcblxuYGBgXG5gYGAifQ== -->

```r
```r
BA=129/412
BA

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuMzEzMTA2OFxuIn0= -->

[1] 0.3131068




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuIyBBbHRlcm5hdGl2ZSBTb2x1dGlvblxuTl9oaXRzPTEyOVxuQXRfQmF0cz00MTJcbkJBPC1OX2hpdHMvQXRfQmF0c1xuQkFcbmBgYFxuYGBgIn0= -->

```r
```r
# Alternative Solution
N_hits=129
At_Bats=412
BA<-N_hits/At_Bats
BA

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuMzEzMTA2OFxuIn0= -->

[1] 0.3131068




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuQmF0dGluZ19BdmVyYWdlPXJvdW5kKEJBLCBkaWdpdC0zKVxuYGBgXG5gYGAifQ== -->

```r
```r
Batting_Average=round(BA, digit-3)

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiRXJyb3I6IG9iamVjdCAnZGlnaXQnIG5vdCBmb3VuZFxuIn0= -->

Error: object ‘digit’ not found




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->

**Question_2:What is the batting average of a player that bats 42 hits in 212 at bats?**

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuYGBge3J9XG5cbmBgYFxuYGBgIn0= -->

```r
```r
```{r}

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiRXJyb3I6IGF0dGVtcHQgdG8gdXNlIHplcm8tbGVuZ3RoIHZhcmlhYmxlIG5hbWVcbiJ9 -->

Error: attempt to use zero-length variable name




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->



<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuT0JQPSgxNzIrODQrNSkvKDUxNSs4NCs1KzYpXG5PQlBcblxuYGBgXG5gYGAifQ== -->

```r
```r
OBP=(172+84+5)/(515+84+5+6)
OBP

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuNDI3ODY4OVxuIn0= -->

[1] 0.4278689




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuT0JQX0Fkaj1yb3VuZChPQlAsIGRpZ2l0cz0zKVxuT0JQX0FkalxuYGBgXG5gYGAifQ== -->

```r
```r
OBP_Adj=round(OBP, digits=3)
OBP_Adj

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuNDI4XG4ifQ== -->

[1] 0.428




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->

#Question_3:Compute the OBP for a player with the following general stats:
#AB=565,H=156,BB=65,HBP=3,SF=7

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuT0JQPSgxNTYrNjUrMykvKDU2NSs2NSszKzE1Nis3KVxuT0JQX2FkPXJvdW5kKE9CUCxkaWdpdHMgPSAzKVxuT0JQX2FkXG5cbmBgYFxuYGBgIn0= -->

```r
```r
OBP=(156+65+3)/(565+65+3+156+7)
OBP_ad=round(OBP,digits = 3)
OBP_ad

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIDAuMjgxXG4ifQ== -->

[1] 0.281




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->

**Often you will want to test whether something is less than, greater than or equal to something**

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuMyA9PSA4IyBEb2VzIDMgZXF1YWxzIDg/XG5cbmBgYFxuYGBgIn0= -->

```r
```r
3 == 8# Does 3 equals 8?

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIEZBTFNFXG4ifQ== -->

[1] FALSE




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuMyAhPSA4IyBJcyAzIGRpZmZlcmVudCBmcm9tIDg/XG5gYGBcbmBgYCJ9 -->

```r
```r
3 != 8# Is 3 different from 8?

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIFRSVUVcbiJ9 -->

[1] TRUE




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuMyA8PSA4IyBJcyAzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA4P1xuYGBgXG5gYGAifQ== -->

```r
```r
3 <= 8# Is 3 less than or equal to 8?

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIFRSVUVcbiJ9 -->

[1] TRUE




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuMz40XG5gYGBcbmBgYCJ9 -->

```r
```r
3>4

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiWzFdIEZBTFNFXG4ifQ== -->

[1] FALSE




<!-- rnb-output-end -->

<!-- rnb-chunk-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuIyBMb2dpY2FsIERpc2p1bmN0aW9uIChvcilcbkZBTFNFIHwgRkFMU0UgIyBGYWxzZSBPUiBGYWxzZVxuXG5gYGAifQ== -->

```r
# Logical Disjunction (or)
FALSE | FALSE # False OR False
[1] FALSE
# Logical Conjunction (and)
TRUE & FALSE #True AND False
[1] FALSE
# Negation
! FALSE # Not False
[1] TRUE
# Combination of statements
2 < 3 | 1 == 5 # 2<3 is True, 1==5 is False, True OR False is True
[1] TRUE
Total_Bases <- 6 + 5
Total_Bases*3
[1] 33
ls()
 [1] "At_Bats"            "BA"                 "Batting_Average"    "hits_per_9innings" 
 [5] "N_hits"             "N_Hits"             "OBP"                "OBP_ad"            
 [9] "OBP_Adj"            "pitches_by_innings" "run_per_9innings"   "strikes_by_innings"
[13] "Total_Bases"       
ls()
[1] "At_Bats"         "BA"              "Batting_Average" "N_hits"         
[5] "N_Hits"          "OBP"             "OBP_ad"          "OBP_Adj"        
pitches_by_innings<-c(12,15,10,20,10)
pitches_by_innings
[1] 12 15 10 20 10
strikes_by_innings<-c(6,12,8,14,9)
strikes_by_innings
[1]  6 12  8 14  9

#Question #4 define two vectors, runs_per_9innings and hits_per_9innings, each with five elements

run_per_9innings<-c(1,3,2,1,6)
run_per_9innings
[1] 1 3 2 1 6
hits_per_9innings<-c(6,12,8,10,15)
hits_per_9innings
[1]  6 12  8 10 15
rep(2,5)
[1] 2 2 2 2 2
rep(3,3)
[1] 3 3 3
1:6
[1] 1 2 3 4 5 6
2:7
[1] 2 3 4 5 6 7
seq(1,10, by=3)
[1]  1  4  7 10
seq(2,13, by=3)
[1]  2  5  8 11
#adding vectors 
pitches_by_innings+strikes_by_innings#+ operator
[1] 18 24 12 28 18
#compare the two vectors
pitches_by_innings
[1] 12 15 10 20 10
strikes_by_innings
[1]  9 12  6 14  9
pitches_by_innings==strikes_by_innings
[1] FALSE FALSE FALSE FALSE FALSE
length(pitches_by_innings)
[1] 5
min(pitches_by_innings)
[1] 10
mean(pitches_by_innings)
[1] 13.4
pitches_by_innings[1]
[1] 12

#Question_5: Get the first element of hits_per_9innings.

hits_per_9innings[1]
[1] 6

#Question_6: Get the last element of hits_per_9innings.

hits_per_9innings[5]
[1] 15
pitches_by_innings
[1] 12 15 10 20 10
pitches_by_innings[c(1:3)]
[1] 12 15 10

#Formatting a new vector categoring an element

player_positions<-c("catcher","pitcher","infielders","outfielders")
player_positions
[1] "catcher"     "pitcher"     "infielders"  "outfielders"

*Data Frames

*Using Tables

x<-c("Yes","No","No","Yes","Yes")
table(x)
x
 No Yes 
  2   3 

Numerical measures and center of spread

ceo_salaries<-c(12,.4,2,50,8,3,1,4,.25)
mean(ceo_salaries)
[1] 8.961111
var(ceo_salaries)
[1] 251.9386
sd(ceo_salaries)
[1] 15.87257
median(ceo_salaries)
[1] 3
fivenum(ceo_salaries)
[1]  0.25  1.00  3.00  8.00 50.00
getMode<-function(x) {
    ux <-unique(x)
    ux[which.max(tabulate(match(x,ux)))]
}
pitches_by_innings
[1] 12 15 10 20 10
getMode(pitches_by_innings)
[1] 10

#Question_7: Find the most frequent value of hits_per_9innings.

getMode(hits_per_9innings)
[1] 6
#Question_8: Summarize the following survey with the `table()` command:
#What is your favorite day of the week to watch baseball? A total of 10 fans submitted this survey.
#Saturday, Saturday, Sunday, Monday, Saturday,Tuesday, Sunday, Friday, Friday, Monday
game_day<-c("Saturday", "Saturday", "Sunday", "Monday", "Saturday","Tuesday", "Sunday", "Friday", "Friday", "Monday")
getMode(game_day)
[1] "Saturday"
LS0tDQpOYW1lOiBPc2NhciBBbGV4YW5kZXIgVG9iYXINCiNJbiBjbGFzcyBhY3Rpdml0eTogNA0KI0NvdXJzZTpDQVA0OTM2LTIyNTMtNDI4Mg0KdGl0bGU6ICJSIE5vdGVib29rIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gDQoNCmBgYHtyfQ0KcGxvdChjYXJzKQ0KYGBgDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQoNClRoZSBwcmV2aWV3IHNob3dzIHlvdSBhIHJlbmRlcmVkIEhUTUwgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gQ29uc2VxdWVudGx5LCB1bmxpa2UgKktuaXQqLCAqUHJldmlldyogZG9lcyBub3QgcnVuIGFueSBSIGNvZGUgY2h1bmtzLiBJbnN0ZWFkLCB0aGUgb3V0cHV0IG9mIHRoZSBjaHVuayB3aGVuIGl0IHdhcyBsYXN0IHJ1biBpbiB0aGUgZWRpdG9yIGlzIGRpc3BsYXllZC4NCg0KYGBge3J9DQoxKzENCmBgYA0KYGBge3J9DQo0LzINCmBgYA0KYGBge3J9DQpsb2coMikjTmF0cnVhbCBsb2cNCmBgYA0KDQojIFF1ZXN0aW9uIDEgbG9nIDEwDQpgYGB7cn0NCmxvZzEwKDEwKQ0KYGBgDQpgYGB7cn0NCmxvZygxMCw1KQ0KbG9nKDEwLDEwKQ0KbG9nKDEwMCw0KQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiNCYXR0aW5nIEF2ZXJhZ2U9KE5vLiBvZiBoaXRzKS8oTm8uIG9mIEF0IEJhdHMpDQojV2hhdCBpcyB0aGUgYmF0dGluZyBhdmVyYWdlIG9mIGEgcGxheWVyIHRoYXQgYmF0cyAxMjkgaGl0cyBpbiA0MTIgYXQgYmF0cw0KQkE9MTI5LzQxMg0KQkENCiMgQWx0ZXJuYXRpdmUgU29sdXRpb24NCk5faGl0cz0xMjkNCkF0X0JhdHM9NDEyDQpCQTwtTl9oaXRzL0F0X0JhdHMNCkJBDQpCYXR0aW5nX0F2ZXJhZ2U9cm91bmQoQkEsIGRpZ2l0cz0zKQ0KQmF0dGluZ19BdmVyYWdlDQpgYGANCioqUXVlc3Rpb25fMjpXaGF0IGlzIHRoZSBiYXR0aW5nIGF2ZXJhZ2Ugb2YgYSBwbGF5ZXIgdGhhdCBiYXRzIDQyIGhpdHMgaW4gMjEyIGF0IGJhdHM/KioNCmBgYHtyfQ0KI0Fuc3dlcnMgDQpOX0hpdHM9NDINCkF0X0JhdHM9MjEyDQpCYXRfQXZlcmFnZTwtTl9IaXRzL0F0X0JhdHMNCkJhdHRpbmdBdmVyZ2FnaW5nDQpgYGANCg0KYGBge3J9DQojT24gQmFzZSBQZXJjZW50YWdlDQojT0JQPShIK0JCK0hCUCkvKEF0IEJhdHMrQkIrSEJQK1NGKQ0KI0xldCB1cyBjb21wdXRlIHRoZSBPQlAgZm9yIGEgcGxheWVyIHdpdGggdGhlIGZvbGxvd2luZyBnZW5lcmFsIHN0YXRzDQojQUI9NTE1LEg9MTcyLEJCPTg0LEhCUD01LFNGPTYNCk9CUD0oMTcyKzg0KzUpLyg1MTUrODQrNSs2KQ0KT0JQDQpPQlBfQWRqPXJvdW5kKE9CUCwgZGlnaXRzPTMpDQpPQlBfQWRqDQpgYGANCiNRdWVzdGlvbl8zOkNvbXB1dGUgdGhlIE9CUCBmb3IgYSBwbGF5ZXIgd2l0aCB0aGUgZm9sbG93aW5nIGdlbmVyYWwgc3RhdHM6DQojQUI9NTY1LEg9MTU2LEJCPTY1LEhCUD0zLFNGPTcNCmBgYHtyfQ0KT0JQPSgxNTYrNjUrMykvKDU2NSs2NSszKzE1Nis3KQ0KT0JQX2FkPXJvdW5kKE9CUCxkaWdpdHMgPSAzKQ0KT0JQX2FkDQpgYGANCioqT2Z0ZW4geW91IHdpbGwgd2FudCB0byB0ZXN0IHdoZXRoZXIgc29tZXRoaW5nIGlzIGxlc3MgdGhhbiwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNvbWV0aGluZyoqDQpgYGB7cn0NCjMgPT0gOCMgRG9lcyAzIGVxdWFscyA4Pw0KMyAhPSA4IyBJcyAzIGRpZmZlcmVudCBmcm9tIDg/DQozIDw9IDgjIElzIDMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDg/DQozPjQNCmBgYA0KYGBge3J9DQojIExvZ2ljYWwgRGlzanVuY3Rpb24gKG9yKQ0KRkFMU0UgfCBGQUxTRSAjIEZhbHNlIE9SIEZhbHNlDQpgYGANCg0KYGBge3J9DQojIExvZ2ljYWwgQ29uanVuY3Rpb24gKGFuZCkNClRSVUUgJiBGQUxTRSAjVHJ1ZSBBTkQgRmFsc2UNCmBgYA0KYGBge3J9DQojIE5lZ2F0aW9uDQohIEZBTFNFICMgTm90IEZhbHNlDQpgYGANCmBgYHtyfQ0KIyBDb21iaW5hdGlvbiBvZiBzdGF0ZW1lbnRzDQoyIDwgMyB8IDEgPT0gNSAjIDI8MyBpcyBUcnVlLCAxPT01IGlzIEZhbHNlLCBUcnVlIE9SIEZhbHNlIGlzIFRydWUNCmBgYA0KDQpgYGB7cn0NClRvdGFsX0Jhc2VzIDwtIDYgKyA1DQpUb3RhbF9CYXNlcyozDQpscygpDQpgYGANCmBgYHtyfQ0Kcm0oVG90YWxfQmFzZXMpDQpgYGANCg0KDQpgYGB7cn0NCnJtKHRvdGFsX2Jhc2VzKQ0KbHMoKQ0KYGBgDQpgYGB7cn0NCnBpdGNoZXNfYnlfaW5uaW5nczwtYygxMiwxNSwxMCwyMCwxMCkNCnBpdGNoZXNfYnlfaW5uaW5ncw0KYGBgDQpgYGB7cn0NCnN0cmlrZXNfYnlfaW5uaW5nczwtYyg5LDEyLDYsMTQsOSkNCnN0cmlrZXNfYnlfaW5uaW5ncw0KYGBgDQojUXVlc3Rpb24gIzQgZGVmaW5lIHR3byB2ZWN0b3JzLCBydW5zX3Blcl85aW5uaW5ncyBhbmQgaGl0c19wZXJfOWlubmluZ3MsIGVhY2ggd2l0aCBmaXZlIGVsZW1lbnRzDQpgYGB7cn0NCnJ1bl9wZXJfOWlubmluZ3M8LWMoMSwzLDIsMSw2KQ0KcnVuX3Blcl85aW5uaW5ncw0KYGBgDQpgYGB7cn0NCmhpdHNfcGVyXzlpbm5pbmdzPC1jKDYsMTIsOCwxMCwxNSkNCmhpdHNfcGVyXzlpbm5pbmdzDQpgYGANCmBgYHtyfQ0KcmVwKDIsNSkNCmBgYA0KYGBge3J9DQpyZXAoMywzKQ0KYGBgDQpgYGB7cn0NCjE6Ng0KYGBgDQpgYGB7cn0NCjI6Nw0KYGBgDQpgYGB7cn0NCnNlcSgxLDEwLCBieT0zKQ0KYGBgDQpgYGB7cn0NCnNlcSgyLDEzLCBieT0zKQ0KYGBgDQoNCmBgYHtyfQ0KI2FkZGluZyB2ZWN0b3JzIA0KcGl0Y2hlc19ieV9pbm5pbmdzK3N0cmlrZXNfYnlfaW5uaW5ncyMrIG9wZXJhdG9yDQpgYGANCmBgYHtyfQ0KI2NvbXBhcmUgdGhlIHR3byB2ZWN0b3JzDQpwaXRjaGVzX2J5X2lubmluZ3MNCnN0cmlrZXNfYnlfaW5uaW5ncw0KcGl0Y2hlc19ieV9pbm5pbmdzPT1zdHJpa2VzX2J5X2lubmluZ3MNCmBgYA0KYGBge3J9DQpsZW5ndGgocGl0Y2hlc19ieV9pbm5pbmdzKQ0KYGBgDQoNCmBgYHtyfQ0KbWluKHBpdGNoZXNfYnlfaW5uaW5ncykNCmBgYA0KYGBge3J9DQptZWFuKHBpdGNoZXNfYnlfaW5uaW5ncykNCmBgYA0KYGBge3J9DQpwaXRjaGVzX2J5X2lubmluZ3NbMV0NCmBgYA0KI1F1ZXN0aW9uXzU6IEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBoaXRzX3Blcl85aW5uaW5ncy4NCmBgYHtyfQ0KaGl0c19wZXJfOWlubmluZ3NbMV0NCmBgYA0KI1F1ZXN0aW9uXzY6IEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGhpdHNfcGVyXzlpbm5pbmdzLg0KYGBge3J9DQpoaXRzX3Blcl85aW5uaW5nc1s1XQ0KYGBgDQoNCmBgYHtyfQ0KcGl0Y2hlc19ieV9pbm5pbmdzDQpwaXRjaGVzX2J5X2lubmluZ3NbYygxOjMpXQ0KYGBgDQojRm9ybWF0dGluZyBhIG5ldyB2ZWN0b3IgY2F0ZWdvcmluZyBhbiBlbGVtZW50IA0KYGBge3J9DQpwbGF5ZXJfcG9zaXRpb25zPC1jKCJjYXRjaGVyIiwicGl0Y2hlciIsImluZmllbGRlcnMiLCJvdXRmaWVsZGVycyIpDQpwbGF5ZXJfcG9zaXRpb25zDQpgYGANCioqKkRhdGEgRnJhbWVzKioNCmBgYHtyfQ0KZGF0YS5mcmFtZShib3Vucz1jKDIsMywxKSxhY3RpdmVfcm9zdGVyPWMoInllcyIsIk5vIiwiWWVzIiksc2FsYXJ5PWMoMS41LDIuNSwxKSkNCmBgYA0KKioqVXNpbmcgVGFibGVzKioNCg0KYGBge3J9DQp4PC1jKCJZZXMiLCJObyIsIk5vIiwiWWVzIiwiWWVzIikNCnRhYmxlKHgpDQpgYGANCioqTnVtZXJpY2FsIG1lYXN1cmVzIGFuZCBjZW50ZXIgb2Ygc3ByZWFkKioNCmBgYHtyfQ0KY2VvX3NhbGFyaWVzPC1jKDEyLC40LDIsNTAsOCwzLDEsNCwuMjUpDQptZWFuKGNlb19zYWxhcmllcykNCmBgYA0KDQpgYGB7cn0NCnZhcihjZW9fc2FsYXJpZXMpDQpgYGANCmBgYHtyfQ0Kc2QoY2VvX3NhbGFyaWVzKQ0KYGBgDQpgYGB7cn0NCm1lZGlhbihjZW9fc2FsYXJpZXMpDQpgYGANCg0KYGBge3J9DQpmaXZlbnVtKGNlb19zYWxhcmllcykNCmBgYA0KDQpgYGB7cn0NCiNSdW4gdGhpcyANCmdldE1vZGU8LWZ1bmN0aW9uKHgpIHsNCiAgICB1eCA8LXVuaXF1ZSh4KQ0KICAgIHV4W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh4LHV4KSkpXQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KcGl0Y2hlc19ieV9pbm5pbmdzDQpnZXRNb2RlKHBpdGNoZXNfYnlfaW5uaW5ncykNCmBgYA0KI1F1ZXN0aW9uXzc6IEZpbmQgdGhlIG1vc3QgZnJlcXVlbnQgdmFsdWUgb2YgaGl0c19wZXJfOWlubmluZ3MuDQpgYGB7cn0NCmdldE1vZGUoaGl0c19wZXJfOWlubmluZ3MpDQpgYGANCg0KYGBge3J9DQojUXVlc3Rpb25fODogU3VtbWFyaXplIHRoZSBmb2xsb3dpbmcgc3VydmV5IHdpdGggdGhlIGB0YWJsZSgpYCBjb21tYW5kOg0KI1doYXQgaXMgeW91ciBmYXZvcml0ZSBkYXkgb2YgdGhlIHdlZWsgdG8gd2F0Y2ggYmFzZWJhbGw/IEEgdG90YWwgb2YgMTAgZmFucyBzdWJtaXR0ZWQgdGhpcyBzdXJ2ZXkuDQojU2F0dXJkYXksIFNhdHVyZGF5LCBTdW5kYXksIE1vbmRheSwgU2F0dXJkYXksVHVlc2RheSwgU3VuZGF5LCBGcmlkYXksIEZyaWRheSwgTW9uZGF5DQpnYW1lX2RheTwtYygiU2F0dXJkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5IiwgIk1vbmRheSIsICJTYXR1cmRheSIsIlR1ZXNkYXkiLCAiU3VuZGF5IiwgIkZyaWRheSIsICJGcmlkYXkiLCAiTW9uZGF5IikNCg0KI1F1ZXN0aW9uXzk6IFdoYXQgaXMgdGhlIG1vc3QgZnJlcXVlbnQgYW5zd2VyIHJlY29yZGVkIGluIHRoZSBzdXJ2ZXk/IFVzZSB0aGUgZ2V0TW9kZSBmdW5jdGlvbiB0byBjb21wdXRlIHJlc3VsdHMuIA0KZ2V0TW9kZShnYW1lX2RheSkNCmBgYA0KDQo=