+ КОДЕРАМ +------------------ - - - - - - -
ТЕКСТОВАЯ АРИФМЕТИКА. Ч=З.
----------------------------
(С) ДЕНИС ТОКАРЧУК
ПО ПРАВУ, НАВЕРНОЕ, ПРИНАДЛЕЖИТ ГЛАВЕНСТВУЮЩЕЕ МЕСТО КОДИРОВКИ
ASCII (8ББ) В МИРЕ ТЕКСТОВ. ДА, ВЕДЬ ОНА ПРЕДОСТАВЛЯЕТ ОГРОМНЫЕ
ПРОСТОРЫ В ПЛАНЕ НАПИСАНИЯ ТЕКСТОВ. ЭТА СИСТЕМА ЗНАКОВ
ЭЛЕГАНТНА, УДОБНА, КРАСИВА. И ЭТО НИ СЛОВА ПОДXОЛИМСТВА, А ЛИШЬ
КОНСТАТАЦИЯ ФАКТА. Я ДУМАЮ ЭТА КОДИРОВКА НЕ ЗАНЯЛА БЫ ПЕРВОГО
МЕСТА, ЕСЛИ БЫ ОНА БЫЛА УБОГА И НЕУДОБНА. ОДНАКО И У НЕЕ ЕСТЬ
СВОИ ПРОБЛЕМЫ НЕСОВМЕСТИМОСТИ, ПОРОДИВШИЕСЯ, ВЕРОЯТНО, ПОЛИТИКОЙ
НЕКОТОРЫХ БОЛЬШИХ КОМПЬЮТЕРНЫХ КОМПАНИЙ. НУ ЛАДНО, Я ОТВЛЕКСЯ.
НО ТЕМ НЕ МЕНЕЕ, КАКАЯ БЫ ASCII НИ БЫЛА БЫ УНИВЕРСАЛЬНОЙ, НО
ЖРЕТ ЦЕННОЙ ПАМЯТИ ОНА НЕМЕРЯНО. ДА, КОНЕЧНО, IВМЩИКИ ЭТОГО НЕ
ЗАМЕЧАЮТ - У НИХ И ВИНТЫ РЕЗИНОВЫЕ, И ДИСКИ ПО 1.ЧЧ МЕГАБАЙТА, И
ОПЕРАТИВКИ - ДЕСЯТКИ, А ТО И СОТНИ МЕГАБАЙТ. ПО ДРУГОМУ СЕБЯ
ЧУВСТВУЕТ СПЕКТРУМ, В КОТОРОМ ЗА СТАНДАРТ ПРИНЯТО 128 КИЛОБАЙТ И
ДИСКИ ПО БЗБ КИЛО. КАК ТОЛЬКО НЕ ПРИДУМЫВАЛИ СОКРАЩАТЬ РАЗМЕРЫ
ТЕКСТОВ СПЕКТРУМОВСКИЕ ИЗДАТЕЛИ, ОДНАКО РЕАЛЬНО ЭФФЕКТИВНО
СЖИМАЮЩИХ АЛГОРИТМОВ И КОДИРОВОК РАЗРАБОТАНО НЕ БЫЛО. Я ИМЕЮ
ВВИДУ НЕ ТЕ КОМПРЕССОРА, КОТОРЫЕ ПРОСТО РАСЖИМАЮТ ПЕРЕД
'УПОТРЕБЛЕНИЕМ' ТЕКСТ В ПАМЯТЬ; А ИМЕННО АЛГОРИТМЫ, СПОСОБНЫЕ
БЕЗ КОМПРЕССИИ ЭКОНОМИТЬ ЦЕННЫЕ КИЛОБАЙТЫ.
КАК ВЫ, НАВЕРНОЕ, ЗАМЕТИЛИ - В НАШЕЙ ГАЗЕТЕ ВСЕ БУКВЫ
ЗАГЛАВНЫЕ. И ЭТО НЕ 'ЗАСКОК' РЕДАКТОРА, А НЕОБХОДИМОСТЬ,
ВЫЗВАННАЯ ЭКОНОМИЕЙ ПАМЯТИ. СОБСТВЕННО, ЗДЕСЬ ТЕКСТ И
ПРЕДСТАВЛЕН В КОДИРОВКЕ, РАЗРАБОТАННОЙ СПЕЦИАЛЬНО ДЛЯ ZX-TIME.
КОДИРОВКА НАЗЫВАЕТСЯ 'ZXT Б-BIT SYMBOLIC СОДЕS V.1' (ZXТБВSС1).
КАК ВИДНО ИЗ НАЗВАНИЯ, В ДАННОЙ КОДИРОВКЕ МАКСИМАЛЬНАЯ
РАЗРЯДНОСТЬ БУКВЫ - ШЕСТЬ БИТ. А ОТСЮДА СТАНОВИТСЯ ПОНЯТНЫМ
СЛЕДУЮЩЕЕ - В ТРИ БАЙТА ВПОЛНЕ МОЖНО ВМЕСТИТЬ Ч БУКВЫ. ВЫХОДИТ,
ЧТО ЭКОНОМИЯ СОСТАВЛЯЕТ 2S% ПО СРАВНЕНИЮ С ASCII ВНЕ ЗАВИСИМОСТИ
ОТ РАЗМЕРА И СОДЕРЖАНИЯ ТЕКСТА. ЕСТЕСТВЕННО, ПРИШЛОСЬ КОЕ-ЧЕМ
ПОЖЕРТВОВАТЬ. ХОТЯ 'КОЕ-ЧЕМ' - СКАЗАНО СЛАБО... ЭТО И ОТСУТСТВИЕ
СТРОЧНЫХ БУКВЫ И ТЕКСТОВОЙ ГРАФИКИ, И ОБЕДНЕНИЕ СИМВОЛЬНОГО
НАБОРА. ПОЭТОМУ ВЫ САМИ МОЖЕТЕ ДЛЯ СЕБЯ РЕШАТЬ - ЖЕРТВОВАТЬ ЛИ
ЭТИМИ БЛАГАМИ РАДИ ЭКОНОМИИ ПАМЯТИ...
ТАКЖЕ НЕОБХОДИМО РИСОВАТЬ СПЕЦИАЛЬНЫЙ ШРИФТ ПОД ЭТУ КОДИРОВКУ.
МЕНЕЕ БОЛЕЗНЕННО ШЕСТИБИТОВЫЙ ФОРМАТ ВОСПРИНИМАЕТСЯ ПРИ
ИСПОЛЬЗОВАНИИ ШРИФТА, ШИРИНОЙ Ч ТОЧКИ (БЧ СИМВОЛА В СТРОКЕ), КАК
ЭТО СДЕЛАНО У НАС. НА ДРУГИХ ШРИФТАХ ОЧЕНЬ ЗАМЕТНА СКУДНОСТЬ
СИМВОЛЬНОГО НАБОРА. :(
НО Я ПОВТОРЮСЬ - ТЕРЯЯ ЭТИ БЛАГА ЦИВИЛИЗАЦИИ МЫ ПРИОБРЕТАЕМ НА
СТОЛЬКО ДЛЯ НАС ЦЕННЫЕ КИЛОБАЙТЫ. НАПРИМЕР: В ZX-TIME ПОД ТЕКСТ
ОТВОДИТСЯ S СТРАНИЦ ПАМЯТИ (S*1БК=8ОК). ТО ЕСТЬ В ГАЗЕТУ
МАКСИМАЛЬНО МОЖЕТ ВЛЕЗТЬ : (8192О БАЙТ * 8 БИТ)/Б БИТ=1О922Б
ЗНАКОВ. ИТАК, В 8ОК МЫ ПОМЕСТИЛИ БОЛЕЕ 1ОБК. А БУДЬ У НАС ТЕКСТ
В ОБЫЧНОМ ASCII, ТО МЫ БЫ ЛОМАЛИ ГОЛОВУ, ДУМАЯ - А КАК БЫ ЭТИ 2Б
КИЛОБАЙТ ПОДГРУЗИТЬ... ХОТЯ, ВОЗМОЖНО, И 1ОБ КИЛОБАЙТ МОЖЕТ И НЕ
ХВАТИТЬ... НО ЭТО УЖЕ ДРУГАЯ ИСТОРИЯ.
ОТ ТЕОРИИ ПЕРЕХОЖУ К... СЛЕДУЮЩЕЙ ТЕОРИИ :). ТЕПЕРЬ Я РАССКАЖУ
КАКИМ ОБРАЗОМ Я УМУДРИЛСЯ В ШЕСТЬ БИТ (БЗ ЗНАКА) ЗАСУНУТЬ
ЗАГЛАВНЫЕ БУКВЫ РУССКОГО И АНГЛИЙСКОГО АЛФАВИТА, ЦИФРЫ, ЗНАКИ И
ОДИН ЕДИНСТВЕННЫЙ УПРАВЛЯЮЩИЙ КОД (ПЕРЕВОД СТРОКИ). ЭТО БЫЛО
ДОВОЛЬНО МУЧИТЕЛЬНО, ТАК КАК ЛИКВИДАЦИЯ ОЧЕРЕДНОГО ЗНАКА
ПЕРЕНОСИЛАСЬ БОЛЕЗНЕННО И ВСЯ ЗАТЕЯ ПОДДАВАЛСЬ СОМНЕНИЮ - 'А НА
ФИГ ВСЕ ЭТО НУЖНО!?!'. ОДНАКО, СКОЛЬКО Я НЕ ЗАКИДЫВАЛ ВСЮ ЭТУ
РАБОТУ В ДОЛГИЙ ЯЩИК, ВСЕ-ТАКИ ДОВЕЛ ДЕЛО ДО КОНЦА.
КАК ИЗВЕСТНО, В РУССКОМ АЛФАВИТЕ ЗЗ БУКВЫ, В АНГЛИЙСКОМ
(ЛАТИНСКОМ) АЛФАВИТЕ ИХ 2Б, ЦИФР ДОЛЖНО БЫТЬ 1О, А ЗНАКОВ КАК
МИНИМУМ 17 ПЛЮС ПРОБЕЛ И 'ЕПТЕГ'. ЗЗ+2Б+1О+17+1+1=88 ЗНАКОВ. НО
МОЖНО СЭКОНОМИТЬ, ЕСЛИ НЕКОТОРЫЕ РУССКИЕ БУКВЫ 'ПОДМЕНЯТЬ'
АНГЛИЙСКИМИ, СХОЖИЕ ПО ИЗОБРАЖЕНИЮ ЦИФРЫ ТАКЖЕ ПРЕДОСТАВЛЯТЬ В
РАСПОРЯЖЕНИЕ КАКОГО-ЛИБО АЛФАВИТА (НАПРИМЕР, СИМВОЛ 'О' - ОН У
НАС И НОЛЬ, И АНГЛИЙСКАЯ БУКВА О, И РУССКАЯ БУКВА О). ТАК И
СЭКОНОМИЛИ НА БУКВАХ.
ТЕПЕРЬ ТАБЛИЦА,КОТОРАЯ И ПРОДЕМОНСТРИРУЕТ ВАМ СПИСОК КОДОВ:
+------------+------------+------------+------------+
+ ЗНАК ' КОД + ЗНАК ' КОД + ЗНАК ' КОД + ЗНАК ' КОД +
+------------+------------+------------+------------+
+ А ' #ОО + Q ' #1О + 8 ' #2О + / ' #ЗО +
+ В ' #О1 + Г ' #11 + 9 ' #21 + = ' #З1 +
+ С ' #О2 + S ' #12 + Ж ' #22 + ! ' #З2 +
+ Д ' #ОЗ + Т ' #1З + Й ' #2З + . ' #ЗЗ +
+ Е ' #ОЧ + И ' #1Ч + Л ' #2Ч + , ' #ЗЧ +
+ F ' #OS + V ' #1S + Ф ' #2S + ; ' #ЗS +
+ G ' #ОБ + Ш ' #1Б + Ц ' #2Б + : ' #ЗБ +
+ Н ' #О7 + X ' #17 + Щ ' #27 + ' ' #З7 +
+ I ' #О8 + У ' #18 + Ь ' #28 + $ ' #З8 +
+ J ' #О9 + Z ' #19 + Ы ' #29 + % ' #З9 +
+ К ' #ОА + 1 ' #1А + Э ' #2А + ( ' #ЗА +
+ L ' #ОВ + 2 ' #1В + Ю ' #2В + ) ' #ЗВ +
+ М ' #ОС + З ' #1С + Я ' #2С + ? ' #ЗС +
+ П ' #ОД + Ч ' #1Д + + ' #2Д + # ' #ЗД +
+ О ' #ОЕ + Б ' #1Е + - ' #2Е +ПРОБЕЛ' #ЗЕ +
+ Р ' #OF + 7 ' #1F + * ' #2F + ЕПТЕГ' #ЗF +
+------------+------------+------------+------------+
НУ А ТЕПЕРЬ НЕСЛОЖНО ДОГАДАТЬСЯ ЧТО-ГДЕ-КОГО ЗАМЕНЯЕТ...
ТЕПЕРЬ ПОГОВОРИМ О ТОМ, КАК ТЕКСТ ПЕРЕВЕСТИ В ФОРМАТ ZXТБВSС1.
ДАВАЙТЕ ПОСМОТРИМ НА БИНАРНЫЙ ВИД 'МАСКИ' СИМВОЛА ШЕСТИБИТОВОГО
ФОРМАТА:
%ОО111111
НО ЗДЕСЬ ОН ПРЕДСТАВЛЕН В ЦЕЛОМ БАЙТЕ, ГДЕ ПЕРВЫЕ ДВА БИТА
НЕ ИСПОЛЬЗУЮТСЯ. СОБСТВЕННО, И ТОЛКУ НЕ БЫЛО БЫ ЗАВАРИВАТЬ ВСЮ
КАШУ, ЕСЛИ БЫ НИ ЭТИ ДВА БИТА. КАК ОТМЕЧАЛОСЬ ВЫШЕ, В ТРИ БАЙТА
ВЛАЗИТ ЧЕТЫРЕ ЗНАКА, А ЭТО ОЗНАЧАЕТ, ЧТО МЫ БУДЕМ УМУДРЯТЬСЯ И
ЧЕГО-БЫ НАМ ЭТО НИ СТОИЛО, ЗАСОВЫВАТЬ ШЕСТИБИТОВЫЕ СИМВОЛЫ В
КРАСИВУЮ НЕПРЕРЫВНУЮ ЦЕПОЧКУ БИТОВ. ТО ЕСТЬ, БУДЕМ БЕСПОЩАДНО
РАЗРЫВАТЬ ШЕСТИБИТОВЫЕ СИМВОЛЫ И РАССОВЫВАТЬ СЭКОНОМЛЕННЫЕ КУСКИ
ПО ОСТАВШИМСЯ ДВУМ БИТАМ КАЖДОГО БАЙТА. ПРИМЕРНО ВОТ ТАК:
Б БИТ Б БИТ Б БИТ Б БИТ
------ ------- ------- ------
О11ОО1 О1 О111 1О11 1О О1ОО11
--------- --------- ---------
1 БАЙТ 1 БАЙТ 1 БАЙТ
ТАМ НАПИСАННО 'ZX-Т' (ЧЕТЫРЕ ЗНАКА). МОЖЕТЕ ПОСЧИТАТЬ - БАЙТОВ
ЭТО ЗАНЯЛО ВСЕГО-ТО ТРИ.. ТАКИМ ОБРАЗОМ МЫ ПЛАВНЕНЬКО ПЕРЕШЛИ К
ПРАКТИКЕ...
КАК ЖЕ РАЗРЫВАТЬ СИМВОЛ И РАЗМЕЩАТЬ ПО ОСТАВШИМСЯ ДВУМ БИТАМ
КАЖДОГО БАЙТА КУСКИ ИНФОРМАЦИИ СИМВОЛОВ, ПРИЧЕМ ДЕЛАТЬ ВСЕ ЭТО
БАЙТ-ЗА-БАЙТОМ, СИМВОЛ-ЗА-СИМВОЛОМ? (ОПЫТНЫЕ ПРОГРАММИСТЫ МОГУТ
ДАЛЬШЕ НЕ ЧИТАТЬ, А ОСТАВИТЬ ПИЩУ СВОИМ ИЗОЩРЕННЫМ УМАМ ДЛЯ
СОБСТВЕННОРУЧНОГО ВОПЛОЩЕНИЯ ИДЕИ В АССЕМБЛЕРНЫЙ ТЕКСТ).
КАК, НАВЕРНОЕ, МНОГИЕ ДОГАДАЛИСЬ, ЭТО ДОСТИГАЕТСЯ СДВИГАМИ
ПЛЮС ПАРОЙ ЛОГИЧЕСКИХ КОМАНД (АПД И ОГ). НО ДЛЯ НАЧАЛА НАДО САМ
КОД СИМВОЛА ПЕРЕКОНВЕРТИРОВАТЬ В ЕГО ЭКВИВАЛЕНТ ИЗ ТАБЛИЦЫ,
КОТОРАЯ ПРИВЕДЕНА ВЫШЕ. А ЗАТЕМ НЕОБХОДИМО СОВМЕЩАТЬ
ШЕСТИБИТОВЫЕ БАЙТИКИ В НЕПРЕРЫВНУЮ ЦЕПОЧКУ, КАК БУДТО У НАС
БАЙТЫ НЕ ВОСЬМИБИТОВЫЕ, А ШЕСТИБИТОВЫЕ.
НА ПЕРВЫЙ ВЗГЛЯД ЭТО СДЕЛАТЬ АРХИСЛОЖНО, НО КОГДА ЗАДАЧУ
РАЗЛАЖИВАЕШЬ ПО 'ПОЛОЧКАМ', ВСЕ СТАНОВИТСЯ ОЧЕНЬ ПРОСТО.
(КСТАТИ, ЛЮБАЯ ЗАДАЧА, ПОСТАВЛЕННАЯ ПЕРЕД ПРОГРАММИСТОМ,
РАЗБИВАЕТСЯ НА МАЛЕНЬКИЕ ПРОСТЕНЬКИЕ ЗАДАЧКИ... - НО ЭТО ТАК, К
СЛОВУ). ПРЕДПОЛОЖИМ, ТЕКСТ У НАС РАСПОЛОЖЕН ПО АДРЕСУ TXT...
ВОТ АЛГОРИТМ КОНВЕРТОРА (РАЗВЕРНУТЫЙ):
...
!
+----------------------------+
' БЕРЕМ БАЙТ (СИМВОЛ) ИЗ TXT '
+----------------------------+
!
+---------------------------------+
' ПЕРЕВОДИМ ЕГО В КОД ПО ТАБЛИЧКЕ '
+---------------------------------+
!
+----------------------------------------------------+
' СДВИГАЕМ ПОЛУЧЕННЫЙ КОД ДВА РАЗА ВЛЕВО (ГLСА+ГLСА) '
+----------------------------------------------------+
!
+-----------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT '
+-----------------------------+
!
+---------------------+
' БЕРЕМ БАЙТ ИЗ TXT+1 '
+---------------------+
!
+---------------------------------+
' ПЕРЕВОДИМ ЕГО В КОД ПО ТАБЛИЧКЕ '
+---------------------------------+
!
+--------------------------------------------+
' СДВИГАЕМ ПОЛУЧЕННЫЙ КОД ЧЕТЫРЕ РАЗА ВПРАВО '
' (ГГСА+ГГСА+ГГСА+ГГСА) '
+--------------------------------------------+
!
+--------------------------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В ПРОМЕЖУТОЧНЫЙ БУФЕР (ИЛИ '
' РЕГИСТР) '
+--------------------------------------------------+
!
+--------------------------------------------------+
' ДЕЛАЕМ АПД %ОООООО11 ДЛЯ 'ОТСЕИВАНИЯ' НЕНУЖНОГО '
+--------------------------------------------------+
!
+----------------------------------------------------+
' ЗАТЕМ ПРОИЗВОДИМ СОВМЕЩЕНИЕ (ПО ОГ) С КОДОМ ИЗ TXT '
+----------------------------------------------------+
!
+-----------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT '
+-----------------------------+
!
+----------------------------------------------+
' ИЗЫМАЕМ ИЗ ПРОМ.БУФЕРА (ИЛИ ИЗ РЕГИСТРА) КОД '
+----------------------------------------------+
!
+-------------------------------------------------+
' ДЕЛАЕМ АПД %1111ОООО ДЛЯ 'ОТСЕИВАНИЯ НЕНУЖНОГО' '
+-------------------------------------------------+
!
+-------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT+1 '
+-------------------------------+
!
+---------------------+
' БЕРЕМ БАЙТ ИЗ TXT+2 '
+---------------------+
!
+---------------------------------+
' ПЕРЕВОДИМ ЕГО В КОД ПО ТАБЛИЧКЕ '
+---------------------------------+
!
+-----------------------------------------+
' СДВИГАЕМ ПОЛУЧЕННЫЙ КОД ДВА РАЗА ВПРАВО '
' (ГГСА+ГГСА) '
+-----------------------------------------+
!
+--------------------------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В ПРОМЕЖУТОЧНЫЙ БУФЕР (ИЛИ '
' РЕГИСТР) '
+--------------------------------------------------+
!
+--------------------------------------------------+
' ДЕЛАЕМ АПД %ОООО1111 ДЛЯ 'ОТСЕИВАНИЯ НЕНУЖНОГО' '
+--------------------------------------------------+
!
+------------------------------------------------------+
' ЗАТЕМ ПРОИЗВОДИМ СОВМЕЩЕНИЕ (ПО ОГ) С КОДОМ ИЗ TXT+1 '
+------------------------------------------------------+
!
+-------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT+1 '
+-------------------------------+
!
+-------------------------------------------+
' ИЗЫМАЕМ ИЗ ПРОМ.БУФЕРА (ИЛИ РЕГИСТРА) КОД '
+-------------------------------------------+
!
+-------------------------------------------------+
' ДЕЛАЕМ АПД %11ОООООО ДЛЯ 'ОТСЕИВАНИЯ НЕНУЖНОГО' '
+-------------------------------------------------+
!
+-------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT+2 '
+-------------------------------+
!
+---------------------+
' БЕРЕМ БАЙТ ИЗ TXT+З '
+---------------------+
!
+---------------------------------+
' ПЕРЕВОДИМ ЕГО В КОД ПО ТАБЛИЧКЕ '
+---------------------------------+
!
+-----------------------------------------------+
' СОВМЕЩАЕМ (ПО ОГ) ПОЛУЧЕННОЕ С КОДОМ ИЗ TXT+2 '
+-----------------------------------------------+
!
+-------------------------------+
' ЗАПИСЫВАЕМ ПОЛУЧЕННОЕ В TXT+2 '
+-------------------------------+
!
...
ВОТ, СОБСТВЕННО, И РАЗЛОЖИЛИ 'ПО ПОЛОЧКАМ'. НАДЕЮСЬ, ТЕПЕРЬ
ВАМ СТАНЕТ ВСЕ ПОНЯТНО. А ДЛЯ ЕЩЕ БОЛЬШЕЙ НАГЛЯДНОСТИ, ПРИЛАГАЮ
К ЭТОМУ ВЫПУСКУ ГАЗЕТЫ ИСХОДНИК КОНВЕРТОРА В ALASM'Е. ТАМ ТОЖЕ
ЕСТЬ КОММЕНТАРИИ.
А ОБ'ЯСНЯТЬ ВЫВОДИЛКУ (ТАК СКАЗАТЬ, 'РАСКОНВЕРТИЛКУ') Я НЕ
БУДУ. ОНА АНАЛОГИЧНА КОНВЕРТИЛКЕ - ТОЛЬКО ТЕПЕРЬ НАДО ВСЕ ДЕЛАТЬ
НАОБОРОТ: ЗНАКИ 'ВОССТАНАВЛИВАТЬ'. НУ А ЕСЛИ ВЫ НЕ СМОГЛИ
СДЕЛАТЬ ВЫВОДИЛКУ, ТО НАПИШИТЕ ПИСЬМО В АДРЕС РЕДАКЦИИ - И Я
РАЗМЕЩУ В СЛЕДУЮЩИХ НОМЕРАХ ГАЗЕТЫ ВЫВОДИЛКУ И, ЕСЛИ ЗАХОТИТЕ,
ТАКЖЕ КАК И СЕГОДНЯ 'РАЗЖУЮ' ПРИНЦИП ЕЕ РАБОТЫ. ХОТЯ НЕ
ПРЕДСТАВЛЯЮ КАКИЕ ТРУДНОСТИ МОГУТ ВОЗНИКНУТЬ..
Other articles: