Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323

Открыть новую тему     Написать ответ в эту тему

V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
         
Обсуждаем новые возможности и баги
 
Просьба писать про Embarcadero RAD Studio XE5, XE6, XE7, XE8, 10.x (Seattle, Berlin,Tokyo)
  По вопросам скачивания - Тема в Варезнике (lite-версии тут)
  Вопросы по неюникодным версиям Delphi — шестая бумага
  Бесплатные Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus
  Коммерческие компоненты и утилиты для Delphi/BCB
  Вопросы по компонентам для Delphi, C++ Builder разных версий
  Новые языковые возможности, начиная с Delphi 2005 по XE4 — здесь, и New!здесь еще
  Англоязычный официальный форум Embarcadero — здесь
  Embarcadero Quality Central, веб интерфейс — здесь, новый Quality Portal тут
  Программирование на Delphi — викиверситет
  Другие ресурсы
   Предыдущие бумаги
 
     Вопросы ..XE4       Вопросы ..XE3    Вопросы ..XE2      
  Вопросы ..2009-XE    Вопросы ..<2009 / ч.5    Вопросы ..<2009 / ч.4      
  Вопросы ..<2009 / ч.3    Вопросы ..Delphi 2 / ч.2    Вопросы ..Delphi  

  Выключение встроенного эксперта Castalia  для XE8 (иногда помогает при вылетах и тормозах)  
  Полезные плагины(эксперты)

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:25 11-09-2013 | Исправлено: Komandor, 15:49 31-03-2024
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Офсайт умер, это да, а вот напрямую с Торри нормально скачалось.

да.. ошибся.
--н
неплохо бы нам тут шапку, раз уж мы застряли с этой ветке надолго

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 15:05 15-06-2014 | Исправлено: AlekXL, 00:02 23-06-2014
ego666

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
пожалуйста, додавите япошку:
http://qc.embarcadero.com/wc/qcmain.aspx?d=125396

Походу то, что хочет Александр - на этапе компиляции не получить, т.к. даже для тех же абстрактных методов, если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError, а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет. Остается только динамический каст.
 
Добавлено:
И вообще вся эта идея в духе приведения интерфейсов к объектам. Да и как то противоречит самим интерфейсам, у которых не должно быть данных (и не просто так).

Всего записей: 77 | Зарегистр. 14-06-2013 | Отправлено: 13:35 17-06-2014
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ego666

Цитата:
Походу то, что хочет Александр - на этапе компиляции не получить,

Не получить совсем, ибо интерфейс надо чем-то "удерживать" ... TObject as IObject - это же ведь не какое-то приведение типов в конце то концов! Ссылкой на метод экземпляра точно не удержать. Забавная хотелка у кого-то.
 
З.Ы. и пофиг, что там анонимка!

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 17:41 17-06-2014 | Исправлено: Eternal_Shield, 17:43 17-06-2014
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield
Под капотом у анонимного метода обьект с интерфейсом.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:12 17-06-2014
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins

Цитата:
Под капотом у анонимного метода обьект с интерфейсом.

Это я в курсе Я не понимаю одного: зачем народ себе геморрой придумывает

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 23:07 17-06-2014
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ego666
 

Цитата:
Не получить совсем, ибо интерфейс надо чем-то "удерживать" ... TObject as IObject - это же ведь не какое-то приведение типов в конце то концов! Ссылкой на метод экземпляра точно не удержать. Забавная хотелка у кого-то.  

о чем ты говоришь? Какой IObject ? Там есть все для вызова. Экзепляр, и указатель. Больше ничего не нужно.
 
Eternal_Shield

Цитата:
Походу то, что хочет Александр - на этапе компиляции не получить, т.к. даже для тех же абстрактных методов, если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError, а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет. Остается только динамический каст.
 

ерунда.  
имея экземпляр, и указатель, вызов совершить тривиально. Нет никакой принципиально разницы между указателем на вирт метод, и методом интерфейса. Они суть одно и то же. Если аноним может указывать на вирт метод, то должен уметь и указывать на интерфейс.
 
 Даже проще, потому что можно гарантировать инкрементом счетчика ссылок актуальность экзепляра, до вызова.
 

Цитата:
абстрактных методов,  если они не реализованы, компилятор вместо прямого вызова скрыто генерирует вызов метода _AbstractError
не говори ерунды. Виртуальные вызовы в Delphi всегда выполняются виртуально. Другое дело, что для абстрактного метода генерируется заглушка, перенаправляющая на AbstractError. Доходит, в чем разница? Не вызов генерируется, а заглушка абстрактного метода. А вызов любого вирт метода всегда выглядит одинаково.
 

Цитата:
а в случае интерфейса - у нас нет на этапе компиляции информации о реализующем его классе и позднее связывание не сделать, т.к. нельзя компилятору что-нибудь магически догенерировать к чужому реализующему классу, которого к тому же и нет.  
зачем что-то догенерировать? Аноним - это всегда "внешняя обертка", а не указатель. Всегда для нее генрируется экземпляр класса, и в это классе есть машинный код для процедуры вызова.  Этой процедуре может содержать и вызов метода класса, и просто код. Так почему же нельзя сделать вызов интерфейсного метода?
 
Frodo_Torbins
 

Цитата:
 
Под капотом у анонимного метода обьект с интерфейсом.
то-то и оно.
 
Eternal_Shield

Цитата:
Это я в курсе Я не понимаю одного: зачем народ себе геморрой придумывает  

Eternal_Shield, проблема с тобой лично -- в несмешных шутках(иначе для чего смайлы?). Меня лично, это разражает. Прошу, не говори лишь бы что. По теме, что плохого, если аноним сможет удерживать указатель на метод интерфейса?
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 09:13 18-06-2014 | Исправлено: AlekXL, 09:29 18-06-2014
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:
в несмешных шутках(иначе для чего смайлы?). Меня лично, это разражает.

Проще надо быть. Смайлы - это настроение человека. Если для вас улыбка - это признак насмешки/шутки, то смените коллектив.  
 

Цитата:
Прошу, не говори лишь бы что.

Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?
 

Цитата:
По теме, что плохого, если аноним сможет удерживать указатель на метод интерфейса?

Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 16:15 19-06-2014 | Исправлено: Eternal_Shield, 16:22 19-06-2014
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?  

ты. В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр. Если экземпляр -- интерфейс, то очевидно, должен быть инкремент при инициализации значением, развно как и декремент при при деструкции анонима.  
Делать ссылку голую, как в крестах -- так в Delphi никогда не делается.

Цитата:
 
Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.
да, ты в ауте. и разумеется, аноним должен удерживать инстанс интефейса. Содержит же ссылка на метод сам инстанс метода.  
 
 
 
 
Добавлено:

Цитата:
Проще надо быть. Смайлы - это настроение человека. Если для вас улыбка - это признак насмешки/шутки, то смените коллектив.  

я не улыбаться пришел сюда. А получать знания, обменивать опытом. Попытка пошутить при обсуждении сложного вопроса у меня вызывает однозначно негативную реакцию. Всегда.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 22:05 19-06-2014 | Исправлено: AlekXL, 22:10 19-06-2014
kaz_av

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:
В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр.

Безотносительно ваших терок... В мобильном компиляторе, где имеется ARC, делегат, оказывается, не удерживает объект, хотя, по логике, должен бы.

Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 01:29 20-06-2014
HeMet

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вышла бесплатная редакция AppMethod http://www.appmethod.com/pricing , которая содержит в себе только... C++. Что-то я их не понимаю...  
Ко всему прочему после 30 дней можно разрабатывать только под Ведро с диагональю не более 6 дюймов.

Всего записей: 212 | Зарегистр. 05-09-2007 | Отправлено: 10:29 20-06-2014
RomanNT



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь пробовал в этом AppMethod разрабатывать? Какие впечатления?
Намного удобнее, чем, к примеру, в Eclipse под Андроид?

Всего записей: 96 | Зарегистр. 14-07-2005 | Отправлено: 11:06 20-06-2014
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kaz_av
 

Цитата:
Безотносительно ваших терок... В мобильном компиляторе, где имеется ARC, делегат, оказывается, не удерживает объект, хотя, по логике, должен бы.
 

да, я тоже это выявил. Ни аноним, ни делегат, не инкрементируют счетчик.  
И правильно -- "должен бы" удерживать. Это интуитивно подразумевается, казалось бы. Очередные грабли...
 
HeMet

Цитата:
Вышла бесплатная редакция AppMethod http://www.appmethod.com/pricing , которая содержит в себе только... C++. Что-то я их не понимаю...  
а что удивительного? Думал, что-то ценное они на халяву предложат?  
 
Если кресты, то лучше уж QT, чем эта обезьяна, которую, в отсутствие Delphi компилятора, еще и править невозможно.
 
 
Добавлено:
RomanNT
 

Цитата:
Кто-нибудь пробовал в этом AppMethod разрабатывать? Какие впечатления?
Намного удобнее, чем, к примеру, в Eclipse под Андроид?

даже не связывайся... это тебе, думается, любой опытный Delphi разраб скажет. Delphi Mobile только для истинно кроссплатформенных решений может быть оправдана. Вылизываешь под Windows, до блеска... Потому что под Андроидом вылизать практически невозможно.
---
Я глубоко убежден, что о качестве и пригодности(и перспективности) фреймворка(среда/компилятор/библиотеки) следует судить по силе лишь одного направления: деплой->отладчик.
В Delphi
1) ужасно медледнленная генерация приложения
2) перезапускаешь проект, без изменений -> все равно идет пересборка(пере-линковка, пере-деплой, пере-инсталляция, пере-запуск сервера отладки)... нунакуя?
3) отладчик тупит, приложение запускается как бы прежде отладки. Бряки на FormCreate не срабатывают.
4) вызовы к отладчику блокирующие -- среда залипает, пока идет этот вызов, например, пока идет запрос на данные для окна Call Stack. Непрофессионально.
5) отладчик хреново понимает структуры данных в Delphi. Примитивный Self.ClassName не работает .
--
Пока не пофиксят деплой/дебаг ничего хорошего не произойдет с FMX

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 12:39 20-06-2014 | Исправлено: AlekXL, 13:23 20-06-2014
Erazor84



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanNT
Пробовал, неудобно
Имеет смысл только если нужно написать что-то простое и ты кроме языка Object Pascal ничего не знаешь.

Всего записей: 368 | Зарегистр. 22-01-2008 | Отправлено: 13:46 20-06-2014
VadimShvarts

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
All
В связи с выходом XE6 Update1 обновил версию XE6 Distiller
 

Всего записей: 75 | Зарегистр. 03-11-2006 | Отправлено: 16:01 20-06-2014
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
чета я не пойму  
System.AnsiStrings.AnsiCompareStr(s1,s2)  
генерит  
 E1057 Implicit string cast from 'UTF8String' to 'string'
при s1,s2:UTF8String..
зачем?

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 02:33 21-06-2014
ZloyBrawler



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AlekXL
 
type AnsiString = { built-in type };
type UTF8String = AnsiString;
 
System.AnsiStrings  
function AnsiCompareStr(const S1, S2: AnsiString): Integer;
 
System.SysUtils
function AnsiCompareStr(const S1, S2: string): Integer;
 
Что у тебя вызывается? первая или вторая? думаю вторая))
 
Добавлено:
Конечно упыризм.  
 
В .NET строковый тип данных, да как и все типы унаследован от System.Object, что дает возможность запихнуть в этот тип данных все относящиеся к нему методы и путаницы не возникает вроде как. А еще добротная тема методы расширения в C# http://msdn.microsoft.com/ru-ru/library/bb383977.aspx
 
Понятное дело в Delphi строковых типов данных пруд пруди, но стоило бы хоть как-то наводить порядок, а то объем модулей растет и растет, не тот указал вначале и потом ловишь  E1057 Implicit string cast from 'UTF8String' to 'string'  и другую хреноту.

Всего записей: 514 | Зарегистр. 19-10-2010 | Отправлено: 09:50 21-06-2014
kaz_av

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL
Как зачем? UTF8String это = type AnsiString(65001); т.е. новый тип (не псевдоним) да еще с механизмом авто-конвертирования. А функциря принимает обычный AnsiString т.е. строку с кодировкой дефолтной локали. Вот компилятор тебя и предупреждает, что будет конвертировать из UTF8 в ANSI (и тут, кстати, возможна потеря данных). Все правильно.

Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 10:56 21-06-2014
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:

Цитата:
Лишь бы что? Может, это ссылка на метод интерфейса, которая должна удерживать интерфейс, чтобы потом аноним вызвал _Release когда умрёт - лишь бы что? Кто из нас чушь морозит?

ты. В чем проблема? ссылка на метод в дельфи всегда захватывает и экзепляр. Если экземпляр -- интерфейс, то очевидно, должен быть инкремент при инициализации значением, развно как и декремент при при деструкции анонима.  
Делать ссылку голую, как в крестах -- так в Delphi никогда не делается.
 

Цитата:
Аноним удерживать интерфейс? Т.е. ты предлагаешь добавить ссылку на интерфейс (который удерживается анонимом) в объект анонима???!!! I'm out.

да, ты в ауте. и разумеется, аноним должен удерживать инстанс интефейса. Содержит же ссылка на метод сам инстанс метода.

Видимо Eternal_Shield имел ввиду, что отладка кода, где такое используется, станет тихим ужасом для программиста. Таким образом, вполне возможно, что запрашиваемая вами фича не реализована "by design".

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:22 21-06-2014
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins

Цитата:
отладка кода, где такое используется, станет тихим ужасом для программиста. Таким образом, вполне возможно, что запрашиваемая вами фича не реализована "by design".
да ну брось.. Какой там дизайн у этих мартышек? Х..м груши околачивать -- вот их дизайн.
 
ZloyBrawler

Цитата:
Что у тебя вызывается? первая или вторая? думаю вторая))  
 я явно указал, что у меня вызывается.
 

Цитата:
В .NET строковый тип данных, да как и все типы унаследован от System.Object, что дает возможность запихнуть в этот тип данных все относящиеся к нему методы и путаницы не возникает вроде как. А еще добротная тема методы расширения в C# http://msdn.microsoft.com/ru-ru/library/bb383977.aspx  
ой перестань. Это профанация, когда и value типы, и классы(ссылочные типы) наследуются из одного корня.  
Delphi ближе к железу, и потому всякие такие изыски в ней неуместны. Потому что ЦП не знает классов, структур. А только регистры, память, арифметика, и преданные анафеме goto/jmp
Я предпочитаю иметь представление, во что превращаются мои высокоуровневые  конструкции в суровом мире машинного кода. Мы, Delphi-сты, и крестовики -- еще это помним.
kaz_av
 

Цитата:
Как зачем? UTF8String это = type AnsiString(65001); т.е. новый тип (не псевдоним) да еще с механизмом авто-конвертирования. А функциря принимает обычный AnsiString т.е. строку с кодировкой дефолтной локали. Вот компилятор тебя и предупреждает, что будет конвертировать из UTF8 в ANSI (и тут, кстати, возможна потеря данных). Все правильно.
ну да.. верно.. Хотя и ты не до конца догнал: там преобразование идет не по пути
UTF8String->AnsiString
а по пути Utf8String->UnicodeString->AnsiString
то есть первое преобразование безопасно.. А вот второе.. Оно и генерит варнинг. Короче, горе от ума.. Хорошо что я Warnings as Errors включил...
интересно, каково было бы поведение,есл Utf8String был бы объявлен без type?
 
 
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 06:08 22-06-2014 | Исправлено: AlekXL, 06:10 22-06-2014
kaz_av

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:
Хотя и ты не до конца догнал

Там нечего догонять - компилятор более чем красноречиво все показывает генерируя на каждое подобное преобразование два предупреждения:

Цитата:
W1057 Implicit string cast from 'UTF8String' to 'string'
W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString'

Более того, в дизассемблере все прекрасно видно.
 

Цитата:
интересно, каково было бы поведение,есл Utf8String был бы объявлен без type?  

Нельзя строковый тип объявить псевдонимом (без type), и при этом указать другую кодовую страницу (та, что в скобках).

Всего записей: 439 | Зарегистр. 15-02-2006 | Отправлено: 11:09 22-06-2014 | Исправлено: kaz_av, 11:09 22-06-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru