Algoritma & Struktur Data

~ Ujian Tengah Semester ~


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/jeremyheriyand/
RPubs https://rpubs.com/jeremyheriyandi23/

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)
write.csv(Data,"C:\\Users\\Public\\Data.csv", row.names = FALSE)

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

Data$Kelas<-ifelse(Data$Price >12000,
                   "high",
            ifelse(Data$Price >=10000 & Data$ Price <=12000,
                   "medium",
            ifelse(Data$Price < 10000,
                   "low",0)))
Data

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
Data$Booking_fee<-ifelse(x < 8000,
                   x * 5/100,
            ifelse(x >= 8000 & x < 9000, 
                   x * 6/100,
            ifelse(x >= 9000 & x  < 10000, 
                   x*7/10000,
            ifelse(x >= 10000 & x < 11000,
                   x* 8/100,
            ifelse(x >= 11000 & x < 13000,
                   x*9/100,
            ifelse(x >= 13000 & x <= 15000,
                   x*10/100,0))))))
                
Data

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

sales ="Nikita"

z=for(i in sales){
               print(subset(Data,
            subset =(Marketing_Name==i)))
}
##        Id Marketing_Name Work_Exp      City   Cluster Price Date_Sales
## 7       7         Nikita      5.7   Jakarta  Alamanda  7861 2019-04-26
## 57     57         Nikita      5.7     Depok     Asera 11077 2018-10-04
## 107   107         Nikita      5.7    Bekasi Teradamai 10801 2019-05-18
## 157   157         Nikita      5.7     Bogor  Victoria 14467 2019-06-06
## 207   207         Nikita      5.7   Jakarta     Asoka 13558 2018-08-13
## 257   257         Nikita      5.7    Bekasi    Narada 11298 2020-09-15
## 307   307         Nikita      5.7 Tengerang     Adara 10837 2019-05-18
## 357   357         Nikita      5.7    Bekasi   Palmyra  8305 2020-01-25
## 407   407         Nikita      5.7 Tengerang     Tiara 12814 2020-09-14
## 457   457         Nikita      5.7     Bogor   Albasia 10397 2020-02-05
## 507   507         Nikita      5.7    Bekasi     Tiara 12068 2018-10-21
## 557   557         Nikita      5.7     Bogor   Albasia  7118 2018-11-21
## 607   607         Nikita      5.7     Depok    Winona 12002 2018-05-24
## 657   657         Nikita      5.7    Bekasi    Lavesh 14332 2018-11-01
## 707   707         Nikita      5.7   Jakarta    Winona  9387 2018-01-21
## 757   757         Nikita      5.7    Bekasi  Alamanda 12913 2018-12-26
## 807   807         Nikita      5.7     Depok  Alamanda 12041 2018-09-06
## 857   857         Nikita      5.7   Jakarta  Alamanda 14371 2019-04-20
## 907   907         Nikita      5.7 Tengerang Sweethome 12823 2019-05-27
## 957   957         Nikita      5.7   Jakarta     Arana 14117 2020-04-11
## 1007 1007         Nikita      5.7     Depok     Asoka  9819 2019-06-01
## 1057 1057         Nikita      5.7     Depok     Asoka 12532 2019-04-06
## 1107 1107         Nikita      5.7   Jakarta   Palmyra  8488 2020-06-10
## 1157 1157         Nikita      5.7    Bekasi  Victoria  8778 2019-01-28
## 1207 1207         Nikita      5.7   Jakarta   Permata  7546 2020-07-20
## 1257 1257         Nikita      5.7    Bekasi    Narada  9036 2019-06-11
## 1307 1307         Nikita      5.7   Jakarta    Lavesh 11117 2018-11-01
## 1357 1357         Nikita      5.7 Tengerang  Victoria 14562 2019-02-03
## 1407 1407         Nikita      5.7   Jakarta   Alindra 12980 2018-06-20
## 1457 1457         Nikita      5.7 Tengerang    Narada 10411 2019-07-27
## 1507 1507         Nikita      5.7 Tengerang   Mutiara 13744 2020-01-04
## 1557 1557         Nikita      5.7   Jakarta    Lavesh  9446 2018-04-24
## 1607 1607         Nikita      5.7 Tengerang     Tiara 14133 2019-05-29
## 1657 1657         Nikita      5.7     Depok    Winona  9259 2020-07-08
## 1707 1707         Nikita      5.7   Jakarta   Peronia  9409 2018-08-01
## 1757 1757         Nikita      5.7     Bogor     Tiara  7548 2020-04-03
## 1807 1807         Nikita      5.7     Depok   Peronia 14649 2020-06-26
## 1857 1857         Nikita      5.7     Depok   Permata 10444 2020-09-03
## 1907 1907         Nikita      5.7     Depok   Alindra  9897 2018-10-27
## 1957 1957         Nikita      5.7   Jakarta   Permata  7357 2018-06-18
## 2007 2007         Nikita      5.7    Bekasi     Arana  8666 2018-12-27
## 2057 2057         Nikita      5.7    Bekasi Sweethome  8652 2019-02-19
## 2107 2107         Nikita      5.7     Depok    Winona 14378 2018-06-21
## 2157 2157         Nikita      5.7    Bekasi     Asoka 14968 2018-10-14
## 2207 2207         Nikita      5.7 Tengerang   Permata  8582 2018-05-15
## 2257 2257         Nikita      5.7 Tengerang   Permata 11481 2019-06-17
## 2307 2307         Nikita      5.7     Bogor     Tiara  8718 2018-12-27
## 2357 2357         Nikita      5.7     Depok Teradamai  9640 2018-04-03
## 2407 2407         Nikita      5.7     Bogor     Adara  7360 2019-11-23
## 2457 2457         Nikita      5.7     Depok      Neon 13929 2018-05-06
## 2507 2507         Nikita      5.7 Tengerang   Permata  9205 2019-10-21
## 2557 2557         Nikita      5.7   Jakarta   Albasia  9874 2019-09-23
## 2607 2607         Nikita      5.7 Tengerang     Arana  8937 2018-04-02
## 2657 2657         Nikita      5.7    Bekasi  Alamanda 10122 2020-07-31
## 2707 2707         Nikita      5.7    Bekasi   Permata  8990 2020-04-27
## 2757 2757         Nikita      5.7     Bogor  Victoria 12226 2018-12-27
## 2807 2807         Nikita      5.7   Jakarta Teradamai  8525 2018-11-12
## 2857 2857         Nikita      5.7     Depok   Peronia 10553 2020-07-11
## 2907 2907         Nikita      5.7   Jakarta    Lavesh  7962 2019-12-02
## 2957 2957         Nikita      5.7    Bekasi   Peronia  7921 2020-06-30
## 3007 3007         Nikita      5.7 Tengerang   Alindra  7954 2020-06-12
## 3057 3057         Nikita      5.7     Depok   Palmyra  7570 2018-07-02
## 3107 3107         Nikita      5.7    Bekasi     Adara  8188 2019-02-27
## 3157 3157         Nikita      5.7 Tengerang      Neon 10214 2020-05-01
## 3207 3207         Nikita      5.7 Tengerang   Alindra 10225 2020-09-23
## 3257 3257         Nikita      5.7     Depok   Permata  9278 2019-06-10
## 3307 3307         Nikita      5.7     Bogor    Narada 14653 2018-05-04
## 3357 3357         Nikita      5.7     Depok     Arana 11202 2020-01-31
## 3407 3407         Nikita      5.7     Depok    Lavesh 11610 2018-10-27
## 3457 3457         Nikita      5.7    Bekasi    Winona 12516 2018-10-22
## 3507 3507         Nikita      5.7     Depok   Mutiara 13485 2019-04-19
## 3557 3557         Nikita      5.7 Tengerang  Victoria 10152 2019-09-24
## 3607 3607         Nikita      5.7     Depok     Arana 11624 2018-04-27
## 3657 3657         Nikita      5.7    Bekasi     Asera 10682 2019-10-20
## 3707 3707         Nikita      5.7     Depok   Peronia 10437 2020-05-22
## 3757 3757         Nikita      5.7    Bekasi    Narada  7143 2020-04-20
## 3807 3807         Nikita      5.7    Bekasi Sweethome  8598 2020-03-19
## 3857 3857         Nikita      5.7     Bogor   Alindra 10430 2018-07-04
## 3907 3907         Nikita      5.7   Jakarta      Neon 13936 2019-06-18
## 3957 3957         Nikita      5.7     Bogor      Neon 14935 2018-11-12
## 4007 4007         Nikita      5.7     Bogor     Tiara  7303 2018-03-04
## 4057 4057         Nikita      5.7 Tengerang     Adara 13268 2018-09-18
## 4107 4107         Nikita      5.7   Jakarta    Narada 11010 2018-04-04
## 4157 4157         Nikita      5.7 Tengerang     Tiara 12879 2019-02-27
## 4207 4207         Nikita      5.7     Depok Sweethome  9589 2018-07-12
## 4257 4257         Nikita      5.7    Bekasi    Winona  8861 2018-02-07
## 4307 4307         Nikita      5.7    Bekasi    Winona 13079 2018-02-25
## 4357 4357         Nikita      5.7     Depok   Palmyra 12549 2018-01-04
## 4407 4407         Nikita      5.7     Bogor Teradamai 14866 2020-01-17
## 4457 4457         Nikita      5.7     Depok   Alindra 12783 2020-02-19
## 4507 4507         Nikita      5.7    Bekasi   Peronia 10115 2019-04-26
## 4557 4557         Nikita      5.7     Bogor     Arana  7806 2019-08-15
## 4607 4607         Nikita      5.7     Depok  Alamanda 10091 2018-08-05
## 4657 4657         Nikita      5.7     Depok     Asoka  7069 2019-11-26
## 4707 4707         Nikita      5.7    Bekasi     Arana 12012 2018-10-19
## 4757 4757         Nikita      5.7   Jakarta    Lavesh  8003 2018-03-13
## 4807 4807         Nikita      5.7     Depok Primadona 14508 2020-07-15
## 4857 4857         Nikita      5.7     Bogor  Alamanda 10533 2020-04-09
## 4907 4907         Nikita      5.7     Depok   Alindra 11394 2018-03-17
## 4957 4957         Nikita      5.7     Bogor   Peronia  7454 2018-12-31
## 5007 5007         Nikita      5.7     Depok  Alamanda  7076 2019-10-19
## 5057 5057         Nikita      5.7     Depok Primadona 14925 2018-09-15
## 5107 5107         Nikita      5.7     Depok   Alindra 11682 2018-11-02
## 5157 5157         Nikita      5.7    Bekasi     Adara  7848 2020-02-28
## 5207 5207         Nikita      5.7   Jakarta     Arana 13028 2018-02-13
## 5257 5257         Nikita      5.7   Jakarta Teradamai  8288 2018-03-21
## 5307 5307         Nikita      5.7   Jakarta   Alindra 10962 2019-05-05
## 5357 5357         Nikita      5.7 Tengerang Primadona 11098 2018-02-27
## 5407 5407         Nikita      5.7     Bogor     Arana 10144 2018-04-12
## 5457 5457         Nikita      5.7    Bekasi Sweethome 14817 2018-06-01
## 5507 5507         Nikita      5.7    Bekasi     Adara 12860 2018-03-21
## 5557 5557         Nikita      5.7     Bogor  Alamanda 10092 2020-06-15
## 5607 5607         Nikita      5.7 Tengerang    Lavesh 10340 2020-01-25
## 5657 5657         Nikita      5.7 Tengerang    Lavesh 13191 2018-05-10
## 5707 5707         Nikita      5.7 Tengerang Teradamai  7511 2020-06-17
## 5757 5757         Nikita      5.7     Bogor    Narada 12274 2018-10-13
## 5807 5807         Nikita      5.7 Tengerang  Victoria 11280 2019-08-25
## 5857 5857         Nikita      5.7 Tengerang   Alindra  8384 2018-09-19
## 5907 5907         Nikita      5.7    Bekasi   Peronia 12714 2019-12-06
## 5957 5957         Nikita      5.7   Jakarta    Lavesh  9948 2018-11-25
## 6007 6007         Nikita      5.7     Depok     Arana 11956 2020-09-12
## 6057 6057         Nikita      5.7    Bekasi     Arana  8974 2020-09-04
## 6107 6107         Nikita      5.7 Tengerang  Alamanda 10905 2018-06-12
## 6157 6157         Nikita      5.7     Bogor   Alindra  9730 2019-01-25
## 6207 6207         Nikita      5.7     Depok     Asoka 14671 2018-08-25
## 6257 6257         Nikita      5.7     Bogor   Palmyra 11207 2019-10-11
## 6307 6307         Nikita      5.7     Bogor   Mutiara 10397 2020-06-12
## 6357 6357         Nikita      5.7   Jakarta   Alindra 12521 2019-06-10
## 6407 6407         Nikita      5.7    Bekasi     Adara 12262 2020-04-04
## 6457 6457         Nikita      5.7 Tengerang   Alindra 14535 2020-03-19
## 6507 6507         Nikita      5.7    Bekasi    Lavesh 14553 2019-04-25
## 6557 6557         Nikita      5.7     Depok   Peronia 12337 2018-07-07
## 6607 6607         Nikita      5.7   Jakarta Sweethome 14069 2020-01-16
## 6657 6657         Nikita      5.7 Tengerang Sweethome  9222 2018-12-09
## 6707 6707         Nikita      5.7   Jakarta    Lavesh 13809 2018-01-28
## 6757 6757         Nikita      5.7    Bekasi    Winona  9685 2020-02-26
## 6807 6807         Nikita      5.7   Jakarta     Asera 11234 2018-08-16
## 6857 6857         Nikita      5.7 Tengerang    Winona 14743 2018-03-29
## 6907 6907         Nikita      5.7     Bogor     Tiara  9409 2018-10-15
## 6957 6957         Nikita      5.7     Bogor     Tiara 14532 2020-04-09
## 7007 7007         Nikita      5.7   Jakarta Teradamai 10837 2020-09-08
## 7057 7057         Nikita      5.7     Bogor   Alindra 13961 2019-11-21
## 7107 7107         Nikita      5.7     Bogor     Adara 13972 2019-08-07
## 7157 7157         Nikita      5.7   Jakarta   Permata  7026 2020-02-19
## 7207 7207         Nikita      5.7     Depok     Adara 12358 2018-04-10
## 7257 7257         Nikita      5.7    Bekasi    Narada 13665 2020-02-23
## 7307 7307         Nikita      5.7     Bogor    Narada  9004 2019-10-11
## 7357 7357         Nikita      5.7   Jakarta Sweethome  7754 2020-08-20
## 7407 7407         Nikita      5.7 Tengerang   Mutiara 11815 2019-03-25
## 7457 7457         Nikita      5.7     Depok   Albasia  7536 2018-06-24
## 7507 7507         Nikita      5.7   Jakarta    Narada 11699 2018-09-15
## 7557 7557         Nikita      5.7     Bogor    Lavesh 11070 2019-04-07
## 7607 7607         Nikita      5.7    Bekasi    Narada  9813 2018-05-23
## 7657 7657         Nikita      5.7    Bekasi   Permata 12252 2020-02-22
## 7707 7707         Nikita      5.7 Tengerang  Victoria 11832 2019-03-13
## 7757 7757         Nikita      5.7 Tengerang     Tiara 10318 2019-09-16
## 7807 7807         Nikita      5.7     Depok     Asoka 11271 2019-10-18
## 7857 7857         Nikita      5.7   Jakarta   Peronia 13740 2020-07-19
## 7907 7907         Nikita      5.7 Tengerang     Adara 14536 2020-06-24
## 7957 7957         Nikita      5.7     Depok     Adara 12367 2020-04-08
## 8007 8007         Nikita      5.7     Bogor    Lavesh  7775 2020-01-30
## 8057 8057         Nikita      5.7     Depok   Palmyra  8144 2019-05-08
## 8107 8107         Nikita      5.7     Depok     Asoka  8973 2020-06-04
## 8157 8157         Nikita      5.7   Jakarta   Mutiara 10306 2020-02-04
## 8207 8207         Nikita      5.7   Jakarta  Victoria  9557 2018-06-23
## 8257 8257         Nikita      5.7    Bekasi   Alindra  9193 2020-01-17
## 8307 8307         Nikita      5.7   Jakarta   Mutiara 10684 2020-05-30
## 8357 8357         Nikita      5.7     Depok    Narada 14913 2018-05-31
## 8407 8407         Nikita      5.7     Depok   Mutiara 12582 2018-03-19
## 8457 8457         Nikita      5.7 Tengerang     Asoka 13463 2018-03-22
## 8507 8507         Nikita      5.7     Depok     Arana  7236 2018-04-06
## 8557 8557         Nikita      5.7 Tengerang Sweethome 11614 2018-09-04
## 8607 8607         Nikita      5.7     Depok     Asera  9550 2019-04-05
## 8657 8657         Nikita      5.7 Tengerang    Narada  9204 2018-01-22
## 8707 8707         Nikita      5.7     Bogor     Arana  8692 2019-01-01
## 8757 8757         Nikita      5.7   Jakarta     Asoka  7221 2020-01-16
## 8807 8807         Nikita      5.7   Jakarta  Victoria  9221 2019-11-11
## 8857 8857         Nikita      5.7     Depok Primadona 11374 2020-01-04
## 8907 8907         Nikita      5.7     Depok  Victoria  8527 2018-12-09
## 8957 8957         Nikita      5.7   Jakarta     Asoka 14459 2019-10-02
## 9007 9007         Nikita      5.7    Bekasi   Alindra  9474 2020-01-09
## 9057 9057         Nikita      5.7 Tengerang Sweethome 14755 2019-09-06
## 9107 9107         Nikita      5.7    Bekasi   Albasia  8737 2020-02-01
## 9157 9157         Nikita      5.7 Tengerang   Palmyra 14382 2019-05-28
## 9207 9207         Nikita      5.7   Jakarta    Narada  9591 2019-06-12
## 9257 9257         Nikita      5.7   Jakarta   Alindra 13015 2019-12-11
## 9307 9307         Nikita      5.7 Tengerang   Permata 11894 2020-02-20
## 9357 9357         Nikita      5.7     Depok      Neon  7797 2018-02-23
## 9407 9407         Nikita      5.7     Depok    Lavesh 10182 2018-02-20
## 9457 9457         Nikita      5.7   Jakarta      Neon 13934 2020-09-03
## 9507 9507         Nikita      5.7   Jakarta     Asera 11863 2020-09-03
## 9557 9557         Nikita      5.7    Bekasi    Narada 13818 2020-09-07
## 9607 9607         Nikita      5.7    Bekasi     Adara 14818 2018-02-07
## 9657 9657         Nikita      5.7     Depok   Albasia 10302 2019-10-04
## 9707 9707         Nikita      5.7 Tengerang     Asoka  8604 2019-03-29
## 9757 9757         Nikita      5.7     Bogor Sweethome 14355 2018-10-18
## 9807 9807         Nikita      5.7 Tengerang  Victoria 13277 2019-07-27
## 9857 9857         Nikita      5.7   Jakarta Sweethome 12424 2018-04-01
## 9907 9907         Nikita      5.7     Depok   Permata  7007 2020-03-18
## 9957 9957         Nikita      5.7     Bogor  Victoria 13953 2020-04-06
##      Advertisement  Kelas Booking_fee
## 7               18    low    393.0500
## 57               3 medium    996.9300
## 107             11 medium    864.0800
## 157             20   high   1446.7000
## 207              7   high   1355.8000
## 257              2 medium   1016.8200
## 307              6 medium    866.9600
## 357              2    low    498.3000
## 407             13   high   1153.2600
## 457              5 medium    831.7600
## 507              8   high   1086.1200
## 557             17    low    355.9000
## 607             10   high   1080.1800
## 657              6   high   1433.2000
## 707             14    low      6.5709
## 757              6   high   1162.1700
## 807             10   high   1083.6900
## 857             15   high   1437.1000
## 907             10   high   1154.0700
## 957              7   high   1411.7000
## 1007            15    low      6.8733
## 1057            14   high   1127.8800
## 1107            19    low    509.2800
## 1157            16    low    526.6800
## 1207            18    low    377.3000
## 1257             3    low      6.3252
## 1307             2 medium   1000.5300
## 1357            15   high   1456.2000
## 1407            15   high   1168.2000
## 1457            16 medium    832.8800
## 1507            14   high   1374.4000
## 1557            17    low      6.6122
## 1607             1   high   1413.3000
## 1657             7    low      6.4813
## 1707             3    low      6.5863
## 1757            20    low    377.4000
## 1807            10   high   1464.9000
## 1857             9 medium    835.5200
## 1907             8    low      6.9279
## 1957             4    low    367.8500
## 2007             2    low    519.9600
## 2057            16    low    519.1200
## 2107             6   high   1437.8000
## 2157             3   high   1496.8000
## 2207             2    low    514.9200
## 2257            17 medium   1033.2900
## 2307             7    low    523.0800
## 2357            16    low      6.7480
## 2407            10    low    368.0000
## 2457            16   high   1392.9000
## 2507             8    low      6.4435
## 2557            12    low      6.9118
## 2607             8    low    536.2200
## 2657            10 medium    809.7600
## 2707            15    low    539.4000
## 2757             6   high   1100.3400
## 2807             9    low    511.5000
## 2857             4 medium    844.2400
## 2907            20    low    398.1000
## 2957             6    low    396.0500
## 3007             6    low    397.7000
## 3057            14    low    378.5000
## 3107             6    low    491.2800
## 3157             3 medium    817.1200
## 3207            17 medium    818.0000
## 3257             9    low      6.4946
## 3307             5   high   1465.3000
## 3357             3 medium   1008.1800
## 3407            15 medium   1044.9000
## 3457            15   high   1126.4400
## 3507             4   high   1348.5000
## 3557            13 medium    812.1600
## 3607            10 medium   1046.1600
## 3657            17 medium    854.5600
## 3707             8 medium    834.9600
## 3757            13    low    357.1500
## 3807            10    low    515.8800
## 3857            17 medium    834.4000
## 3907             1   high   1393.6000
## 3957             6   high   1493.5000
## 4007            20    low    365.1500
## 4057            18   high   1326.8000
## 4107             8 medium    990.9000
## 4157            16   high   1159.1100
## 4207            11    low      6.7123
## 4257             4    low    531.6600
## 4307            10   high   1307.9000
## 4357             8   high   1129.4100
## 4407             5   high   1486.6000
## 4457            19   high   1150.4700
## 4507            15 medium    809.2000
## 4557             9    low    390.3000
## 4607            12 medium    807.2800
## 4657             1    low    353.4500
## 4707             3   high   1081.0800
## 4757            17    low    480.1800
## 4807            20   high   1450.8000
## 4857            17 medium    842.6400
## 4907            18 medium   1025.4600
## 4957            12    low    372.7000
## 5007            15    low    353.8000
## 5057             2   high   1492.5000
## 5107             2 medium   1051.3800
## 5157             4    low    392.4000
## 5207             7   high   1302.8000
## 5257            14    low    497.2800
## 5307            15 medium    876.9600
## 5357            20 medium    998.8200
## 5407             9 medium    811.5200
## 5457            11   high   1481.7000
## 5507            13   high   1157.4000
## 5557            12 medium    807.3600
## 5607             6 medium    827.2000
## 5657            19   high   1319.1000
## 5707             9    low    375.5500
## 5757            15   high   1104.6600
## 5807            11 medium   1015.2000
## 5857             4    low    503.0400
## 5907            14   high   1144.2600
## 5957             5    low      6.9636
## 6007             2 medium   1076.0400
## 6057             6    low    538.4400
## 6107            17 medium    872.4000
## 6157             9    low      6.8110
## 6207            16   high   1467.1000
## 6257            18 medium   1008.6300
## 6307            17 medium    831.7600
## 6357             7   high   1126.8900
## 6407            18   high   1103.5800
## 6457            16   high   1453.5000
## 6507             2   high   1455.3000
## 6557             9   high   1110.3300
## 6607            12   high   1406.9000
## 6657            11    low      6.4554
## 6707             6   high   1380.9000
## 6757            15    low      6.7795
## 6807             8 medium   1011.0600
## 6857             8   high   1474.3000
## 6907            15    low      6.5863
## 6957             7   high   1453.2000
## 7007             2 medium    866.9600
## 7057            12   high   1396.1000
## 7107            18   high   1397.2000
## 7157             2    low    351.3000
## 7207            20   high   1112.2200
## 7257             4   high   1366.5000
## 7307            12    low      6.3028
## 7357            18    low    387.7000
## 7407             1 medium   1063.3500
## 7457             2    low    376.8000
## 7507            12 medium   1052.9100
## 7557            17 medium    996.3000
## 7607             8    low      6.8691
## 7657             4   high   1102.6800
## 7707             7 medium   1064.8800
## 7757            15 medium    825.4400
## 7807             8 medium   1014.3900
## 7857             1   high   1374.0000
## 7907            12   high   1453.6000
## 7957             1   high   1113.0300
## 8007            20    low    388.7500
## 8057            14    low    488.6400
## 8107            18    low    538.3800
## 8157             2 medium    824.4800
## 8207             2    low      6.6899
## 8257             7    low      6.4351
## 8307            12 medium    854.7200
## 8357             2   high   1491.3000
## 8407            19   high   1132.3800
## 8457             5   high   1346.3000
## 8507            13    low    361.8000
## 8557            14 medium   1045.2600
## 8607             8    low      6.6850
## 8657            12    low      6.4428
## 8707            16    low    521.5200
## 8757             1    low    361.0500
## 8807            20    low      6.4547
## 8857            18 medium   1023.6600
## 8907            13    low    511.6200
## 8957            17   high   1445.9000
## 9007             3    low      6.6318
## 9057            20   high   1475.5000
## 9107             7    low    524.2200
## 9157            16   high   1438.2000
## 9207            19    low      6.7137
## 9257             2   high   1301.5000
## 9307             8 medium   1070.4600
## 9357             9    low    389.8500
## 9407            11 medium    814.5600
## 9457            14   high   1393.4000
## 9507            12 medium   1067.6700
## 9557             8   high   1381.8000
## 9607            12   high   1481.8000
## 9657            17 medium    824.1600
## 9707             1    low    516.2400
## 9757            17   high   1435.5000
## 9807             3   high   1327.7000
## 9857             6   high   1118.1600
## 9907            16    low    350.3500
## 9957             8   high   1395.3000

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

Total_Bonus=subset(Data,
       subset= Marketing_Name == "Nikita")
Data$Total_Bonus<-ifelse(Total_Bonus$Work_Exp >3,
                         Total_Bonus$Booking_fee*2/100+1/100, Total_Bonus$Booking_fee*2/100)
Data

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

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

# tuliskan koding R kalian disini

Python

Soal 2

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

R

# tuliskan koding R kalian disini

Soal 3

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

R

# tuliskan koding R kalian disini

Referensi

  1. ref 1
  2. ref 2
  3. ref 3
LS0tDQp0aXRsZTogIkFsZ29yaXRtYSAmIFN0cnVrdHVyIERhdGEiDQpzdWJ0aXRsZTogIn4gVWppYW4gVGVuZ2FoIFNlbWVzdGVyIH4iDQphdXRob3I6ICJCYWt0aSBTaXJlZ2FyLCBTLlNpLiwgTS5TYyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJvYm9ib29rOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIg0KDQotLS0NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChjbGFzcy5zb3VyY2UgPSAibm9jb3B5IiwNCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcy5vdXRwdXQgPSAibm9jb3B5IiwNCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRiwNCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRikNCg0KbGlicmFyeShyZXRpY3VsYXRlKQ0KbGlicmFyeShSY3BwKQ0KDQpgYGANCg0KPGJyPg0KDQoNCnwNCjotLS0tIHw6LS0tLQ0KKipLb250YWsqKnwgKio6ICRcZG93bmFycm93JCoqDQpFbWFpbHwgZTdpbGF1c2RpQGdtYWlsLmNvbQ0KSW5zdGFncmFtIHwgaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9qZXJlbXloZXJpeWFuZC8gDQpSUHVicyAgfCBodHRwczovL3JwdWJzLmNvbS9qZXJlbXloZXJpeWFuZGkyMy8gDQoNCioqKg0KDQojIEthc3VzIDEgDQoNCkFzdW1zaWthbiBBbmRhIHRlbGFoIG1lbmd1bXB1bGthbiBiZWJlcmFwYSBrdW1wdWxhbiBkYXRhIGRhcmkgcGVydXNhaGFhbiBgQUJDIFByb3BlcnR5YCBzZXBlcnRpIHlhbmcgZGFwYXQga2l0YSBsaWhhdCBwYWRhIHRhYmVsIGJlcmlrdXQ6IA0KDQpgYGB7ciwgbWVzc2FnZT1GfQ0KSWQgICAgICAgICAgICAgPC0gKDE6MTAwMDApDQpNYXJrZXRpbmdfTmFtZSA8LSByZXAoYygiQW5nZWwiLCJTaGVybHkiLCJWYW5lc3NhIiwiSXJlbmUiLCJKdWxpYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkplZmZyeSIsIk5pa2l0YSIsIktlZmFzIiwiU2lhbmEiLCJMYWxhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJGYWxsZW4iLCJBcmRpZm8iLCJLZXZpbiIsIkp1ZW4iLCJKZXJyZWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkltZWxkYSIsIldpZGkiLCJUaGVvZG9yYSIsIkVsdmFuaSIsIkpvbmF0aGFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJTb2ZpYSIsIkFicmFoYW0iLCJTaXRpIiwiTmlrbyIsIlNlZmxpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJCZW5lIiwgIkRpYW5hIiwgIlB1cGUiLCAiQW5kaSIsICJUYXRoYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRW5kcmkiLCAiTW9uaWthIiwgIkhhbnMiLCAiRGVib3JhIiwiSGFuaWZhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJKYW1lcyIsICJKaWhhbiIsICJGcmlza2EiLCJBcmRpd2FuIiwgIkJha3RpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJBbnRob24iLCJBbXJ5IiwgIldpd2lrIiwgIkJhc3RpYW4iLCAiQnVkaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiTGVvIiwiU2ltb24iLCJNYXRpdXMiLCJBcnJ5IiwgIkVsaWFuZG8iKSwgMjAwKQ0KV29ya19FeHAgICAgICAgPC0gcmVwKGMoMS4zLDIuNCwyLjUsMy42LDMuNyw0LjcsNS43LDYuNyw3LjcsNy4zLA0KICAgICAgICAgICAgICAgICAgICAgICAgNS4zLDUuMywxMCw5LjMsMy4zLDMuMywzLjQsMy40LDMuNSw1LjYsDQogICAgICAgICAgICAgICAgICAgICAgICAzLjUsNC42LDQuNiw1LjcsNi4yLDQuNCw2LjQsNi40LDMuNSw3LjUsDQogICAgICAgICAgICAgICAgICAgICAgICA0LjYsMy43LDQuNyw0LjMsNS4yLDYuMyw3LjQsMi40LDMuNCw4LjIsDQogICAgICAgICAgICAgICAgICAgICAgICA2LjQsNy4yLDEuNSw3LjUsMTAsNC41LDYuNSw3LjIsNy4xLDcuNiksMjAwKQ0KQ2l0eSAgICAgICAgICAgPC0gc2FtcGxlKGMoIkpha2FydGEiLCJCb2dvciIsIkRlcG9rIiwiVGVuZ2VyYW5nIiwiQmVrYXNpIiksMTAwMDAsIHJlcGxhY2UgPSBUKQ0KQ2x1c3RlciAgICAgICAgPC0gc2FtcGxlKGMoIlZpY3RvcmlhIiwiUGFsbXlyYSIsIldpbm9uYSIsIlRpYXJhIiwgIk5hcmFkYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiUGVyb25pYSIsIkxhdmVzaCIsIkFsaW5kcmEiLCJTd2VldGhvbWUiLCAiQXNlcmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlcmFkYW1haSIsIkFsYmFzaWEiLCAiQWRhcmEiLCJOZW9uIiwiQXJhbmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzb2thIiwgIlByaW1hZG9uYSIsICJNdXRpYXJhIiwiUGVybWF0YSIsIkFsYW1hbmRhIiApLCAxMDAwMCwgcmVwbGFjZT1UKQ0KUHJpY2UgICAgICAgICAgPC0gc2FtcGxlKGMoNzAwMDoxNTAwMCksMTAwMDAsIHJlcGxhY2UgPSBUKQ0KRGF0ZV9TYWxlcyAgICAgPC0gc2FtcGxlKHNlcShhcy5EYXRlKCIyMDE4LzAxLzAxIiksIGJ5ID0gImRheSIsIGxlbmd0aC5vdXQgPSAxMDAwKSwxMDAwMCwgcmVwbGFjZSA9IFQpDQpBZHZlcnRpc2VtZW50ICA8LSBzYW1wbGUoYygxOjIwKSwgMTAwMDAsIHJlcGxhY2UgPSBUKQ0KRGF0YSAgICAgICAgICAgPC0gZGF0YS5mcmFtZShJZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtldGluZ19OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrX0V4cCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2l0eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2x1c3RlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVfU2FsZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkdmVydGlzZW1lbnQpDQpsaWJyYXJ5KERUKQ0KZGF0YXRhYmxlKERhdGEpDQpgYGANCmBgYHtyfQ0Kd3JpdGUuY3N2KERhdGEsIkM6XFxVc2Vyc1xcUHVibGljXFxEYXRhLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KYGBgDQoNCiMjIFNvYWwgMSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpLYXRlZ29yaWthbiB2YXJpYWJlbCBgSGFyZ2FgIHBhZGEgZGF0YXNldCBkaSBhdGFzIG1lbmphZGkgdGlnYSBrZWxvbXBvayBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiogJFx0ZXh0e0hpZ2h9ID4gMTIwMDAkDQoqICQxMDAwMCBcbGUgXHRleHR7TWVkaXVtfSBcbGUgMTIwMDAkDQoqICRcdGV4dHtMb3d9IDwgMTAwMDAkDQoNClRldGFwa2FuIGtlIGRhbGFtIHZhcmlhYmVsIGJhcnUgeWFuZyBkaXNlYnV0IGBLZWxhc2AgZGVuZ2FuIG1lbmdndW5ha2FuIGZ1bmdzaSBrb250cm9sIGBJZmAsIGBlbHNlIGlmYCwgZGFuIGBlbHNlYC4NCg0KIyMjIFINCg0KYGBge3J9DQpEYXRhJEtlbGFzPC1pZmVsc2UoRGF0YSRQcmljZSA+MTIwMDAsDQogICAgICAgICAgICAgICAgICAgImhpZ2giLA0KICAgICAgICAgICAgaWZlbHNlKERhdGEkUHJpY2UgPj0xMDAwMCAmIERhdGEkIFByaWNlIDw9MTIwMDAsDQogICAgICAgICAgICAgICAgICAgIm1lZGl1bSIsDQogICAgICAgICAgICBpZmVsc2UoRGF0YSRQcmljZSA8IDEwMDAwLA0KICAgICAgICAgICAgICAgICAgICJsb3ciLDApKSkNCkRhdGENCmBgYA0KDQoNCg0KDQojIyBTb2FsIDIgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KS2F0ZWdvcmlrYW4gdmFyaWFiZWwgYEhhcmdhYCBwYWRhIGRhdGFzZXQgZGkgYXRhcyBtZW5qYWRpIGVuYW0ga2Vsb21wb2sgc2ViYWdhaSBiZXJpa3V0Og0KDQoqIEJvb2tpbmdfZmVlIG55YSA1ICUgamlrYSAkXHRleHR7UHJpY2V9IDwgODAwMCQNCiogQm9va2luZ19mZWUgbnlhIDYgJSBqaWthICQ4MDAwIFxsZSBcdGV4dHtQcmljZX0gPCA5MDAwJA0KKiBCb29raW5nX2ZlZSBueWEgNyAlIGppa2EgJDkwMDAgXGxlIFx0ZXh0e1ByaWNlfSA8IDEwMDAwJA0KKiBCb29raW5nX2ZlZSBueWEgOCAlIGppa2EgJDEwMDAwIFxsZSBcdGV4dHtQcmljZX0gPCAxMTAwMCQNCiogQm9va2luZ19mZWUgbnlhIDkgJSBqaWthICQxMTAwMCBcbGUgXHRleHR7UHJpY2V9IDwgMTMwMDAkDQoqIEJvb2tpbmdfZmVlIG55YSAxMCAlIGppa2EgJDEzMDAwIFxsZSBcdGV4dHtQcmljZX0gXGxlIDE1MDAwJA0KDQpUZXRhcGthbiBrZSBkYWxhbSB2YXJpYWJlbCBiYXJ1IHlhbmcgZGlzZWJ1dCBgQm9va2luZ19mZWVgIGRlbmdhbiBtZW5nZ3VuYWthbiBmdW5nc2kga29udHJvbCBgSWZgLCBgZWxzZSBpZmAsIGRhbiBgZWxzZWAuDQoNCiMjIyBSDQoNCmBgYHtyfQ0KeCA8LSBEYXRhJFByaWNlDQpEYXRhJEJvb2tpbmdfZmVlPC1pZmVsc2UoeCA8IDgwMDAsDQogICAgICAgICAgICAgICAgICAgeCAqIDUvMTAwLA0KICAgICAgICAgICAgaWZlbHNlKHggPj0gODAwMCAmIHggPCA5MDAwLCANCiAgICAgICAgICAgICAgICAgICB4ICogNi8xMDAsDQogICAgICAgICAgICBpZmVsc2UoeCA+PSA5MDAwICYgeCAgPCAxMDAwMCwgDQogICAgICAgICAgICAgICAgICAgeCo3LzEwMDAwLA0KICAgICAgICAgICAgaWZlbHNlKHggPj0gMTAwMDAgJiB4IDwgMTEwMDAsDQogICAgICAgICAgICAgICAgICAgeCogOC8xMDAsDQogICAgICAgICAgICBpZmVsc2UoeCA+PSAxMTAwMCAmIHggPCAxMzAwMCwNCiAgICAgICAgICAgICAgICAgICB4KjkvMTAwLA0KICAgICAgICAgICAgaWZlbHNlKHggPj0gMTMwMDAgJiB4IDw9IDE1MDAwLA0KICAgICAgICAgICAgICAgICAgIHgqMTAvMTAwLDApKSkpKSkNCiAgICAgICAgICAgICAgICANCkRhdGENCmBgYA0KDQoNCg0KDQojIyBTb2FsIDMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTWVudXJ1dCBrdW1wdWxhbiBkYXRhIGFraGlyIHlhbmcgdGVsYWggQW5kYSBidWF0IHBhZGEgc29hbCBubyAyLCBzYXlhIGJlcmFzdW1zaSBiYWh3YSBBbmRhIHRlbGFoIGJla2VyamEgc2ViYWdhaSBwZW1hc2FyYW4gZGkgcGVydXNhaGFhbiBgQUJDIFByb3BlcnR5YCwgYmFnYWltYW5hIEFuZGEgZGFwYXQgbWVuZ3VtcHVsa2FuIHNlbXVhIGluZm9ybWFzaSB0ZW50YW5nIHBlbmp1YWxhbiBBbmRhIGRlbmdhbiBtZW5nZ3VuYWthbiBwZXJueWF0YWFuIGBmb3JgLiANCg0KIyMjIFINCg0KYGBge3J9DQpzYWxlcyA9Ik5pa2l0YSINCg0Kej1mb3IoaSBpbiBzYWxlcyl7DQogICAgICAgICAgICAgICBwcmludChzdWJzZXQoRGF0YSwNCiAgICAgICAgICAgIHN1YnNldCA9KE1hcmtldGluZ19OYW1lPT1pKSkpDQp9DQpgYGANCg0KDQojIyBTb2FsIDQgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KSmlrYSBBbmRhIGFrYW4gbWVuZGFwYXRrYW4gYm9udXMgMiUgZGFyaSBgQm9va2luZyBmZWVgIHBlciB1bml0IHNlYmFnYWkgcGVtYXNhcmFuIGRhbiBqdWdhIG1lbmRhcGF0a2FuIGJvbnVzIHRhbWJhaGFuIDElIGppa2EgQW5kYSB0ZWxhaCBiZWtlcmphIGRpIHBlcnVzYWhhYW4gaW5pIHNlbGFtYSBsZWJpaCBkYXJpIDMgdGFodW4uIFNpbGFrYW4gaGl0dW5nIHRvdGFsIGJvbnVzIGRlbmdhbiBtZW5nZ3VuYWthbiBwZXJueWF0YWFuIGBpZiwgZm9yLCBkYW4gYnJlYWtgLiAgDQoNCiMjIyBSDQoNCmBgYHtyfQ0KVG90YWxfQm9udXM9c3Vic2V0KERhdGEsDQogICAgICAgc3Vic2V0PSBNYXJrZXRpbmdfTmFtZSA9PSAiTmlraXRhIikNCkRhdGEkVG90YWxfQm9udXM8LWlmZWxzZShUb3RhbF9Cb251cyRXb3JrX0V4cCA+MywNCiAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbF9Cb251cyRCb29raW5nX2ZlZSoyLzEwMCsxLzEwMCwgVG90YWxfQm9udXMkQm9va2luZ19mZWUqMi8xMDApDQpEYXRhDQpgYGANCg0KDQoNCiMjIFNvYWwgNSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpQYWRhIGJhZ2lhbiBpbmksIEFuZGEgZGloYXJhcGthbiBkYXBhIG1lbWJ1YXQgZnVuZ3NpIHlhbmcgZGFwYXQgbWVuamF3YWIgc2V0aWFwIHBlbnlhdGFhbiBkaWJhd2FoIGluaSBkZW5nYW4gbWVsaWJhdGthbiBzZXRpYXAgZnVuZ3NpIGtvbnRyb2wgeWFuZyBkaXBlbGFqYXJpIHBhZGEgcGVydGVtdWFuIDcuDQoNCiogU2lhcGEgbmFtYSBtYXJrZXRpbmcgcGVtYXNhcmFuIHRlcmJhaWs/DQoqIEtvdGEgZGFuIENsdXN0ZXIgbWFuYSB5YW5nIHBhbGluZyBtZW5ndW50dW5na2FuPw0KKiBIaXR1bmcgdG90YWwgYmlheWEgaWtsYW4gQW5kYSwgamlrYSBBbmRhIGhhcnVzIG1lbWJheWFybnlhICQ0IHNldGlhcCBrYWxpIGlrbGFuLg0KKiBIaXR1bmcgcmF0YS1yYXRhIGJpYXlhIGlrbGFuIHVudHVrIHNldGlhcCBtYXJrZXRpbmcgZGkgUGVydXNhaGFhbiB0ZXJzZWJ1dC4NCiogSGl0dW5nIFRvdGFsIFBlbmRhcGF0YW4gKGRhbGFtIEJ1bGFuYW4pIA0KDQojIyMgUg0KDQpgYGB7cn0NCkFuZ2VsID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBbmdlbCIpKSANClNoZXJseT1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlNoZXJseSIpKSANClZhbmVzc2E9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlZhbmVzc2EiICApKQ0KSXJlbmU9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIklyZW5lIikpDQpKdWxpYW49c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKdWxpYW4iKSkNCkplZmZyeSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKZWZmcnkiKSkgDQpOaWtpdGEgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSJOaWtpdGEiKSkgDQpLZWZhcyA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIktlZmFzIikpDQpTaWFuYSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJTaWFuYSIpKSANCkxhbGE9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJMYWxhIikpIA0KRmFsbGVuID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkZhbGxlbiIpKSANCkFyZGlmbyA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBcmRpZm8iKSkNCktldmluID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIktldmluIikpDQpKdWVuID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkp1ZW4iKSkgDQpKZXJyZWwgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSmVycmVsIikpDQpJbWVsZGEgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSW1lbGRhIikpIA0KV2lkaSA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIldpZGkiKSkgDQpUaGVvZG9yID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJUaGVvZG9yIikpIA0KRWx2YW5pID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkVsdmFuaSIpKSANCkpvbmF0aGFuID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKb25hdGhhbiIpKSANClNvZmlhID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlNvZmlhIikpIA0KQWJyYWhhbSA9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQWJyYWhhbSIpKSANClNpdGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2l0aSIpKSANCk5pa28gPXN1YnNldChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJOaWtvIikpIA0KU2VmbGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2VsZmkiKSkgDQpCZW5lID1zdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQmVuZSIpKSANCkRpYW5hID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkRpYW5hIikpDQpQdXBlID1zdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiUHVwZSIpKSANCkFuZGkgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiQW5kaSIpKSANClRhdGhhID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIlRhdGhhIikpDQpFbmRyaT1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkVuZHJpIikpIA0KTW9uaWthPSBzdWJzZXQoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiTW9uaWthIikpIA0KSGFucyA9c3Vic2V0KERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkhhbnMiKSkgDQpEZWJvcmE9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiRGVib3JhIikpIA0KSGFuaWZhPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkhhbmlmYSIpKQ0KSmFtZXMgPXN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiSmFtZXMiKSkgDQpKaWhhbiA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJKaWhhbiIpKQ0KRnJpc2thID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkZyaXNrYSIpKSANCkFyZGl3YW4gPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFyZGl3YW4iKSkgDQpCYWt0aSA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJCYWt0aSIpKSANCkFudGhvbiA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJBbnRob24iKSkgDQpBbXJ5ID1zdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFtcnkiKSkgDQpXaXdpayA9c3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJXaXdpayIpKSANCkJhc3RpYW4gPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkJhc3RpYW4iKSkgDQpCdWRpID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJCdWRpIikpIA0KTGVvID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJMZW8iKSkgDQpTaW1vbiA9IHN1YnNldCAoRGF0YSwgc3Vic2V0PShNYXJrZXRpbmdfTmFtZSA9PSAiU2ltb24iKSkgDQpNYXRpdXMgPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIk1hdGl1cyIpKSANCkFycnkgPSBzdWJzZXQgKERhdGEsIHN1YnNldD0oTWFya2V0aW5nX05hbWUgPT0gIkFycnkiKSkgDQpFbGlhbmRvID0gc3Vic2V0IChEYXRhLCBzdWJzZXQ9KE1hcmtldGluZ19OYW1lID09ICJFbGlhbmRvIikpIA0KICANCk5hbWFfU2FsZXMgPSBjKCJBbmdlbCIsIlNoZXJseSIsIlZhbmVzc2EiLCJJcmVuZSIsIkp1bGlhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmVmZnJ5IiwiTmlraXRhIiwiS2VmYXMiLCJTaWFuYSIsIkxhbGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkZhbGxlbiIsIkFyZGlmbyIsIktldmluIiwiSnVlbiIsIkplcnJlbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSW1lbGRhIiwiV2lkaSIsIlRoZW9kb3JhIiwiRWx2YW5pIiwiSm9uYXRoYW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIlNvZmlhIiwiQWJyYWhhbSIsIlNpdGkiLCJOaWtvIiwiU2VmbGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkJlbmUiLCAiRGlhbmEiLCAiUHVwZSIsICJBbmRpIiwgIlRhdGhhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJFbmRyaSIsICJNb25pa2EiLCAiSGFucyIsICJEZWJvcmEiLCJIYW5pZmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkphbWVzIiwgIkppaGFuIiwgIkZyaXNrYSIsIkFyZGl3YW4iLCAiQmFrdGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkFudGhvbiIsIkFtcnkiLCAiV2l3aWsiLCAiQmFzdGlhbiIsICJCdWRpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJMZW8iLCJTaW1vbiIsIk1hdGl1cyIsIkFycnkiLCAiRWxpYW5kbyIpDQpwcm9wZXJ0eXNvbGQgPSBjKHN1bShBbmdlbCRQcmljZSksIHN1bShTaGVybHkkUHJpY2UpLCBzdW0oVmFuZXNzYSRQcmljZSksIHN1bShJcmVuZSRQcmljZSksDQpzdW0oSnVsaWFuJFByaWNlKSwgc3VtIChKZWZmcnkkUHJpY2UpLCBzdW0oTmlraXRhJFByaWNlKSwgc3VtKEtlZmFzJFByaWNlKSwgc3VtKFNpYW5hJFByaWNlKSwgc3VtKExhbGEkUHJpY2UpLCBzdW0oRmFsbGVuJFByaWNlKSwgc3VtKEFyZGlmbyRQcmljZSksIHN1bShLZXZpbiRQcmljZSksIHN1bSAoSnVlbiRQcmljZSksIHN1bShKZXJyZWwkUHJpY2UpLCBzdW0oSW1lbGRhJFByaWNlKSwgc3VtKFdpZGkkUHJpY2UpLCBzdW0oVGhlb2RvciRQcmljZSksIHN1bShFbHZhbmkkUHJpY2UpLCBzdW0oSm9uYXRoYW4kUHJpY2UpLCBzdW0oU29maWEkUHJpY2UpLCBzdW0oQWJyYWhhbSRQcmljZSksIHN1bShTaXRpJFByaWNlKSwgc3VtKE5pa28kUHJpY2UpLCBzdW0oU2VmbGkkUHJpY2UpLCBzdW0oQmVuZSRQcmljZSksIHN1bSggRGlhbmEkUHJpY2UpLCBzdW0gKFB1cGUkUHJpY2UpLCBzdW0oQW5kaSRQcmljZSksIHN1bSggVGF0aGEkUHJpY2UpLCBzdW0oRW5kcmkkUHJpY2UpLCBzdW0oIE1vbmlrYSRQcmljZSksIHN1bSggSGFucyRQcmljZSksIHN1bSggRGVib3JhJFByaWNlKSwgc3VtKEhhbmlmYSRQcmljZSksIHN1bSAoSmFtZXMkUHJpY2UpLCBzdW0oIEppaGFuJFByaWNlKSwgc3VtKCBGcmlza2EkUHJpY2UpLCBzdW0oQXJkaXdhbiRQcmljZSksIHN1bShCYWt0aSRQcmljZSksIHN1bShBbnRob24kUHJpY2UpLCBzdW0oQW1yeSRQcmljZSksIHN1bSggV2l3aWskUHJpY2UpLCBzdW0oIEJhc3RpYW4kUHJpY2UpLCBzdW0oIEJ1ZGkkUHJpY2UpLCBzdW0gKExlbyRQcmljZSksIHN1bShTaW1vbiRQcmljZSksIHN1bShNYXRpdXMkUHJpY2UpLCBzdW0oQXJyeSRQcmljZSksIHN1bSggRWxpYW5kbyRQcmljZSkpDQoNCmRhdGFtYXJrZXRpbmc9IGRhdGEuZnJhbWUoTmFtYV9TYWxlcywgcHJvcGVydHlzb2xkKQ0KZGF0YW1hcmtldGluZw0KDQpgYGANCg0KDQoNCg0KDQoNCiMgS2FzdXMgMg0KDQpNaXNhbGthbiBBbmRhIG1lbWlsaWtpIHByb3llayByaXNldCBwYXNhciB1bnR1ayBtZW1wZXJ0YWhhbmthbiBiZWJlcmFwYSBwZWxhbmdnYW4gcG90ZW5zaWFsIGRpIHBlcnVzYWhhYW4gQW5kYS4gTWFyaSBraXRhIGFzdW1zaWthbiBBbmRhIGJla2VyamEgZGkgcGVydXNhaGFhbiBhc3VyYW5zaSBBQkMuIFVudHVrIG1lbGFrdWthbm55YSwgQW5kYSBpbmdpbiBtZW5ndW1wdWxrYW4ga3VtcHVsYW4gZGF0YSBiZXJpa3V0Og0KDQoqICoqTWFyaXRhbF9TdGF0dXMqKiAgICA6IG1lbmV0YXBrYW4gc3RhdHVzIHBlcmthd2luYW4gYWNhayAoIllhIiwgIlRpZGFrIikNCiogKipBZGRyZXNzKiogICAgICAgICAgIDogYmVyaWthbiBhbGFtYXQgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKldvcmtfTG9jYXRpb24qKiAgICAgOiBtZW5ldGFwa2FuIGxva2FzaSBrZXJqYSBzZWNhcmEgYWNhayAoSkFCT0RFVEFCRUspIA0KKiAqKkFnZSoqICAgICAgICAgICAgICAgOiBtZW5ldGFwa2FuIHVydXRhbiBhbmdrYSBhY2FrIChkYXJpIDE5IGhpbmdnYSA2MCkgDQoqICoqQWNhZGVtaWMqKiAgICAgICAgICA6IG1lbmV0YXBrYW4gdGluZ2thdCBha2FkZW1payBhY2FrICgiSi5TY2hvb2wiLCAiSC5TY2hvb2wiLCAiU2FyamFuYSIsICJNYWdpc3RlciIsICJQaGQiKSANCiogKipKb2IqKiAgICAgICAgICAgICAgIDogMTAgcGVrZXJqYWFuIGFjYWsgdW50dWsgc2V0aWFwIHRpbmdrYXQgYWthZGVtaWsgIA0KKiAqKkdyYWRlKiogICAgICAgICAgICAgOiA1IG5pbGFpIGFjYWsgdW50dWsgc2V0aWFwIFBla2VyamFhbiANCiogKipJbmNvbWUqKiAgICAgICAgICAgIDogdGV0YXBrYW4gcGVuZGFwYXRhbiB5YW5nIG11bmdraW4gdW50dWsgc2V0aWFwIFBla2VyamFhbiAgDQoqICoqU3BlbmRpbmcqKiAgICAgICAgICA6IHRldGFwa2FuIGtlbXVuZ2tpbmFuIHBlbmdlbHVhcmFuIHVudHVrIHNldGlhcCBQZWtlcmphYW4gDQoqICoqTnVtYmVyX29mX2NoaWxkcmVuKio6IG1lbmV0YXBrYW4gbm9tb3IgYWNhayBkaSBhbnRhcmEgMCBkYW4gMTAgKHNlc3VhaSBkZW5nYW4gc3RhdHVzIHBlcmthd2luYW4pDQoqICoqUHJpdmF0ZV92ZWhpY2xlKiogICA6IG1lbmV0YXBrYW4ga2VtdW5na2luYW4ga2VuZGFyYWFuIHByaWJhZGkgdW50dWsgc2V0aWFwIG9yYW5nICgiTW9iaWwiLCAic2VwZWRhIG1vdG9yIiwgIlVtdW0iKSANCiogKipIb21lKiogICAgICAgICAgICAgIDogIlNld2EiLCAiTWlsaWsiLCAiS3JlZGl0IiANCg0KIyMgU29hbCAxIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNClRvbG9uZyBiZXJpa2FuIHNheWEga3VtcHVsYW4gZGF0YSB0ZW50YW5nIGluZm9ybWFzaSA1MDAwMCBwZWxhbmdnYW4geWFuZyBtZW5nYWN1IHBhZGEgc2V0aWFwIHZhcmlhYmVsIGRpIGF0YXMhIA0KDQojIyMgUiANCg0KYGBge3J9DQojIHR1bGlza2FuIGtvZGluZyBSIGthbGlhbiBkaXNpbmkNCmBgYA0KDQojIyMgUHl0aG9uDQoNCg0KDQoNCiMjIFNvYWwgMiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpSaW5na2FzYW4gU3RhdGlzdGlrIHBlbnRpbmcgc2VwZXJ0aSBhcGEgeWFuZyBiaXNhIEFuZGEgZGFwYXRrYW4gZGFyaSBrdW1wdWxhbiBkYXRhIEFuZGE/DQoNCiMjIyBSDQoNCmBgYHtyfQ0KIyB0dWxpc2thbiBrb2RpbmcgUiBrYWxpYW4gZGlzaW5pDQpgYGANCg0KDQoNCg0KIyMgU29hbCAzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCk1lbnVydXQgcGVyaGl0dW5nYW4gZGFuIGFuYWxpc2lzIEFuZGEsIHBlbGFuZ2dhbiBtYW5hIHlhbmcgcG90ZW5zaWFsIHVudHVrIEFuZGEgcGVydGFoYW5rYW4/IA0KDQojIyMgUg0KDQpgYGB7cn0NCiMgdHVsaXNrYW4ga29kaW5nIFIga2FsaWFuIGRpc2luaQ0KYGBgDQoNCg0KDQoNCiANCg0KDQojIFJlZmVyZW5zaQ0KDQoxLiAgIHJlZiAxDQoyLiAgIHJlZiAyDQozLiAgIHJlZiAzDQoNCg0KDQoNCg==