1 Persiapan Data Karyawan
#------------------------------------------------------------------------------------------
# PERSIAPAN DATA KARYAWAN
#------------------------------------------------------------------------------------------
# Dataset Karyawan
nama <- c("Bagas","Joan","Alya","Dwi","Nabil")
usia <- c(25,30,27,35,40)
gaji <- c(5000,7000,6500,10000,12000)
posisi <- c("Staff","Pengawas","Staff","Manajer","Direktur")
kinerja <- c("Bagus","Sangat bagus","Rata-rata","Bagus","Sangat bagus")2 Menghitung Bonus Karyawan
#------------------------------------------------------------------------------------------
# MENGHITUNG BONUS KARYAWAN
#------------------------------------------------------------------------------------------
cat("=== Perhitungan Bonus Karyawan ===\n")## === Perhitungan Bonus Karyawan ===
for(i in 1:length(nama)){
if(kinerja[i] == "Sangat bagus"){
bonus <- gaji[i] * 0.20
}
else if(kinerja[i] == "Bagus"){
bonus <- gaji[i] * 0.10
}
else{
bonus <- gaji[i] * 0.05
}
cat("Name:", nama[i], "Bonus:", bonus,"\n")
}## Name: Bagas Bonus: 500
## Name: Joan Bonus: 1400
## Name: Alya Bonus: 325
## Name: Dwi Bonus: 1000
## Name: Nabil Bonus: 2400
3 Menampilkan Karyawan dengan Gaji > 6000
#------------------------------------------------------------------------------------------
# MENAMPILKAN KARYAWAN DENGAN GAJI > 6000
#------------------------------------------------------------------------------------------
cat("\n=== Karyawan dengan gaji lebih dari 6000 ===\n")##
## === Karyawan dengan gaji lebih dari 6000 ===
## Name: Joan Salary: 7000
## Name: Alya Salary: 6500
## Name: Dwi Salary: 10000
## Name: Nabil Salary: 12000
4 Menampilkan Karyawan Sampai Manager (While Loop)
#------------------------------------------------------------------------------------------
# MENAMPILKAN KARYAWAN SAMPAI MANAGER (WHILE LOOP)
#------------------------------------------------------------------------------------------
cat("\n=== Perulangan WHILE ===\n")##
## === Perulangan WHILE ===
i <- 1
while(i <= length(nama)){
cat("Name:", nama[i], "Position:", posisi[i], "\n")
if(posisi[i] == "Manajer"){
cat("(Stop here)\n")
break
}
i <- i + 1
}## Name: Bagas Position: Staff
## Name: Joan Position: Pengawas
## Name: Alya Position: Staff
## Name: Dwi Position: Manajer
## (Stop here)
5 Break Ketika Gaji > 10000
#------------------------------------------------------------------------------------------
# BREAK KETIKA GAJI > 10000
#------------------------------------------------------------------------------------------
cat("\n=== BREAK ===\n")##
## === BREAK ===
for(i in 1:length(nama)){
if(gaji[i] > 10000){
cat("(Stopped because", nama[i], "has a salary above 10,000)\n")
break
}
cat("Name:", nama[i], "Salary:", gaji[i], "\n")
}## Name: Bagas Salary: 5000
## Name: Joan Salary: 7000
## Name: Alya Salary: 6500
## Name: Dwi Salary: 10000
## (Stopped because Nabil has a salary above 10,000)
6 Continue Untuk Melewati Kinerja “Rata-Rata”
#------------------------------------------------------------------------------------------
# CONTINUE UNTUK MELEWATI KINERJA "RATA-RATA"
#------------------------------------------------------------------------------------------
cat("\n=== CONTINUE ===\n")##
## === CONTINUE ===
for(i in 1:length(nama)){
if(kinerja[i] == "Rata-rata"){
cat(nama[i], "dilewati karena kinerja Rata-rata\n")
next
}
cat("Name:", nama[i], "Performance:", kinerja[i], "\n")
}## Name: Bagas Performance: Bagus
## Name: Joan Performance: Sangat bagus
## Alya dilewati karena kinerja Rata-rata
## Name: Dwi Performance: Bagus
## Name: Nabil Performance: Sangat bagus
LS0tDQp0aXRsZTogIiINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgICAgICAgICAgICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgY3NzOiAiY3VzdG9tLmNzcyIgICAgICAgICAgICAgICAgICAgICAjIDwtLS0gUEFOR0dJTCBGSUxFIENTUyBESSBTSU5JDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUgICAgICAgICAgICAgICAgICMgRW1iZWQgYWxsIHJlc291cmNlcw0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICAgICAgICAgICAjIFNob3cgaW1hZ2UgdGh1bWJuYWlscw0KICAgIGxpZ2h0Ym94OiB0cnVlICAgICAgICAgICAgICAgICAgICAgICAjIEVuYWJsZSBjbGljay10by16b29tIGltYWdlcw0KICAgIGdhbGxlcnk6IHRydWUgICAgICAgICAgICAgICAgICAgICAgICAjIEdyb3VwIGltYWdlcyBpbnRvIGdhbGxlcnkNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUgICAgICAgICAgICAgICAgIyBOdW1iZXIgYWxsIHNlY3Rpb25zDQogICAgbGliX2RpcjogbGlicyAgICAgICAgICAgICAgICAgICAgICAgICMgU2F2ZSBKUy9DU1MgbGlicmFyaWVzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgICAgICAgICAgICMgUGFnZWQgZGF0YSBmcmFtZXMNCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IiAgICAgICAgICAgICAgICAgIyBFeHBhbmRhYmxlIGNvZGUgYmxvY2tzDQogICAgY29kZV9kb3dubG9hZDogeWVzICAgICAgICAgICAgICAgICAgICMgQWRkIGJ1dHRvbiB0byBkb3dubG9hZCBSIGNvZGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkgIyBUYW1iYWhrYW4gbWVzc2FnZS93YXJuaW5nPUZBTFNFDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocm1kZm9ybWF0cykgIyBPcHRpb25hbCwgamlrYSBpbmdpbiBtZW1hc3Rpa2FuIHBhY2thZ2UgdGVybG9hZA0KDQpgYGANCg0KPGRpdiBjbGFzcz0iZXhwbGFuYXRpb24tYm94Ij4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpYnJhcnkoaHRtbHRvb2xzKQ0KSFRNTCgnDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmOyBwYWRkaW5nOiA0MHB4OyBib3JkZXItcmFkaXVzOiAyMHB4OyBtYXJnaW46IDMwcHggMDsgYm94LXNoYWRvdzogMCA4cHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMDgpOyBwb3NpdGlvbjogcmVsYXRpdmU7IG92ZXJmbG93OiBoaWRkZW47IGZvbnQtZmFtaWx5OiBcJ0NhbGlicmlcJywgXCdTZWdvZSBVSVwnLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjsgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjsgbWF4LXdpZHRoOiA5NTBweDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KTsgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjsiPg0KDQogIDwhLS0gQWNjZW50IEhlYWRlciBMaW5lIC0tPg0KICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogNnB4OyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMxZTQwYWYsICMzYjgyZjYsICMxZTQwYWYpOyI+PC9kaXY+DQogIA0KICA8IS0tIE1haW4gTGF5b3V0IC0tPg0KICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDQwcHg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyI+DQogICAgDQogICAgPCEtLSBMZWZ0IENvbHVtbiAtIFByb2ZpbGUgUGhvdG8gLS0+DQogICAgPGRpdiBzdHlsZT0iZmxleC1zaHJpbms6IDA7IHdpZHRoOiAyNDBweDsiPg0KICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDIyMHB4OyBoZWlnaHQ6IDIyMHB4OyBib3JkZXItcmFkaXVzOiA1MCU7IG92ZXJmbG93OiBoaWRkZW47IGJvcmRlcjogOHB4IHNvbGlkICNmOGZhZmM7IGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgbWFyZ2luLWJvdHRvbTogMzBweDsiPg0KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2FuZHJlbXVzYXJpMjc2LWNvZGVyL2FuZHJlLzlhYTkzYzU0MDIxMmZhNGI1ZjBmOWU0YWQ1YTEzM2RmM2M1OTY0ZDkvYWFhbi5qcGVnIiANCiAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb2JqZWN0LWZpdDogY292ZXI7IG9iamVjdC1wb3NpdGlvbjogY2VudGVyOyI+DQogICAgICA8L2Rpdj4NCiAgICAgIA0KICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2Y4ZmFmYzsgcGFkZGluZzogMjVweDsgYm9yZGVyLXJhZGl1czogMTVweDsgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjsiPg0KICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzFlNDBhZjsgZm9udC1zaXplOiAxLjFlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogMjBweDsgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OyBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNiODJmNjsgcGFkZGluZy1ib3R0b206IDhweDsiPg0KICAgICAgICAgIENPTlRBQ1QgSU5GT1JNQVRJT04NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+DQogICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICM2NDc0OGI7IGZvbnQtc2l6ZTogMC44NWVtOyBmb250LXdlaWdodDogNTAwOyBtYXJnaW4tYm90dG9tOiA1cHg7Ij5FbWFpbCBBZGRyZXNzPC9kaXY+DQogICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMxZTI5M2I7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMC45NWVtOyB3b3JkLWJyZWFrOiBicmVhay13b3JkOyI+DQogICAgICAgICAgICBBbmRyZW11c2FyaTI3NkBnbWFpbC5jb20NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+DQogICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICM2NDc0OGI7IGZvbnQtc2l6ZTogMC44NWVtOyBmb250LXdlaWdodDogNTAwOyBtYXJnaW4tYm90dG9tOiA1cHg7Ij5TdHVkZW50IElEPC9kaXY+DQogICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMxZTQwYWY7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMS4xZW07IGZvbnQtZmFtaWx5OiBcJ0NvbnNvbGFzXCcsIG1vbm9zcGFjZTsiPg0KICAgICAgICAgICAgNTIyNTAwNjUNCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8ZGl2Pg0KICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNjQ3NDhiOyBmb250LXNpemU6IDAuODVlbTsgZm9udC13ZWlnaHQ6IDUwMDsgbWFyZ2luLWJvdHRvbTogNXB4OyI+TGlua2VkSW4gUHJvZmlsZTwvZGl2Pg0KICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9hbmRyZS1hbmRyZS0xNjE1YjQzOGEiIA0KICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIg0KICAgICAgICAgICAgIHN0eWxlPSJjb2xvcjogIzAwNzdiNTsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAwLjk1ZW07IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNXB4OyI+DQogICAgICAgICAgICBWaWV3IFByb2ZpbGUg4oaSDQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgc3R5bGU9ImZsZXg6IDE7Ij4NCiAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206IDMwcHg7Ij4NCiAgICAgICAgPGgxIHN0eWxlPSJjb2xvcjogIzFlMjkzYjsgbWFyZ2luOiAwIDAgMTBweCAwOyBmb250LXNpemU6IDIuOGVtOyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogLTAuNXB4OyI+DQogICAgICAgICAgQU5EUkUNCiAgICAgICAgPC9oMT4NCiAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMzYjgyZjY7IGZvbnQtc2l6ZTogMS4yZW07IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbi1ib3R0b206IDVweDsiPg0KICAgICAgICAgIERhdGEgU2NpZW5jZSBTdHVkZW50DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgICANCiAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6ICNmOGZhZmM7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1yYWRpdXM6IDE1cHg7IGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzFlNDBhZjsgbWFyZ2luLWJvdHRvbTogMzBweDsiPg0KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDIwcHg7Ij4NCiAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNzBweDsgaGVpZ2h0OiA3MHB4OyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMWU0MGFmLCAjM2I4MmY2KTsgYm9yZGVyLXJhZGl1czogMTJweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4NCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogd2hpdGU7IGZvbnQtc2l6ZTogMS44ZW07IGZvbnQtd2VpZ2h0OiA3MDA7Ij5JVFNCPC9zcGFuPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzFlNDBhZjsgZm9udC1zaXplOiAxLjRlbTsgZm9udC13ZWlnaHQ6IDcwMDsiPg0KICAgICAgICAgICAgICBJbnN0aXR1dCBUZWtub2xvZ2kgU2FpbnMgQmFuZHVuZw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgICANCiAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDQwcHg7IHBhZGRpbmctdG9wOiAyMHB4OyBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTdlYjsgdGV4dC1hbGlnbjogY2VudGVyOyI+DQogICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNjQ3NDhiOyBmb250LXNpemU6IDAuOWVtOyI+DQogICAgICAgICAgSW5zdGl0dXQgVGVrbm9sb2dpIFNhaW5zIEJhbmR1bmcg4oCiIERhdGEgU2NpZW5jZSDigKIgMjAyNg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KJykNCmBgYA0KDQo8L2Rpdj4gDQoNCjxkaXYgY2xhc3M9ImV4cGxhbmF0aW9uLWJveCI+DQoNCiMgUGVyc2lhcGFuIERhdGEgS2FyeWF3YW4NCg0KYGBge3IsZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFBFUlNJQVBBTiBEQVRBIEtBUllBV0FODQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIERhdGFzZXQgS2FyeWF3YW4NCg0KbmFtYSA8LSBjKCJCYWdhcyIsIkpvYW4iLCJBbHlhIiwiRHdpIiwiTmFiaWwiKQ0KdXNpYSA8LSBjKDI1LDMwLDI3LDM1LDQwKQ0KZ2FqaSA8LSBjKDUwMDAsNzAwMCw2NTAwLDEwMDAwLDEyMDAwKQ0KcG9zaXNpIDwtIGMoIlN0YWZmIiwiUGVuZ2F3YXMiLCJTdGFmZiIsIk1hbmFqZXIiLCJEaXJla3R1ciIpDQpraW5lcmphIDwtIGMoIkJhZ3VzIiwiU2FuZ2F0IGJhZ3VzIiwiUmF0YS1yYXRhIiwiQmFndXMiLCJTYW5nYXQgYmFndXMiKQ0KDQpgYGANCg0KPC9kaXY+IA0KDQotLS0NCg0KPGRpdiBjbGFzcz0iZXhwbGFuYXRpb24tYm94Ij4NCg0KIyBNZW5naGl0dW5nIEJvbnVzIEthcnlhd2FuDQoNCmBgYHtyLGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNRU5HSElUVU5HIEJPTlVTIEtBUllBV0FODQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNhdCgiPT09IFBlcmhpdHVuZ2FuIEJvbnVzIEthcnlhd2FuID09PVxuIikNCg0KZm9yKGkgaW4gMTpsZW5ndGgobmFtYSkpew0KDQogIGlmKGtpbmVyamFbaV0gPT0gIlNhbmdhdCBiYWd1cyIpew0KICAgIGJvbnVzIDwtIGdhamlbaV0gKiAwLjIwDQogIH0NCg0KICBlbHNlIGlmKGtpbmVyamFbaV0gPT0gIkJhZ3VzIil7DQogICAgYm9udXMgPC0gZ2FqaVtpXSAqIDAuMTANCiAgfQ0KDQogIGVsc2V7DQogICAgYm9udXMgPC0gZ2FqaVtpXSAqIDAuMDUNCiAgfQ0KDQogIGNhdCgiTmFtZToiLCBuYW1hW2ldLCAiQm9udXM6IiwgYm9udXMsIlxuIikNCn0NCg0KYGBgDQoNCjwvZGl2PiANCg0KLS0tDQoNCjxkaXYgY2xhc3M9ImV4cGxhbmF0aW9uLWJveCI+DQoNCiMgTWVuYW1waWxrYW4gS2FyeWF3YW4gZGVuZ2FuIEdhamkgPiA2MDAwDQoNCmBgYHtyLGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNRU5BTVBJTEtBTiBLQVJZQVdBTiBERU5HQU4gR0FKSSA+IDYwMDANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KY2F0KCJcbj09PSBLYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDAgPT09XG4iKQ0KDQpmb3IoaSBpbiAxOmxlbmd0aChuYW1hKSl7DQoNCiAgaWYoZ2FqaVtpXSA+IDYwMDApew0KICAgIGNhdCgiTmFtZToiLCBuYW1hW2ldLCAiU2FsYXJ5OiIsIGdhamlbaV0sICJcbiIpDQogIH0NCg0KfQ0KYGBgDQoNCjwvZGl2PiANCg0KLS0tDQoNCjxkaXYgY2xhc3M9ImV4cGxhbmF0aW9uLWJveCI+DQoNCiMgTWVuYW1waWxrYW4gS2FyeWF3YW4gU2FtcGFpIE1hbmFnZXIgKFdoaWxlIExvb3ApDQoNCmBgYHtyLGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNRU5BTVBJTEtBTiBLQVJZQVdBTiBTQU1QQUkgTUFOQUdFUiAoV0hJTEUgTE9PUCkNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KY2F0KCJcbj09PSBQZXJ1bGFuZ2FuIFdISUxFID09PVxuIikNCg0KaSA8LSAxDQoNCndoaWxlKGkgPD0gbGVuZ3RoKG5hbWEpKXsNCg0KICBjYXQoIk5hbWU6IiwgbmFtYVtpXSwgIlBvc2l0aW9uOiIsIHBvc2lzaVtpXSwgIlxuIikNCg0KICBpZihwb3Npc2lbaV0gPT0gIk1hbmFqZXIiKXsNCiAgICBjYXQoIihTdG9wIGhlcmUpXG4iKQ0KICAgIGJyZWFrDQogIH0NCg0KICBpIDwtIGkgKyAxDQp9DQpgYGANCg0KPC9kaXY+IA0KDQotLS0NCg0KPGRpdiBjbGFzcz0iZXhwbGFuYXRpb24tYm94Ij4NCg0KIyBCcmVhayBLZXRpa2EgR2FqaSA+IDEwMDAwDQoNCmBgYHtyLGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBCUkVBSyBLRVRJS0EgR0FKSSA+IDEwMDAwDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNhdCgiXG49PT0gQlJFQUsgPT09XG4iKQ0KDQpmb3IoaSBpbiAxOmxlbmd0aChuYW1hKSl7DQoNCiAgaWYoZ2FqaVtpXSA+IDEwMDAwKXsNCiAgICBjYXQoIihTdG9wcGVkIGJlY2F1c2UiLCBuYW1hW2ldLCAiaGFzIGEgc2FsYXJ5IGFib3ZlIDEwLDAwMClcbiIpDQogICAgYnJlYWsNCiAgfQ0KDQogIGNhdCgiTmFtZToiLCBuYW1hW2ldLCAiU2FsYXJ5OiIsIGdhamlbaV0sICJcbiIpDQoNCn0NCg0KYGBgDQoNCjwvZGl2PiANCg0KLS0tDQoNCjxkaXYgY2xhc3M9ImV4cGxhbmF0aW9uLWJveCI+DQoNCiMgQ29udGludWUgVW50dWsgTWVsZXdhdGkgS2luZXJqYSAiUmF0YS1SYXRhIg0KDQpgYGB7cixlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ09OVElOVUUgVU5UVUsgTUVMRVdBVEkgS0lORVJKQSAiUkFUQS1SQVRBIg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpjYXQoIlxuPT09IENPTlRJTlVFID09PVxuIikNCg0KZm9yKGkgaW4gMTpsZW5ndGgobmFtYSkpew0KDQogIGlmKGtpbmVyamFbaV0gPT0gIlJhdGEtcmF0YSIpew0KICAgIGNhdChuYW1hW2ldLCAiZGlsZXdhdGkga2FyZW5hIGtpbmVyamEgUmF0YS1yYXRhXG4iKQ0KICAgIG5leHQNCiAgfQ0KDQogIGNhdCgiTmFtZToiLCBuYW1hW2ldLCAiUGVyZm9ybWFuY2U6Iiwga2luZXJqYVtpXSwgIlxuIikNCg0KfQ0KYGBgDQoNCjwvZGl2PiANCg0KDQo=