using System;
using System.Collections .Generic ;
using System.Linq ;
public class Car
{
public string Brand { get; set; }
public int ReleaseYear { get; set; }
public int Mileage { get; set; }
public int Price { get; set; }
public List< int> EmergencySituations { get; set; }
public int ReplacedPartsCount { get; set; }
public int EmergencyCount { get; set; }
public Car( string brand, int releaseYear, int mileage, int price, List< int> emergencySituations)
{
Brand = brand;
ReleaseYear = releaseYear;
Mileage = mileage;
Price = price;
EmergencySituations = emergencySituations;
ReplacedPartsCount = emergencySituations.Sum ( ) ;
EmergencyCount = emergencySituations.Count ;
}
public string GetDescription( )
{
return $"Автомобиль {ReleaseYear} года выпуска, марка {Brand}.\n " +
$"Пробег: {Mileage}.\n " +
$"Аварий: {EmergencyCount}, " +
$"из с ремонтом: {EmergencyCount - EmergencySituations.Count(x => x == 0)}.\n " +
$"Стоимость автомобиля составляет {Price}р.\n " ;
}
}
public class Program
{
private static List< Car> carList = new List< Car>
{
new Car( "Toyota Camry" , 2018 , 120000 , 1800000 , new List< int> { 0 , 1 , 2 } ) ,
new Car( "BMW 520i" , 2020 , 85000 , 3200000 , new List< int> { 3 , 0 } ) ,
new Car( "Hyundai Solaris" , 2015 , 180000 , 750000 , new List< int> { 0 , 0 , 1 } ) ,
new Car( "Volkswagen Polo" , 2019 , 95000 , 1200000 , new List< int> ( ) ) ,
new Car( "Audi A6" , 2021 , 60000 , 4500000 , new List< int> { 5 } ) ,
new Car( "Kia Rio" , 2017 , 140000 , 900000 , new List< int> { 1 , 1 , 0 , 2 } ) ,
new Car( "Mercedes-Benz C-Class" , 2022 , 40000 , 5500000 , new List< int> ( ) ) ,
new Car( "Lada Vesta" , 2020 , 70000 , 800000 , new List< int> { 0 } ) ,
new Car( "Renault Logan" , 2016 , 160000 , 650000 , new List< int> { 2 , 0 , 1 , 0 } ) ,
new Car( "Skoda Octavia" , 2018 , 110000 , 1500000 , new List< int> { 0 , 0 } ) ,
new Car( "Nissan Qashqai" , 2019 , 80000 , 1900000 , new List< int> { 4 , 1 , 0 } ) ,
new Car( "Ford Focus" , 2014 , 200000 , 600000 , new List< int> { 0 , 1 } ) ,
new Car( "Mazda 3" , 2017 , 130000 , 1100000 , new List< int> { 1 , 2 , 3 , 0 } ) ,
new Car( "Mitsubishi Outlander" , 2021 , 55000 , 2800000 , new List< int> ( ) ) ,
new Car( "Chevrolet Cruze" , 2013 , 190000 , 550000 , new List< int> { 1 , 0 } )
} ;
public static void Main( string[ ] args)
{
PrintMenu( ) ;
}
static void PrintMenu( )
{
while ( true )
{
Console.WriteLine ( @"
Выберите один из пунктов меню ниже и напишите его номер
╔═══════════════════════════════════════╗
║ Меню выбора автомобилей ║
╠═══════════════════════════════════════╣
║ 1 Самый дешевый автомобиль ║
║ 2 Самый новый автомобиль ║
║ 3 Автомобиль с меньшим кол-вом аварий ║
║ 4 С авариями без замен деталей ║
║ 5 Выход из программы ║
╚═══════════════════════════════════════╝
" ) ;
string number = Console.ReadLine ( ) ;
if ( ! int .TryParse ( number, out int choice) || ! new[ ] { 1 , 2 , 3 , 4 , 5 } .Contains ( choice) )
{
Console.WriteLine ( "Ожидалось целое число: 1, 2, 3, 4 или 5" ) ;
continue ;
}
switch ( choice)
{
case 1 :
List< Car> sortedAutoByPrice = carList.OrderBy ( car => car.Price ) .ToList ( ) ;
PrintCars( sortedAutoByPrice) ;
break ;
case 2 :
List< Car> sortedAutoByYear = carList.OrderByDescending ( car => car.ReleaseYear ) .ThenBy ( car => car.Mileage ) .ToList ( ) ;
PrintCars( sortedAutoByYear) ;
break ;
case 3 :
List< Car> sortedAutoByAccidents = carList.OrderBy ( car => car.EmergencyCount ) .ToList ( ) ;
PrintCars( sortedAutoByAccidents) ;
break ;
case 4 :
List< Car> sortedAutoWithAccidents = carList.Where ( car => car.EmergencyCount > 0 ) .OrderBy ( car => car.EmergencyCount ) .ToList ( ) ;
PrintCars( sortedAutoWithAccidents) ;
break ;
case 5 :
return ;
}
}
}
static void PrintCars( List< Car> cars)
{
int currentCarIndex = 0 ;
int maxCars = cars.Count ;
while ( true )
{
Car car = cars[ currentCarIndex] ;
Console.WriteLine ( "\n \n \n " ) ;
Console.WriteLine ( car.GetDescription ( ) ) ;
Console.WriteLine (
@"
Выберите один из пунктов меню ниже и напишите его номер
╔═══════════════════════════════════════╗
║ Обзор автомобилей по фильтру ║
╠═══════════════════════════════════════╣
║ 1 Вернуться в главное меню x ║
║ 2 Предыдущий автомобиль <-- ║
║ 3 Следующий автомобиль --> ║
╚═══════════════════════════════════════╝
"
) ;
string number = Console.ReadLine ( ) ;
if ( ! int .TryParse ( number, out int choice) || ! new[ ] { 1 , 2 , 3 } .Contains ( choice) )
{
Console.WriteLine ( "Ожидалось целое число: 1, 2 или 3" ) ;
continue ;
}
switch ( choice)
{
case 1 :
return ;
case 2 :
if ( currentCarIndex- 1 == - 1 )
{
Console.WriteLine ( "Вы долистали до начала списка." ) ;
}
else
{
currentCarIndex--;
}
break ;
case 3 :
if ( currentCarIndex+ 1 == maxCars)
{
Console.WriteLine ( "Вы долистали до конца списка." ) ;
}
else
{
currentCarIndex++;
}
break ;
}
//currentCarIndex = Math.Max(0, currentCarIndex);
//currentCarIndex = Math.Min(maxCars -1, currentCarIndex);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgQ2FyCnsKICAgIHB1YmxpYyBzdHJpbmcgQnJhbmQgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIGludCBSZWxlYXNlWWVhciB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgaW50IE1pbGVhZ2UgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIGludCBQcmljZSB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgTGlzdDxpbnQ+IEVtZXJnZW5jeVNpdHVhdGlvbnMgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIGludCBSZXBsYWNlZFBhcnRzQ291bnQgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIGludCBFbWVyZ2VuY3lDb3VudCB7IGdldDsgc2V0OyB9CgogICAgcHVibGljIENhcihzdHJpbmcgYnJhbmQsIGludCByZWxlYXNlWWVhciwgaW50IG1pbGVhZ2UsIGludCBwcmljZSwgTGlzdDxpbnQ+IGVtZXJnZW5jeVNpdHVhdGlvbnMpCiAgICB7CiAgICAgICAgQnJhbmQgPSBicmFuZDsKICAgICAgICBSZWxlYXNlWWVhciA9IHJlbGVhc2VZZWFyOwogICAgICAgIE1pbGVhZ2UgPSBtaWxlYWdlOwogICAgICAgIFByaWNlID0gcHJpY2U7CiAgICAgICAgRW1lcmdlbmN5U2l0dWF0aW9ucyA9IGVtZXJnZW5jeVNpdHVhdGlvbnM7CiAgICAgICAgUmVwbGFjZWRQYXJ0c0NvdW50ID0gZW1lcmdlbmN5U2l0dWF0aW9ucy5TdW0oKTsKICAgICAgICBFbWVyZ2VuY3lDb3VudCA9IGVtZXJnZW5jeVNpdHVhdGlvbnMuQ291bnQ7CiAgICB9CgogICAgcHVibGljIHN0cmluZyBHZXREZXNjcmlwdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICQi0JDQstGC0L7QvNC+0LHQuNC70Ywge1JlbGVhc2VZZWFyfSDQs9C+0LTQsCDQstGL0L/Rg9GB0LrQsCwg0LzQsNGA0LrQsCB7QnJhbmR9LlxuIiArCiAgICAgICAgICAgICAgICQi0J/RgNC+0LHQtdCzOiB7TWlsZWFnZX0uXG4iICsKICAgICAgICAgICAgICAgJCLQkNCy0LDRgNC40Lk6IHtFbWVyZ2VuY3lDb3VudH0sICIgKwogICAgICAgICAgICAgICAkItC40Lcg0YEg0YDQtdC80L7QvdGC0L7QvDoge0VtZXJnZW5jeUNvdW50IC0gRW1lcmdlbmN5U2l0dWF0aW9ucy5Db3VudCh4ID0+IHggPT0gMCl9LlxuIiArCiAgICAgICAgICAgICAgICQi0KHRgtC+0LjQvNC+0YHRgtGMINCw0LLRgtC+0LzQvtCx0LjQu9GPINGB0L7RgdGC0LDQstC70Y/QtdGCIHtQcmljZX3RgC5cbiI7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBQcm9ncmFtCnsKICAgIHByaXZhdGUgc3RhdGljIExpc3Q8Q2FyPiBjYXJMaXN0ID0gbmV3IExpc3Q8Q2FyPgogICAgewogICAgICAgIG5ldyBDYXIoIlRveW90YSBDYW1yeSIsIDIwMTgsIDEyMDAwMCwgMTgwMDAwMCwgbmV3IExpc3Q8aW50PiB7IDAsIDEsIDIgfSksCiAgICAgICAgbmV3IENhcigiQk1XIDUyMGkiLCAyMDIwLCA4NTAwMCwgMzIwMDAwMCwgbmV3IExpc3Q8aW50PiB7IDMsIDAgfSksCiAgICAgICAgbmV3IENhcigiSHl1bmRhaSBTb2xhcmlzIiwgMjAxNSwgMTgwMDAwLCA3NTAwMDAsIG5ldyBMaXN0PGludD4geyAwLCAwLCAxIH0pLAogICAgICAgIG5ldyBDYXIoIlZvbGtzd2FnZW4gUG9sbyIsIDIwMTksIDk1MDAwLCAxMjAwMDAwLCBuZXcgTGlzdDxpbnQ+KCkpLAogICAgICAgIG5ldyBDYXIoIkF1ZGkgQTYiLCAyMDIxLCA2MDAwMCwgNDUwMDAwMCwgbmV3IExpc3Q8aW50PiB7IDUgfSksCiAgICAgICAgbmV3IENhcigiS2lhIFJpbyIsIDIwMTcsIDE0MDAwMCwgOTAwMDAwLCBuZXcgTGlzdDxpbnQ+IHsgMSwgMSwgMCwgMiB9KSwKICAgICAgICBuZXcgQ2FyKCJNZXJjZWRlcy1CZW56IEMtQ2xhc3MiLCAyMDIyLCA0MDAwMCwgNTUwMDAwMCwgbmV3IExpc3Q8aW50PigpKSwKICAgICAgICBuZXcgQ2FyKCJMYWRhIFZlc3RhIiwgMjAyMCwgNzAwMDAsIDgwMDAwMCwgbmV3IExpc3Q8aW50PiB7IDAgfSksCiAgICAgICAgbmV3IENhcigiUmVuYXVsdCBMb2dhbiIsIDIwMTYsIDE2MDAwMCwgNjUwMDAwLCBuZXcgTGlzdDxpbnQ+IHsgMiwgMCwgMSwgMCB9KSwKICAgICAgICBuZXcgQ2FyKCJTa29kYSBPY3RhdmlhIiwgMjAxOCwgMTEwMDAwLCAxNTAwMDAwLCBuZXcgTGlzdDxpbnQ+IHsgMCwgMCB9KSwKICAgICAgICBuZXcgQ2FyKCJOaXNzYW4gUWFzaHFhaSIsIDIwMTksIDgwMDAwLCAxOTAwMDAwLCBuZXcgTGlzdDxpbnQ+IHsgNCwgMSwgMCB9KSwKICAgICAgICBuZXcgQ2FyKCJGb3JkIEZvY3VzIiwgMjAxNCwgMjAwMDAwLCA2MDAwMDAsIG5ldyBMaXN0PGludD4geyAwLCAxIH0pLAogICAgICAgIG5ldyBDYXIoIk1hemRhIDMiLCAyMDE3LCAxMzAwMDAsIDExMDAwMDAsIG5ldyBMaXN0PGludD4geyAxLCAyLCAzLCAwIH0pLAogICAgICAgIG5ldyBDYXIoIk1pdHN1YmlzaGkgT3V0bGFuZGVyIiwgMjAyMSwgNTUwMDAsIDI4MDAwMDAsIG5ldyBMaXN0PGludD4oKSksCiAgICAgICAgbmV3IENhcigiQ2hldnJvbGV0IENydXplIiwgMjAxMywgMTkwMDAwLCA1NTAwMDAsIG5ldyBMaXN0PGludD4geyAxLCAwIH0pCiAgICB9OwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgUHJpbnRNZW51KCk7CiAgICB9CgogICAgc3RhdGljIHZvaWQgUHJpbnRNZW51KCkKICAgIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKEAiCgrQktGL0LHQtdGA0LjRgtC1INC+0LTQuNC9INC40Lcg0L/Rg9C90LrRgtC+0LIg0LzQtdC90Y4g0L3QuNC20LUg0Lgg0L3QsNC/0LjRiNC40YLQtSDQtdCz0L4g0L3QvtC80LXRgAoK4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXCuKVkSAgICAgICAg0JzQtdC90Y4g0LLRi9Cx0L7RgNCwINCw0LLRgtC+0LzQvtCx0LjQu9C10LkgICAgICAgIOKVkQrilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMK4pWRIDEg0KHQsNC80YvQuSDQtNC10YjQtdCy0YvQuSDQsNCy0YLQvtC80L7QsdC40LvRjCAgICAgICAgICAgIOKVkQrilZEgMiDQodCw0LzRi9C5INC90L7QstGL0Lkg0LDQstGC0L7QvNC+0LHQuNC70YwgICAgICAgICAgICAgIOKVkQrilZEgMyDQkNCy0YLQvtC80L7QsdC40LvRjCDRgSDQvNC10L3RjNGI0LjQvCDQutC+0Lst0LLQvtC8INCw0LLQsNGA0LjQuSDilZEK4pWRIDQg0KEg0LDQstCw0YDQuNGP0LzQuCDQsdC10Lcg0LfQsNC80LXQvSDQtNC10YLQsNC70LXQuSAgICAgICAg4pWRCuKVkSA1INCS0YvRhdC+0LQg0LjQtyDQv9GA0L7Qs9GA0LDQvNC80YsgICAgICAgICAgICAgICAgICDilZEK4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdCiIpOwoKICAgICAgICAgICAgc3RyaW5nIG51bWJlciA9IENvbnNvbGUuUmVhZExpbmUoKTsKICAgICAgICAgICAgaWYgKCFpbnQuVHJ5UGFyc2UobnVtYmVyLCBvdXQgaW50IGNob2ljZSkgfHwgIW5ld1tdIHsgMSwgMiwgMywgNCwgNSB9LkNvbnRhaW5zKGNob2ljZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLQntC20LjQtNCw0LvQvtGB0Ywg0YbQtdC70L7QtSDRh9C40YHQu9C+OiAxLCAyLCAzLCA0INC40LvQuCA1Iik7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIHN3aXRjaCAoY2hvaWNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgTGlzdDxDYXI+IHNvcnRlZEF1dG9CeVByaWNlID0gY2FyTGlzdC5PcmRlckJ5KGNhciA9PiBjYXIuUHJpY2UpLlRvTGlzdCgpOwogICAgICAgICAgICAgICAgICAgIFByaW50Q2Fycyhzb3J0ZWRBdXRvQnlQcmljZSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgTGlzdDxDYXI+IHNvcnRlZEF1dG9CeVllYXIgPSBjYXJMaXN0Lk9yZGVyQnlEZXNjZW5kaW5nKGNhciA9PiBjYXIuUmVsZWFzZVllYXIpLlRoZW5CeShjYXIgPT4gY2FyLk1pbGVhZ2UpLlRvTGlzdCgpOwogICAgICAgICAgICAgICAgICAgIFByaW50Q2Fycyhzb3J0ZWRBdXRvQnlZZWFyKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBMaXN0PENhcj4gc29ydGVkQXV0b0J5QWNjaWRlbnRzID0gY2FyTGlzdC5PcmRlckJ5KGNhciA9PiBjYXIuRW1lcmdlbmN5Q291bnQpLlRvTGlzdCgpOwogICAgICAgICAgICAgICAgICAgIFByaW50Q2Fycyhzb3J0ZWRBdXRvQnlBY2NpZGVudHMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgTGlzdDxDYXI+IHNvcnRlZEF1dG9XaXRoQWNjaWRlbnRzID0gY2FyTGlzdC5XaGVyZShjYXIgPT4gY2FyLkVtZXJnZW5jeUNvdW50ID4gMCkuT3JkZXJCeShjYXIgPT4gY2FyLkVtZXJnZW5jeUNvdW50KS5Ub0xpc3QoKTsKICAgICAgICAgICAgICAgICAgICBQcmludENhcnMoc29ydGVkQXV0b1dpdGhBY2NpZGVudHMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgdm9pZCBQcmludENhcnMoTGlzdDxDYXI+IGNhcnMpCiAgICB7CiAgICAgICAgaW50IGN1cnJlbnRDYXJJbmRleCA9IDA7CiAgICAgICAgaW50IG1heENhcnMgPSBjYXJzLkNvdW50OwoKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENhciBjYXIgPSBjYXJzW2N1cnJlbnRDYXJJbmRleF07CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJcblxuXG4iKTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoY2FyLkdldERlc2NyaXB0aW9uKCkpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgKICAgICAgICAgICAgQCIK0JLRi9Cx0LXRgNC40YLQtSDQvtC00LjQvSDQuNC3INC/0YPQvdC60YLQvtCyINC80LXQvdGOINC90LjQttC1INC4INC90LDQv9C40YjQuNGC0LUg0LXQs9C+INC90L7QvNC10YAKCuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlwrilZEgICAgICDQntCx0LfQvtGAINCw0LLRgtC+0LzQvtCx0LjQu9C10Lkg0L/QviDRhNC40LvRjNGC0YDRgyAgICAg4pWRCuKVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVowrilZEgMSDQktC10YDQvdGD0YLRjNGB0Y8g0LIg0LPQu9Cw0LLQvdC+0LUg0LzQtdC90Y4gICAgICAgICB4ICDilZEK4pWRIDIg0J/RgNC10LTRi9C00YPRidC40Lkg0LDQstGC0L7QvNC+0LHQuNC70YwgICAgICAgICAgIDwtLSDilZEK4pWRIDMg0KHQu9C10LTRg9GO0YnQuNC5INCw0LLRgtC+0LzQvtCx0LjQu9GMICAgICAgICAgICAgLS0+IOKVkQrilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ0KIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgc3RyaW5nIG51bWJlciA9IENvbnNvbGUuUmVhZExpbmUoKTsKCiAgICAgICAgICAgIGlmICghaW50LlRyeVBhcnNlKG51bWJlciwgb3V0IGludCBjaG9pY2UpIHx8ICFuZXdbXSB7IDEsIDIsIDMgfS5Db250YWlucyhjaG9pY2UpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi0J7QttC40LTQsNC70L7RgdGMINGG0LXQu9C+0LUg0YfQuNGB0LvQvjogMSwgMiDQuNC70LggMyIpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICBzd2l0Y2ggKGNob2ljZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENhckluZGV4LTEgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi0JLRiyDQtNC+0LvQuNGB0YLQsNC70Lgg0LTQviDQvdCw0YfQsNC70LAg0YHQv9C40YHQutCwLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FySW5kZXgtLTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXJJbmRleCsxID09IG1heENhcnMpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgi0JLRiyDQtNC+0LvQuNGB0YLQsNC70Lgg0LTQviDQutC+0L3RhtCwINGB0L/QuNGB0LrQsC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhckluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgfQogICAgICAgICAgICAvL2N1cnJlbnRDYXJJbmRleCA9IE1hdGguTWF4KDAsIGN1cnJlbnRDYXJJbmRleCk7CiAgICAgICAgICAgIC8vY3VycmVudENhckluZGV4ID0gTWF0aC5NaW4obWF4Q2FycyAtMSwgY3VycmVudENhckluZGV4KTsKICAgICAgICB9CiAgICB9Cn0K