Browse Source

first commit

valera 6 tháng trước cách đây
commit
f52c46910c
21 tập tin đã thay đổi với 638 bổ sung0 xóa
  1. BIN
      au.jpg
  2. BIN
      b.jpg
  3. BIN
      bm.jpg
  4. BIN
      ca.jpg
  5. BIN
      img/1.png
  6. BIN
      img/2.png
  7. BIN
      img/3.png
  8. BIN
      img/4.png
  9. BIN
      img/5.png
  10. BIN
      img/6.png
  11. BIN
      img/7.png
  12. BIN
      ma.jpg
  13. 140 0
      main.py
  14. 155 0
      main2.py
  15. 93 0
      package.json
  16. 250 0
      readme.md
  17. BIN
      sil.jpg
  18. BIN
      sk.jpg
  19. BIN
      su.jpg
  20. BIN
      tr.jpg
  21. BIN
      tru.jpg

BIN
au.jpg


BIN
b.jpg


BIN
bm.jpg


BIN
ca.jpg


BIN
img/1.png


BIN
img/2.png


BIN
img/3.png


BIN
img/4.png


BIN
img/5.png


BIN
img/6.png


BIN
img/7.png


BIN
ma.jpg


+ 140 - 0
main.py

@@ -0,0 +1,140 @@
+from kivy.app import App
+from kivymd.app import MDApp # Импорт главного окна приложения
+from kivy.uix.boxlayout import BoxLayout # Импорт бокслояута для добавления в него виджетов
+from kivy.uix.spinner import Spinner # Импорт для выпадающего списка
+from kivymd.uix.datatables import MDDataTable # Импорт для таблицы
+from kivy.metrics import dp # Импорт для изменения размера
+from kivy.uix.scrollview import ScrollView # Импорт для прокрутки таблицы
+from kivymd.uix.textfield import MDTextField # Импорт для строки ввода
+from kivymd.uix.button import MDIconButton # Импорт для иконок кнопок
+from kivy.uix.image import Image # Импорт для изображения
+
+import json
+
+class SearchBoxLayout(BoxLayout):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+        self.orientation = 'vertical'
+        self.padding = [50, 0, 50, 50]
+
+        # Импорт фотографии
+        self.image = Image(
+            source='net.jpg',
+            size_hint_y=0.3
+        )
+        self.add_widget(self.image)
+
+        # Панель поиска и фильтрации
+        search_filter_bar = BoxLayout(size_hint_y=None, height=dp(40), spacing=10)
+        self.add_widget(search_filter_bar)
+
+        # Строка поиска
+        self.search_field = MDTextField(
+            hint_text="Search...",
+            size_hint_x=0.7
+        )
+        self.search_field.bind(text=self.filter_table)
+        search_filter_bar.add_widget(self.search_field)
+
+        # Кнопки фильтрации
+        self.asc_button = MDIconButton(icon="arrow-up-drop-circle")
+        self.asc_button.bind(on_release=self.sort_ascending)
+        search_filter_bar.add_widget(self.asc_button)
+
+        self.desc_button = MDIconButton(icon="arrow-down-drop-circle")
+        self.desc_button.bind(on_release=self.sort_descending)
+        search_filter_bar.add_widget(self.desc_button)
+
+        # Выпадающий список для выбора машины
+        self.spinner_car = Spinner(
+            text='Выберите машину',
+            values=('Toyota Trueno AE86', 'Toyota Supra A80', 'Nissan Skyline R34', 'Nissan Silvia S15', 'Toyota Camry 3.5', 'Audi RS 6', 'Трактор LOVOL TE354 HT', 'BMW M5 F90', 'BMW E36', 'Daewoo Matiz'),
+            size_hint=(None, None),
+            size=(dp(200), dp(44)),
+            pos_hint={'center_x': 0.5}
+        )
+        self.spinner_car.bind(text=self.filter_table_by_name)
+        search_filter_bar.add_widget(self.spinner_car)
+
+        # Выпадающий список для выбора ценового диапазона
+        self.spinner_price = Spinner(
+            text='Выберите цену',
+            values=('10000 - 20000', '21000 - 30000', '31000 - 70000'),
+            size_hint=(None, None),
+            size=(dp(200), dp(44)),
+            pos_hint={'center_x': 0.5}
+        )
+        self.spinner_price.bind(text=self.filter_table_by_price)
+        search_filter_bar.add_widget(self.spinner_price)
+
+        # Прокрутка для таблицы
+        self.scrollview = ScrollView(size_hint_y=0.7)
+        self.add_widget(self.scrollview)
+
+        # Создание таблицы
+        self.data_table = MDDataTable(
+            size_hint=(1, 1),
+            use_pagination=True,
+            rows_num=10,
+            column_data=[
+                ("Название", dp(30)),
+                ("Год", dp(15)),
+                ("Цена", dp(15)),
+                ("Цвет", dp(15)),
+                ("Повреждения", dp(25)),
+                ("Дата СТО", dp(30))
+            ],
+            # Инициализируем row_data пустым списком, данные будут загружены из JSON
+            row_data=[]
+        )
+        self.scrollview.add_widget(self.data_table)
+
+        # Загрузка данных из JSON файла
+        self.load_data_from_json('package.json')
+
+    def load_data_from_json(self, json_path):
+        # Загрузка данных из JSON файла и обновление таблицы
+        with open(json_path, 'r', encoding='utf-8') as json_file:
+            data = json.load(json_file)
+            # Предполагаем, что данные в JSON файле имеют формат списка словарей
+            row_data = [(d['Название'], d['Год'], d['Цена'], d['Цвет'], d['Повреждения'], d['Дата СТО']) for d in data]
+            self.data_table.row_data = row_data
+            self.original_row_data = row_data
+        self.original_row_data = self.data_table.row_data
+
+    def filter_table(self, instance, text):
+        # Фильтрация таблицы по поиску
+        filtered_data = []
+        for row in self.original_row_data:
+            if text.lower() in row[0].lower():
+                filtered_data.append(row)
+        self.data_table.row_data = filtered_data
+
+    def filter_table_by_name(self, spinner, text):
+        # Фильтрация таблицы по названию машины
+        if text != 'Выберите машину':
+            filtered_data = [row for row in self.original_row_data if row[0] == text]
+            self.data_table.row_data = filtered_data
+
+    def filter_table_by_price(self, spinner, text):
+        # Фильтрация таблицы по ценовому диапазону
+        if text != 'Выберите цену':
+            price_range = text.split(' - ')
+            min_price, max_price = int(price_range[0]), int(price_range[1])
+            filtered_data = [row for row in self.original_row_data if min_price <= int(row[2]) <= max_price]
+            self.data_table.row_data = filtered_data
+
+    def sort_ascending(self, instance):
+        # Сортировка таблицы по цене в порядке возрастания
+        self.data_table.row_data = sorted(self.original_row_data, key=lambda row: int(row[2]))
+
+    def sort_descending(self, instance):
+        # Сортировка таблицы по цене в порядке убывания
+        self.data_table.row_data = sorted(self.original_row_data, key=lambda row: int(row[2]), reverse=True)
+
+class MyApp(MDApp):
+    def build(self):
+        return SearchBoxLayout()
+
+if __name__ == '__main__':
+    MyApp().run()

+ 155 - 0
main2.py

@@ -0,0 +1,155 @@
+from kivy.app import App
+from kivymd.app import MDApp # Импорт главного окна приложения
+from kivy.uix.boxlayout import BoxLayout # Импорт бокслояута для добавления в него виджетов
+from kivy.uix.gridlayout import GridLayout # Импорт гридлояута для добавления элементов в виде сетки
+from kivy.uix.spinner import Spinner # Импорт для выпадающего списка
+from kivymd.uix.textfield import MDTextField # Импорт для таблицы
+from kivymd.uix.button import MDIconButton # Импорт для иконок кнопок
+from kivy.uix.image import Image # Импорт для изменения размера
+from kivy.uix.label import Label # Импорт Label для отображения текста
+from kivy.uix.scrollview import ScrollView # Импорт для прокрутки таблицы
+from kivy.metrics import dp # Импорт для изменения размера
+from kivy.utils import get_color_from_hex # Импорт для использования шестнадцатеричных цветовых кодов
+
+import json
+
+class CarItem(BoxLayout):
+    def __init__(self, car_data, **kwargs):
+        super().__init__(**kwargs)
+        self.orientation = 'horizontal'
+        self.size_hint_y = None
+        self.height = dp(100)
+        self.padding = [10, 10, 10, 10]
+
+        self.image = Image(
+            source=car_data.get('image'),
+            size_hint_x=0.3,
+            allow_stretch=True
+        )
+        self.add_widget(self.image)
+
+        info_layout = BoxLayout(orientation='vertical')
+        self.add_widget(info_layout)
+
+        self.name_label = Label(text=car_data['Название'], font_size=18, color=get_color_from_hex('#000000'))
+        info_layout.add_widget(self.name_label)
+
+        self.price_label = Label(text=f"{car_data['Цена']} руб.", font_size=16, color=get_color_from_hex('#000000'))
+        info_layout.add_widget(self.price_label)
+
+class SearchBoxLayout(BoxLayout):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+        self.orientation = 'vertical'
+        self.padding = [50, 0, 50, 50]
+
+        # Импорт фотографии
+        self.image = Image(
+            source='net.jpg',
+            size_hint_y=0.3
+        )
+        self.add_widget(self.image)
+
+        # Панель поиска и фильтрации
+        search_filter_bar = BoxLayout(size_hint_y=None, height=dp(40), spacing=10)
+        self.add_widget(search_filter_bar)
+
+        # Строка поиска
+        self.search_field = MDTextField(
+            hint_text="Search...",
+            size_hint_x=0.5
+        )
+        self.search_field.bind(text=self.filter_items)
+        search_filter_bar.add_widget(self.search_field)
+
+        # Кнопки фильтрации
+        self.asc_button = MDIconButton(icon="arrow-up-drop-circle")
+        self.asc_button.bind(on_release=self.sort_ascending)
+        search_filter_bar.add_widget(self.asc_button)
+
+        self.desc_button = MDIconButton(icon="arrow-down-drop-circle")
+        self.desc_button.bind(on_release=self.sort_descending)
+        search_filter_bar.add_widget(self.desc_button)
+
+        # Выпадающий список для выбора машины
+        self.spinner_car = Spinner(
+            text='Выберите машину',
+            values=[],
+            size_hint=(None, None),
+            size=(dp(200), dp(44))
+        )
+        self.spinner_car.bind(text=self.filter_items)
+        search_filter_bar.add_widget(self.spinner_car)
+        # Выпадающий список для выбора ценового диапазона
+        self.spinner_price = Spinner(
+            text='Выберите цену',
+            values=('10000 - 20000', '21000 - 30000', '31000 - 70000'),
+            size_hint=(None, None),
+            size=(dp(200), dp(44))
+        )
+        self.spinner_price.bind(text=self.filter_items)
+        search_filter_bar.add_widget(self.spinner_price)
+
+        # Прокрутка для таблицы
+        self.scrollview = ScrollView()
+        self.add_widget(self.scrollview)
+
+        # Сетчатая разметка для хранения элементов автомобиля
+        self.car_grid = GridLayout(cols=1, spacing=10, size_hint_y=None)
+        self.car_grid.bind(minimum_height=self.car_grid.setter('height'))
+        self.scrollview.add_widget(self.car_grid)
+
+        # Загрузка данных из JSON
+        self.car_data = self.load_data_from_json('package.json')
+        self.original_car_data = self.car_data.copy()
+        self.populate_car_grid()
+
+        self.spinner_car.values = list({car['Название'] for car in self.car_data})
+
+    def load_data_from_json(self, filename):
+        with open(filename, 'r', encoding='utf-8') as f:
+            data = json.load(f)
+        return data
+
+    def populate_car_grid(self):
+        # Заполнение сетки виджетов
+        self.car_grid.clear_widgets()
+        for car in self.car_data:
+            car_item = CarItem(car)
+            self.car_grid.add_widget(car_item)
+
+    def filter_items(self, instance, *args):
+        # Сортировка по названию и цене
+        filtered_data = self.original_car_data.copy()
+
+        search_text = self.search_field.text.lower()
+        filtered_data = [car for car in filtered_data if search_text in car['Название'].lower()]
+
+        selected_car = self.spinner_car.text
+        if selected_car != 'Выберите машину':
+            filtered_data = [car for car in filtered_data if car['Название'] == selected_car]
+
+        price_range = self.spinner_price.text
+        if price_range != 'Выберите цену':
+            min_price, max_price = map(int, price_range.split(' - '))
+            filtered_data = [car for car in filtered_data if min_price <= int(car['Цена']) <= max_price]
+
+        self.car_data = filtered_data
+        self.populate_car_grid()
+
+    def sort_ascending(self, instance):
+        # Сортировка таблицы по цене в порядке возрастания
+        self.car_data = sorted(self.car_data, key=lambda x: int(x['Цена']))
+        self.populate_car_grid()
+
+    def sort_descending(self, instance):
+        # Сортировка таблицы по цене в порядке убывания
+        self.car_data = sorted(self.car_data, key=lambda x: int(x['Цена']), reverse=True)
+        self.populate_car_grid()
+
+class MyApp(MDApp):
+    def build(self):
+        return SearchBoxLayout()
+
+if __name__ == '__main__':
+    MyApp().run()

+ 93 - 0
package.json

@@ -0,0 +1,93 @@
+[
+    {
+        "Название": "Toyota Trueno AE86",
+        "Год": 1995,
+        "Цена": 15000,
+        "Цвет": "white",
+        "Повреждения": "True",
+        "Дата СТО": "19/04/2024",
+        "image": "tru.jpg"
+    },
+    {
+        "Название": "Toyota Supra A80",
+        "Год": 1996,
+        "Цена": 30000,
+        "Цвет": "black",
+        "Повреждения": "False",
+        "Дата СТО": "09/02/2024",
+        "image": "su.jpg"
+    },
+    {
+        "Название": "Nissan Skyline R34",
+        "Год": 1996,
+        "Цена": 25000,
+        "Цвет": "orange",
+        "Повреждения": "False",
+        "Дата СТО": "10/07/2024",
+        "image": "sk.jpg"
+    },
+    {
+        "Название": "Nissan Silvia S15Nissan Silvia S15",
+        "Год": 1999,
+        "Цена": 20000,
+        "Цвет": "gray",
+        "Повреждения": "False",
+        "Дата СТО": "20/03/20244",
+        "image": "sil.jpg"
+    },
+    {
+        "Название": "Toyota Camry 3.5",
+        "Год": 2020,
+        "Цена": 20000,
+        "Цвет": "blue",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "ca.jpg"
+    },
+    {
+        "Название": "Audi RS 6",
+        "Год": 2016,
+        "Цена": 30000,
+        "Цвет": "lightblue",
+        "Повреждения": "True",
+        "Дата СТО": "10/07/2024",
+        "image": "au.jpg"
+    },
+    {
+        "Название": "Трактор LOVOL TE354 HT",
+        "Год": 2024,
+        "Цена": 66666,
+        "Цвет": "brown",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "tr.jpg"
+    },
+    {
+        "Название": "BMW M5 F90",
+        "Год": 2019,
+        "Цена": 30000,
+        "Цвет": "black",
+        "Повреждения": "True",
+        "Дата СТО": "20/03/20244",
+        "image": "b.jpg"
+    },
+    {
+        "Название": "BMW E36",
+        "Год": 2006,
+        "Цена": 35000,
+        "Цвет": "red",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "bm.jpg"
+    },
+    {
+        "Название": "Daewoo Matiz",
+        "Год": 2010,
+        "Цена": 20000,
+        "Цвет": "pink",
+        "Повреждения": "True",
+        "Дата СТО": "10/07/2024",
+        "image": "ma.jpg"
+    }
+]
+

+ 250 - 0
readme.md

@@ -0,0 +1,250 @@
+**["Задание на автомат"]()**
+***
+**Python (Kivy/KivyMD)**
+***
+**main.py**
+***
+```
+from kivy.app import App
+from kivymd.app import MDApp # Импорт главного окна приложения
+from kivy.uix.boxlayout import BoxLayout # Импорт бокслояута для добавления в него виджетов
+from kivy.uix.spinner import Spinner # Импорт для выпадающего списка
+from kivymd.uix.datatables import MDDataTable # Импорт для таблицы
+from kivy.metrics import dp # Импорт для изменения размера
+from kivy.uix.scrollview import ScrollView # Импорт для прокрутки таблицы
+from kivymd.uix.textfield import MDTextField # Импорт для строки ввода
+from kivymd.uix.button import MDIconButton # Импорт для иконок кнопок
+from kivy.uix.image import Image # Импорт для изображения
+
+import json
+
+class SearchBoxLayout(BoxLayout):
+    def __init__(self, **kwargs):
+        super().__init__(**kwargs)
+        self.orientation = 'vertical'
+        self.padding = [50, 0, 50, 50]
+
+        # Импорт фотографии
+        self.image = Image(
+            source='net.jpg',
+            size_hint_y=0.3
+        )
+        self.add_widget(self.image)
+
+        # Панель поиска и фильтрации
+        search_filter_bar = BoxLayout(size_hint_y=None, height=dp(40), spacing=10)
+        self.add_widget(search_filter_bar)
+
+        # Строка поиска
+        self.search_field = MDTextField(
+            hint_text="Search...",
+            size_hint_x=0.7
+        )
+        self.search_field.bind(text=self.filter_table)
+        search_filter_bar.add_widget(self.search_field)
+
+        # Кнопки фильтрации
+        self.asc_button = MDIconButton(icon="arrow-up-drop-circle")
+        self.asc_button.bind(on_release=self.sort_ascending)
+        search_filter_bar.add_widget(self.asc_button)
+
+        self.desc_button = MDIconButton(icon="arrow-down-drop-circle")
+        self.desc_button.bind(on_release=self.sort_descending)
+        search_filter_bar.add_widget(self.desc_button)
+
+        # Выпадающий список для выбора машины
+        self.spinner_car = Spinner(
+            text='Выберите машину',
+            values=('Toyota Trueno AE86', 'Toyota Supra A80', 'Nissan Skyline R34', 'Nissan Silvia S15', 'Toyota Camry 3.5', 'Audi RS 6', 'Трактор LOVOL TE354 HT', 'BMW M5 F90', 'BMW E36', 'Daewoo Matiz'),
+            size_hint=(None, None),
+            size=(dp(200), dp(44)),
+            pos_hint={'center_x': 0.5}
+        )
+        self.spinner_car.bind(text=self.filter_table_by_name)
+        search_filter_bar.add_widget(self.spinner_car)
+
+        # Выпадающий список для выбора ценового диапазона
+        self.spinner_price = Spinner(
+            text='Выберите цену',
+            values=('10000 - 20000', '21000 - 30000', '31000 - 70000'),
+            size_hint=(None, None),
+            size=(dp(200), dp(44)),
+            pos_hint={'center_x': 0.5}
+        )
+        self.spinner_price.bind(text=self.filter_table_by_price)
+        search_filter_bar.add_widget(self.spinner_price)
+
+        # Прокрутка для таблицы
+        self.scrollview = ScrollView(size_hint_y=0.7)
+        self.add_widget(self.scrollview)
+
+        # Создание таблицы
+        self.data_table = MDDataTable(
+            size_hint=(1, 1),
+            use_pagination=True,
+            rows_num=10,
+            column_data=[
+                ("Название", dp(30)),
+                ("Год", dp(15)),
+                ("Цена", dp(15)),
+                ("Цвет", dp(15)),
+                ("Повреждения", dp(25)),
+                ("Дата СТО", dp(30))
+            ],
+            # Инициализируем row_data пустым списком, данные будут загружены из JSON
+            row_data=[]
+        )
+        self.scrollview.add_widget(self.data_table)
+
+        # Загрузка данных из JSON файла
+        self.load_data_from_json('package.json')
+
+    def load_data_from_json(self, json_path):
+        # Загрузка данных из JSON файла и обновление таблицы
+        with open(json_path, 'r', encoding='utf-8') as json_file:
+            data = json.load(json_file)
+            # Предполагаем, что данные в JSON файле имеют формат списка словарей
+            row_data = [(d['Название'], d['Год'], d['Цена'], d['Цвет'], d['Повреждения'], d['Дата СТО']) for d in data]
+            self.data_table.row_data = row_data
+            self.original_row_data = row_data
+        self.original_row_data = self.data_table.row_data
+
+    def filter_table(self, instance, text):
+        # Фильтрация таблицы по поиску
+        filtered_data = []
+        for row in self.original_row_data:
+            if text.lower() in row[0].lower():
+                filtered_data.append(row)
+        self.data_table.row_data = filtered_data
+
+    def filter_table_by_name(self, spinner, text):
+        # Фильтрация таблицы по названию машины
+        if text != 'Выберите машину':
+            filtered_data = [row for row in self.original_row_data if row[0] == text]
+            self.data_table.row_data = filtered_data
+
+    def filter_table_by_price(self, spinner, text):
+        # Фильтрация таблицы по ценовому диапазону
+        if text != 'Выберите цену':
+            price_range = text.split(' - ')
+            min_price, max_price = int(price_range[0]), int(price_range[1])
+            filtered_data = [row for row in self.original_row_data if min_price <= int(row[2]) <= max_price]
+            self.data_table.row_data = filtered_data
+
+    def sort_ascending(self, instance):
+        # Сортировка таблицы по цене в порядке возрастания
+        self.data_table.row_data = sorted(self.original_row_data, key=lambda row: int(row[2]))
+
+    def sort_descending(self, instance):
+        # Сортировка таблицы по цене в порядке убывания
+        self.data_table.row_data = sorted(self.original_row_data, key=lambda row: int(row[2]), reverse=True)
+
+class MyApp(MDApp):
+    def build(self):
+        return SearchBoxLayout()
+
+if __name__ == '__main__':
+    MyApp().run()
+```
+***
+**json**
+***
+```
+[
+    {
+        "Название": "Toyota Trueno AE86",
+        "Год": 1995,
+        "Цена": 15000,
+        "Цвет": "white",
+        "Повреждения": "True",
+        "Дата СТО": "19/04/2024",
+        "image": "tru.jpg"
+    },
+    {
+        "Название": "Toyota Supra A80",
+        "Год": 1996,
+        "Цена": 30000,
+        "Цвет": "black",
+        "Повреждения": "False",
+        "Дата СТО": "09/02/2024",
+        "image": "su.jpg"
+    },
+    {
+        "Название": "Nissan Skyline R34",
+        "Год": 1996,
+        "Цена": 25000,
+        "Цвет": "orange",
+        "Повреждения": "False",
+        "Дата СТО": "10/07/2024",
+        "image": "sk.jpg"
+    },
+    {
+        "Название": "Nissan Silvia S15Nissan Silvia S15",
+        "Год": 1999,
+        "Цена": 20000,
+        "Цвет": "gray",
+        "Повреждения": "False",
+        "Дата СТО": "20/03/20244",
+        "image": "sil.jpg"
+    },
+    {
+        "Название": "Toyota Camry 3.5",
+        "Год": 2020,
+        "Цена": 20000,
+        "Цвет": "blue",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "ca.jpg"
+    },
+    {
+        "Название": "Audi RS 6",
+        "Год": 2016,
+        "Цена": 30000,
+        "Цвет": "lightblue",
+        "Повреждения": "True",
+        "Дата СТО": "10/07/2024",
+        "image": "au.jpg"
+    },
+    {
+        "Название": "Трактор LOVOL TE354 HT",
+        "Год": 2024,
+        "Цена": 66666,
+        "Цвет": "brown",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "tr.jpg"
+    },
+    {
+        "Название": "BMW M5 F90",
+        "Год": 2019,
+        "Цена": 30000,
+        "Цвет": "black",
+        "Повреждения": "True",
+        "Дата СТО": "20/03/20244",
+        "image": "b.jpg"
+    },
+    {
+        "Название": "BMW E36",
+        "Год": 2006,
+        "Цена": 35000,
+        "Цвет": "red",
+        "Повреждения": "False",
+        "Дата СТО": "19/04/2024",
+        "image": "bm.jpg"
+    },
+    {
+        "Название": "Daewoo Matiz",
+        "Год": 2010,
+        "Цена": 20000,
+        "Цвет": "pink",
+        "Повреждения": "True",
+        "Дата СТО": "10/07/2024",
+        "image": "ma.jpg"
+    }
+]
+```
+![](./img/1.png)
+![](./img/2.png)
+![](./img/3.png)
+![](./img/4.png)
+![](./img/5.png)

BIN
sil.jpg


BIN
sk.jpg


BIN
su.jpg


BIN
tr.jpg


BIN
tru.jpg