A. Creating Vectors

In this section, you are expected to be able to shape data in vectors, perform basic mathematical operations, and also manipulate vectors.

Exercise 1

Create a vector A containing numeric values, starting from the last 2 digits of your student id up to 30.

##  [1] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Exercise 2

Create a vector B containing 12 character values; all names of your classmate including yourself.

##  [1] "sherly"  "kefas"   "jeffry"  "julian"  "vanessa" "angel"   "nikita" 
##  [8] "ardifo"  "siana"   "lala"    "fallen"  "jocelyn"

Exercise 3

Create a vector C containing 12 numeric values, random number between 60 and 100.

##  [1] 74.17966 77.20349 85.75552 91.68635 63.67599 88.29406 98.92189 64.17309
##  [9] 66.66394 88.03700 91.59677 96.42593

B. Creating Matrices

In this section, you are expected to be able to shape data in Matrices, perform basic mathematical operations, and also manipulate Matrices.

Exercise 4

Create a matrices M1 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 60 and 100.

##          [,1]     [,2]     [,3]     [,4]
## [1,] 60.29262 75.61034 67.63119 71.84788
## [2,] 85.93878 99.48133 69.38620 71.81203
## [3,] 91.20837 77.05708 85.58754 90.72147
## [4,] 99.86933 73.96220 66.65561 77.23401

Exercise 5

Create a matrices M2 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 30 and 60. Find out the following tasks:

  • 3 * M1, give your opinion about the result.
  • M1 + M2, give your opinion about the result.
  • M1 - M2, give your opinion about the result.
  • M1 * M2, give your opinion about the result.
  • M1 / M2, give your opinion about the result.
  • determinan of M1, give your opinion about the result.
  • invers of M1, give your opinion about the result.
##          [,1]     [,2]     [,3]     [,4]
## [1,] 54.35386 32.53674 52.42905 47.45018
## [2,] 39.63872 43.24592 37.28960 48.14137
## [3,] 36.36820 44.06140 43.81385 52.34423
## [4,] 49.70138 48.26752 49.55326 30.76793
##          [,1]     [,2]     [,3]     [,4]
## [1,] 180.8778 226.8310 202.8936 215.5436
## [2,] 257.8164 298.4440 208.1586 215.4361
## [3,] 273.6251 231.1712 256.7626 272.1644
## [4,] 299.6080 221.8866 199.9668 231.7020
##          [,1]     [,2]     [,3]     [,4]
## [1,] 114.6465 108.1471 120.0602 119.2981
## [2,] 125.5775 142.7273 106.6758 119.9534
## [3,] 127.5766 121.1185 129.4014 143.0657
## [4,] 149.5707 122.2297 116.2089 108.0019
##           [,1]     [,2]     [,3]     [,4]
## [1,]  5.938754 43.07360 15.20214 24.39770
## [2,] 46.300065 56.23541 32.09660 23.67066
## [3,] 54.840174 32.99568 41.77369 38.37724
## [4,] 50.167942 25.69468 17.10236 46.46608
##          [,1]     [,2]     [,3]     [,4]
## [1,] 3277.137 2460.114 3545.839 3409.195
## [2,] 3406.503 4302.162 2587.383 3457.130
## [3,] 3317.085 3395.243 3749.920 4748.746
## [4,] 4963.644 3569.972 3303.003 2376.330
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.109261 2.323845 1.289956 1.514175
## [2,] 2.168051 2.300363 1.860739 1.491691
## [3,] 2.507915 1.748857 1.953436 1.733170
## [4,] 2.009387 1.532339 1.345131 2.510212
## [1] -444793
##             [,1]        [,2]        [,3]        [,4]
## [1,] -0.05152178  0.01820845  0.02123411  0.00605634
## [2,]  0.02482237  0.01580245 -0.03520345  0.00356666
## [3,] -0.15099149  0.08646208  0.16573403 -0.13460695
## [4,]  0.17316152 -0.11329765 -0.13677933  0.11787124

Exercise 6

Create a matrix data that is contain the following vectors:

  • B that you has been created in the exercise 2. Name it as a ‘names’ variable
  • C that you has been created in the exercise 3. Name it as a ‘scores’ variable.
##       names     scores            
##  [1,] "sherly"  "74.1796553414315"
##  [2,] "kefas"   "77.2034906595945"
##  [3,] "jeffry"  "85.7555165607482"
##  [4,] "julian"  "91.6863452177495"
##  [5,] "vanessa" "63.6759854387492"
##  [6,] "angel"   "88.2940642070025"
##  [7,] "nikita"  "98.9218910224736"
##  [8,] "ardifo"  "64.1730893123895"
##  [9,] "siana"   "66.6639427188784"
## [10,] "lala"    "88.0369957443327"
## [11,] "fallen"  "91.5967671852559"
## [12,] "jocelyn" "96.425931090489"

C. Lists

In this section, you are expected to be able to shape data by using the list() function, perform some basic manipulations.

Exercise 7

Please create a data set as the List variable by using the list() function, contain the following vectors:

  • a variable name, the values including your classmate and yourself
  • a variable age, the values including your classmate and yourself
  • a variable gender, the values including your classmate and yourself
## [[1]]
##  [1] "sherly"  "kefas"   "jeffry"  "julian"  "vanessa" "angel"   "nikita" 
##  [8] "ardifo"  "siana"   "lala"    "fallen"  "jocelyn"
## 
## [[2]]
##  [1] 19 19 19 19 18 19 18 19 19 19 21 19
## 
## [[3]]
##  [1] "female" "male"   "male"   "male"   "female" "female" "female" "male"  
##  [9] "female" "female" "male"   "female"

D. Factors

In this section, you are expected to be able to shape data by using the factor() function, perform some basic manipulations.

Exercise 8

Please create a data set as the Factor variable as you have done at Exercise 7. Here, you add one more variable called marital_status by using the factor() function, as the following code:

##  [1] yes no  yes no  yes no  yes no  yes no  yes no 
## Levels: no yes
## [[1]]
##  [1] "sherly"  "kefas"   "jeffry"  "julian"  "vanessa" "angel"   "nikita" 
##  [8] "ardifo"  "siana"   "lala"    "fallen"  "jocelyn"
## 
## [[2]]
##  [1] 19 19 19 19 18 19 18 19 19 19 21 19
## 
## [[3]]
##  [1] "female" "male"   "male"   "male"   "female" "female" "female" "male"  
##  [9] "female" "female" "male"   "female"
## 
## [[4]]
##  [1] yes no  yes no  yes no  yes no  yes no  yes no 
## Levels: no yes

E. Data Frames

In this section, you are expected to be able to shape data by using the data.frame() function, perform some basic manipulations.

Exercise 9

Please create a data set as the DF1 variable, contain the following vectors:

  • id, assume 1 up to 6
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
##   id    name gender age marital_status address_by_city
## 1  1   angel female  19            yes       tangerang
## 2  2  julian   male  20             no       tangerang
## 3  3 vanessa female  18            yes          maluku
## 4  4  sherly female  19             no         jakarta
## 5  5  jeffry   male  19            yes       tangerang
## 6  6 jocelyn female  19             no       tangerang

Please create a data set as the DF2 variable, contain the following vectors:

  • id, assume 7 up to 12
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
##   id   name gender age marital_status address_by_city
## 1  7  kefas   male  19            yes       tangerang
## 2  8 nikita female  19             no       tangerang
## 3  9 ardifo   male  19            yes          kaltim
## 4 10 fallen   male  21             no         jakarta
## 5 11    ayu female  20            yes       tangerang
## 6 12  siana female  19             no       tangerang

Exercise 10

In this final exercise, please consider the following tasks:

  • Combine DF1 and DF2, assign it as SB19 variable!
  • Print the result of data frame SB19!
  • Print first 3 rows of the SB19 dataset!
  • How can you preview the SB19 dataset like an Excel file on your Rstudio?
  • Review the structure of the data frame SB19!
  • Check the dimension of the data.
  • Please apply piping functions to the data frame SB19, filter it by their gender accordingly! (as you have learn last week)
##    id    name gender age marital_status address_by_city
## 1   1   angel female  19            yes       tangerang
## 2   2  julian   male  20             no       tangerang
## 3   3 vanessa female  18            yes          maluku
## 4   4  sherly female  19             no         jakarta
## 5   5  jeffry   male  19            yes       tangerang
## 6   6 jocelyn female  19             no       tangerang
## 7   7   kefas   male  19            yes       tangerang
## 8   8  nikita female  19             no       tangerang
## 9   9  ardifo   male  19            yes          kaltim
## 10 10  fallen   male  21             no         jakarta
## 11 11     ayu female  20            yes       tangerang
## 12 12   siana female  19             no       tangerang
##   id    name gender age marital_status address_by_city
## 1  1   angel female  19            yes       tangerang
## 2  2  julian   male  20             no       tangerang
## 3  3 vanessa female  18            yes          maluku
## [1] "data.frame"
## 'data.frame':    12 obs. of  6 variables:
##  $ id             : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ name           : chr  "angel" "julian" "vanessa" "sherly" ...
##  $ gender         : chr  "female" "male" "female" "female" ...
##  $ age            : num  19 20 18 19 19 19 19 19 19 21 ...
##  $ marital_status : chr  "yes" "no" "yes" "no" ...
##  $ address_by_city: chr  "tangerang" "tangerang" "maluku" "jakarta" ...
## [1] 12  6

Piping

Filter (untuk memunculkan data yang sesuai dengan beberapa argumen / variable values)

## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
##   id   name gender age marital_status address_by_city
## 1  2 julian   male  20             no       tangerang
## 2  5 jeffry   male  19            yes       tangerang
## 3  7  kefas   male  19            yes       tangerang
## 4  9 ardifo   male  19            yes          kaltim
## 5 10 fallen   male  21             no         jakarta
##   id    name gender age marital_status address_by_city
## 1  1   angel female  19            yes       tangerang
## 2  3 vanessa female  18            yes          maluku
## 3  4  sherly female  19             no         jakarta
## 4  6 jocelyn female  19             no       tangerang
## 5  8  nikita female  19             no       tangerang
## 6 11     ayu female  20            yes       tangerang
## 7 12   siana female  19             no       tangerang

Karena yang diminta hanya filter gender, jadi bisa menggunakan subset juga.

Subset (untuk memunculkan data dengan argumen tertentu)

##    id   name gender age marital_status address_by_city
## 2   2 julian   male  20             no       tangerang
## 5   5 jeffry   male  19            yes       tangerang
## 7   7  kefas   male  19            yes       tangerang
## 9   9 ardifo   male  19            yes          kaltim
## 10 10 fallen   male  21             no         jakarta
##    id    name gender age marital_status address_by_city
## 1   1   angel female  19            yes       tangerang
## 3   3 vanessa female  18            yes          maluku
## 4   4  sherly female  19             no         jakarta
## 6   6 jocelyn female  19             no       tangerang
## 8   8  nikita female  19             no       tangerang
## 11 11     ayu female  20            yes       tangerang
## 12 12   siana female  19             no       tangerang
LS0tDQp0aXRsZTogIkxhYjM6IFIgQmFzaWNzIg0KYXV0aG9yOiAiU2hlcmx5IFRhdXJpbiBTaXJpZGlvbiAtIDIwMTk0OTIwMDExIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQpgYGB7ciBMb2dvLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzQwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9naXRodWIuY29tL0Jha3RpLVNpcmVnYXIvaW1hZ2VzL2Jsb2IvbWFzdGVyL2xvZ28ucG5nP3Jhdz10cnVlIikNCmBgYA0KDQoNCiMjIEEuIENyZWF0aW5nIFZlY3RvcnMgDQoNCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgaW4gdmVjdG9ycywgcGVyZm9ybSBiYXNpYyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucywgYW5kIGFsc28gbWFuaXB1bGF0ZSB2ZWN0b3JzLg0KDQojIyMgRXhlcmNpc2UgMQ0KDQpDcmVhdGUgYSB2ZWN0b3IgYEFgIGNvbnRhaW5pbmcgbnVtZXJpYyB2YWx1ZXMsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QgMiBkaWdpdHMgb2YgeW91ciBzdHVkZW50IGlkIHVwIHRvIDMwLg0KDQpgYGB7cn0NCkEgPC0gYygxMTozMCkNCkENCmBgYA0KDQojIyMgRXhlcmNpc2UgMg0KDQpDcmVhdGUgYSB2ZWN0b3IgYEJgIGNvbnRhaW5pbmcgMTIgY2hhcmFjdGVyIHZhbHVlczsgYWxsIG5hbWVzIG9mIHlvdXIgY2xhc3NtYXRlIGluY2x1ZGluZyB5b3Vyc2VsZi4NCg0KYGBge3J9DQpCIDwtIGMoInNoZXJseSIsImtlZmFzIiwiamVmZnJ5IiwianVsaWFuIiwidmFuZXNzYSIsImFuZ2VsIiwibmlraXRhIiwiYXJkaWZvIiwic2lhbmEiLCJsYWxhIiwiZmFsbGVuIiwiam9jZWx5biIpICANCkINCmBgYA0KDQojIyMgRXhlcmNpc2UgMw0KDQpDcmVhdGUgYSB2ZWN0b3IgIGBDYCBjb250YWluaW5nIDEyIG51bWVyaWMgdmFsdWVzLCByYW5kb20gbnVtYmVyIGJldHdlZW4gNjAgYW5kIDEwMC4NCg0KYGBge3J9DQpDIDwtIHJ1bmlmKDEyLDYwLDEwMCkNCkMNCmBgYA0KDQojIyBCLiBDcmVhdGluZyBNYXRyaWNlcyANCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBpbiBNYXRyaWNlcywgcGVyZm9ybSBiYXNpYyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucywgYW5kIGFsc28gbWFuaXB1bGF0ZSBNYXRyaWNlcy4NCg0KDQojIyMgRXhlcmNpc2UgNA0KDQpDcmVhdGUgYSBtYXRyaWNlcyBgTTFgIG9yZGVyIGJ5ICRyb3dzIFx0aW1lcyBjb2x1bW5zIFxzcGFjZSAoNCBcdGltZXMgNCkkIGNvbnRhaW5pbmcgMTYgbnVtZXJpYyB2YWx1ZXMsIHJhbmRvbSBudW1iZXIgYmV0d2VlbiA2MCBhbmQgMTAwLg0KDQpgYGB7cn0NCmEgPC0gcnVuaWYoMTYsNjAsMTAwKQ0KTTEgPC0gbWF0cml4KGEsIG5yb3c9NCwgbmNvbD00KSAgDQpNMQ0KYGBgDQoNCg0KIyMjIEV4ZXJjaXNlIDUNCg0KQ3JlYXRlIGEgbWF0cmljZXMgYE0yYCBvcmRlciBieSAkcm93cyBcdGltZXMgY29sdW1ucyBcc3BhY2UgKDQgXHRpbWVzIDQpJCBjb250YWluaW5nIDE2IG51bWVyaWMgdmFsdWVzLCByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDYwLiBGaW5kIG91dCB0aGUgZm9sbG93aW5nIHRhc2tzOg0KDQoqIGAzICogTTFgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0LiANCiogYE0xICsgTTJgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0LiANCiogYE0xIC0gTTJgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0Lg0KKiBgTTEgKiBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBgTTEgLyBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBkZXRlcm1pbmFuIG9mIGBNMWAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBpbnZlcnMgb2YgYE0xYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4NCg0KDQpgYGB7cn0NCmIgPC0gcnVuaWYoMTYsMzAsNjApDQpNMiA8LSBtYXRyaXgoYiwgbnJvdyA9IDQsIG5jb2wgPSA0KSANCk0yDQoNCjMgKiBNMSAgICAgICNNZW5nYWxpa2FuIGFuZ2thIDMgZGVuZ2FuIE1hdHJpa3MgTTENCk0xICsgTTIgICAgICNNZW5qdW1sYWhrYW4gTWF0cmlrcyBNMSBkYW4gTTINCk0xIC0gTTIgICAgICNNZW5ndXJhbmdrYW4gTWF0cmlrcyBNMSBkYW4gTTINCk0xICogTTIgICAgICNNZW5nYWxpa2FuIE1hdHJpa3MgTTEgZGFuIE0yDQpNMSAvIE0yICAgICAjTWVtYmFnaWthbiBNYXRyaWtzIE0xIGRhbiBNMg0KZGV0KE0xKSAgICAgI01lbmNhcmkgZGV0ZXJtaW5hbiBkYXJpIE0xDQoNCmxpYnJhcnkobWF0bGliKQ0KDQppbnYoTTEpICAgICAjTWVuY2FyaSBJbnZlcnNlIGRhcmkgTTENCmBgYA0KDQojIyMgRXhlcmNpc2UgNg0KDQpDcmVhdGUgYSBtYXRyaXggYGRhdGFgIHRoYXQgaXMgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6DQoNCiogYEJgIHRoYXQgeW91IGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIGV4ZXJjaXNlIDIuIE5hbWUgaXQgYXMgYSAnbmFtZXMnIHZhcmlhYmxlDQoqIGBDYCB0aGF0IHlvdSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBleGVyY2lzZSAzLiBOYW1lIGl0IGFzIGEgJ3Njb3JlcycgdmFyaWFibGUuDQoNCmBgYHtyfQ0KbmFtZXMgPC0gQg0Kc2NvcmVzIDwtIEMNCmRhdGEgPC0gY2JpbmQobmFtZXMsc2NvcmVzKQ0KZGF0YQ0KYGBgDQoNCg0KIyMgQy4gTGlzdHMgDQoNCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgYnkgdXNpbmcgdGhlIGBsaXN0KClgIGZ1bmN0aW9uLCBwZXJmb3JtIHNvbWUgYmFzaWMgbWFuaXB1bGF0aW9ucy4NCg0KDQojIyMgRXhlcmNpc2UgNw0KDQpQbGVhc2UgY3JlYXRlIGEgZGF0YSBzZXQgYXMgdGhlIGBMaXN0YCB2YXJpYWJsZSBieSB1c2luZyB0aGUgYGxpc3QoKWAgZnVuY3Rpb24sIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOg0KDQoqIGEgdmFyaWFibGUgYG5hbWVgLCB0aGUgdmFsdWVzIGluY2x1ZGluZyB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYSB2YXJpYWJsZSBgYWdlYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGEgdmFyaWFibGUgYGdlbmRlcmAsIHRoZSB2YWx1ZXMgaW5jbHVkaW5nIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KDQpgYGB7cn0NCm5hbWUgPC0gYygic2hlcmx5Iiwia2VmYXMiLCJqZWZmcnkiLCJqdWxpYW4iLCJ2YW5lc3NhIiwiYW5nZWwiLCJuaWtpdGEiLCJhcmRpZm8iLCJzaWFuYSIsImxhbGEiLCJmYWxsZW4iLCJqb2NlbHluIikNCmFnZSA8LSBjKDE5LCAxOSwgMTksIDE5LCAxOCwgMTksIDE4LCAxOSwgMTksIDE5LCAyMSwgMTkpDQpnZW5kZXIgPC0gYygiZmVtYWxlIiwibWFsZSIsIm1hbGUiLCJtYWxlIiwiZmVtYWxlIiwiZmVtYWxlIiwiZmVtYWxlIiwibWFsZSIsImZlbWFsZSIsImZlbWFsZSIsIm1hbGUiLCJmZW1hbGUiKQ0KTGlzdCA8LSBsaXN0KG5hbWUsIGFnZSwgZ2VuZGVyKQ0KTGlzdA0KYGBgDQoNCg0KIyMgRC4gRmFjdG9ycw0KDQpJbiB0aGlzIHNlY3Rpb24sIHlvdSBhcmUgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBzaGFwZSBkYXRhIGJ5IHVzaW5nIHRoZSBgZmFjdG9yKClgIGZ1bmN0aW9uLCBwZXJmb3JtIHNvbWUgYmFzaWMgbWFuaXB1bGF0aW9ucy4NCg0KDQojIyMgRXhlcmNpc2UgOA0KDQpQbGVhc2UgY3JlYXRlIGEgZGF0YSBzZXQgYXMgdGhlIGBGYWN0b3JgIHZhcmlhYmxlIGFzIHlvdSBoYXZlIGRvbmUgYXQgRXhlcmNpc2UgNy4gSGVyZSwgeW91IGFkZCBvbmUgbW9yZSB2YXJpYWJsZSBjYWxsZWQgYG1hcml0YWxfc3RhdHVzYCBieSB1c2luZyB0aGUgYGZhY3RvcigpYCBmdW5jdGlvbiwgYXMgdGhlIGZvbGxvd2luZyBjb2RlOg0KDQpgYGB5YW1sDQptYXJpdGFsX3N0YXR1cyA8LSBmYWN0b3IoYygieWVzIiwibm8iLCJ5ZXMiLCJubyIsIHVudGlsIDEyIHN0dWRlbnRzKSkNCmBgYA0KDQpgYGB7cn0NCm1hcml0YWxfc3RhdHVzIDwtIGZhY3RvcihjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iLCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iKSkNCm1hcml0YWxfc3RhdHVzDQoNCkZhY3RvciA8LSBMaXN0DQpGYWN0b3JbWzRdXSA8LSBtYXJpdGFsX3N0YXR1cw0KRmFjdG9yDQpgYGANCg0KDQojIyBFLiBEYXRhIEZyYW1lcw0KDQpJbiB0aGlzIHNlY3Rpb24sIHlvdSBhcmUgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBzaGFwZSBkYXRhIGJ5IHVzaW5nIHRoZSBgZGF0YS5mcmFtZSgpYCBmdW5jdGlvbiwgcGVyZm9ybSBzb21lIGJhc2ljIG1hbmlwdWxhdGlvbnMuDQoNCg0KIyMjIEV4ZXJjaXNlIDkNCg0KUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgREYxYCB2YXJpYWJsZSwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6DQoNCiogYGlkYCwgYXNzdW1lIDEgdXAgdG8gNg0KKiBgbmFtZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBnZW5kZXJgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgYWdlYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYG1hcml0YWxfc3RhdHVzYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGFkZHJlc3NfYnlfY2l0eWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoNCmBgYHtyfQ0KREYxIDwtIGRhdGEuZnJhbWUoaWQgPSBjKDE6NiksDQogICAgICAgICAgICAgICAgICBuYW1lID0gYygiYW5nZWwiLCJqdWxpYW4iLCJ2YW5lc3NhIiwic2hlcmx5IiwiamVmZnJ5Iiwiam9jZWx5biIpLA0KICAgICAgICAgICAgICAgICAgZ2VuZGVyID0gYygiZmVtYWxlIiwibWFsZSIsImZlbWFsZSIsImZlbWFsZSIsIm1hbGUiLCJmZW1hbGUiKSwNCiAgICAgICAgICAgICAgICAgIGFnZSA9IGMoMTksMjAsMTgsMTksMTksMTkpLA0KICAgICAgICAgICAgICAgICAgbWFyaXRhbF9zdGF0dXMgPSBjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iKSwNCiAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnlfY2l0eSA9IGMgKCJ0YW5nZXJhbmciLCJ0YW5nZXJhbmciLCJtYWx1a3UiLCJqYWthcnRhIiwidGFuZ2VyYW5nIiwidGFuZ2VyYW5nIiksc3RyaW5nc0FzRmFjdG9ycyA9IEYpDQpERjEgICAgICAgICAgICAgICAgICANCmBgYA0KDQpQbGVhc2UgY3JlYXRlIGEgZGF0YSBzZXQgYXMgdGhlIGBERjJgIHZhcmlhYmxlLCBjb250YWluIHRoZSBmb2xsb3dpbmcgdmVjdG9yczoNCg0KKiBgaWRgLCBhc3N1bWUgNyB1cCB0byAxMg0KKiBgbmFtZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBnZW5kZXJgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgYWdlYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYG1hcml0YWxfc3RhdHVzYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGFkZHJlc3NfYnlfY2l0eWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoNCmBgYHtyfQ0KREYyIDwtIGRhdGEuZnJhbWUoaWQgPSBjKDc6MTIpLA0KICAgICAgICAgICAgICAgICAgbmFtZSA9IGMoImtlZmFzIiwibmlraXRhIiwiYXJkaWZvIiwiZmFsbGVuIiwiYXl1Iiwic2lhbmEiKSwNCiAgICAgICAgICAgICAgICAgIGdlbmRlciA9IGMoIm1hbGUiLCJmZW1hbGUiLCJtYWxlIiwibWFsZSIsImZlbWFsZSIsImZlbWFsZSIpLA0KICAgICAgICAgICAgICAgICAgYWdlID0gYygxOSwxOSwxOSwyMSwyMCwxOSksDQogICAgICAgICAgICAgICAgICBtYXJpdGFsX3N0YXR1cyA9IGMoInllcyIsIm5vIiwieWVzIiwibm8iLCJ5ZXMiLCJubyIpLA0KICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieV9jaXR5ID0gYyAoInRhbmdlcmFuZyIsInRhbmdlcmFuZyIsImthbHRpbSIsImpha2FydGEiLCJ0YW5nZXJhbmciLCJ0YW5nZXJhbmciKSxzdHJpbmdzQXNGYWN0b3JzID0gRikNCkRGMg0KYGBgDQoNCg0KIyMjIEV4ZXJjaXNlIDEwDQoNCkluIHRoaXMgZmluYWwgZXhlcmNpc2UsIHBsZWFzZSBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRhc2tzOiANCg0KKiBDb21iaW5lIGBERjFgIGFuZCBgREYyYCwgIGFzc2lnbiBpdCBhcyBgU0IxOWAgdmFyaWFibGUhDQoqIFByaW50IHRoZSByZXN1bHQgb2YgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIFByaW50IGZpcnN0IDMgcm93cyBvZiB0aGUgYFNCMTlgIGRhdGFzZXQhDQoqIEhvdyBjYW4geW91IHByZXZpZXcgIHRoZSBgU0IxOWAgZGF0YXNldCBsaWtlIGFuIEV4Y2VsIGZpbGUgb24geW91ciBSc3R1ZGlvPw0KKiBSZXZpZXcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIENoZWNrIHRoZSBkaW1lbnNpb24gb2YgdGhlIGRhdGEuIA0KKiBQbGVhc2UgYXBwbHkgcGlwaW5nIGZ1bmN0aW9ucyB0byB0aGUgZGF0YSBmcmFtZSBgU0IxOWAsIGZpbHRlciBpdCBieSB0aGVpciBnZW5kZXIgYWNjb3JkaW5nbHkhIChhcyB5b3UgaGF2ZSBsZWFybiBsYXN0IHdlZWspDQoNCmBgYHtyfQ0KU0IxOSA8LSByYmluZChERjEsREYyKQ0KcHJpbnQoU0IxOSkNCmhlYWQoU0IxOSwzKQ0KVmlldyhTQjE5KQ0KY2xhc3MoU0IxOSkNCnN0cihTQjE5KQ0KZGltKFNCMTkpDQoNCmBgYA0KDQpQaXBpbmcNCg0KRmlsdGVyICh1bnR1ayBtZW11bmN1bGthbiBkYXRhIHlhbmcgc2VzdWFpIGRlbmdhbiBiZWJlcmFwYSBhcmd1bWVuIC8gdmFyaWFibGUgdmFsdWVzKQ0KYGBge3J9DQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeShkcGx5cikNCg0KcHJpYSA8LSBTQjE5ICU+JQ0KICAgIGZpbHRlcihnZW5kZXI9PSJtYWxlIikgJT4lIA0KICAgIHByaW50KCkNCg0Kd2FuaXRhIDwtIFNCMTkgJT4lDQogICAgZmlsdGVyKGdlbmRlcj09ImZlbWFsZSIpICU+JQ0KICAgIHByaW50KCkNCg0KYGBgDQpLYXJlbmEgeWFuZyBkaW1pbnRhIGhhbnlhIGZpbHRlciBnZW5kZXIsIGphZGkgYmlzYSBtZW5nZ3VuYWthbiBzdWJzZXQganVnYS4NCg0KU3Vic2V0ICh1bnR1ayBtZW11bmN1bGthbiBkYXRhIGRlbmdhbiBhcmd1bWVuIHRlcnRlbnR1KQ0KYGBge3J9DQpwcmlhMSA8LSBTQjE5ICU+JQ0KICAgIHN1YnNldChnZW5kZXI9PSJtYWxlIikgJT4lDQogICAgcHJpbnQoKQ0Kd2FuaXRhMSA8LSBTQjE5ICU+JQ0KICAgIHN1YnNldChnZW5kZXI9PSJmZW1hbGUiKSAlPiUNCiAgICBwcmludCgpDQoNCmBgYA0KDQo=