#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include<conio.h>
#include<windows.h>
using namespace std;
FILE *f;
struct Student //Структура Студент
{
char Family[35]; //Фамилия студента
char Name[35]; //Имя студента
char Sex[20]; //Пол студента
char City[100]; //Город рождения студента
int Date[3]; //Дата рождения студента
void Show(); //Функция будет отображать данные студента
void Input(); //Функция ввода данных в структуру
void Year(const int Date1, const int Date2);//нужные года
void Gorod();//пока не испотльзую и не буду наверн
int god;//год
};
void gotoxy(int x, int y)
{
COORD c = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void Student::Input() //ЗАПИСЬ В ФАЙЛ Функцию объявленную внутри структуры можно использовать вне структуры таким вот образом
{
system("cls");
cout << "\n";
cout << "===========================================================================\n";
cout << "|Family |Name |Sex |Date born |City \n";
cout << "===========================================================================\n";
cout << "| | | | | \n";
cout << "===========================================================================\n";
int y;
//gotoxy(1, 1);
//cout << "\n\n";
gotoxy(1, 2); // используя gotoxy перемещаемся по таблице
cout << "Family";
gotoxy(1, 4);
//cin.getline(Family, 35); //Считали фамилию
gets_s(Family); fprintf(f, "%s\n", Family);
gotoxy(16, 2);
cout << "Name";
gotoxy(16, 4);
//cin.getline(Name, 35); //Считали имя
gets_s(Name); fprintf(f, "%s\n", Name);
int k;
gotoxy(31, 2);
cout << "Sex Female/Male";//Выбираем пол "Sex chouse 1=Male ,2 =Female"
gotoxy(31, 4);
/*cin >> k;
if (k == 1)
strcpy(Sex, "Male");
else
strcpy(Sex, "Female");
*/
gets_s(Sex); fprintf(f, "%s\n", Sex);
gotoxy(52, 2);
cout << "Date born"; // вводим дату рождения через пробел
gotoxy(52, 4);
//cin >> Date[0]; //Дата внутри структуры является массивом, поэтому обращение с индексом
// cin.ignore(); cin.ignore();
cin >> Date[0]; fprintf(f, "%d\n", Date[0]);
// cin >> Date[1];
gotoxy(55, 4);
cin.ignore();
cin >> Date[1]; fprintf(f, "%d\n", Date[1]);
gotoxy(58, 4);
cin >> Date[2]; fprintf(f, "%d\n", Date[2]);
cin.ignore();
gotoxy(65, 2);
cout << "City";
gotoxy(65, 4);
gets_s(City); fprintf(f, "%s\n", City);
cout << "\n\n";
cout << "======================\n";
}
void Student::Show() //Функция показывает данные структуры на экране
{
cout << "Student \n";
fprintf(f, "%s\n", Family);
fprintf(f, "%s\n", Name);
fprintf(f, "%s\n", Sex);
fprintf(f, "%d\n", Date[0]);
fprintf(f, "%d\n", Date[1]);
fprintf(f, "%d\n", Date[2]);
fprintf(f, "%s\n", City);
cout << Name << " " << Family << "\n" << "Sex: " << Sex << "\nBorn in " << Date[0] << "." << Date[1] << "." << Date[2] << "\n";
cout << "In the city which is called " << City << "\n\n";
}
void Student::Year(const int Date1, const int Date2) //Внутри функции ничего менять не планируется, поэтому константы
{
if ((Date[2] >= Date1) && (Date[2] <= Date2)) Show(); //Проверка принадлежности диапазону и при вхождении в диапазон вывод элемента структуры на экран
};
int prompt_menu_item()
{
// Выбранный вариант меню
int variant;
cout << "Choose you variant\n" << endl;
cout << "1. Men born in towns НЕ ТООООО\n" //этот пункт не нужен я его потом должен убрать
<< "2. Only girls\n" //только девушки
<< "3. All students born in years\n" //список всех студентов родившихся в годах с какого то по какой то, вводим с клавы
<< "4. Men born in towns\n" << endl; // список юношей родившихся в городе, вводим с клавы
cout << ">>> ";
cin >> variant;
return variant;
}
int main()
{
char Gorod[20];
int N; //Количество элементов в структуре
cout << "Enter amount students = "; cin >> N; cin.ignore();
Student* student = new Student[N]; //
cout << "Enter information about students in English\n";
cout << "File name? ";
char s[50];
cin.getline(s, 50);
f = fopen("s.txt", "a+");
for (int i = 0; i < N; i++) student[i].Input(); //ЭТО И ЕСТЬ ЗАПИСЬ В ФАЙЛ С помощью цикла заполняем структуру, вызывая метод структуры.
fclose(f);
setlocale(LC_ALL, "Rus");
while (true){
int variant = prompt_menu_item();
switch (variant) {
case 1:
cout << "\nEnter need town:";
(cin >> Gorod).get();
for (int i = 0; i < N; i++)
if (strcmp(student[i].Sex, "Male") == 0 && strcmp(student[i].City, Gorod) == 0)
{
student[i].Show();// показываем всех пацанов с района
}
system("pause");
break;
case 2:
char f4[20];
FILE *z1;
cout << "\nВведите имя файла для чтения: ";
//fscanf(v, "%d", &m);
cin >> f4;
z1 = fopen(f4, "r");
for (int i = 0; i < N; i++)
fscanf(z1, "%s%s%s%d%d%d%s", &student[i].Family, &student[i].Name, &student[i].Sex, &student[i].Date[0], &student[i].Date[1], &student[i].Date[2], &student[i].City);
cout << "\nЧтение из файла " << f4 << ":\n";
for (int i = 0; i < N; i++)
cout << student[i].Family << " " << student[i].Name << " " << student[i].Sex << " " << student[i].Date[0] << "." << student[i].Date[1] << "." << student[i].Date[2] << " " << student[i].City << "\n";
cout << "File name? ";
char girls[50];
cin.getline(girls, 50);
f = fopen("girls.txt", "a+");
for (int i = 0; i < N; i++)
if (strcmp(student[i].Sex, "Female") == 0)
{
student[i].Show();
}
fclose(f); //С помощью цикла показываем всех девочек.
system("pause");
break;
case 3:
char f3[20];
FILE *z;
cout << "\nВведите имя файла для чтения: ";
//fscanf(v, "%d", &m);
cin >> f3;
z = fopen(f3, "r");
for (int i = 0; i < N; i++)
fscanf(z, "%s%s%s%d%d%d%s", &student[i].Family, &student[i].Name, &student[i].Sex, &student[i].Date[0], &student[i].Date[1], &student[i].Date[2], &student[i].City);
cout << "\nЧтение из файла " << f3 << ":\n";
for (int i = 0; i < N; i++)
cout << student[i].Family << " " << student[i].Name << " " << student[i].Sex << " " << student[i].Date[0] << "." << student[i].Date[1] << "." << student[i].Date[2] << " " << student[i].City << "\n";
cout << "File name? ";
char years[50];
cin.getline(years, 50);
f = fopen("years.txt", "a+");
int o, p;
cout << "Enter need yaers\t";
cin >> o; cin >> p; // ввод нужных годов
for (int i = 0; i < N; i++)
{
student[i].Year(o, p); //Выводим студентов, которые родились в нужные года
cin.get();
}
fclose(f);
system("pause");
break;
case 4: //Чтение из файла
char f2[20];
FILE *v;
cout << "\nВведите имя файла для чтения: ";
//fscanf(v, "%d", &m);
cin >> f2;
v = fopen(f2, "r");
for (int i = 0; i < N; i++)
fscanf(v, "%s%s%s%d%d%d%s", &student[i].Family, &student[i].Name, &student[i].Sex, &student[i].Date[0], &student[i].Date[1], &student[i].Date[2], &student[i].City);
cout << "\nЧтение из файла " << f2 << ":\n";
for (int i = 0; i < N; i++)
cout << student[i].Family << " " << student[i].Name << " " << student[i].Sex << " " << student[i].Date[0] << "." << student[i].Date[1] << "." << student[i].Date[2] << " " << student[i].City << "\n";
cout << "File name? ";
char s[50];
cin.getline(s, 50);
f = fopen("men.txt", "a+");
cout << "\nEnter need town:";
(cin >> Gorod).get();
for (int i = 0; i < N; i++)
if (strcmp(student[i].Sex, "Male") == 0 && strcmp(student[i].City, Gorod) == 0)
{
student[i].Show(); // показываем всех пацанов с района
}
fclose(f);
//system("pause");
break;
}
}
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4gCiNpbmNsdWRlIDxzdHJpbmc+IAojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGU8Y29uaW8uaD4KI2luY2x1ZGU8d2luZG93cy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpGSUxFICpmOwpzdHJ1Y3QgU3R1ZGVudCAvL9Ch0YLRgNGD0LrRgtGD0YDQsCDQodGC0YPQtNC10L3RgiAKewoJY2hhciBGYW1pbHlbMzVdOyAvL9Ck0LDQvNC40LvQuNGPINGB0YLRg9C00LXQvdGC0LAgCgljaGFyIE5hbWVbMzVdOyAvL9CY0LzRjyDRgdGC0YPQtNC10L3RgtCwIAoJY2hhciBTZXhbMjBdOyAvL9Cf0L7QuyDRgdGC0YPQtNC10L3RgtCwIAoJY2hhciBDaXR5WzEwMF07IC8v0JPQvtGA0L7QtCDRgNC+0LbQtNC10L3QuNGPINGB0YLRg9C00LXQvdGC0LAgCglpbnQgRGF0ZVszXTsgLy/QlNCw0YLQsCDRgNC+0LbQtNC10L3QuNGPINGB0YLRg9C00LXQvdGC0LAgCgl2b2lkIFNob3coKTsgLy/QpNGD0L3QutGG0LjRjyDQsdGD0LTQtdGCINC+0YLQvtCx0YDQsNC20LDRgtGMINC00LDQvdC90YvQtSDRgdGC0YPQtNC10L3RgtCwIAoJdm9pZCBJbnB1dCgpOyAvL9Ck0YPQvdC60YbQuNGPINCy0LLQvtC00LAg0LTQsNC90L3Ri9GFINCyINGB0YLRgNGD0LrRgtGD0YDRgyAKCXZvaWQgWWVhcihjb25zdCBpbnQgRGF0ZTEsIGNvbnN0IGludCBEYXRlMik7Ly/QvdGD0LbQvdGL0LUg0LPQvtC00LAKCXZvaWQgR29yb2QoKTsvL9C/0L7QutCwINC90LUg0LjRgdC/0L7RgtC70YzQt9GD0Y4g0Lgg0L3QtSDQsdGD0LTRgyDQvdCw0LLQtdGA0L0KCWludCBnb2Q7Ly/Qs9C+0LQKfTsKCnZvaWQgZ290b3h5KGludCB4LCBpbnQgeSkKewoJQ09PUkQgYyA9IHsgeCwgeSB9OwoJU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uKEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSksIGMpOwp9CnZvaWQgU3R1ZGVudDo6SW5wdXQoKSAvL9CX0JDQn9CY0KHQrCDQkiDQpNCQ0JnQmyAgINCk0YPQvdC60YbQuNGOINC+0LHRitGP0LLQu9C10L3QvdGD0Y4g0LLQvdGD0YLRgNC4INGB0YLRgNGD0LrRgtGD0YDRiyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC90LUg0YHRgtGA0YPQutGC0YPRgNGLINGC0LDQutC40Lwg0LLQvtGCINC+0LHRgNCw0LfQvtC8IAp7CglzeXN0ZW0oImNscyIpOwoJY291dCA8PCAiXG4iOwoJY291dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwoJY291dCA8PCAifEZhbWlseSAgICAgICAgfE5hbWUgICAgICAgICAgfFNleCAgICAgICAgICAgICAgICAgfERhdGUgYm9ybiAgIHxDaXR5ICAgICAgXG4iOwoJY291dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwoJY291dCA8PCAifCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgXG4iOwoJY291dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwoKCQoJCglpbnQgeTsKCS8vZ290b3h5KDEsIDEpOwoJLy9jb3V0IDw8ICJcblxuIjsKCWdvdG94eSgxLCAyKTsgICAgICAgICAgICAgICAgICAvLyDQuNGB0L/QvtC70YzQt9GD0Y8gZ290b3h5INC/0LXRgNC10LzQtdGJ0LDQtdC80YHRjyDQv9C+INGC0LDQsdC70LjRhtC1Cgljb3V0IDw8ICJGYW1pbHkiOwoJZ290b3h5KDEsIDQpOwoJLy9jaW4uZ2V0bGluZShGYW1pbHksIDM1KTsgLy/QodGH0LjRgtCw0LvQuCDRhNCw0LzQuNC70LjRjiAKCWdldHNfcyhGYW1pbHkpOyBmcHJpbnRmKGYsICIlc1xuIiwgRmFtaWx5KTsKCWdvdG94eSgxNiwgMik7Cgljb3V0IDw8ICJOYW1lIjsKCWdvdG94eSgxNiwgNCk7CgkvL2Npbi5nZXRsaW5lKE5hbWUsIDM1KTsgLy/QodGH0LjRgtCw0LvQuCDQuNC80Y8gCglnZXRzX3MoTmFtZSk7IGZwcmludGYoZiwgIiVzXG4iLCBOYW1lKTsKCglpbnQgazsKCWdvdG94eSgzMSwgMik7Cgljb3V0IDw8ICJTZXggRmVtYWxlL01hbGUiOy8v0JLRi9Cx0LjRgNCw0LXQvCDQv9C+0LsgIlNleCBjaG91c2UgMT1NYWxlICwyID1GZW1hbGUiCglnb3RveHkoMzEsIDQpOwoJLypjaW4gPj4gazsKCWlmIChrID09IDEpCgkJc3RyY3B5KFNleCwgIk1hbGUiKTsKCWVsc2UKCQlzdHJjcHkoU2V4LCAiRmVtYWxlIik7CiovCglnZXRzX3MoU2V4KTsgZnByaW50ZihmLCAiJXNcbiIsIFNleCk7Cglnb3RveHkoNTIsIDIpOwoJY291dCA8PCAiRGF0ZSBib3JuIjsgLy8g0LLQstC+0LTQuNC8INC00LDRgtGDINGA0L7QttC00LXQvdC40Y8g0YfQtdGA0LXQtyDQv9GA0L7QsdC10LsKCWdvdG94eSg1MiwgNCk7CgkvL2NpbiA+PiBEYXRlWzBdOyAvL9CU0LDRgtCwINCy0L3Rg9GC0YDQuCDRgdGC0YDRg9C60YLRg9GA0Ysg0Y/QstC70Y/QtdGC0YHRjyDQvNCw0YHRgdC40LLQvtC8LCDQv9C+0Y3RgtC+0LzRgyDQvtCx0YDQsNGJ0LXQvdC40LUg0YEg0LjQvdC00LXQutGB0L7QvCAKLy8JY2luLmlnbm9yZSgpOyAJY2luLmlnbm9yZSgpOwoJY2luID4+IERhdGVbMF07IGZwcmludGYoZiwgIiVkXG4iLCBEYXRlWzBdKTsKLy8JY2luID4+IERhdGVbMV07Cglnb3RveHkoNTUsIDQpOwoJY2luLmlnbm9yZSgpOyAKCWNpbiA+PiBEYXRlWzFdOyBmcHJpbnRmKGYsICIlZFxuIiwgRGF0ZVsxXSk7Cglnb3RveHkoNTgsIDQpOwoKCWNpbiA+PiBEYXRlWzJdOyBmcHJpbnRmKGYsICIlZFxuIiwgRGF0ZVsyXSk7CgljaW4uaWdub3JlKCk7CgoJZ290b3h5KDY1LCAyKTsKCWNvdXQgPDwgIkNpdHkiOwoJZ290b3h5KDY1LCA0KTsKCglnZXRzX3MoQ2l0eSk7IGZwcmludGYoZiwgIiVzXG4iLCBDaXR5KTsKCWNvdXQgPDwgIlxuXG4iOwoJY291dCA8PCAiPT09PT09PT09PT09PT09PT09PT09PVxuIjsKCn0KCnZvaWQgU3R1ZGVudDo6U2hvdygpIC8v0KTRg9C90LrRhtC40Y8g0L/QvtC60LDQt9GL0LLQsNC10YIg0LTQsNC90L3Ri9C1INGB0YLRgNGD0LrRgtGD0YDRiyDQvdCwINGN0LrRgNCw0L3QtSAKewoKCWNvdXQgPDwgIlN0dWRlbnQgXG4iOwoJZnByaW50ZihmLCAiJXNcbiIsIEZhbWlseSk7CglmcHJpbnRmKGYsICIlc1xuIiwgTmFtZSk7CglmcHJpbnRmKGYsICIlc1xuIiwgU2V4KTsKCWZwcmludGYoZiwgIiVkXG4iLCBEYXRlWzBdKTsKCWZwcmludGYoZiwgIiVkXG4iLCBEYXRlWzFdKTsKCWZwcmludGYoZiwgIiVkXG4iLCBEYXRlWzJdKTsKCWZwcmludGYoZiwgIiVzXG4iLCBDaXR5KTsKCWNvdXQgPDwgTmFtZSA8PCAiICIgPDwgRmFtaWx5IDw8ICJcbiIgPDwgIlNleDogIiA8PCBTZXggPDwgIlxuQm9ybiBpbiAiIDw8IERhdGVbMF0gPDwgIi4iIDw8IERhdGVbMV0gPDwgIi4iIDw8IERhdGVbMl0gPDwgIlxuIjsKCWNvdXQgPDwgIkluIHRoZSBjaXR5IHdoaWNoIGlzIGNhbGxlZCAiIDw8IENpdHkgPDwgIlxuXG4iOwoKCQoKfQoKdm9pZCBTdHVkZW50OjpZZWFyKGNvbnN0IGludCBEYXRlMSwgY29uc3QgaW50IERhdGUyKSAvL9CS0L3Rg9GC0YDQuCDRhNGD0L3QutGG0LjQuCDQvdC40YfQtdCz0L4g0LzQtdC90Y/RgtGMINC90LUg0L/Qu9Cw0L3QuNGA0YPQtdGC0YHRjywg0L/QvtGN0YLQvtC80YMg0LrQvtC90YHRgtCw0L3RgtGLIAp7CglpZiAoKERhdGVbMl0gPj0gRGF0ZTEpICYmIChEYXRlWzJdIDw9IERhdGUyKSkgU2hvdygpOyAvL9Cf0YDQvtCy0LXRgNC60LAg0L/RgNC40L3QsNC00LvQtdC20L3QvtGB0YLQuCDQtNC40LDQv9Cw0LfQvtC90YMg0Lgg0L/RgNC4INCy0YXQvtC20LTQtdC90LjQuCDQsiDQtNC40LDQv9Cw0LfQvtC9INCy0YvQstC+0LQg0Y3Qu9C10LzQtdC90YLQsCDRgdGC0YDRg9C60YLRg9GA0Ysg0L3QsCDRjdC60YDQsNC9IAp9OwoKCmludCAgcHJvbXB0X21lbnVfaXRlbSgpCnsKCS8vINCS0YvQsdGA0LDQvdC90YvQuSDQstCw0YDQuNCw0L3RgiDQvNC10L3RjgoJaW50IHZhcmlhbnQ7Cgljb3V0IDw8ICJDaG9vc2UgeW91IHZhcmlhbnRcbiIgPDwgZW5kbDsgCgljb3V0IDw8ICIxLiBNZW4gYm9ybiBpbiB0b3ducyDQndCVINCi0J7QntCe0J7QnlxuIiAgICAgIC8v0Y3RgtC+0YIg0L/Rg9C90LrRgiDQvdC1INC90YPQttC10L0g0Y8g0LXQs9C+INC/0L7RgtC+0Lwg0LTQvtC70LbQtdC9INGD0LHRgNCw0YLRjAoJCTw8ICIyLiBPbmx5IGdpcmxzXG4iICAgICAgICAgICAgICAgICAgIC8v0YLQvtC70YzQutC+INC00LXQstGD0YjQutC4CgkJPDwgIjMuIEFsbCBzdHVkZW50cyBib3JuIGluIHllYXJzXG4iICAgLy/RgdC/0LjRgdC+0Log0LLRgdC10YUg0YHRgtGD0LTQtdC90YLQvtCyINGA0L7QtNC40LLRiNC40YXRgdGPINCyINCz0L7QtNCw0YUg0YEg0LrQsNC60L7Qs9C+INGC0L4g0L/QviDQutCw0LrQvtC5INGC0L4sINCy0LLQvtC00LjQvCDRgSDQutC70LDQstGLCgkJPDwgIjQuIE1lbiBib3JuIGluIHRvd25zXG4iIDw8IGVuZGw7ICAgICAgICAgICAvLyDRgdC/0LjRgdC+0Log0Y7QvdC+0YjQtdC5INGA0L7QtNC40LLRiNC40YXRgdGPINCyINCz0L7RgNC+0LTQtSwg0LLQstC+0LTQuNC8INGBINC60LvQsNCy0YsKCWNvdXQgPDwgIj4+PiAiOwoJY2luID4+IHZhcmlhbnQ7IAoJcmV0dXJuIHZhcmlhbnQ7IAp9CgoKaW50IG1haW4oKQp7CgljaGFyIEdvcm9kWzIwXTsKCgoJaW50IE47IC8v0JrQvtC70LjRh9C10YHRgtCy0L4g0Y3Qu9C10LzQtdC90YLQvtCyINCyINGB0YLRgNGD0LrRgtGD0YDQtSAKCWNvdXQgPDwgIkVudGVyIGFtb3VudCBzdHVkZW50cyA9ICI7IGNpbiA+PiBOOyBjaW4uaWdub3JlKCk7CglTdHVkZW50KiBzdHVkZW50ID0gbmV3IFN0dWRlbnRbTl07IC8vCgljb3V0IDw8ICJFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdHVkZW50cyBpbiBFbmdsaXNoXG4iOwoKCWNvdXQgPDwgIkZpbGUgbmFtZT8gIjsKCWNoYXIgc1s1MF07CgljaW4uZ2V0bGluZShzLCA1MCk7CglmID0gZm9wZW4oInMudHh0IiwgImErIik7Cglmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgc3R1ZGVudFtpXS5JbnB1dCgpOyAvL9Ct0KLQniDQmCDQldCh0KLQrCDQl9CQ0J/QmNCh0Kwg0JIg0KTQkNCZ0Jsg0KEg0L/QvtC80L7RidGM0Y4g0YbQuNC60LvQsCDQt9Cw0L/QvtC70L3Rj9C10Lwg0YHRgtGA0YPQutGC0YPRgNGDLCDQstGL0LfRi9Cy0LDRjyDQvNC10YLQvtC0INGB0YLRgNGD0LrRgtGD0YDRiy4gCglmY2xvc2UoZik7CglzZXRsb2NhbGUoTENfQUxMLCAiUnVzIik7CgkKCXdoaWxlICh0cnVlKXsKCQlpbnQgdmFyaWFudCA9IHByb21wdF9tZW51X2l0ZW0oKTsKCQlzd2l0Y2ggKHZhcmlhbnQpIHsKCQljYXNlIDE6CgkJCWNvdXQgPDwgIlxuRW50ZXIgbmVlZCB0b3duOiI7CgkJCShjaW4gPj4gR29yb2QpLmdldCgpOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKCQkJCWlmIChzdHJjbXAoc3R1ZGVudFtpXS5TZXgsICJNYWxlIikgPT0gMCAmJiBzdHJjbXAoc3R1ZGVudFtpXS5DaXR5LCBHb3JvZCkgPT0gMCkKCQkJCXsKCQkJCQlzdHVkZW50W2ldLlNob3coKTsvLyDQv9C+0LrQsNC30YvQstCw0LXQvCDQstGB0LXRhSDQv9Cw0YbQsNC90L7QsiDRgSDRgNCw0LnQvtC90LAKCQkJCX0KCQkJc3lzdGVtKCJwYXVzZSIpOwoJCQlicmVhazsKCgkJY2FzZSAyOgoKCQkJY2hhciBmNFsyMF07CgkJCUZJTEUgKnoxOwoKCQkJY291dCA8PCAiXG7QktCy0LXQtNC40YLQtSDQuNC80Y8g0YTQsNC50LvQsCDQtNC70Y8g0YfRgtC10L3QuNGPOiAiOwoKCQkJLy9mc2NhbmYodiwgIiVkIiwgJm0pOyAKCQkJY2luID4+IGY0OwoKCQkJejEgPSBmb3BlbihmNCwgInIiKTsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCgkJCQlmc2NhbmYoejEsICIlcyVzJXMlZCVkJWQlcyIsICZzdHVkZW50W2ldLkZhbWlseSwgJnN0dWRlbnRbaV0uTmFtZSwgJnN0dWRlbnRbaV0uU2V4LCAmc3R1ZGVudFtpXS5EYXRlWzBdLCAmc3R1ZGVudFtpXS5EYXRlWzFdLCAmc3R1ZGVudFtpXS5EYXRlWzJdLCAmc3R1ZGVudFtpXS5DaXR5KTsKCQkJY291dCA8PCAiXG7Qp9GC0LXQvdC40LUg0LjQtyDRhNCw0LnQu9CwICIgPDwgZjQgPDwgIjpcbiI7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQoJCQkJY291dCA8PCBzdHVkZW50W2ldLkZhbWlseSA8PCAiICIgPDwgc3R1ZGVudFtpXS5OYW1lIDw8ICIgIiA8PCBzdHVkZW50W2ldLlNleCA8PCAiICIgPDwgc3R1ZGVudFtpXS5EYXRlWzBdIDw8ICIuIiA8PCBzdHVkZW50W2ldLkRhdGVbMV0gPDwgIi4iIDw8IHN0dWRlbnRbaV0uRGF0ZVsyXSA8PCAiICIgPDwgc3R1ZGVudFtpXS5DaXR5IDw8ICJcbiI7CgoJCQljb3V0IDw8ICJGaWxlIG5hbWU/ICI7CgkJCWNoYXIgZ2lybHNbNTBdOwoJCQljaW4uZ2V0bGluZShnaXJscywgNTApOwoJCQlmID0gZm9wZW4oImdpcmxzLnR4dCIsICJhKyIpOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKCQkJCWlmIChzdHJjbXAoc3R1ZGVudFtpXS5TZXgsICJGZW1hbGUiKSA9PSAwKQoJCQkJewoJCQkJCXN0dWRlbnRbaV0uU2hvdygpOwoJCQkJfQoJCQlmY2xvc2UoZik7IC8v0KEg0L/QvtC80L7RidGM0Y4g0YbQuNC60LvQsCDQv9C+0LrQsNC30YvQstCw0LXQvCDQstGB0LXRhSDQtNC10LLQvtGH0LXQui4KCQkJc3lzdGVtKCJwYXVzZSIpOwoJCQlicmVhazsKCgkJY2FzZSAzOgoJCQljaGFyIGYzWzIwXTsKCQkJRklMRSAqejsKCgkJCWNvdXQgPDwgIlxu0JLQstC10LTQuNGC0LUg0LjQvNGPINGE0LDQudC70LAg0LTQu9GPINGH0YLQtdC90LjRjzogIjsKCgkJCS8vZnNjYW5mKHYsICIlZCIsICZtKTsgCgkJCWNpbiA+PiBmMzsKCgkJCXogPSBmb3BlbihmMywgInIiKTsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCgkJCQlmc2NhbmYoeiwgIiVzJXMlcyVkJWQlZCVzIiwgJnN0dWRlbnRbaV0uRmFtaWx5LCAmc3R1ZGVudFtpXS5OYW1lLCAmc3R1ZGVudFtpXS5TZXgsICZzdHVkZW50W2ldLkRhdGVbMF0sICZzdHVkZW50W2ldLkRhdGVbMV0sICZzdHVkZW50W2ldLkRhdGVbMl0sICZzdHVkZW50W2ldLkNpdHkpOwoJCQljb3V0IDw8ICJcbtCn0YLQtdC90LjQtSDQuNC3INGE0LDQudC70LAgIiA8PCBmMyA8PCAiOlxuIjsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCgkJCQljb3V0IDw8IHN0dWRlbnRbaV0uRmFtaWx5IDw8ICIgIiA8PCBzdHVkZW50W2ldLk5hbWUgPDwgIiAiIDw8IHN0dWRlbnRbaV0uU2V4IDw8ICIgIiA8PCBzdHVkZW50W2ldLkRhdGVbMF0gPDwgIi4iIDw8IHN0dWRlbnRbaV0uRGF0ZVsxXSA8PCAiLiIgPDwgc3R1ZGVudFtpXS5EYXRlWzJdIDw8ICIgIiA8PCBzdHVkZW50W2ldLkNpdHkgPDwgIlxuIjsKCgoJCQljb3V0IDw8ICJGaWxlIG5hbWU/ICI7CgkJCWNoYXIgeWVhcnNbNTBdOwoJCQljaW4uZ2V0bGluZSh5ZWFycywgNTApOwoJCQlmID0gZm9wZW4oInllYXJzLnR4dCIsICJhKyIpOwoJCQlpbnQgbywgcDsKCQkJY291dCA8PCAiRW50ZXIgbmVlZCB5YWVyc1x0IjsKCQkJY2luID4+IG87IGNpbiA+PiBwOyAvLyDQstCy0L7QtCDQvdGD0LbQvdGL0YUg0LPQvtC00L7QsiAKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCgkJCXsKCQkJCXN0dWRlbnRbaV0uWWVhcihvLCBwKTsgLy/QktGL0LLQvtC00LjQvCDRgdGC0YPQtNC10L3RgtC+0LIsINC60L7RgtC+0YDRi9C1INGA0L7QtNC40LvQuNGB0Ywg0LIg0L3Rg9C20L3Ri9C1INCz0L7QtNCwIAoJCQkJY2luLmdldCgpOwoJCQl9CgkJCWZjbG9zZShmKTsKCQkJc3lzdGVtKCJwYXVzZSIpOwoJCQlicmVhazsKCgkJY2FzZSA0OiAvL9Cn0YLQtdC90LjQtSDQuNC3INGE0LDQudC70LAKCQkJY2hhciBmMlsyMF07CgkJCUZJTEUgKnY7CgoJCQljb3V0IDw8ICJcbtCS0LLQtdC00LjRgtC1INC40LzRjyDRhNCw0LnQu9CwINC00LvRjyDRh9GC0LXQvdC40Y86ICI7CgoJCQkvL2ZzY2FuZih2LCAiJWQiLCAmbSk7IAoJCQljaW4gPj4gZjI7CgoJCQl2ID0gZm9wZW4oZjIsICJyIik7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQoJCQkJZnNjYW5mKHYsICIlcyVzJXMlZCVkJWQlcyIsICZzdHVkZW50W2ldLkZhbWlseSwgJnN0dWRlbnRbaV0uTmFtZSwgJnN0dWRlbnRbaV0uU2V4LCAmc3R1ZGVudFtpXS5EYXRlWzBdLCAmc3R1ZGVudFtpXS5EYXRlWzFdLCAmc3R1ZGVudFtpXS5EYXRlWzJdLCAmc3R1ZGVudFtpXS5DaXR5KTsKCQkJY291dCA8PCAiXG7Qp9GC0LXQvdC40LUg0LjQtyDRhNCw0LnQu9CwICIgPDwgZjIgPDwgIjpcbiI7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQoJCQkJY291dCA8PCBzdHVkZW50W2ldLkZhbWlseSA8PCAiICIgPDwgc3R1ZGVudFtpXS5OYW1lIDw8ICIgIiA8PCBzdHVkZW50W2ldLlNleCA8PCAiICIgPDwgc3R1ZGVudFtpXS5EYXRlWzBdIDw8ICIuIiA8PCBzdHVkZW50W2ldLkRhdGVbMV0gPDwgIi4iIDw8IHN0dWRlbnRbaV0uRGF0ZVsyXSA8PCAiICIgPDwgc3R1ZGVudFtpXS5DaXR5IDw8ICJcbiI7CgoKCgkJCWNvdXQgPDwgIkZpbGUgbmFtZT8gIjsKCQkJY2hhciBzWzUwXTsKCQkJY2luLmdldGxpbmUocywgNTApOwoJCQlmID0gZm9wZW4oIm1lbi50eHQiLCAiYSsiKTsKCQkJY291dCA8PCAiXG5FbnRlciBuZWVkIHRvd246IjsKCQkJKGNpbiA+PiBHb3JvZCkuZ2V0KCk7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQoJCQkJaWYgKHN0cmNtcChzdHVkZW50W2ldLlNleCwgIk1hbGUiKSA9PSAwICYmIHN0cmNtcChzdHVkZW50W2ldLkNpdHksIEdvcm9kKSA9PSAwKQoJCQkJewoKCQkJCQlzdHVkZW50W2ldLlNob3coKTsgLy8g0L/QvtC60LDQt9GL0LLQsNC10Lwg0LLRgdC10YUg0L/QsNGG0LDQvdC+0LIg0YEg0YDQsNC50L7QvdCwCgkJCQl9CgkJCWZjbG9zZShmKTsKCQkJLy9zeXN0ZW0oInBhdXNlIik7CgoJCQlicmVhazsKCQl9Cgl9Cn0=