#include <stdio.h>
#include <string.h>
#define NUM_EMPL 5
#define STD_HOURS 40.0
#define OT_RATE 1.5
#define FED_TAX_RATE 0.25
struct name {
char firstName[10];
char lastName[10];
};
struct employee {
struct name empName;
char taxState[3];
long int clockNumber;
float wageRate, hours, overtimeHrs;
float grossPay, stateTax, fedTax, netPay;
};
struct totals {
float wage, hours, overtime, gross, stateTax, fedTax, net;
};
struct min_max {
float min[7], max[7];
};
/* Simplified Function Prototypes */
void getHours(struct employee *emp_ptr, int size);
void calculatePay(struct employee *emp_ptr, int size);
void printEmp(struct employee *emp_ptr, int size);
void processStatistics(struct employee *emp_ptr, struct totals *t_ptr, struct min_max *mm_ptr, int size);
int main(void)
{
struct employee employeeData[NUM_EMPL] = {
{ {"Connie", "Cobol"}, "MA", 98401, 10.60},
{ {"Mary", "Apl"}, "NH", 526488, 9.75 },
{ {"Frank", "Fortran"}, "VT", 765349, 10.50 },
{ {"Jeff", "Ada"}, "NY", 34645, 12.25 },
{ {"Anton", "Pascal"}, "CA", 127615, 8.35 }
};
struct totals employeeTotals = {0};
struct min_max employeeMinMax = {0};
struct employee *emp_ptr = employeeData;
struct totals *emp_totals_ptr = &employeeTotals;
struct min_max *emp_minMax_ptr = &employeeMinMax;
getHours(emp_ptr, NUM_EMPL);
calculatePay(emp_ptr, NUM_EMPL);
printf("\n*** Pay Calculator ***\n"); printEmp(emp_ptr, NUM_EMPL);
processStatistics(emp_ptr, emp_totals_ptr, emp_minMax_ptr, NUM_EMPL);
return 0;
}
void getHours(struct employee *emp_ptr, int size)
{
for (int i = 0; i < size; i++, emp_ptr++) {
printf("Enter hours for employee %06li: ", emp_ptr
->clockNumber
); if (scanf("%f", &emp_ptr
->hours
) != 1) { printf("Error reading input.\n"); }
}
}
void calculatePay(struct employee *emp_ptr, int size)
{
for (int i = 0; i < size; i++, emp_ptr++) {
float rate = 0.08;
emp_ptr->overtimeHrs = (emp_ptr->hours > STD_HOURS) ? (emp_ptr->hours - STD_HOURS) : 0;
emp_ptr->grossPay = ((emp_ptr->hours - emp_ptr->overtimeHrs) * emp_ptr->wageRate) +
(emp_ptr->overtimeHrs * emp_ptr->wageRate * OT_RATE);
if (strcmp(emp_ptr
->taxState
, "MA") == 0) rate
= 0.05; else if (strcmp(emp_ptr
->taxState
, "NH") == 0) rate
= 0.00; else if (strcmp(emp_ptr
->taxState
, "VT") == 0) rate
= 0.06; else if (strcmp(emp_ptr
->taxState
, "CA") == 0) rate
= 0.07;
emp_ptr->stateTax = emp_ptr->grossPay * rate;
emp_ptr->fedTax = emp_ptr->grossPay * FED_TAX_RATE;
emp_ptr->netPay = emp_ptr->grossPay - emp_ptr->stateTax - emp_ptr->fedTax;
}
}
void printEmp(struct employee *emp_ptr, int size)
{
printf("---------------------------------------------------------------------------------\n"); printf("%-20s %-5s %8s %7s %6s %6s %8s %8s %8s %8s\n", "Name", "State", "Clock#", "Wage", "Hours", "OT", "Gross", "StateTax", "FedTax", "NetPay");
printf("---------------------------------------------------------------------------------\n");
for (int i = 0; i < size; i++, emp_ptr++) {
char fullName[21];
snprintf(fullName
, sizeof(fullName
), "%s %s", emp_ptr
->empName.
firstName, emp_ptr
->empName.
lastName);
printf("%-20s %-5s %08li %7.2f %6.1f %6.1f %8.2f %8.2f %8.2f %8.2f\n", fullName, emp_ptr->taxState, emp_ptr->clockNumber,
emp_ptr->wageRate, emp_ptr->hours, emp_ptr->overtimeHrs,
emp_ptr->grossPay, emp_ptr->stateTax, emp_ptr->fedTax, emp_ptr->netPay);
}
}
/* Combines calculation and printing logic cleanly using simple index looping */
void processStatistics(struct employee *emp_ptr, struct totals *t_ptr, struct min_max *mm_ptr, int size)
{
// Initialize min and max values with the first employee's values
float structural_vals[7] = {
emp_ptr->wageRate, emp_ptr->hours, emp_ptr->overtimeHrs,
emp_ptr->grossPay, emp_ptr->stateTax, emp_ptr->fedTax, emp_ptr->netPay
};
for (int j = 0; j < 7; j++) {
mm_ptr->min[j] = structural_vals[j];
mm_ptr->max[j] = structural_vals[j];
}
// Accumulate total metrics and track min/max scales across all records
for (int i = 0; i < size; i++) {
struct employee *c = emp_ptr + i;
float row[7] = { c->wageRate, c->hours, c->overtimeHrs, c->grossPay, c->stateTax, c->fedTax, c->netPay };
t_ptr->wage += c->wageRate; t_ptr->hours += c->hours;
t_ptr->overtime += c->overtimeHrs; t_ptr->gross += c->grossPay;
t_ptr->stateTax += c->stateTax; t_ptr->fedTax += c->fedTax;
t_ptr->net += c->netPay;
for (int j = 0; j < 7; j++) {
if (row[j] < mm_ptr->min[j]) mm_ptr->min[j] = row[j];
if (row[j] > mm_ptr->max[j]) mm_ptr->max[j] = row[j];
}
}
// Print summary blocks cleanly using our streamlined struct arrays
printf("---------------------------------------------------------------------------------\n"); printf("%-20s %-5s %8s %7.2f %6.1f %6.1f %8.2f %8.2f %8.2f %8.2f\n", "Totals:", "", "", t_ptr->wage, t_ptr->hours, t_ptr->overtime, t_ptr->gross, t_ptr->stateTax, t_ptr->fedTax, t_ptr->net);
printf("%-20s %-5s %8s %7.2f %6.1f %6.1f %8.2f %8.2f %8.2f %8.2f\n", "Averages:", "", "", t_ptr->wage / size, t_ptr->hours / size, t_ptr->overtime / size, t_ptr->gross / size, t_ptr->stateTax / size, t_ptr->fedTax / size, t_ptr->net / size);
printf("%-20s %-5s %8s %7.2f %6.1f %6.1f %8.2f %8.2f %8.2f %8.2f\n", "Minimum:", "", "", mm_ptr->min[0], mm_ptr->min[1], mm_ptr->min[2], mm_ptr->min[3], mm_ptr->min[4], mm_ptr->min[5], mm_ptr->min[6]);
printf("%-20s %-5s %8s %7.2f %6.1f %6.1f %8.2f %8.2f %8.2f %8.2f\n", "Maximum:", "", "", mm_ptr->max[0], mm_ptr->max[1], mm_ptr->max[2], mm_ptr->max[3], mm_ptr->max[4], mm_ptr->max[5], mm_ptr->max[6]);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTlVNX0VNUEwgNQojZGVmaW5lIFNURF9IT1VSUyA0MC4wCiNkZWZpbmUgT1RfUkFURSAxLjUKI2RlZmluZSBGRURfVEFYX1JBVEUgMC4yNQoKc3RydWN0IG5hbWUgewogICAgY2hhciBmaXJzdE5hbWVbMTBdOwogICAgY2hhciBsYXN0TmFtZVsxMF07Cn07CgpzdHJ1Y3QgZW1wbG95ZWUgewogICAgc3RydWN0IG5hbWUgZW1wTmFtZTsKICAgIGNoYXIgdGF4U3RhdGVbM107CiAgICBsb25nIGludCBjbG9ja051bWJlcjsKICAgIGZsb2F0IHdhZ2VSYXRlLCBob3Vycywgb3ZlcnRpbWVIcnM7CiAgICBmbG9hdCBncm9zc1BheSwgc3RhdGVUYXgsIGZlZFRheCwgbmV0UGF5Owp9OwoKc3RydWN0IHRvdGFscyB7CiAgICBmbG9hdCB3YWdlLCBob3Vycywgb3ZlcnRpbWUsIGdyb3NzLCBzdGF0ZVRheCwgZmVkVGF4LCBuZXQ7Cn07CgpzdHJ1Y3QgbWluX21heCB7CiAgICBmbG9hdCBtaW5bN10sIG1heFs3XTsKfTsKCi8qIFNpbXBsaWZpZWQgRnVuY3Rpb24gUHJvdG90eXBlcyAqLwp2b2lkIGdldEhvdXJzKHN0cnVjdCBlbXBsb3llZSAqZW1wX3B0ciwgaW50IHNpemUpOwp2b2lkIGNhbGN1bGF0ZVBheShzdHJ1Y3QgZW1wbG95ZWUgKmVtcF9wdHIsIGludCBzaXplKTsKdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgKmVtcF9wdHIsIGludCBzaXplKTsKdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhzdHJ1Y3QgZW1wbG95ZWUgKmVtcF9wdHIsIHN0cnVjdCB0b3RhbHMgKnRfcHRyLCBzdHJ1Y3QgbWluX21heCAqbW1fcHRyLCBpbnQgc2l6ZSk7CgppbnQgbWFpbih2b2lkKQp7CiAgICBzdHJ1Y3QgZW1wbG95ZWUgZW1wbG95ZWVEYXRhW05VTV9FTVBMXSA9IHsKICAgICAgICB7IHsiQ29ubmllIiwgIkNvYm9sIn0sICJNQSIsIDk4NDAxLCAxMC42MH0sCiAgICAgICAgeyB7Ik1hcnkiLCAiQXBsIn0sICJOSCIsIDUyNjQ4OCwgOS43NSB9LAogICAgICAgIHsgeyJGcmFuayIsICJGb3J0cmFuIn0sICJWVCIsIDc2NTM0OSwgMTAuNTAgfSwKICAgICAgICB7IHsiSmVmZiIsICJBZGEifSwgIk5ZIiwgMzQ2NDUsIDEyLjI1IH0sCiAgICAgICAgeyB7IkFudG9uIiwgIlBhc2NhbCJ9LCAiQ0EiLCAxMjc2MTUsIDguMzUgfQogICAgfTsKICAgIAogICAgc3RydWN0IHRvdGFscyBlbXBsb3llZVRvdGFscyA9IHswfTsKICAgIHN0cnVjdCBtaW5fbWF4IGVtcGxveWVlTWluTWF4ID0gezB9OwoKICAgIHN0cnVjdCBlbXBsb3llZSAqZW1wX3B0ciA9IGVtcGxveWVlRGF0YTsKICAgIHN0cnVjdCB0b3RhbHMgKmVtcF90b3RhbHNfcHRyID0gJmVtcGxveWVlVG90YWxzOwogICAgc3RydWN0IG1pbl9tYXggKmVtcF9taW5NYXhfcHRyID0gJmVtcGxveWVlTWluTWF4OwoKICAgIGdldEhvdXJzKGVtcF9wdHIsIE5VTV9FTVBMKTsKICAgIGNhbGN1bGF0ZVBheShlbXBfcHRyLCBOVU1fRU1QTCk7CiAgICAKICAgIHByaW50ZigiXG4qKiogUGF5IENhbGN1bGF0b3IgKioqXG4iKTsKICAgIHByaW50RW1wKGVtcF9wdHIsIE5VTV9FTVBMKTsKICAgIHByb2Nlc3NTdGF0aXN0aWNzKGVtcF9wdHIsIGVtcF90b3RhbHNfcHRyLCBlbXBfbWluTWF4X3B0ciwgTlVNX0VNUEwpOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIGdldEhvdXJzKHN0cnVjdCBlbXBsb3llZSAqZW1wX3B0ciwgaW50IHNpemUpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBlbXBfcHRyKyspIHsKICAgICAgICBwcmludGYoIkVudGVyIGhvdXJzIGZvciBlbXBsb3llZSAlMDZsaTogIiwgZW1wX3B0ci0+Y2xvY2tOdW1iZXIpOwogICAgICAgIGlmIChzY2FuZigiJWYiLCAmZW1wX3B0ci0+aG91cnMpICE9IDEpIHsKICAgICAgICAgICAgcHJpbnRmKCJFcnJvciByZWFkaW5nIGlucHV0LlxuIik7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGNhbGN1bGF0ZVBheShzdHJ1Y3QgZW1wbG95ZWUgKmVtcF9wdHIsIGludCBzaXplKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKywgZW1wX3B0cisrKSB7CiAgICAgICAgZmxvYXQgcmF0ZSA9IDAuMDg7CgogICAgICAgIGVtcF9wdHItPm92ZXJ0aW1lSHJzID0gKGVtcF9wdHItPmhvdXJzID4gU1REX0hPVVJTKSA/IChlbXBfcHRyLT5ob3VycyAtIFNURF9IT1VSUykgOiAwOwogICAgICAgIGVtcF9wdHItPmdyb3NzUGF5ID0gKChlbXBfcHRyLT5ob3VycyAtIGVtcF9wdHItPm92ZXJ0aW1lSHJzKSAqIGVtcF9wdHItPndhZ2VSYXRlKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW1wX3B0ci0+b3ZlcnRpbWVIcnMgKiBlbXBfcHRyLT53YWdlUmF0ZSAqIE9UX1JBVEUpOwoKICAgICAgICBpZiAoc3RyY21wKGVtcF9wdHItPnRheFN0YXRlLCAiTUEiKSA9PSAwKSAgICAgIHJhdGUgPSAwLjA1OwogICAgICAgIGVsc2UgaWYgKHN0cmNtcChlbXBfcHRyLT50YXhTdGF0ZSwgIk5IIikgPT0gMCkgcmF0ZSA9IDAuMDA7CiAgICAgICAgZWxzZSBpZiAoc3RyY21wKGVtcF9wdHItPnRheFN0YXRlLCAiVlQiKSA9PSAwKSByYXRlID0gMC4wNjsKICAgICAgICBlbHNlIGlmIChzdHJjbXAoZW1wX3B0ci0+dGF4U3RhdGUsICJDQSIpID09IDApIHJhdGUgPSAwLjA3OwoKICAgICAgICBlbXBfcHRyLT5zdGF0ZVRheCA9IGVtcF9wdHItPmdyb3NzUGF5ICogcmF0ZTsKICAgICAgICBlbXBfcHRyLT5mZWRUYXggICA9IGVtcF9wdHItPmdyb3NzUGF5ICogRkVEX1RBWF9SQVRFOwogICAgICAgIGVtcF9wdHItPm5ldFBheSAgID0gZW1wX3B0ci0+Z3Jvc3NQYXkgLSBlbXBfcHRyLT5zdGF0ZVRheCAtIGVtcF9wdHItPmZlZFRheDsKICAgIH0KfQoKdm9pZCBwcmludEVtcChzdHJ1Y3QgZW1wbG95ZWUgKmVtcF9wdHIsIGludCBzaXplKQp7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICBwcmludGYoIiUtMjBzICUtNXMgJThzICU3cyAlNnMgJTZzICU4cyAlOHMgJThzICU4c1xuIiwKICAgICAgICAgICAiTmFtZSIsICJTdGF0ZSIsICJDbG9jayMiLCAiV2FnZSIsICJIb3VycyIsICJPVCIsICJHcm9zcyIsICJTdGF0ZVRheCIsICJGZWRUYXgiLCAiTmV0UGF5Iik7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyssIGVtcF9wdHIrKykgewogICAgICAgIGNoYXIgZnVsbE5hbWVbMjFdOwogICAgICAgIHNucHJpbnRmKGZ1bGxOYW1lLCBzaXplb2YoZnVsbE5hbWUpLCAiJXMgJXMiLCBlbXBfcHRyLT5lbXBOYW1lLmZpcnN0TmFtZSwgZW1wX3B0ci0+ZW1wTmFtZS5sYXN0TmFtZSk7CgogICAgICAgIHByaW50ZigiJS0yMHMgJS01cyAlMDhsaSAlNy4yZiAlNi4xZiAlNi4xZiAlOC4yZiAlOC4yZiAlOC4yZiAlOC4yZlxuIiwKICAgICAgICAgICAgICAgZnVsbE5hbWUsIGVtcF9wdHItPnRheFN0YXRlLCBlbXBfcHRyLT5jbG9ja051bWJlciwKICAgICAgICAgICAgICAgZW1wX3B0ci0+d2FnZVJhdGUsIGVtcF9wdHItPmhvdXJzLCBlbXBfcHRyLT5vdmVydGltZUhycywKICAgICAgICAgICAgICAgZW1wX3B0ci0+Z3Jvc3NQYXksIGVtcF9wdHItPnN0YXRlVGF4LCBlbXBfcHRyLT5mZWRUYXgsIGVtcF9wdHItPm5ldFBheSk7CiAgICB9Cn0KCi8qIENvbWJpbmVzIGNhbGN1bGF0aW9uIGFuZCBwcmludGluZyBsb2dpYyBjbGVhbmx5IHVzaW5nIHNpbXBsZSBpbmRleCBsb29waW5nICovCnZvaWQgcHJvY2Vzc1N0YXRpc3RpY3Moc3RydWN0IGVtcGxveWVlICplbXBfcHRyLCBzdHJ1Y3QgdG90YWxzICp0X3B0ciwgc3RydWN0IG1pbl9tYXggKm1tX3B0ciwgaW50IHNpemUpCnsKICAgIC8vIEluaXRpYWxpemUgbWluIGFuZCBtYXggdmFsdWVzIHdpdGggdGhlIGZpcnN0IGVtcGxveWVlJ3MgdmFsdWVzCiAgICBmbG9hdCBzdHJ1Y3R1cmFsX3ZhbHNbN10gPSB7CiAgICAgICAgZW1wX3B0ci0+d2FnZVJhdGUsIGVtcF9wdHItPmhvdXJzLCBlbXBfcHRyLT5vdmVydGltZUhycywgCiAgICAgICAgZW1wX3B0ci0+Z3Jvc3NQYXksIGVtcF9wdHItPnN0YXRlVGF4LCBlbXBfcHRyLT5mZWRUYXgsIGVtcF9wdHItPm5ldFBheQogICAgfTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgbW1fcHRyLT5taW5bal0gPSBzdHJ1Y3R1cmFsX3ZhbHNbal07CiAgICAgICAgbW1fcHRyLT5tYXhbal0gPSBzdHJ1Y3R1cmFsX3ZhbHNbal07CiAgICB9CgogICAgLy8gQWNjdW11bGF0ZSB0b3RhbCBtZXRyaWNzIGFuZCB0cmFjayBtaW4vbWF4IHNjYWxlcyBhY3Jvc3MgYWxsIHJlY29yZHMKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgc3RydWN0IGVtcGxveWVlICpjID0gZW1wX3B0ciArIGk7CiAgICAgICAgZmxvYXQgcm93WzddID0geyBjLT53YWdlUmF0ZSwgYy0+aG91cnMsIGMtPm92ZXJ0aW1lSHJzLCBjLT5ncm9zc1BheSwgYy0+c3RhdGVUYXgsIGMtPmZlZFRheCwgYy0+bmV0UGF5IH07CiAgICAgICAgCiAgICAgICAgdF9wdHItPndhZ2UgICAgICs9IGMtPndhZ2VSYXRlOyAgICAgdF9wdHItPmhvdXJzICAgICs9IGMtPmhvdXJzOwogICAgICAgIHRfcHRyLT5vdmVydGltZSArPSBjLT5vdmVydGltZUhyczsgIHRfcHRyLT5ncm9zcyAgICArPSBjLT5ncm9zc1BheTsKICAgICAgICB0X3B0ci0+c3RhdGVUYXggKz0gYy0+c3RhdGVUYXg7ICAgICB0X3B0ci0+ZmVkVGF4ICAgKz0gYy0+ZmVkVGF4OwogICAgICAgIHRfcHRyLT5uZXQgICAgICArPSBjLT5uZXRQYXk7CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICAgIGlmIChyb3dbal0gPCBtbV9wdHItPm1pbltqXSkgbW1fcHRyLT5taW5bal0gPSByb3dbal07CiAgICAgICAgICAgIGlmIChyb3dbal0gPiBtbV9wdHItPm1heFtqXSkgbW1fcHRyLT5tYXhbal0gPSByb3dbal07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFByaW50IHN1bW1hcnkgYmxvY2tzIGNsZWFubHkgdXNpbmcgb3VyIHN0cmVhbWxpbmVkIHN0cnVjdCBhcnJheXMKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIHByaW50ZigiJS0yMHMgJS01cyAlOHMgJTcuMmYgJTYuMWYgJTYuMWYgJTguMmYgJTguMmYgJTguMmYgJTguMmZcbiIsICJUb3RhbHM6IiwgIiIsICIiLAogICAgICAgICAgIHRfcHRyLT53YWdlLCB0X3B0ci0+aG91cnMsIHRfcHRyLT5vdmVydGltZSwgdF9wdHItPmdyb3NzLCB0X3B0ci0+c3RhdGVUYXgsIHRfcHRyLT5mZWRUYXgsIHRfcHRyLT5uZXQpOwogICAgCiAgICBwcmludGYoIiUtMjBzICUtNXMgJThzICU3LjJmICU2LjFmICU2LjFmICU4LjJmICU4LjJmICU4LjJmICU4LjJmXG4iLCAiQXZlcmFnZXM6IiwgIiIsICIiLAogICAgICAgICAgIHRfcHRyLT53YWdlIC8gc2l6ZSwgdF9wdHItPmhvdXJzIC8gc2l6ZSwgdF9wdHItPm92ZXJ0aW1lIC8gc2l6ZSwgdF9wdHItPmdyb3NzIC8gc2l6ZSwgdF9wdHItPnN0YXRlVGF4IC8gc2l6ZSwgdF9wdHItPmZlZFRheCAvIHNpemUsIHRfcHRyLT5uZXQgLyBzaXplKTsKICAgIAogICAgcHJpbnRmKCIlLTIwcyAlLTVzICU4cyAlNy4yZiAlNi4xZiAlNi4xZiAlOC4yZiAlOC4yZiAlOC4yZiAlOC4yZlxuIiwgIk1pbmltdW06IiwgIiIsICIiLAogICAgICAgICAgIG1tX3B0ci0+bWluWzBdLCBtbV9wdHItPm1pblsxXSwgbW1fcHRyLT5taW5bMl0sIG1tX3B0ci0+bWluWzNdLCBtbV9wdHItPm1pbls0XSwgbW1fcHRyLT5taW5bNV0sIG1tX3B0ci0+bWluWzZdKTsKICAgIAogICAgcHJpbnRmKCIlLTIwcyAlLTVzICU4cyAlNy4yZiAlNi4xZiAlNi4xZiAlOC4yZiAlOC4yZiAlOC4yZiAlOC4yZlxuIiwgIk1heGltdW06IiwgIiIsICIiLAogICAgICAgICAgIG1tX3B0ci0+bWF4WzBdLCBtbV9wdHItPm1heFsxXSwgbW1fcHRyLT5tYXhbMl0sIG1tX3B0ci0+bWF4WzNdLCBtbV9wdHItPm1heFs0XSwgbW1fcHRyLT5tYXhbNV0sIG1tX3B0ci0+bWF4WzZdKTsKfQ==