Algoritma & Struktur Data

~ Ujian Tengah Semester ~


Kontak : \(\downarrow\)
Email
RPubs https://rpubs.com/kentzend03/

Kasus 1

Asumsikan Anda telah mengumpulkan beberapa kumpulan data dari perusahaan ABC Property seperti yang dapat kita lihat pada tabel berikut:

Id             <- (1:10000)
Marketing_Name <- rep(c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando"), 200)
Work_Exp       <- rep(c(1.3,2.4,2.5,3.6,3.7,4.7,5.7,6.7,7.7,7.3,
                        5.3,5.3,10,9.3,3.3,3.3,3.4,3.4,3.5,5.6,
                        3.5,4.6,4.6,5.7,6.2,4.4,6.4,6.4,3.5,7.5,
                        4.6,3.7,4.7,4.3,5.2,6.3,7.4,2.4,3.4,8.2,
                        6.4,7.2,1.5,7.5,10,4.5,6.5,7.2,7.1,7.6),200)
City           <- sample(c("Jakarta","Bogor","Depok","Tengerang","Bekasi"),10000, replace = T)
Cluster        <- sample(c("Victoria","Palmyra","Winona","Tiara", "Narada",
                           "Peronia","Lavesh","Alindra","Sweethome", "Asera",
                           "Teradamai","Albasia", "Adara","Neon","Arana",
                           "Asoka", "Primadona", "Mutiara","Permata","Alamanda" ), 10000, replace=T)
Price          <- sample(c(7000:15000),10000, replace = T)
Date_Sales     <- sample(seq(as.Date("2018/01/01"), by = "day", length.out = 1000),10000, replace = T)
Advertisement  <- sample(c(1:20), 10000, replace = T)
Data           <- data.frame(Id, 
                             Marketing_Name,
                             Work_Exp,
                             City,
                             Cluster,
                             Price,
                             Date_Sales,
                             Advertisement)
library(DT)
datatable(Data)

Soal 1

Kategorikan variabel Harga pada dataset di atas menjadi tiga kelompok sebagai berikut:

  • \(\text{High} > 12000\)
  • \(10000 \le \text{Medium} \le 12000\)
  • \(\text{Low} < 10000\)

Tetapkan ke dalam variabel baru yang disebut Kelas dengan menggunakan fungsi kontrol If, else if, dan else.

R

x = Data$Price

a= ifelse((x>12000),print('High'),
          ifelse((x>=10000 & x<= 12000), print("Medium"),print('Low')
                 ))
## [1] "High"
## [1] "Medium"
## [1] "Low"
Kelas = a
Data1 <- data.frame(Id, 
                             Marketing_Name,
                             Work_Exp,
                             City,
                             Cluster,
                    Price,
                    Kelas,
                    Date_Sales,
                             Advertisement)
datatable(Data1)

Soal 2

Kategorikan variabel Harga pada dataset di atas menjadi enam kelompok sebagai berikut:

  • Booking_fee nya 5 % jika \(\text{Price} < 8000\)
  • Booking_fee nya 6 % jika \(8000 \le \text{Price} < 9000\)
  • Booking_fee nya 7 % jika \(9000 \le \text{Price} < 10000\)
  • Booking_fee nya 8 % jika \(10000 \le \text{Price} < 11000\)
  • Booking_fee nya 9 % jika \(11000 \le \text{Price} < 13000\)
  • Booking_fee nya 10 % jika \(13000 \le \text{Price} \le 15000\)

Tetapkan ke dalam variabel baru yang disebut Booking_fee dengan menggunakan fungsi kontrol If, else if, dan else.

R

x = Data$Price

a= ifelse((x>=13000 & x<=15000),print('10%'),
          ifelse((x>=11000 & x<13000),print("9%"),
                 ifelse((x>=10000 & x<11000),print("8%"),
                        ifelse((x>=9000 & x<10000),print("7%"),
                               ifelse((x>=8000 & x<9000),print("6%"),print('5%')
                 )))))
## [1] "10%"
## [1] "9%"
## [1] "8%"
## [1] "7%"
## [1] "6%"
## [1] "5%"
Booking_Fee = a
Data1 <- data.frame(Id, 
                             Marketing_Name,
                             Work_Exp,
                             City,
                             Cluster,
                    Price,
                    Kelas,
                    Booking_Fee,
                    Date_Sales,
                             Advertisement)
datatable(Data1)

Soal 3

Menurut kumpulan data akhir yang telah Anda buat pada soal no 2, saya berasumsi bahwa Anda telah bekerja sebagai pemasaran di perusahaan ABC Property, bagaimana Anda dapat mengumpulkan semua informasi tentang penjualan Anda dengan menggunakan pernyataan for.

R

library(DT)

z=for(x  in "Lala" ){print(subset(Data,subset=(Marketing_Name== x)))}
##        Id Marketing_Name Work_Exp      City   Cluster Price Date_Sales
## 10     10           Lala      7.3    Bekasi  Victoria 14500 2020-07-29
## 60     60           Lala      7.3    Bekasi     Asera  7709 2019-11-12
## 110   110           Lala      7.3     Depok     Asoka  8455 2018-04-01
## 160   160           Lala      7.3 Tengerang Teradamai 14114 2020-06-22
## 210   210           Lala      7.3     Bogor     Asera 10330 2018-05-20
## 260   260           Lala      7.3    Bekasi    Winona  7901 2018-12-18
## 310   310           Lala      7.3     Bogor   Mutiara  7578 2018-10-04
## 360   360           Lala      7.3   Jakarta     Arana 13858 2018-06-17
## 410   410           Lala      7.3     Bogor   Mutiara  8719 2020-01-11
## 460   460           Lala      7.3   Jakarta   Albasia 13856 2020-07-21
## 510   510           Lala      7.3     Depok   Peronia  7975 2018-10-23
## 560   560           Lala      7.3    Bekasi Teradamai 13824 2018-05-25
## 610   610           Lala      7.3     Bogor      Neon  7150 2019-01-21
## 660   660           Lala      7.3   Jakarta   Palmyra  7464 2019-02-20
## 710   710           Lala      7.3     Bogor     Asera  7414 2020-01-04
## 760   760           Lala      7.3 Tengerang   Albasia 12674 2018-07-22
## 810   810           Lala      7.3   Jakarta Teradamai 12732 2018-10-14
## 860   860           Lala      7.3     Depok Sweethome 11691 2018-11-10
## 910   910           Lala      7.3   Jakarta   Permata  8818 2020-08-13
## 960   960           Lala      7.3     Bogor    Narada 14952 2018-12-17
## 1010 1010           Lala      7.3     Depok   Mutiara 10559 2020-05-22
## 1060 1060           Lala      7.3     Bogor     Asoka  8366 2019-10-29
## 1110 1110           Lala      7.3     Depok   Albasia 10046 2019-02-02
## 1160 1160           Lala      7.3   Jakarta  Victoria 14285 2020-05-04
## 1210 1210           Lala      7.3     Depok Teradamai  8764 2018-07-19
## 1260 1260           Lala      7.3     Depok    Narada  7444 2019-04-24
## 1310 1310           Lala      7.3     Depok   Albasia  8721 2018-05-03
## 1360 1360           Lala      7.3     Bogor     Arana  8295 2019-02-20
## 1410 1410           Lala      7.3 Tengerang Primadona 11995 2018-10-27
## 1460 1460           Lala      7.3 Tengerang    Narada 12948 2020-04-24
## 1510 1510           Lala      7.3    Bekasi   Alindra  9602 2019-05-24
## 1560 1560           Lala      7.3    Bekasi     Arana 14794 2020-03-03
## 1610 1610           Lala      7.3    Bekasi    Lavesh 12281 2020-06-18
## 1660 1660           Lala      7.3   Jakarta    Winona  7952 2019-12-21
## 1710 1710           Lala      7.3   Jakarta     Adara 12133 2018-06-13
## 1760 1760           Lala      7.3    Bekasi Teradamai  9523 2018-04-02
## 1810 1810           Lala      7.3     Bogor   Permata  7632 2019-08-03
## 1860 1860           Lala      7.3    Bekasi      Neon 14921 2018-08-13
## 1910 1910           Lala      7.3 Tengerang Teradamai 11724 2019-09-23
## 1960 1960           Lala      7.3     Depok   Palmyra 11093 2020-09-02
## 2010 2010           Lala      7.3 Tengerang Primadona 11959 2018-10-10
## 2060 2060           Lala      7.3   Jakarta      Neon 13503 2019-04-26
## 2110 2110           Lala      7.3     Bogor   Albasia 12862 2019-10-30
## 2160 2160           Lala      7.3     Depok   Peronia 14610 2018-12-17
## 2210 2210           Lala      7.3    Bekasi     Tiara  7362 2019-10-10
## 2260 2260           Lala      7.3 Tengerang   Albasia 14627 2019-03-13
## 2310 2310           Lala      7.3   Jakarta    Winona 13076 2019-04-12
## 2360 2360           Lala      7.3   Jakarta    Winona 13347 2020-06-12
## 2410 2410           Lala      7.3     Depok    Lavesh 13211 2019-09-13
## 2460 2460           Lala      7.3    Bekasi    Narada 10676 2019-05-16
## 2510 2510           Lala      7.3   Jakarta   Palmyra 10889 2018-10-03
## 2560 2560           Lala      7.3    Bekasi    Lavesh 10351 2020-07-17
## 2610 2610           Lala      7.3   Jakarta  Alamanda 13628 2018-09-03
## 2660 2660           Lala      7.3     Bogor   Mutiara 11092 2020-03-21
## 2710 2710           Lala      7.3     Bogor   Albasia 14781 2018-07-17
## 2760 2760           Lala      7.3   Jakarta   Mutiara 12271 2018-04-18
## 2810 2810           Lala      7.3     Depok Teradamai 11872 2019-09-12
## 2860 2860           Lala      7.3     Depok     Adara 10033 2018-07-10
## 2910 2910           Lala      7.3    Bekasi  Victoria 12298 2020-06-27
## 2960 2960           Lala      7.3 Tengerang   Palmyra  9763 2018-09-18
## 3010 3010           Lala      7.3   Jakarta   Peronia  8181 2018-12-29
## 3060 3060           Lala      7.3    Bekasi  Victoria 14682 2018-05-31
## 3110 3110           Lala      7.3     Bogor  Alamanda 12421 2018-07-03
## 3160 3160           Lala      7.3 Tengerang     Asoka 13052 2020-05-27
## 3210 3210           Lala      7.3     Bogor   Palmyra  7568 2018-10-16
## 3260 3260           Lala      7.3 Tengerang  Alamanda 11526 2018-06-13
## 3310 3310           Lala      7.3   Jakarta    Lavesh 12292 2019-01-08
## 3360 3360           Lala      7.3   Jakarta   Albasia 12909 2019-08-26
## 3410 3410           Lala      7.3   Jakarta     Asoka 13098 2019-08-07
## 3460 3460           Lala      7.3    Bekasi   Albasia 10817 2019-10-14
## 3510 3510           Lala      7.3   Jakarta    Winona  9652 2018-10-22
## 3560 3560           Lala      7.3     Bogor   Albasia 11805 2018-10-13
## 3610 3610           Lala      7.3    Bekasi   Alindra 13083 2018-01-24
## 3660 3660           Lala      7.3   Jakarta    Winona 14479 2018-03-28
## 3710 3710           Lala      7.3     Bogor    Narada 14360 2018-12-12
## 3760 3760           Lala      7.3     Depok     Asera  9578 2019-02-17
## 3810 3810           Lala      7.3   Jakarta Teradamai 13208 2019-04-19
## 3860 3860           Lala      7.3     Depok   Peronia 12965 2018-06-25
## 3910 3910           Lala      7.3     Bogor   Palmyra  9760 2020-02-19
## 3960 3960           Lala      7.3    Bekasi     Asera  9400 2019-02-18
## 4010 4010           Lala      7.3 Tengerang   Albasia 14597 2018-05-27
## 4060 4060           Lala      7.3   Jakarta   Peronia 13294 2018-09-10
## 4110 4110           Lala      7.3 Tengerang   Peronia  9945 2019-04-29
## 4160 4160           Lala      7.3     Depok   Mutiara 13610 2019-08-16
## 4210 4210           Lala      7.3     Bogor    Lavesh  9396 2020-03-22
## 4260 4260           Lala      7.3    Bekasi     Tiara 10209 2019-01-10
## 4310 4310           Lala      7.3   Jakarta     Asoka  7001 2018-04-24
## 4360 4360           Lala      7.3   Jakarta  Alamanda 12002 2018-03-28
## 4410 4410           Lala      7.3   Jakarta  Victoria  7062 2019-04-14
## 4460 4460           Lala      7.3     Depok   Mutiara  8334 2020-08-30
## 4510 4510           Lala      7.3   Jakarta      Neon 10925 2018-07-24
## 4560 4560           Lala      7.3   Jakarta     Asoka 11271 2020-07-02
## 4610 4610           Lala      7.3    Bekasi     Asoka 13868 2018-02-12
## 4660 4660           Lala      7.3 Tengerang   Peronia 11698 2020-06-06
## 4710 4710           Lala      7.3   Jakarta     Asoka 14706 2018-02-16
## 4760 4760           Lala      7.3     Bogor  Alamanda  8652 2019-03-27
## 4810 4810           Lala      7.3    Bekasi   Albasia 13009 2018-12-06
## 4860 4860           Lala      7.3    Bekasi    Winona  9187 2018-07-12
## 4910 4910           Lala      7.3     Depok     Adara 13340 2020-09-23
## 4960 4960           Lala      7.3     Bogor   Palmyra  8544 2019-04-13
## 5010 5010           Lala      7.3   Jakarta     Asera  9614 2019-03-09
## 5060 5060           Lala      7.3 Tengerang    Winona  7750 2018-12-23
## 5110 5110           Lala      7.3   Jakarta     Adara 12552 2018-05-06
## 5160 5160           Lala      7.3     Bogor   Palmyra  7562 2019-05-27
## 5210 5210           Lala      7.3   Jakarta   Peronia  8889 2018-05-04
## 5260 5260           Lala      7.3     Depok   Peronia  9975 2018-09-17
## 5310 5310           Lala      7.3   Jakarta Teradamai  7629 2019-07-18
## 5360 5360           Lala      7.3     Depok     Arana  8915 2018-09-22
## 5410 5410           Lala      7.3 Tengerang   Mutiara 11453 2018-09-23
## 5460 5460           Lala      7.3     Bogor     Adara  8934 2019-07-06
## 5510 5510           Lala      7.3 Tengerang Sweethome  8628 2019-11-13
## 5560 5560           Lala      7.3     Depok     Asoka 14781 2020-07-04
## 5610 5610           Lala      7.3   Jakarta    Narada 13554 2018-09-30
## 5660 5660           Lala      7.3 Tengerang     Asoka  9343 2018-01-16
## 5710 5710           Lala      7.3 Tengerang    Winona 10204 2019-03-30
## 5760 5760           Lala      7.3 Tengerang  Alamanda 10638 2018-06-11
## 5810 5810           Lala      7.3     Bogor   Permata 13292 2018-08-11
## 5860 5860           Lala      7.3     Bogor  Victoria 11457 2019-05-11
## 5910 5910           Lala      7.3    Bekasi      Neon  8308 2019-04-20
## 5960 5960           Lala      7.3   Jakarta     Arana 10854 2019-09-13
## 6010 6010           Lala      7.3 Tengerang   Alindra  9298 2018-07-09
## 6060 6060           Lala      7.3   Jakarta Primadona 12184 2018-04-19
## 6110 6110           Lala      7.3   Jakarta     Tiara 13046 2020-06-15
## 6160 6160           Lala      7.3 Tengerang    Winona  9890 2018-01-10
## 6210 6210           Lala      7.3 Tengerang  Victoria  8588 2019-03-06
## 6260 6260           Lala      7.3    Bekasi     Arana  8954 2018-04-24
## 6310 6310           Lala      7.3    Bekasi Sweethome  9325 2018-11-03
## 6360 6360           Lala      7.3     Bogor Teradamai  9207 2019-05-14
## 6410 6410           Lala      7.3 Tengerang  Victoria 12306 2020-07-10
## 6460 6460           Lala      7.3    Bekasi      Neon 11665 2019-08-09
## 6510 6510           Lala      7.3     Depok    Winona  8698 2020-02-13
## 6560 6560           Lala      7.3   Jakarta Teradamai 11723 2020-08-05
## 6610 6610           Lala      7.3   Jakarta    Winona 10326 2019-12-02
## 6660 6660           Lala      7.3    Bekasi      Neon  7899 2019-08-06
## 6710 6710           Lala      7.3 Tengerang    Lavesh 13904 2018-05-12
## 6760 6760           Lala      7.3   Jakarta   Albasia 11433 2019-07-10
## 6810 6810           Lala      7.3 Tengerang   Mutiara 10595 2020-02-02
## 6860 6860           Lala      7.3     Depok   Permata  9742 2018-07-01
## 6910 6910           Lala      7.3 Tengerang   Peronia  9592 2019-02-27
## 6960 6960           Lala      7.3     Bogor    Narada 14658 2019-07-05
## 7010 7010           Lala      7.3    Bekasi     Asera  9666 2019-09-30
## 7060 7060           Lala      7.3    Bekasi     Tiara 13720 2019-11-28
## 7110 7110           Lala      7.3    Bekasi     Asera  9454 2020-07-28
## 7160 7160           Lala      7.3     Bogor     Asoka 10464 2019-01-01
## 7210 7210           Lala      7.3 Tengerang   Albasia 10444 2020-07-12
## 7260 7260           Lala      7.3    Bekasi   Peronia  7210 2018-07-04
## 7310 7310           Lala      7.3 Tengerang     Asera 10015 2020-06-11
## 7360 7360           Lala      7.3    Bekasi    Winona  7716 2019-07-06
## 7410 7410           Lala      7.3     Depok    Lavesh 14939 2019-08-06
## 7460 7460           Lala      7.3 Tengerang  Victoria  9768 2020-08-06
## 7510 7510           Lala      7.3   Jakarta     Asera  7848 2018-07-29
## 7560 7560           Lala      7.3     Depok     Adara 13246 2019-03-28
## 7610 7610           Lala      7.3 Tengerang   Mutiara  8824 2019-10-17
## 7660 7660           Lala      7.3     Bogor  Victoria 14036 2018-08-29
## 7710 7710           Lala      7.3 Tengerang   Alindra  7617 2018-04-09
## 7760 7760           Lala      7.3     Bogor Primadona 11282 2018-08-25
## 7810 7810           Lala      7.3     Depok   Albasia 14576 2018-10-27
## 7860 7860           Lala      7.3   Jakarta    Lavesh 10454 2018-10-20
## 7910 7910           Lala      7.3   Jakarta     Asoka 13768 2020-08-23
## 7960 7960           Lala      7.3 Tengerang     Adara 11561 2019-05-24
## 8010 8010           Lala      7.3     Depok     Asera 12524 2018-01-30
## 8060 8060           Lala      7.3 Tengerang Sweethome  9135 2019-10-16
## 8110 8110           Lala      7.3    Bekasi    Lavesh 14015 2018-01-19
## 8160 8160           Lala      7.3     Bogor      Neon  8337 2020-01-09
## 8210 8210           Lala      7.3   Jakarta  Victoria  7765 2020-06-27
## 8260 8260           Lala      7.3 Tengerang     Tiara 11014 2018-09-24
## 8310 8310           Lala      7.3 Tengerang     Tiara 10830 2019-12-29
## 8360 8360           Lala      7.3    Bekasi   Peronia 12225 2020-04-30
## 8410 8410           Lala      7.3     Depok Primadona  9787 2018-09-28
## 8460 8460           Lala      7.3 Tengerang Sweethome 10126 2020-07-22
## 8510 8510           Lala      7.3     Bogor    Narada 12595 2020-08-10
## 8560 8560           Lala      7.3     Depok Sweethome  9071 2018-05-29
## 8610 8610           Lala      7.3 Tengerang    Lavesh 13265 2020-01-10
## 8660 8660           Lala      7.3   Jakarta Primadona 12221 2018-06-20
## 8710 8710           Lala      7.3    Bekasi      Neon 12289 2018-05-17
## 8760 8760           Lala      7.3   Jakarta   Albasia 13899 2018-10-10
## 8810 8810           Lala      7.3     Depok   Peronia  8377 2020-03-01
## 8860 8860           Lala      7.3   Jakarta  Victoria 14904 2020-08-09
## 8910 8910           Lala      7.3    Bekasi      Neon  7039 2018-04-13
## 8960 8960           Lala      7.3     Bogor   Alindra  7218 2019-12-28
## 9010 9010           Lala      7.3     Bogor  Alamanda  9246 2018-03-09
## 9060 9060           Lala      7.3    Bekasi    Winona 10193 2020-03-27
## 9110 9110           Lala      7.3     Depok   Alindra  7029 2020-04-07
## 9160 9160           Lala      7.3     Depok      Neon 12884 2020-07-20
## 9210 9210           Lala      7.3 Tengerang Sweethome  8307 2020-02-20
## 9260 9260           Lala      7.3     Bogor Teradamai 14497 2018-03-16
## 9310 9310           Lala      7.3    Bekasi Teradamai 12379 2019-01-14
## 9360 9360           Lala      7.3     Depok    Lavesh 13835 2018-11-17
## 9410 9410           Lala      7.3   Jakarta   Peronia  9843 2020-03-27
## 9460 9460           Lala      7.3     Bogor   Alindra 14736 2018-07-02
## 9510 9510           Lala      7.3     Bogor   Albasia 12801 2019-02-09
## 9560 9560           Lala      7.3     Depok   Peronia  8652 2019-07-31
## 9610 9610           Lala      7.3   Jakarta  Victoria  8600 2018-02-03
## 9660 9660           Lala      7.3 Tengerang   Alindra 11721 2018-03-07
## 9710 9710           Lala      7.3    Bekasi   Permata 13917 2020-06-15
## 9760 9760           Lala      7.3    Bekasi    Winona 12079 2020-08-12
## 9810 9810           Lala      7.3    Bekasi    Lavesh  9584 2018-02-09
## 9860 9860           Lala      7.3     Bogor      Neon 13996 2020-03-13
## 9910 9910           Lala      7.3 Tengerang   Palmyra  8092 2020-02-13
## 9960 9960           Lala      7.3    Bekasi   Albasia 12583 2018-09-11
##      Advertisement
## 10               9
## 60              17
## 110             11
## 160             12
## 210              3
## 260              6
## 310              6
## 360              8
## 410             13
## 460              4
## 510              2
## 560             19
## 610              9
## 660              1
## 710             12
## 760              1
## 810             16
## 860              7
## 910             16
## 960              9
## 1010             4
## 1060            14
## 1110             8
## 1160             9
## 1210            20
## 1260            12
## 1310            20
## 1360             3
## 1410            16
## 1460            19
## 1510             6
## 1560            17
## 1610             5
## 1660             6
## 1710            20
## 1760            19
## 1810             8
## 1860            20
## 1910            18
## 1960            12
## 2010            18
## 2060            19
## 2110            15
## 2160            16
## 2210            14
## 2260             5
## 2310             2
## 2360            18
## 2410            11
## 2460            10
## 2510            17
## 2560             5
## 2610            11
## 2660            10
## 2710            13
## 2760             6
## 2810            19
## 2860            18
## 2910             7
## 2960            20
## 3010            13
## 3060            18
## 3110            13
## 3160             9
## 3210            12
## 3260             8
## 3310             9
## 3360            20
## 3410             1
## 3460             2
## 3510             8
## 3560            12
## 3610             7
## 3660             9
## 3710             1
## 3760            13
## 3810            11
## 3860             8
## 3910             1
## 3960             7
## 4010            20
## 4060             2
## 4110             8
## 4160            16
## 4210            15
## 4260             6
## 4310            17
## 4360            19
## 4410             3
## 4460            20
## 4510            18
## 4560             9
## 4610             8
## 4660             3
## 4710            16
## 4760             4
## 4810            10
## 4860            14
## 4910            20
## 4960             1
## 5010             2
## 5060            17
## 5110            18
## 5160             2
## 5210            11
## 5260            13
## 5310             3
## 5360             7
## 5410             7
## 5460            17
## 5510            19
## 5560             9
## 5610            14
## 5660             1
## 5710             6
## 5760            13
## 5810            20
## 5860            12
## 5910            17
## 5960            14
## 6010             8
## 6060             7
## 6110            16
## 6160            11
## 6210             8
## 6260            13
## 6310             7
## 6360            19
## 6410            11
## 6460            16
## 6510            17
## 6560            14
## 6610             4
## 6660            14
## 6710            19
## 6760             6
## 6810            19
## 6860             4
## 6910             6
## 6960            13
## 7010            18
## 7060            12
## 7110             3
## 7160             8
## 7210            13
## 7260            13
## 7310            10
## 7360            12
## 7410            20
## 7460             7
## 7510             5
## 7560             4
## 7610             7
## 7660             4
## 7710            10
## 7760            18
## 7810            18
## 7860            16
## 7910            16
## 7960             2
## 8010             1
## 8060            18
## 8110            16
## 8160             5
## 8210             7
## 8260             9
## 8310            15
## 8360             7
## 8410            10
## 8460            15
## 8510             3
## 8560            11
## 8610            20
## 8660            12
## 8710             5
## 8760            19
## 8810            14
## 8860             1
## 8910             7
## 8960            19
## 9010            16
## 9060             5
## 9110             1
## 9160            16
## 9210             7
## 9260             9
## 9310             3
## 9360            20
## 9410            12
## 9460             2
## 9510            17
## 9560            11
## 9610            20
## 9660            18
## 9710            19
## 9760            16
## 9810            15
## 9860            17
## 9910            13
## 9960             4

Soal 4

Jika Anda akan mendapatkan bonus 2% dari Booking fee per unit sebagai pemasaran dan juga mendapatkan bonus tambahan 1% jika Anda telah bekerja di perusahaan ini selama lebih dari 3 tahun. Silakan hitung total bonus dengan menggunakan pernyataan if, for, dan break.

R

x <- subset(Data, subset=(Marketing_Name == "Lala"))

y= ifelse((x$Work_Exp <3),
          (x$Price * x$Booking_Fee) *(0.02),
          (x$Price * x$Booking_Fee) *(0.01))

x$Bonus =y
x
Bonus=sum(x$Bonus)
Bonus
## [1] NA

Soal 5

Pada bagian ini, Anda diharapkan dapa membuat fungsi yang dapat menjawab setiap penyataan dibawah ini dengan melibatkan setiap fungsi kontrol yang dipelajari pada pertemuan 7.

  • Siapa nama marketing pemasaran terbaik?
  • Kota dan Cluster mana yang paling menguntungkan?
  • Hitung total biaya iklan Anda, jika Anda harus membayarnya $4 setiap kali iklan.
  • Hitung rata-rata biaya iklan untuk setiap marketing di Perusahaan tersebut.
  • Hitung Total Pendapatan (dalam Bulanan)

R

 Angel = subset (Data, subset=(Marketing_Name == "Angel")) 
Sherly=subset (Data, subset=(Marketing_Name == "Sherly")) 
Vanessa=subset(Data, subset=(Marketing_Name == "Vanessa"  ))
Irene=subset(Data, subset=(Marketing_Name == "Irene"))
Julian=subset (Data, subset=(Marketing_Name == "Julian"))
Jeffry =subset (Data, subset=(Marketing_Name == "Jeffry")) 
Nikita =subset (Data, subset=(Marketing_Name =="Nikita")) 
Kefas =subset(Data, subset=(Marketing_Name == "Kefas"))
Siana =subset (Data, subset=(Marketing_Name == "Siana")) 
Lala=subset (Data, subset=(Marketing_Name == "Lala")) 
Fallen =subset (Data, subset=(Marketing_Name == "Fallen")) 
Ardifo =subset (Data, subset=(Marketing_Name == "Ardifo"))
Kevin =subset (Data, subset=(Marketing_Name == "Kevin"))
Juen =subset (Data, subset=(Marketing_Name == "Juen")) 
Jerrel =subset (Data, subset=(Marketing_Name == "Jerrel"))
Imelda =subset (Data, subset=(Marketing_Name == "Imelda")) 
Widi =subset(Data, subset=(Marketing_Name == "Widi")) 
Theodor = subset (Data, subset=(Marketing_Name == "Theodor")) 
Elvani =subset (Data, subset=(Marketing_Name == "Elvani")) 
Jonathan = subset (Data, subset=(Marketing_Name == "Jonathan")) 
Sofia =subset (Data, subset=(Marketing_Name == "Sofia")) 
Abraham = subset (Data, subset=(Marketing_Name == "Abraham")) 
Siti =subset (Data, subset=(Marketing_Name == "Siti")) 
Niko =subset(Data, subset=(Marketing_Name == "Niko")) 
Sefli =subset (Data, subset=(Marketing_Name == "Selfi")) 
Bene =subset(Data, subset=(Marketing_Name == "Bene")) 
Diana =subset (Data, subset=(Marketing_Name == "Diana"))
Pupe =subset(Data, subset=(Marketing_Name == "Pupe")) 
Andi =subset (Data, subset=(Marketing_Name == "Andi")) 
Tatha =subset (Data, subset=(Marketing_Name == "Tatha"))
Endri=subset (Data, subset=(Marketing_Name == "Endri")) 
Monika= subset(Data, subset=(Marketing_Name == "Monika")) 
Hans =subset(Data, subset=(Marketing_Name == "Hans")) 
Debora= subset (Data, subset=(Marketing_Name == "Debora")) 
Hanifa= subset (Data, subset=(Marketing_Name == "Hanifa"))
James =subset (Data, subset=(Marketing_Name == "James")) 
Jihan =subset (Data, subset=(Marketing_Name == "Jihan"))
Friska =subset (Data, subset=(Marketing_Name == "Friska")) 
Ardiwan = subset (Data, subset=(Marketing_Name == "Ardiwan")) 
Bakti =subset (Data, subset=(Marketing_Name == "Bakti")) 
Anthon =subset (Data, subset=(Marketing_Name == "Anthon")) 
Amry =subset (Data, subset=(Marketing_Name == "Amry")) 
Wiwik =subset (Data, subset=(Marketing_Name == "Wiwik")) 
Bastian = subset (Data, subset=(Marketing_Name == "Bastian")) 
Budi = subset (Data, subset=(Marketing_Name == "Budi")) 
Leo = subset (Data, subset=(Marketing_Name == "Leo")) 
Simon = subset (Data, subset=(Marketing_Name == "Simon")) 
Matius = subset (Data, subset=(Marketing_Name == "Matius")) 
Arry = subset (Data, subset=(Marketing_Name == "Arry")) 
Eliando = subset (Data, subset=(Marketing_Name == "Eliando")) 
  
Nama_Sales = c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando")
propertysold = c(sum(Angel$Price), sum(Sherly$Price), sum(Vanessa$Price), sum(Irene$Price),
sum(Julian$Price), sum (Jeffry$Price), sum(Nikita$Price), sum(Kefas$Price), sum(Siana$Price), sum(Lala$Price), sum(Fallen$Price), sum(Ardifo$Price), sum(Kevin$Price), sum (Juen$Price), sum(Jerrel$Price), sum(Imelda$Price), sum(Widi$Price), sum(Theodor$Price), sum(Elvani$Price), sum(Jonathan$Price), sum(Sofia$Price), sum(Abraham$Price), sum(Siti$Price), sum(Niko$Price), sum(Sefli$Price), sum(Bene$Price), sum( Diana$Price), sum (Pupe$Price), sum(Andi$Price), sum( Tatha$Price), sum(Endri$Price), sum( Monika$Price), sum( Hans$Price), sum( Debora$Price), sum(Hanifa$Price), sum (James$Price), sum( Jihan$Price), sum( Friska$Price), sum(Ardiwan$Price), sum(Bakti$Price), sum(Anthon$Price), sum(Amry$Price), sum( Wiwik$Price), sum( Bastian$Price), sum( Budi$Price), sum (Leo$Price), sum(Simon$Price), sum(Matius$Price), sum(Arry$Price), sum( Eliando$Price))

datamarketing= data.frame(Nama_Sales, propertysold)

datamarketing
# Best Marketing
datamarketing[which.max(datamarketing$propertysold),]
#Kota dan Cluster Paling Menguntungkan
profitable= Data[,c("City","Cluster","Price")]

profitable[which.max(profitable$Price),]
#Total Biaya Sdvertisment irene
costforad = subset(Data, subset=(Marketing_Name == "Irene"))

adscost = ( costforad$Advertisement * 4)

Totalcost=print(sum(adscost))
## [1] 8044
# Rata-Rata cost iklan
Namasales = c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando")
ratacost = for (x in Namasales) {
  f= subset ( Data, subset=(Marketing_Name == x ))
  c=sum(f$Advertisement * 4)
  print (cat(sum(c)/length(f$Id), (cat(x, 'Rata-rata pengeluaran untuk iklan'))))}
## Angel Rata-rata pengeluaran untuk iklan41.7NULL
## Sherly Rata-rata pengeluaran untuk iklan43.04NULL
## Vanessa Rata-rata pengeluaran untuk iklan40.1NULL
## Irene Rata-rata pengeluaran untuk iklan40.22NULL
## Julian Rata-rata pengeluaran untuk iklan41.92NULL
## Jeffry Rata-rata pengeluaran untuk iklan41.6NULL
## Nikita Rata-rata pengeluaran untuk iklan40.84NULL
## Kefas Rata-rata pengeluaran untuk iklan41.32NULL
## Siana Rata-rata pengeluaran untuk iklan40.46NULL
## Lala Rata-rata pengeluaran untuk iklan44.54NULL
## Fallen Rata-rata pengeluaran untuk iklan39.52NULL
## Ardifo Rata-rata pengeluaran untuk iklan41.06NULL
## Kevin Rata-rata pengeluaran untuk iklan45.14NULL
## Juen Rata-rata pengeluaran untuk iklan44.14NULL
## Jerrel Rata-rata pengeluaran untuk iklan42.08NULL
## Imelda Rata-rata pengeluaran untuk iklan43.16NULL
## Widi Rata-rata pengeluaran untuk iklan41.48NULL
## Theodora Rata-rata pengeluaran untuk iklan42.1NULL
## Elvani Rata-rata pengeluaran untuk iklan42.74NULL
## Jonathan Rata-rata pengeluaran untuk iklan39.42NULL
## Sofia Rata-rata pengeluaran untuk iklan40.84NULL
## Abraham Rata-rata pengeluaran untuk iklan42.34NULL
## Siti Rata-rata pengeluaran untuk iklan43.08NULL
## Niko Rata-rata pengeluaran untuk iklan39.18NULL
## Sefli Rata-rata pengeluaran untuk iklan40.8NULL
## Bene Rata-rata pengeluaran untuk iklan42.26NULL
## Diana Rata-rata pengeluaran untuk iklan41.46NULL
## Pupe Rata-rata pengeluaran untuk iklan41.64NULL
## Andi Rata-rata pengeluaran untuk iklan39.94NULL
## Tatha Rata-rata pengeluaran untuk iklan37.8NULL
## Endri Rata-rata pengeluaran untuk iklan39.6NULL
## Monika Rata-rata pengeluaran untuk iklan44.56NULL
## Hans Rata-rata pengeluaran untuk iklan45.9NULL
## Debora Rata-rata pengeluaran untuk iklan44.92NULL
## Hanifa Rata-rata pengeluaran untuk iklan41.78NULL
## James Rata-rata pengeluaran untuk iklan39.42NULL
## Jihan Rata-rata pengeluaran untuk iklan41.4NULL
## Friska Rata-rata pengeluaran untuk iklan39.18NULL
## Ardiwan Rata-rata pengeluaran untuk iklan42.34NULL
## Bakti Rata-rata pengeluaran untuk iklan41.3NULL
## Anthon Rata-rata pengeluaran untuk iklan43.54NULL
## Amry Rata-rata pengeluaran untuk iklan40.92NULL
## Wiwik Rata-rata pengeluaran untuk iklan43.06NULL
## Bastian Rata-rata pengeluaran untuk iklan41.64NULL
## Budi Rata-rata pengeluaran untuk iklan41.3NULL
## Leo Rata-rata pengeluaran untuk iklan41.82NULL
## Simon Rata-rata pengeluaran untuk iklan41.98NULL
## Matius Rata-rata pengeluaran untuk iklan43.1NULL
## Arry Rata-rata pengeluaran untuk iklan39.56NULL
## Eliando Rata-rata pengeluaran untuk iklan42.74NULL
# Pendapatan

revenue= (sum(Data$Price)-(sum(Data$Advertisment) * 4))/((max(Data$Work_Exp))*12)

revenue
## [1] 914675.9

Kasus 2

Misalkan Anda memiliki proyek riset pasar untuk mempertahankan beberapa pelanggan potensial di perusahaan Anda. Mari kita asumsikan Anda bekerja di perusahaan asuransi ABC. Untuk melakukannya, Anda ingin mengumpulkan kumpulan data berikut:

  • Marital_Status : menetapkan status perkawinan acak (“Ya”, “Tidak”)
  • Address : berikan alamat acak (JABODETABEK)
  • Work_Location : menetapkan lokasi kerja secara acak (JABODETABEK)
  • Age : menetapkan urutan angka acak (dari 19 hingga 60)
  • Academic : menetapkan tingkat akademik acak (“J.School”, “H.School”, “Sarjana”, “Magister”, “Phd”)
  • Job : 10 pekerjaan acak untuk setiap tingkat akademik
  • Grade : 5 nilai acak untuk setiap Pekerjaan
  • Income : tetapkan pendapatan yang mungkin untuk setiap Pekerjaan
  • Spending : tetapkan kemungkinan pengeluaran untuk setiap Pekerjaan
  • Number_of_children: menetapkan nomor acak di antara 0 dan 10 (sesuai dengan status perkawinan)
  • Private_vehicle : menetapkan kemungkinan kendaraan pribadi untuk setiap orang (“Mobil”, “sepeda motor”, “Umum”)
  • Home : “Sewa”, “Milik”, “Kredit”

Soal 1

Tolong berikan saya kumpulan data tentang informasi 50000 pelanggan yang mengacu pada setiap variabel di atas!

R

marital_status <- sample(c("Yes", "No"), 50000, replace = T) 
Address <-sample(c("Jakarta", "Bogor", "Depok", "Tangerang", "Bekasi"),50000, replace=T)
Work_Location <-sample(c("Jakarta", "Bogor", "Depok", "Tangerang", "Bekasi"),50000, replace=T)
Age <-floor (runif(50000,19,60))
Academic <-sample(c("J.School", "H.School", "Undergraduate", "Master",
"Phd"), 50000, replace = T) 
Job <-ifelse (Academic=="J.School", sample(c("Security","Storekeeper" ,
"Supir", "Office Boy", "Cleaning Service", " Helper", "Lifeguard", "Cashier", "Buka Toko", "Buruh Angkut"),
length(Academic=="J.School"), replace=T), ifelse (Academic=="H. School", sample(c("Influencer", "Cashier",
"Waiter", "Tutor Les", "Customer Service", "Operator", "Security", "Admin", "Gojek Driver", "Grab Driver", ),
length(Academic=="H.School"), replace=T), ifelse(Academic=="Undergraduate", sample(c("Nurse", "Business StartUp Development",
"Personal Assistant", "PNS", "Accountant", "Sales", "Private Driver", "Admin of Online Shop"), length(Academic=="Undergraduate"),
replace=T), ifelse(Academic=="Master", sample(c("Software Developer", "Actuarist",
"Creative Team","Designer","Business analyst", "Graphic Designer", "Engineer", "Chemist", "Data Analyst", "Accountant", "Statistician"),
length(Academic=="Master"), replace=T), sample(c("HRD Manager", "CEO",
" Consultant", "Head of Research", "Entrepreneurship", "Partner in Finance", "Mathematicians", "System Developer", "Shrink", "General  Manager", "Board Director"),
length (Academic=="Phd"), replace=T))))) 
Grade <-sample(c("Expert", "Master", "Intermediate", "Skilled",
"Newbie"), 50000, replace=T) 
Income <-sample(c(5000:15000),50000, replace = T)
Spending <-sample(c(3000:10000), 50000, replace = T)
Number_of_children <- ifelse(marital_status =="Yes", sample((c(0:5)), length(marital_status =="Yes"), replace=T), "0")
Private_vehicle <- sample(c("Car", "Motorcycle", "Public"),
50000, replace=T)
Home <- sample(c("Rent", "Own", "Credit"), 50000, replace=T) 

Data2 <-data.frame (marital_status, Address, Work_Location, Age, Academic, Job, Grade, Income, Spending, Number_of_children, Private_vehicle, Home)

library(data.table)
data.table(Data2)

Soal 2

Ringkasan Statistik penting seperti apa yang bisa Anda dapatkan dari kumpulan data Anda?

R

summary(Data2)
##  marital_status       Address          Work_Location           Age       
##  Length:50000       Length:50000       Length:50000       Min.   :19.00  
##  Class :character   Class :character   Class :character   1st Qu.:29.00  
##  Mode  :character   Mode  :character   Mode  :character   Median :39.00  
##                                                           Mean   :38.96  
##                                                           3rd Qu.:49.00  
##                                                           Max.   :59.00  
##    Academic             Job               Grade               Income     
##  Length:50000       Length:50000       Length:50000       Min.   : 5000  
##  Class :character   Class :character   Class :character   1st Qu.: 7507  
##  Mode  :character   Mode  :character   Mode  :character   Median :10027  
##                                                           Mean   :10012  
##                                                           3rd Qu.:12528  
##                                                           Max.   :15000  
##     Spending     Number_of_children Private_vehicle        Home          
##  Min.   : 3000   Length:50000       Length:50000       Length:50000      
##  1st Qu.: 4765   Class :character   Class :character   Class :character  
##  Median : 6501   Mode  :character   Mode  :character   Mode  :character  
##  Mean   : 6507                                                           
##  3rd Qu.: 8256                                                           
##  Max.   :10000

`

Soal 3

Menurut perhitungan dan analisis Anda, pelanggan mana yang potensial untuk Anda pertahankan?

R

Data2$NetWorth = Data2$Income-Data2$Spending

Data2
#Potential untuk dipertahankan
subset(Data2, NetWorth>= 7000)

Referensi

  1. ref 1
  2. ref 2
  3. ref 3
LS0tDQp0aXRsZTogIkFsZ29yaXRtYSAmIFN0cnVrdHVyIERhdGEiDQpzdWJ0aXRsZTogIn4gVWppYW4gVGVuZ2FoIFNlbWVzdGVyIH4iDQphdXRob3I6ICJLZW50IEp1YW4gTmF0YW5pZWwgWWFvaXNva2hpIFplbmRyYXRvICgyMDIxNDUyMDAwNCkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyb2JvYm9vazogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCg0KLS0tDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoY2xhc3Muc291cmNlID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgY2xhc3Mub3V0cHV0ID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEYsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEYpDQoNCmxpYnJhcnkocmV0aWN1bGF0ZSkNCmxpYnJhcnkoUmNwcCkNCg0KYGBgDQoNCjxicj4NCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IC01MHB4IDUwcHggMHB4IDUwcHg7IHdpZHRoOjMwJSIgc3JjPSJGb3RvLnBuZyIvPiANCg0KfA0KOi0tLS0gfDotLS0tDQoqKktvbnRhayoqfCAqKjogJFxkb3duYXJyb3ckKioNCkVtYWlsfCBrZW50LnplbmRyYXRvQHN0dWRlbnQubWF0YW5hdW5pdmVyc2l0eS5hYy5pZA0KUlB1YnMgIHwgaHR0cHM6Ly9ycHVicy5jb20va2VudHplbmQwMy8NCg0KKioqDQoNCiMgS2FzdXMgMSANCg0KQXN1bXNpa2FuIEFuZGEgdGVsYWggbWVuZ3VtcHVsa2FuIGJlYmVyYXBhIGt1bXB1bGFuIGRhdGEgZGFyaSBwZXJ1c2FoYWFuIGBBQkMgUHJvcGVydHlgIHNlcGVydGkgeWFuZyBkYXBhdCBraXRhIGxpaGF0IHBhZGEgdGFiZWwgYmVyaWt1dDogDQoNCmBgYHtyLCBtZXNzYWdlPUZ9DQpJZCAgICAgICAgICAgICA8LSAoMToxMDAwMCkNCk1hcmtldGluZ19OYW1lIDwtIHJlcChjKCJBbmdlbCIsIlNoZXJseSIsIlZhbmVzc2EiLCJJcmVuZSIsIkp1bGlhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmVmZnJ5IiwiTmlraXRhIiwiS2VmYXMiLCJTaWFuYSIsIkxhbGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkZhbGxlbiIsIkFyZGlmbyIsIktldmluIiwiSnVlbiIsIkplcnJlbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSW1lbGRhIiwiV2lkaSIsIlRoZW9kb3JhIiwiRWx2YW5pIiwiSm9uYXRoYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIlNvZmlhIiwiQWJyYWhhbSIsIlNpdGkiLCJOaWtvIiwiU2VmbGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkJlbmUiLCAiRGlhbmEiLCAiUHVwZSIsICJBbmRpIiwgIlRhdGhhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJFbmRyaSIsICJNb25pa2EiLCAiSGFucyIsICJEZWJvcmEiLCJIYW5pZmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkphbWVzIiwgIkppaGFuIiwgIkZyaXNrYSIsIkFyZGl3YW4iLCAiQmFrdGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkFudGhvbiIsIkFtcnkiLCAiV2l3aWsiLCAiQmFzdGlhbiIsICJCdWRpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJMZW8iLCJTaW1vbiIsIk1hdGl1cyIsIkFycnkiLCAiRWxpYW5kbyIpLCAyMDApDQpXb3JrX0V4cCAgICAgICA8LSByZXAoYygxLjMsMi40LDIuNSwzLjYsMy43LDQuNyw1LjcsNi43LDcuNyw3LjMsDQogICAgICAgICAgICAgICAgICAgICAgICA1LjMsNS4zLDEwLDkuMywzLjMsMy4zLDMuNCwzLjQsMy41LDUuNiwNCiAgICAgICAgICAgICAgICAgICAgICAgIDMuNSw0LjYsNC42LDUuNyw2LjIsNC40LDYuNCw2LjQsMy41LDcuNSwNCiAgICAgICAgICAgICAgICAgICAgICAgIDQuNiwzLjcsNC43LDQuMyw1LjIsNi4zLDcuNCwyLjQsMy40LDguMiwNCiAgICAgICAgICAgICAgICAgICAgICAgIDYuNCw3LjIsMS41LDcuNSwxMCw0LjUsNi41LDcuMiw3LjEsNy42KSwyMDApDQpDaXR5ICAgICAgICAgICA8LSBzYW1wbGUoYygiSmFrYXJ0YSIsIkJvZ29yIiwiRGVwb2siLCJUZW5nZXJhbmciLCJCZWthc2kiKSwxMDAwMCwgcmVwbGFjZSA9IFQpDQpDbHVzdGVyICAgICAgICA8LSBzYW1wbGUoYygiVmljdG9yaWEiLCJQYWxteXJhIiwiV2lub25hIiwiVGlhcmEiLCAiTmFyYWRhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJvbmlhIiwiTGF2ZXNoIiwiQWxpbmRyYSIsIlN3ZWV0aG9tZSIsICJBc2VyYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVyYWRhbWFpIiwiQWxiYXNpYSIsICJBZGFyYSIsIk5lb24iLCJBcmFuYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNva2EiLCAiUHJpbWFkb25hIiwgIk11dGlhcmEiLCJQZXJtYXRhIiwiQWxhbWFuZGEiICksIDEwMDAwLCByZXBsYWNlPVQpDQpQcmljZSAgICAgICAgICA8LSBzYW1wbGUoYyg3MDAwOjE1MDAwKSwxMDAwMCwgcmVwbGFjZSA9IFQpDQpEYXRlX1NhbGVzICAgICA8LSBzYW1wbGUoc2VxKGFzLkRhdGUoIjIwMTgvMDEvMDEiKSwgYnkgPSAiZGF5IiwgbGVuZ3RoLm91dCA9IDEwMDApLDEwMDAwLCByZXBsYWNlID0gVCkNCkFkdmVydGlzZW1lbnQgIDwtIHNhbXBsZShjKDE6MjApLCAxMDAwMCwgcmVwbGFjZSA9IFQpDQpEYXRhICAgICAgICAgICA8LSBkYXRhLmZyYW1lKElkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2V0aW5nX05hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtfRXhwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXR5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbHVzdGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmljZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZV9TYWxlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWR2ZXJ0aXNlbWVudCkNCmxpYnJhcnkoRFQpDQpkYXRhdGFibGUoRGF0YSkNCmBgYA0KDQojIyBTb2FsIDEgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KS2F0ZWdvcmlrYW4gdmFyaWFiZWwgYEhhcmdhYCBwYWRhIGRhdGFzZXQgZGkgYXRhcyBtZW5qYWRpIHRpZ2Ega2Vsb21wb2sgc2ViYWdhaSBiZXJpa3V0Og0KDQoqICRcdGV4dHtIaWdofSA+IDEyMDAwJA0KKiAkMTAwMDAgXGxlIFx0ZXh0e01lZGl1bX0gXGxlIDEyMDAwJA0KKiAkXHRleHR7TG93fSA8IDEwMDAwJA0KDQpUZXRhcGthbiBrZSBkYWxhbSB2YXJpYWJlbCBiYXJ1IHlhbmcgZGlzZWJ1dCBgS2VsYXNgIGRlbmdhbiBtZW5nZ3VuYWthbiBmdW5nc2kga29udHJvbCBgSWZgLCBgZWxzZSBpZmAsIGRhbiBgZWxzZWAuDQoNCiMjIyBSDQoNCmBgYHtyfQ0KeCA9IERhdGEkUHJpY2UNCg0KYT0gaWZlbHNlKCh4PjEyMDAwKSxwcmludCgnSGlnaCcpLA0KICAgICAgICAgIGlmZWxzZSgoeD49MTAwMDAgJiB4PD0gMTIwMDApLCBwcmludCgiTWVkaXVtIikscHJpbnQoJ0xvdycpDQogICAgICAgICAgICAgICAgICkpDQoNCktlbGFzID0gYQ0KRGF0YTEgPC0gZGF0YS5mcmFtZShJZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtldGluZ19OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrX0V4cCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2l0eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2x1c3RlciwNCiAgICAgICAgICAgICAgICAgICAgUHJpY2UsDQogICAgICAgICAgICAgICAgICAgIEtlbGFzLA0KICAgICAgICAgICAgICAgICAgICBEYXRlX1NhbGVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZHZlcnRpc2VtZW50KQ0KZGF0YXRhYmxlKERhdGExKQ0KYGBgDQoNCiMjIFNvYWwgMiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpLYXRlZ29yaWthbiB2YXJpYWJlbCBgSGFyZ2FgIHBhZGEgZGF0YXNldCBkaSBhdGFzIG1lbmphZGkgZW5hbSBrZWxvbXBvayBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiogQm9va2luZ19mZWUgbnlhIDUgJSBqaWthICRcdGV4dHtQcmljZX0gPCA4MDAwJA0KKiBCb29raW5nX2ZlZSBueWEgNiAlIGppa2EgJDgwMDAgXGxlIFx0ZXh0e1ByaWNlfSA8IDkwMDAkDQoqIEJvb2tpbmdfZmVlIG55YSA3ICUgamlrYSAkOTAwMCBcbGUgXHRleHR7UHJpY2V9IDwgMTAwMDAkDQoqIEJvb2tpbmdfZmVlIG55YSA4ICUgamlrYSAkMTAwMDAgXGxlIFx0ZXh0e1ByaWNlfSA8IDExMDAwJA0KKiBCb29raW5nX2ZlZSBueWEgOSAlIGppa2EgJDExMDAwIFxsZSBcdGV4dHtQcmljZX0gPCAxMzAwMCQNCiogQm9va2luZ19mZWUgbnlhIDEwICUgamlrYSAkMTMwMDAgXGxlIFx0ZXh0e1ByaWNlfSBcbGUgMTUwMDAkDQoNClRldGFwa2FuIGtlIGRhbGFtIHZhcmlhYmVsIGJhcnUgeWFuZyBkaXNlYnV0IGBCb29raW5nX2ZlZWAgZGVuZ2FuIG1lbmdndW5ha2FuIGZ1bmdzaSBrb250cm9sIGBJZmAsIGBlbHNlIGlmYCwgZGFuIGBlbHNlYC4NCg0KIyMjIFINCg0KYGBge3J9DQp4ID0gRGF0YSRQcmljZQ0KDQphPSBpZmVsc2UoKHg+PTEzMDAwICYgeDw9MTUwMDApLHByaW50KCcxMCUnKSwNCiAgICAgICAgICBpZmVsc2UoKHg+PTExMDAwICYgeDwxMzAwMCkscHJpbnQoIjklIiksDQogICAgICAgICAgICAgICAgIGlmZWxzZSgoeD49MTAwMDAgJiB4PDExMDAwKSxwcmludCgiOCUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSgoeD49OTAwMCAmIHg8MTAwMDApLHByaW50KCI3JSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSgoeD49ODAwMCAmIHg8OTAwMCkscHJpbnQoIjYlIikscHJpbnQoJzUlJykNCiAgICAgICAgICAgICAgICAgKSkpKSkNCg0KQm9va2luZ19GZWUgPSBhDQpEYXRhMSA8LSBkYXRhLmZyYW1lKElkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2V0aW5nX05hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtfRXhwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXR5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbHVzdGVyLA0KICAgICAgICAgICAgICAgICAgICBQcmljZSwNCiAgICAgICAgICAgICAgICAgICAgS2VsYXMsDQogICAgICAgICAgICAgICAgICAgIEJvb2tpbmdfRmVlLA0KICAgICAgICAgICAgICAgICAgICBEYXRlX1NhbGVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZHZlcnRpc2VtZW50KQ0KZGF0YXRhYmxlKERhdGExKQ0KYGBgDQoNCiMjIFNvYWwgMyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpNZW51cnV0IGt1bXB1bGFuIGRhdGEgYWtoaXIgeWFuZyB0ZWxhaCBBbmRhIGJ1YXQgcGFkYSBzb2FsIG5vIDIsIHNheWEgYmVyYXN1bXNpIGJhaHdhIEFuZGEgdGVsYWggYmVrZXJqYSBzZWJhZ2FpIHBlbWFzYXJhbiBkaSBwZXJ1c2FoYWFuIGBBQkMgUHJvcGVydHlgLCBiYWdhaW1hbmEgQW5kYSBkYXBhdCBtZW5ndW1wdWxrYW4gc2VtdWEgaW5mb3JtYXNpIHRlbnRhbmcgcGVuanVhbGFuIEFuZGEgZGVuZ2FuIG1lbmdndW5ha2FuIHBlcm55YXRhYW4gYGZvcmAuIA0KDQojIyMgUg0KDQpgYGB7cn0NCmxpYnJhcnkoRFQpDQoNCno9Zm9yKHggIGluICJMYWxhIiApe3ByaW50KHN1YnNldChEYXRhLHN1YnNldD0oTWFya2V0aW5nX05hbWU9PSB4KSkpfQ0KYGBgDQoNCiMjIFNvYWwgNCB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpKaWthIEFuZGEgYWthbiBtZW5kYXBhdGthbiBib251cyAyJSBkYXJpIGBCb29raW5nIGZlZWAgcGVyIHVuaXQgc2ViYWdhaSBwZW1hc2FyYW4gZGFuIGp1Z2EgbWVuZGFwYXRrYW4gYm9udXMgdGFtYmFoYW4gMSUgamlrYSBBbmRhIHRlbGFoIGJla2VyamEgZGkgcGVydXNhaGFhbiBpbmkgc2VsYW1hIGxlYmloIGRhcmkgMyB0YWh1bi4gU2lsYWthbiBoaXR1bmcgdG90YWwgYm9udXMgZGVuZ2FuIG1lbmdndW5ha2FuIHBlcm55YXRhYW4gYGlmLCBmb3IsIGRhbiBicmVha2AuICANCg0KIyMjIFINCg0KYGBge3J9DQp4IDwtIHN1YnNldChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJMYWxhIikpDQoNCnk9IGlmZWxzZSgoeCRXb3JrX0V4cCA8MyksDQogICAgICAgICAgKHgkUHJpY2UgKiB4JEJvb2tpbmdfRmVlKSAqKDAuMDIpLA0KICAgICAgICAgICh4JFByaWNlICogeCRCb29raW5nX0ZlZSkgKigwLjAxKSkNCg0KeCRCb251cyA9eQ0KeA0KDQpgYGANCmBgYHtyfQ0KQm9udXM9c3VtKHgkQm9udXMpDQpCb251cw0KYGBgDQoNCg0KIyMgU29hbCA1IHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClBhZGEgYmFnaWFuIGluaSwgQW5kYSBkaWhhcmFwa2FuIGRhcGEgbWVtYnVhdCBmdW5nc2kgeWFuZyBkYXBhdCBtZW5qYXdhYiBzZXRpYXAgcGVueWF0YWFuIGRpYmF3YWggaW5pIGRlbmdhbiBtZWxpYmF0a2FuIHNldGlhcCBmdW5nc2kga29udHJvbCB5YW5nIGRpcGVsYWphcmkgcGFkYSBwZXJ0ZW11YW4gNy4NCg0KKiBTaWFwYSBuYW1hIG1hcmtldGluZyBwZW1hc2FyYW4gdGVyYmFpaz8NCiogS290YSBkYW4gQ2x1c3RlciBtYW5hIHlhbmcgcGFsaW5nIG1lbmd1bnR1bmdrYW4/DQoqIEhpdHVuZyB0b3RhbCBiaWF5YSBpa2xhbiBBbmRhLCBqaWthIEFuZGEgaGFydXMgbWVtYmF5YXJueWEgJDQgc2V0aWFwIGthbGkgaWtsYW4uDQoqIEhpdHVuZyByYXRhLXJhdGEgYmlheWEgaWtsYW4gdW50dWsgc2V0aWFwIG1hcmtldGluZyBkaSBQZXJ1c2FoYWFuIHRlcnNlYnV0Lg0KKiBIaXR1bmcgVG90YWwgUGVuZGFwYXRhbiAoZGFsYW0gQnVsYW5hbikgDQoNCiMjIyBSDQoNCmBgYHtyfQ0KIEFuZ2VsID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBbmdlbCIpKSANClNoZXJseT1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlNoZXJseSIpKSANClZhbmVzc2E9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlZhbmVzc2EiICApKQ0KSXJlbmU9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIklyZW5lIikpDQpKdWxpYW49c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKdWxpYW4iKSkNCkplZmZyeSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKZWZmcnkiKSkgDQpOaWtpdGEgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSJOaWtpdGEiKSkgDQpLZWZhcyA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIktlZmFzIikpDQpTaWFuYSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJTaWFuYSIpKSANCkxhbGE9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJMYWxhIikpIA0KRmFsbGVuID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkZhbGxlbiIpKSANCkFyZGlmbyA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBcmRpZm8iKSkNCktldmluID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIktldmluIikpDQpKdWVuID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkp1ZW4iKSkgDQpKZXJyZWwgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSmVycmVsIikpDQpJbWVsZGEgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSW1lbGRhIikpIA0KV2lkaSA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIldpZGkiKSkgDQpUaGVvZG9yID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJUaGVvZG9yIikpIA0KRWx2YW5pID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkVsdmFuaSIpKSANCkpvbmF0aGFuID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKb25hdGhhbiIpKSANClNvZmlhID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlNvZmlhIikpIA0KQWJyYWhhbSA9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQWJyYWhhbSIpKSANClNpdGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2l0aSIpKSANCk5pa28gPXN1YnNldChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJOaWtvIikpIA0KU2VmbGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2VsZmkiKSkgDQpCZW5lID1zdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQmVuZSIpKSANCkRpYW5hID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkRpYW5hIikpDQpQdXBlID1zdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiUHVwZSIpKSANCkFuZGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQW5kaSIpKSANClRhdGhhID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlRhdGhhIikpDQpFbmRyaT1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkVuZHJpIikpIA0KTW9uaWthPSBzdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiTW9uaWthIikpIA0KSGFucyA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkhhbnMiKSkgDQpEZWJvcmE9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiRGVib3JhIikpIA0KSGFuaWZhPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkhhbmlmYSIpKQ0KSmFtZXMgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSmFtZXMiKSkgDQpKaWhhbiA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKaWhhbiIpKQ0KRnJpc2thID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkZyaXNrYSIpKSANCkFyZGl3YW4gPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFyZGl3YW4iKSkgDQpCYWt0aSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJCYWt0aSIpKSANCkFudGhvbiA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBbnRob24iKSkgDQpBbXJ5ID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFtcnkiKSkgDQpXaXdpayA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJXaXdpayIpKSANCkJhc3RpYW4gPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkJhc3RpYW4iKSkgDQpCdWRpID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJCdWRpIikpIA0KTGVvID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJMZW8iKSkgDQpTaW1vbiA9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2ltb24iKSkgDQpNYXRpdXMgPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIk1hdGl1cyIpKSANCkFycnkgPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFycnkiKSkgDQpFbGlhbmRvID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJFbGlhbmRvIikpIA0KICANCk5hbWFfU2FsZXMgPSBjKCJBbmdlbCIsIlNoZXJseSIsIlZhbmVzc2EiLCJJcmVuZSIsIkp1bGlhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmVmZnJ5IiwiTmlraXRhIiwiS2VmYXMiLCJTaWFuYSIsIkxhbGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkZhbGxlbiIsIkFyZGlmbyIsIktldmluIiwiSnVlbiIsIkplcnJlbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSW1lbGRhIiwiV2lkaSIsIlRoZW9kb3JhIiwiRWx2YW5pIiwiSm9uYXRoYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIlNvZmlhIiwiQWJyYWhhbSIsIlNpdGkiLCJOaWtvIiwiU2VmbGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkJlbmUiLCAiRGlhbmEiLCAiUHVwZSIsICJBbmRpIiwgIlRhdGhhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJFbmRyaSIsICJNb25pa2EiLCAiSGFucyIsICJEZWJvcmEiLCJIYW5pZmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkphbWVzIiwgIkppaGFuIiwgIkZyaXNrYSIsIkFyZGl3YW4iLCAiQmFrdGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkFudGhvbiIsIkFtcnkiLCAiV2l3aWsiLCAiQmFzdGlhbiIsICJCdWRpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJMZW8iLCJTaW1vbiIsIk1hdGl1cyIsIkFycnkiLCAiRWxpYW5kbyIpDQpwcm9wZXJ0eXNvbGQgPSBjKHN1bShBbmdlbCRQcmljZSksIHN1bShTaGVybHkkUHJpY2UpLCBzdW0oVmFuZXNzYSRQcmljZSksIHN1bShJcmVuZSRQcmljZSksDQpzdW0oSnVsaWFuJFByaWNlKSwgc3VtIChKZWZmcnkkUHJpY2UpLCBzdW0oTmlraXRhJFByaWNlKSwgc3VtKEtlZmFzJFByaWNlKSwgc3VtKFNpYW5hJFByaWNlKSwgc3VtKExhbGEkUHJpY2UpLCBzdW0oRmFsbGVuJFByaWNlKSwgc3VtKEFyZGlmbyRQcmljZSksIHN1bShLZXZpbiRQcmljZSksIHN1bSAoSnVlbiRQcmljZSksIHN1bShKZXJyZWwkUHJpY2UpLCBzdW0oSW1lbGRhJFByaWNlKSwgc3VtKFdpZGkkUHJpY2UpLCBzdW0oVGhlb2RvciRQcmljZSksIHN1bShFbHZhbmkkUHJpY2UpLCBzdW0oSm9uYXRoYW4kUHJpY2UpLCBzdW0oU29maWEkUHJpY2UpLCBzdW0oQWJyYWhhbSRQcmljZSksIHN1bShTaXRpJFByaWNlKSwgc3VtKE5pa28kUHJpY2UpLCBzdW0oU2VmbGkkUHJpY2UpLCBzdW0oQmVuZSRQcmljZSksIHN1bSggRGlhbmEkUHJpY2UpLCBzdW0gKFB1cGUkUHJpY2UpLCBzdW0oQW5kaSRQcmljZSksIHN1bSggVGF0aGEkUHJpY2UpLCBzdW0oRW5kcmkkUHJpY2UpLCBzdW0oIE1vbmlrYSRQcmljZSksIHN1bSggSGFucyRQcmljZSksIHN1bSggRGVib3JhJFByaWNlKSwgc3VtKEhhbmlmYSRQcmljZSksIHN1bSAoSmFtZXMkUHJpY2UpLCBzdW0oIEppaGFuJFByaWNlKSwgc3VtKCBGcmlza2EkUHJpY2UpLCBzdW0oQXJkaXdhbiRQcmljZSksIHN1bShCYWt0aSRQcmljZSksIHN1bShBbnRob24kUHJpY2UpLCBzdW0oQW1yeSRQcmljZSksIHN1bSggV2l3aWskUHJpY2UpLCBzdW0oIEJhc3RpYW4kUHJpY2UpLCBzdW0oIEJ1ZGkkUHJpY2UpLCBzdW0gKExlbyRQcmljZSksIHN1bShTaW1vbiRQcmljZSksIHN1bShNYXRpdXMkUHJpY2UpLCBzdW0oQXJyeSRQcmljZSksIHN1bSggRWxpYW5kbyRQcmljZSkpDQoNCmRhdGFtYXJrZXRpbmc9IGRhdGEuZnJhbWUoTmFtYV9TYWxlcywgcHJvcGVydHlzb2xkKQ0KDQpkYXRhbWFya2V0aW5nDQoNCmBgYA0KYGBge3J9DQojIEJlc3QgTWFya2V0aW5nDQpkYXRhbWFya2V0aW5nW3doaWNoLm1heChkYXRhbWFya2V0aW5nJHByb3BlcnR5c29sZCksXQ0KYGBgDQpgYGB7cn0NCiNLb3RhIGRhbiBDbHVzdGVyIFBhbGluZyBNZW5ndW50dW5na2FuDQpwcm9maXRhYmxlPSBEYXRhWyxjKCJDaXR5IiwiQ2x1c3RlciIsIlByaWNlIildDQoNCnByb2ZpdGFibGVbd2hpY2gubWF4KHByb2ZpdGFibGUkUHJpY2UpLF0NCmBgYA0KDQpgYGB7cn0NCiNUb3RhbCBCaWF5YSBTZHZlcnRpc21lbnQgaXJlbmUNCmNvc3Rmb3JhZCA9IHN1YnNldChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJJcmVuZSIpKQ0KDQphZHNjb3N0ID0gKCBjb3N0Zm9yYWQkQWR2ZXJ0aXNlbWVudCAqIDQpDQoNClRvdGFsY29zdD1wcmludChzdW0oYWRzY29zdCkpDQoNCmBgYA0KDQpgYGB7cn0NCiMgUmF0YS1SYXRhIGNvc3QgaWtsYW4NCk5hbWFzYWxlcyA9IGMoIkFuZ2VsIiwiU2hlcmx5IiwiVmFuZXNzYSIsIklyZW5lIiwiSnVsaWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJKZWZmcnkiLCJOaWtpdGEiLCJLZWZhcyIsIlNpYW5hIiwiTGFsYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRmFsbGVuIiwiQXJkaWZvIiwiS2V2aW4iLCJKdWVuIiwiSmVycmVsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJJbWVsZGEiLCJXaWRpIiwiVGhlb2RvcmEiLCJFbHZhbmkiLCJKb25hdGhhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiU29maWEiLCJBYnJhaGFtIiwiU2l0aSIsIk5pa28iLCJTZWZsaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQmVuZSIsICJEaWFuYSIsICJQdXBlIiwgIkFuZGkiLCAiVGF0aGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHJpIiwgIk1vbmlrYSIsICJIYW5zIiwgIkRlYm9yYSIsIkhhbmlmYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmFtZXMiLCAiSmloYW4iLCAiRnJpc2thIiwiQXJkaXdhbiIsICJCYWt0aSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQW50aG9uIiwiQW1yeSIsICJXaXdpayIsICJCYXN0aWFuIiwgIkJ1ZGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkxlbyIsIlNpbW9uIiwiTWF0aXVzIiwiQXJyeSIsICJFbGlhbmRvIikNCnJhdGFjb3N0ID0gZm9yICh4IGluIE5hbWFzYWxlcykgew0KICBmPSBzdWJzZXQgKCBEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09IHggKSkNCiAgYz1zdW0oZiRBZHZlcnRpc2VtZW50ICogNCkNCiAgcHJpbnQgKGNhdChzdW0oYykvbGVuZ3RoKGYkSWQpLCAoY2F0KHgsICdSYXRhLXJhdGEgcGVuZ2VsdWFyYW4gdW50dWsgaWtsYW4nKSkpKX0NCg0KDQoNCmBgYCAgIA0KDQpgYGB7cn0NCiMgUGVuZGFwYXRhbg0KDQpyZXZlbnVlPSAoc3VtKERhdGEkUHJpY2UpLShzdW0oRGF0YSRBZHZlcnRpc21lbnQpICogNCkpLygobWF4KERhdGEkV29ya19FeHApKSoxMikNCg0KcmV2ZW51ZQ0KYGBgDQoNCg0KDQoNCg0KDQoNCiMgS2FzdXMgMg0KDQpNaXNhbGthbiBBbmRhIG1lbWlsaWtpIHByb3llayByaXNldCBwYXNhciB1bnR1ayBtZW1wZXJ0YWhhbmthbiBiZWJlcmFwYSBwZWxhbmdnYW4gcG90ZW5zaWFsIGRpIHBlcnVzYWhhYW4gQW5kYS4gTWFyaSBraXRhIGFzdW1zaWthbiBBbmRhIGJla2VyamEgZGkgcGVydXNhaGFhbiBhc3VyYW5zaSBBQkMuIFVudHVrIG1lbGFrdWthbm55YSwgQW5kYSBpbmdpbiBtZW5ndW1wdWxrYW4ga3VtcHVsYW4gZGF0YSBiZXJpa3V0Og0KDQoqICoqTWFyaXRhbF9TdGF0dXMqKiAgICA6IG1lbmV0YXBrYW4gc3RhdHVzIHBlcmthd2luYW4gYWNhayAoIllhIiwgIlRpZGFrIikNCiogKipBZGRyZXNzKiogICAgICAgICAgIDogYmVyaWthbiBhbGFtYXQgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKldvcmtfTG9jYXRpb24qKiAgICAgOiBtZW5ldGFwa2FuIGxva2FzaSBrZXJqYSBzZWNhcmEgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKkFnZSoqICAgICAgICAgICAgICAgOiBtZW5ldGFwa2FuIHVydXRhbiBhbmdrYSBhY2FrIChkYXJpIDE5IGhpbmdnYSA2MCkgDQoqICoqQWNhZGVtaWMqKiAgICAgICAgICA6IG1lbmV0YXBrYW4gdGluZ2thdCBha2FkZW1payBhY2FrICgiSi5TY2hvb2wiLCAiSC5TY2hvb2wiLCAiU2FyamFuYSIsICJNYWdpc3RlciIsICJQaGQiKSANCiogKipKb2IqKiAgICAgICAgICAgICAgIDogMTAgcGVrZXJqYWFuIGFjYWsgdW50dWsgc2V0aWFwIHRpbmdrYXQgYWthZGVtaWsgIA0KKiAqKkdyYWRlKiogICAgICAgICAgICAgOiA1IG5pbGFpIGFjYWsgdW50dWsgc2V0aWFwIFBla2VyamFhbiANCiogKipJbmNvbWUqKiAgICAgICAgICAgIDogdGV0YXBrYW4gcGVuZGFwYXRhbiB5YW5nIG11bmdraW4gdW50dWsgc2V0aWFwIFBla2VyamFhbiAgDQoqICoqU3BlbmRpbmcqKiAgICAgICAgICA6IHRldGFwa2FuIGtlbXVuZ2tpbmFuIHBlbmdlbHVhcmFuIHVudHVrIHNldGlhcCBQZWtlcmphYW4gDQoqICoqTnVtYmVyX29mX2NoaWxkcmVuKio6IG1lbmV0YXBrYW4gbm9tb3IgYWNhayBkaSBhbnRhcmEgMCBkYW4gMTAgKHNlc3VhaSBkZW5nYW4gc3RhdHVzIHBlcmthd2luYW4pDQoqICoqUHJpdmF0ZV92ZWhpY2xlKiogICA6IG1lbmV0YXBrYW4ga2VtdW5na2luYW4ga2VuZGFyYWFuIHByaWJhZGkgdW50dWsgc2V0aWFwIG9yYW5nICgiTW9iaWwiLCAic2VwZWRhIG1vdG9yIiwgIlVtdW0iKSANCiogKipIb21lKiogICAgICAgICAgICAgIDogIlNld2EiLCAiTWlsaWsiLCAiS3JlZGl0IiANCg0KIyMgU29hbCAxIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClRvbG9uZyBiZXJpa2FuIHNheWEga3VtcHVsYW4gZGF0YSB0ZW50YW5nIGluZm9ybWFzaSA1MDAwMCBwZWxhbmdnYW4geWFuZyBtZW5nYWN1IHBhZGEgc2V0aWFwIHZhcmlhYmVsIGRpIGF0YXMhIA0KDQojIyMgUiANCg0KYGBge3J9DQptYXJpdGFsX3N0YXR1cyA8LSBzYW1wbGUoYygiWWVzIiwgIk5vIiksIDUwMDAwLCByZXBsYWNlID0gVCkgDQpBZGRyZXNzIDwtc2FtcGxlKGMoIkpha2FydGEiLCAiQm9nb3IiLCAiRGVwb2siLCAiVGFuZ2VyYW5nIiwgIkJla2FzaSIpLDUwMDAwLCByZXBsYWNlPVQpDQpXb3JrX0xvY2F0aW9uIDwtc2FtcGxlKGMoIkpha2FydGEiLCAiQm9nb3IiLCAiRGVwb2siLCAiVGFuZ2VyYW5nIiwgIkJla2FzaSIpLDUwMDAwLCByZXBsYWNlPVQpDQpBZ2UgPC1mbG9vciAocnVuaWYoNTAwMDAsMTksNjApKQ0KQWNhZGVtaWMgPC1zYW1wbGUoYygiSi5TY2hvb2wiLCAiSC5TY2hvb2wiLCAiVW5kZXJncmFkdWF0ZSIsICJNYXN0ZXIiLA0KIlBoZCIpLCA1MDAwMCwgcmVwbGFjZSA9IFQpIA0KSm9iIDwtaWZlbHNlIChBY2FkZW1pYz09IkouU2Nob29sIiwgc2FtcGxlKGMoIlNlY3VyaXR5IiwiU3RvcmVrZWVwZXIiICwNCiJTdXBpciIsICJPZmZpY2UgQm95IiwgIkNsZWFuaW5nIFNlcnZpY2UiLCAiIEhlbHBlciIsICJMaWZlZ3VhcmQiLCAiQ2FzaGllciIsICJCdWthIFRva28iLCAiQnVydWggQW5na3V0IiksDQpsZW5ndGgoQWNhZGVtaWM9PSJKLlNjaG9vbCIpLCByZXBsYWNlPVQpLCBpZmVsc2UgKEFjYWRlbWljPT0iSC4gU2Nob29sIiwgc2FtcGxlKGMoIkluZmx1ZW5jZXIiLCAiQ2FzaGllciIsDQoiV2FpdGVyIiwgIlR1dG9yIExlcyIsICJDdXN0b21lciBTZXJ2aWNlIiwgIk9wZXJhdG9yIiwgIlNlY3VyaXR5IiwgIkFkbWluIiwgIkdvamVrIERyaXZlciIsICJHcmFiIERyaXZlciIsICksDQpsZW5ndGgoQWNhZGVtaWM9PSJILlNjaG9vbCIpLCByZXBsYWNlPVQpLCBpZmVsc2UoQWNhZGVtaWM9PSJVbmRlcmdyYWR1YXRlIiwgc2FtcGxlKGMoIk51cnNlIiwgIkJ1c2luZXNzIFN0YXJ0VXAgRGV2ZWxvcG1lbnQiLA0KIlBlcnNvbmFsIEFzc2lzdGFudCIsICJQTlMiLCAiQWNjb3VudGFudCIsICJTYWxlcyIsICJQcml2YXRlIERyaXZlciIsICJBZG1pbiBvZiBPbmxpbmUgU2hvcCIpLCBsZW5ndGgoQWNhZGVtaWM9PSJVbmRlcmdyYWR1YXRlIiksDQpyZXBsYWNlPVQpLCBpZmVsc2UoQWNhZGVtaWM9PSJNYXN0ZXIiLCBzYW1wbGUoYygiU29mdHdhcmUgRGV2ZWxvcGVyIiwgIkFjdHVhcmlzdCIsDQoiQ3JlYXRpdmUgVGVhbSIsIkRlc2lnbmVyIiwiQnVzaW5lc3MgYW5hbHlzdCIsICJHcmFwaGljIERlc2lnbmVyIiwgIkVuZ2luZWVyIiwgIkNoZW1pc3QiLCAiRGF0YSBBbmFseXN0IiwgIkFjY291bnRhbnQiLCAiU3RhdGlzdGljaWFuIiksDQpsZW5ndGgoQWNhZGVtaWM9PSJNYXN0ZXIiKSwgcmVwbGFjZT1UKSwgc2FtcGxlKGMoIkhSRCBNYW5hZ2VyIiwgIkNFTyIsDQoiIENvbnN1bHRhbnQiLCAiSGVhZCBvZiBSZXNlYXJjaCIsICJFbnRyZXByZW5ldXJzaGlwIiwgIlBhcnRuZXIgaW4gRmluYW5jZSIsICJNYXRoZW1hdGljaWFucyIsICJTeXN0ZW0gRGV2ZWxvcGVyIiwgIlNocmluayIsICJHZW5lcmFsICBNYW5hZ2VyIiwgIkJvYXJkIERpcmVjdG9yIiksDQpsZW5ndGggKEFjYWRlbWljPT0iUGhkIiksIHJlcGxhY2U9VCkpKSkpIA0KR3JhZGUgPC1zYW1wbGUoYygiRXhwZXJ0IiwgIk1hc3RlciIsICJJbnRlcm1lZGlhdGUiLCAiU2tpbGxlZCIsDQoiTmV3YmllIiksIDUwMDAwLCByZXBsYWNlPVQpIA0KSW5jb21lIDwtc2FtcGxlKGMoNTAwMDoxNTAwMCksNTAwMDAsIHJlcGxhY2UgPSBUKQ0KU3BlbmRpbmcgPC1zYW1wbGUoYygzMDAwOjEwMDAwKSwgNTAwMDAsIHJlcGxhY2UgPSBUKQ0KTnVtYmVyX29mX2NoaWxkcmVuIDwtIGlmZWxzZShtYXJpdGFsX3N0YXR1cyA9PSJZZXMiLCBzYW1wbGUoKGMoMDo1KSksIGxlbmd0aChtYXJpdGFsX3N0YXR1cyA9PSJZZXMiKSwgcmVwbGFjZT1UKSwgIjAiKQ0KUHJpdmF0ZV92ZWhpY2xlIDwtIHNhbXBsZShjKCJDYXIiLCAiTW90b3JjeWNsZSIsICJQdWJsaWMiKSwNCjUwMDAwLCByZXBsYWNlPVQpDQpIb21lIDwtIHNhbXBsZShjKCJSZW50IiwgIk93biIsICJDcmVkaXQiKSwgNTAwMDAsIHJlcGxhY2U9VCkgDQoNCkRhdGEyIDwtZGF0YS5mcmFtZSAobWFyaXRhbF9zdGF0dXMsIEFkZHJlc3MsIFdvcmtfTG9jYXRpb24sIEFnZSwgQWNhZGVtaWMsIEpvYiwgR3JhZGUsIEluY29tZSwgU3BlbmRpbmcsIE51bWJlcl9vZl9jaGlsZHJlbiwgUHJpdmF0ZV92ZWhpY2xlLCBIb21lKQ0KDQpsaWJyYXJ5KGRhdGEudGFibGUpDQpkYXRhLnRhYmxlKERhdGEyKQ0KYGBgDQoNCg0KDQoNCg0KIyMgU29hbCAyIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClJpbmdrYXNhbiBTdGF0aXN0aWsgcGVudGluZyBzZXBlcnRpIGFwYSB5YW5nIGJpc2EgQW5kYSBkYXBhdGthbiBkYXJpIGt1bXB1bGFuIGRhdGEgQW5kYT8NCg0KIyMjIFINCg0KYGBge3J9DQpzdW1tYXJ5KERhdGEyKQ0KYGBgDQoNCg0KDQpgDQoNCg0KIyMgU29hbCAzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCk1lbnVydXQgcGVyaGl0dW5nYW4gZGFuIGFuYWxpc2lzIEFuZGEsIHBlbGFuZ2dhbiBtYW5hIHlhbmcgcG90ZW5zaWFsIHVudHVrIEFuZGEgcGVydGFoYW5rYW4/IA0KDQojIyMgUg0KDQpgYGB7cn0NCkRhdGEyJE5ldFdvcnRoID0gRGF0YTIkSW5jb21lLURhdGEyJFNwZW5kaW5nDQoNCkRhdGEyDQpgYGANCmBgYHtyfQ0KI1BvdGVudGlhbCB1bnR1ayBkaXBlcnRhaGFua2FuDQpzdWJzZXQoRGF0YTIsIE5ldFdvcnRoPj0gNzAwMCkNCg0KYGBgDQogIA0KDQoNCg0KDQoNCiANCg0KDQojIFJlZmVyZW5zaQ0KDQoxLiAgIHJlZiAxDQoyLiAgIHJlZiAyDQozLiAgIHJlZiAzDQoNCg0KDQoNCg==