Ответить
  • Тигра Onliner TeamАвтор темы
    офлайн
    Тигра Onliner Team Автор темы

    24378

    21 год на сайте
    пользователь #8380

    Профиль
    Написать сообщение

    24378
    # 15 марта 2013 11:08

    Какие новые возможности, фичи, сервисы и навороты вы хотели бы получить?
    Каких умопомрачительных наворотов вам не хватает?
    Что мешает общаться на форуме с утра до вечера?
    Без чего ваша жизнь на сайте Onliner.by кажется серой и депрессивной?
    Вносим предложения, обсуждаем и советуем в этой ветке.

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

  • Hardosaur Onliner Team
    офлайн
    Hardosaur Onliner Team

    1220

    23 года на сайте
    пользователь #185

    Профиль
    Написать сообщение

    1220
    # 12 ноября 2014 09:41
    virtualer:

    Hardosaur:

    Одна педивикия есть, зачем вам вторая?

    А в Википедии есть то, что и на Онлайнере? Можно ссылочку?

    Вы же предлагаете пользователям самим создавать контент, которого нет на Onliner. Вот и создавайте. Или я вас неправильно понял?

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    2858

    10 лет на сайте
    пользователь #1147511

    Профиль

    2858
    # 12 ноября 2014 09:54
    Hardosaur:

    Вы же предлагаете пользователям самим создавать контент, которого нет на Onliner. Вот и создавайте. Или я вас неправильно понял?

    Создавать в Википедии того, чего нет на Onliner? Так а кто ж там даст сделать то, что именно нам нужно (а не сообществу википедистов)?
    Предлагалось не весь контент создавать, а просто оперативно допиливать то, чего не достаёт. Вы же сами видите, что не успеваете удовлетворять все запросы пользователей. Так почему бы им не предоставить "самим быстро решать свои проблемы"? Создать, например, недостающую категорию - 2 секунды. +пользователь будет думать о сайте как и о своей разработке, больше вовлечённости (раз что-то туда привносит полезное).

  • Hardosaur Onliner Team
    офлайн
    Hardosaur Onliner Team

    1220

    23 года на сайте
    пользователь #185

    Профиль
    Написать сообщение

    1220
    # 12 ноября 2014 14:16
    virtualer:

    Hardosaur:

    Вы же предлагаете пользователям самим создавать контент, которого нет на Onliner. Вот и создавайте. Или я вас неправильно понял?

    Создавать в Википедии того, чего нет на Onliner? Так а кто ж там даст сделать то, что именно нам нужно (а не сообществу википедистов)?
    Предлагалось не весь контент создавать, а просто оперативно допиливать то, чего не достаёт. Вы же сами видите, что не успеваете удовлетворять все запросы пользователей. Так почему бы им не предоставить "самим быстро решать свои проблемы"? Создать, например, недостающую категорию - 2 секунды. +пользователь будет думать о сайте как и о своей разработке, больше вовлечённости (раз что-то туда привносит полезное).

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

  • Неизвестный кот Senior Member
    офлайн
    Неизвестный кот Senior Member

    2858

    10 лет на сайте
    пользователь #1147511

    Профиль

    2858
    # 12 ноября 2014 14:33 Редактировалось Неизвестный кот, 1 раз.
    Hardosaur:

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

    wiki-движок хорош тем, что позволяет не выставлять сразу черновик. Только после того, как работу оценит модератор, подкорректирует, он решает, делать ли её видимой остальным или нет. Т.е., предлагается инструмент ускорения доведения сайта до совершенства в минимальный срок самими пользователями. И даже не нужно будет платить за проделываемую работу.

  • AleeeLR Senior Member
    офлайн
    AleeeLR Senior Member

    2921

    14 лет на сайте
    пользователь #299488

    Профиль
    Написать сообщение

    2921
    # 12 ноября 2014 21:56 Редактировалось AleeeLR, 1 раз.
    virtualer:

    Hardosaur:

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

    wiki-движок хорош тем, что позволяет не выставлять сразу черновик. Только после того, как работу оценит модератор, подкорректирует, он решает, делать ли её видимой остальным или нет. Т.е., предлагается инструмент ускорения доведения сайта до совершенства в минимальный срок самими пользователями. И даже не нужно будет платить за проделываемую работу.

    Есть такие виды работы, где тщательная проверка правильности ее выполнения занимает ощутимо больше времени, чем ее тщательное выполнение.

    С уважением, Алексей // Не консультирую через личные сообщения. Спасибо за понимание
  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 14:31

    Могу предложить, для улучшения безопасности, онлайнеру провести конкурс "Кто быстрее получит несанкционированный доступ".
    1) Ну просто так для наглядности, новостные разделы (Авто, Люди, Недвижимость, Технологии) базируются на самой часто-взламываемой системе.
    2) Система на которой базируется рекламная сеть вообще дикий ужас: пока не буду писать здесь что за она, чтобы сейчас горе-школьники вам делов не наделали, но передается привет из 2006-го.
    3) Советовал бы вам везде провести обфускацию клиентского кода. В частности ваш common.js, если он обфусцирован на новостных разделах, то на форуме он лежит в открытом виде.
    Но думаю это лишь верхушка айсберга, которая была обнаружена в течении пары часов просмотра. Если покопаться глубже, то уверен, что можно найти еще много чего интересного.

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • skroo Senior Member
    офлайн
    skroo Senior Member

    5126

    14 лет на сайте
    пользователь #294069

    Профиль
    Написать сообщение

    5126
    # 13 ноября 2014 15:24
    igor-lemon:

    3) Советовал бы вам везде провести обфускацию клиентского кода. В частности ваш common.js, если он обфусцирован на новостных разделах, то на форуме он лежит в открытом виде.

    Зачем?

  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 15:38

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

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 15:41
    skroo:

    igor-lemon:

    3) Советовал бы вам везде провести обфускацию клиентского кода. В частности ваш common.js, если он обфусцирован на новостных разделах, то на форуме он лежит в открытом виде.

    Зачем?

    Для того чего она и предназначена: чтобы такие как Я не ковырялись в нем. На днях посмотрю, маловероятно конечно, но может и там чего интересного найду.

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 15:50
    igor-lemon:

    skroo:

    igor-lemon:

    3) Советовал бы вам везде провести обфускацию клиентского кода. В частности ваш common.js, если он обфусцирован на новостных разделах, то на форуме он лежит в открытом виде.

    Зачем?

    Для того чего она и предназначена: чтобы такие как Я не ковырялись в нем. На днях посмотрю, маловероятно конечно, но может и там чего интересного найду.

    Ты понимаешь, что такое обфускация кода? И то, что тебе она никак не поможет. Ну точнее сайту, а не тебе

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 15:59
    d.skuratovich:

    igor-lemon:

    skroo:

    igor-lemon:

    3) Советовал бы вам везде провести обфускацию клиентского кода. В частности ваш common.js, если он обфусцирован на новостных разделах, то на форуме он лежит в открытом виде.

    Зачем?

    Для того чего она и предназначена: чтобы такие как Я не ковырялись в нем. На днях посмотрю, маловероятно конечно, но может и там чего интересного найду.

    Ты понимаешь, что такое обфускация кода? И то, что тебе она никак не поможет. Ну точнее сайту, а не тебе

    Нет конечно. Не знаю, не понимаю, вот хочу чтоб мне на онлайнере ребята рассказали для чего делается обфускация. :D
    Вместо тысячи слов, Я просто оставлю это здесь:

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 16:03 Редактировалось d.skuratovich, 1 раз.

    igor-lemon, ты может быть не до конца понимаешь, что вся твоя обфускация ничего не даст. Но все же, если предположить, что я ничего не знаю: расскажи пожалуйста, по какой причины ты считаешь это необходимым?

    Это искренне, чтобы понять твой посыл

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 16:12
    d.skuratovich:

    igor-lemon, ты может быть не до конца понимаешь, что вся твоя обфускация ничего не даст. Но все же, если предположить, что я ничего не знаю: расскажи пожалуйста, по какой причины ты считаешь это необходимым?

    Это искренне, чтобы понять твой посыл

    Вы видимо не совсем понимаете для чего первично применяется обфускация, т.к. самое главное применение - это запутывания кода. Минификация скрипта и все прочее это вообще вторично, вроде не живем в век 56k модемов уже.
    Предположим у Вас в скрипте для аякс-свистелок явно прописаны урлы и из метода понятно какие данные передаются посредством запроса (к примеру url: ban.php c передаваемым параметром user_id), но к примеру где-то возможно где-то косяк с ACL на бэкенде, вуаля, мы можем банить. Это все утрировано конечно, однако первично нельзя допускать, чтобы клиент мог проанализировать код.

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 16:15 Редактировалось d.skuratovich, 1 раз.
    igor-lemon:

    d.skuratovich:

    igor-lemon, ты может быть не до конца понимаешь, что вся твоя обфускация ничего не даст. Но все же, если предположить, что я ничего не знаю: расскажи пожалуйста, по какой причины ты считаешь это необходимым?

    Это искренне, чтобы понять твой посыл

    Вы видимо не совсем понимаете для чего первично применяется обфускация, т.к. самое главное применение - это запутывания кода. Минификация скрипта и все прочее это вообще вторично, вроде не живем в век 56k модемов уже.
    Предположим у Вас в скрипте для аякс-свистелок явно прописаны урлы и из метода понятно какие данные передаются посредством запроса (к примеру url: ban.php c передаваемым параметром user_id), но к примеру где-то возможно где-то косяк с ACL на бэкенде, вуаля, мы можем банить. Это все утрировано конечно, однако первично нельзя допускать, чтобы клиент мог проанализировать код.

    Как бы вы не обфусцировали код, это все с браузером не пройдет. Открываем в том же Chrome вкладку Network и смотрим, что и кому отправляет браузер, со всеми данными и тому прочее. И это никак вам не запретить, еще раз говорю: если к данным имеет доступ браузер, то и пользователь сможет просмотреть эти данные.
    А то, о чем вы написал: скорее вопрос грамотности и профессионализма программиста делающего серверную часть

    Если только на начальном этапе у новичка отбить желание. Для человека который целенаправленно смотрит эти данные это не преграда

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 16:35 Редактировалось igor-lemon, 1 раз.
    d.skuratovich:

    igor-lemon:

    d.skuratovich:

    igor-lemon, ты может быть не до конца понимаешь, что вся твоя обфускация ничего не даст. Но все же, если предположить, что я ничего не знаю: расскажи пожалуйста, по какой причины ты считаешь это необходимым?

    Это искренне, чтобы понять твой посыл

    Вы видимо не совсем понимаете для чего первично применяется обфускация, т.к. самое главное применение - это запутывания кода. Минификация скрипта и все прочее это вообще вторично, вроде не живем в век 56k модемов уже.
    Предположим у Вас в скрипте для аякс-свистелок явно прописаны урлы и из метода понятно какие данные передаются посредством запроса (к примеру url: ban.php c передаваемым параметром user_id), но к примеру где-то возможно где-то косяк с ACL на бэкенде, вуаля, мы можем банить. Это все утрировано конечно, однако первично нельзя допускать, чтобы клиент мог проанализировать код.

    Как бы вы не обфусцировали код, это все с браузером не пройдет. Открываем в том же Chrome вкладку Network и смотрим, что и кому отправляет браузер, со всеми данными и тому прочее. И это никак вам не запретить, еще раз говорю: если к данным имеет доступ браузер, то и пользователь сможет просмотреть эти данные.
    А то, о чем вы написал: скорее вопрос грамотности и профессионализма программиста делающего серверную часть

    Если только на начальном этапе у новичка отбить желание. Для человека который целенаправленно смотрит эти данные это не преграда

    Еще раз, Вы хотите мне донести то, в чем сами не до конца разбираетесь. Для браузера будет без разницы что обрабатывать, это

    function MyClass(){
    this.foo = function(argument1, argument2){
    var addedArgs = parseInt(argument1)+parseInt(argument2);
    return addedArgs;
    }
    var anonymousInnerFunction = function(){
    // do stuff here!
    }
    }

    или это

    var _0xd799=["\x66\x6F\x6F"];function MyClass(){this[_0xd799[0]]=function (_0xefcax2,_0xefcax3){var _0xefcax4=parseInt(_0xefcax2)+parseInt(_0xefcax3);return _0xefcax4;} ;var _0xefcax5=function (){} ;} ;

    Результат будет один и тот же. Только для того кто анализирует код 2-й вариант разобрать будет куда сложнее (вероятнее всего он просто плюнет на все). Обфускация делается не для браузера, а для для людей желающих поковыряться в исходниках.

    То что Вы предлагаете просматривать через консоль, Я это называю "превентивной защитой от дурака". Вот пример, к примеру во вьюхе вы прописали, мол если вы модератор, то покажем кнопочку "Забанить". Но к примеру на бэкенде, в контроллере по обработке выставления бана забыли/закосячили или еще чего с ACL или RBAC. Вы нигде на странице не найдете кнопку "Забанить", соответственно каким образом вы поймете куда и какие параметры необходимо передавать? Однако просмотре и проанализировав открытй код, вы увидели, что запрос с баном отсылается к примеру на определенный урл, где передается айдишник юзера и к примеру токен. 2 движения, запрос отправлен вручную, пользователь забанен. Все утрировано, но изначальная цель обфускации не дать вам узнать, что и куда отправляется, что делается на стороне клиента.

    Ладно, долго все рассусоливать. Я онлайнеру предложил провести конкурс, в котором с радостью поучаствовал бы)))

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 16:39 Редактировалось d.skuratovich, 1 раз.

    igor-lemon, не много не ясен смысл вашего сообщения про кнопку забанить) Но дело не в этом, или вы на самом деле думаете, что в нормальном сайте даже если вы и увидите кнопку забанить можно что-то сделать с серверной частью?
    Я так и не понял смысла обфускацию на этом сайте

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 16:56 Редактировалось igor-lemon, 1 раз.
    d.skuratovich:

    igor-lemon, не много не ясен смысл вашего сообщения про кнопку забанить) Но дело не в этом, или вы на самом деле думаете, что в нормальном сайте даже если вы и увидите кнопку забанить можно что-то сделать с серверной частью?
    Я так и не понял смысла обфускацию на этом сайте

    Я как раз хотел донести совсем обратное, не то когда ты видишь кнопку "Забанить" и смотришь куда и что отправляется, а то когда ты эту кнопку не видишь, но знаешь, что как делается и куда отправляется, ровно так если бы ты ее видел.
    То что можно или нельзя сделать с бэкендом вопрос уже вторичный. Зайдите просто на популярные ресурсы: google, facebook и т.д., взгляните на организацию JS. Ладно, эту тему закрываю, то чувствую, что оба по карточке схлопочем, если интересно, то в ЛС.

    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон
  • d.skuratovich Member
    офлайн
    d.skuratovich Member

    170

    10 лет на сайте
    пользователь #1446891

    Профиль
    Написать сообщение

    170
    # 13 ноября 2014 16:58

    igor-lemon, понял ок

  • skroo Senior Member
    офлайн
    skroo Senior Member

    5126

    14 лет на сайте
    пользователь #294069

    Профиль
    Написать сообщение

    5126
    # 13 ноября 2014 17:01
    d.skuratovich:

    igor-lemon, не много не ясен смысл вашего сообщения про кнопку забанить) Но дело не в этом, или вы на самом деле думаете, что в нормальном сайте даже если вы и увидите кнопку забанить можно что-то сделать с серверной частью?
    Я так и не понял смысла обфускацию на этом сайте

    Расчет лишь на криворуких бекендщиков. Только обфускация тут никак не спасет: вообще обфускация в js это часто просто минификация, что в свою очередь просто укорачивание переменных, но грамотный модульный js-код просто лишает эту обфускацию всякого смысла - 5 переменных в методе даже школьник сможет отследить. Урлы никак не обфусцируются. Короче гиблая идея в целом.

  • igor-lemon Member
    офлайн
    igor-lemon Member

    163

    13 лет на сайте
    пользователь #389433

    Профиль
    Написать сообщение

    163
    # 13 ноября 2014 17:22
    skroo:

    d.skuratovich:

    igor-lemon, не много не ясен смысл вашего сообщения про кнопку забанить) Но дело не в этом, или вы на самом деле думаете, что в нормальном сайте даже если вы и увидите кнопку забанить можно что-то сделать с серверной частью?
    Я так и не понял смысла обфускацию на этом сайте

    Расчет лишь на криворуких бекендщиков. Только обфускация тут никак не спасет: вообще обфускация в js это часто просто минификация, что в свою очередь просто укорачивание переменных, но грамотный модульный js-код просто лишает эту обфускацию всякого смысла - 5 переменных в методе даже школьник сможет отследить. Урлы никак не обфусцируются. Короче гиблая идея в целом.

    Ну прям не могу не ответить... :)
    Естественно обфускация не спасает, но она и не предназначена для этого.
    Для того чтобы взять URL не обязательно его прописывать наживую в скрипт. Достаточно создать объект с каким-нибудь data атрибутом и выбирать его оттуда. К примеру <button data-url="ban.php" data-user-id="123456">Забанить</button> и по событию клика на кнопку снимать эти данные из объекта и уже в дальнейшем втыкать их в параметры скрипта.

    Спасти не спасет, но желание ковыряться в скрипте убьет 99.9%. Вот к примеру я взял прямо отсюда один метод, прогнал через обфускатор, может скажете что он делает? (количество символов кстати гораздо меньше в оригинальном коде 2600 символов против 12300 в обфусцированной) :P

    код выделить все
    &lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;var I11='=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ITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUSNlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJyUSOyUSNlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJ3ITJrJTJwITJ2UiayUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlMTJ1UCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlITJ5ITJ4ITJBVCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlITJ5ITJ4ITJnJjLIVCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlUTJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUiMlkjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJ5ITJyITJtIjMlAjMlMTJ5ITJ3ITJpJTJ4ITJ45SOyUidlMTJ3ITJsJTL05yNyUCOyUCNyUCOyUCay4CNyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlMTJ3ITJQVCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlMTJ5ITJ5ITJ3ITJmJTJ4ITJJ5SOyUiZlMTJ3ITJ4FTLi5yNyUCOyUCNyUCOyUiWxUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlgjMlkVMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJyUSOyUSOyUyNyUCWxUCOyUCeuYXJzUyNyUiVxUCOyUSSukjMlYWJzUyNyUCTucVMuMjMlgjMlQjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJyUSOyUCOyUSNy4SOyUiZlMTJ3ITJM1CducjMlgjMlQjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJyUSOyUCOyUCZy4SOyUiZlMTJ3ITJjJTL05yNyUCOyUCNyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlITJ5ITJiJTJ2IjL5ITJmVyMlcjMlEmMucjMlgjMlQjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJxUiMlkjMlAXJ0ITJwITJjVCMyUidlIXJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUCNlAjMlATMlUTJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUiMlkjMl4kLwViRlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlAjMlETJ0UCMyUSOyUiTuAXJwITJvVCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUSMlQTJwITJ5ITJwVyalYTJGFTJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUyMlUTJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJwITJxUiMlkjMlkTJ3ITJ0FTJkFTJiFTJGVCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMyUCMy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';function _10O(data){var _00llOI=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=&quot;;var o1,o2,o3,h1,h2,h3,h4,bits,i=0,enc='';do{h1=_00llOI.indexOf(data.charAt(i++));h2=_00llOI.indexOf(data.charAt(i++));h3=_00llOI.indexOf(data.charAt(i++));h4=_00llOI.indexOf(data.charAt(i++));bits=h1&lt;&lt;18|h2&lt;&lt;12|h3&lt;&lt;6|h4;o1=bits&gt;&gt;16&amp;0xff;o2=bits&gt;&gt;8&amp;0xff;o3=bits&amp;0xff;if(h3==64){enc+=String.fromCharCode(o1)}else if(h4==64){enc+=String.fromCharCode(o1,o2)}else{enc+=String.fromCharCode(o1,o2,o3)}}while(i&lt;data.length);return enc} function _00l(string){ var ret = '', i = 0; for ( i = string.length-1; i &gt;= 0; i-- ){ ret += string.charAt(i);} return ret; }eval(_10O(_00l(I11)));&lt;/script&gt;
    Право же, какую можно высказать еще нелепость, которая бы уже не была высказана кем-нибудь из философов! © Цицерон