Content-Type: multipart/related; start=; boundary=----------acg8XfHUQdCCWsRCB8dlLi Content-Location: http://forum.qip.ru/showthread.php?t=22589 Subject: =?utf-8?Q?QIP=20Weather=20-=20QIP=20Forum?= MIME-Version: 1.0 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=showthread.htm Content-Type: text/html; charset=windows-1251; name=showthread.htm Content-Id: Content-Location: http://forum.qip.ru/showthread.php?t=22589 Content-Transfer-Encoding: 8bit QIP Weather - QIP Forum
QIP Home QIP Forum

Вернуться   QIP Forum > Все для QIP Infium > QIP Infium. Доступные модули и утилиты. Plugins.
Добро пожаловать, opiums
Ваш последний визит: Сегодня в 15:58
Личные сообщения: Новых 0, всего 2.

QIP Infium. Доступные модули и утилиты. Plugins. Здесь постить сами модули(плагины), утилиты и темы для их обсуждения.

Результаты опроса: Нужен ли вам этот плагин?
Да 57 93.44%
Нет 4 6.56%
Голосовавшие: 61. Этот опрос закрыт | Отменить свой голос

Ответ
 
Опции темы Поиск в этой теме Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.54. Опции просмотра
Старый 20.01.2008, 03:03   #1
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
Info QIP Weather

QIP Weather for QIP Infium - это высокоэффективный, многоязычный, красочный, настраиваемый в 3 действия плагин для отображения прогноза погоды от популярного информера http://gismeteo.ru/.

Временно не разрабатывается

*Многоязычность - Со временем их становится больше. Это означает, что каждый сможет настроить многоязыковой плагин по своему усмотрению.
*Красочность - плагин использует компонент http://alphaskins.com/, что придаёт интерфейсу плагина в сочетании с png изображениями красочный вид.
*Настройка в 3 действия - 1. Выбери язык. 2. Выбери город. 3.Применить! ;)


Версия 1.0 будет выглядеть примерно так :) Также Вы можете просмотреть это в действии... Это только начало - http://forum.qip.ru/attachment.php?a...1&d=1201395717


В планах:

Избавится от компонента AlphaSkins и рисовать красивые вещи самому
Обязательная "многоинформерность"
Работа с SDK 1.40
Анимированные объекты (иконки, фон)
Хотелки юзверей


Текущая версия:

Версия 0.145 от 04.04.08
Автоопределение прокси
*Исправлены мелкие ошибки
+Добавлены всякие мелочи
-> Следующая версия 0.9х, прообраз как на картинке

Перед установкой требуется удалить файл connect.rso


История предыдущих версий


Newcomer, не умеющий ставить плагин, зайди сюда: http://forum.qip.ru/showthread.php?t=19473

Newcomer, для запуска плагина он дожен быть включён в настройках QIP Infium. Нажав на кнопочку с солнышком под аватаркой собеседника, вы получите сразу же свежую погоду. Незабывайте также о ALT+W

Скачать:
Вложения
Тип файла: rar as will.rar (726.7 Кб, 13624 просмотров)
Тип файла: rar All Skins.rar (967.0 Кб, 9813 просмотров)
Тип файла: rar QIP Weather SRC v0.145.rar (53.8 Кб, 3435 просмотров)
Тип файла: rar QIP Weather v0.145.rar (685.7 Кб, 13000 просмотров)
__________________
Стучитесь! И вам откроют ;)
Мы идём дальше, чтобы вы могли подойти ближе...

Последний раз редактировалось RomaS, 23.05.2008 в 17:13.
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 03:21   #2
Reading Only
 
Регистрация: 12.10.2006
Сообщений: 0
Send Message via Jabber to ICE9000
Quote selected
По умолчанию

Альфаскины жутко хавают память,- низачот.
Вообще такой плагин надо на Pure API писать :/ (вроде как имхо)
ICE9000 вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 03:29   #3
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

:) Смотря сколько у тя памяти. У меня 2ГБ - не жалуюсь.
Интерестно ведёт себя этот альфаскин - в настройки жабера добирается... А при установленом плагине СкинЭнжин - вообще красота :D

добавлено через 2 минуты
ICE9000 - в твоём случае тогда лучше использовать плагин coolWeather. :) Там разукраски, занимающий памяти вообще нет

Последний раз редактировалось RomaS, 20.01.2008 в 03:29. Причина: Добавлено сообщение
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 04:13   #4
QIP Newcomer
 
Аватар для GrAN
 
Регистрация: 07.04.2006
Сообщений: 141
Quote selected
По умолчанию

плагин ничо так, спасибо. Только скины эти
Цитата:
плагин использует компонент http://alphaskins.com/, что придаёт интерфейсу плагина в сочетании с png изображениями красочный вид.
хочется все таки опционально ;)
__________________
Strength, honour, courage... ghe-ghe... aaaaaaahhhh....
GrAN вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 04:20   #5
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

дак так оно и есть. В комплект к плагину входит 3 скина, размещённые в Plugins\QIP Weather\Skins\ . В настройках есть возможность менять скин
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 04:26   #6
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

А как AlphaSkins дружит с SkinEngine ? Т.е. была проверка на это ?


Заранее прошу прощения за оффтоп, готов к ReadOnly =) но накипело:
Цитата:
Сообщение от ICE9000 Посмотреть сообщение
Альфаскины жутко хавают память,- низачот. Вообще такой плагин надо на Pure API писать :/ (вроде как имхо)
ICE9000, прежде чем такое фи говорить, давай переведем твои и мои плагины на чистый WinAPI, ОК ?
Этот плагин не требует высоких скоростей в своей работе, так что лучше VCL и быстрое развитие плагина, чем маленький плагин - но с медленным развитием функционала.
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Sponsored Links
Старый 20.01.2008, 04:39   #7
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

для скачивания доп. скинов, нужно перейти на http://alphaskins.com/asdwnld.php

добавлено через 3 минуты
Цитата:
А как AlphaSkins дружит с SkinEngine ? Т.е. была проверка на это ?
плагин работает стабильно, НО заголовок формы будет изменен на СкинЭнжиновский (невелика беда). Другое, что при включенном СкинЭнжине и моём плаге, в настройках жабера, мыло.ру и тд начинается война "прерисовок" :D .

добавлено через 7 минут
Используя СкинЭнж невозможно нажать крестик - используйте контекстное меню. А вообще я думаю, что автору СкинЭнжина стоит не вторгаться в чужие плагины - т.е. не пытаться перерисовать их ;)

Последний раз редактировалось RomaS, 20.01.2008 в 04:39. Причина: Добавлено сообщение
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 04:42   #8
Miss Moderator
 
Аватар для CapDaughter
 
Регистрация: 09.12.2006
Сообщений: 2,252
Отправить сообщение для CapDaughter с помощью ICQ Отправить сообщение для CapDaughter с помощью Skype™ Send Message via Jabber to CapDaughter
Quote selected
По умолчанию

Плагин хороший, поэтому пишу пожелания, чтобы он развивался.
1. Вызов настроек плагина из окна плагина.
2. Кнопку "Обновить прогноз".
3. Выбор страны и города в настройках при наборе первых букв названия, а то длинный список городов долго крутить.
4. Настройку шрифта, его цвета и размера.
5. Кнопка "Применить" почему то не применяет скин... может, я что-то не так делаю?
6. Последняя строка в окне шибко упирается в край окна, постоянно пытаюсь уцепиться мышкой, чтобы растянуть окно вниз ))
7. Разграничить времена суток чертой или выделением заголовка.
8. Погоду на 3, 5, 7, 10 итд дней.
9. Карту магнитных бурь.
11. Поддержку нескольких городов (например вкладками)
Я вообще если подольше подумаю, могу много чего написать ))
__________________
Все можно наладить, если вертеть в руках достаточно долго
QIP Team

Последний раз редактировалось CapDaughter, 20.01.2008 в 04:48. Причина: Пункт 10 нашла )
CapDaughter вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:00   #9
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

Отмечена нестабильная работа со СкинЭнжин в редких случаях, что приводит к краху плагина QIP Weather. Советую не использовать его с плагином QIP Weather, до момента выхода стабильно работающей версии СкинЭнжина ;)

добавлено через 8 минут
1. Сделаю
2. Присуствует со следующей версии автообновление - т.е. незачем делать кнопку Обновить.
3. Ок
4. Цвет привязан к скину - разные скины-разные цвета... Хотя попробую
5. Всё работает ;)
6. Исправим
7. А стоит ли - интерфейс интуитивно-понятный вроде :)
8. Плагин работает по принципу получения xml файлов, подобно coolWeather
9. См. 8
10. Нажать на баннер в настройках или в "о программе"
11. Подумаю

Цитата:
Я вообще если подольше подумаю, могу много чего написать ))
Все ваши предложения будут рассмотрены:)

добавлено через 6 минут
Когда вы, возможно, сталкнетесь с некорректным растягиванием главного окна по вертикале, пожайлуста, вставте скриншот и приаттачте файл \Plugins\QIP Weather\tmp.xml

Последний раз редактировалось RomaS, 20.01.2008 в 05:00. Причина: Добавлено сообщение
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:01   #10
Miss Moderator
 
Аватар для CapDaughter
 
Регистрация: 09.12.2006
Сообщений: 2,252
Отправить сообщение для CapDaughter с помощью ICQ Отправить сообщение для CapDaughter с помощью Skype™ Send Message via Jabber to CapDaughter
Quote selected
По умолчанию

Цитата:
Сообщение от RomaS Посмотреть сообщение
5. Всё работает
У меня нет :(
Открываю настройки, выбираю скин, нажимаю "Применить", открываю окно плагина из ОС, вижу ту же самую картинку...

Цитата:
Сообщение от RomaS Посмотреть сообщение
7. А стоит ли - интерфейс интуитивно-понятный вроде
Ну или отдалить блоки друг от друга, а то они сплошняком идут...

Цитата:
Сообщение от RomaS Посмотреть сообщение
8. Плагин работает по принципу получения xml файлов, подобно coolWeather
9. См. 8
Эээм... а для ламеров? :) Будет или нет меня интересует, мне пофиг как работает :)

Цитата:
Сообщение от RomaS Посмотреть сообщение
10. Нажать на баннер в настройках или в "о программе"
Ну я ж говорю, что нашла ))

Цитата:
Сообщение от RomaS Посмотреть сообщение
Все ваши предложения будут рассмотрены
Знач напридумываю )
__________________
Все можно наладить, если вертеть в руках достаточно долго
QIP Team
CapDaughter вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:08   #11
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

Цитата:
Эээм... а для ламеров? Будет или нет меня интересует, мне пофиг как работает
Программа скачивает у информера Гисметео файл с данными о погоде, в котором нету сведений о магнитных бурях и т.д. Всё, что вы видите в окне, то находится в тех скачанных данных.

Цитата:
Открываю настройки, выбираю скин, нажимаю "Применить", открываю окно плагина из ОС, вижу ту же самую картинку...
1. Вы пользуетесь СкинЭнжином?
2. Попробуйте удалить \Plugins\QIP Weather\options.rso и перезапустить плагин

добавлено через 1 минуту
3. В настройках при выборе скина, окно настроек меняет шкуру?

Последний раз редактировалось RomaS, 20.01.2008 в 05:08. Причина: Добавлено сообщение
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:10   #12
Miss Moderator
 
Аватар для CapDaughter
 
Регистрация: 09.12.2006
Сообщений: 2,252
Отправить сообщение для CapDaughter с помощью ICQ Отправить сообщение для CapDaughter с помощью Skype™ Send Message via Jabber to CapDaughter
Quote selected
По умолчанию

1. Нет
2. То же самое. Картинка не меняется.
3. Нет, а должна видимо, да?
__________________
Все можно наладить, если вертеть в руках достаточно долго
QIP Team
CapDaughter вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:15   #13
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

Да. Как только вы выбрали скин в настройках, он сразу же применяется на окно настроек. Могли бы вы сделать видео-скриншот и выложить, например на рапидшару.
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:17   #14
Miss Moderator
 
Аватар для CapDaughter
 
Регистрация: 09.12.2006
Сообщений: 2,252
Отправить сообщение для CapDaughter с помощью ICQ Отправить сообщение для CapDaughter с помощью Skype™ Send Message via Jabber to CapDaughter
Quote selected
По умолчанию

Не верите мне, да... ээх...
Завтра поковыряюсь... постараюсь сделать.
__________________
Все можно наладить, если вертеть в руках достаточно долго
QIP Team
CapDaughter вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 20.01.2008, 05:29   #15
QIP User
 
Аватар для RomaS
 
Регистрация: 08.11.2006
Сообщений: 278
Отправить сообщение для RomaS с помощью ICQ Send Message via Jabber to RomaS
Quote selected
По умолчанию

Я не неверю ;) , я выесняю как это могло произойти. Просмотрите данное видео - http://rapidshare.de/files/38352073/...video.rar.html
RomaS вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Ответ


Быстрый ответ
Сообщение:
Убрать форматирование текста
Полужирный
Курсив
Подчёркнутый

Вставить рисунок
Вставить тег цитаты [QUOTE] вокруг выделенного текста
 
Уменьшить размер
Увеличить размер
Опции


Ваши права в разделе
Вы можете создавать темы
Вы можете отвечать на сообщения
Вы можете прикреплять файлы
Вы можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +7, время: 16:16.


Работает на vBulletin®.
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2004 - 2008 QIP.RU
------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bg.jpg Content-Type: image/jpeg; name=bg.jpg Content-Location: http://forum.qip.ru/qipstyle/bg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2Jl AGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQ DA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AA EQgAEAAQAwERAAIRAQMRAf/EAFwAAQEAAAAAAAAAAAAAAAAAAAAIAQEBAQAAAAAA AAAAAAAAAAAAAgUQAAAFBAMBAAAAAAAAAAAAAAABESFRQWGxwXGB4bIRAQEBAQAA AAAAAAAAAAAAAADwwWH/2gAMAwEAAhEDEQA/AKVw/F2iSGdWpMMSe/JhWA61Ve1L eQroUXTXaJIK0f/Z ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bgl.gif Content-Type: image/gif; name=bgl.gif Content-Location: http://forum.qip.ru/qipstyle/bgl.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAOYAAPj89/3+/PX69Pr9+fP58fT68vX68/z9+/z9+/P48fT68vv9 +vv9+/v9+vv9+vn9+Pj79/v9+/T48vT68vv9+vL48ff79fv9+vX78/v9+fv9+vr9 +fT68vv9+vr9+v3+/Pj79/X68/f79f3+/fb79fX79Pr9+vT68vL48PT68vf79ff7 9vj89/P48fT58vz9+/z9+/r9+fb79Pf79vX78/3+/PT68vv9+/T58vT58vf79fr9 +fb69fP68f3+/PL48fP68fz9+/n9+P3+/fb79Pj79/L48ff79fn89/f79fb79fj7 9/X68/P48fj89/f79fL48ff79ff79fr9+vv9+/n89/j89/f79/f79vn8+PT58/f7 9/f79fr9+ff79fj89/T48vn8+Pn7+Pr9+fz9+/j79/v9+/L48Pr9+ff79v7+/fn8 9/j89/n89/3+/PT48vv9+vr9+f3+/fz9+/X79Pn8+fL58fX79Pv9+vf79fb69fT4 8vr9+bOzs7Ozs7OzsywAAAAAEAAQAAAH/4AKIwAVDgMEZR80BR0DNkcIMgJzEG8L Gi5PBytgHxlnYS8CBWQQCV0NIVs3KjgNFEYWASITCAAJHm4EBjBXLW0eOQABAgIB EBIPG0xpcHolDBE5FjVEBlRrUBoLWjoHYgkZDwQgDCQYZlYKFA0tWRF0KBdDBSxy SSl4AAQbh+VCBdhEADJDzR0FAQgZIrDkwIwfMRyxeKFEgC0cDjRwoDEgjoEYCzis qDEqCKENDbBguIDGThUfLmRJqXXLxBQRGPg4OXHhgYRhxY41ieKAi4EDO1BkYKAg DwwZKW7cqtOhBI8DX/aMecChCAISJzqYMABgwAQvC5BIoDCih44AKgNCBAIAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=line2.gif Content-Type: image/gif; name=line2.gif Content-Location: http://forum.qip.ru/qipstyle/line2.gif Content-Transfer-Encoding: Base64 R0lGODlhCQAoAPcAAOXl5fT09O7u7vX19eHh4fHx8cjIyPLy8tTU1Obm5tnZ2e3t 7dDQ0M3NzfPz88PDw93d3evr68HBwbe3t7+/v+jo6Onp6cXFxQcHBwcHBwcHBwcH BwcHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAJACgAAAiMAAEIHEiwoMGDCBMmTMCw YUMLECNGjECxYkUBGDNq3MiRY4GPIEEeGEmSZICTKFOqRDmgpcuXMGPGXInSgc2b N2meDMlzgc+fPztirEC0aFECSJMmhcC0aVMFUKNGRUC1alUGWLNmbcC1a1cDYMOG vUC2bNkHaNOmlcC2bVsKcOPGnUC3bl2xeJXqDQgAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=line3.gif Content-Type: image/gif; name=line3.gif Content-Location: http://forum.qip.ru/qipstyle/line3.gif Content-Transfer-Encoding: Base64 R0lGODlhHAA0APcAAM/3rafLjs72rKXJjMz0q6rOkLbbmbnfnMDmobLXlr/loMry qajMjrPYl7jem8Hnoq3RkqXIjLXambTZmK7Sk6bJjabKjavPka/TlM31q6bJjLfd msvyqq/UlMrxqazQkcnwqM71rM30q872rafKjc31rMXspbrgnbTZl6nNj6zQkrzi n7fcmsbtpsjvp8TqpMLoosPpo8fup67Tk6jMj6jLjrjdm7HWlanNkKvQkbvhnb/m obXamKnMj8PqpMbtpcTrpcjwqLHVlbDVlbDUlL3jn8z0qs/2rcTrpMzzq8jvqMXr pcnxqbvgncLoo8fvp77koMfupsvzqr7kn8vzq8PppKrPkK3SkszzqqbLjafLjb7l oMbuprzinqbKjM73ranOj6nOkMnvqLzhnrLWlsPqo8vyqbPXl8vzqbvinbHWlrbc mbrfnL3insjup8nxqLvinsbup6XJjbfcm6zRkbPYlqjNj7nfm6rNkK3Sk8/2rLzj nqvPkM30rMjwp77jn832rK3Rk73kn8Lpo6vOkLvgnMbspcftp7/koKzRkrrhncrz qsHnocDnorDUlb3jnsXtprbbmrXbmafKjq/Ulcbtp7LYl6/VlMPrpMHoorDVlMXs pLrgnLvhnrHVlq/Tk8v0qsXtpcnwqanMjr/lobDVlsTspb7joKfMjsHooc73rLPZ mMfvqMHporHXlqrOj7DWlcftpsTqpb7locHpo8rwqKrNj8ryqrnem8Dnoa3Tk8nw p8LppKjLj6zSk8Hoo6vQkKnLj7zinbbcmsz1rM71q6fJjcPqpazRk7rfm8Lqo8bs psv0q6jNjsDmoLjdnMrxqMrxqsLposPrpabIjL3joLndm6nNjq3Qks32q872q73i n7Tambzhna7TksDoorXbmMDooa7SkqzPkc/3rLLXlwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAcADQAAAj/AAEIHEiwoMGDCBMqXMiw oUOER/R8OTLiC7kRRyiOkKhKFYAjH7/oASBSAAABIUaMEMBSwMoQLVW2ZLky5pES MEOEKFYCUAadPUv0FJAtQwltgEL81BlChNA+GTIQIyAiqtWofUSIyLpVqFERBAgY CUsWrIgkScgaMZIWLNmwIqRIoYKWLjO2VORi2WsElBEqWKgYwSIFCygqt8xwWMxh keLFZtAs4iCFQ+TFi9BERrN4wQIPnj17GA269IJbokN/Bh3tTa1ab0CA8MAkNog3 TEQxAVGbNwjduz2AgOZHTBA/SoIoSW58F3PZykH4CeICuRjjMmS4eKKd1RM3LsC7 /xgf3oWMJ6yUfHdznnuUQ7FicakUJYqMOO/jcJHBpQX9SvxxcUgc+P0QSguQGPLD Dy208AMkP5jgoAkMNriMgpC0cKAhJpgAxBJAhAiECUuU2KEpS2wyIombLGGKhyZs IssLPmCChA8vvICEjjlicgyOO9qIxDQvzAgEEmX4UEYMg8QQQxU+VBHDkrxA+aQy UioZgw9PlgEDDE44kQkMv4A5iJkwtAIDLdK0cqYTa4Ip5gN0ftMInQ80kkoqeD7A SCZ4MvJALnc+EA4jOyCQCwKJ7pAoo84gIOmkkj5qKQIKkIKIApxuusWmnM4SqgJb kFoqKZyWWsQfU5wyxaqrQv8BhSBTCDLrFFBUg6sgfxTxKhSndFHECns8sscKbRTb BbIrILtss9swW0Syj+gAhzBwpKFDF2OkkcYY2Y7RSSdj6GCutd18q0MnXRSiCCcn xFtIvJwookgTTcSbb74nNMGJDvsWcsDABN9xABsDI3zAHXewYTAbCidD8AEO4OKA AzbYgPHGF+NigzUaX7yxxs9cvMEcG7DAQsorn5zyBi+zgLINMsPMsgEGrLFGJAbw 3DPOBgwD9Bo5Az20ATxIkDQPkigtATdJSyABOJJE3bTUWPPAwwQTrIIC11+jIDbX YIdN9gQoeP11A3XU0QDbb5/xdgNnWPK22w3YLbfedCf/kAAZrvjttxoJBC743wmU gzjhZJDhdymeCKGGEELAMsQNsEh+w+ZCbH5DKTd0PoQnk3syxCUdDKE6JR1c4ggR lxChyRCUEOGII7UTQUQHmvBOxCcdfIJBB8MXj8EMHSSPwfHLE9+88BhQMIMuFFAg TvXeUC999TNsP0P3eXCfRx4QXJHIFRCkH0gg6V+BDPvtlw9BIOhDkIcvEKigAh0f 0EHH/on4QAD1h40P6M+AH0ggBAyogg9cwIEXiCAfckDBHIxjghSMoAYj+AFgRDAH fCBEAUZYACvwwQojRGEJU0jCAogwhYQIAx5wEIZX4AEPYSgAGHCwQ1u8Yoc0tAUP wWeowzDgIAU9sEMKkDiKHjTDDj1AYgpGkQIapACK10BiFK1oBwZ4MRi9YAANakAD GnjRi2WsgRjPeEYyMiAAAUAFHOcIRzkGoAYB0AIctYDHGvTxjgGwAAlIoAUSZGES JJjEJCyQhUAaMgCDzMIg80iCAGRBCxWwQCY1oEkLeKECFfDCJ41Bgkx6EpSm9IIF LKCBAQxAAxWQgytdKQcN2PKWGpADKC3wyli+MgKujAAwI0CNYQ5AmMY85jGB2Uph BgQAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=line5.gif Content-Type: image/gif; name=line5.gif Content-Location: http://forum.qip.ru/qipstyle/line5.gif Content-Transfer-Encoding: Base64 R0lGODlhBAAjANUAAM3Nzfn5+c7Ozubm5vX19f7//tLS0v////z8/evr69vb28/P z9DQ0NHR0ezr6/7+/9LT0+Dh4eHh4Pz8/Nzb283OztLS0/X19v38/PDx8fHw8dPS 0tfW1tbX1//+/ubm5eHg4ebl5s7Pz9DR0fDw8PDw8fHx8NbW1uDh4NHS0tvc2+Hg 4Nzb3M/Q0ODg4PHw8Nvb3Ovr7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAEACMAAAZjQAVFAZNEUK7BIDSIORwJ DcmUIRAuhIA2gJggMIXHo3AoHwpozwSDQGwDWGumpHkl7g7l4CNZRUAqLEIcJx0c BhAWG4iKBgYpBg0NIw0MDC0MCwsiCwICFZ6fAgCkpaanqKlBADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=line1.gif Content-Type: image/gif; name=line1.gif Content-Location: http://forum.qip.ru/qipstyle/line1.gif Content-Transfer-Encoding: Base64 R0lGODlhAwBYAPcAAND4rsXtp871rM/3rcHopMTrpsryqrjencjvqbngns72rbbc nL7mo77kob7losbuqKzRlbzjocfuqLrioLvioLnfnsnwqbPZm8nxqbHXmc30rMLp pLrhn9D/rsvzq8Pqpb/mo8Tspsz0rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAADAFgAQAhyADsI5ECQgMEHCEUoBMCw ocOHDRdIbECxgEUMGBVohMjxYYaPFUJSGMmg5IaTIVIiWGmgpYCXA2J2nElzJoSb F3Ie2Jmg54SfEYI6GAqiqEECH5JaLBCgqYSnFqK2NOChqoarLwXEHFCzq9evYDmu RBAQADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_global.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_global.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_global.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEhh bmRsZSBGaXJlYnVnIGNhbGxzIHdoZW4gRmlyZWJ1ZyBpcyBub3QgYXZhaWxhYmxl IChnZXRmaXJlYnVnLmNvbSkKKi8KaWYgKCF3aW5kb3cuY29uc29sZSB8fCAhY29u c29sZS5maXJlYnVnKQp7Cgl3aW5kb3cuY29uc29sZSA9IHt9OwoJdmFyIG5hbWVz ID0gWyJsb2ciLCAiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgImFz c2VydCIsICJkaXIiLCAiZGlyeG1sIiwgImdyb3VwIiwgImdyb3VwRW5kIiwgInRp bWUiLCAidGltZUVuZCIsICJjb3VudCIsICJ0cmFjZSIsICJwcm9maWxlIiwgInBy b2ZpbGVFbmQiXTsKCWZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyAr K2kpIHdpbmRvdy5jb25zb2xlW25hbWVzW2ldXSA9IGZ1bmN0aW9uKCkge307Cn0K Ci8qKgoqIEhhbmRsZSBZVUkgY3VzdG9tIGV2ZW50IGNhbGxzIHdoZW4gWVVJIGlz IG5vdCBhdmFpbGFibGUgKGNsaWVudHNjcmlwdC95dWkveWFob28tZG9tLWV2ZW50 LmpzKQoqLwppZiAodHlwZW9mIFlBSE9PID09ICJ1bmRlZmluZWQiKQp7CglmdW5j dGlvbiBudWxsX2V2ZW50KCkgeyB0aGlzLmZpcmUgPSBmdW5jdGlvbigpIHt9OyB0 aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge307IH07Cn0KCi8qKgoqIFNldHVw IFZhcmlhYmxlcwoqCiogQHZhcglzdHJpbmcJU0VTU0lPTlVSTCAtIHN0b3JlcyB0 aGUgc2Vzc2lvbiBVUkwKKiBAdmFyCXN0cmluZwlTRUNVUklUWVRPS0VOIC0gc3Rv cmVzIGFuIGFudGktQ1NSRiB2YWx1ZQoqIEB2YXIJYXJyYXkJdmJwaHJhc2UgLSBz dG9yZXMgdGV4dCBwaHJhc2VzCiogQHZhcglhcnJheQl2Ql9FZGl0b3IgLSBhcnJh eSBvZiB2Ql9UZXh0X0VkaXRvciBvYmplY3RzCiogQHZhcglib29sZWFuCWlnbm9y ZXF1b3RlY2hhcnMgLSBpZ25vcmUgY2hhcmFjdGVycyBpbnNpZGUgW3F1b3RlXSB0 YWdzIGZvciBtZXNzYWdlIGxlbmd0aCBjaGVjawoqIEB2YXIJaW50ZWdlcglwYWdl bmF2Y291bnRlciAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VuYXYgaW5zdGFu Y2VzIGVuY291bnRlcmVkIHNvIGZhcgoqIEB2YXIJYm9vbGVhbglpc19yZWdleHAg LSBkb2VzIHdpbmRvdy5yZWdFeHAgZXhpc3Q/IC0gQ2F0Y2ggZXJyb3JzIHdpdGgg bGVzcyBjYXBhYmxlIGJyb3dzZXJzCiogQHZhcglib29sZWFuCUFKQVhfQ29tcGF0 aWJsZSAtIGRvZXMgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0IEFKQVg/Ciog QHZhcglzdHJpbmcJcG9pbnRlcl9jdXJzb3IgLSBoZWxwIG91dCBvbGQgdmVyc2lv bnMgb2YgSUUgdGhhdCBkb24ndCB1bmRlcnN0YW5kIHN0eWxlLmN1cnNvciA9IHBv aW50ZXIKKi8KdmFyIFNFU1NJT05VUkwgICAgICAgPSAodHlwZW9mKFNFU1NJT05V UkwpID09ICJ1bmRlZmluZWQiID8gIiIgOiBTRVNTSU9OVVJMKTsKdmFyIFNFQ1VS SVRZVE9LRU4gICAgPSAodHlwZW9mKFNFQ1VSSVRZVE9LRU4pID09ICJ1bmRlZmlu ZWQiID8gIiIgOiBTRUNVUklUWVRPS0VOKTsKdmFyIHZicGhyYXNlICAgICAgICAg PSAodHlwZW9mKHZicGhyYXNlKSA9PSAidW5kZWZpbmVkIiA/IG5ldyBBcnJheSgp IDogdmJwaHJhc2UpOwp2YXIgdkJfRWRpdG9yICAgICAgICA9IG5ldyBBcnJheSgp Owp2YXIgaWdub3JlcXVvdGVjaGFycyA9IGZhbHNlOwp2YXIgcGFnZW5hdmNvdW50 ZXIgICA9IDA7CnZhciBpc19yZWdleHAgICAgICAgID0gKHdpbmRvdy5SZWdFeHAp ID8gdHJ1ZSA6IGZhbHNlOwp2YXIgQUpBWF9Db21wYXRpYmxlICA9IGZhbHNlOwp2 YXIgcG9pbnRlcl9jdXJzb3IgICA9IChpc19pZSA/ICdoYW5kJyA6ICdwb2ludGVy Jyk7CgovKioKKiBEZWZpbmUgdGhlIGJyb3dzZXIgbG9hZGluZyB0aGUgcGFnZQoq CiogQHZhcglzdHJpbmcJdXNlckFnZW50IFVzZXJhZ2VudCBzdHJpbmcKKiBAdmFy CWJvb2xlYW4JaXNfb3BlcmEgIE9wZXJhCiogQHZhcglib29sZWFuCWlzX3NhZiAg ICBTYWZhcmkKKiBAdmFyCWJvb2xlYW4JaXNfd2VidHYgIFdlYlRWCiogQHZhcgli b29sZWFuCWlzX2llICAgICBJbnRlcm5ldCBFeHBsb3JlcgoqIEB2YXIJYm9vbGVh bglpc19pZTQgICAgSW50ZXJuZXQgRXhwbG9yZXIgNAoqIEB2YXIJYm9vbGVhbglp c19pZTcgICAgSW50ZXJuZXQgRXhwbG9yZXIgNwoqIEB2YXIJYm9vbGVhbglpc19w czMgICAgUGxheXN0YXRpb24gMwoqIEB2YXIJYm9vbGVhbglpc19tb3ogICAgTW96 aWxsYSAvIEZpcmVmb3ggLyBDYW1pbm8KKiBAdmFyCWJvb2xlYW4JaXNfa29uICAg IEtvbnF1ZXJvcgoqIEB2YXIJYm9vbGVhbglpc19ucyAgICAgTmV0c2NhcGUKKiBA dmFyCWJvb2xlYW4JaXNfbnM0ICAgIE5ldHNjYXBlIDQKKiBAdmFyCWJvb2xlYW4J aXNfbWFjICAgIENsaWVudCBpcyBydW5uaW5nIE1hY09TCiovCnZhciB1c2VyQWdl bnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CnZhciBpc19v cGVyYSAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdvcGVyYScpICE9IC0xKSB8fCAo dHlwZW9mKHdpbmRvdy5vcGVyYSkgIT0gJ3VuZGVmaW5lZCcpKTsKdmFyIGlzX3Nh ZiAgICA9ICgodXNlckFnZW50LmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEp IHx8IChuYXZpZ2F0b3IudmVuZG9yID09ICdBcHBsZSBDb21wdXRlciwgSW5jLicp KTsKdmFyIGlzX3dlYnR2ICA9ICh1c2VyQWdlbnQuaW5kZXhPZignd2VidHYnKSAh PSAtMSk7CnZhciBpc19pZSAgICAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdtc2ll JykgIT0gLTEpICYmICghaXNfb3BlcmEpICYmICghaXNfc2FmKSAmJiAoIWlzX3dl YnR2KSk7CnZhciBpc19pZTQgICAgPSAoKGlzX2llKSAmJiAodXNlckFnZW50Lmlu ZGV4T2YoJ21zaWUgNC4nKSAhPSAtMSkpOwp2YXIgaXNfaWU3ICAgID0gKChpc19p ZSkgJiYgKHVzZXJBZ2VudC5pbmRleE9mKCdtc2llIDcuJykgIT0gLTEpKTsKdmFy IGlzX3BzMyAgICA9ICh1c2VyQWdlbnQuaW5kZXhPZigncGxheXN0YXRpb24gMycp ICE9IC0xKTsKdmFyIGlzX21veiAgICA9ICgobmF2aWdhdG9yLnByb2R1Y3QgPT0g J0dlY2tvJykgJiYgKCFpc19zYWYpKTsKdmFyIGlzX2tvbiAgICA9ICh1c2VyQWdl bnQuaW5kZXhPZigna29ucXVlcm9yJykgIT0gLTEpOwp2YXIgaXNfbnMgICAgID0g KCh1c2VyQWdlbnQuaW5kZXhPZignY29tcGF0aWJsZScpID09IC0xKSAmJiAodXNl ckFnZW50LmluZGV4T2YoJ21vemlsbGEnKSAhPSAtMSkgJiYgKCFpc19vcGVyYSkg JiYgKCFpc193ZWJ0dikgJiYgKCFpc19zYWYpKTsKdmFyIGlzX25zNCAgICA9ICgo aXNfbnMpICYmIChwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgPT0gNCkp Owp2YXIgaXNfbWFjICAgID0gKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMnKSAhPSAt MSk7CgovKioKKiBXb3JrYXJvdW5kIGZvciBoZWlub3VzIElFIGJ1ZyAtIGFkZCBz cGVjaWFsIHZCbGVuZ3RoIHByb3BlcnR5IHRvIGFsbCBzdHJpbmdzCiogVGhpcyBt ZXRob2QgaXMgYXBwbGllZCB0byBBTEwgc3RyaW5nIG9iamVjdHMgYXV0b21hdGlj YWxseQoqCiogQHJldHVybglpbnRlZ2VyCiovClN0cmluZy5wcm90b3R5cGUudkJs ZW5ndGggPSBmdW5jdGlvbigpCnsKCXJldHVybiAoaXNfaWUgJiYgdGhpcy5pbmRl eE9mKCJcbiIpICE9IC0xKSA/IHRoaXMucmVwbGFjZSgvXHI/XG4vZywgIl8iKS5s ZW5ndGggOiB0aGlzLmxlbmd0aDsKfQoKLyoqCiogT3ZlcnJpZGVzIElFJ3Mgb3Jp Z2luYWwgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgdG8gYWNjZXB0IG5lZ2F0aXZl IHZhbHVlcwoqCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIHN0YXJ0IHBvc2l0 aW9uCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIGxlbmd0aAoqCiogQHJldHVy bglzdHJpbmcKKi8KaWYgKCIxMjM0Ii5zdWJzdHIoLTIsIDIpID09ICIxMiIpIC8v ICh3aGljaCB3b3VsZCBiZSBpbmNvcnJlY3QpCnsKCVN0cmluZy5wcm90b3R5cGUu c3Vic3RyX29yaWcgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0cjsKCglTdHJpbmcu cHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpCgl7CgkJ aWYgKHR5cGVvZihsZW5ndGgpID09ICJ1bmRlZmluZWQiKQoJCXsKCQkJcmV0dXJu IHRoaXMuc3Vic3RyX29yaWcoKHN0YXJ0IDwgMCA/IHRoaXMubGVuZ3RoICsgc3Rh cnQgOiBzdGFydCkpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gdGhpcy5zdWJz dHJfb3JpZygoc3RhcnQgPCAwID8gdGhpcy5sZW5ndGggKyBzdGFydCA6IHN0YXJ0 KSwgbGVuZ3RoKTsKCQl9Cgl9Owp9CgovKioKKiBEZWZpbmUgQXJyYXkuc2hpZnQo KSBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBoYXZlIGl0CiovCmlmICh0eXBlb2Yg QXJyYXkucHJvdG90eXBlLnNoaWZ0ID09PSAndW5kZWZpbmVkJykKewoJQXJyYXku cHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKQoJewoJCWZvcih2YXIgaSA9IDAs IGIgPSB0aGlzWzBdLCBsID0gdGhpcy5sZW5ndGgtMTsgaSA8IGw7IGkrKykKCQl7 CgkJCXRoaXNbaV0gPSB0aGlzW2kgKyAxXTsKCQl9CgkJdGhpcy5sZW5ndGgtLTsK CQlyZXR1cm4gYjsKCX07Cn0KCi8qKgoqIEZ1bmN0aW9uIHRvIGVtdWxhdGUgZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQKKgoqIEBwYXJhbQlzdHJpbmcJT2JqZWN0IElE CioKKiBAcmV0dXJuCW1peGVkCW51bGwgaWYgbm90IGZvdW5kLCBvYmplY3QgaWYg Zm91bmQKKi8KZnVuY3Rpb24gZmV0Y2hfb2JqZWN0KGlkbmFtZSkKewoJaWYgKGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKQoJewoJCXJldHVybiBkb2N1bWVudC5nZXRF bGVtZW50QnlJZChpZG5hbWUpOwoJfQoJZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQoJ ewoJCXJldHVybiBkb2N1bWVudC5hbGxbaWRuYW1lXTsKCX0KCWVsc2UgaWYgKGRv Y3VtZW50LmxheWVycykKCXsKCQlyZXR1cm4gZG9jdW1lbnQubGF5ZXJzW2lkbmFt ZV07Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KCi8qKgoqIEZ1bmN0 aW9uIHRvIGVtdWxhdGUgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUKKgoq IEBwYXJhbQlvYmplY3QJUGFyZW50IG9iamVjdCAoZWc6IGRvY3VtZW50KQoqIEBw YXJhbQlzdHJpbmcJVGFnIHR5cGUgKGVnOiAndGQnKQoqCiogQHJldHVybglhcnJh eQoqLwpmdW5jdGlvbiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKQp7CglpZiAo cGFyZW50b2JqID09IG51bGwpCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQoJ ZWxzZSBpZiAodHlwZW9mIHBhcmVudG9iai5nZXRFbGVtZW50c0J5VGFnTmFtZSAh PSAndW5kZWZpbmVkJykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmdldEVsZW1lbnRz QnlUYWdOYW1lKHRhZyk7Cgl9CgllbHNlIGlmIChwYXJlbnRvYmouYWxsICYmIHBh cmVudG9iai5hbGwudGFncykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmFsbC50YWdz KHRhZyk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQp9Cgov KioKKiBGdW5jdGlvbiB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gYW4g b2JqZWN0CioKKiBAcGFyYW0Jb2JqZWN0CVBhcmVudCBvYmplY3QgKGVnOiBkb2N1 bWVudCkKKiBAcGFyYW0Jc3RyaW5nCVRhZyB0eXBlIChlZzogJ3RkJykKKgoqIEBy ZXR1cm4JaW50ZWdlcgoqLwpmdW5jdGlvbiBmZXRjaF90YWdfY291bnQocGFyZW50 b2JqLCB0YWcpCnsKCXJldHVybiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKS5s ZW5ndGg7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIEV2 ZW50IGhhbmRsZXJzCgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQgZXZlbnQg bW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMgZXZlbnQg YnViYmxpbmcKKgoqIEBwYXJhbQlldmVudAlFdmVudCBvYmplY3QKKgoqIEByZXR1 cm4JZXZlbnQKKi8KZnVuY3Rpb24gZG9fYW5fZShldmVudG9iaikKewoJaWYgKCFl dmVudG9iaiB8fCBpc19pZSkKCXsKCQl3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUg PSBmYWxzZTsKCQl3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQly ZXR1cm4gd2luZG93LmV2ZW50OwoJfQoJZWxzZQoJewoJCWV2ZW50b2JqLnN0b3BQ cm9wYWdhdGlvbigpOwoJCWV2ZW50b2JqLnByZXZlbnREZWZhdWx0KCk7CgkJcmV0 dXJuIGV2ZW50b2JqOwoJfQp9CgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQg ZXZlbnQgbW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMg ZXZlbnQgYnViYmxpbmcgaW4gYSBsZXNzZXIgd2F5IHRoYW4gZG9fYW5fZSgpCioK KiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCWV2ZW50Ciov CmZ1bmN0aW9uIGVfYnlfZ3VtKGV2ZW50b2JqKQp7CglpZiAoIWV2ZW50b2JqIHx8 IGlzX2llKQoJewoJCXdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ CXJldHVybiB3aW5kb3cuZXZlbnQ7Cgl9CgllbHNlCgl7CgkJaWYgKGV2ZW50b2Jq LnRhcmdldC50eXBlID09ICdzdWJtaXQnKQoJCXsKCQkJLy8gbmF1Z2h0eSBzYWZh cmkKCQkJZXZlbnRvYmoudGFyZ2V0LmZvcm0uc3VibWl0KCk7CgkJfQoJCWV2ZW50 b2JqLnN0b3BQcm9wYWdhdGlvbigpOwoJCXJldHVybiBldmVudG9iajsKCX0KfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gTWVzc2FnZSBtYW5p cHVsYXRpb24gYW5kIHZhbGlkYXRpb24KCi8qKgoqIENoZWNrcyB0aGF0IGEgbWVz c2FnZSBpcyB2YWxpZCBmb3Igc3VibWlzc2lvbiB0byBQSFAKKgoqIEBwYXJhbQlz dHJpbmcJTWVzc2FnZSB0ZXh0CiogQHBhcmFtCW1peGVkCUVpdGhlciBzdWJqZWN0 IHRleHQgKGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMpIG9yIDAg aWYgeW91IGRvbid0IGNhcmUKKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFjY2Vw dGFibGUgY2hhcmFjdGVyIGxpbWl0IGZvciB0aGUgbWVzc2FnZQoqCiogQHJldHVy bglib29sZWFuCiovCmZ1bmN0aW9uIHZhbGlkYXRlbWVzc2FnZShtZXNzYWdldGV4 dCwgc3ViamVjdHRleHQsIG1pbmNoYXJzKQp7CglpZiAoaXNfa29uIHx8IGlzX3Nh ZiB8fCBpc193ZWJ0dikKCXsKCQkvLyBpZ25vcmUgbGVzcy10aGFuLWNhcGFibGUg YnJvd3NlcnMKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UgaWYgKHN1YmplY3R0ZXh0 Lmxlbmd0aCA8IDEpCgl7CgkJLy8gc3ViamVjdCBub3Qgc3BlY2lmaWVkCgkJYWxl cnQodmJwaHJhc2VbJ211c3RfZW50ZXJfc3ViamVjdCddKTsKCQlyZXR1cm4gZmFs c2U7Cgl9CgllbHNlCgl7CgkJdmFyIHN0cmlwcGVkID0gUEhQLnRyaW0oc3RyaXBj b2RlKG1lc3NhZ2V0ZXh0LCBmYWxzZSwgaWdub3JlcXVvdGVjaGFycykpOwoKCQlp ZiAoc3RyaXBwZWQubGVuZ3RoIDwgbWluY2hhcnMpCgkJewoJCQkvLyBtaW5pbXVt IG1lc3NhZ2UgbGVuZ3RoIG5vdCBtZXQKCQkJYWxlcnQoY29uc3RydWN0X3BocmFz ZSh2YnBocmFzZVsnbWVzc2FnZV90b29fc2hvcnQnXSwgbWluY2hhcnMpKTsKCQkJ cmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlIGlmICh0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtLmltYWdlc3RhbXApICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJLy8g VGhpcyBmb3JtIGhhcyBpbWFnZSB2ZXJpZmljYXRpb24gZW5hYmxlZAoJCQlkb2N1 bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC5mYWlsZWQgPSBmYWxzZTsKCgkJ CWlmIChkb2N1bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC52YWx1ZS5sZW5n dGggIT0gNikKCQkJewoJCQkJYWxlcnQodmJwaHJhc2VbJ2NvbXBsZXRlX2ltYWdl X3ZlcmlmaWNhdGlvbiddKTsKCQkJCWRvY3VtZW50LmZvcm1zLnZiZm9ybS5pbWFn ZXN0YW1wLmZhaWxlZCA9IHRydWU7CgkJCQlkb2N1bWVudC5mb3Jtcy52YmZvcm0u aW1hZ2VzdGFtcC5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWVs c2UKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJ Ly8gZXZlcnl0aGluZyBzZWVtcyBvawoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0K CgovKioKKiBTdHJpcHMgcXVvdGVzIGFuZCBiYmNvZGUgdGFncyBmcm9tIHRleHQK KgoqIEBwYXJhbQlzdHJpbmcJVGV4dCB0byBtYW5pcHVsYXRlCiogQHBhcmFtCWJv b2xlYW4JSWYgdHJ1ZSwgc3RyaXAgPHg+IG90aGVyd2lzZSBzdHJpcCBbeF0KKiBA cGFyYW0JYm9vbGVhbglJZiB0cnVlLCBzdHJpcCBhbGwgW3F1b3RlXS4uLmNvbnRl bnRzLi4uWy9xdW90ZV0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIHN0 cmlwY29kZShzdHIsIGlzaHRtbCwgc3RyaXBxdW90ZXMpCnsKCWlmICghaXNfcmVn ZXhwKQoJewoJCXJldHVybiBzdHI7Cgl9CgoJaWYgKHN0cmlwcXVvdGVzKQoJewoJ CXZhciBzdGFydF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CgoJCXdoaWxl ICgoc3RhcnRpbmRleCA9IFBIUC5zdHJpcG9zKHN0ciwgJ1txdW90ZScpKSAhPT0g ZmFsc2UpCgkJewoJCQlpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydF90 aW1lID4gMjAwMCkKCQkJewoJCQkJLy8gd2hpbGUgbG9vcCBoYXMgYmVlbiBydW5u aW5nIGZvciBvdmVyIDIgc2Vjb25kcyBhbmQgaGFzIHByb2JhYmx5IGdvbmUgaW5m aW5pdGUKCQkJCWJyZWFrOwoJCQl9CgoJCQlpZiAoKHN0b3BpbmRleCA9IFBIUC5z dHJpcG9zKHN0ciwgJ1svcXVvdGVdJykpICE9PSBmYWxzZSkKCQkJewoJCQkJZnJh Z21lbnQgPSBzdHIuc3Vic3RyKHN0YXJ0aW5kZXgsIHN0b3BpbmRleCAtIHN0YXJ0 aW5kZXggKyA4KTsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKGZyYWdtZW50LCAnJyk7 CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlzdHIgPSBQSFAu dHJpbShzdHIpOwoJCX0KCX0KCglpZiAoaXNodG1sKQoJewoJCS8vIGV4ZW1wdCBp bWFnZSB0YWdzIC0tIHRoZXkgbmVlZCB0byBjb3VudCBhcyBjaGFyYWN0ZXJzIGlu IHRoZSBzdHJpbmcKCQkvLyBhcyB0aGUgZG8gYXMgQkIgY29kZXMKCQlzdHIgPSBz dHIucmVwbGFjZSgvPGltZ1tePl0rc3JjPSIoW14iXSspIltePl0qPi9naSwgJyQx Jyk7CgoJCXZhciBodG1sMSA9IG5ldyBSZWdFeHAoIjwoXFx3KylbXj5dKj4iLCAn Z2knKTsKCQl2YXIgaHRtbDIgPSBuZXcgUmVnRXhwKCI8XFwvXFx3Kz4iLCAnZ2kn KTsKCgkJc3RyID0gc3RyLnJlcGxhY2UoaHRtbDEsICcnKTsKCQlzdHIgPSBzdHIu cmVwbGFjZShodG1sMiwgJycpOwoKCQl2YXIgaHRtbDMgPSBuZXcgUmVnRXhwKCco Jm5ic3A7KScsICdnaScpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKGh0bWwzLCAnICcp OwoJfQoJZWxzZQoJewoJCXZhciBiYmNvZGUxID0gbmV3IFJlZ0V4cCgiXFxbKFxc dyspKD1bXlxcXV0qKT9cXF0iLCAnZ2knKTsKCQl2YXIgYmJjb2RlMiA9IG5ldyBS ZWdFeHAoIlxcW1xcLyhcXHcrKVxcXSIsICdnaScpOwoKCQlzdHIgPSBzdHIucmVw bGFjZShiYmNvZGUxLCAnJyk7CgkJc3RyID0gc3RyLnJlcGxhY2UoYmJjb2RlMiwg JycpOwoJfQoKCXJldHVybiBzdHI7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi8vIHZCX1BIUF9FbXVsYXRvciBjbGFzcwovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKLyoqCiogUEhQIEZ1bmN0aW9uIEVtdWxhdG9y IENsYXNzCiovCmZ1bmN0aW9uIHZCX1BIUF9FbXVsYXRvcigpCnsKfQoKLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gdkJfUEhQX0VtdWxhdG9yIE1l dGhvZHMKCi8qKgoqIEZpbmQgYSBzdHJpbmcgd2l0aGluIGEgc3RyaW5nIChjYXNl IGluc2Vuc2l0aXZlKQoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJh bQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWludGVnZXIJT2Zmc2V0CioKKiBAcmV0 dXJuCW1peGVkCU5vdCBmb3VuZDogZmFsc2UgLyBGb3VuZDogaW50ZWdlciBwb3Np dGlvbgoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnN0cmlwb3MgPSBmdW5j dGlvbihoYXlzdGFjaywgbmVlZGxlLCBvZmZzZXQpCnsKCWlmICh0eXBlb2Ygb2Zm c2V0ID09ICd1bmRlZmluZWQnKQoJewoJCW9mZnNldCA9IDA7Cgl9CgoJaW5kZXgg PSBoYXlzdGFjay50b0xvd2VyQ2FzZSgpLmluZGV4T2YobmVlZGxlLnRvTG93ZXJD YXNlKCksIG9mZnNldCk7CgoJcmV0dXJuIChpbmRleCA9PSAtMSA/IGZhbHNlIDog aW5kZXgpOwp9CgovKioKKiBUcmltcyBsZWFkaW5nIHdoaXRlc3BhY2UKKgoqIEBw YXJhbQlzdHJpbmcJU3RyaW5nIHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubHRyaW0gPSBmdW5jdGlvbihzdHIp CnsKCXJldHVybiBzdHIucmVwbGFjZSgvXlxzKy9nLCAnJyk7Cn0KCi8qKgoqIFRy aW1zIHRyYWlsaW5nIHdoaXRlc3BhY2UKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5n IHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZCX1BIUF9FbXVsYXRvci5w cm90b3R5cGUucnRyaW0gPSBmdW5jdGlvbihzdHIpCnsKCXJldHVybiBzdHIucmVw bGFjZSgvKFxzKykkL2csICcnKTsKfQoKLyoqCiogVHJpbXMgbGVhZGluZyBhbmQg dHJhaWxpbmcgd2hpdGVzcGFjZQoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgdG8g dHJpbQoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3Rv dHlwZS50cmltID0gZnVuY3Rpb24oc3RyKQp7CglyZXR1cm4gdGhpcy5sdHJpbSh0 aGlzLnJ0cmltKHN0cikpOwp9CgovKioKKiBFbXVsYXRpb24gb2YgUEhQJ3MgcHJl Z19xdW90ZSgpCioKKiBAcGFyYW0Jc3RyaW5nCVN0cmluZyB0byBwcm9jZXNzCioK KiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnBy ZWdfcXVvdGUgPSBmdW5jdGlvbihzdHIpCnsKCS8vIHJlcGxhY2UgKyB7IH0gKCAp IFsgXSB8IC8gPyBeICQgXCAuID0gISA8ID4gOiAqIHdpdGggYmFja3NsYXNoK2No YXJhY3RlcgoJcmV0dXJuIHN0ci5yZXBsYWNlKC8oXCt8XHt8XH18XCh8XCl8XFt8 XF18XHx8XC98XD98XF58XCR8XFx8XC58XD18XCF8XDx8XD58XDp8XCopL2csICJc XCQxIik7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHByZWdfbWF0Y2hfYWxsKCku Li4gc29ydCBvZgoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJhbQlz dHJpbmcJUmVndWxhciBleHByZXNzaW9uIC0gdG8gYmUgaW5zZXJ0ZWQgaW50byBS ZWdFeHAoeCkKKgoqIEByZXR1cm4JbWl4ZWQJQXJyYXkgb24gbWF0Y2gsIGZhbHNl IG9uIG5vIG1hdGNoCiovCnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubWF0Y2hf YWxsID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkKewoJdmFyIGdtYXRjaCA9IHN0 cmluZy5tYXRjaChSZWdFeHAocmVnZXgsICJnaW0iKSk7CglpZiAoZ21hdGNoKQoJ ewoJCXZhciBtYXRjaGVzID0gbmV3IEFycmF5KCk7CgoJCXZhciBpcmVnZXggPSBu ZXcgUmVnRXhwKHJlZ2V4LCAiaW0iKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGdt YXRjaC5sZW5ndGg7IGkrKykKCQl7CgkJCW1hdGNoZXNbbWF0Y2hlcy5sZW5ndGhd ID0gZ21hdGNoW2ldLm1hdGNoKGlyZWdleCk7CgkJfQoKCQlyZXR1cm4gbWF0Y2hl czsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIEVtdWxh dGVzIHVuaHRtbHNwZWNpYWxjaGFycyBpbiB2QnVsbGV0aW4KKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5odG1sc3BlY2lhbGNoYXJzID0gZnVu Y3Rpb24oc3RyKQp7CglmID0gbmV3IEFycmF5KC8mbHQ7L2csIC8mZ3Q7L2csIC8m cXVvdDsvZywgLyZhbXA7L2cpOwoJciA9IG5ldyBBcnJheSgnPCcsICc+JywgJyIn LCAnJicpOwoKCWZvciAodmFyIGkgaW4gZikKCXsKCQlzdHIgPSBzdHIucmVwbGFj ZShmW2ldLCByW2ldKTsKCX0KCglyZXR1cm4gc3RyOwp9CgovKioKKiBVbmVzY2Fw ZSBDREFUQSBmcm9tIHZCX0FKQVhfWE1MX0J1aWxkZXIgUEhQIGNsYXNzCioKKiBA cGFyYW0Jc3RyaW5nCUVzY2FwZWQgQ0RBVEEKKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5lc2NhcGVfY2RhdGEgPSBmdW5j dGlvbihzdHIpCnsKCXZhciByMSA9IC88XD1cIVw9XFtcPUNcPURcPUFcPVRcPUFc PVxbL2c7Cgl2YXIgcjIgPSAvXF1cPVxdXD0+L2c7CgoJcmV0dXJuIHN0ci5yZXBs YWNlKHIxLCAnPCFbQ0RBVEFbJykucmVwbGFjZShyMiwgJ11dPicpOwp9CgovKioK KiBFbXVsYXRlcyBQSFAncyBodG1sc3BlY2lhbGNoYXJzKCkKKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUuaHRtbHNwZWNpYWxjaGFycyA9IGZ1bmN0 aW9uKHN0cikKewoJLy92YXIgZiA9IG5ldyBBcnJheSgvJig/ISNbMC05XSs7KS9n LCAvPC9nLCAvPi9nLCAvIi9nKTsKCXZhciBmID0gbmV3IEFycmF5KAoJCShpc19t YWMgJiYgaXNfaWUgPyBuZXcgUmVnRXhwKCcmJywgJ2cnKSA6IG5ldyBSZWdFeHAo JyYoPyEjWzAtOV0rOyknLCAnZycpKSwKCQluZXcgUmVnRXhwKCc8JywgJ2cnKSwK CQluZXcgUmVnRXhwKCc+JywgJ2cnKSwKCQluZXcgUmVnRXhwKCciJywgJ2cnKQoJ KTsKCXZhciByID0gbmV3IEFycmF5KAoJCScmYW1wOycsCgkJJyZsdDsnLAoJCScm Z3Q7JywKCQknJnF1b3Q7JwoJKTsKCglmb3IgKHZhciBpID0gMDsgaSA8IGYubGVu Z3RoOyBpKyspCgl7CgkJc3RyID0gc3RyLnJlcGxhY2UoZltpXSwgcltpXSk7Cgl9 CgoJcmV0dXJuIHN0cjsKfQoKLyoqCiogU2VhcmNoZXMgYW4gYXJyYXkgZm9yIGEg dmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWFycmF5CUhh eXN0YWNrCiogQHBhcmFtCWJvb2xlYW4JQ2FzZSBpbnNlbnNpdGl2ZQoqCiogQHJl dHVybglpbnRlZ2VyCU5vdCBmb3VuZDogLTEgLyBGb3VuZDogaW50ZWdlciBpbmRl eAoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLmluX2FycmF5ID0gZnVuY3Rp b24oaW5lZWRsZSwgaGF5c3RhY2ssIGNhc2VpbnNlbnNpdGl2ZSkKewoJdmFyIG5l ZWRsZSA9IG5ldyBTdHJpbmcoaW5lZWRsZSk7CgoJaWYgKGNhc2VpbnNlbnNpdGl2 ZSkKCXsKCQluZWVkbGUgPSBuZWVkbGUudG9Mb3dlckNhc2UoKTsKCQlmb3IgKHZh ciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhheXN0YWNrW2ldLnRvTG93ZXJD YXNlKCkgPT0gbmVlZGxlKQoJCQl7CgkJCQlyZXR1cm4gaTsKCQkJfQoJCX0KCX0K CWVsc2UKCXsKCQlmb3IgKHZhciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhh eXN0YWNrW2ldID09IG5lZWRsZSkKCQkJewoJCQkJcmV0dXJuIGk7CgkJCX0KCQl9 Cgl9CglyZXR1cm4gLTE7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHN0cnBhZCgp CioKKiBAcGFyYW0Jc3RyaW5nCVRleHQgdG8gcGFkCiogQHBhcmFtCWludGVnZXIJ TGVuZ3RoIHRvIHBhZAoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2gg dG8gcGFkCioKKiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJv dG90eXBlLnN0cl9wYWQgPSBmdW5jdGlvbih0ZXh0LCBsZW5ndGgsIHBhZHN0cmlu ZykKewoJdGV4dCA9IG5ldyBTdHJpbmcodGV4dCk7CglwYWRzdHJpbmcgPSBuZXcg U3RyaW5nKHBhZHN0cmluZyk7CgoJaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKQoJ ewoJCXBhZHRleHQgPSBuZXcgU3RyaW5nKHBhZHN0cmluZyk7CgoJCXdoaWxlIChw YWR0ZXh0Lmxlbmd0aCA8IChsZW5ndGggLSB0ZXh0Lmxlbmd0aCkpCgkJewoJCQlw YWR0ZXh0ICs9IHBhZHN0cmluZzsKCQl9CgoJCXRleHQgPSBwYWR0ZXh0LnN1YnN0 cigwLCAobGVuZ3RoIC0gdGV4dC5sZW5ndGgpKSArIHRleHQ7Cgl9CgoJcmV0dXJu IHRleHQ7Cn0KCi8qKgoqIEEgc29ydCBvZiBlbXVsYXRpb24gb2YgUEhQJ3MgdXJs ZW5jb2RlIC0gbm90IDEwMCUgdGhlIHNhbWUsIGJ1dCBhY2NvbXBsaXNoZXMgdGhl IHNhbWUgdGhpbmcKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGVuY29kZQoq CiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3RvdHlwZS51 cmxlbmNvZGUgPSBmdW5jdGlvbih0ZXh0KQp7Cgl0ZXh0ID0gZXNjYXBlKHRleHQu dG9TdHJpbmcoKSkucmVwbGFjZSgvXCsvZywgIiUyQiIpOwoKCS8vIHRoaXMgZXNj YXBlcyAxMjggLSAyNTUsIGFzIEpTIHVzZXMgdGhlIHVuaWNvZGUgY29kZSBwb2lu dHMgZm9yIHRoZW0uCgkvLyBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHN1Ym1p dHRpbmcgdGV4dCB2aWEgQUpBWCB3aXRoIHRoZSBVVEYtOCBjaGFyc2V0LgoJdmFy IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC8oJShbMC05QS1GXXsyfSkpL2dpKTsKCWlm IChtYXRjaGVzKQoJewoJCWZvciAodmFyIG1hdGNoaWQgPSAwOyBtYXRjaGlkIDwg bWF0Y2hlcy5sZW5ndGg7IG1hdGNoaWQrKykKCQl7CgkJCXZhciBjb2RlID0gbWF0 Y2hlc1ttYXRjaGlkXS5zdWJzdHJpbmcoMSwzKTsKCQkJaWYgKHBhcnNlSW50KGNv ZGUsIDE2KSA+PSAxMjgpCgkJCXsKCQkJCXRleHQgPSB0ZXh0LnJlcGxhY2UobWF0 Y2hlc1ttYXRjaGlkXSwgJyV1MDAnICsgY29kZSk7CgkJCX0KCQl9Cgl9CgoJLy8g JTI1IGdldHMgdHJhbnNsYXRlZCB0byAlIGJ5IFBIUCwgc28gaWYgeW91IGhhdmUg JTI1dTEyMzQsCgkvLyB3ZSBzZWUgaXQgYXMgJXUxMjM0IGFuZCBpdCBnZXRzIHRy YW5zbGF0ZWQuIFNvIG1ha2UgaXQgJXUwMDI1dTEyMzQsCgkvLyB3aGljaCB3aWxs IHByaW50IGFzICV1MTIzNCEKCXRleHQgPSB0ZXh0LnJlcGxhY2UoJyUyNScsICcl dTAwMjUnKTsKCglyZXR1cm4gdGV4dDsKfQoKLyoqCiogV29ya3MgYSBiaXQgbGlr ZSB1Y2ZpcnN0LCBidXQgd2l0aCBzb21lIGV4dHJhIG9wdGlvbnMKKgoqIEBwYXJh bQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2ggdG8gd29yawoqIEBwYXJhbQlzdHJp bmcJQ3V0IG9mZiBzdHJpbmcgYmVmb3JlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGlz IHN0cmluZwoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnBy b3RvdHlwZS51Y2ZpcnN0ID0gZnVuY3Rpb24oc3RyLCBjdXRvZmYpCnsKCWlmICh0 eXBlb2YgY3V0b2ZmICE9ICd1bmRlZmluZWQnKQoJewoJCXZhciBjdXRwb3MgPSBz dHIuaW5kZXhPZihjdXRvZmYpOwoJCWlmIChjdXRwb3MgPiAwKQoJCXsKCQkJc3Ry ID0gc3RyLnN1YnN0cigwLCBjdXRwb3MpOwoJCX0KCX0KCglzdHIgPSBzdHIuc3Bs aXQoJyAnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKQoJ ewoJCXN0cltpXSA9IHN0cltpXS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSAr IHN0cltpXS5zdWJzdHIoMSk7Cgl9CglyZXR1cm4gc3RyLmpvaW4oJyAnKTsKfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gdkJfQUpBWF9IYW5k bGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiBYTUwg U2VuZGVyIENsYXNzCioKKiBAcGFyYW0JYm9vbGVhbglTaG91bGQgY29ubmVjdGlv bnMgYmUgYXN5bmNyb25vdXM/CiovCmZ1bmN0aW9uIHZCX0FKQVhfSGFuZGxlcihh c3luYykKewoJLyoqCgkqIFNob3VsZCBjb25uZWN0aW9ucyBiZSBhc3luY2hyb25v dXM/CgkqCgkqIEB2YXIJYm9vbGVhbgoJKi8KCXRoaXMuYXN5bmMgPSBhc3luYyA/ IHRydWUgOiBmYWxzZTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLy8gdkJfQUpBWF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemVz IHRoZSBYTUwgaGFuZGxlcgoqCiogQHJldHVybglib29sZWFuCVRydWUgaWYgaGFu ZGxlciBjcmVhdGVkIE9LCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaW5p dCA9IGZ1bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0g J3VuZGVmaW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlz YWJsZSBhbGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAo dHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICJ1bmRlZmluZWQiKQoJewoJCXRoaXMu aGFuZGxlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJldHVybiAodGhpcy5o YW5kbGVyLnNldFJlcXVlc3RIZWFkZXIgPyB0cnVlIDogZmFsc2UpOwoJfQoJZWxz ZSBpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl0aGlzLmhhbmRsZXIgPSBldmFs KCJuZXcgQSIgKyAiY3RpdiIgKyAiZVgiICsgIk9iIiArICJqZWN0KCdNaWNyIiAr ICJvc29mdC5YTSIgKyAiTEhUVFAnKTsiKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVs c2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIERldGVjdHMgaWYgdGhl IGJyb3dzZXIgaXMgZnVsbHkgY29tcGF0aWJsZQoqCiogQHJldHVybglib29sZWFu CiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaXNfY29tcGF0aWJsZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0gJ3VuZGVm aW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlzYWJsZSBh bGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAoaXNfaWUg JiYgIWlzX2llNCkgeyByZXR1cm4gdHJ1ZTsgfQoJZWxzZSBpZiAodHlwZW9mIFhN TEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKQoJewoJCXRyeSB7IHJldHVybiBY TUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlciA/IHRydWUg OiBmYWxzZTsgfQoJCWNhdGNoKGUpCgkJewoJCQl0cnkgeyB2YXIgdGVzdGVyID0g bmV3IFhNTEh0dHBSZXF1ZXN0KCk7IHJldHVybiB0ZXN0ZXIuc2V0UmVxdWVzdEhl YWRlciA/IHRydWUgOiBmYWxzZTsgfQoJCQljYXRjaChlKSB7IHJldHVybiBmYWxz ZTsgfQoJCX0KCX0KCWVsc2UgeyByZXR1cm4gZmFsc2U7IH0KfQoKLyoqCiogQ2hl Y2tzIGlmIHRoZSBzeXN0ZW0gaXMgcmVhZHkKKgoqIEByZXR1cm4JYm9vbGVhbglG YWxzZSBpZiByZWFkeQoqLwp2Ql9BSkFYX0hhbmRsZXIucHJvdG90eXBlLm5vdF9y ZWFkeSA9IGZ1bmN0aW9uKCkKewoJcmV0dXJuICh0aGlzLmhhbmRsZXIucmVhZHlT dGF0ZSAmJiAodGhpcy5oYW5kbGVyLnJlYWR5U3RhdGUgPCA0KSk7Cn0KCi8qKgoq IE9uUmVhZHlTdGF0ZUNoYW5nZSBldmVudCBoYW5kbGVyCioKKiBAcGFyYW0JZnVu Y3Rpb24KKi8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5vbnJlYWR5c3RhdGVj aGFuZ2UgPSBmdW5jdGlvbihldmVudCkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7 CgkJaWYgICghdGhpcy5pbml0KCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJ fQoJaWYgKHR5cGVvZiBldmVudCA9PSAnZnVuY3Rpb24nKQoJewoJCXRoaXMuaGFu ZGxlci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBldmVudDsKCX0KCWVsc2UKCXsKCQlh bGVydCgnWE1MIFNlbmRlciBPblJlYWR5U3RhdGUgZXZlbnQgaXMgbm90IGEgZnVu Y3Rpb24nKTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCi8qKgoqIFNlbmRzIGRhdGEK KgoqIEBwYXJhbQlzdHJpbmcJRGVzdGluYXRpb24gVVJMCiogQHBhcmFtCXN0cmlu ZwlSZXF1ZXN0IERhdGEKKgoqIEByZXR1cm4JbWl4ZWQJUmV0dXJuIG1lc3NhZ2UK Ki8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGVz dHVybCwgZGF0YXN0cmVhbSkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7CgkJaWYg KCF0aGlzLmluaXQoKSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglpZiAo IXRoaXMubm90X3JlYWR5KCkpCgl7CgkJdGhpcy5oYW5kbGVyLm9wZW4oJ1BPU1Qn LCBkZXN0dXJsLCB0aGlzLmFzeW5jKTsKCQl0aGlzLmhhbmRsZXIuc2V0UmVxdWVz dEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0t dXJsZW5jb2RlZCcpOwoJCXRoaXMuaGFuZGxlci5zZW5kKGRhdGFzdHJlYW0gKyAn JnNlY3VyaXR5dG9rZW49JyArIFNFQ1VSSVRZVE9LRU4gKyAnJnM9JyArIGZldGNo X3Nlc3Npb25oYXNoKCkpOwoKCQlpZiAoIXRoaXMuYXN5bmMgJiYgdGhpcy5oYW5k bGVyLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLmhhbmRsZXIuc3RhdHVzID09IDIw MCkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCXJldHVybiBmYWxzZTsKfQoK LyoqCiogRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgYW4gWE1MIG5vZGUKKgoqIEBw YXJhbQlvYmplY3QJWE1MIG5vZGUKKgoqIEByZXR1cm4Jc3RyaW5nCVhNTCBub2Rl IGNvbnRlbnRzCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuZmV0Y2hfZGF0 YSA9IGZ1bmN0aW9uKHhtbF9ub2RlKQp7CglpZiAoeG1sX25vZGUgJiYgeG1sX25v ZGUuZmlyc3RDaGlsZCAmJiB4bWxfbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkK CXsKCQlyZXR1cm4gUEhQLnVuZXNjYXBlX2NkYXRhKHhtbF9ub2RlLmZpcnN0Q2hp bGQubm9kZVZhbHVlKTsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gJyc7Cgl9Cn0KCi8v IHdlIGNhbiBjaGVjayB0aGlzIHZhcmlhYmxlIHRvIHNlZSBpZiBicm93c2VyIGlz IEFKQVggY29tcGF0aWJsZQpBSkFYX0NvbXBhdGlibGUgPSB2Ql9BSkFYX0hhbmRs ZXIucHJvdG90eXBlLmlzX2NvbXBhdGlibGUoKTsKY29uc29sZS5pbmZvKCJCcm93 c2VyIGlzJXMgQUpBWCBjb21wYXRpYmxlIiwgQUpBWF9Db21wYXRpYmxlID8gIiIg OiAiIE5PVCIpOwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfSGlkZGVuX0Zvcm0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ci8qKgoqIEZvcm0gR2VuZXJhdG9yIENsYXNzCioKKiBCdWlsZHMgYSBmb3JtIGZp bGxlZCB3aXRoIGhpZGRlbiBmaWVsZHMgZm9yIGludmlzaWJsZSBzdWJtaXQgdmlh IFBPU1QKKgoqIEBwYXJhbQlzdHJpbmcJU2NyaXB0IChteV90YXJnZXRfc2NyaXB0 LnBocCkKKi8KZnVuY3Rpb24gdkJfSGlkZGVuX0Zvcm0oc2NyaXB0KQp7Cgl0aGlz LmFjdGlvbiA9IHNjcmlwdDsKCXRoaXMudmFyaWFibGVzID0gbmV3IEFycmF5KCk7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0hpZGRl bl9Gb3JtIG1ldGhvZHMKCi8qKgoqIEFkZHMgYSBoaWRkZW4gaW5wdXQgZmllbGQg dG8gdGhlIGZvcm0gb2JqZWN0CioKKiBAcGFyYW0Jc3RyaW5nCU5hbWUgYXR0cmli dXRlCiogQHBhcmFtCXN0cmluZwlWYWx1ZSBhdHRyaWJ1dGUKKi8KdkJfSGlkZGVu X0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZSA9IGZ1bmN0aW9uKG5hbWUsIHZh bHVlKQp7Cgl0aGlzLnZhcmlhYmxlc1t0aGlzLnZhcmlhYmxlcy5sZW5ndGhdID0g bmV3IEFycmF5KG5hbWUsIHZhbHVlKTsKCWNvbnNvbGUubG9nKCJ2Ql9IaWRkZW5f Rm9ybSA6OiBhZGRfdmFyaWFibGUoJXMpIiwgbmFtZSk7Cn07CgovKioKKiBGZXRj aGVzIGFsbCBmb3JtIGVsZW1lbnRzIGluc2lkZSBhbiBIVE1MIGVsZW1lbnQgYW5k IHBlcmZvcm1zICdhZGRfaW5wdXQoKScgb24gdGhlbQoqCiogQHBhcmFtCW9iamVj dAlIVE1MIGVsZW1lbnQgdG8gc2VhcmNoCiovCnZCX0hpZGRlbl9Gb3JtLnByb3Rv dHlwZS5hZGRfdmFyaWFibGVzX2Zyb21fb2JqZWN0ID0gZnVuY3Rpb24ob2JqKQp7 CglpZiAoIW9iaikKCXsKCQlyZXR1cm47Cgl9Cgljb25zb2xlLmluZm8oInZCX0hp ZGRlbl9Gb3JtIDo6IGFkZF92YXJpYWJsZXNfZnJvbV9vYmplY3QoJXMpIiwgb2Jq LmlkKTsKCXZhciBpbnB1dHMgPSBmZXRjaF90YWdzKG9iaiwgJ2lucHV0Jyk7Cglm b3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlzd2l0 Y2ggKGlucHV0c1tpXS50eXBlKQoJCXsKCQkJY2FzZSAnY2hlY2tib3gnOgoJCQlj YXNlICdyYWRpbyc6CgkJCQlpZiAoaW5wdXRzW2ldLmNoZWNrZWQpCgkJCQl7CgkJ CQkJdGhpcy5hZGRfdmFyaWFibGUoaW5wdXRzW2ldLm5hbWUsIGlucHV0c1tpXS52 YWx1ZSk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAndGV4dCc6CgkJCWNhc2Ug J2hpZGRlbic6CgkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCXRoaXMuYWRkX3Zhcmlh YmxlKGlucHV0c1tpXS5uYW1lLCBpbnB1dHNbaV0udmFsdWUpOwoJCQkJYnJlYWs7 CgkJCWRlZmF1bHQ6CgkJCQljb250aW51ZTsKCQl9Cgl9CgoJdmFyIHRleHRhcmVh cyA9IGZldGNoX3RhZ3Mob2JqLCAndGV4dGFyZWEnKTsKCWZvciAodmFyIGkgPSAw OyBpIDwgdGV4dGFyZWFzLmxlbmd0aDsgaSsrKQoJewoJCXRoaXMuYWRkX3Zhcmlh YmxlKHRleHRhcmVhc1tpXS5uYW1lLCB0ZXh0YXJlYXNbaV0udmFsdWUpOwoJfQoK CXZhciBzZWxlY3RzID0gZmV0Y2hfdGFncyhvYmosICdzZWxlY3QnKTsKCWZvciAo dmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykKCXsKCQlpZiAoc2Vs ZWN0c1tpXS5tdWx0aXBsZSkKCQl7CgkJCWZvciAodmFyIGogPSAwOyBqIDwgc2Vs ZWN0c1tpXS5vcHRpb25zLmxlbmd0aDsgaisrKQoJCQl7CgkJCQlpZiAoc2VsZWN0 c1tpXS5vcHRpb25zW2pdLnNlbGVjdGVkKQoJCQkJewoJCQkJCXRoaXMuYWRkX3Zh cmlhYmxlKHNlbGVjdHNbaV0ubmFtZSwgc2VsZWN0c1tpXS5vcHRpb25zW2pdLnZh bHVlKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmFkZF92YXJp YWJsZShzZWxlY3RzW2ldLm5hbWUsIHNlbGVjdHNbaV0ub3B0aW9uc1tzZWxlY3Rz W2ldLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKCQl9Cgl9Cn07CgovKioKKiBGZXRj aGVzIGEgdmFyaWFibGUgdmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJVmFyaWFibGUg bmFtZQoqCiogQHJldHVybgltaXhlZAlWYXJpYWJsZSB2YWx1ZQoqLwp2Ql9IaWRk ZW5fRm9ybS5wcm90b3R5cGUuZmV0Y2hfdmFyaWFibGUgPSBmdW5jdGlvbih2YXJu YW1lKQp7Cglmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFyaWFibGVzLmxlbmd0 aDsgaSsrKQoJewoJCWlmICh0aGlzLnZhcmlhYmxlc1tpXVswXSA9PSB2YXJuYW1l KQoJCXsKCQkJcmV0dXJuIHRoaXMudmFyaWFibGVzW2ldWzFdOwoJCX0KCX0KCgly ZXR1cm4gbnVsbDsKfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIGhpZGRlbiBmb3JtIG9i amVjdAoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5cGUuc3VibWl0X2Zvcm0gPSBm dW5jdGlvbigpCnsKCXRoaXMuZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2Zvcm0nKTsKCXRoaXMuZm9ybS5tZXRob2QgPSAncG9zdCc7Cgl0aGlzLmZvcm0u YWN0aW9uID0gdGhpcy5hY3Rpb247CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz LnZhcmlhYmxlcy5sZW5ndGg7IGkrKykKCXsKCQl2YXIgaW5wdXRvYmogPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoKCQlpbnB1dG9iai50eXBlICA9 ICdoaWRkZW4nOwoJCWlucHV0b2JqLm5hbWUgID0gdGhpcy52YXJpYWJsZXNbaV1b MF07CgkJaW5wdXRvYmoudmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tpXVsxXTsKCgkJ dGhpcy5mb3JtLmFwcGVuZENoaWxkKGlucHV0b2JqKTsKCX0KCgljb25zb2xlLmlu Zm8oInZCX0hpZGRlbl9Gb3JtIDo6IHN1Ym1pdF9mb3JtKCkgLT4gJXMiLCB0aGlz LmFjdGlvbik7Cglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZm9ybSku c3VibWl0KCk7Cn07CgovKioKKiBCdWlsZHMgYSBVUkkgcXVlcnkgc3RyaW5nIGZy b20gdGhlIGdpdmVuIHZhcmlhYmxlcwoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5 cGUuYnVpbGRfcXVlcnlfc3RyaW5nID0gZnVuY3Rpb24oKQp7Cgl2YXIgcXVlcnlf c3RyaW5nID0gJyc7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhcmlhYmxl cy5sZW5ndGg7IGkrKykKCXsKCQlxdWVyeV9zdHJpbmcgKz0gdGhpcy52YXJpYWJs ZXNbaV1bMF0gKyAnPScgKyBQSFAudXJsZW5jb2RlKHRoaXMudmFyaWFibGVzW2ld WzFdKSArICcmJzsKCX0KCgljb25zb2xlLmluZm8oInZCX0hpZGRlbl9Gb3JtIDo6 IFF1ZXJ5IFN0cmluZyA9ICVzIiwgcXVlcnlfc3RyaW5nKTsKCXJldHVybiBxdWVy eV9zdHJpbmc7Cn0KCi8qKgoqIExlZ2FjeSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJk IGNvbXBhdGFiaWxpdHkKKi8KdkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF9p bnB1dCA9IHZCX0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfdmFyaWFibGU7CnZC X0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfaW5wdXRzX2Zyb21fb2JqZWN0ID0g dkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZXNfZnJvbV9vYmpl Y3Q7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyBXaW5kb3cg b3BlbmVycyBhbmQgaW5zdGFudCBtZXNzZW5nZXIgd3JhcHBlcnMKCi8qKgoqIE9w ZW5zIGEgZ2VuZXJpYyBicm93c2VyIHdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlV UkwKKiBAcGFyYW0JaW50ZWdlcglXaWR0aAoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdo dAoqIEBwYXJhbQlzdHJpbmcJT3B0aW9uYWwgV2luZG93IElECiovCmZ1bmN0aW9u IG9wZW5XaW5kb3codXJsLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3dpZCkKewoJcmV0 dXJuIHdpbmRvdy5vcGVuKAoJCXVybCwKCQkodHlwZW9mIHdpbmRvd2lkID09ICd1 bmRlZmluZWQnID8gJ3ZCUG9wdXAnIDogd2luZG93aWQpLAoJCSdzdGF0dXNiYXI9 bm8sbWVudWJhcj1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJs ZT15ZXMnCgkJKyAodHlwZW9mIHdpZHRoICE9ICd1bmRlZmluZWQnID8gKCcsd2lk dGg9JyArIHdpZHRoKSA6ICcnKSArICh0eXBlb2YgaGVpZ2h0ICE9ICd1bmRlZmlu ZWQnID8gKCcsaGVpZ2h0PScgKyBoZWlnaHQpIDogJycpCgkpOwp9CgovKioKKiBP cGVucyBjb250cm9sIHBhbmVsIGhlbHAgd2luZG93CioKKiBAcGFyYW0Jc3RyaW5n CVNjcmlwdCBuYW1lCiogQHBhcmFtCXN0cmluZwlBY3Rpb24gdHlwZQoqIEBwYXJh bQlzdHJpbmcJT3B0aW9uIHZhbHVlCioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5j dGlvbiBqc19vcGVuX2hlbHAoc2NyaXB0bmFtZSwgYWN0aW9udHlwZSwgb3B0aW9u dmFsKQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknaGVscC5waHA/cz0nICsgU0VT U0lPTkhBU0ggKyAnJmRvPWFuc3dlciZwYWdlPScgKyBzY3JpcHRuYW1lICsgJyZw YWdlYWN0aW9uPScgKyBhY3Rpb250eXBlICsgJyZvcHRpb249JyArIG9wdGlvbnZh bCwKCQk2MDAsIDQ1MCwgJ2hlbHB3aW5kb3cnCgkpOwp9CgovKioKKiBPcGVucyBh IHdpbmRvdyB0byBzaG93IGEgbGlzdCBvZiBhdHRhY2htZW50cyBpbiBhIHRocmVh ZCAobWlzYy5waHA/ZG89c2hvd2F0dGFjaG1lbnRzKQoqCiogQHBhcmFtCWludGVn ZXIJVGhyZWFkIElECioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiBhdHRh Y2htZW50cyh0aHJlYWRpZCkKewoJcmV0dXJuIG9wZW5XaW5kb3coCgkJJ21pc2Mu cGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPXNob3dhdHRhY2htZW50cyZ0PScgKyB0 aHJlYWRpZCwKCQk0ODAsIDMwMAoJKTsKfQoKLyoqCiogT3BlbnMgYSB3aW5kb3cg dG8gc2hvdyBhIGxpc3Qgb2YgcG9zdGVycyBpbiBhIHRocmVhZCAobWlzYy5waHA/ ZG89d2hvcG9zdGVkKQoqCiogQHBhcmFtCWludGVnZXIJVGhyZWFkIElECioKKiBA cmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiB3aG8odGhyZWFkaWQpCnsKCXJldHVy biBvcGVuV2luZG93KAoJCSdtaXNjLnBocD8nICsgU0VTU0lPTlVSTCArICdkbz13 aG9wb3N0ZWQmdD0nICsgdGhyZWFkaWQsCgkJMjMwLCAzMDAKCSk7Cn0KCi8qKgoq IE9wZW5zIGFuIElNIFdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlJTSB0eXBlCiog QHBhcmFtCWludGVnZXIJVXNlciBJRAoqIEBwYXJhbQlpbnRlZ2VyCVdpZHRoIG9m IHdpbmRvdwoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdodCBvZiB3aW5kb3cKKgoqIEBy ZXR1cm4Jd2luZG93CiovCmZ1bmN0aW9uIGltd2luZG93KGltdHlwZSwgdXNlcmlk LCB3aWR0aCwgaGVpZ2h0KQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknc2VuZG1l c3NhZ2UucGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPWltJnR5cGU9JyArIGltdHlw ZSArICcmdT0nICsgdXNlcmlkLAoJCXdpZHRoLCBoZWlnaHQKCSk7Cn0KCi8qKgoq IFNlbmRzIGFuIE1TTiBtZXNzYWdlCioKKiBAcGFyYW0Jc3RyaW5nCVRhcmdldCBN U04gaGFuZGxlCioKKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24g U2VuZE1TTk1lc3NhZ2UobmFtZSkKewoJaWYgKCFpc19pZSkKCXsKCQlhbGVydCh2 YnBocmFzZVsnbXNuX2Z1bmN0aW9uc19vbmx5X3dvcmtfaW5faWUnXSk7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCU1zZ3JPYmouSW5zdGFudE1lc3NhZ2Uo bmFtZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBBZGRzIGFuIE1TTiBD b250YWN0IChyZXF1aXJlcyBNU04pCioKKiBAcGFyYW0Jc3RyaW5nCU1TTiBoYW5k bGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwpmdW5jdGlvbiBBZGRNU05D b250YWN0KG5hbWUpCnsKCWlmICghaXNfaWUpCgl7CgkJYWxlcnQodmJwaHJhc2Vb J21zbl9mdW5jdGlvbnNfb25seV93b3JrX2luX2llJ10pOwoJCXJldHVybiBmYWxz ZTsKCX0KCWVsc2UKCXsKCQlNc2dyT2JqLkFkZENvbnRhY3QoMCwgbmFtZSk7CgkJ cmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBEZXRlY3RzIENhcHMtTG9jayB3aGVu IGEga2V5IGlzIHByZXNzZWQKKgoqIEBwYXJhbQlldmVudAoqCiogQHJldHVybgli b29sZWFuCVRydWUgaWYgQ2Fwcy1Mb2NrIGlzIG9uCiovCmZ1bmN0aW9uIGRldGVj dF9jYXBzX2xvY2soZSkKewoJZSA9IChlID8gZSA6IHdpbmRvdy5ldmVudCk7CgoJ dmFyIGtleWNvZGUgPSAoZS53aGljaCA/IGUud2hpY2ggOiAoZS5rZXlDb2RlID8g ZS5rZXlDb2RlIDogKGUuY2hhckNvZGUgPyBlLmNoYXJDb2RlIDogMCkpKTsKCXZh ciBzaGlmdGVkID0gKGUuc2hpZnRLZXkgfHwgKGUubW9kaWZpZXJzICYmIChlLm1v ZGlmaWVycyAmIDQpKSk7Cgl2YXIgY3RybGVkID0gKGUuY3RybEtleSB8fCAoZS5t b2RpZmllcnMgJiYgKGUubW9kaWZpZXJzICYgMikpKTsKCgkvLyBpZiBjaGFyYWN0 ZXJzIGFyZSB1cHBlcmNhc2Ugd2l0aG91dCBzaGlmdCwgb3IgbG93ZXJjYXNlIHdp dGggc2hpZnQsIGNhcHMtbG9jayBpcyBvbi4KCXJldHVybiAoa2V5Y29kZSA+PSA2 NSAmJiBrZXljb2RlIDw9IDkwICYmICFzaGlmdGVkICYmICFjdHJsZWQpIHx8IChr ZXljb2RlID49IDk3ICYmIGtleWNvZGUgPD0gMTIyICYmIHNoaWZ0ZWQpOwp9Cgov KioKKiBDb25maXJtcyBsb2ctb3V0IHJlcXVlc3QKKgoqIEBwYXJhbQlzdHJpbmcJ TG9nLW91dCBjb25maXJtYXRpb24gbWVzc2FnZQoqCiogQHJldHVybglib29sZWFu CiovCmZ1bmN0aW9uIGxvZ19vdXQoY29uZmlybWF0aW9uX21lc3NhZ2UpCnsKCXZh ciBodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07 CglodC5zdHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj cm9zb2Z0LkJhc2ljSW1hZ2UoZ3JheXNjYWxlPTEpIjsKCWlmIChjb25maXJtKGNv bmZpcm1hdGlvbl9tZXNzYWdlKSkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UK CXsKCQlodC5zdHlsZS5maWx0ZXIgPSAiIjsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0K Ci8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvb2tpZSBoYW5k bGVycwoKLyoqCiogU2V0cyBhIGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlDb29r aWUgbmFtZQoqIEBwYXJhbQlzdHJpbmcJQ29va2llIHZhbHVlCiogQHBhcmFtCWRh dGUJQ29va2llIGV4cGlyeSBkYXRlCiovCmZ1bmN0aW9uIHNldF9jb29raWUobmFt ZSwgdmFsdWUsIGV4cGlyZXMpCnsKCWNvbnNvbGUubG9nKCJTZXQgQ29va2llIDo6 ICVzID0gJyVzJyIsIG5hbWUsIHZhbHVlKTsKCWRvY3VtZW50LmNvb2tpZSA9IG5h bWUgKyAnPScgKyBlc2NhcGUodmFsdWUpICsgJzsgcGF0aD0vJyArICh0eXBlb2Yg ZXhwaXJlcyAhPSAndW5kZWZpbmVkJyA/ICc7IGV4cGlyZXM9JyArIGV4cGlyZXMu dG9HTVRTdHJpbmcoKSA6ICcnKTsKfQoKLyoqCiogRGVsZXRlcyBhIGNvb2tpZQoq CiogQHBhcmFtCXN0cmluZwlDb29raWUgbmFtZQoqLwpmdW5jdGlvbiBkZWxldGVf Y29va2llKG5hbWUpCnsKCWNvbnNvbGUubG9nKCJEZWxldGUgQ29va2llIDo6ICVz IiwgbmFtZSk7Cglkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgJzsgZXhw aXJlcz1UaHUsIDAxLUphbi03MCAwMDowMDowMSBHTVQnICsgICc7IHBhdGg9Lyc7 Cn0KCi8qKgoqIEZldGNoZXMgdGhlIHZhbHVlIG9mIGEgY29va2llCioKKiBAcGFy YW0Jc3RyaW5nCUNvb2tpZSBuYW1lCioKKiBAcmV0dXJuCXN0cmluZwoqLwpmdW5j dGlvbiBmZXRjaF9jb29raWUobmFtZSkKewoJY29va2llX25hbWUgPSBuYW1lICsg Jz0nOwoJY29va2llX2xlbmd0aCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7Cglj b29raWVfYmVnaW4gPSAwOwoJd2hpbGUgKGNvb2tpZV9iZWdpbiA8IGNvb2tpZV9s ZW5ndGgpCgl7CgkJdmFsdWVfYmVnaW4gPSBjb29raWVfYmVnaW4gKyBjb29raWVf bmFtZS5sZW5ndGg7CgkJaWYgKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoY29v a2llX2JlZ2luLCB2YWx1ZV9iZWdpbikgPT0gY29va2llX25hbWUpCgkJewoJCQl2 YXIgdmFsdWVfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YgKCc7JywgdmFs dWVfYmVnaW4pOwoJCQlpZiAodmFsdWVfZW5kID09IC0xKQoJCQl7CgkJCQl2YWx1 ZV9lbmQgPSBjb29raWVfbGVuZ3RoOwoJCQl9CgkJCXZhciBjb29raWVfdmFsdWUg PSB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKHZhbHVlX2JlZ2lu LCB2YWx1ZV9lbmQpKTsKCQkJY29uc29sZS5sb2coIkZldGNoIENvb2tpZSA6OiAl cyA9ICclcyciLCBuYW1lLCBjb29raWVfdmFsdWUpOwoJCQlyZXR1cm4gY29va2ll X3ZhbHVlOwoJCX0KCQljb29raWVfYmVnaW4gPSBkb2N1bWVudC5jb29raWUuaW5k ZXhPZignICcsIGNvb2tpZV9iZWdpbikgKyAxOwoJCWlmIChjb29raWVfYmVnaW4g PT0gMCkKCQl7CgkJCWJyZWFrOwoJCX0KCX0KCWNvbnNvbGUubG9nKCJGZXRjaCBD b29raWUgOjogJXMgKG51bGwpIiwgbmFtZSk7CglyZXR1cm4gbnVsbDsKfQoKLy8g IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gRm9ybSBlbGVtZW50IG1h bmFnZXJzICh1c2VkIGZvciAnY2hlY2sgYWxsJyB0eXBlIHN5c3RlbXMpCgovKioK KiBTZXRzIGFsbCBjaGVja2JveGVzLCByYWRpbyBidXR0b25zIG9yIHNlbGVjdHMg aW4gYSBnaXZlbiBmb3JtIHRvIGEgZ2l2ZW4gc3RhdGUsIHdpdGggZXhjZXB0aW9u cwoqCiogQHBhcmFtCW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJ VGFyZ2V0IGVsZW1lbnQgdHlwZSAob25lIG9mICdyYWRpbycsICdzZWxlY3Qtb25l JywgJ2NoZWNrYm94JykKKiBAcGFyYW0Jc3RyaW5nCVNlbGVjdGVkIG9wdGlvbiBp biBjYXNlIG9mICdyYWRpbycKKiBAcGFyYW0JYXJyYXkJQXJyYXkgb2YgZWxlbWVu dCBuYW1lcyB0byBiZSBleGNsdWRlZAoqIEBwYXJhbQltaXhlZAlWYWx1ZSB0byBn aXZlIHRvIGZvdW5kIGVsZW1lbnRzCiovCmZ1bmN0aW9uIGpzX3RvZ2dsZV9hbGwo Zm9ybW9iaiwgZm9ybXR5cGUsIG9wdGlvbiwgZXhjbHVkZSwgc2V0dG8pCnsKCWZv ciAodmFyIGkgPTA7IGkgPCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJ ewoJCXZhciBlbG0gPSBmb3Jtb2JqLmVsZW1lbnRzW2ldOwoJCWlmIChlbG0udHlw ZSA9PSBmb3JtdHlwZSAmJiBQSFAuaW5fYXJyYXkoZWxtLm5hbWUsIGV4Y2x1ZGUs IGZhbHNlKSA9PSAtMSkKCQl7CgkJCXN3aXRjaCAoZm9ybXR5cGUpCgkJCXsKCQkJ CWNhc2UgJ3JhZGlvJzoKCQkJCQlpZiAoZWxtLnZhbHVlID09IG9wdGlvbikgLy8g b3B0aW9uID09ICcnIGV2YWx1YXRlcyB0cnVlIHdoZW4gb3B0aW9uID0gMAoJCQkJ CXsKCQkJCQkJZWxtLmNoZWNrZWQgPSBzZXR0bzsKCQkJCQl9CgkJCQlicmVhazsK CQkJCWNhc2UgJ3NlbGVjdC1vbmUnOgoJCQkJCWVsbS5zZWxlY3RlZEluZGV4ID0g c2V0dG87CgkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJZWxtLmNoZWNrZWQg PSBzZXR0bzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQp9CgovKioKKiBTZXRzIGFs bCA8c2VsZWN0PiBlbGVtZW50cyB0byB0aGUgc2VsZWN0ZWRJbmRleCBzcGVjaWZp ZWQgYnkgdGhlICdzZWxlY3RhbGwnIGVsZW1lbnQKKgoqIEBwYXJhbQlvYmplY3QJ Rm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfc2VsZWN0X2FsbChmb3Jtb2JqKQp7 CglleGNsdWRlID0gbmV3IEFycmF5KCk7CglleGNsdWRlWzBdID0gJ3NlbGVjdGFs bCc7Cglqc190b2dnbGVfYWxsKGZvcm1vYmosICdzZWxlY3Qtb25lJywgJycsIGV4 Y2x1ZGUsIGZvcm1vYmouc2VsZWN0YWxsLnNlbGVjdGVkSW5kZXgpOwp9CgovKioK KiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+IGVsZW1lbnRzIHRv IGhhdmUgdGhlIHNhbWUgY2hlY2tlZCBzdGF0dXMgYXMgJ2FsbGJveCcKKgoqIEBw YXJhbQlvYmplY3QJRm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxs KGZvcm1vYmopCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0g PSAna2VlcGF0dGFjaG1lbnRzJzsKCWV4Y2x1ZGVbMV0gPSAnYWxsYm94JzsKCWV4 Y2x1ZGVbMl0gPSAncmVtb3ZlYWxsJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwg J2NoZWNrYm94JywgJycsIGV4Y2x1ZGUsIGZvcm1vYmouYWxsYm94LmNoZWNrZWQp Owp9CgovKioKKiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0icmFkaW8iIC8+IGdyb3Vw cyB0byBoYXZlIGEgcGFydGljdWxhciBvcHRpb24gY2hlY2tlZAoqCiogQHBhcmFt CW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQltaXhlZAlTZWxlY3RlZCBvcHRp b24KKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxsX29wdGlvbihmb3Jtb2JqLCBvcHRp b24pCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0gPSAndXNl dXNlcmdyb3VwJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwgJ3JhZGlvJywgb3B0 aW9uLCBleGNsdWRlLCB0cnVlKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tf YWxsCiovCmZ1bmN0aW9uIGNoZWNrYWxsKGZvcm1vYmopCnsKCWpzX2NoZWNrX2Fs bChmb3Jtb2JqKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tfYWxsX29wdGlv bgoqLwpmdW5jdGlvbiBjaGVja2FsbF9vcHRpb24oZm9ybW9iaiwgb3B0aW9uKQp7 Cglqc19jaGVja19hbGxfb3B0aW9uKGZvcm1vYmosIG9wdGlvbik7Cn0KCi8qKgoq IFJlc2l6ZSBmdW5jdGlvbiBmb3IgQ1AgdGV4dGFyZWFzCioKKiBAcGFyYW0JaW50 ZWdlcglJZiBwb3NpdGl2ZSwgc2l6ZSB1cCwgb3RoZXJ3aXNlIHNpemUgZG93bgoq IEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIHRleHRhcmVhCioKKiBAcmV0dXJuCWJv b2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24gcmVzaXplX3RleHRhcmVhKHRvLCBpZCkK ewoJdmFyIHRleHRhcmVhID0gZmV0Y2hfb2JqZWN0KGlkKTsKCgl0ZXh0YXJlYS5z dHlsZS53aWR0aCA9IHBhcnNlSW50KHRleHRhcmVhLm9mZnNldFdpZHRoKSArICh0 byA8IDAgPyAtMTAwIDogMTAwKSArICJweCI7Cgl0ZXh0YXJlYS5zdHlsZS5oZWln aHQgPSBwYXJzZUludCh0ZXh0YXJlYS5vZmZzZXRIZWlnaHQpICsgKHRvIDwgMCA/ IC0xMDAgOiAxMDApICsgInB4IjsKCglyZXR1cm4gZmFsc2U7Cn0KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvbGxhcHNpYmxlIGVsZW1lbnQg aGFuZGxlcnMKCi8qKgoqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlIHN0YXRlIG9mIGFu IG9iamVjdCwgYW5kIHNhdmVzIHN0YXRlIHRvICd2YnVsbGV0aW5fY29sbGFwc2Un IGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUgSUQgZm9yIHRoZSBjb2xs YXBzZSBncm91cAoqCiogQHJldHVybglib29sZWFuCWZhbHNlCiovCmZ1bmN0aW9u IHRvZ2dsZV9jb2xsYXBzZShvYmppZCkKewoJaWYgKCFpc19yZWdleHApCgl7CgkJ cmV0dXJuIGZhbHNlOwoJfQoKCW9iaiA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfJyArIG9iamlkKTsKCWltZyA9IGZldGNoX29iamVjdCgnY29sbGFwc2VpbWdf JyArIG9iamlkKTsKCWNlbCA9IGZldGNoX29iamVjdCgnY29sbGFwc2VjZWxfJyAr IG9iamlkKTsKCglpZiAoIW9iaikKCXsKCQkvLyBub3RoaW5nIHRvIGNvbGxhcHNl IQoJCWlmIChpbWcpCgkJewoJCQkvLyBoaWRlIHRoZSBjbGlja3kgaW1hZ2UgaWYg dGhlcmUgaXMgb25lCgkJCWltZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCX0K CQlyZXR1cm4gZmFsc2U7Cgl9CgoJaWYgKG9iai5zdHlsZS5kaXNwbGF5ID09ICdu b25lJykKCXsKCQlvYmouc3R5bGUuZGlzcGxheSA9ICcnOwoJCXNhdmVfY29sbGFw c2VkKG9iamlkLCBmYWxzZSk7CgkJaWYgKGltZykKCQl7CgkJCWltZ19yZSA9IG5l dyBSZWdFeHAoIl9jb2xsYXBzZWRcXC5naWYkIik7CgkJCWltZy5zcmMgPSBpbWcu c3JjLnJlcGxhY2UoaW1nX3JlLCAnLmdpZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsK CQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgiXih0aGVhZHx0Y2F0KShfY29sbGFwc2Vk KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05hbWUucmVwbGFjZShj ZWxfcmUsICckMScpOwoJCX0KCX0KCWVsc2UKCXsKCQlvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCQlzYXZlX2NvbGxhcHNlZChvYmppZCwgdHJ1ZSk7CgkJaWYg KGltZykKCQl7CgkJCWltZ19yZSA9IG5ldyBSZWdFeHAoIlxcLmdpZiQiKTsKCQkJ aW1nLnNyYyA9IGltZy5zcmMucmVwbGFjZShpbWdfcmUsICdfY29sbGFwc2VkLmdp ZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsKCQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgi Xih0aGVhZHx0Y2F0KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05h bWUucmVwbGFjZShjZWxfcmUsICckMV9jb2xsYXBzZWQnKTsKCQl9Cgl9CglyZXR1 cm4gZmFsc2U7Cn0KCi8qKgoqIFVwZGF0ZXMgdmJ1bGxldGluX2NvbGxhcHNlIGNv b2tpZSB3aXRoIGNvbGxhcHNlIHByZWZlcmVuY2VzCioKKiBAcGFyYW0Jc3RyaW5n CVVuaXF1ZSBJRCBmb3IgdGhlIGNvbGxhcHNlIGdyb3VwCiogQHBhcmFtCWJvb2xl YW4JQWRkIGEgY29va2llCiovCmZ1bmN0aW9uIHNhdmVfY29sbGFwc2VkKG9iamlk LCBhZGRjb2xsYXBzZWQpCnsKCXZhciBjb2xsYXBzZWQgPSBmZXRjaF9jb29raWUo J3ZidWxsZXRpbl9jb2xsYXBzZScpOwoJdmFyIHRtcCA9IG5ldyBBcnJheSgpOwoK CWlmIChjb2xsYXBzZWQgIT0gbnVsbCkKCXsKCQljb2xsYXBzZWQgPSBjb2xsYXBz ZWQuc3BsaXQoJ1xuJyk7CgoJCWZvciAodmFyIGkgaW4gY29sbGFwc2VkKQoJCXsK CQkJaWYgKGNvbGxhcHNlZFtpXSAhPSBvYmppZCAmJiBjb2xsYXBzZWRbaV0gIT0g JycpCgkJCXsKCQkJCXRtcFt0bXAubGVuZ3RoXSA9IGNvbGxhcHNlZFtpXTsKCQkJ fQoJCX0KCX0KCglpZiAoYWRkY29sbGFwc2VkKQoJewoJCXRtcFt0bXAubGVuZ3Ro XSA9IG9iamlkOwoJfQoKCWV4cGlyZXMgPSBuZXcgRGF0ZSgpOwoJZXhwaXJlcy5z ZXRUaW1lKGV4cGlyZXMuZ2V0VGltZSgpICsgKDEwMDAgKiA4NjQwMCAqIDM2NSkp OwoJc2V0X2Nvb2tpZSgndmJ1bGxldGluX2NvbGxhcHNlJywgdG1wLmpvaW4oJ1xu JyksIGV4cGlyZXMpOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwovLyBFdmVudCBIYW5kbGVycyBmb3IgUGFnZU5hdiBtZW51cwoKLyoqCiogQ2xh c3MgdG8gaGFuZGxlIHBhZ2VuYXYgZXZlbnRzCiovCmZ1bmN0aW9uIHZCcGFnZW5h digpCnsKfQoKLyoqCiogSGFuZGxlcyBjbGlja3Mgb24gcGFnZW5hdiBtZW51IGNv bnRyb2wgb2JqZWN0cwoqLwp2QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpf b25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuX29uY2xpY2soZSk7Cgl2YXIg aW5wdXRzID0gZmV0Y2hfdGFncyh0aGlzLm1lbnUubWVudW9iaiwgJ2lucHV0Jyk7 Cglmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlp ZiAoaW5wdXRzW2ldLnR5cGUgPT0gJ3RleHQnKQoJCXsKCQkJaW5wdXRzW2ldLmZv Y3VzKCk7CgkJCWJyZWFrOwoJCX0KCX0KfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIHBh Z2VuYXYgZm9ybS4uLiBzb3J0IG9mCiovCnZCcGFnZW5hdi5wcm90b3R5cGUuZm9y bV9nb3RvcGFnZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICgocGFnZW51bSA9IHBhcnNl SW50KGZldGNoX29iamVjdCgncGFnZW5hdl9pdHh0JykudmFsdWUsIDEwKSkgPiAw KQoJewoJCXdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuYWRkciArICcmcGFnZT0nICsg cGFnZW51bTsKCX0KCXJldHVybiBmYWxzZTsKfTsKCi8qKgoqIEhhbmRsZXMgY2xp Y2tzIG9uIHRoZSAnR28nIGJ1dHRvbiBpbiBwYWdlbmF2IHBvcHVwcwoqLwp2QnBh Z2VuYXYucHJvdG90eXBlLmlidG5fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJl dHVybiB0aGlzLmZvcm0uZ290b3BhZ2UoKTsKfTsKCi8qKgoqIEhhbmRsZXMga2V5 cHJlc3NlcyBpbiB0aGUgdGV4dCBpbnB1dCBvZiBwYWdlbmF2IHBvcHVwcwoqLwp2 QnBhZ2VuYXYucHJvdG90eXBlLml0eHRfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUp CnsKCXJldHVybiAoKGUgPyBlIDogd2luZG93LmV2ZW50KS5rZXlDb2RlID09IDEz ID8gdGhpcy5mb3JtLmdvdG9wYWdlKCkgOiB0cnVlKTsKfTsKCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIERIVE1MIFBvcHVwIE1lbnUgSGFuZGxp bmcgKGNvbXBsZW1lbnRzIHZidWxsZXRpbl9tZW51LmpzKQoKLyoqCiogV3JhcHBl ciBmb3IgdkJtZW51LnJlZ2lzdGVyCioKKiBAcGFyYW0Jc3RyaW5nCUNvbnRyb2wg SUQKKiBAcGFyYW0JYm9vbGVhbglObyBpbWFnZSAodHJ1ZSkKKiBAcGFyYW0JYm9v bGVhbglEb2VzIG5vdGhpbmcgYW55IG1vcmUKKi8KZnVuY3Rpb24gdmJtZW51X3Jl Z2lzdGVyKGNvbnRyb2xpZCwgbm9pbWFnZSwgZGF0ZWZpZWxkKQp7CglpZiAodHlw ZW9mKHZCbWVudSkgPT0gIm9iamVjdCIpCgl7CgkJcmV0dXJuIHZCbWVudS5yZWdp c3Rlcihjb250cm9saWQsIG5vaW1hZ2UpOwoJfQoJZWxzZQoJewoJCXJldHVybiBm YWxzZTsKCX0KfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g U3R1ZmYgdGhhdCByZWFsbHkgZG9lc24ndCBmaXQgYW55d2hlcmUgZWxzZQoKLyoq CiogU2V0cyBhbiBlbGVtZW50IGFuZCBhbGwgaXRzIGNoaWxkcmVuIHRvIGJlICd1 bnNlbGVjdGFibGUnCioKKiBAcGFyYW0Jb2JqZWN0CU9iamVjdCB0byBiZSBtYWRl IHVuc2VsZWN0YWJsZQoqLwpmdW5jdGlvbiBzZXRfdW5zZWxlY3RhYmxlKG9iaikK ewoJaWYgKCFpc19pZTQgJiYgdHlwZW9mIG9iai50YWdOYW1lICE9ICd1bmRlZmlu ZWQnKQoJewoJCWlmIChvYmouaGFzQ2hpbGROb2RlcygpKQoJCXsKCQkJZm9yICh2 YXIgaSA9IDA7IGkgPCBvYmouY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKCQkJewoJ CQkJc2V0X3Vuc2VsZWN0YWJsZShvYmouY2hpbGROb2Rlc1tpXSk7CgkJCX0KCQl9 CgkJb2JqLnVuc2VsZWN0YWJsZSA9ICdvbic7Cgl9Cn0KCi8qKgoqIEZldGNoZXMg dGhlIHNlc3Npb25oYXNoIGZyb20gdGhlIFNFU1NJT05VUkwgdmFyaWFibGUKKgoq IEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIGZldGNoX3Nlc3Npb25oYXNoKCkK ewoJcmV0dXJuIChTRVNTSU9OVVJMID09ICcnID8gJycgOiBTRVNTSU9OVVJMLnN1 YnN0cigyLCAzMikpOwp9CgovKioKKiBFbXVsYXRlcyB0aGUgUEhQIHZlcnNpb24g b2YgdkJ1bGxldGluJ3MgY29uc3RydWN0X3BocmFzZSgpIHNwcmludGYgd3JhcHBl cgoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgY29udGFpbmluZyAlMSRzIHR5cGUg cmVwbGFjZW1lbnQgbWFya2VycwoqIEBwYXJhbQlzdHJpbmcJRmlyc3QgcmVwbGFj ZW1lbnQKKiBAcGFyYW0Jc3RyaW5nCU50aCByZXBsYWNlbWVudAoqCiogQHJldHVy bglzdHJpbmcKKi8KZnVuY3Rpb24gY29uc3RydWN0X3BocmFzZSgpCnsKCWlmICgh YXJndW1lbnRzIHx8IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8ICFpc19yZWdleHAp Cgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXZhciBhcmdzID0gYXJndW1lbnRzOwoJ dmFyIHN0ciA9IGFyZ3NbMF07Cgl2YXIgcmU7CgoJZm9yICh2YXIgaSA9IDE7IGkg PCBhcmdzLmxlbmd0aDsgaSsrKQoJewoJCXJlID0gbmV3IFJlZ0V4cCgiJSIgKyBp ICsgIlxcJHMiLCAnZ2knKTsKCQlzdHIgPSBzdHIucmVwbGFjZShyZSwgYXJnc1tp XSk7Cgl9CglyZXR1cm4gc3RyOwp9CgovKioKKiBIYW5kbGVzIHRoZSBxdWljayBz dHlsZS9sYW5ndWFnZSBvcHRpb25zIGluIHRoZSBmb290ZXIKKgoqIEBwYXJhbQlv YmplY3QJU2VsZWN0IG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJVHlwZSAoc3R5bGUg b3IgbGFuZ3VhZ2UpCiovCmZ1bmN0aW9uIHN3aXRjaF9pZChzZWxlY3RvYmosIHR5 cGUpCnsKCXZhciBpZCA9IHNlbGVjdG9iai5vcHRpb25zW3NlbGVjdG9iai5zZWxl Y3RlZEluZGV4XS52YWx1ZTsKCglpZiAoaWQgPT0gJycpCgl7CgkJcmV0dXJuOwoJ fQoKCXZhciB1cmwgPSBuZXcgU3RyaW5nKHdpbmRvdy5sb2NhdGlvbik7Cgl2YXIg ZnJhZ21lbnQgPSBuZXcgU3RyaW5nKCcnKTsKCgkvLyBnZXQgcmlkIG9mIGZyYWdt ZW50Cgl1cmwgPSB1cmwuc3BsaXQoJyMnKTsKCgkvLyBkZWFsIHdpdGggdGhlIGZy YWdtZW50IGZpcnN0CglpZiAodXJsWzFdKQoJewoJCWZyYWdtZW50ID0gJyMnICsg dXJsWzFdOwoJfQoKCS8vIGRlYWwgd2l0aCB0aGUgbWFpbiB1cmwKCXVybCA9IHVy bFswXTsKCgkvLyByZW1vdmUgaWQ9eCYgZnJvbSBtYWluIGJpdAoJaWYgKHVybC5p bmRleE9mKHR5cGUgKyAnaWQ9JykgIT0gLTEgJiYgaXNfcmVnZXhwKQoJewoJCXJl ID0gbmV3IFJlZ0V4cCh0eXBlICsgImlkPVxcZCsmPyIpOwoJCXVybCA9IHVybC5y ZXBsYWNlKHJlLCAnJyk7Cgl9CgoJLy8gYWRkIHRoZSA/IHRvIHRoZSB1cmwgaWYg bmVlZGVkCglpZiAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkKCXsKCQl1cmwgKz0g Jz8nOwoJfQoJZWxzZQoJewoJCS8vIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2 YWxpZCBjaGFyYWN0ZXIgdG8gam9pbiBvdXIgaWQgYml0CgkJbGFzdGNoYXIgPSB1 cmwuc3Vic3RyKHVybC5sZW5ndGggLSAxKTsKCQlpZiAobGFzdGNoYXIgIT0gJyYn ICYmIGxhc3RjaGFyICE9ICc/JykKCQl7CgkJCXVybCArPSAnJic7CgkJfQoJfQoK CXdpbmRvdy5sb2NhdGlvbiA9IHVybCArIHR5cGUgKyAnaWQ9JyArIGlkICsgZnJh Z21lbnQ7Cn0KCi8qKgoqIFRha2VzIHRoZSAnYWx0JyBhdHRyaWJ1dGUgZm9yIGFu IGltYWdlIGFuZCBhdHRhY2hlcyBpdCB0byB0aGUgJ3RpdGxlJyBhdHRyaWJ1dGUK KgoqIEBwYXJhbQlvYmplY3QJSW1hZ2Ugb2JqZWN0CiovCmZ1bmN0aW9uIGltZ19h bHRfMl90aXRsZShpbWcpCnsKCWlmICghaW1nLnRpdGxlICYmIGltZy5hbHQgIT0g JycpCgl7CgkJaW1nLnRpdGxlID0gaW1nLmFsdDsKCX0KfQoKLy8gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gSW5pdGlhbGl6ZSBhIFBvc3RCaXQKCi8q KgoqIFRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlIG5lY2Vzc2FyeSBKYXZhc2Ny aXB0IGNvZGUgb24gYSBQb3N0Qml0CiogYWZ0ZXIgaXQgaGFzIGJlZW4gbG9hZGVk IHZpYSBBSkFYLiBEb24ndCB1c2UgdGhpcyBtZXRob2QgYmVmb3JlIGEKKiBjb21w bGV0ZSBwYWdlIGxvYWQgb3IgeW91J2xsIGhhdmUgcHJvYmxlbXMuCioKKiBAcGFy YW0Jb2JqZWN0CU9iamVjdCBjb250YWluaW5nIHBvc3RiaXRzCiovCmZ1bmN0aW9u IFBvc3RCaXRfSW5pdChvYmosIHBvc3RpZCkKewoJY29uc29sZS5sb2coIlBvc3RC aXQgSW5pdDogJWQiLCBwb3N0aWQpOwoKCWlmICh0eXBlb2YgdkJtZW51ICE9ICd1 bmRlZmluZWQnKQoJewoJCS8vIGluaXQgcHJvZmlsZSBtZW51KHMpCgkJdmFyIGRp dnMgPSBmZXRjaF90YWdzKG9iaiwgJ2RpdicpOwoJCWZvciAodmFyIGkgPSAwOyBp IDwgZGl2cy5sZW5ndGg7IGkrKykKCQl7CgkJCWlmIChkaXZzW2ldLmlkICYmIGRp dnNbaV0uaWQuc3Vic3RyKDAsIDkpID09ICdwb3N0bWVudV8nKQoJCQl7CgkJCQl2 Qm1lbnUucmVnaXN0ZXIoZGl2c1tpXS5pZCwgdHJ1ZSk7CgkJCX0KCQl9Cgl9CgoJ aWYgKHR5cGVvZiB2Ql9RdWlja0VkaXRvciAhPSAndW5kZWZpbmVkJykKCXsKCQkv LyBpbml0IHF1aWNrIGVkaXQgY29udHJvbHMKCQl2Ql9BSkFYX1F1aWNrRWRpdF9J bml0KG9iaik7Cgl9CgoJaWYgKHR5cGVvZiB2Ql9RdWlja1JlcGx5ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJcXJfaW5p dF9idXR0b25zKG9iaik7Cgl9CgoJaWYgKHR5cGVvZiBtcV9pbml0ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJbXFfaW5p dChvYmopOwoJfQoKCWlmICh0eXBlb2YgdkJyZXAgIT0gJ3VuZGVmaW5lZCcpCgl7 CgkJaWYgKHR5cGVvZiBwb3N0aWQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBv c3RpZCAhPSAnbnVsbCcpCgkJewoJCQl2YnJlcF9yZWdpc3Rlcihwb3N0aWQpOwoJ CX0KCX0KCglpZiAodHlwZW9mIGlubGluZU1vZCAhPSAndW5kZWZpbmVkJykKCXsK CQlpbV9pbml0KG9iaik7Cgl9Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi8vIE1haW4gdkJ1bGxldGluIEphdmFzY3JpcHQgSW5pdGlhbGl6YXRp b24KCi8qKgoqIFRoaXMgZnVuY3Rpb24gcnVucyAoYWxtb3N0KSBhdCB0aGUgZW5k IG9mIHNjcmlwdCBsb2FkaW5nIG9uIG1vc3QgdkJ1bGxldGluIHBhZ2VzCioKKiBJ dCBzZXRzIHVwIHRoaW5ncyBsaWtlIGltYWdlIGFsdC0+dGl0bGUgdGFncywgdHVy bnMgb24gdGhlIHBvcHVwIG1lbnUgc3lzdGVtIGV0Yy4KKgoqIEByZXR1cm4JYm9v bGVhbgoqLwpmdW5jdGlvbiB2QnVsbGV0aW5faW5pdCgpCnsKCS8vIGRvbid0IGJv dGhlciBkb2luZyBhbnkgZXhjaXRpbmcgc3R1ZmYgZm9yIFdlYlRWCglpZiAoaXNf d2VidHYpCgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8vIHNldCAndGl0bGUnIHRh Z3MgZm9yIGltYWdlIGVsZW1lbnRzCgl2YXIgaW1ncyA9IGZldGNoX3RhZ3MoZG9j dW1lbnQsICdpbWcnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW1ncy5sZW5ndGg7 IGkrKykKCXsKCQlpbWdfYWx0XzJfdGl0bGUoaW1nc1tpXSk7Cgl9CgoJLy8gZmlu YWxpemUgcG9wdXAgbWVudXMKCWlmICh0eXBlb2YgdkJtZW51ID09ICdvYmplY3Qn KQoJewoJCS8vIGNsb3NlIGFsbCBtZW51cyBvbiBkb2N1bWVudCBjbGljayBvciBy ZXNpemUKCQlpZiAodHlwZW9mKFlBSE9PKSAhPSAidW5kZWZpbmVkIikKCQl7CgkJ CVlBSE9PLnV0aWwuRXZlbnQub24oZG9jdW1lbnQsICJjbGljayIsIHZibWVudV9o aWRlKTsKCQkJWUFIT08udXRpbC5FdmVudC5vbih3aW5kb3csICJyZXNpemUiLCB2 Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAm JiAhaXNfc2FmKQoJCXsKCQkJZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY2xpY2sn LCB2Ym1lbnVfaGlkZSk7CgkJCXdpbmRvdy5hdHRhY2hFdmVudCgnb25yZXNpemUn LCB2Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50 TGlzdGVuZXIgJiYgIWlzX3NhZikKCQl7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlz dGVuZXIoJ2NsaWNrJywgdmJtZW51X2hpZGUsIGZhbHNlKTsKCQkJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHZibWVudV9oaWRlLCBmYWxzZSk7CgkJ fQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5vbmNsaWNrID0gdmJtZW51X2hpZGU7CgkJ CXdpbmRvdy5vbnJlc2l6ZSA9IHZibWVudV9oaWRlOwoJCX0KCgkJLy8gYWRkIHBv cHVwcyB0byBwYWdlbmF2IGVsZW1lbnRzCgkJdmFyIHBhZ2VuYXZzID0gZmV0Y2hf dGFncyhkb2N1bWVudCwgJ3RkJyk7CgkJZm9yICh2YXIgbiA9IDA7IG4gPCBwYWdl bmF2cy5sZW5ndGg7IG4rKykKCQl7CgkJCWlmIChwYWdlbmF2c1tuXS5oYXNDaGls ZE5vZGVzKCkgJiYgcGFnZW5hdnNbbl0uZmlyc3RDaGlsZC5uYW1lICYmIHBhZ2Vu YXZzW25dLmZpcnN0Q2hpbGQubmFtZS5pbmRleE9mKCdQYWdlTmF2JykgIT0gLTEp CgkJCXsKCQkJCXZhciBhZGRyID0gcGFnZW5hdnNbbl0udGl0bGU7CgkJCQlwYWdl bmF2c1tuXS50aXRsZSA9ICcnOwoJCQkJcGFnZW5hdnNbbl0uaW5uZXJIVE1MID0g Jyc7CgkJCQlwYWdlbmF2c1tuXS5pZCA9ICdwYWdlbmF2LicgKyBuOwoJCQkJdmFy IHBuID0gdkJtZW51LnJlZ2lzdGVyKHBhZ2VuYXZzW25dLmlkKTsKCQkJCWlmIChp c19zYWYpCgkJCQl7CgkJCQkJcG4uY29udHJvbG9iai5fb25jbGljayA9IHBuLmNv bnRyb2xvYmoub25jbGljazsKCQkJCQlwbi5jb250cm9sb2JqLm9uY2xpY2sgPSB2 QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpfb25jbGljazsKCQkJCX0KCQkJ fQoJCX0KCgkJLy8gcHJvY2VzcyB0aGUgcGFnZW5hdnMgcG9wdXAgZm9ybQoJCWlm ICh0eXBlb2YgYWRkciAhPSAndW5kZWZpbmVkJykKCQl7CgkJCWZldGNoX29iamVj dCgncGFnZW5hdl9mb3JtJykuYWRkciA9IGFkZHI7CgkJCWZldGNoX29iamVjdCgn cGFnZW5hdl9mb3JtJykuZ290b3BhZ2UgPSB2QnBhZ2VuYXYucHJvdG90eXBlLmZv cm1fZ290b3BhZ2U7CgkJCWZldGNoX29iamVjdCgncGFnZW5hdl9pYnRuJykub25j bGljayA9IHZCcGFnZW5hdi5wcm90b3R5cGUuaWJ0bl9vbmNsaWNrOwoJCQlmZXRj aF9vYmplY3QoJ3BhZ2VuYXZfaXR4dCcpLm9ua2V5cHJlc3MgPSB2QnBhZ2VuYXYu cHJvdG90eXBlLml0eHRfb25rZXlwcmVzczsKCQl9CgoJCS8vIGFjdGl2YXRlIHRo ZSBtZW51IHN5c3RlbQoJCXZCbWVudS5hY3RpdmF0ZSh0cnVlKTsKCX0KCgkvLyB0 aGUgbmV3IGluaXQgc3lzdGVtCgl2QnVsbGV0aW4uaW5pdCgpOwoKCXJldHVybiB0 cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2QnVs bGV0aW4gSmF2YXNjcmlwdCBGcmFtZXdvcmsKCi8qKgoqIEdlbmVyYWwgY2xhc3Mg Zm9yIGhhbmRsaW5nIGN1c3RvbSBldmVudHMgYW5kIGN1c3RvbSBjb250cm9scwoq LwpmdW5jdGlvbiB2QnVsbGV0aW5fRnJhbWV3b3JrKCkKewoJLyoqCgkqIEB2YXIJ YXJyYXkJQXJyYXkgb2YgZWxlbWVudHMgdG8gYmUgcGFzc2VkIHRvIGNvbnRyb2wg aW5pdCBmdW5jdGlvbnMKCSogQHZhcglhcnJheQlBcnJheSBvZiBBSkFYIGxvYWQv c2F2ZSBVUkxzCgkqIEB2YXIJYXJyYXkJQXJyYXkgb2YgWVVJIGN1c3RvbSBldmVu dHMKCSogQHZhcglkYXRlCUN1cnJlbnQgdGltZQoJKi8KCXRoaXMuZWxlbWVudHMg PSBuZXcgQXJyYXkoKTsKCXRoaXMuYWpheHVybHMgPSBuZXcgQXJyYXkoKTsKCXRo aXMuZXZlbnRzID0gbmV3IEFycmF5KCk7Cgl0aGlzLnRpbWUgPSBuZXcgRGF0ZSgp OwoKCS8vIGN1c3RvbSBldmVudCB0byBmaXJlIGR1cmluZyBjbGFzcyBpbml0Cgl0 aGlzLmFkZF9ldmVudCgic3lzdGVtSW5pdCIpOwp9CgovKioKKiBJbml0aWFsaXpl cyB0aGUgb2JqZWN0IC0gdXN1YWxseSBjYWxsZWQgYXQgZW5kIG9mIGZvb3RlciB0 ZW1wbGF0ZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5pbml0ID0g ZnVuY3Rpb24oKQp7Cgl0aGlzLmV2ZW50cy5zeXN0ZW1Jbml0LmZpcmUoKTsKCWNv bnNvbGUuaW5mbygiU3lzdGVtIEluaXQgRmlyZWQiKTsKfQoKLyoqCiogRW11bGF0 ZXMgT09QIGNsYXNzIGV4dGVuc2lvbgoqCiogQHBhcmFtCW9iamVjdAlFeHRlbmRl ZCBjbGFzcwoqIEBwYXJhbQlvYmplY3QJQmFzZSBjbGFzcwoqLwp2QnVsbGV0aW5f RnJhbWV3b3JrLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihzdWJDbGFzcywg YmFzZUNsYXNzKQp7CiAgIGZ1bmN0aW9uIGluaGVyaXRhbmNlKCkge30KICAgaW5o ZXJpdGFuY2UucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKCiAgIHN1 YkNsYXNzLnByb3RvdHlwZSA9IG5ldyBpbmhlcml0YW5jZSgpOwogICBzdWJDbGFz cy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKICAgc3ViQ2xhc3Mu YmFzZUNvbnN0cnVjdG9yID0gYmFzZUNsYXNzOwogICBzdWJDbGFzcy5zdXBlckNs YXNzID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKfQoKLyoqCiogUmVnaXN0ZXJzIGEg Y3VzdG9tIGNvbnRyb2wgZm9yIGxhdGVyIGluaXRpYWxpemF0aW9uCiogQXJndW1l bnRzIDEtbiBhcmUgc3RvcmVkIGZvciBsYXRlciB1c2UKKgoqIEBwYXJhbQlzdHJp bmcJQ29udHJvbCB0eXBlICh2Ql9EYXRlUGlja2VyIGV0Yy4pCiogQHBhcmFtCXN0 cmluZwlIVE1MIGVsZW1lbnQgSUQKKi8KdkJ1bGxldGluX0ZyYW1ld29yay5wcm90 b3R5cGUucmVnaXN0ZXJfY29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2x0eXBlLCBl bGVtZW50KQp7Cgl2YXIgYXJncyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaSA9 IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCgl7CgkJYXJncy5wdXNoKGFy Z3VtZW50c1tpXSk7Cgl9CglpZiAoIXRoaXMuZWxlbWVudHNbY29udHJvbHR5cGVd KQoJewoJCWNvbnNvbGUuaW5mbygiQ3JlYXRpbmcgYXJyYXkgdkJ1bGxldGluLmVs ZW1lbnRzW1wiJXNcIl0iLCBjb250cm9sdHlwZSk7CgkJdGhpcy5lbGVtZW50c1tj b250cm9sdHlwZV0gPSBuZXcgQXJyYXkoKTsKCX0KCXZhciB4ID0gdGhpcy5lbGVt ZW50c1tjb250cm9sdHlwZV0ucHVzaChhcmdzKTsKCWNvbnNvbGUubG9nKCJ2QnVs bGV0aW4uZWxlbWVudHNbXCIlc1wiXVslZF0gPSAlcyIsIGNvbnRyb2x0eXBlLCB4 LTEsIGFyZ3Muam9pbigiLCAiKSk7Cn0KCi8qKgoqIFJlZ2lzdGVycyBBSkFYIGxv YWQvc2F2ZSB1cmxzIGZvciBhIGNvbnRyb2wKKgoqIEBwYXJhbQlGZXRjaCBVUkwK KiBAcGFyYW0JU2F2ZSBVUkwKKiBAcGFyYW0JTGlzdCBvZiBlbGVtZW50cyB0byB3 aGljaCB0aGVzZSBVUkxzIGFwcGx5CiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJv dG90eXBlLnJlZ2lzdGVyX2FqYXhfdXJscyA9IGZ1bmN0aW9uKGZldGNoLCBzYXZl LCBlbGVtZW50cykKewoJdmFyIGZldGNoID0gZmV0Y2guc3BsaXQoIj8iKTsgZmV0 Y2hbMV0gPSBTRVNTSU9OVVJMICsgInNlY3VyaXR5dG9rZW49IiArIFNFQ1VSSVRZ VE9LRU4gKyAiJmFqYXg9MSYiICsgZmV0Y2hbMV0ucmVwbGFjZSgvXHsoXGQrKSg6 XHcrKT9cfS9naSwgJyUkMSRzJyk7Cgl2YXIgc2F2ZSAgPSAgc2F2ZS5zcGxpdCgi PyIpOyAgc2F2ZVsxXSA9IFNFU1NJT05VUkwgKyAic2VjdXJpdHl0b2tlbj0iICsg U0VDVVJJVFlUT0tFTiArICImYWpheD0xJiIgKyBzYXZlWzFdLnJlcGxhY2UoL1x7 KFxkKykoOlx3Kyk/XH0vZ2ksICclJDEkcycpOwoKCWNvbnNvbGUubG9nKCJSZWdp c3RlciBBSkFYIFVSTHMgZm9yICVzIiwgZWxlbWVudHMpOwoKCWZvciAodmFyIGkg PSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCgl7CgkJdGhpcy5hamF4dXJs c1tlbGVtZW50c1tpXV0gPSBuZXcgQXJyYXkoZmV0Y2gsIHNhdmUpOwoJfQp9Cgov KioKKiBSZWdpc3RlciBhIGN1c3RvbSBldmVudAoqCiogQHBhcmFtCXN0cmluZwlF dmVudCBuYW1lCiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJvdG90eXBlLmFkZF9l dmVudCA9IGZ1bmN0aW9uKGV2ZW50bmFtZSkKewoJdGhpcy5ldmVudHNbZXZlbnRu YW1lXSA9ICh0eXBlb2YgWUFIT08gIT0gJ3VuZGVmaW5lZCcgPyBuZXcgWUFIT08u dXRpbC5DdXN0b21FdmVudChldmVudG5hbWUpIDogbmV3IG51bGxfZXZlbnQoKSk7 Cn0KCi8qKgoqIEJDOiBQYXNzIGNvbnNvbGUgY2FsbHMgdG8gRmlyZWJ1ZyBpZiBp dCdzIGF2YWlsYWJsZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5j b25zb2xlID0gY29uc29sZS5sb2c7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwoKLy8gaW5pdGlhbGl6ZSB0aGUgUEhQIGZ1bmN0aW9uIGVtdWxhdG9y CnZhciBQSFAgPSBuZXcgdkJfUEhQX0VtdWxhdG9yKCk7CgovLyBDcmVhdGUgYW4g aW5zdGFuY2Ugb2YgdGhlIHZCdWxsZXRpbiBGcmFtZXdvcmsgb2JqZWN0CnZhciB2 QnVsbGV0aW4gPSBuZXcgdkJ1bGxldGluX0ZyYW1ld29yaygpOwoKLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBE b3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRS Q1NmaWxlJCAtICRSZXZpc2lvbjogMjY0MTMgJAp8fCAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_menu.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_menu.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_menu.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCnZCdWxsZXRp bi5hZGRfZXZlbnQoInZCbWVudVNob3ciKTsKdkJ1bGxldGluLmFkZF9ldmVudCgi dkJtZW51SGlkZSIpOwoKLyoqCiogdkJ1bGxldGluIHBvcHVwIG1lbnUgZXhhbXBs ZSB1c2FnZToKKgoqIFRvIGNyZWF0ZSBhIG5ldyBwb3B1cCBtZW51OgoqIAk8ZWxl bWVudCBpZD0ieCI+Q2xpY2sgbWUgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPiB2Ym1lbnVfcmVnaXN0ZXIoJ3gnKTsgPC9zY3JpcHQ+PC9lbGVtZW50Pgoq IFRoZSBtZW51IGNsYXNzIGV4cGVjdHMgYW4gZWxlbWVudCB3aXRoIHRoZSBpZCBv ZiB4X21lbnUgdGhhdCBjb250YWlucyB0aGUgbWVudS4KKgk8ZGl2IGlkPSJ4X21l bnUiIGNsYXNzPSJ2Ym1lbnVfcG9wdXAiPiAuLi4gPC9kaXY+CiovCgovLyAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9Qb3B1cF9IYW5kbGVyCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiB2QnVsbGV0aW4g cG9wdXAgbWVudSByZWdpc3RyeQoqLwpmdW5jdGlvbiB2Ql9Qb3B1cF9IYW5kbGVy KCkKewoJLyoqCgkqIE9wdGlvbnM6CgkqCgkqIEB2YXIJaW50ZWdlcglOdW1iZXIg b2Ygc3RlcHMgdG8gdXNlIGluIHNsaWRpbmcgbWVudXMgb3BlbgoJKiBAdmFyCWJv b2xlYW4JVXNlIG9wYWNpdHkgZmFjZSBpbiBtZW51IG9wZW4/CgkqLwoJdGhpcy5v cGVuX3N0ZXBzID0gMTA7Cgl0aGlzLm9wZW5fZmFkZSA9IGZhbHNlOwoKCXRoaXMu YWN0aXZlID0gZmFsc2U7CgoJdGhpcy5tZW51cyA9IG5ldyBBcnJheSgpOwoJdGhp cy5hY3RpdmVtZW51ID0gbnVsbDsKCgl0aGlzLmhpZGRlbl9zZWxlY3RzID0gbmV3 IEFycmF5KCk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQov LyB2Ql9Qb3B1cF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEFjdGl2YXRlIC8gRGVh Y3RpdmF0ZSB0aGUgbWVudSBzeXN0ZW0KKgoqIEBwYXJhbQlib29sZWFuCUFjdGl2 ZSBzdGF0ZSBmb3IgbWVudXMKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUu YWN0aXZhdGUgPSBmdW5jdGlvbihhY3RpdmUpCnsKCXRoaXMuYWN0aXZlID0gYWN0 aXZlOwoJY29uc29sZS5sb2coInZCbWVudSA6OiBTeXN0ZW0gQWN0aXZhdGVkIik7 Cn07CgovKioKKiBSZWdpc3RlciBhIGNvbnRyb2wgb2JqZWN0IGFzIGEgbWVudSBj b250cm9sCioKKiBAcGFyYW0Jc3RyaW5nCUlEIG9mIHRoZSBjb250cm9sIG9iamVj dAoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBwb3AgaW1hZ2UgYWRkaXRp b24KKiBAcGFyYW0JYm9vbGVhbglEaXNhYmxlIG1lbnUgc2xpZGUgb3BlbgoqCiog QHJldHVybgl2Ql9Qb3B1cF9NZW51CiovCnZCX1BvcHVwX0hhbmRsZXIucHJvdG90 eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJLy9jb25zb2xlLmxvZygidkJtZW51IDo6IHJlZ2lzdGVyaW5nICcl cyciLCBjb250cm9sa2V5KTsKCXRoaXMubWVudXNbY29udHJvbGtleV0gPSBuZXcg dkJfUG9wdXBfTWVudShjb250cm9sa2V5LCBub2ltYWdlLCBub3NsaWRlKTsKCgly ZXR1cm4gdGhpcy5tZW51c1tjb250cm9sa2V5XTsKfTsKCi8qKgoqIEhpZGUgYWN0 aXZlIG1lbnUKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUuaGlkZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHRoaXMuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCXRo aXMubWVudXNbdGhpcy5hY3RpdmVtZW51XS5oaWRlKCk7Cgl9Cn07CgoKLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gaW5pdGlhbGl6ZSBtZW51IHJl Z2lzdHJ5Cgp2YXIgdkJtZW51ID0gbmV3IHZCX1BvcHVwX0hhbmRsZXIoKTsKCi8q KgoqIEZ1bmN0aW9uIHRvIGFsbG93IGFueXRoaW5nIHRvIGhpZGUgYWxsIG1lbnVz CioKKiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCW1peGVk CiovCmZ1bmN0aW9uIHZibWVudV9oaWRlKGUpCnsKCWlmIChlICYmIGUuYnV0dG9u ICYmIGUuYnV0dG9uICE9IDEgJiYgZS50eXBlID09ICdjbGljaycpCgl7CgkJcmV0 dXJuIHRydWU7Cgl9CgllbHNlCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1BvcHVwX01lbnUK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8qKgoqIHZCdWxsZXRp biBwb3B1cCBtZW51IGNsYXNzIGNvbnN0cnVjdG9yCioKKiBNYW5hZ2VzIGEgc2lu Z2xlIG1lbnUgYW5kIGNvbnRyb2wgb2JqZWN0CiogSW5pdGlhbGl6ZXMgY29udHJv bCBvYmplY3QKKgoqIEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIGNvbnRyb2wgb2Jq ZWN0CiogQHBhcmFtCWJvb2xlYW4JRGlzYWJsZSBtZW51IHBvcCBpbWFnZSBhZGRp dGlvbgoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBzbGlkZSBvcGVuCiov CmZ1bmN0aW9uIHZCX1BvcHVwX01lbnUoY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJdGhpcy5jb250cm9sa2V5ID0gY29udHJvbGtleTsKCXRoaXMubWVu dW5hbWUgPSB0aGlzLmNvbnRyb2xrZXkuc3BsaXQoJy4nKVswXSArICdfbWVudSc7 CgoJdGhpcy5pbml0X2NvbnRyb2wobm9pbWFnZSk7CgoJaWYgKGZldGNoX29iamVj dCh0aGlzLm1lbnVuYW1lKSkKCXsKCQl0aGlzLmluaXRfbWVudSgpOwoJfQoKCXRo aXMuc2xpZGVfb3BlbiA9ICgoaXNfb3BlcmEgfHwgbm9zbGlkZSkgPyBmYWxzZSA6 IHRydWUpOwoJdGhpcy5vcGVuX3N0ZXBzID0gdkJtZW51Lm9wZW5fc3RlcHM7CgoJ dkJ1bGxldGluLmFkZF9ldmVudCgidkJtZW51U2hvd18iICsgdGhpcy5jb250cm9s a2V5KTsKCXZCdWxsZXRpbi5hZGRfZXZlbnQoInZCbWVudUhpZGVfIiArIHRoaXMu Y29udHJvbGtleSk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQovLyB2Ql9Qb3B1cF9NZW51IG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemUgdGhl IGNvbnRyb2wgb2JqZWN0CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf Y29udHJvbCA9IGZ1bmN0aW9uKG5vaW1hZ2UpCnsKCXRoaXMuY29udHJvbG9iaiA9 IGZldGNoX29iamVjdCh0aGlzLmNvbnRyb2xrZXkpOwoJdGhpcy5jb250cm9sb2Jq LnN0YXRlID0gZmFsc2U7CgoJaWYgKHRoaXMuY29udHJvbG9iai5maXJzdENoaWxk ICYmICh0aGlzLmNvbnRyb2xvYmouZmlyc3RDaGlsZC50YWdOYW1lID09ICdURVhU QVJFQScgfHwgdGhpcy5jb250cm9sb2JqLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAn SU5QVVQnKSkKCXsKCQkvLyBkbyBub3RoaW5nCgl9CgllbHNlCgl7CgkJaWYgKCFu b2ltYWdlICYmICEoaXNfbWFjICYmIGlzX2llKSkKCQl7CgkJCXZhciBzcGFjZSA9 IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyk7CgkJCXRoaXMuY29udHJvbG9i ai5hcHBlbmRDaGlsZChzcGFjZSk7CgoJCQl2YXIgaW1nID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaW1nJyk7CgkJCWltZy5zcmMgPSBJTUdESVJfTUlTQyArICcv bWVudV9vcGVuLmdpZic7CgkJCWltZy5ib3JkZXIgPSAwOwoJCQlpbWcudGl0bGUg PSAnJzsKCQkJaW1nLmFsdCA9ICcnOwoJCQl0aGlzLmNvbnRyb2xvYmouYXBwZW5k Q2hpbGQoaW1nKTsKCQl9CgoJCXRoaXMuY29udHJvbG9iai51bnNlbGVjdGFibGUg PSB0cnVlOwoJCWlmICghbm9pbWFnZSkKCQl7CgkJCXRoaXMuY29udHJvbG9iai5z dHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsKCQl9CgkJdGhpcy5jb250cm9s b2JqLm9uY2xpY2sgPSB2Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xv Ympfb25jbGljazsKCQl0aGlzLmNvbnRyb2xvYmoub25tb3VzZW92ZXIgPSB2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xvYmpfb25tb3VzZW92ZXI7Cgl9 Cn07CgovKioKKiBJbml0IHRoZSBwb3B1cCBtZW51IG9iamVjdAoqLwp2Ql9Qb3B1 cF9NZW51LnByb3RvdHlwZS5pbml0X21lbnUgPSBmdW5jdGlvbigpCnsKCXRoaXMu bWVudW9iaiA9IGZldGNoX29iamVjdCh0aGlzLm1lbnVuYW1lKTsKCglpZiAodGhp cy5tZW51b2JqICYmICF0aGlzLm1lbnVvYmouaW5pdGlhbGl6ZWQpCgl7CgkJdGhp cy5tZW51b2JqLmluaXRpYWxpemVkID0gdHJ1ZTsKCQl0aGlzLm1lbnVvYmoub25j bGljayA9IGVfYnlfZ3VtOwoJCXRoaXMubWVudW9iai5zdHlsZS5wb3NpdGlvbiA9 ICdhYnNvbHV0ZSc7CgkJdGhpcy5tZW51b2JqLnN0eWxlLnpJbmRleCA9IDUwOwoK CQkvLyBpbml0IHBvcHVwIGZpbHRlcnMgKGllIG9ubHkpCgkJaWYgKGlzX2llICYm ICFpc19tYWMpCgkJewoJCQl0aGlzLm1lbnVvYmouc3R5bGUuZmlsdGVyICs9ICJw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEoZW5hYmxlZD0x LG9wYWNpdHk9MTAwKSI7CgkJCXRoaXMubWVudW9iai5zdHlsZS5maWx0ZXIgKz0g InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5zaGFkb3coZGlyZWN0 aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3RoPTMpIjsKCQl9CgoJCXRoaXMu aW5pdF9tZW51X2NvbnRlbnRzKCk7Cgl9Cn07CgovKioKKiBJbml0IHRoZSBwb3B1 cCBtZW51IGNvbnRlbnRzCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf bWVudV9jb250ZW50cyA9IGZ1bmN0aW9uKCkKewoJdmFyIHRkcyA9IGZldGNoX3Rh Z3ModGhpcy5tZW51b2JqLCAndGQnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgdGRz Lmxlbmd0aDsgaSsrKQoJewoJCWlmICh0ZHNbaV0uY2xhc3NOYW1lID09ICd2Ym1l bnVfb3B0aW9uJykKCQl7CgkJCWlmICh0ZHNbaV0udGl0bGUgJiYgdGRzW2ldLnRp dGxlID09ICdub2hpbGl0ZScpCgkJCXsKCQkJCS8vIG5vdCBhbiBhY3RpdmUgY2Vs bAoJCQkJdGRzW2ldLnRpdGxlID0gJyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkv LyBjcmVhdGUgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgbWVudSBjbGFzcwoJCQkJ dGRzW2ldLmNvbnRyb2xrZXkgPSB0aGlzLmNvbnRyb2xrZXk7CgoJCQkJLy8gaGFu ZGxlIG1vdXNlb3ZlciAvIG1vdXNlb3V0IGhpZ2hsaWdodGluZyBldmVudHMKCQkJ CXRkc1tpXS5vbm1vdXNlb3ZlciA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUu bWVudW9wdGlvbl9vbm1vdXNlb3ZlcjsKCQkJCXRkc1tpXS5vbm1vdXNlb3V0ID0g dkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VvdXQ7 CgoJCQkJdmFyIGxpbmtzID0gZmV0Y2hfdGFncyh0ZHNbaV0sICdhJyk7CgkJCQlp ZiAobGlua3MubGVuZ3RoID09IDEpCgkJCQl7CgkJCQkJLyogT2sgd2UgaGF2ZSBh IGxpbmssIHdlIHNob3VsZCB1c2UgdGhpcyBpZgoJCQkJCTEuIFRoZXJlIGlzIG5v IG9uY2xpY2sgZXZlbnQgaW4gdGhlIGxpbmsKCQkJCQkyLiBUaGVyZSBpcyBubyBv bmNsaWNrIGV2ZW50IG9uIHRoZSBjZWxsCgkJCQkJMy4gVGhlIG9uY2xpY2sgZXZl bnQgZm9yIHRoZSBjZWxsIHNob3VsZCBlcXVhbCB0aGUgbGluayBpZiB0aGUgYWJv dmUgYXJlIHRydWUKCgkJCQkJSWYgd2UgZmluZCBhIGJyb3dzZXIgdGhhdHMgZ2V0 cyBjb25mdXNlZCB3ZSBtYXkgbmVlZCB0byBzZXQgcmVtb3ZlX2xpbmsgdG8gdHJ1 ZSBmb3IgaXQuCgkJCQkJKi8KCgkJCQkJdGRzW2ldLmNsYXNzTmFtZSA9IHRkc1tp XS5jbGFzc05hbWUgKyAnIHZibWVudV9vcHRpb25fYWxpbmsnOwoJCQkJCXRkc1tp XS5pc2xpbmsgPSB0cnVlOwoKCQkJCQl2YXIgbGlua29iaiA9IGxpbmtzWzBdOwoJ CQkJCXZhciByZW1vdmVfbGluayA9IGZhbHNlOwoKCQkJCQl0ZHNbaV0udGFyZ2V0 ID0gbGlua29iai5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpOwoKCQkJCQlpZiAodHlw ZW9mIGxpbmtvYmoub25jbGljayA9PSAnZnVuY3Rpb24nKQoJCQkJCXsKCQkJCQkJ dGRzW2ldLm9mdW5jID0gbGlua29iai5vbmNsaWNrOwoJCQkJCQl0ZHNbaV0ub25j bGljayA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2Z1bmN0aW9uOwoJCQkJCQlyZW1vdmVfbGluayA9IHRydWU7CgkJCQkJfQoJ CQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9PSAnZnVuY3Rpb24n KQoJCQkJCXsKCQkJCQkJdGRzW2ldLm9mdW5jID0gdGRzW2ldLm9uY2xpY2s7CgkJ CQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5t ZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQkJCXJlbW92ZV9saW5rID0g dHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGRzW2ldLmhyZWYg PSBsaW5rb2JqLmhyZWY7CgkJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBf RXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfbGluazsKCQkJCQl9 CgoJCQkJCWlmIChyZW1vdmVfbGluaykKCQkJCQl7CgkJCQkJCXZhciBuZXdsaW5r ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQluZXdsaW5rLmlu bmVySFRNTCA9IGxpbmtvYmouaW5uZXJIVE1MOwoJCQkJCQluZXdsaW5rLmhyZWYg PSAnIyc7CgkJCQkJCW5ld2xpbmsub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZSA9 IGUgPyBlIDogd2luZG93LmV2ZW50OyBlLnJldHVyblZhbHVlID0gZmFsc2U7IHJl dHVybiBmYWxzZTsgfTsKCQkJCQkJdGRzW2ldLmluc2VydEJlZm9yZShuZXdsaW5r LCBsaW5rb2JqKTsKCQkJCQkJdGRzW2ldLnJlbW92ZUNoaWxkKGxpbmtvYmopOwoJ CQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9 PSAnZnVuY3Rpb24nKQoJCQkJewoJCQkJCXRkc1tpXS5vZnVuYyA9IHRkc1tpXS5v bmNsaWNrOwoJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnBy b3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQl9CgkJCX0K CQl9Cgl9Cn07CgovKioKKiBTaG93IHRoZSBtZW51CioKKiBAcGFyYW0Jb2JqZWN0 CVRoZSBjb250cm9sIG9iamVjdCBjYWxsaW5nIHRoZSBtZW51CiogQHBhcmFtCWJv b2xlYW4JVXNlIHNsaWRlIChmYWxzZSkgb3Igb3BlbiBpbnN0YW50bHk/ICh0cnVl KQoqLwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24ob2Jq LCBpbnN0YW50KQp7CglpZiAoIXZCbWVudS5hY3RpdmUpCgl7CgkJcmV0dXJuIGZh bHNlOwoJfQoJZWxzZSBpZiAoIXRoaXMubWVudW9iaikKCXsKCQl0aGlzLmluaXRf bWVudSgpOwoJfQoKCWlmICghdGhpcy5tZW51b2JqIHx8IHZCbWVudS5hY3RpdmVt ZW51ID09IHRoaXMuY29udHJvbGtleSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJ Y29uc29sZS5sb2coInZCbWVudSA6OiBTaG93ICclcyciLCB0aGlzLmNvbnRyb2xr ZXkpOwoKCWlmICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsICYmIHZCbWVudS5h Y3RpdmVtZW51ICE9IHRoaXMuY29udHJvbGtleSkKCXsKCQl2Qm1lbnUubWVudXNb dkJtZW51LmFjdGl2ZW1lbnVdLmhpZGUoKTsKCX0KCgl2Qm1lbnUuYWN0aXZlbWVu dSA9IHRoaXMuY29udHJvbGtleTsKCgl0aGlzLm1lbnVvYmouc3R5bGUuZGlzcGxh eSA9ICcnOwoJaWYgKHRoaXMuc2xpZGVfb3BlbikKCXsKCQl0aGlzLm1lbnVvYmou c3R5bGUuY2xpcCA9ICdyZWN0KGF1dG8sIDBweCwgMHB4LCBhdXRvKSc7Cgl9CgoJ dGhpcy5zZXRfbWVudV9wb3NpdGlvbihvYmopOwoKCWlmICghaW5zdGFudCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwo dGhpcy5tZW51b2JqLm9mZnNldFdpZHRoIC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0 aGlzLmludGVydmFsWSA9IE1hdGguY2VpbCh0aGlzLm1lbnVvYmoub2Zmc2V0SGVp Z2h0IC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0aGlzLnNsaWRlKCh0aGlzLmRpcmVj dGlvbiA9PSAnbGVmdCcgPyAwIDogdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSwg MCwgMCk7Cgl9CgllbHNlIGlmICh0aGlzLm1lbnVvYmouc3R5bGUuY2xpcCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAn cmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7Cgl9CgoJLy8gZGVhbCB3aXRo IElFIHB1dHRpbmcgPHNlbGVjdD4gZWxlbWVudHMgb24gdG9wIG9mIGV2ZXJ5dGhp bmcKCXRoaXMuaGFuZGxlX292ZXJsYXBzKHRydWUpOwoKCWlmICh0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gdHJ1 ZTsKCQkvL3RoaXMuY29udHJvbG9iai5lZGl0b3IubWVudV9jb250ZXh0KHRoaXMu Y29udHJvbG9iaiwgJ21vdXNlZG93bicpOwoJCXZCX0VkaXRvclt0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLmNvbnRyb2xvYmosICdt b3VzZWRvd24nKTsKCX0KCgl2QnVsbGV0aW4uZXZlbnRzWyJ2Qm1lbnVTaG93XyIg KyB0aGlzLmNvbnRyb2xrZXldLmZpcmUodGhpcy5jb250cm9sa2V5KTsKCXZCdWxs ZXRpbi5ldmVudHMudkJtZW51U2hvdy5maXJlKHRoaXMuY29udHJvbGtleSk7Cn07 CgovKioKKiBQb3NpdGlvbiB0aGUgbWVudSByZWxhdGl2ZSB0byBhIHJlZmVyZW5j ZSBlbGVtZW50CioKKiBAcGFyYW0Jb2JqZWN0CVJlZmVyZW5jZSBIVE1MIGVsZW1l bnQKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuc2V0X21lbnVfcG9zaXRpb24g PSBmdW5jdGlvbihvYmopCnsKCXRoaXMucG9zID0gdGhpcy5mZXRjaF9vZmZzZXQo b2JqKTsKCXRoaXMubGVmdHB4ID0gdGhpcy5wb3NbJ2xlZnQnXTsKCXRoaXMudG9w cHggPSB0aGlzLnBvc1sndG9wJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoKCWlmICgo dGhpcy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgpID49IGRvY3Vt ZW50LmJvZHkuY2xpZW50V2lkdGggJiYgKHRoaXMubGVmdHB4ICsgb2JqLm9mZnNl dFdpZHRoIC0gdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSA+IDApCgl7CgkJdGhp cy5sZWZ0cHggPSB0aGlzLmxlZnRweCArIG9iai5vZmZzZXRXaWR0aCAtIHRoaXMu bWVudW9iai5vZmZzZXRXaWR0aDsKCQl0aGlzLmRpcmVjdGlvbiA9ICdyaWdodCc7 Cgl9CgllbHNlCgl7CgkJdGhpcy5kaXJlY3Rpb24gPSAnbGVmdCcKCX0KCgl0aGlz Lm1lbnVvYmouc3R5bGUubGVmdCA9IHRoaXMubGVmdHB4ICsgJ3B4JzsKCXRoaXMu bWVudW9iai5zdHlsZS50b3AgID0gdGhpcy50b3BweCArICdweCc7Cn07CgovKioK KiBIaWRlIHRoZSBtZW51CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmhpZGUg PSBmdW5jdGlvbihlKQp7CglpZiAoZSAmJiBlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAh PSAxKQoJewoJCS8vIGdldCBhcm91bmQgc29tZSBjb250ZXh0IG1lbnUgaXNzdWVz IGV0Yy4KCQlyZXR1cm4gdHJ1ZTsKCX0KCgljb25zb2xlLmxvZygidkJtZW51IDo6 IEhpZGUgJyVzJyIsIHRoaXMuY29udHJvbGtleSk7CgoJdGhpcy5zdG9wX3NsaWRl KCk7CgoJdGhpcy5tZW51b2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgoJdGhp cy5oYW5kbGVfb3ZlcmxhcHMoZmFsc2UpOwoKCWlmICh0aGlzLmNvbnRyb2xvYmou ZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gZmFsc2U7CgkJ dkJfRWRpdG9yW3RoaXMuY29udHJvbG9iai5lZGl0b3JpZF0ubWVudV9jb250ZXh0 KHRoaXMuY29udHJvbG9iaiwgJ21vdXNlb3V0Jyk7Cgl9CgoJdkJtZW51LmFjdGl2 ZW1lbnUgPSBudWxsOwoKCXZCdWxsZXRpbi5ldmVudHNbInZCbWVudUhpZGVfIiAr IHRoaXMuY29udHJvbGtleV0uZmlyZSh0aGlzLmNvbnRyb2xrZXkpOwoJdkJ1bGxl dGluLmV2ZW50cy52Qm1lbnVIaWRlLmZpcmUodGhpcy5jb250cm9sa2V5KTsKfTsK Ci8qKgoqIEhvdmVyIGJlaGF2aW91ciBmb3IgY29udHJvbCBvYmplY3QKKi8KdkJf UG9wdXBfTWVudS5wcm90b3R5cGUuaG92ZXIgPSBmdW5jdGlvbihvYmopCnsKCWlm ICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCWlmICh2Qm1lbnUubWVu dXNbdkJtZW51LmFjdGl2ZW1lbnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkKCQl7 CgkJCXRoaXMuc2hvdyhvYmosIHRydWUpOwoJCX0KCX0KfTsKCi8qKgoqIFNsaWRl cyBtZW51IG9wZW4KKgoqIEBwYXJhbQlpbnRlZ2VyCUNsaXAgWAoqIEBwYXJhbQlp bnRlZ2VyCUNsaXAgWQoqIEBwYXJhbQlpbnRlZ2VyCU9wYWNpdHkgKDAtMTAwKQoq Lwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zbGlkZSA9IGZ1bmN0aW9uKGNsaXBY LCBjbGlwWSwgb3BhY2l0eSkKewoJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0 JyAmJiAoY2xpcFggPCB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGggfHwgY2xpcFkg PCB0aGlzLm1lbnVvYmoub2Zmc2V0SGVpZ2h0KSkKCXsKCQlpZiAodkJtZW51Lm9w ZW5fZmFkZSAmJiBpc19pZSkKCQl7CgkJCW9wYWNpdHkgKz0gMTA7CgkJCXRoaXMu bWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0 LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoKCQljbGlwWCArPSB0aGlz LmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVydmFsWTsKCgkJdGhpcy5t ZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFggKyAicHgs ICIgKyBjbGlwWSArICJweCwgYXV0bykiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNl dFRpbWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUo IiArIGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsi LCAwKTsKCX0KCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdodCcgJiYg KGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMubWVudW9iai5vZmZzZXRIZWlnaHQp KQoJewoJCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlzX2llKQoJCXsKCQkJb3Bh Y2l0eSArPSAxMDsKCQkJbWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoK CQljbGlwWCAtPSB0aGlzLmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVy dmFsWTsKCgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAi ICsgdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoICsgInB4LCAiICsgY2xpcFkgKyAi cHgsICIgKyBjbGlwWCArICJweCkiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNldFRp bWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUoIiAr IGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsiLCAw KTsKCX0KCWVsc2UKCXsKCQl0aGlzLnN0b3Bfc2xpZGUoKTsKCX0KfTsKCi8qKgoq IEFib3J0IG1lbnUgc2xpZGVyCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLnN0 b3Bfc2xpZGUgPSBmdW5jdGlvbigpCnsKCWNsZWFyVGltZW91dCh0aGlzLnNsaWRl dGltZXIpOwoKCXRoaXMubWVudW9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywg YXV0bywgYXV0bywgYXV0byknOwoKCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlz X2llKQoJewoJCXRoaXMubWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IDEwMDsKCX0KfTsKCi8q KgoqIEZldGNoIG9mZnNldCBvZiBhbiBvYmplY3QKKgoqIEBwYXJhbQlvYmplY3QJ VGhlIG9iamVjdCB0byBiZSBtZWFzdXJlZAoqCiogQHJldHVybglhcnJheQlUaGUg bWVhc3VyZWQgb2Zmc2V0cyBsZWZ0L3RvcAoqLwp2Ql9Qb3B1cF9NZW51LnByb3Rv dHlwZS5mZXRjaF9vZmZzZXQgPSBmdW5jdGlvbihvYmopCnsKCWlmIChvYmouZ2V0 Qm91bmRpbmdDbGllbnRSZWN0KQoJewoJCS8vIGJldHRlciwgbW9yZSBhY2N1cmF0 ZSBmdW5jdGlvbiBmb3IgSUUKCQl2YXIgcmVjdCA9IG9iai5nZXRCb3VuZGluZ0Ns aWVudFJlY3QoKTsKCgkJdmFyIHNjcm9sbFRvcCA9IE1hdGgubWF4KGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xs VG9wKTsKCQl2YXIgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQp OwoKCQlpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PSAncnRsJykK CQl7CgkJCS8vIElFIHJldHVybnMgYSBwb3NpdGl2ZSBzY3JvbGxMZWZ0LCBidXQg d2UgbmVlZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIGFjdHVhbGx5IGRvIHByb3BlciBj YWxjdWxhdGlvbnMuCgkJCS8vIFRoaXMgYWN0dWFsbHkgZmxpcHMgdGhlIHNjb2xs b2luZyB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlzdGFuY2Ugc2Nyb2xsZWQgZnJv bSB0aGUgZGVmYXVsdC4KCQkJc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgKyBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7CgkJfQoKCQlyZXR1cm4geyAnbGVmdCcg OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LCAndG9wJyA6IHJlY3QudG9wICsgc2Ny b2xsVG9wIH07Cgl9CgoJdmFyIGxlZnRfb2Zmc2V0ID0gb2JqLm9mZnNldExlZnQ7 Cgl2YXIgdG9wX29mZnNldCA9IG9iai5vZmZzZXRUb3A7CgoJd2hpbGUgKChvYmog PSBvYmoub2Zmc2V0UGFyZW50KSAhPSBudWxsKQoJewoJCWxlZnRfb2Zmc2V0ICs9 IG9iai5vZmZzZXRMZWZ0OwoJCXRvcF9vZmZzZXQgKz0gb2JqLm9mZnNldFRvcDsK CX0KCglyZXR1cm4geyAnbGVmdCcgOiBsZWZ0X29mZnNldCwgJ3RvcCcgOiB0b3Bf b2Zmc2V0IH07Cn07CgovKioKKiBEZXRlY3QgYW4gb3ZlcmxhcCBvZiBhbiBvYmpl Y3QgYW5kIGEgbWVudQoqCiogQHBhcmFtCW9iamVjdAlPYmplY3QgdG8gYmUgdGVz dGVkIGZvciBvdmVybGFwCiogQHBhcmFtCWFycmF5CUFycmF5IG9mIGRpbWVuc2lv bnMgZm9yIG1lbnUgb2JqZWN0CioKKiBAcmV0dXJuCWJvb2xlYW4JVHJ1ZSBpZiBv dmVybGFwCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLm92ZXJsYXBzID0gZnVu Y3Rpb24ob2JqLCBtKQp7Cgl2YXIgcyA9IG5ldyBBcnJheSgpOwoJdmFyIHBvcyA9 IHRoaXMuZmV0Y2hfb2Zmc2V0KG9iaik7CglzWydMJ10gPSBwb3NbJ2xlZnQnXTsK CXNbJ1QnXSA9IHBvc1sndG9wJ107CglzWydSJ10gPSBzWydMJ10gKyBvYmoub2Zm c2V0V2lkdGg7CglzWydCJ10gPSBzWydUJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoK CglpZiAoc1snTCddID4gbVsnUiddIHx8IHNbJ1InXSA8IG1bJ0wnXSB8fCBzWydU J10gPiBtWydCJ10gfHwgc1snQiddIDwgbVsnVCddKQoJewoJCXJldHVybiBmYWxz ZTsKCX0KCXJldHVybiB0cnVlOwp9OwoKLyoqCiogSGFuZGxlIElFIG92ZXJsYXBw aW5nIDxzZWxlY3Q+IGVsZW1lbnRzCioKKiBAcGFyYW0JYm9vbGVhbglIaWRlICh0 cnVlKSBvciBzaG93IChmYWxzZSkgb3ZlcmxhcHBpbmcgPHNlbGVjdD4gZWxlbWVu dHMKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuaGFuZGxlX292ZXJsYXBzID0g ZnVuY3Rpb24oZG9oaWRlKQp7CglpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl2 YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxlY3QnKTsKCgkJ aWYgKGRvaGlkZSkKCQl7CgkJCXZhciBtZW51YXJlYSA9IG5ldyBBcnJheSgpOyBt ZW51YXJlYSA9IHsKCQkJCSdMJyA6IHRoaXMubGVmdHB4LAoJCQkJJ1InIDogdGhp cy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgsCgkJCQknVCcgOiB0 aGlzLnRvcHB4LAoJCQkJJ0InIDogdGhpcy50b3BweCArIHRoaXMubWVudW9iai5v ZmZzZXRIZWlnaHQKCQkJfTsKCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0 cy5sZW5ndGg7IGkrKykKCQkJewoJCQkJaWYgKHRoaXMub3ZlcmxhcHMoc2VsZWN0 c1tpXSwgbWVudWFyZWEpKQoJCQkJewoJCQkJCXZhciBoaWRlID0gdHJ1ZTsKCQkJ CQl2YXIgcyA9IHNlbGVjdHNbaV07CgkJCQkJd2hpbGUgKHMgPSBzLnBhcmVudE5v ZGUpCgkJCQkJewoJCQkJCQlpZiAocy5jbGFzc05hbWUgPT0gJ3ZibWVudV9wb3B1 cCcpCgkJCQkJCXsKCQkJCQkJCWhpZGUgPSBmYWxzZTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQl9CgkJCQkJfQoKCQkJCQlpZiAoaGlkZSkKCQkJCQl7CgkJCQkJCXNlbGVj dHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCQkJCQl2Qm1lbnUu aGlkZGVuX3NlbGVjdHMucHVzaChpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJ ZWxzZQoJCXsKCQkJd2hpbGUgKHRydWUpCgkJCXsKCQkJCXZhciBpID0gdkJtZW51 LmhpZGRlbl9zZWxlY3RzLnBvcCgpOwoJCQkJaWYgKHR5cGVvZiBpID09ICd1bmRl ZmluZWQnIHx8IGkgPT0gbnVsbCkKCQkJCXsKCQkJCQlicmVhazsKCQkJCX0KCQkJ CWVsc2UKCQkJCXsKCQkJCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAn dmlzaWJsZSc7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovLyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwovLyBNZW51IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25z CgovKioKKiBDbGFzcyBjb250YWluaW5nIG1lbnUgcG9wdXAgZXZlbnQgaGFuZGxl cnMKKi8KZnVuY3Rpb24gdkJfUG9wdXBfRXZlbnRzKCkKewp9OwoKLyoqCiogSGFu ZGxlcyBjb250cm9sIG9iamVjdCBjbGljayBldmVudHMKKi8KdkJfUG9wdXBfRXZl bnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7 CglpZiAodHlwZW9mIGRvX2FuX2UgPT0gJ2Z1bmN0aW9uJykKCXsKCQlkb19hbl9l KGUpOwoJCWlmICh2Qm1lbnUuYWN0aXZlbWVudSA9PSBudWxsIHx8IHZCbWVudS5t ZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uY29udHJvbGtleSAhPSB0aGlzLmlkKQoJ CXsKCQkJdkJtZW51Lm1lbnVzW3RoaXMuaWRdLnNob3codGhpcyk7CgkJfQoJCWVs c2UKCQl7CgkJCXZCbWVudS5tZW51c1t0aGlzLmlkXS5oaWRlKCk7CgkJfQoJfQp9 OwoKLyoqCiogSGFuZGxlcyBjb250cm9sIG9iamVjdCBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUuY29udHJvbG9ial9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVu Y3Rpb24nKQoJewoJCWRvX2FuX2UoZSk7CgkJdkJtZW51Lm1lbnVzW3RoaXMuaWRd LmhvdmVyKHRoaXMpOwoJfQp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBj bGljayBldmVudHMgZm9yIG9wdGlvbnMgd2l0aCBvbmNsaWNrIGV2ZW50cwoqLwp2 Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25jbGlja19mdW5j dGlvbiA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMub2Z1bmMoZSk7Cgl2Qm1lbnUubWVu dXNbdGhpcy5jb250cm9sa2V5XS5oaWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIG1l bnUgb3B0aW9uIGNsaWNrIGV2ZW50cyBmb3Igb3B0aW9ucyBjb250YWluaW5nIGxp bmtzCiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2xpbmsgPSBmdW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZl bnQ7CgoJaWYgKGUuc2hpZnRLZXkgfHwgKHRoaXMudGFyZ2V0ICE9IG51bGwgJiYg dGhpcy50YXJnZXQgIT0gJycgJiYgdGhpcy50YXJnZXQudG9Mb3dlckNhc2UoKSAh PSAnX3NlbGYnKSkKCXsKCQlpZiAodGhpcy50YXJnZXQgIT0gbnVsbCAmJiB0aGlz LnRhcmdldC5jaGFyQXQoMCkgIT0gJ18nKQoJCXsKCQkJd2luZG93Lm9wZW4odGhp cy5ocmVmLCB0aGlzLnRhcmdldCk7CgkJfQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5v cGVuKHRoaXMuaHJlZik7CgkJfQoJfQoJZWxzZQoJewoJCXdpbmRvdy5sb2NhdGlv biA9IHRoaXMuaHJlZjsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLy8gU2FmYXJpIGhh cyAiaXNzdWVzIiB3aXRoIHJlc2V0dGluZyB3aGF0IHdhcyBjbGlja2VkIG9uLCBz dXBlciBtaW5vciBhbmQgSSBkb250IGNhcmUKCWUuY2FuY2VsQnViYmxlID0gdHJ1 ZTsKCWlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsK CWlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7CgoJdkJt ZW51Lm1lbnVzW3RoaXMuY29udHJvbGtleV0uaGlkZSgpOwoJcmV0dXJuIGZhbHNl Owp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9o aWxpdGUnICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6 ICcnKTsKCXRoaXMuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7Cn07Cgov KioKKiBIYW5kbGVzIG1lbnUgb3B0aW9uIG1vdXNlb3V0IGV2ZW50cwoqLwp2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZW91dCA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9vcHRpb24nICsg KHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfb3B0aW9uX2FsaW5rJyA6ICcnKTsKCXRo aXMuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnOwp9OwoKLyo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxl JCAtICRSZXZpc2lvbjogMjY0NDYgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpc Kj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=gal.js Content-Type: application/x-javascript; charset=windows-1251; name=gal.js Content-Location: http://forum.qip.ru/geek/gal/clientscript/gal.js Content-Transfer-Encoding: Base64 DQoNCi8vUG9wdXANCmZ1bmN0aW9uIGdhbF9yZWdpc3RlcihpZCwgc3R5bGVpZCwg cG9zaXRpb24sIG5vaW1hZ2UsIHgsIHkpDQp7DQogICAgICAgIGlmICh0eXBlb2Yg Z2FsID09ICdvYmplY3QnKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0 dXJuIGdhbC5yZWdpc3RlcihpZCwgc3R5bGVpZCwgcG9zaXRpb24sIG5vaW1hZ2Us IHgsIHkpOw0KICAgICAgICB9DQogICAgICAgIC8vYWxlcnQoImdhbCByZWdpc3Rl cmVkICIgKyBpZCk7DQp9DQoNCnZhciBHRUVLX0dBTF9QT1BVUCAJCQk9IDE7DQp2 YXIgR0VFS19HQUxfRk9MTE9XIAkJPSAyOw0KdmFyIEdFRUtfR0FMX1NUSUNLIAkJ CT0gMzsNCg0KdmFyIEdFRUtfR0FMX0JPVFRPTV9MRUZUCT0gMTsNCnZhciBHRUVL X0dBTF9CT1RUT01fUklHSFQJPSAyOw0KdmFyIEdFRUtfR0FMX1RPUF9MRUZUIAkJ PSAzOw0KdmFyIEdFRUtfR0FMX1RPUF9SSUdIVCAJCT0gNDsNCg0KDQpmdW5jdGlv biBnZWVrX2dhbCgpDQp7DQoNCiAgICAgICAgdGhpcy5zbGlkZV9vcGVuID0gKGlz X29wZXJhIHx8IGlzX3NhZiA/IGZhbHNlIDogdHJ1ZSk7DQogICAgICAgIHRoaXMu b3Blbl9mYWRlID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTsN CiAgICAgICAgdGhpcy5wb3B1cHMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdGhp cy5hY3RpdmVwb3B1cCA9IG51bGw7DQogICAgICAgIHRoaXMuaGlkZGVuX3NlbGVj dHMgPSBuZXcgQXJyYXkoKTsNCn0NCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuZmV0 Y2hfb2Zmc2V0ID0gZnVuY3Rpb24ob2JqKQ0KCQl7DQoJCSAgICAgICAgdmFyIGwg PSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAgICB2YXIgdCA9IG9iai5vZmZzZXRU b3A7DQoJCSAgICAgICAgdmFyIHIgPSBvYmoub2Zmc2V0V2lkdGg7DQoJCSAgICAg ICAgdmFyIGIgPSBvYmoub2Zmc2V0SGVpZ2h0DQoNCgkJICAgICAgICB3aGlsZSAo KG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpICE9IG51bGwpDQoJCSAgICAgICAgew0K CQkgICAgICAgICAgICAgICAgbCArPSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAg ICAgICAgICAgIHQgKz0gb2JqLm9mZnNldFRvcDsNCgkJICAgICAgICB9DQoNCgkJ ICAgICAgICB2YXIgciA9IHIgKyBsOw0KCQkgICAgICAgIHZhciBiID0gYiArIHQ7 DQoJCSAgICAgICAgdmFyIGggPSBiIC0gdDsNCgkJICAgICAgICB2YXIgdyA9IHIg LSBsOw0KDQoJCSAgICAgICAgcmV0dXJuIHsgJ2wnIDogbCwgJ3QnIDogdCwgJ3In IDogciwgJ2InIDogYiwgJ2gnIDogaCwgJ3cnIDogd307DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oYWN0aXZlKQ0KCQl7 DQoJCSAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oaWQsIHN0eWxlaWQs IHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0KCQl7DQoJCSAgICAgICAgaWYgKCF0 aGlzLnBvcHVwc1tpZF0pDQoJCSAgICAgICAgew0KCQkJCQl0aGlzLnBvcHVwc1tp ZF0gPSBuZXcgZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxlaWQsIHBvc2l0aW9uLCBu b2ltYWdlLCB4LCB5KTsNCgkJICAgICAgICB9DQoJCSAgICAgICAgcmV0dXJuIHRo aXMucG9wdXBzW2lkXTsNCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuaGlk ZSA9IGZ1bmN0aW9uKGZvcmNlKQ0KCQl7DQoJCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsICE9IG51bGwpDQoJCSAgICAgICAgew0KCQkgICAgICAgICAgICAgICAg dGhpcy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLmhpZGUoZm9yY2UpOw0KCQkgICAg ICAgIH0NCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUudGljayA9IGZ1bmN0 aW9uKCkNCgkJew0KCQkJdGhpcy5jbG9jayA9IHNldFRpbWVvdXQoImdhbC50aWNr KCk7IiwgdGhpcy50aWNrX2NvdW50KTsNCg0KCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsID09IG51bGwpDQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuOw0K CSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhpcy5wb3B1cHNbdGhpcy5hY3Rp dmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfU1RJQ0spDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhp cy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9M TE9XKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0 aXZlZ2FsXS5wb3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KGZldGNoX29iamVjdCh0aGlz LmFjdGl2ZWdhbCkpOw0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0aXZl Z2FsXS5yZXBvc2l0aW9uKHRoaXMubW91c2VYLCB0aGlzLm1vdXNlWSk7DQoJICAg ICAgICB9DQoNCgkgICAgICAgIGlmICh0aGlzLnRpY2tfY2xvY2sgPCAxMCkNCgkg ICAgICAgIHsNCgkgICAgICAgIAl0aGlzLnRpY2tfY2xvY2sgKys7DQoJICAgICAg ICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRoaXMudGlja19jbG9jayA9IDA7DQoJICAgICAgICB9DQoN CgkgICAgICAgIGlmICh0aGlzLnRpY2tfbG9ja2VkID09IHRydWUpDQoJICAgICAg ICB7DQoJICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxz ZQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMudGlja19sb2NrZWQgPSB0cnVl Ow0KCSAgICAgICAgfQ0KDQoJICAgICAgICB0aGlzLnRpY2tlciArKzsNCgkgICAg ICAgIC8vd2luZG93LnN0YXR1cyA9IHRoaXMudGlja2VyOw0KDQoJICAgICAgICB2 YXIgdGVzdCA9IGZhbHNlOw0KCSAgICAgICAgdmFyIHRlc3QyID0gZmFsc2U7DQoN CgkgICAgICAgIGlmICh0aGlzLmFjdGl2ZWdhbCAhPSBudWxsKQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRlc3QgPSB0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0u aGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsNCgkgICAgICAgIAl0 ZXN0MiA9IHRoaXMucG9wdXBzW3RoaXMuYWN0aXZlZ2FsXS5hbmNob3JzW3RoaXMu YWN0aXZlbGlua10uaGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsN Cg0KCSAgICAgICAgCS8vd2luZG93LnN0YXR1cyA9ICJjb250ZW50OiAiICsgdGVz dCArICIgbGluazogIiArdGVzdDI7DQoJICAgICAgICB9DQoNCgkgICAgICAgIGlm ICh0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0uc3R5bGVpZCA9PSBHRUVLX0dB TF9GT0xMT1cgJiYgIXRlc3QyKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMu aGlkZSgpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgew0K CQkgICAgICAgIGlmICghdGVzdCAmJiAhdGVzdDIpDQoJCSAgICAgICAgew0KCQkg ICAgICAgIAl0aGlzLmhpZGUoKTsNCg0KCQkgICAgICAgIH0NCgkgICAgICAgIH0N CgkgICAgICAgIHRoaXMudGlja19sb2NrZWQgPSBmYWxzZTsNCgkJfTsNCg0KDQov L2FuY2hvcnMNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hbmNob3IoaWQsIGNvbnRl bnRpZCwgbm9pbWFnZSkNCnsNCiAgICAgICAgdGhpcy5pZCA9IGlkOw0KICAgICAg ICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCiAgICAgICAgdGhpcy5ub2lt YWdlID0gbm9pbWFnZTsNCiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIoaWQs IGNvbnRlbnRpZCwgbm9pbWFnZSk7DQp9DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnBy b3RvdHlwZS5oaXRfdGVzdCA9IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKQ0KCQl7 DQoNCgkJCXZhciBjbGllbnQgPSBnYWxfY2xpZW50YXJlYSgpOw0KDQoJCQl5ID0g bW91c2VZOw0KCQkJeCA9IG1vdXNlWDsNCg0KCQkJZSA9IGZldGNoX29iamVjdCh0 aGlzLmlkKTsNCgkJCWEgPSBnYWwuZmV0Y2hfb2Zmc2V0KGUpOw0KDQoJCQlhLnQg LT0gY2xpZW50Lmg7DQoJCQlhLmIgLT0gY2xpZW50Lmg7DQoNCgkJCWEubCAtPSBj bGllbnQudzsNCgkJCWEuciAtPSBjbGllbnQudzsNCg0KCQkJLy93aW5kb3cuc3Rh dHVzID0gbW91c2VYOw0KCSAgICAgICAgaWYgKCh4ID4gYS5sKSAmJiAoeCA8IChh LnIpKSAmJiAoeSA+IGEudCkgJiYgKHkgPCAoYS5iKSkpDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNl DQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuIGZhbHNlOw0KCSAgICAgICAg fQ0KDQoJCX07DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnByb3RvdHlwZS5yZWdpc3Rl ciA9IGZ1bmN0aW9uKGlkLCBjb250ZW50aWQsIG5vaW1hZ2UpDQoJCXsNCgkJICAg ICAgICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCg0KCQkgICAgICAgIGEg PSBmZXRjaF9vYmplY3QoaWQpOw0KCQkJCWEuY29udGVudGlkID0gY29udGVudGlk Ow0KCQkJCWEuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7DQoJCSAgICAg ICAgLy9hLm9uY2xpY2sgPSBnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl LmNvbnRyb2xvYmpfb25jbGljazsNCgkJICAgICAgICBhLm9ubW91c2VvdmVyID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29ubW91 c2VvdmVyOw0KDQoJCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJCX07DQoNCg0KLy9w b3B1cCBvYmplY3QNCg0KZnVuY3Rpb24gZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxl aWQsIHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0Kew0KICAgICAgICB0aGlzLmlk ID0gaWQ7DQogICAgICAgIHRoaXMuc3R5bGVpZCA9IHN0eWxlaWQ7DQogICAgICAg IHRoaXMucG9zaXRpb25pZCA9IHBvc2l0aW9uOw0KICAgICAgICB0aGlzLm9wZW5f c3RlcHMgPSBnYWwub3Blbl9zdGVwczsNCiAgICAgICAgdGhpcy5vcGVuX2ZhZGUg PSBnYWwub3Blbl9mYWRlOw0KICAgICAgICB0aGlzLm9mZnggPSAoeCAqIDEpOw0K ICAgICAgICB0aGlzLm9mZnkgPSAoeSAqIDEpOw0KDQogICAgICAgIHRoaXMuZGly ZWN0aW9uID0gKHBvc2l0aW9uID09IDEgfHwgcG9zaXRpb24gPT0gMyA/ICdsZWZ0 JyA6ICdyaWdodCcpOw0KICAgICAgICB0aGlzLmFuY2hvcnMgPSBuZXcgQXJyYXko KTsNCg0KICAgICAgICB2YXIgYSA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdhJyk7 DQoNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQ0K ICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGFbaV0uaWQgJiYgYVtpXS5p ZC5zdWJzdHIoMCwgaWQubGVuZ3RoKSA9PSBpZCkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnNbYVtpXS5pZF0g PSBuZXcgZ2Vla19nYWxfYW5jaG9yKGFbaV0uaWQsIGlkLCBub2ltYWdlKTsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy50aWNrID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX3RpY2s7 DQogICAgICAgIGdhbC50aWNrKCk7DQp9DQoNCg0KCWdlZWtfZ2FsX3BvcHVwLnBy b3RvdHlwZS5pbml0X2dhbCA9IGZ1bmN0aW9uKCkNCgl7DQoJICAgICAgICB0aGlz LmdhbG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmlkKTsNCg0KCSAgICAgICAgaWYg KHRoaXMuZ2Fsb2JqICYmICF0aGlzLmdhbG9iai5pbml0aWFsaXplZCkNCgkgICAg ICAgIHsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxvYmouaW5pdGlhbGl6ZWQg PSB0cnVlOw0KCSAgICAgICAgICAgICAgICB0aGlzLmdhbG9iai5vbmNsaWNrID0g ZV9ieV9ndW07DQoJICAgICAgICAgICAgICAgIHRoaXMuZ2Fsb2JqLnN0eWxlLnBv c2l0aW9uID0gJ2Fic29sdXRlJzsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxv Ymouc3R5bGUuekluZGV4ID0gNTA7DQoNCgkgICAgICAgICAgICAgICAgaWYgKGlz X2llICYmICFpc19tYWMpDQoJICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmdhbG9iai5zdHlsZS5maWx0ZXIgKz0gInByb2dp ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5hbHBoYShlbmFibGVkPTEsb3Bh Y2l0eT0xMDApIjsNCgkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbG9i ai5zdHlsZS5maWx0ZXIgKz0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv c29mdC5zaGFkb3coZGlyZWN0aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3Ro PTMpIjsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCX07DQoNCgln ZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUucmVwb3NpdGlvbiA9IGZ1bmN0aW9uKHgs IHkpDQoJew0KCQl2YXIgbCA9IDA7DQoJCXZhciB0ID0gMDsNCgkJdmFyIGNsaWVu dCA9IGdhbF9jbGllbnRhcmVhKCk7DQoJCXZhciBhbmNob3IgPSB0aGlzLnBvczsN Cg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMuaWQpOw0KDQoJCWlmIChlLnN0eWxl LmRpc3BsYXkgIT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICh0 aGlzLnBvc2l0aW9uaWQgPT0gR0VFS19HQUxfQk9UVE9NX1JJR0hUKQ0KCQl7DQoN CgkJCWlmICh0aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAg ICAJew0KCQkJCWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAg KyB0aGlzLm9mZng7DQoJCQkJdCA9IHkgKyBjbGllbnQuaCArIHRoaXMub2ZmeTsN CiAgICAgICAgCX0NCiAgICAgICAgCWVsc2UNCiAgICAgICAgCXsNCiAgICAgICAg CQkvL2wgPSBhbmNob3IuciAtIGUub2Zmc2V0V2lkdGggKyBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIHRoaXMub2ZmeDsNCiAgICAgICAgCQkv L3QgPSBhbmNob3IuYiAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3AgKyB0aGlzLm9mZnk7DQoJCQkJbCA9IChhbmNob3IuciAtIGUub2Zmc2V0V2lk dGgpICsgdGhpcy5vZmZ4Ow0KICAgICAgICAgICAgICAgIHQgPSBhbmNob3IuYiAr IHRoaXMub2ZmeTsNCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UgaWYgKHRoaXMu cG9zaXRpb25pZCA9PSBHRUVLX0dBTF9UT1BfUklHSFQpDQoJCXsNCgkJCWlmICh0 aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJ CWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAgKyB0aGlzLm9m Zng7DQoJCQkJdCA9IHkgLSBlLm9mZnNldEhlaWdodCArIGNsaWVudC5oICsgdGhp cy5vZmZ5Ow0KCSAgICAgICAgCWlmICh0IDwgKGNsaWVudC5oICsgMTApKQ0KCSAg ICAgICAgICAgIHsNCgkgICAgICAgICAgICAJdCA9IGNsaWVudC5oICsgMTAgKyB0 aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0KICAgICAgICAJfQ0KICAgICAgICAJ ZWxzZQ0KICAgICAgICAJew0KCQkJCS8vbCA9IGFuY2hvci5yIC0gZS5vZmZzZXRX aWR0aCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhp cy5vZmZ4Ow0KCQkJCXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0ICsgdGhp cy5vZmZ5OyAvL2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ANCgkg ICAgICAgIAlsID0gKGFuY2hvci5yIC0gZS5vZmZzZXRXaWR0aCkgKyB0aGlzLm9m Zng7DQoNCgkJCQlpZiAodCA8IDEpDQoJICAgICAgICAgICAgew0KCSAgICAgICAg ICAgIAl0ID0gYW5jaG9yLmIgKyB0aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0K DQogICAgICAgIAl9DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbmlkID09 IEdFRUtfR0FMX1RPUF9MRUZUKQ0KCQl7DQoNCgkJCWlmICh0aGlzLnN0eWxlaWQg PT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJCWwgPSB4ICsgY2xp ZW50LncgLSAxMCArIHRoaXMub2ZmeDsNCgkJCQl0ID0geSAtIGUub2Zmc2V0SGVp Z2h0ICsgY2xpZW50LmggKyB0aGlzLm9mZnk7DQogICAgICAgIAl9DQogICAgICAg IAllbHNlDQogICAgICAgIAl7DQoNCgkJCQkvL2wgPSBhbmNob3IubCAtIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhpcy5vZmZ4Ow0KCQkJ CXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0Oy8vIC0gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCgkJCQlsID0gYW5jaG9yLmwgKyB0aGlz Lm9mZng7DQoJICAgICAgICAJaWYgKHQgPCAxKQ0KCSAgICAgICAgICAgIHthbGVy dCAoInBvb3AiKTsNCgkgICAgICAgICAgICAJdCA9IGFuY2hvci5iICsgdGhpcy5v ZmZ5Ow0KCSAgICAgICAgICAgIH0NCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UN CgkJew0KCSAgICAgICAgaWYgKHRoaXMuc3R5bGVpZCA9PSBHRUVLX0dBTF9GT0xM T1cpDQoJICAgICAgICB7DQoJICAgICAgICAJbCA9IHggKyBjbGllbnQudyAtIDEw ICsgdGhpcy5vZmZ4Ow0KCSAgICAgICAgCXQgPSB5ICsgY2xpZW50LmggKyB0aGlz Lm9mZnk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQog ICAgICAgICAgICAgICAgbCA9IGFuY2hvci5sICsgdGhpcy5vZmZ4Ow0KICAgICAg ICAgICAgICAgIHQgPSBhbmNob3IuYiArIHRoaXMub2ZmeTsNCgkgICAgICAgIH0N Cg0KCQl9DQoNCgkJaWYgKGwgPCAxKQ0KCQl7DQoJCQlsID0gMTA7DQoJCX0NCgkJ aWYgKGwgKyBlLm9mZnNldFdpZHRoICsgY2xpZW50LncgPiBjbGllbnQucikNCgkJ ew0KCQkJbCA9IGNsaWVudC5yIC0gZS5vZmZzZXRXaWR0aCAtIDIwOw0KCQl9DQoN CiAgICAgICAgZS5zdHlsZS5sZWZ0ID0gbCArICJweCI7DQogICAgICAgIGUuc3R5 bGUudG9wCT0gdCArICJweCI7DQoNCgl9Ow0KDQoNCglnZWVrX2dhbF9wb3B1cC5w cm90b3R5cGUuaGl0X3Rlc3QgPSBmdW5jdGlvbihtb3VzZVgsIG1vdXNlWSkNCgl7 DQoNCgkJdmFyIGNsaWVudCA9IGdhbF9jbGllbnRhcmVhKCk7DQoNCgkJeSA9IG1v dXNlWTsNCgkJeCA9IG1vdXNlWDsNCg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMu aWQpOw0KCQlhID0gZ2FsLmZldGNoX29mZnNldChlKTsNCg0KCQlhLnQgLT0gY2xp ZW50Lmg7DQoJCWEuYiAtPSBjbGllbnQuaDsNCg0KCQlhLmwgLT0gY2xpZW50Lnc7 DQoJCWEuciAtPSBjbGllbnQudzsNCg0KICAgICAgICBpZiAoKHggPiBhLmwpICYm ICh4IDwgKGEucikpICYmICh5ID4gYS50KSAmJiAoeSA8IChhLmIpKSkNCiAgICAg ICAgew0KICAgICAgICAJcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgIAlyZXR1cm4gZmFsc2U7DQogICAgICAg IH0NCg0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUuc2hvdyA9IGZ1 bmN0aW9uKG9iaikNCgl7DQoJICAgICAgICBpZiAoIWdhbC5hY3RpdmUpDQoJICAg ICAgICB7DQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAg IH0NCgkgICAgICAgIGVsc2UgaWYgKCF0aGlzLmdhbG9iaikNCgkgICAgICAgIHsN CgkgICAgICAgICAgICAgICAgdGhpcy5pbml0X2dhbCgpOw0KCSAgICAgICAgfQ0K DQoJICAgICAgICBpZiAoIXRoaXMuZ2Fsb2JqKQ0KCSAgICAgICAgew0KCSAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICB9DQoNCgkgICAgICAg IGlmIChnYWwuYWN0aXZlZ2FsICE9IG51bGwpDQoJICAgICAgICB7DQoJICAgICAg ICAgICAgZ2FsLnRpY2tfZGVjYXllciA9IDA7DQoJICAgICAgICAJZ2FsLnBvcHVw c1tnYWwuYWN0aXZlZ2FsXS5oaWRlKHRydWUpOw0KCSAgICAgICAgfQ0KDQoJICAg ICAgICAvL3dpbmRvdy5zdGF0dXMgPSAic3R5bGVpZCAiICsgdGhpcy5zdHlsZWlk ICsgIiBwb3NpdGlvbiAiICsgdGhpcy5wb3NpdGlvbmlkOw0KDQoJICAgICAgICBn YWwuYWN0aXZlZ2FsID0gdGhpcy5pZDsNCgkgICAgICAgIGdhbC5hY3RpdmVsaW5r ID0gb2JqLmlkOw0KDQoJICAgICAgICBpZiAoZ2FsLnRpY2tfZGVjYXkpDQoJICAg ICAgICB7DQoJICAgICAgICAJZ2FsLnRpY2tfZGVjYXllciA9IDE7DQoJICAgICAg ICB9DQoJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywgYXV0 bywgYXV0bywgYXV0byknOw0KCQkJdGhpcy5jb250ZW50cG9zID0gZ2FsLmZldGNo X29mZnNldChmZXRjaF9vYmplY3QodGhpcy5pZCkpOw0KDQoJCQkvL2FsZXJ0KHRo aXMub2ZmeCArICIgOjogIiAgKyB0aGlzLm9mZnkpOw0KDQoJCQl0aGlzLmdhbG9i ai5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgICAgIGlmICh0aGlzLnBvc2l0 aW9uID09IEdFRUtfR0FMX0ZPTExPVykNCgkgICAgICAgIHsNCgkgICAgICAgIAl0 aGlzLnJlcG9zaXRpb24oZ2FsLm1vdXNlWCwgZ2FsLm1vdXNlWSk7DQoJICAgICAg ICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJCSAgICAgICAgdGhpcy5w b3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KG9iaik7DQoJCSAgICAgICAgLy9hbGVydCh0 aGlzLnBvc1snbCddKTsNCgkJICAgICAgICAvL3RoaXMucG9zWydsJ10gPSAodGhp cy5vZmZ4ICogMSkgKyAodGhpcy5wb3NbJ2wnXSAqIDEpOw0KCQkgICAgICAgIC8v YWxlcnQodGhpcy5wb3NbJ2wnXSk7DQoJCSAgICAgICAgLy90aGlzLnBvc1sndCdd IC09IHRoaXMub2ZmeTsNCgkgICAgICAgIAl0aGlzLnJlcG9zaXRpb24oMCwgMCk7 DQoJICAgICAgICB9DQoNCg0KCQkJaWYgKGdhbC5zbGlkZV9vcGVuKQ0KCQkJew0K CQkJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAncmVjdChhdXRvLCAwcHgsIDBw eCwgYXV0byknOw0KCQkJfQ0KDQoJCQlpZiAoZ2FsLnNsaWRlX29wZW4pDQoJCQl7 DQoJCQkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwodGhpcy5nYWxvYmoub2Zm c2V0V2lkdGggLyB0aGlzLm9wZW5fc3RlcHMpOw0KCQkJCXRoaXMuaW50ZXJ2YWxZ ID0gTWF0aC5jZWlsKHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodCAvIHRoaXMub3Bl bl9zdGVwcyk7DQoJCQkJdGhpcy5zbGlkZSgodGhpcy5kaXJlY3Rpb24gPT0gJ2xl ZnQnID8gMCA6IHRoaXMuZ2Fsb2JqLm9mZnNldFdpZHRoKSwgMCwgMCk7DQoJCQl9 DQoJCQllbHNlIGlmICh0aGlzLmdhbG9iai5zdHlsZS5jbGlwICYmIHRoaXMuc2xp ZGVfb3BlbikNCgkJCXsNCgkJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3Jl Y3QoYXV0bywgYXV0bywgYXV0bywgYXV0byknOw0KCQkJfQ0KDQoJICAgICAgICB0 aGlzLmhhbmRsZV9vdmVybGFwcyh0cnVlKTsNCgkgICAgICAgIGdhbC50aWNrKCk7 DQoJfTsNCg0KCWdlZWtfZ2FsX3BvcHVwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rp b24oZSkNCgl7DQoNCgkJCWlmIChnYWwudGlja19kZWNheWVyID4gMCAmJiBlICE9 IHRydWUpDQoJCQl7DQoJCQkJdGhpcy5zbGlkZXRpbWVyID0gc2V0VGltZW91dCgi Z2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5kZWNheV9oaWRlKCkiLCBnYWwudGlj a19kZWNheSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQl0aGlzLmdhbG9iai5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCSAgICAgICAgdGhpcy5oYW5kbGVfb3Zl cmxhcHMoZmFsc2UpOw0KCSAgICAgICAgdGhpcy5hY3RpdmVnYWwgPSBudWxsOw0K CSAgICAgICAgdGhpcy5hY3RpdmVsaW5rID0gbnVsbDsNCgkgICAgICAgIGNsZWFy VGltZW91dChnYWwuY2xvY2spOw0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuZGVjYXlfaGlkZSA9IGZ1bmN0aW9uKCkNCgl7Ly9hbGVydCgieW8iKTsN CgkJZ2FsLnRpY2tfZGVjYXllciA9IG51bGw7DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5ob3ZlciA9IGZ1bmN0aW9uKG9iaikNCgl7DQoJICAgICAg ICB0aGlzLnNob3cob2JqLCB0cnVlKTsNCgl9Ow0KDQoJZ2Vla19nYWxfcG9wdXAu cHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24ob2JqLCBvYmoyKQ0KCXsNCgkg ICAgICAgIHZhciBzID0gbmV3IEFycmF5KCk7DQoJICAgICAgICB2YXIgcG9zID0g Z2FsLmZldGNoX29mZnNldChvYmopOw0KDQoJICAgICAgICBsID0gcG9zLmw7DQoJ ICAgICAgICB0ID0gcG9zLnQ7DQoJICAgICAgICByID0gbCArIG9iai5vZmZzZXRX aWR0aDsNCgkgICAgICAgIGggPSB0ICsgb2JqLm9mZnNldEhlaWdodDsNCg0KDQoJ ICAgICAgICBpZiAobCA+IG9iajIuciB8fCByIDwgb2JqMi5sIHx8IHQgPiBvYmoy LmIgfHwgaCA8IG9iajIudCkNCgkgICAgICAgIHsNCgkJCQlyZXR1cm4gZmFsc2U7 DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJICAgICAg ICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5oYW5kbGVfb3ZlcmxhcHMgPSBmdW5jdGlvbihkb2hpZGUp DQoJew0KCSAgICAgICAgaWYgKGlzX2llKQ0KCSAgICAgICAgew0KCSAgICAgICAg ICAgICAgICB2YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxl Y3QnKTsNCg0KCSAgICAgICAgICAgICAgICBpZiAoZG9oaWRlKQ0KCSAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhbGFyZWEg PSBuZXcgQXJyYXkoKTsNCg0KCSAgICAgICAgICAgICAgICAgICAgICAgIGdhbGFy ZWEgPSB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcgOiB0 aGlzLmxlZnRweCwNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy JyA6IHRoaXMubGVmdHB4ICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lkdGgsDQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndCcgOiB0aGlzLnRvcHB4LA0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gnIDogdGhpcy50b3Bw eCArIHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodA0KCSAgICAgICAgICAgICAgICAg ICAgICAgIH07DQoNCgkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspDQoJICAgICAgICAgICAgICAg ICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRoaXMub3ZlcmxhcHMoc2VsZWN0c1tpXSwgZ2FsYXJlYSkpDQoJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhciBoaWRlID0gdHJ1ZTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBzZWxlY3RzW2ld Ow0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocyA9IHMucGFyZW50Tm9kZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzLmNsYXNzTmFtZSA9PSAndmJtZW51X3Bv cHVwJykNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoaGlkZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGVjdHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOw0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFycmF5X3B1c2goZ2FsLmhpZGRlbl9zZWxlY3RzLCBpKTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIH0N CgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICBlbHNlDQoJICAg ICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo dHJ1ZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGFycmF5X3BvcChnYWwuaGlkZGVu X3NlbGVjdHMpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHR5cGVvZiBpID09ICd1bmRlZmluZWQnIHx8IGkgPT0gbnVsbCkNCgkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHNbaV0u c3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsNCgkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICAgICAgICAgICAgICB9DQoJ ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgl9Ow0KDQoJZ2Vla19nYWxf cG9wdXAucHJvdG90eXBlLnNsaWRlID0gZnVuY3Rpb24oY2xpcFgsIGNsaXBZLCBv cGFjaXR5KQ0KCXsNCgkJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0JyAmJiAo Y2xpcFggPCB0aGlzLmdhbG9iai5vZmZzZXRXaWR0aCB8fCBjbGlwWSA8IHRoaXMu Z2Fsb2JqLm9mZnNldEhlaWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRl ICYmIGlzX2llKQ0KCQkJew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdh bG9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFs cGhhJykub3BhY2l0eSA9IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYICs9IHRo aXMuaW50ZXJ2YWxYOw0KCQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJ CXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFgg KyAicHgsICIgKyBjbGlwWSArICJweCwgYXV0bykiOw0KCQkJdGhpcy5zbGlkZXRp bWVyID0gc2V0VGltZW91dCgiZ2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5zbGlk ZSgiICsgY2xpcFggKyAiLCAiICsgY2xpcFkgKyAiLCAiICsgb3BhY2l0eSArICIp OyIsIDApOw0KCQl9DQoJCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdo dCcgJiYgKGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMuZ2Fsb2JqLm9mZnNldEhl aWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRlICYmIGlzX2llKQ0KCQkJ ew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdhbG9iai5maWx0ZXJzLml0 ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9 IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYIC09IHRoaXMuaW50ZXJ2YWxYOw0K CQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJCXRoaXMuZ2Fsb2JqLnN0 eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lk dGggKyAicHgsICIgKyBjbGlwWSArICJweCwgIiArIGNsaXBYICsgInB4KSI7DQoJ CQl0aGlzLnNsaWRldGltZXIgPSBzZXRUaW1lb3V0KCJnYWwucG9wdXBzW2dhbC5h Y3RpdmVnYWxdLnNsaWRlKCIgKyBjbGlwWCArICIsICIgKyBjbGlwWSArICIsICIg KyBvcGFjaXR5ICsgIik7IiwgMCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aGlz LnN0b3Bfc2xpZGUoKTsNCgkJfQ0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuc3RvcF9zbGlkZSA9IGZ1bmN0aW9uKCkNCgl7DQoJCWNsZWFyVGltZW91 dCh0aGlzLnNsaWRldGltZXIpOw0KDQoJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAg PSAncmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7DQoNCgkJaWYgKGdhbC5v cGVuX2ZhZGUgJiYgaXNfaWUpDQoJCXsNCgkJCXRoaXMuZ2Fsb2JqLmZpbHRlcnMu aXRlbSgnRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEnKS5vcGFjaXR5 ID0gMTAwOw0KCQl9DQoJfTsNCg0KLy9FdmVudHMNCg0KZnVuY3Rpb24gZ2Vla19n YWxfcG9wdXBfZXZlbnRzKCkNCnsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50 cy5wcm90b3R5cGUuY29udHJvbG9ial90aWNrID0gZnVuY3Rpb24oKQ0Kew0KICAg ICAgICBzZXRUaW1lb3V0KCJnYWwudGljaygpOyIsIDEwMCk7DQogICAgICAgIC8v YWxlcnQoInlvIik7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90 eXBlLmNvbnRyb2xvYmpfb25jbGljayA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAg IGlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQog ICAgICAgICAgICAgICAgZG9fYW5fZShlKTsNCiAgICAgICAgICAgICAgICBpZiAo Z2FsLmFjdGl2ZW1lbnUgPT0gbnVsbCB8fCBnYWwubWVudXNbZ2FsLmFjdGl2ZW1l bnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICBnYWwucG9wdXBzW3RoaXMuaWRdLnNob3co dGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnYWwuYWN0aXZlbGluayA9 IGUuaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHRoaXMuaWQg KyAiIFNTICIgKyBlLmlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGdhbC5wb3B1cHNbdGhpcy5pZF0uaGlkZSgpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZlbnRzLnBy b3RvdHlwZS5jb250cm9sb2JqX29ubW91c2VvdmVyID0gZnVuY3Rpb24oZSkNCnsN CiAgICAgICAgaWYgKHR5cGVvZiBkb19hbl9lID09ICdmdW5jdGlvbicpDQogICAg ICAgIHsNCiAgICAgICAgICAgICAgICBkb19hbl9lKGUpOw0KICAgICAgICAgICAg ICAgIGdhbC5wb3B1cHNbdGhpcy5jb250ZW50aWRdLmhvdmVyKHRoaXMpOw0KICAg ICAgICB9DQp9Ow0KDQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUu Y29udHJvbG9ial9vbm1vdXNlb3V0ID0gZnVuY3Rpb24oZSkNCnsNCiAgICB2YXIg dGVtcHggPSAwOw0KICAgIGlmIChpc19pZSkNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGV2ZW50LmNsaWVudFg7DQogICAgICAgICAgICB0ZW1wWSA9IGV2ZW50 LmNsaWVudFk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGUuY2xpZW50WCA7DQogICAgICAgICAgICB0ZW1wWSA9IGUuY2xpZW50 WTsNCiAgICB9DQogICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUubWVudW9w dGlvbl9vbmNsaWNrX2Z1bmN0aW9uID0gZnVuY3Rpb24oZSkNCnsNCiAgICAgICAg dGhpcy5vZnVuYyhlKTsNCiAgICAgICAgZ2FsLmdhbHNbdGhpcy5jb250cm9sa2V5 XS5oaWRlKCk7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl Lm1lbnVvcHRpb25fb25jbGlja19saW5rID0gZnVuY3Rpb24oZSkNCnsNCiAgICAg ICAgZSA9IGUgPyBlIDogd2luZG93LmV2ZW50Ow0KDQogICAgICAgIGlmIChlLnNo aWZ0S2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4o dGhpcy5ocmVmKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmhyZWY7DQog ICAgICAgIH0NCg0KICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQogICAg ICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsN CiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQo KTsNCg0KICAgICAgICBnYWwuZ2Fsc1t0aGlzLmNvbnRyb2xrZXldLmhpZGUoKTsN CiAgICAgICAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZl bnRzLnByb3RvdHlwZS5wb3B1cG9wdGlvbl9vbm1vdXNlb3ZlciA9IGZ1bmN0aW9u KGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9oaWxpdGUn ICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6ICcnKTsN CiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsNCn07 DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUucG9wdXBvcHRpb25f b25tb3VzZW91dCA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NO YW1lID0gJ3ZibWVudV9vcHRpb24nICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVf b3B0aW9uX2FsaW5rJyA6ICcnKTsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3Ig PSAnZGVmYXVsdCc7DQp9Ow0KDQoNCi8vY29tbW9uIGZ1bmN0aW9ucw0KDQpmdW5j dGlvbiBnYWxfaGlkZShlKQ0Kew0KICAgICAgICBpZiAoZSAmJiBlLmJ1dHRvbiAm JiBlLmJ1dHRvbiAhPSAxICYmIGUudHlwZSA9PSAnY2xpY2snKQ0KICAgICAgICB7 DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2FsLmhpZGUodHJ1 ZSk7DQogICAgICAgIH0NCn07DQoNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hamF4 KG9iaiwgcG9zdGlkKQ0Kew0KICAgICAgICBpZiAodHlwZW9mIGdhbCAhPSAndW5k ZWZpbmVkJykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBkaXZzID0g ZmV0Y2hfdGFncyhvYmosICdkaXYnKTsNCiAgICAgICAgICAgICAgICBmb3IgKHZh ciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspDQogICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdnNbaV0uaWQgJiYgZGl2 c1tpXS5pZC5zdWJzdHIoMCwgOSkgPT0gJ3Bvc3RtZW51XycpDQogICAgICAgICAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdhbC5yZWdpc3RlcihkaXZzW2ldLmlkLCB0cnVlKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCn0NCg0K ZnVuY3Rpb24gZ2FsX2NsaWVudGFyZWEoKQ0Kew0KCSAgdmFyIHcgPSAwOw0KCSAg dmFyIGggPSAwOw0KCSAgdmFyIHIgPSAwOw0KCSAgdmFyIGIgPSAwOw0KDQoJICBp ZiAodHlwZW9mKHdpbmRvdy5pbm5lcldpZHRoKSA9PSAnbnVtYmVyJykNCgkgIHsN CgkgICAgciA9IHdpbmRvdy5pbm5lcldpZHRoOw0KCSAgICBiID0gd2luZG93Lmlu bmVySGVpZ2h0Ow0KDQoJICB9DQoJICBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKQ0KCSAg ew0KCSAgICByID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo Ow0KCSAgICBiID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkp DQoJICB7DQoJCXIgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCQliID0g ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQoJICB9DQoJICBpZih0eXBlb2Yo d2luZG93LnBhZ2VZT2Zmc2V0KSA9PSAnbnVtYmVyJykNCgkgIHsNCgkgICAgaCA9 IHdpbmRvdy5wYWdlWU9mZnNldDsNCgkgICAgdyA9IHdpbmRvdy5wYWdlWE9mZnNl dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCgkg IHsNCgkgICAgaCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOw0KCSAgICB3ID0g ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KCSAgfQ0KCSAgZWxzZSBpZihkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3ApKQ0KCSAgew0KCSAgICBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNj cm9sbFRvcDsNCgkgICAgdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv bGxMZWZ0Ow0KCSAgfQ0KCQkvL3dpbmRvdy5zdGF0dXMgPSAiIG53ICIgKyB3ICsg IiBuaCAiICsgaCArICIgc3QgIiArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z Y3JvbGxUb3A7DQoJICByZXR1cm4geyd3JyA6IHcsICdoJyA6IGgsICdyJyA6IHIs ICdiJyA6IGJ9Ow0KfQ0KDQpmdW5jdGlvbiBnYWxfbW91c2VfbW92ZShlKQ0Kew0K CWlmICh0eXBlb2YgZ2FsID09ICdvYmplY3QnKQ0KCXsNCg0KICAgICAgICAgICAg aWYgKGlzX2llKQ0KICAgICAgICAgICAgew0KCQkJCSAgICBnYWwubW91c2VYID0g ZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdA0KCQkJCSAg ICBnYWwubW91c2VZID0gZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Ny b2xsVG9wDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgIGdhbC5tb3VzZVggPSBlLmNsaWVu dFggOw0KICAgICAgICAgICAgICAgICAgICBnYWwubW91c2VZID0gZS5jbGllbnRZ Ow0KICAgICAgICAgICAgfQ0KDQoJfQ0KfQ0KDQovL0lOSQ0KDQpmdW5jdGlvbiBn ZWVrX2dhbF9yZWdpc3Rlcl9hbGwoKQ0Kew0KDQoJaWYgKHR5cGVvZiBnZWVrX2dh bF90b19yZWdpc3RlciA9PSBBcnJheSgpKQ0KCXsvL2FsZXJ0KCJ1bzIgIiArIGdl ZWtfZ2FsX3RvX3JlZ2lzdGVyLmxlbmd0aCk7DQogICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgZ2Vla19nYWxfdG9fcmVnaXN0ZXIubGVuZ3RoOyBpKyspDQogICAg ICAgIHsNCiAgICAgICAgCWdhbC5yZWdpc3RlcihnZWVrX2dhbF90b19yZWdpc3Rl cltpXS5pZCwgZ2Vla19nYWxfdG9fcmVnaXN0ZXJbaV0uc3R5bGVpZCwgZ2Vla19n YWxfdG9fcmVnaXN0ZXJbaV0ucG9zaXRpdG9uaWQpOw0KICAgICAgICB9DQoJfQ0K fQ0KDQp2YXIgZ2FsID0gbmV3IGdlZWtfZ2FsKCk7DQoNCg0KDQppZiAodHlwZW9m IGdhbCA9PSAnb2JqZWN0JykNCnsNCg0KCQlnYWwub3Blbl9zdGVwcyA9IGdhbF9v cGVuX3N0ZXBzOw0KICAgICAgICBnYWwudGlja19jb3VudCA9IGdhbF90aWNrX2Nv dW50OyAvLyBUaWNrZXIgKGluIG1pbGxpc2Vjb25kcykuDQogICAgICAgIGdhbC50 aWNrX3N0ZXBzID0gZ2FsX3RpY2tfc3RlcHM7IC8vIENoZWNrZXIgKGV2ZXJ5IHgg YW1vdW50IG9mIHRpbWVzKQ0KICAgICAgICBnYWwudGlja19kZWNheSA9IGdhbF90 aWNrX2RlY2F5Ow0KICAgICAgICBnYWwudGlja19jbG9jayA9IDA7IAkJCSAvL2N1 cnJlbnQgdGljaw0KICAgICAgICBnYWwudGlja2VyID0gMDsNCiAgICAgICAgZ2Fs LmRlY2F5ID0gMDsNCg0KCQlpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICFpc19z YWYpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hF dmVudCgnb25jbGljaycsIGdhbF9oaWRlKTsNCiAgICAgICAgICAgICAgICB3aW5k b3cuYXR0YWNoRXZlbnQoJ29ucmVzaXplJywgZ2FsX2hpZGUpOw0KICAgICAgICB9 DQogICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgJiYg IWlzX3NhZikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFk ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2FsX2hpZGUsIGZhbHNlKTsNCiAgICAg ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZ2Fs X2hpZGUsIGZhbHNlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAg IHsNCiAgICAgICAgICAgICAgICB3aW5kb3cub25jbGljayA9IGdhbF9oaWRlOw0K ICAgICAgICAgICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGdhbF9oaWRlOw0KICAg ICAgICB9DQoNCiAgICAgICAgZ2FsLmFjdGl2YXRlKHRydWUpOw0KDQogICAgICAg IHZhciBvbGRvbmxvYWQgPSB3aW5kb3cub25sb2FkOw0KDQogICAgICAgIGlmICh0 eXBlb2Ygd2luZG93Lm9ubG9hZCAhPSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQoJ CQl3aW5kb3cub25sb2FkID0gZ2Vla19nYWxfcmVnaXN0ZXJfYWxsOw0KCQl9DQoJ CWVsc2UNCgkJew0KCQkgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkNCgkJ ICAgIHsNCgkJCQlpZiAob2xkb25sb2FkKQ0KCQkJCXsNCgkJCQkJb2xkb25sb2Fk KCk7DQoJCQkJfQ0KCQkJCWdlZWtfZ2FsX3JlZ2lzdGVyX2FsbCgpOw0KCQkJfTsN CgkJfQ0KDQoJdmFyIG9sZG1vdmUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu b25tb3VzZW1vdmU7DQoNCglpZiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5vbm1vdXNlbW92ZSAhPSAnZnVuY3Rpb24nKQ0KCXsNCgkJZG9jdW1lbnQu b25tb3VzZW1vdmUgPSBnYWxfbW91c2VfbW92ZTsNCgl9DQoJZWxzZQ0KCXsNCgkg ICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rp b24oKQ0KCSAgICB7DQoJCQlpZiAob2xkbW92ZSkNCgkJCXsNCgkJCQlvbGRtb3Zl KCk7DQoJCQl9DQoJCQlnYWxfbW91c2VfbW92ZSgpOw0KCQl9Ow0KCX0NCg0KDQoN Cn0NCg0K ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_post_loader.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_post_loader.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_post_loader.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEF0 dGVtcHRzIHRvIGRpc3BsYXkgYSBwb3N0IHZpYSBBSkFYLCBmYWxsaW5nIGJhY2sg dG8gb3BlbmluZyBhIG5ldyB3aW5kb3cgaWYgQUpBWCBub3QgYXZhaWxhYmxlCioK KiBAcGFyYW0JaW50ZWdlcglQb3N0IElECioKKiBAcmV0dXJuCWJvb2xlYW4JRmFs c2UKKi8KZnVuY3Rpb24gZGlzcGxheV9wb3N0KHBvc3RpZCkKewoJaWYgKEFKQVhf Q29tcGF0aWJsZSkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0gPSBuZXcgdkJf QUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCk7CgkJdkJfUG9zdExvYWRlcltwb3N0aWRd LmluaXQoKTsKCX0KCWVsc2UKCXsKCQlwY19vYmogPSBmZXRjaF9vYmplY3QoJ3Bv c3Rjb3VudCcgKyB0aGlzLnBvc3RpZCk7CgkJb3BlbldpbmRvdygnc2hvd3Bvc3Qu cGhwPycgKyAoU0VTU0lPTlVSTCA/ICdzPScgKyBTRVNTSU9OVVJMIDogJycpICsg KHBjX29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUo cGNfb2JqLm5hbWUpIDogJycpICsgJyZwPScgKyBwb3N0aWQpOwoJfQoJcmV0dXJu IGZhbHNlOwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfQUpBWF9Qb3N0TG9hZGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgp2YXIgdkJfUG9zdExvYWRlciA9IG5ldyBBcnJheSgpOwoKLyoqCiogQ2xh c3MgdG8gbG9hZCBhIHBvc3RiaXQgdmlhIEFKQVgKKgoqIEBwYXJhbQlpbnRlZ2Vy CVBvc3QgSUQKKi8KZnVuY3Rpb24gdkJfQUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCkK ewoJdGhpcy5wb3N0aWQgPSBwb3N0aWQ7Cgl0aGlzLmNvbnRhaW5lciA9IGZldGNo X29iamVjdCgnZWRpdCcgKyB0aGlzLnBvc3RpZCk7Cn07CgovKioKKiBJbml0aWF0 ZXMgdGhlIEFKQVggc2VuZCB0byBzaG93cG9zdC5waHAKKi8KdkJfQUpBWF9Qb3N0 TG9hZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKQp7CglpZiAodGhpcy5j b250YWluZXIpCgl7CgkJcG9zdGlkID0gdGhpcy5wb3N0aWQ7CgkJcGNfb2JqID0g ZmV0Y2hfb2JqZWN0KCdwb3N0Y291bnQnICsgdGhpcy5wb3N0aWQpOwoJCXRoaXMu YWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdGhpcy5hamF4Lm9u cmVhZHlzdGF0ZWNoYW5nZSh2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uYWpheF9jaGVj ayk7CgkJdGhpcy5hamF4LnNlbmQoJ3Nob3dwb3N0LnBocD9wPScgKyB0aGlzLnBv c3RpZCwKCQkJJ2FqYXg9MSZwb3N0aWQ9JyArIHRoaXMucG9zdGlkICsKCQkJKHBj X29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUocGNf b2JqLm5hbWUpIDogJycpCgkJKTsKCX0KfTsKCi8qKgoqIE9ucmVhZHlzdGF0ZSBo YW5kbGVyIGZvciBBSkFYIHBvc3QgbG9hZGVyCioKKiBAcmV0dXJuCWJvb2xlYW4J RmFsc2UKKi8KdkJfQUpBWF9Qb3N0TG9hZGVyLnByb3RvdHlwZS5hamF4X2NoZWNr ID0gZnVuY3Rpb24oKQp7Cgl2YXIgQUpBWCA9IHZCX1Bvc3RMb2FkZXJbcG9zdGlk XS5hamF4LmhhbmRsZXI7CgoJaWYgKEFKQVgucmVhZHlTdGF0ZSA9PSA0ICYmIEFK QVguc3RhdHVzID09IDIwMCkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uZGlz cGxheShBSkFYLnJlc3BvbnNlWE1MKTsKCgkJaWYgKGlzX2llKQoJCXsKCQkJQUpB WC5hYm9ydCgpOwoJCX0KCX0KCglyZXR1cm4gZmFsc2U7Cn07CgovKioKKiBUYWtl cyB0aGUgQUpBWCBIVE1MIG91dHB1dCBhbmQgcmVwbGFjZXMgdGhlIGV4aXN0aW5n IHBvc3QgcGxhY2Vob2xkZXIgd2l0aCB0aGUgbmV3IEhUTUwKKgoqIEBwYXJhbQlz dHJpbmcJUG9zdGJpdCBIVE1MCiovCnZCX0FKQVhfUG9zdExvYWRlci5wcm90b3R5 cGUuZGlzcGxheSA9IGZ1bmN0aW9uKHBvc3RiaXRfeG1sKQp7CglpZiAoZmV0Y2hf dGFnX2NvdW50KHBvc3RiaXRfeG1sLCAncG9zdGJpdCcpKQoJewoJCXRoaXMuY29u dGFpbmVyLmlubmVySFRNTCA9IHRoaXMuYWpheC5mZXRjaF9kYXRhKGZldGNoX3Rh Z3MocG9zdGJpdF94bWwsICdwb3N0Yml0JylbMF0pOwoJCVBvc3RCaXRfSW5pdChm ZXRjaF9vYmplY3QoJ3Bvc3QnICsgdGhpcy5wb3N0aWQpLCB0aGlzLnBvc3RpZCk7 Cgl9CgllbHNlCgl7CS8vIHBhcnNpbmcgb2YgWE1MIGZhaWxlZCwgcHJvYmFibHkg SUUKCQlvcGVuV2luZG93KCdzaG93cG9zdC5waHA/JyArIChTRVNTSU9OVVJMID8g J3M9JyArIFNFU1NJT05VUkwgOiAnJykgKyAocGNfb2JqICE9IG51bGwgPyAnJnBv c3Rjb3VudD0nICsgUEhQLnVybGVuY29kZShwY19vYmoubmFtZSkgOiAnJykgKyAn JnA9JyArIHRoaXMucG9zdGlkKTsKCX0KfTsKCi8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSpcCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnx8ICMgRG93bmxvYWRlZDog MDU6NTIsIFR1ZSBKdW4gMjR0aCAyMDA4Cnx8ICMgQ1ZTOiAkUkNTZmlsZSQgLSAk UmV2aXNpb246IDE1MDkyICQKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ki8= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=qiplogo.gif Content-Type: image/gif; name=qiplogo.gif Content-Location: http://forum.qip.ru/qipstyle/qiplogo.gif Content-Transfer-Encoding: Base64 R0lGODlhLAFVAPcAAKusqpulkyS+AMnwqbHTlL7mo7rioMz0rNvmysPCwn6Wacft pofVR2zSUaTEirOysrzhnYWVeObl5czrr+Lh4aOsm7G2q0bEAcHmoc/YxpeXlb29 umvMFpjZWbHXmazNkJSnhTXAAFTHAcS7yIKcbVXJMKXcZrbDqdHR0Gl6Wuvr687M zeDm18HDvYqkc5y6g6y3opSxfKi1nMbTt7/DuVnGGr3TqL7kodrZ2WHJAsrIycvC zaC+h6rKj9XV1d7d3azRlZCsenSKYi2/AJObjLbZmaTdi53ad4HHZ3XIPM/Qyrm5 uLbcnLnQpIyWg+nn58LbrLPZm7rgnsXqpKLBh5zQh8bspm58YtrS3HqOa8vktW6C XJm3gbzjoTrBAEvGFHPOKLndm8Trpry1u3KFYrrenIKOeOjo6K7QkoegcYXFTdjW 1rjendHgwbngnsLppPHu7uvl6+rr41prS1/BO3yKcY3VTajDkpnZZrCwr7zao4LS Qbnfno2gfcjKxuPb5c7EzzvFGoTTZZ64ira2tWfROZ6vkMbFxcPoo9/Y5GXHPc/K 0tXaz+Tj43SAaq3Dm2jRJ7e1smbLJMzJyo+ufXiPZeji683LzMXHwszMy8C/v4a7 ZtjY19PT08rLyY2od9XR1rjYnbPJn9zZ3bPchsXlqJ+dnbjbmtvc2r+5wdD4rqfH jHiGbTq/DZe0f8W+ynbBVomQgtfT19LT0evr5+Tl5eXj5XzPNsXtp871rM/3rcHo pMryqs72rdD/rr7losvzq8TspsPqpcvyqvTx8fbz8/f09M30rMnxqczzq+vp6e3r 6+/t7fLw8Mjup8TppLTXl+Df39vb28/Qz0hWPPHx7W+AYr7OsOTk5JG/dsDXqrPj jKq/krnilLrhm7ixu3/QUsHft8fuqLrgrRm8AELFJKrdnMXspqvPmZrfcerq6qDb YOvp67fdnLvfnMvJzbXUqbPeoMXrpdTV0pm3ca7Qna3ekYrEbo6wfYrYe73louPg 5rfWnHjQLarboHeJZywAAAAALAFVAAAI/wB9CRxIsKDBgwgTKlzIsKHDhxAjSpxI saLFixiBaNzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzA9yJxJs6bNmzhz6tzJs6fP n0CDCh1KtKjRo0ijKF3KtKnTp1CjSp1KtarVq1izat3KtavXr2CZiB1LtqzZs2jT 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 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=navbits_start.gif Content-Type: image/gif; name=navbits_start.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_start.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAAL3Zs3HIfW7EenPKgGvAdr/ZtGq/dXOMdrHZqbTCuHXLgnHI fnXNgMPZt627sG3BebHZqlu6aXmgf1u3aVOtXrfZr4DZkH/XjrbZrsvWz2TDcG7B fEucWGXAcGe7cq3FsXPIgGi7dK/Zqb7Zs6vZpZurnmGza63ZqL/LwrvZtFOpXKGw pF6yac3Y0M3W0HvSiGa8cXDGfcnZuly4aZe+nFeuZVKlYHedfcXZuqCponTQg7fZ r4+xk2i/d2S6cG7CeWu/dni0fnijfrjRrrbBucnSzKi7rLrZsISdh2m/dLnZscXZ uW/Fe2S2bmS3b8zZv1yyaG3EeMTZt3XLgnnPh7bZr2e6cnOaeJ3KonTLgZ22oWS3 b3nQhsPZuI++jV22bM7Y0GrHdmC0amO0bbbLuWq/dW+XdFioYXSqeYa5iGvCd3ui gZOul0qXVXegfDZ1P1KdXcrVzW7MfqPFpMjZvFyyZ3bOgrHZq1eoZHDNfWi7c3y4 fai5q4y9i3fUhoCghGOzbrfZrl6qaWa5cW/Fe3ubfXvWiVClWsvZvYS6hHaffL3Z soG0grPBtqi/rFOqXZm6nNDY07TDuJarmUmCUYa5h9DZ0wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJYALAAAAAAPAA8AQAjJAC0JHEiwoKUgdQYZEBBg ip0LeDjYiICCIJhFAAAUKIChipIlPATGOSTGB4wkaqIsGPCGksE5UhDtKbGiUQIH RLBo6BAmjw4/hiz0GNIFRyAjAs+w2KKHgIAYIKjA+QIlksGrV138KcQHq8AWJ+6I 2DHiCAQEMtBMQvLBEaREaSox8tKgQgoAWjKoGGMFCJMBDF7I6fOEDglJlshQaOKB AKEAWbhsaFNjRhGBNB6ZcBKizIMfCgRNAESQjZkrN9ZIcKNIyIEclgICADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=navbits_finallink.gif Content-Type: image/gif; name=navbits_finallink.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_finallink.gif Content-Transfer-Encoding: Base64 R0lGODlhHgAPAPcAAAAAANnZ2XfOg3rShnXMgc7Y0H7Zi3zWiXFvcnnShHPHf3jN hHiefZe0m3qfgHbNgnXSgITZjlGCXJiwmE1/VNDZv27Ed3bQgnPMfmaRf3PJf3vV iNbZ0EByRsvWz1q0aMrWzXzYiaO0pnvYh83W0Gq/dYOKhniReIbZkXHLfXjQg8LL xXrThXqggHvZhGnKdbrDvWXDcJuXnnWde3Wce564nnt5ex4eHpCXknPLfpqSmG/J e6u/rWmBd2mNfMvUzn7Wi5aSll+BZTxuQn6WfYbJjjx/R3Wgi9TZy7O6tZTZl3jY hW9/cp2kn6OXoYjZjnTLgdXZzn6WfEeGUlyIc3HQfqi1qay6r2/KfJPZlnHHfXvW iGvCdlqjY47ZkmG+bHTJf6WmmqLWqG+AepK0p6KypqmkqLW/ty+dQXvRh2PZc1Wu Xp/IpW/Ge2zMeVV9Zau0nqK/mqG0opCnkaunq5enmHTLgW6Ecau6roTZjNXZzavJ qn3WimnBc4+jkoHZjXnVh5OnlnuhgV+la1l6Z7y9vHXNgXd7eHLJfn/XirrQvnqj gY2GjqO4pXiidHfRgnXMgYnZkKmqp3WdeYjZkI+nj3XNgKa6qNDZ0wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJgALAAAAAAeAA8AQAjoADEJHAhgoMGDCBMaLMgQ U8EbmIpUecRiwwE+QCIM6nHkzRmEBRUOLBAljAxGAQo5mZKljkiFHr5gSYGBgB0o DyAZGZIw5EtMezgEcGQiwKEyVmCAVCjGRZ4nlFBE8qKkhI0gOtaI+ImQy44cBCwJ ELBghIQMHX5wXcv2J4lKc/BgwpGkbcICFfTAkRQgAB00SIi05dHokpwacSackOIH gRkmagK1BeEGAqAtIQwY+LNEyBgyFK7YVfTC0AUVCQakSdSHkA8qK+xiYhOjjRZE GsAoGNDlgwXZAhvMcDCJhqAWDBbdaYIpIAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar2-l.gif Content-Type: image/gif; name=bar2-l.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar2-l.gif Content-Transfer-Encoding: Base64 R0lGODlhAwAKAPcAAAAAAAgAADkAAFoICHsQEKUQEM4hIdYhId4hIedaWv85Of9S Uv9ra/+EhP+cnP+trf////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAwAKAAAIHwAXKECgwEEDBA0eGGDQYGFDhg4NLEhQ gICAAQEABAQAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar2.gif Content-Type: image/gif; name=bar2.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar2.gif Content-Transfer-Encoding: Base64 R0lGODlhAQAKAPcAAAAAACkAAMZCQtYhIfdra/9ra/+EhP////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAQAKAAAIDQAHFDBAoCABAQEABAQAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar2-r.gif Content-Type: image/gif; name=bar2-r.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar2-r.gif Content-Transfer-Encoding: Base64 R0lGODlhAwAKAPcAAAAAAAgAACEAACkAADkAAFoICHsQEJwxMaUQEMZCQs4hIeda Wv9SUv////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAwAKAAAIHQAVICjAwECABQQAJBigkOHChgAOCAAw EYBFAAEBADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar3-l.gif Content-Type: image/gif; name=bar3-l.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar3-l.gif Content-Transfer-Encoding: Base64 R0lGODlhAwAKAPcAAAAAAAAACAAAOQgIWhAQexAQpSEhziEh1iEh3jk5/1JS/1pa 52tr/4SE/5yc/62t//////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAwAKAAAIHwAVJECQwEEDBA0eGGDQYGFDhg4NKFhQ gICAAQEABAQAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar3.gif Content-Type: image/gif; name=bar3.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar3.gif Content-Transfer-Encoding: Base64 R0lGODlhAQAKAPcAAAAAAAAAKSEh1kJCxmtr92tr/4SE//////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAQAKAAAIDQAFFDBAoCCBAQEABAQAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bar3-r.gif Content-Type: image/gif; name=bar3-r.gif Content-Location: http://forum.qip.ru/qipstyle/polls/bar3-r.gif Content-Transfer-Encoding: Base64 R0lGODlhAwAKAPcAAAAAAAAACAAAIQAAKQAAOQgIWhAQexAQpSEhzjExnEJCxlJS /1pa5/////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////ywAAAAAAwAKAAAIHQARHCiwwEAABgQAKBigkOHChgASCAAw EYBFAAEBADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=reply.gif Content-Type: image/gif; name=reply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/reply.gif Content-Transfer-Encoding: Base64 R0lGODlhbgAaAPf/AIy0i5i6m26kbdHY1ZajmKrFrk5+WLO6tfT//I3aj9ng3dXg 23KEdOvs7P3+/mabZquPftq1mXatdIh2eWqgap/lqN7h4HzMgr3EvmuEbczZ0YbS hzZcT0RyU1yjX1aIXLzOwd7t6l+RYmefZ6OppnTDeVuOX4zSjVpzXoeQie7HpPj5 +pOalUxhVIKfhD5pUdXj3+vz8ZfgnJZ/fLeZh6+5scfRysvRzX7JgEJvUrXAuHy6 emV1aImKimOYZHCobzhPSsPIxaqxrHuyecCjl/X19oOsgub29n/BfeLn6MTWysmq mHXDeYvNiqXBqOvv7nOqcXW5dOby70p4VnuTfVqIXoLEgXy8etPi3tve3ZuonXN5 d7nAvJKzk/D9+321e+Dk4zliUHnJfW+7clOEWtba2IuWjrLJt3zEfNPd2pvfoZLZ lGGWY32ifWuba8fMyMHGwuPv7Pr+/WKRZW6xbYrYjdvl44fVisKijdHT0k91WLvI wGWpZW+/dI/dkmawadzm4oygjoysjaOzpYPMhM7Tz+78+oDEf3e2dc/c1d/q5VN/ WsfWy53jo35tblJsWFFxWIbIhcLPx4PKg+W+nWRjZefq6X+9ffD595+won3BfGp7 bXq8eHvGfYathnWcdYehieTs75CHi0JcT3jAeXfHfILQhX+WgXLAdtOujX7Ffn+o fXbGekRmUkyNVrbNu4Kpg+349cC/vWKAZG2RbaC9onnCeOv5+dLLzIanh2y4b3+5 fXmieMnOy5Pelm9hY4Wrh3igd32+fFx8YG2jbHaxdHO1cvLz83q/eTBSTvDz81Jl WIfMhXSNdo/TkOLy8HC0b4GrgKHmqtbk3nmLe3OucXivd3Cgb+r39aHoq8DSxleC XHm5eD9VTZnjn4PHgnW2dGm0a/z8/EppVGeUaKu0rvf399fY12OsZe/w8S5DRpfc mm9tcPv7+3nDerHCtK3Ps4F+goK/gMvKx9vj3trm4WFbXmyia66lppCPj4ioiUhu VfL19vTy8v///+fu8SH5BAEAAP8ALAAAAABuABoAQAj/AP/9s1HoBoYDB2qUEyJk EImHB2wMSEOxIsUBByRNHKABhsePIEOKBImlpMmTKFOqXAnSTpJQAmPK/Lcnl403 DsxYcCBnBSZMMeIoAgQojixHEShFwAOBgQ9wV6Jy4hT1CjhEAAJ0geVmBDdhYMOC RUK2rKayZQ8dsrLWilsr39xGmku3Lt24ZK9wQmSMzg8+Hky4eqEtJogpOjQ0eMLi 2LEbeXoNwLelxxMEmBlBuiehs+fPne8BaOCvtL8G1Fo96OJPHAoDAUqvaHd606lj pv31auXmiT8GrYyUZgCkgD8Loz4o8fcGiAkF/trRbsBg1BwfPkSY+LDIQIcXyZzM /xQIotk4aqYtldERaNYoIMmScQiTI8eUKR3y69/Pv//++gAGKOCABBZooIAdVBEA TDMN8MYZMfSyBSaK0EMPIAsYYogXGt6CAC8eFFPJDJSkggcNEPwyCh+ddILDi4TE aIopG9R4xx115JjAjn744Ysv68ggpDdENtJIBUhWII002TTZ5JLSIGnklN7I4Isf ddxhCg6dMIHKGLqE8wc6Hoxgh0ynVKHAO+IcUI4/ecARBBxcBPHGPPEkRcQM7LRA zheABipoNctZ0M2fEiThzwA8aOGPAylkQIA/5rSwiTj+UGOJAzwAwYU/hdiWjj8E bBKIAyu0UENpFvDQzA3+lP+xSTNZ+MPCI588cI81Q1hjjQRQCDACGx9MwYELMmVC iwKS+KMNGP5kYQE+8ZCQBCYc3vLMM12M8wAF4IYr7rgU3GOuucSkS4wA7LYrwA/w xhuvu+neE+4IDzyAHRsiaFfFBx+Q0Z0B992nX30vJBxGeDGFEkQZBDwRByOJaFCx BhhbnAgvD0CjSwmlXIBMJY6kkgqKzehywcost+zyyyuLIfPMM5di882lsGIzKzz3 7DMTPAPNxNBEl2A0Kqj0MUY44s0EgxAggIFJAbHcQIAQGHDBQjlasBCLFwgEUskE EZiIoiPdsIEMKci07TYacMcNtyp0032IKmp9M8kkMTL/43cTgJ8g+AnOOLPG4UCu s44ajDfC+OMyrLOGMycwM4kqpPQ1JmAeuGKETIGQM8CqBPSy6A1wGKRAEBjUEA8N KkSwBBETdDPHFzvkrvsO3OziWxbNUAFdAxkEY0Q0yBvRRjRGeOJJNNf8UMwXXXTh iRvXAOCJEdx7sgr31xQjDwCrRLM999ybHwwUu1yyyy68I1JMNT/c84AJBoTRRUxd GFDGHscYAAvEkY4GFKEdDvAHLuKRDyFkCBRV4JWvJuirIVgQCq+IDgr0cI9orMAf 5RgFAFqDgm3Epk0HUEYR4OCPIrCAAFogwCkg0Zvf7AMADkggFyaFHBEs5w2HsoM/ /0jAAwv4gwujcEOw7jGC7HzAADnggD5ikoRtCEIBCnCAFiyxgjJYAAzUyged3rCA OByBFlWQlxrVKAAfVGEbVfABMeBFjOw8QAB11I4JROCDewiAAmx4YxzL5QMTsAFc 2vEBBe5XBTY8gFgfEEEgu3OfRQAsYGQwAMHy84Iw7ONMMiGAAWjhD0a8oTS46MEB joEAL7jSELdYwBlQsIh+2ZINuGQDdrCTr3yNYATkGhe+ernLXebSliYwwb8CNjCC 4Sc/AEqYNBUWhjBw4JocSEYtZrKHNSWiHvWYhjinsYByJsIFqxgBH8KhizG4sw/G qMQv4vEJOugiZ0TLZ9GMxv/PEjDBn0YbWj8D2s9/DhSgB02oP/NpC1IgoQnwwMJ4 BlKIQTxBCFuIQSw2ig1sSOGjUojDM6RgDXSwAhFjKxuKIGCPD+BgRjSq0QZudKMc 1WFHPOqRTnfKU57iFKc2zdIdZLoBmF6AS/gsQdLAJCYPFGAmCuACCJ4gK0zoIAUs EAIBFIGAkGoIAW0wATtIZDYIoM0D7rCFO9bqDjS0qEUvehHfYkRXZsxUcDg93Bp+ FCQZqMEbRkISlAYLpSQ5TnIJ2AAhOkEKpo7JA517akw0oAWNyIEAloiFBSwRhxh4 1pWY8QILJrAEUWxhE6jVAxs4gQzWsrZtnIgCNGbLCU3/2Pa2uD0LWfCmlrZ847eT qMvfABe4whn3uCcAnOUOoYnYQoMOfACMYMgAyn9kIhga+FQKBuCAQnABAzeogQ50 AAcbyIK0sVsCHiYwCh9EZXc7sAoAFGWaJDSjCtVAhH71y4396ncHl7jEFfgCDgBz 48AIzh03LiEPAV9BGFfY3XsZ3GD3xQ8c9ONDIfPXtH+AQgTr8UcmDgCqXrwBdYV4 AyYOMAMVKGUJtbudoARVjAz6gwetYEM0MHWMHEqnNHk44DHMcZxh5IIf5rDEcU7V GgQe5xhFmMUcFJWFMjyqHZhKsj8CoQdrvG8XgBrC/H5AgQ2HYYoCccE21lSEBbzD /x9gKMSc7AQHUdBgCfnQwiMWAQUL+vnPF1xOFg71BQkIEQ7qaENrltEK1rTplEHg QXSkRZosAKEKvtlENxR9DBYUQVGGMoA2/BEEIKy5NeJYwQAyIALPBKvMJiBDB44V EydMwQZKeEISWEBkf6ygCOkAgyh4kAIMYGYQeoDCrzpDQV9JoBpGUIY/bpCBT2ig hRt0NC1jU4QWjGIAxyGNGVowDCpkgoa+AY4nEtiAbjgKOVX4oe2gYwYg2MAfcADC HMD1SBFUYRFTyEEy9icQDRhgEGlIgjkI0ABzZOEcWQiCKNghBAUsAAMhCMEwyAGF jnv84x6nADlAMYhBnOIRev9www8koA8qoGAOLKcCFU7RDEjowQQjj2HNt0GBXJwC BVW4Ri7MIwJeuIABkJhDG1yQAT2IoA1UaAY1MjCOVlRBjwHTJH4WVpiYZKANdgD3 HhogjjKUIQ/x6EE5wCCHVh7hCFTgoLvmvq65273uds873dVlL3H9Ml/74lcyl0kG gWlS6/jJQcI40IaZ2GEOs6CCP5RgZXP0QxQsOIc/snWEZ4TgFeMwQS9H78tfkutc eH/XGtnYrnqFC/A+4Je/mEnJZ3YAYdKspu6t+cmJuqAKghhHCkqTjiwoWQ5eUIQG 3nHybrRiCofX5CKmv4jCW/+S2M8+wKzPfYFRP/qIL5hz7flzINx30prJoAWDJhqT cuSBBCzQAgkGUY4avIMLe8g/CCShAUmAQAkAqATaMIAgUICvcIBnkIAJWAAMyIBO 8IAQWAsSGAAUSIHVc4EAAACCsIHO4wnA8IGwEIIiOIKw8IHOIwhdEABOcAZKAAPr FxMBAQA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=rating_5.gif Content-Type: image/gif; name=rating_5.gif Content-Location: http://forum.qip.ru/images/rating/rating_5.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPf/AP//yf//o///g///ZXeSwXmSvu3OcceDEK2wrOWva4udvoab wIGYwoKWv4iWtNaNLaZtEnaRwP//y3qTwP//tv//w///r///iJ+krv/inuq1Z8qz kuKfYbFvD+m7Yv//ypumuNrDb+HEi6VzG6ltCt2bH6RrEdbEjf/hW+izUv/lQ/TR hvXaVNDHl/7qTNuuZO7Ha4+Xp+zQW32VwJ6ksP//spaWpHiSwKSkp9CdZdq0SP/b Yc2/g///jPPWV3V6i3WRwP/oTpGgueXMZ///e//rRIGYwIqYvP/sjf//mZtuRf// kerQdv/yTZ2murZ4DXyUwZmhrP+4Sf//s5GVqJZmFZmdp4OYv///nP//zqWotIub uv//l///uduPL//RS//qP///pv//wv//t///rv/4rYmZtn6UvLGKXu7bZat9Iv// vv//Yv/mif//zf//nf/soP//0NvOhf//zJabsNrBbKSlqKKem7usnphoFf//m5du J/nlY3yWwv//iffPffjVmP/VW4KZwv/miv/ST///k//TW9qZYOHLbIWawaqgjNaN L9CsUqJ/RJihrpSbsq+RdP//Y6Z0GtmZX8OQWqBkEN7Ea6huD9OwT9izRvbfY7ir oPPIZv//x6GAT3eSv4OWuuWwa4WWuISXvo1vWfXVdqKIYneFofniX45xWn6Xwt/Q gnyVwn+XwejLdqZrBfPPg5FwVf//n6efkPPOb7GRbvXMarCuov//z6+wp//qQt6u YP+yQvXLaf+1R//WUv/XXqCLbvDLgOnXbKhpDXmKrOTKY/+yRaqvrurYbO7bafjV l9nGd/rYmOTOaf/oRbaqn4qZtOnPYP//sf//oPTSc/XeYvbfYP3RT//RTZObs4CV vLGwpf//pKZ7MKV9NYqWsoCXwv/wTfLNgfXOf7+LV5+nuZVuLKR/SHmUwnuVwXuV wqRnEP/pnImcvsyIE76KVP//hP//htybYHiIqp+BTZ+CUHiSwXiTwYSZvvrmZK6S dv//vaGLbPDKgXOPvyH5BAEAAP8ALAAAAAA8AAwAQAj/AP8JFBjFzMCDAwsiROgo 2sKDQmI8HBjxYaImhWCVigPvxsEFTZaMq4ar3KeDicQtEUbLDaUCBye46LECxocc Z2LOrHkz5z85w+owspYkW6Vz3yAEW5XMEiZNSQix2+MNQr9VyoxluqbnF7E8kl6Z apFmiA4fWFB0qDKCBDqyZtGqZUvC00FBKkwAmYjXRISJDJ5dwjcxQpAnMwofToxQ kb41FAK0mUfn4Cw+kCVPenTwDip+FLoNOqTtoBUWXcaEQcLBhmnUqlm7Hmhg1z2B E/5AO2jgBQGBN8htOujqxd9/QPzhOXgiBZSBIjYwdw5d+sIv9iYK/FJP+z9sjbwz 3VEjnvzEXJEOFJvIbcABehNvDXh3aiIGNiV+2Mevf2ArZ37MAQAZAhjCywO19BEO Ihdk0QmBgRzzACTrsMKMPFkAYEE8wPiyyD7pEMADERJIMMUFO0jhBRqqiEiiiSiq iIY6A8lATQ0VtEPKQjLIgmM7qSwkzRvTVABHLAuFwIUFYpShRJJLNvnkQQgUEcoo otgCiANUFpFAA6D0sgyXAyGjy5fbcNIMOAeBAIYGRxTgQQZUtPlmnHPWORAOVxyk gBMH8eknoAPZkc9B7phzEA1bHGSEFos2OtCjAgUEADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=post_old.gif Content-Type: image/gif; name=post_old.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/post_old.gif Content-Transfer-Encoding: Base64 R0lGODlhCgALAOYAADtXWJfNp4bElr/j0rTcx4HSk8Dk06bVuL/h1NTz6dPz6YDR knKGg7/h1HaNidLz58zy33yVj9b061N+Z4aemZbKqHWMiG+JgqjnuCk4O3GGg09n YbPbxqbit8by2brwy1R5ZrPbxlxwbpbMpuj/+XCDgaXUt5PYoofBmYXDlb3h0L7i 0UNmXr3h0dDz40VjXTtWWEZhWHKIhc7y43uTjiQwPWiEel9+cabTt2F0ckFiXic4 Pt338i09P7Xrxpbepcfs277g0yo5Rd/584zmnY/snztXWElaWlVsZ0N8WAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAEkALAAAAAAKAAsAQAdngEcRGgwMMjQ7SUkgJykC jwIoPzEODysDmAMtEjkWD0EICA0qMy49Nj4mB6sHOB9IQjpGALQAMCw1FCQKCb08 QBlJDgoIBsYGDUMlFx4cBM8EIRAiNx0jAdgBFRgbE0QLBeEFC0UvgQA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=menu_open.gif Content-Type: image/gif; name=menu_open.gif Content-Location: http://forum.qip.ru/qipstyle/misc/menu_open.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAHANUAAP////3/+ne/dWyWap7Akb7du4fFh47QjfX/87/QsmdwYP7/ /fr/8en56Nvz2XuqerHRr3KjcOP14YrDib7fvIqpgOL/y3e/dPD/2JvbmlZ2UX64 fc3uuoehdPP/23esdrTWsnCYb4PEgnSGZJW+jMXfw2h3XMLjr6rJpna/cwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAACkALAAAAAALAAcAAAY0wEOJUgBBUARSJZIBOJ8M z0lzcTwBCwzHJEiJJM+AZbRJmQ0NZ6DzMLsnCEAi5K5/FIN6EAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=avatar130487_19.gif Content-Type: image/gif; name=avatar130487_19.gif Content-Location: http://forum.qip.ru/customavatars/avatar130487_19.gif Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAAL EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33 3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH /w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4 mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl 7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5 WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv 1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4 IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD 5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0 dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN 2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36 p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh 7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85 ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7 F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9 MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo 1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5 sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ +7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7 52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7 nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9 zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT 0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq 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 AABJRU5ErkJggg== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=im_icq.gif Content-Type: image/gif; name=im_icq.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_icq.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPfkAABDAARcJwBNABFUIABkGAI+AgAzAMvR2YyilQA/AN/i8NXZ 5gJBBBObHxVeKwA3ANjc6GvgcQlLF+Hi8X77gf//gd3h7RZmJLzFyewcg5YEVSGf ORZJIg+HFymNS3vyfhVhNEq6W/gPTjWiNyaVXytQLN3g7tMpgyddKSUbD0ugkMPL 0TGcW0O6fdc1VUKsQC6YLkSjRkOYgwl2Gh11ORd0MU3BZ4f9i0OgfjCWVFMzMzWi OI2wlgRVCG3hcQZdDi9mQC+yhYimnBdrOUy7SR5dIiaeOpeqqF6JLWzsbDSkQtzf 7GeQe0J2RDOSNC+PKCGIJyqAKjGBX13eX13SYEqKL1DDaTF8IRFJFD2pZJ2bIo4G VzKoa7XBw0KqbgtHDjqJPQdFCv/7e///TwtPDGLYYE96Vz9cSf9hmVZ+Yy6cPShB F1XQVgpSEGbhbc4ALWrxdhJzGNzP3gBkF//yVQBCAMvR2qTGrwBOANbZ5hFfKt/h 8L3HygBWHC+jNRdrKUq9S7cKSCxsMLDDvQZ9CnfxfI7/jwRXAT0PBErNSUa/dtye sC51YK3JuBFqFEaicnmTgv9KeWZ2KxBuGBR6QRKLGXvufk/KVTWkb2WYa0vFS+MA IABaAFDcaSCMMqwALTOmZ0icjLjExu3Aaf8xhmvkeQtVMjqDeDlrRS2ZSCGjIY3/ kC6dNliNXQBUAABIAP+6JgBOAR5PINnc6QuDG7HAvNTY4wlyPhJgH0nLTx+MHg9j Iv/5VXRuJQ92Qcais0BhE/AQPhOCFKBJa///ajwWCyKQOFyIYy2oNnaRjlavYoyj ljQgDQ9FFHHochh6J9PBJhqEOEt7HjhHMMAARUC2QzefeH2phDuabDqiOSVpSBZ+ ODNuOBFdDgB3ACaiJiKdLBRuTeDi8HPVcuHk8wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAOQALAAAAAARABEAAAj/AMkJFDjoWB5yFloJwjCw IblGqgg1mwVjCjI8yxwuIHctiRUQBTRFsAEKSEMwnMLI0pXl1JdqrFJZSzbwTiIl NSS8esaoCBs1HvSgaIKAXIxCXmRIGXAoHI1OLHY9KQNOwIFMlbCFUoEjgDQtVbYR ceZG0a0uCmIRoEQiyCM6Y2Ah8eToh4MjAk0wQ1QsRa8KxMRIqsPgQYk95Ca4CPbm E7VA0HiNGgcH0AhhAJYsioSG1AkN02YAu3LhxipLVGilkbNJRIYtaxpE6+OnBxYf hkpxYULu1zAd3TrE+dMm244EZL5t8AVhoLJcUCbhMvDigzEOkMzwaeiEQogcQ85E HrnUQptDgTy8GcFkSlwtV3OEnBcoihsqWwJX2HEYEAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=im_jabber.gif Content-Type: image/gif; name=im_jabber.gif Content-Location: http://forum.qip.ru/images/misc/im_jabber.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAPcAAAAAAM4AANYhIdYxMdY5Od45Od5KSt5SUt5aWt5jY+djY+dr a+dzc+d7e+eEhOeMjO+MjO+lpe+tre+1tfe1tfe9vffGxvfOzvfW1vfe3v/OWv/e e//ehP/ejP/elP/e3v/npf/n5//vtf/vvf/31v/33v/35//39///9/////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEAAAAALAAAAAAQABAAAAiNAAEIBJDhQQIECyIMXCgQ QwABCRgsICDAAkOBFw6k2LjxwgAMF0+c4Mgxw4GLJFMuuMAwJUkJDVpuLJEyo0wQ HTho4CghgUwPJUhsGHligMWWJE6IAJHiBAIGFwFMGBkiRQgCMaM6QDAyBYIKUQU2 kMCggQWfYaUeYPBggoO0AAhMuDAhg0K4BhtMiBoQADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=icon2.gif Content-Type: image/gif; name=icon2.gif Content-Location: http://forum.qip.ru/images/icons/icon2.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAJEDAKX/Y////2trAP///yH5BAEAAAMALAAAAAAQABAAAAI2nH8i yKyNlFxwiIAzbTcovDkeAFxhNJZe1X2rM5FT2KU17dk5Dspa9BH4JByP5MV5WJSV 5qAAADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=6a5344dfa435.png Content-Type: image/png; name=6a5344dfa435.png Content-Location: http://i043.radikal.ru/0801/fb/6a5344dfa435.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACTElEQVQ4jZXTvYtc dRjF8c/vzt27MzuzGd1lJZpiMYGAgaBR7GwSfAOxE8FUVgraiUIKCxEbC0H8A9La WNiJUWwFmxQBN0KCLxGDy8adZHdm7ty3x2JNjEnlaZ7mOd/TnJPi4yfdoxWElM2J s9gSLhLH8Avau5/ze91SOi58oq7Pa+pPpXRJXnwr771CPC0i/8dX3g3I8LKU7Sjn L+pmZ6wfOmO4QrM47ebktL12rr/2mTzfFN3b+PVuQCdlR832vvRAzjPPMx5S7VHu MZ3w5x8Dl6+/pd24bLl/TXR3ksekN1SLx4yCl15gY0xX0QZNQ9eysc7ja7TXj2ra r/A+ljJMpTRS7Z916gS9oKlJA1KftEwqqBv6fY5khcWtZ6XsIuocm7qg0FodsD8h 71Ml6jlVRdvSLainjAKzGWvH8FCOU8RrtH3lHs2cXk5XUFc0u1QTmtkBMEr0hsKr +C7HF7LsJ012wWTnsEMj2ppoD247pd6nKQ/M0xLr25LXRbqSYY34SDbccfW3fxPL XRZ/sbhJPaMr6eZsZ+Tjku5DrOSYiTinPxjanZ73488nba6Qgrahq1HRLLjWUT26 bbj8pmi3sLjdqC3RnTTaaNxY+t6t3Sc82AwUJdExDyaDUjxywWh1RdceF+lrKf5T 5Ua05wzHO5rVz90or2gXT0lpLisuKfon9LJ3de3vpDGIpPfBcw/fBuzgKkEmUxTv KAZHLA2+sbT0nmQZP0h2Sft3pnP/GgOJ/oIuO6xaLqVuAnpZQmji4A0pIu4b5P/R 323NDFMMv6uvAAAAAElFTkSuQmCC ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=c64f441177d4.jpg Content-Type: image/jpeg; name=c64f441177d4.jpg Content-Location: http://i042.radikal.ru/0801/ec/c64f441177d4.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8L CwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUF BQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e Hh4eHh4eHh4eHh4eHh7/wAARCAJnAc0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx 8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDf ExFTrLmstZSfSponP8VfbOFj4wv+ZS7jUC4K5yadvqOQss5FJuNRK2epqSgAqOpK Zg0ANKg0hXNPwaXn0FAFSRKpyKa1ZI6pyRe1AFNgRUMiirsiH0qCSI+9XHQCjJUR BNWpIW96jZGHQVtdAVJKZViSI+9RtER61UVYmxEVBpm0VLg0myqCxHtFQyR1a2U0 rmlcRUaPFR8+gq8Y81B5dacyAr7aTZU+2m8+go5kAzaKNop2DSNwOaoBNopuRUE9 wE6kVQl1FFP3v1qZVYx3KUGzWyPWjI9axP7TT+9+tJ/aif3hU/WIFeykbWB60m76 Vjf2qn94fnSf2mn94fnV/WIdw9lI2Tg+lNx9Kxv7UT+8Pzpf7VX+8KPrEO4eykau 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 0LUr7w7PdT2VtEbua3aCK4bO633cMyYPDbcjPbJqPS9eWy0Z9F1LSINT083Iu443 keNo5du0kMpBwwwCPYdK2fCWlr4k0rVpEvVhurPyktomTIuJZC22POeCduB6kgcV b1DwlbQX2h2st+ri7SWS/ZF4tRCT5wBydxUK3PTI445q5To8zjLcI81k1sch4h1y fXZtQu7+wtGvr26E5uV3K0SgY8tRnG3GOoJ4HNOs/E76ZrOo6npGlWdhPdQNBb+U XIswwCs0eWJ3EZGSTjccVr6hZ6E9gPEWpG6tINTu51s7PT4UIhRCudxYjpvACjk4 ySO/FzRD7Q/lM7RbjsLLhiO2Rzg/ia2pRhNWtoKUmncu6HfaVaRumo6DFqTFgyu1 zJER/snacEfgD71b1LXrnWPF0niPVLS2uZpZhK9uVIiYKAAmM524AHXJA61kJHnt VyGEZ712KlBy5upHtHax1eieMtRtZFuLm2jvrqLUH1G3mkYqUndVUlgOGX5EwvGM ehIrHtYGPUU6ygGehrZsLXdjINdFCjCk7xVrmU6je5Np1qcdK8g8DQl9Isjj/lgn /oIr3zT7fgcV4t8O4d2iWBx1t4//AEEV52byvVpr1/Qug/cl8v1OhS0IQYIpptGJ ztrdWBfLHyCn+QPSuJNmTkj24yoe5qFpwGxmjb8ueM1RdXJyK4uQ8LmZZkvU3YqI z7fQ/Wq0gOc7aikb61vGFjPmZfWRT6UvmL6mqak/w/rTMn1o5COZlqZ125Wm+efQ VXYlRgGko5CucmNzKehA+lPS9kTo2frVXn2pyRs3QVXs4Ginc2rXUBt+YjNTLMpO /jFZMNs5bNXoraXbuJ/Cublia6lwOP4TSISepNV1HlNhiafHKPas7I0uh29/aq0r Of4DVoEHpTZM+po5kF0VlJHY05kLJnAH0q0qoe1LhduKfMKxnNE3bNN8qX0rTRAO tPwnpS9sxGO0Eo6UyWDH3s/hW28CnoTVZ4G9M/WtPbMdjJ+bfjA/KlYse9X2t0HI zuprWo/hzWvtSeRlIFh6VL5jZz1qYwKPvZ/CpPIj96XOjWMmijJMM5xWB4jmbyHy xrrjaKw4Fcz4stcQPispyjY3py94ufs23BTw/wCK8HGfEJP/AJJWld/d3bAnBNef fs4xOfDvishM48QsP/JK0rur6J1QkjmubCxizpryftPu/Irz3p5+YVSlvGxjdUFw jjOc1nTuy969iNCLWhCqM0RdZGDmo5JwegrMM5U/e/Ohbj1lX9an2R0xrXL7uC2W /SoWwZccj6VSN4i/fniH1Df4VK+pWSRZa7gDe4f/AOJqfZMLs0oNTvbG2Mcc7RRb t4XAPzYAzz9BWdP4qurXzXNxI7SnL+Zh1YjoSGzzWLqWoROAG1S1AH95Zf6JXLar ItyxA8QaagHYx3H9Iq2hh6b3X4FqUu5v3XjWSW8mR5yI5wBLgYDAEED8wPypk3je a3hFvb3YES5CBkVjHnrtJBK/hXDXGm2eSW8V6Quexjuv6Q1ENLsGOW8Y6GP+2V5/ 8Yrf2dHZx/B/5Erm7/id9qnxHlbTbawtJBBstlt2KgbiAMH5sZGfTNcfqniCa8s7 e1kuXeG2DCBCeE3Hc2PqeaojRNM6nxpoOfUw3v8A8j0v9haVnd/wm+gAf9cb7/5H rSk6FL4Yv/wF/wCQNTe7/E0NC8TappYEFldLGpcyDMKOVbAG5SwJU8DkelTz6ddX 0jXkjvI0rFpHY5ZmJySSepo8OeE7C+ug0XjHRZgvURxXf/s0ArvoNBtLaIL/AG9p 5x2KT/8Axql9aoxlfld/R/5EuE3pf8ThNcv/ABJd6ZHptxeyS2ceNsRRQFxjpgZH QflWX4i1fxLqlq1pqN9LNAXWRxsVTKwGAzkAFyATy2TzXqTaNZEEnV9ObP8AsTf/ ABuqNz4dsmBB1Sw5/wBib/43WarUv5fwf+Q/3nf8Tx5WvoLO5s4ZXFvdFDPGvSQr krn6ZP51p6Xqeqw6PNpgG6J4Dbxls5hjaQSOq+m5gM+2R3rvpfD1gq5j1Cwb6JL/ APEVG2jWqNhbu0P0ST/4it3Upy3X4E3kjhNM1nXdFge0tLgpbu+8xSRLIgbpuAcE BuOowaotBNO7O2S7ksxPcmvRpNItJH+eaB/+Av8A/E02TRbcjO6JfoG/wqoygndI HKR57FZSf3Gq9b2L45612y6TApxlWPt/+qp4NIV3yI+K1jNCdzlrK0Oa37CzIxXQ WWhIAD5datlpAB4jpvERj1JkZmnWbf3TXhfw1hb/AIR/TSB1tov/AEEV9T6bpHTB r50+E1h53hjSWz1s4T/44K8PG4lVa0bdL/ob0o2py+X6nSRQZjGQak+yt6V0cWlO IAQtP+wD0qlJHOzptz4xTkIHUVeKRjqKiaNT6VzKSZ4VyF0U9AKhe0B6A1cji96l UkfwVDnJGiSZmvZkdGxUP2SX0rbkaALuIWqhuELYTBo55WuTyFCa0cLkCmfZ3rXb EgwAai8oe9WqmtjLkZlsjDoKmt5Nn3lFWzHntUc0W7tj6U/aGkYNEkU8Q6OKna74 wKzzbhWwAalQALkip5YmlpEwuFlkoC471WAAOQCKcshPUmnyoLSLMUjr1xTzMh71 nzS46ZqHzG9aSp3FqawnQd6c0qbcqaxmlI70i3DgY4o9gTzSNWS496nSUN3FYQm3 dTT4Zmj6tmq9iL2htxzHdjBqWVvSsqO85zuqx9o+TPFYezZXtUSlSWzTlGO5qJbk HsKQXCt939aqxXOKD+P1pS2PvfpUe8U9Zl/iAosHOSRuVbBrnPFRxA9dDJycg1zX isN5D8is57bHTSfvGj+zSw/4R/xbuOM+Ij/6RWldzfgZOTmvOf2dpPL0LxXlv+Zh b/0ita7W/uW3kYNZYOm3qdGJn+8+78ilfEc9Kw7vBbFXLybryay7kgnIavoKUeWN 2RGTeiIJE5+8aq3EywcseKWS4LOVjVpCOu0ZrGv5ppeRExHtXLhcwweJqulRqKUl uk7s9Spl+Jw9NVKtNqL2bQajrVvEdqoXNY0+ttLJhLbJ/SnS2lw5wIG+uK0dO01I V3PAC3vXqRsjC6Md49RvPuKR+FVBoupzb3KbAOua7WGOVPuxgfhT5jcSjy4wMn2o 9olsM82vNLlVsOapS2Lhc8V6Z/wjk91y+FqCXwZcsAEIOfWn7ePck80js5pDtRSW rb0vwrc3c6iQeXGe9eg6P4JeFt07jNbg0sWoGQHA7VM8WujAw/DmhW2lR7LaPDf3 /WtIxlu5qyZdg24Cj2qFZ1XoM1xubbuyrjZImVOKhfLfe5qaSdiMYpiR7ugaq5h8 xJFBD5fCgGkazQjcBzViCBu4NTpE+MAVDq2HYoG3jU5CUs9uknDD8qsyRzDqlVLl pYuSppp+YnKw2K3jjbGPxrSgVAAAoFYsN2A3z9a0ra4UqCxrRJoz5kbFv8oxWtYq vGcVz0V7HnqK0LO4LHqKyrU5NGbrHaaXbKQMAV80fBa2U+ENFYjrYwn/AMcWvorR bxxjkV86/BWT/ik9GUngWUP/AKAteDJSjW1OilX5qcn6fqesWtgXgALipF0VSMmQ /nT7eZVhGMVOL5QMYWupSkYcy3Kkl2ki5UiqjXUg7VnTRzxjCg1Wmupx0Brtp0Is 8JK5qNqJi+9mopdeVejVgPNPI2Cx/KpFsXlXJ4roVKHU0jFIuTa4Xkz29Kn07Wbb zlEqMM1DaaV5g2ELmny6KyyghunpScKajYs6mK9spziF+atC2c9MVzukWkcE+ece 9bf9oGHO7HtXmTXv+6JyiiRrd9uVQ0hgB9aqjVyg2tk1NFqUT91FTyTG5JBJBzmm tACMUPcoV3BxVf7XVcsh+0RYa09MU024VcgUi3Eo/hpBPKwwY6OZlXRXeEP7VWaF h3FW5Fd/mIIHtVeSN/Vq3hJEkBt5D/CaZ9lm/uGrDPN/CTUu6b1pcxkURbMnXNOj ix97Jq4sp3YZRSXEwH3VWtFNMysVSm3pT1clcHNIZAV6c04OB2FFkIeJsPjApwkB 64H0qu0mGyAKiaQH1qeUOcuNIRTWdjVUy5p3nD0qvZhzlrz5EHzYrnPFEzeQ/JrY 8/2z9a5vxNNmB+KmpTXKbUaj5kaH7P7sNA8TkHOdfb/0jta7C+uXDEk1xH7P0xXQ PEvA511v/SS2rr9QcMTuAH0oy+GmqNcVUarP5fkihdXasDgDNSeGtHbXJjLMzJYo cccGQ/4VmXsi7HIGDg4rs/Ck0cWiWqrgAxgn696+K8Rs1rYSnSwlJ2jO7fna2n+Z 93wVgoVY1MVJXlFpLy8/XsZPjaa106GPRtMiSHeu6YqOdvp+NcozMgACjH0rU8Wy sfEd0zY6Jt+m0f1rLF0g6gV1+H2X0qWX/W4r3pt6+SdrfqZcYZhV+tLCt+7FJ+ra vf8AQY3mk56fQVLBDK7Dk4pv2n2WrdjeIJASFr7yTdtD5SNW7Og0Lw3danMIY2RG Kk5fOOBntTE0dopAGTvXW+EfFFobiNbmOyt0CEb1iCnp61Qu/EMV4Vh8m1jBYfMk QU/mO1eL7fE+0aa0PY5KXImnqa+naNoN1MlrEL0s/CyNtxnHpjpVeDStOglmjvWn Zo32qISADjrkmtiH7NZWoFhqFhJcuuHna4UbPZRn9ap6Za2clxKb2/ttsR+6J1Hm nrw2envXnKrL3nzO34nXyLRWVxt9o1iLW2u7ZpFinYriUjKnPqO3Wpb/AMP6fsuo UW5SSCIv5sgAjbA+lUPFd/Klv55ubAxRfLHBDOrbR7AdfrXKXPim9ni+zvdzGLps LnH5VvQoV6sU4yMqlWlTbTRnapGRIQAOvaq9rA8rgECtx7KCXSItQ+327SSSFDbh h5ijnkj04/UVNJaQaUbG6S8tbppFEjRrhvLPB2sPx6exr1liI25Vucfs9b9B2n+H HvLS4nUqBAm9gTyR7cVHp+n26Xsa3RdYc/OUGTj2rqtI8SW32G985LGJ/K/dqsKq HOemO9ZaahFq2pQQubK0XJBkCCNQPU/lXB7au3LmVkdXJSVrPU1bPRdGvoZ0s1u0 lijMgMrKVIHY4HFFhoulnRjfXEd1IRLs2wkenXkVfuhDDaNZade2CROP3srXKb5f 14HtVDT2vfsgNlqtvGu47o/tIQg+pB+lcClOUW1LS50WinsVY9L0rUNVt7W1+0xK 5IkMxXPHPGO9U/Emg2C6FcX9ql5A0DhSt1j5wePlwByPSp/G+tWsUtoIrmKe7iiA nniPBbtyOuPWuI1zxNf30ey4u5ZlHQO5IFd+FoV6rjNOyOTEVqUE4tamJctiUgBe tSxO2MVQ80yNvIq3AxPavpIxTR4jlqWonO/GTWvpzuGAzWZboSQWUVr2ER3A1VWy jY5ZNnUaO5Cgk189fB+bb4V0gelnD/6AK+gbE4XFfOXwnOPDGlc/8ukX/oAr52pG 9dHXhZv2M/VfqexQ3YZAFNO8/wBjWdopRwNxrWYKDjC10qCK15Tsbrw6CuQa5+/0 fyv+WX6V6GZI2GMg1UuIYZeorxaWLmtzTEYSH2Dg7PSrdm5jUN9KtPpUAGBgV0Ut pEW2xpj371BJp59K6VipPqcboWMWHT4i20MB796sf2ZGo3M+TVySwZTnp9KTyyI+ W3fhUyrN7MbjYrQ2tn/y0ISoZrGKWQBCSo9afqkSRRb2Ofxqgt2QyrGWOa2u+W5l KSfQtrpUKvukzmo5rKzVuDgVZha5l+8v5CpXscx/Nis/avuDSlsjNGn2+7dG5PsT xTZbba3AGKsyQ+U2MGpmhd4+tae1QuQy2lI7mrVvMj98UklqKqi1n/h4rW8SEpGz b26SvhcEegpDYA9qyoGvYX3RcL71rQ3zMv7wbDXO4y6Gi1Kclr5X8INR+T7VpSvG erA1TluYF6GrUpvoTyMpvbljlRVeaFh0AqVtRgb+MCo3vIGbknFbRUkZ8jKjI4bd tFM2PVwz27NgOKFeEtg1rzyI5GURG7Ng05YD/EDWjGkec5qQxRt0JqXVaI5GZjQq O1ReWK07iIL0zVVlG7C1aqXLaSK5T2Fc14ojUQPXWOuK5XxPkwvmnUkuU0o25kTf AEAaB4m4/wCY6f8A0ktq6i/yzkH9K5v9n6PdoHib/sPH/wBJLWuyvbRslu1GXzSR ti7e2fy/JHMXYIzVrw9q4sx9kuGIizlG/u+xpbqAnNUbizQ/xGuTijhuhn+FUJPl nH4X/XRnu8PZ5PKazdrwluv1XmjQ8U232lVvbchyFw2Ocjsa5WRznBGK1Y1urcny ZHQemeKry20kzlnAJPoMV8zwblmd5JWlhMRFSovW99n5LzPoOJcblGa0FiKMmqq0 tbdefTT1KLSkUizOp4NW3svrUc1ns6Zr9LUos+GdKwyO+nQ7Q5pyanOrZ3V0/hzF n4Uup5bqbST9pDJeQxLJJcfLjyVBKnA+9nOOee1aHi3TIJNa1i+t9K/te6W4ij+z /PiNDCp8wrGQxyeOuB+IrhljIKo4uP8AWny69zoWHlyKSkcvHrsyrjcaeNemH8Rq +ND0p4NLlvC+lz3N3LHLbtHI5IDqAvJyuMkc881ZfRLWGeKOx0F9WSW8nincSSf6 MFlKqgKEBTtAbc+Rz7GplXw6+y/6/AajW7mBca28owTmqy3wJzgVX1WC2ttTu7e1 m8+CKZ0ik4+dQxAb8RzVUMo9a9CnTjypxW5xzqSvqzfh1IKODimT6kzfxGsQZHc0 4lmpexgH1iZo/wBpyf32qaDVJYznOfrWWsZ70nO7FDowY/bTNs6/KVwWI+lRvrMm cbj+dZmw+gqtKxD44qI0Kb2RtCtPqzWlunm+cudv1qq7Bv4jiqM8rGPAbFRxu7Lt UNj3reNJRWhVnI2bJkcYwK07aJeOKxbCMxffNbAuBHHuUfTNZtPoNpGjFGM9avWW 4Ecisi2n3EZNa1nJyKmqnbU5ZWNuyfjrXzd8MnYeGdKCnn7JF/6AK+h7OUYr5z+F 8ijw/pee1rF/6AK8epD9/H5/obYV/uZ+q/U9Q0UyqgYBjWjJfuHOFzWG168NuBGd o9akt7zEQDnJr0FR0uLn0seoW3iJf4hWnaaxbydWFefBmHQ09ZpF+62K8ipgoS2P Mp5hUjuegy6laqciVarSa3BuxuGK4Z5XbqaYZnJzmojgUipZhJnYah4ghWJpAVwK 5258UXcy/uk2j2rJu1eRSueD6U1LZVTaBxXVRwtKG6GsU+pJPqF3e/M0zbfQGuq0 IRrZo7hS3vXJQ25SXBztrXiuJI4BGoPFOvFSjZB7c7a1nhDcoMVbkaB1wqVwbajP GuDuqxba7Ki5IP415n1WZtHFpHXG1hc5Lg/hU0VvABjb+lcvB4jkC5MZ/Opm8UmP rn8qn6vUOj63T7HRfZbU/e2j8KrXOmBvuSfpWM3ihD2b8qdD4sG7DfyqfYVR/WaM tyO+07UBN+7VttU3sNQ8z95kfWuhj12GRMlloute01U3uQze9bqpUfQX7p/Czl7p J4hlt+31qt9llk25LDNXr7VIL0mUnYvZO1OXUIJmAQAYrrhKfYl6GVc6ZI3+rApo 064Pyqp2+prpIb22gXM0a1VvPEFjCmFVM0o16s9kOyMZNOkjkxtOfep0t2EnINT/ APCQ2Uke3Zz6irsE1lOjSGYLjtmqbmt0FyklpJ/fIq1bx85z8tU7idppGWGVSo9D TYtQdYWjKZx6UpU5NXsSXrkIf4hWdJiI5yDWfd3cm3KEn61Rku5j15ralh2zlmbL XAP8Ncv4okUQvjFaEdzIfvGuf8TykwtV1KT5SKMnzI3f2fJFGgeJs/8AQeb/ANJL Wu0vpxknPHpXnfwFkI0HxHhhzrjf+kttXYXkx3H0qMBSvH7y8ZUtXfy/JCzvGc1U naP+6tU57lgTVGadvWvZVB2KjUZpZVzwRUixA9CKxftIB4Y1YivlT7zVyzpyZ205 l+WNRVC+HlthiKSW/wB33SKqO3mHMjmnGDLlJFu20bU7+3N1ZWM88QbYWRcjdgHH 6isy5gurO5eKQSQzIcMDwwrstGu7I+EFsy+lPOuoPKY752ACmNBkbSO4NXLO88Nw /a10f7OJvOU5knEQKbFyEaVG+UPv4OCQR17cv1upGTTh/XqU8PTdmpHnDbhSK7qG CsyhhhgDjNei6bcaeNXmuLl9Ni095SWgjuYzGnGGLRlN0oJ5AXHtXLeGI7OPWUe7 8kxhJBG0qbo1k2ERsy4OVDYJrqjiuZSvHZf0jCVCzVpbmCqE9c1LHFu6g16BFPYR rCNaudNuNT3S+ROqq8ceY8J5hUbWG/kA5x34pmlSus89xqOq2ct2kaiFIZoUDqT8 26TYRxgcdTnjFZ/X3b4f+D6GywUf5jg8AdRTo0AbHNehX0Nk13q+s2D6escscVvb FtgTzikbSMMgDjDdhy3SkuW0Syfz9WignWe2sZUEGz5yu5ZSMDBG5TkDGfUdazWY N293+tP6+QfU1/McE8Z9aj2/PXaR3i+VdCz1LSY9RN1uecqkaSQbBtCbhhQDnK8H p1xWnYaj4dX7S1sdPP8ApqsQxSJXURoHIDxOdhcNgADg05Y6a2hcI4aL3kee7cLk ms65YJJ81auvvbrqV2bSRZLfzn8plTYCuTjC9hjtXP3MoaXBr0KDukzFRs7EV1eB jgDA9qlgux2IFVplRIs7c1nyXG1cgYrsjaWx0xOjOoIBw2T70sd3LIUZnKr6Vzlp 5kp3FWFbdi4kkAYDaK0VJEy0OnsGZ246VtWsvIAIzXP2dxhPlArQ00uz7iea561O 6OKbsdRZkY6V84/DQFtB0zpj7LF/6CK+iLJjjJ6V84fDxifD2mhTj/RYv/QRXg1V avH5/ob4RfuZ+q/U9FluIWjEQ61ZikgRAp5IrIMCpEGaTmkWYAYzn617EUnGxG56 FRRRXknghSbRS0fx4oAbtHqaMNTqdkUByj43QfeGaPObzOtRsc9hTcc5yamSuaal gSE/eNPXyyMZNV2GaYOO5ouK7LuIcYxUSxl/U1Dk+tWY7lY+gB+tKzKuhjQFexNQ GFg+TuxV+3uAfvBTVmaMNH8ibvpUe0ZappmSS5j4Yj6VWmjJ+/JmtVLKdxgJQmlT MuZFVfrVRqRXQ6o07dTKhVnwvcevSrUOLU5kPPtUrQGMYUfjVW6t7gjO1iPetuaM tzeN3uV9V1B2GFc1i75Z5umRWodPkb7+akjtAo+Ra3g4U9kbJXMuIPE25iaLi+kB JQEZ7CtUWQZxndt7mpxZWzR5YYaqU43sx8rOat7u5ORHJIpPpWvoiag90A0pKN1L U6KO2E2cBalubkRhTbZcDqVpTmnG0QcWjoJbW3hGx3QmqMtpa9mI+tRafZ3d2u6c mNfU9a0Ire3jbEsm8epFcEqkodRSpplEaarpvSRcVzviLTd6PluMV2yi0Vto6Vzf ix4lt32ZzWNStK25VHDrmKvwMshH4f8AE7cME15l/wDJO1P9a6O7wUPFZHwFaE+G PFYfcp/4SFsc/wDTlaVo6teLuKoFxXRlTlONvM0xOGTqt+n5GVd7hnahNZkpl3YZ auXd8BnHNZV5flTkmvo4wlykxoomcbR1GagD5PJx9azbnUBuzuqxpt7bXcvls6q3 vWcqVjP2T6FtmI6U0yk9zVu4t40biUEfWqFzLHD1INZwT7ClGTNXRNLl1Q3RW6gt orWAzyyz7toXcF/hUnOWHGPWpb3w7qUV9DaWoXUDNbLdI1qrkeWxwCdygj8R3FSW es+HdO8GvbTXtybzU5P9JEESuYo42+VDlhjccNn2p+q+K/CYs9OukmmknOnraIZb KOd7Von+80TOEO8HjJOMd8151SpXVRuKdr22/H77nbTwcHBc2/qUrfR9XkuprOLT L6W6gx5sSwMzJnpkAZFOt9P1U3Utqmn3bzwjMsSwsXT6jGR1HX1qSP4h6NLqWoPL BP5N1ZWtumbSFwGiCgkx5CAHHAHT0qa+8UWWqWmpyWFncLPfrDCzSbQoSPad2B0J ZR8o4UAYo5sTezhbb9L/AK/cJ4WjFX5iumm6rc3sllHpt4biIBpIzCwZARkFhjjO R19RUU8d9aK4ns54hHJ5bmSMja+M7T6HHaugHia2k+1wS27wRTi2KymyhuSGihEZ BSTgg4JBBBH4mq994r8yxuYUEd27XEbrJdWUIGxItmNgyqn0x271MKuJcrci6fp8 hOnStpIw7iO7hV2ntLiJUZVYtGVClhuUHI4JAJHqKmttK1e4uZLWLTLt5owGkTyW ygIyCR2yDxnrWrqfjbT8ajOlmzXU1xbz2pfaEheOIoWK98ZJA6dM9MFsnj/Trtrq K6SaMTNBIJ3sobti6QrGwZJDjkqSCCDz705TxS2p/wBaf8ElYWl/MYNzY3qLcM9p OotmCzkxsPKJOAG/ukkEc+lN0yK3uJGSXUbayAGQ8wkIPsNisf0p+u6/aX7ajcS3 l7LcTGIQny44kcKMHzEXgYAGAKxdB1DTrfVYJ9VhmuLSNt7wxkAyY6KSegJxk+ma 61GpKm21r5enS5PsIqStsdbqmgxWTW4vNbsI47i3E8b7ZiSpOB8vlhhnqMgDH4Zx tS0IWWsm0vtVsbeMwJcRT7ZHWVHAK7Qq7skHPIHQ/i6x8S6de69d6v4mjnuZZPmh SKMNGrdgylhlVAwFz2Gcjgz2mr+HrjxHPqeqSanqReMMjTQRgebn+JA+CgGMAEDt jAweb9/DR327dfLQ6OSn07lXWtDm0u6FrPJDOHiSaOWIna6OoZWGQCOD0IBrLt9M tp7tkudQtLBAuQ9wshVjnoPLRjn6iuj1O+0y8vLq7nu9SupZYspJLGiHzc9CASAg Xpj6YxWZFcaDHrNjNcQXtzZxRq9zCxUGSUDJUEdEJxz1xmuilUqez1ve3T/gke6p +Rbu/DKaa9rHd67pkUV1bC5ikVJyShOF+XywwJ6jIAxznpmSbQE0/URa3urWUEbQ JPFLslPmI4yuFCblOOoYD+VUbfV/7T8QXGsatqF9aXTyCSKaziDmMjoAC64AAAGD xity71bS9Q1uK+S61Wxlt4I41vIoUaeeRc7pXAdcMcgZDE8ck0/aYiLSbb0106/d /n6G0/ZvVCarpz6PeCzmljlJRZFZM4KsMg4IBBwehANW9LKjGaq69f22qast1bRS KqwpG0koAknYDmR8cbj36/Wn2hK11Q550Y8+9tTycS4875djqLfb9nHNfNfw3Lf2 LpwGP+PaPr/uiveY74hdma8E+GOTpGn56fZ4/wD0EV42JpONaN/P9DowulGb81+p 6Utp50AytZk1m6SFctxXSW22O1BJrIvJla4YiuiCZyxb3O6ooorlPHCj+LNFJz7U rgK3tTWBFOXilJz2FMjmYlDcU7aKChPWgu7E3iko/AUVmK0gooorQLSEHHc1LBdz wjCN+dR0jKBRyxLjKSL41Zx0BFOk1dnGGU1mc+tMyfWo9lEv20jRnvQekdOe6JTa CCKzMn+8aUbk+8RVKlc2pSnJ2RJPNt6mnW+PWqM7Dpkk+9OS5KrkLWvsj14po24U VrdxtrC1GQrN5YcA+1UtQ8RfZwYQTuNYUd3cTzPu3cdDWlLDy5rs15onUo9vbbXu drA1qWGoae2YYbQc/wAWOK86vLm4ZhuYsorY8MXsq+v/AAKtKuEtsc0p3O9+1AKy ld4FRxXRC4aFmX3Fc3c30sLEKW59K1NP1R1t8zgBa4Vh3EFK5d8/L8W236iua8UT AQszKOlacutQPud5doHrXAeL9e8yJoo/1prDNx1OujJcxs/Bu8b+w/Eyqx511m/8 lLYf0rYviNxJfNeffCG9lTRtdw/3tWYn/wAB4K3J7uUZ+fP1r18pwj9jdef5mmIk vaP5fkW7y5Rei5+tY9/N5km2MZya3PC/hrVvEx86HEFmGKm4ccZHBAHVjn6D3r0e HwFpdroptYI0lumZXa4lHzHBBwD/AAjjHH6185nvHOXZVV9gnzzvZ22Xe7/Q9nAZ DiMTDnl7q6eZ4ZcwSAcsAaq2weG435H1r2e6+Gn22cSS3UMC45VEL/rkfyp0fwrs QR5moPtHXZGAf1zXDLxIyiK1bfojePDmLfZfM8pj1OQrtOS3vVKe/YnDtz71654i 8B6TpsFs9q0zSPIUYyEEEbGPQAdwK8b8QweTrl1bqMKjAD/vkV73D/EWHzqDnRi0 l3PPx+WzwUlGbTudd4a8Lw614UXWmg1e7kbUXs/JsUQ7AI0bcS3+/j8Kyda8JS2+ sa5ZxalbNaaRMkUtzcgxZL5wNozzkEcZHGQcVX07xBBa+GRoN7o1pqVul494hlll Qh2RUI+RhxhBTPEnjHUdbsrm1ltLSA3U0Mk7wh8ssKFIk+ZjhVVj7nOSTXcljFVf bXt3/wAjKMqXKiWw8I6g+vXejS3mnwXttIsZSR3O8kZ+Xap49zgVv+GtC11Lh7VY rd5YrtrO4jEwLQSgsMOB0B2Ng9Dis6Hx/qcpvjLp0R+1XgvMQ3M0I3hFXa+xgXTC ggE8EnB5p+l+PNa0zWbvWLG2tra6vb6W7u3QsDLvJIiznIjBJOB1OM5wMKX17XRE uNB7nQy2GpbUDLD5zWbXhgEgMixBQ2WXsSCCB1NZCaPq9yttMkaQwXSyvvlfYI0i xvd89AMj69uazz4+1QXX2+RIv7Tayks5b1GZZZQwwHYg/wCsUcbup75qOPx3rJt7 SC9A1GGGKeCUXMjs08UxXcrNnIxtBBGMEU0sWlsv6v8A8Aj2VAnn8NapcSxSW13Y XFlIkkhvUnxBGI9u/cWAKkb04Iydy4zkVHYeGLvULv7PY67odxJ5bSALdEZVVZmO CoIwFJOR0FQjxm9rCun2Wj2kWjmOVJrJpHbz/N2b2Z8ht2Yo8EYxsHB5zm2viGKw 1tdS0rSYLRVtprfyTK8gbzI3jZiSc5w/GMDgcdc0pYpxd1r02+VxuNLQt6pouoWV nFemSG7tZZZIkmtXMiEoqM3OOn7xfyPpVZrcjTI783NqVklMflLMDKMAHJTqF54N bHhfx7qGiaNbWFvZJJ9luHuInFzPF87bfvCN1Dj5Bwff1rDvb5r+3YNp9sl1JcvP JcoCGbd/BjO0KDkjA71VKVfmtNddyZQp2umavhq10y/uY7K5i1Oa7nlWOBLTZ8xP GDu75rqr/wAN+HNIW8vpNQv72xivhYRG32BmkWMNK2SMFQWAHHPqK5Lwzql3oUtz cWkUX2uWBoYp2zug3cMyYPDYyM9smtPQ9bitdIfSb/TodQszcC5RHkZCkm3aSCp6 EYBHsOlY4iFeU7wen5/1/mQpU1G0tybxVpzaLr95pLTCUW74WQDG5SAVOO2QRxTv Dtrpt9dJazxahLdTSBIUttnzE8Y+b3qvrmtvqUl7d3trbteXdwJjOu4GMAY8tRnG 3p154HNFp4max1K9v9MsLWzmuITFD5ZYi1DDDMmSTuIyMknGTWi9r7Lla962/mZp Q579Dq4fCWjT3+tw2d5eXq6dJBFGsBjDzO+7fjdwQpXHHWrGheFrW6lkVo9Rjxer asjBVe1UrkyyjH3Qc8cdDzXFaFe6fArC+0mO+JbKs07xke3ynBH6+9b1zrct/rj6 xewwTSSSCRosERnGAFxnOMADrWHssTdxUntv9w5VKbSdjSGg3MVhHNFDPPM2XZY0 JVI8ZUk+rDLY/u4PeqiSrkc1ZsvFlzbuJZ4kuZ47pruKR2I2ysoBJA6j5V446elY QlP8JzXoYWFeV1VOPERp6OBpbwr7814x8LznRLD/AK94/wD0EV69ZfOwDHNeQ/DL K6HYbcZ+zx9f90Vw5iuWtBev6GuGt7Ca81+p6TcTMbYKGrPkiJYkt+tKFYqCWNUp bghyA1b0+RQ1OdJJWPUaKRjgZA496hmuoYl+ZxmvM5GeIoSZPS59hWTca1bxSYyC tNbXbUfxCn9Xna9h+yl2Neiq9rdw3Kb4mGPerKjPY1EvddmJxsG40ZPrRj3pdopE 2d7DaKdtFG0UrFjaKKKadwCg80UnPqKFqJO5FvFABLYFLtP9ynwZU7mXiqsaQp82 xDdsIFyQfxqLz12rtbcTVDW7k3DmNZCAOuKp2l1HbyDe+7HTNdVOhfY9ahTjFa7m lfpcvOrJEVU9+1Ur++Fqu0vlqq6p4hkljCJlVHpXP3l4ZDl8k10UqLe5spokM8kt yXcg+maWe+J+6Qv0qjKznGARj0oiheRvlU4967Y00ibo0odQg2bGALe9SRaisa8N tPtWLJbur8KT9KmsNPvLib5Ynx70tPtE+6dFFqeDvlYMKpXuvtK2xCQntWXeQT2r fvQwX3rOl3n7hNZqCWyHCEe5oS30khPz5B7Gue1y6LRsd3NaJhkf7pxWTqthcNES elZVleJvTnFSNH4UT40jWB66mT/5Ahrfu58ZxWP8H9Mlm0nWCFbC6mVP/fiE/wBa 6/UPD7KoIcnNehldSmsPGLff8x4ma9q/l+Rk6J4k1TQp/N0+7khy2WjzlH+qnjt1 616Za/FC2vtC2vHJa6nlVIVco3Iyyntxk4P615nP4enyW3Vq6Lp8cDZlCk+9fPZ9 wfleazVWcbTTvddfXuepgc9xGFXKndefT0N+5+IWt2sxFtP547CaNSP0ANaWmePv EcmJJrK0dT0G1k/XJ/lXMXIie5BESAD0FblpuESh0Ur7CvHxHB2TONnRV/LQ0jxD jYvSRt674nfUILaJ7JoZI5C7sJFZMbGHHQ9SO1eX67pzXmsXFwrqN5BH5Cusv/v/ ACBqzDHGH345r0MjynDZPGUcOnZ9zlxuZ1sa06m6NXwt4e0WLwWl9ew6OLp9TeEy 6gk7gxiOMhVEXuSecdetLq/w+0aDVtRvpJhYab9qEVnB9piBZTGj790jDgh1IHJ5 5IxzXs9fv9NtTb2l6YojIZPLCgjcQBnkdcAflWTL4m1mO5upVvpJDcMGmEyiVXYd CQ4IyBxmu6GHxTm5wnv39fwIhWp8qTiWR4Z8MxR6ux1q8uBpaLK8ltbxvHKrSqi7 Tv6/OuewIOCe74/BGjPZ2pvPEMdpJewfaIWlmhRYkbOzepfccgDOBxnjdiuWvdTv pGvC12/+mqFuAMASAMGAI9AVU8elPtfE2t2dilnFekwRAiJZIkcxA9QjMCV554I5 rpqUMUlpU1/4Hp3KVSlfWJqW/gvSri707Sm1C+GpajYJdRN9nXyI2aMuEY7txHGM 4GPQ1zs9pbLp9p9meeS7cP8AaUeIBIyG+Xa2fmyOTwMH1rdvPHGq3FrbWdu4tYYb JLQ7FXeyquD8+NwDd1ziq51i5uNPtrS4nZ4bQMIIz0jDHc2PqeaqisRGzqP+tfL0 M6soL4UaPg+x0JtBmgvk0saxLeoIG1CK4ePyipBH7rodxXk9s1j6z4WntrzUmvJ9 Ks5raeSN7OKc5BU4wgOSR6ZNbOm69qGm2Hl2VysQ37x+6RirYAyCwJB4HI9K5++k mmnknmkaSWRi7u5yzMTkknuaulSqe2lNPR/P/hvxG5pwStqdU+h6LcaD4Rkt7P7G +o3s9vdSmUuWCvEoPPAxubtV3XbHSLjT/FkcOkWtgdDuEW1eHcHK+d5RRySdxI+b PXKntXJ6h4n12705NOur95LSPGyPYoC9OmBx0H5U7VPEutata/Zb+/kliLh3G1VM jAYDOQMuQO7Zrn+q17puWz7vvf8ALQ09pGz0/qxb8KeH117T9UlS98i5tfKW2iZc ieRy2Ezngnbge5HSrt54Tis7/RLeXUd63aSyX7KuBbCEnzgDn5ioVuehI/GuOW6u 4rS4tIpmSC4KmaMdHKklc/TJq5a61fw6VNp27fE8JgQtnMUbSB3C/wC8wGfbI71r Vo1+ZuMtO3y/pkQ9na0lqbd1Fo0lguv6m1zawaldTrZ2ljEpESIVzuLEdN4AHfGS R35lGTzmWNmaPJ2lhgkdsjJwataTres6XbPbWV1tgZt5ieJZEDdNwDggN05GDxVR Vd5Wlkfc7EsxPcmtKNOcG1J3XQmai9jQtm29avR3igAEis3OBmo87uma6YwOZxNc XQZwCRVy3lDKDWJDGWOQWrYsFIUArxXXBKxnKBpae7GT5RXj/wAN5DHpFgSePs8f /oIr2myjAOcV4f4FP/EisBz/AMe8fT/dFeHmLTxEPR/ob4eNqU/Vfqd5e3oaMYOP pWW77jkmlWN5EHBp/wBkf3qlYwcUdvceIIpItqTYP1rGuLiWRsiYH8a4t7hw2Qxq NNRuE6uT9a/KsJxTiobtM73gaa2OtnaY9s1XYSfxE/hWPa66/wDEwP1rRg1iBvvr Xt4fjVt2qR0MfqSNrTtSktRgnj0rah19mXOTXKfaIJPukfjVDUtWe1XhMj2r2Y8R YCqtdzmll8WenaVqQvBhsq3sK1DIv98D8K8Ph8e3drHxGy+9U7z4i6pJyjkfjXHW zrDP4Tl/sqXNe578rR/xSrSeZH/eH5186nxzrD9LqSoT4y1UdbuT864/7cj2H/ZM z6QQxscBxn60yV1iXLEn6CvnSPxrq0T7vtTk/U1oRfEfU1XEsxf6NWsc9iugv7Kl 3PcnvY1XJYD6isyfWhH0X868ug+IjynbNkD3FXP+EstJm+ZwB7V6WHzjCP4i45bY 7lvEL9galOttLBjJBrkYNV05l4uBn3NOk1S0j6XC/nXrwx2CntJB9WcdkdBEwLsz Ny3Wnzw25G4ZJrnotXtH/wCXhR+NXP7VtdmPOXP1rWONw/SSHGlUXQk+xtcS7VyB V9dBKrmTBqtpup2wlyZYx+Nbbaxp2drXMWPrWU8zpR2kjCtGpHZGcdIB/hNWBpay LhQV+lXhq2nHpdRfnTxfWf8ADcR/nUf2rD+YztV7FWy0uCE5lwx960F2gfuoQv0F VpLy0C5M0f51Xn1WJf8AVyK30NL6yp7SI9nUJNRtorsbZEXPvWemgxJ0QH60f2mu /c3zH61ct77zm4IA+tdMazgr8xcadVFU6JHuxsAFZ+u2kMNu0ZjGa22vFD8OD+NZ fiGTdbuSvPrXJWxsJKzkXTjVcloS/BKFZNB8RKqjP9tH/wBJbeuqurdU+Vucetcr 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 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=smile.gif Content-Type: image/gif; name=smile.gif Content-Location: http://forum.qip.ru/images/smilies/smile.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAYAOYCAEA0EP/mIP/////iIPraHPreHO7OGPbWHPLOGO7y8nllPGlV IOa+FKGZfea6FOrGGOrCFKGVeW1VCObm4t7e2tahDM6ZCOK2EN6uEPLWHNLOxtbS ypGFYWVQHJlxBNbWzr6RCNqlDKWBDF1IFHlpQJ11CNquENra0vLSGHVlONKyFGFM GLaNDG1QCIllBHFdMGlICLqJCO7SHMKlFNq2FKWdha6NEJl9EKWZgaWJEJGFZZFx DK59BKF9CI1tCHVhNM6qFN6yELKREKqFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJ RiBNb3ZpZSBHZWFyIDQuMAAh/iFEZXNpZ24gYnkgQWl3YW4gKGFpd2FuQHlhbmRl eC5ydSkAIfkEAcgARAAsAAAAABQAGAAAB/6ARIKDhIWGh4QAiIaKgo2LhYqSj5CO AJSLCR81JCsrJDgbCYsTDRI5KgYGQCISDROHJyk3MgSXtgAMOyknhRQLMwQDAAIC xMYQLAsUgwk6QsLEl9PGDj0co0QaEhkDAdLT0g8mEhqCETbC38XG7AAGFyURggo0 BQH409+XBQgOIAoELXhwD5/Bg/0cWFggqAMEdQcNDiAAz0IHeioOeAMQMcCwBxgA nhuCQB1HiQAQMAjhYZ42CQxQmAyHAgIGCy3MEUnAQQQEAwcICD1wwACEIBU8YBv0 iwWDBwYQIDDwgAGGCjw6MCP04YcPExccOLiAIYQFFy8+HJoQoUUJEBYVKsTwAONV pg0NFIwYoaCBqEqABQUCACH5BAEPAEQALAYABwAJAAYAAAcngEREBQVEBwaCRAMB AQMDBBlEjJONBAiUkwUHRACdAZ0AgpOSjESBACH5BAEUAEQALAYABwAJAAYAAAcd gEREAACDhYIAAgKJi4OLhISPj5CNiouWiISGhYEAIfkEAQ8ARAAsBgAHAAkABgAA ByeAREQFBUQHBoJEAwEBAwMEGUSMk40ECJSTBQdEAJ0BnQCCk5KMRIEAIfkEASwB RAAsBgAHAAkABgAABx2AREQAAIOFggACAomLg4uEhI+PkI2Ki5aIhIaFgQAh+QQF DwBEACwGAAcACQAGAAAHJ4BERAUFRAcGgkQDAQEDAwQZRIyTjQQIlJMFB0QAnQGd AIKTkoxEgQA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=wink.gif Content-Type: image/gif; name=wink.gif Content-Location: http://forum.qip.ru/images/smilies/wink.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAUANUCAEA0EP/mIP/////iIPraHPreHO7OGPbWHPLOGOa6FGlVIKGV eerGGOrCFG1VCN6uENbSyubm4t7e2vLSGO7y9tahCOK2EKGZfe7y8pGFZXlpQNra 0nllPM6ZCJltBNLOxqWBDIlpBHFdMGlMCOa+FKqBCMalFKWdhZ19DF1IFHlpPJ11 CNqlDN6yENbWznVlONKyFGFMGMKRCLaNDL6NCO7SHLKRELqJCK6NEGVQHNq2FM6d CJFxDG1QCNquEAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJ RiBNb3ZpZSBHZWFyIDQuMAAh/iFEZXNpZ24gYnkgQWl3YW4gKGFpd2FuQHlhbmRl eC5ydSkAIfkEBUYAPwAsAAAAABQAFAAABvXAn3BILBqJFNdJE4tpThDKURi5OEAw gwEGclwix80LVSuYCQdDgvfaFCUKE2EwCNgHhEljppAMKRk2c3YBAACFAAgJKBkY QhAOB3V2AAIClZcMDw4fQgs4BISYl5aXFisLQho6BaKGl68ACTIcQgoMrZSxsQk7 CrYNoa6GxAgWHTlCKjCShM4BAweaNCqeJQiDzwEECCQsHqk/Hw4kEwWTd3kNDx09 nT8YGSANBgcFAAUHaQ0AFR6NQ+DMSMDAAAJihiqU6FNETAgfFhIksNCCRYcQIlwc ibBgxAoZFSrc8DBiAZgpFCBc4JAiBYcLEBxNmXkkCAAh+QQFCgA/ACwHAAUACQAG AAAGG8CAUDggIBLD4eDASA4JBqewgABYAYErVgoNAgAh+QQFHgA/ACwHAAUACQAG AAAGG8DfDwAYFoUAgSC5HCqXTyJxOT3+mlekVPoLAgAh+QQFAAA/ACwGAAUACgAL AAAGKMDfD/ALEAnCoUA5PDCfAAPxJ5hWEdYsYphMFrrgsHicRCYBrfFDGAQAIfkE BTIAPwAsBAAFAAsACwAABjPA3w8ACAR+gYFwKBAYn0pAE/ksEqTCACAbKGCpz+5w GzYuz8It+qxeD91EdWM9MTASwiAAIfkEBQAAPwAsBAAFAAsACwAABjDA3y8QAAB+ RuGwKBAAmkfiEdp0EoVPrDWgNT6jXK9XSRZyy+QBWqlGEwoHLFosDAIAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=rar.gif Content-Type: image/gif; name=rar.gif Content-Location: http://forum.qip.ru/images/attach/rar.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAQAOZzAPEZAYvK+SNfsPzUMfr1keTNg/T//4TD812l65a53/vnl/vd ZNOpHvrrs/3ZR/ziffvzzsfs/f3VOVyr9tSqIdWmFv//xHe09InJ94HA8mGz/7J7 I5C235vP9aptDfrprf/9pLTP9ojD88jY9nGc03W38M+hEHCv7mas7fvwvXu88bzl +/r2k6x0Hf/6kNm8L63b+biEKCFbrTt6xP//r/zkhdm/LPfvgv/7mv7TOHKx5qtt Df79mfr1kHa38NSpHv//udm/Kv/4hpCz3vrjj/zZWPn25d6+O/PkbdKgB3Wx5Pze bfjuyrR8DyhltnK7/26x7jqA0NWlC/vedNq6Ndm3KVam9NWmEJS332i3/9SpIPro oUmH0YKx3/bNLNu5MziZ89q0KtiuKP3aUZjC9Zi539SnG1uZ1yxqu9KmFNSjCNm3 MXi+/8+hDt61AbJ9DmGo6wRLsCdpx////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAHMALAAAAAAPABAAAAe4gHOCgwcZKiVQKHCCBW2O BXAGESswHSI+XHNtAJxtcp+gURNncSZhVUE2L2tfVEdNc11KcRQ8FkA0IDguQkhv cxwHcT8sRkwfRFNFOW6/CQFxDAQQDQoPCw4DzXPP0dPV19nbWNBaPSlbNUtjEl7b ZRhxaTdiZhVXUmpJ20M6cTEbdnhoAQoUiRMI4gwSFCmLhids2CCYsXAQHDROBAiQ obCiRziLPFqMCBJkx4psRoQgc8EKmDiBAAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=user_offline.gif Content-Type: image/gif; name=user_offline.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/user_offline.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAADddflZ9clW7eGSCgV+5eG1rdmWAgVJWZ0GJfKyqoVh1c1xZ TEZBNXd6i5CZqFvAdFy8daqllUNxcc7LwEBUY9HS3sPH0V3YflGef1K0dk2pe4OD ikiXel3BfYaGj2lpbMvL0efr+Ovr8mJ8flnSfejo8kubdebm737shE+ScrO1v1ac cLO0v+Pj7KH3rIfdk0VOWm5ufpaWnJC7q3l7iZ+fqIKAc0GAdoN+fmJiatXY6L/W 37bA0WfKetbX5dHX5GzOfa2wwa2uuW1qXsjI0l+wg6KnuX3+hz6Kf3L4hFxhaby9 y6jtvE+xeaWlqT5QY1O/fZutsoGTnjZbfUNEU9PX597f64aHkvDw9lmAc97l9MnK 2U9TZUKIfcTb5VV8cmW6fUNAQ02seEJQXtne7Nzd63L3ibGzwi0rP6j0t7O1xunp 9FSBcq2qo3N0fkWdhJmcrEymd9rZ2WjVdZSVoFGxe1KDcIafpVmpck6deKCwvEqk dzVVcMfT4tTV4Eacf46bqWzwjTp3iJajsFZ/cnl2aTt1f1WHcubq9k6td2trdaS+ wkKLfcvN1zYwKuPq95edqdnZ3re3vlGwdp+eptLS21eEcZGfrWzIe4+XqD9qeYuK jNDR3K3Zyle1dkhFOUtrbG94iKK7wLrO2o6RoDRoiMjEvszW5UhkaXeLlGhsflqI dZucqpGXqUhHUq2trdTX6PX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAALEALAAAAAAPAA8AQAjfAGMJFPhDz51BFgYK3MEo QBsinCpsUQOnARUlTC7FelHKQIRXTmRs+MCAQhI+A/skMpHikCU7K+b84aFwVJw3 GFYpYNMhEAdIAr3k+TIBi4gWlVjQcRMG1REHsYAYyoLjCqlWgKQcGJNmikKBVRbN EKXj68BTeDRAIXFBgAQVCrVkEDTARqEhCz6BMoOgUaxHmAAkkBMJhKQaHnI4ItDE T6cuI0ydKLHGyhJWNFzBcJEqxB5NmygJORPESKZQaKL08BELkZgbhBQViKGKyxMU SMooJANmkicID+oUgTUwIAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=report.gif Content-Type: image/gif; name=report.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/report.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPcAAOb05P////8AGf8AMfv7/P8AKP8AMv8yWjNDRzFCRhUpLf8A Ld/p3c0INP/E0OHp3P8qV/8rVcCboP+guPv6+/8JPRQoLf/v8sKgpCk8Qf/g597h 1dcALf8jUudHZL1da93k2P8CON3Nyd/X0P/H09/g1/8AHTRFSugmTDdITP93lPYF Nf+Opf+Wqf8GOf8aSJO3tKY+UeI9XP9dgN4BL/9ni//I0v++y/+2xf8tWf9qiV93 eN2KlPUAKtWPmNGHktfe1NmDjxMnLP8HOwQZHv8yW/8AHMYAJhQoLP8GOuRTbt7n 2//z9f9CaP8lVNTSy/v+/eJuf7tacAgcIeDm2//a4jhJTZzBveBJZrdjdf/D0f82 YP7+//+4xuoALOkwUv8AIv+rvJciOP/E0f8AMP4AKN7X0CY3O/8OPyE0OPj//72L k/9jg/8AL72Ejti7ueXy4xQnLLs1U/v7++Hp3f8HPv8mUdjIw+kbROVDX8y8uuTx 4v9Pcv+Hn8IVO9/i2ONnfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAVABEAQAjTAAEIHDgQiJgPcAgqJKin B58AARAgmROgiwkqCwX+QCEjyJsNGUMOdFOgD0QSAsyIBEGjA0SIZ4hweckmikiB WQq0uCFAxM2BGMroCJBmihotRkqIfOJly8sUQghAxAGGzsIYdapAZGJjQg0nLgbg GfETAIMjFQzkKTtwCYcXEIt8YbunAZoAOzIEOOChrJ8QGgIksAAlQAQlN+UMGAPx hAKpAewACillQZiXVuJQeJmDx8I1ZFi8DADjSoALDlQM+bNQgoEmMyAkabMCi487 DxYGBAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhRgAWAPf/AM7V0V6QYV2GYOLj43Gob9y2lcKjjanHrZaamLubh6+kpb7F weLr7LG5tO7FpGKXZODm56bEqJall4OrgouyjFuOYE5+WG6kbT5pUdDS0V5+YXTE en/IgNnb2oqqi7OVh4XJhMjJyWeHZ6mTkmmfaWuha8qsntCum2abZzVcT7TJuX2i foXTh+Xm5nexdXSdda+0sPr6+3GQc12XYF6kX3OlcpeAe5zgop2vn6yxrofVines ddTe29vf3YiHiZGIjJ/mqJPYlWxzblV7W+ns7UVzVO7w80t6VsmolWWTaKnAq2eX aJjfnWSlZFF5WcnQzHW5dIeXiny8esXQy5yonYzajzpjUEFuUrm7um2PbXjIfqKp pHR4eHqQfY7ckY/dkmqvaovTi6Stpu3t7XqcfLbAuURrU8PVy8nPy3q6eIemiaPn rF+PZFaHW8DHxHnAeauQfGSUZbzDvpWQk9DW1G+7cYXGhNTW1fDx8NDZ1sPJxmmX a8PMx/Lz81OEWvX19muda+K8m6TDp4Gbgubp6YTOhmJ/ZKi9qUt0VmGQZFCBWNvk 5LfNvHKKdYKjg4rYjHC+c7m/vW+acXWqc3Foa8DFwbigl4yujMXMyLS7ttDY1LzA v7a1taW4p73FwXmzeHfHfHPAdcrTzpTel9Ph3b/RxaG7pJrjoMbIyLvDvmiraKmu q3mheqO0pszW0f39/YubjdXa2FiDXaC6onmMe/39//v7+/P19czRzm20bmOQZV+M Y1mMXVl+Xv////7+/qS2p+Xs72WaZmSwZv7+/2SZZaCyo6S5psfOy3+/fGeTaI23 jfj5+a3IseDh4meVa2iVa3zFfHiYedWxikVkUofOhtbi3z9iUGWPZ0htVGFYW02M VnbGe3bHfe/v8G1pbNba2NLZ1Zfbm8HKxcPJyJCykIiyh4K5gI/VkGm1a6Cios6x painpqiLfod5fs3Qzn61e1aUW+nr6uvr7Ovt7kqCVoHMgrnCvv79/lNtWWlgY6W7 p47XjZDWkmmcaefu8SH5BAEAAP8ALAAAAABGABYAQAj/AP/9C8Yj07sQcipVwpKp QY5VOWA04BGsoigYbvJACCawo8ePIEOKDBmsmCowAcARcqPHE7JUetDg6+AuUCAk CbjIukCBwqc3UJYtO/eGg1EOIJJWqxamKbp+QYKIE8fkhtWr4oKEqRYNSi5VTWhs Y2StQjEUxTS8opcnz5Q5CHLM80XXlzcBFy6oqcvXFxW6HuLs9ZXI3zFfmuKwAUC3 ByFfrQI4oiuLFw66fZ74enLNCpmOPLb46tGhg7PTY+b1oWsrCqUEgQx8sCEkiqkD zZod2M27d4TfvwUJH05cEPDdzRidIcVRoIoZJC7E+duHiDM6T8bNgYtqDDNpk+Dt /xisxsUeup0E0B3Uqq4AbJcBCFBGRoOhLi0g7xpEt9ceVgIM0YUcvgCgyBHZCFTK M22Y0QBdeGTQAxpi0JLPNRiagcgRFnTYoSIghujhiEeUWGIRKKaY4hUsttgiBhhY YcUuDHjkSia+qAPDFqtgwRcxvrSQCgML6PPBNAnA4UMZi4zk5JNQkkLDMAH8Qkgk ZWCCzD0LuPEEMs7M8YElXBgiwh5gRMOCDjo84mYVVXghp5xf1GmnnXN6UcUjbOrA QiH2cKDFBqFAUkc6w1DwTykzqELAA2XEoMcCC3gSCx2xcDKCAyaMwAVeO3gA2Cf+ 0HVMCeWU84kLO1BwyQSXeP8gqwevKqHEIbPUMEE5l/R6STkTzHLIPsdI8sAM9QjA SAAolLAELb5AQAcdfLyFAAwLoIGFLZXs4cIkgw3ij3q+GDNEXT10QRc2JbQHgDIv 0IWDBrhAtsRkvuwSx2OZGCLBZmZggMg/pjwgTDFD3EHXL1jAcMdqfUmQCAkklGBx CdJp4ssx/hDg8ccg51UCCWg98EAAFfDShh8WHIEiizDCaAUGNQrkSiW+xEBMLbX8 0leQUwzEhzZwjKBOGXnUDOXSTHeUxyq+QKSOG1uIgUYOqND1RwMLvFaAAXDY4IMn EDRtNpRnlCBCX7Ywc0sffczzhzfffHBTAu0YMkMd3Gj/4bffoGgByuDdcMMNKBsk rvjijDdOaB25mNNROcMMw4s3A+jhRiqRbBILH+PwwY4NDnw9giFNQFEUB4FyUAib YfDjxRej1M4EE6ecAsTua/TuOxBr7H7KKPwUEk0ohw5DQzwM8NAoGDPo0YcbyGhO DjKRyDMHEg6cYIBOJFxCFwVQXECXEi6kkYYUySSjvhTwx9++FOsnkxQIduSfv/su EKAKWMhawXNKQIA4iOEXMfCZz4L0g3UogBMh0EANVjUYD7hgCejRBV0usQSNIeZn 4SBCOB5zC2D87BB/CEcPAMOLIyBCBQGIThxg4YtYIAMXfEBDJnyQA2fEgBm+kMAF /z4BLrqoYQfKoAswyPWXevlCGTUwIQAAcQEcPKYuwADEYKC4ghXWRRSIKEI2zlAB YZCgGIbwBRGmNYUG+GALGfDGK+jSAV1M4gL4yoQxLuMLXKjLF33IAn/y5Q9jFCgR gzGEBvJjjEQMUhbkggU1FuALNFwDA734xx7OIoxejMEIPIDAHX4QggHMkS8iaBYK diGAVgrACZrBQS92sQRArJINFVvCLibmj11IQxqyCGYFAsALJzjBD35ARC9kgCEZ WSEFKvjHIipgMifgzBfzUEcGWmALutADAMBoRC8C8IBiCAMFKKCYMNgggMJQjGTo PFgxTHaylK1MES1zWRFgJkwzGaXgnyv4iDU6AYMMbKELjWiEDKRBhhWswBEOZQUr XkBRikriohfdg0ahwdFnJOGjukhEIthA0pKyYRcoTekuSqqLZ7zAA4zoSEAAADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=multiquote_off.gif Content-Type: image/gif; name=multiquote_off.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/multiquote_off.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPcAAIWThrm8urjBuzdiQmeYZFRSU2OrXr7Av56xnWiQZHalckpK SktSTPn6+1pnWubr6NDV0YCjftbW15TKj6+2sM7W0ens62+karjovcjKycbRyfb7 +/T19LfBumSUYHGqbLW4tqitqunq68PNxcXGxcLIxIaohGWOY2udZsrTzePo5cbO yLW9t4KlgGy2Zmy4ZvHy8i4uLnG1aubo53Cta8rr0StZPM3Y0PX6+wAAAPLy8pec mUBvR+jo6YWngmJiYtHY0s7U0HGnaRMUFMXKyMDLwUh9Tb7EwbvFvv3//hscG9/j 4tzh3tXj2tXd2dLZ1WWXYS9aPrTLtqSppgsLCzQ3NmCTXSMjI/////j8/Nfd2pTG j9bc2M7Rz////tnc29/h4PL09NHb0sbXybvAvcHEwtXf2rfZuFl4WLf3veLp5v/+ /ovXhVqOV8jVzO719LS/uIaOiK/DsO3w8H6jfKK3o9nd3IOvgLTSt3+af2uWaLzG v3eqcYG4esjPy8vQzrPRtbXTts7V0dDh1ePu6dfc1+/y8VlYWRkXF322eKCkobjL t7nUuvz6+6fqqL/WwvXx8v38/Mzh0PP09fz8/WN6Y6awp660sMbPybnfu5W8kc/U 0dX33pylntHY1IzBh1ZbWHOebW+iaY6dj7jEufb4+ImEiJfIk5u/maHKn8rZzODi 4W2DbYOIg+H16YmLif38/drh3bO+tPT++Onx7/79/evy8O3z8n+ie7TdtbvNvOT6 7L7HwYyfi4fQgWptavr6+maxYfj5+b7hwvr6+bPMtbbNtcbJyYC3e2+panCVbtrc 2l9oX3LBb0FEQoO4fqbToqHbntDX0srSyrvPvsDVwnmceMzQ0IGZgcfNysHPw42T jsTSyCUnJykoKZKxkd7l4pG8jn++eWidY5axlsjQysrRzLLQtG+bbKyvrdPa1MzV 0NXZ1tLc09ve3WKoXXW6b0NzSd/l4TY/OmCQXmybaKS9o8ny0V9fX/L08/H09Dpn Q3OlbWenYWqoZfX6+yH5BAEAAP8ALAAAAAAZABYAAAj/AP/9u7SsC4kDBwKAKPMF wpcjim5tyJJlg8CL/0Jg2chxYwEqPzZqYUeFCogNODBewtJqx7YdcbAUyEETEZYu NGmms3iRCJYQIaZUYJEhJ80AB4zmyIIRCRYRYHrMgYElhtEfhZSqSfnv04taHTfm Q5RjSI4CrirloEIzlS+BL4IJW2OuQ4lyHdQt0bcqhylJjjDMqpIjU7NHhFwYyBdp U7Yj0o6pKGLrVQ5Iqtik2ZVDCQYXqAbJMPDAyx8u14KUAGIHS44rWIDA4zQqB4Jo 7+5Uk/FODBYkK4L4IcIEy4IcOrDM2MIoh7N74vwpKEajny4smATI6vAkCYMcGTgi /3hdY0IiGugCCfFnDwuljt5ySMAiDAuJHFXK90H2Qc85Ucl8gwUwFjygwgOgkBFL B+5gIYEDw+RyyjOJ8JMAICh8gAsWKcDhyRNMJOEEFxvV10443bCyBR8onIBHhqFg YcEIe2iwzhLSQMCCAFNstEgOAEBzgRUnSIGCEPV4EUYKntyggRYriDAJLMYd8ksO FBijiQcnjDHOBQQQU8oNTpjhhiC8ULXRcUZ5o4AyTYwjihUcCMMNOIY0EBZH+ORA CjMMEGANLQSg0IYKeyaKyBBnKEAAD+T8AwUURkyT6EaNzDBCHfM44MEA+0RBzT8R GGGDHB1xIE8RvaAxQBQ27CYDBT3x8GDrGwI1IYUlPQTQCQDY5NFCBD6YYIIPw9IR QQsmaPNPQAA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=quickreply.gif Content-Type: image/gif; name=quickreply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quickreply.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPf/AHuUgml5asXTzKKmpYB8f2yzbVVNUZahmDhbTlt+YcXLyOO8 k12EZUJtUq61r6eIeK+4sJSblq+yt42pk0hjU+7t7snPzdzi4ompjsunjNLY1nGu b2SsZmWYZuXm5ztjUIG7fnSEdcXMyc7U0ouLi/7TqrzCv8XIx87O1d3e3uzEm8vS z6eKiLWVg4GLg/39/bi4ueLl5luVXsHGxHq6eHacfL7FwfT19WOAZLzDwFqCXtbZ 2XS7dObo6GmeaeLj4rK2tll6XI6fjlmLXtrd3c7Ozvr6+ruajMqpl3N8duvt7lF7 WXyhgmuTckt6VkVyVO/w8YqEhoGkhm2ibHGpcNLZ2G6qbdXW1amqrWObZcPKx8DI xaesq2KMZH22e3iffj9qUVKDWmqgaqKfn4PFgXSHfdXV3IWniZOXlc/T04WAhGOY ZG6lbfj4+fP09fHy8+Lj5H+3fXatc8vR0MPJyL2/v/////7+/sfPzV2RYPT0/nuy eWyia/Pz/c/W1KSop+Dg6f79/5GZmXpwdpaSlcDAyHaWfunp8urq9Ozs9vv7+3+4 fIx6gGOQZGGWZNnc5m6hbW+ibeXq7mGiYuO/of7//v7////+/+7Go/PLp6W3rKG6 pp+BdMHGwm2icLCMcMrV0b+cftDU1KGfpOjp6WmrZ+vr7IKShICfhYuWjOrv87+g hFWJW4aoi3ONc6a8rbbJvPDw+vb3+MjLypuzoMjNy7yagsuwnXqKfWiLcXaYdubm 79HQ0K2vs7vEwJOOj7/Ax5mRk62wr7m7vry7u5V6b7+/x6qclKybmtKumbe6u7W6 tu/u8OPj7OPm52KKamCYYmacZ66QfHmwd3y4eoC+fvn6/MWjimZgYs2ojHisdXyz eo6bkKqqqPLz86qtrrCxs5OwmLKztLe0tNXc28DBwJmbm9Gwnt23mnCjb/Dw8PDx 8vHz8WBXXHardHWsdF53YcfKzpGSl/j4+sOfhMGekcbGztG0pa3AsmWSZtnZ4oGE id3d5vL082+gb/X1/yH5BAEAAP8ALAAAAAAZABYAQAj/AP/tEgdH1KwTJ+rAUCZO GLg6w/jp+dfHTC97+hBtKgBthJ1ZaeiIMKFghh1SgzBRQnIkRDoyPDjUoCWGjw47 blZoAEUIzYAedoIGDdJhTZ4hTnL9SyTIjik4HqAwq3CjjSKhuNplUHGtBad9xs5Q iRTCjixnHqqk0fLLBYly6l640hYnjpdtbBL8a/IEQaqgFXhdWcYtAAUEiD+AacAY zAdV/5oNsIOGywBhf4RqBhYLhQF6C0J9inKhgAw787TMEDHCxhYbc7YQIcHiVpIE XTpM4vAKw4ZoB+zM8KWlVooLRIixKHEOWYBGcqpVo2HlGQY+6XDYibFihR8/wXxy /8nxzU6nfO+oUOGTJ4GAaNF0aAj6YtyAIhU0BxWyxMkTxxP8AwgWdnhjhyV23KFf UChQZIYB0hwzSiH/HEKgMMKYs8IAEcxwgAlCSRCPARkssIo0xcjzjyenCVXJHYrc sM46PbzRBjZHqJCNLQ8kwMojsJjGzg0KWGCDAuXEkEYtInTDSAnoZNCCLjTEhEE4 BWQBgR0W7KDBHAqMAIQSUSCRSTL1JNEINWTQUEoTrWzgwyl2vBCUggUycs8YxFyR gDuLgACCF1YwcAYbkGhXxRYj4KHBCQT8kYIi/dhxgD977DHNO9EkMAEfU9ykBB5V kKOFGhHMwswlQbmhwxR8+FewRhgM4OODGDpAYU0VzpCiRjkp2KkZDkMMEYYTDRgi iSOOLOFAUD+MUcQPRgQViAXcwNPYBx8ggM8/egigSQREROBCGWUAoC4qUjDBxBdf 1ACvFAL8ExAAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=icon1.gif Content-Type: image/gif; name=icon1.gif Content-Location: http://forum.qip.ru/images/icons/icon1.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKIEAJTWAJStUmtrAP///////wAAAAAAAAAAACH5BAEAAAQALAAA AAAQABAAAAM1SLrcTiI+J4B4MUerpRggmIUiRJ7k9Q1B67JBuaKnCr5uK9OoDeO6 gY8XGhKFkI4yM2k6HQkAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=avatar39145_2.gif Content-Type: image/gif; name=avatar39145_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar39145_2.gif Content-Transfer-Encoding: Base64 R0lGODlhQABAAPcAAAAAAIN7iIuGkHt2g3JrdwkECGxnc2ljbS0KC/asDHdye/vx 7k8GERUSJEs4Ry0ZJzg0Q5WRpzMqMlBIVPzo0U4xM2ZcaPrMk29MUIt/pHyJkvjV sPvotawwMWsGDXZoaoZ8lUwPJn53kY9SUY8xNNmnC5I4R1tXZ1EpELuGEfzGBYRr doV4efOUFXh1aawySzdEUvTZyZd7hzdEPWc7SG8SJms2MzMjFc2KC2pog+2LKpJ4 lYgAJnRmV4wLD4haZXZaZoiDeGBPYvzuS7NyFGZoWNCmIHErDo1PMpZ4d6iHh9Bx NPW2iVxndXNEEqmntHhrhJhpLKOLm1RHNHJLNmx0eBwgB5dlZWddcY9UC5RucZRg SJVpEaVnWaWXqPvxOaOYmoZ1Z8pxT4MsDOZ7E7poSeV4MKJZZcEzSXhWd5yhppRk WJeFd6N3dn1jTPOwMJ11aYKRetinMdeOLqWHWMKKV72ROKpZS4lpaqWGaLtxQNe5 WLdqV6dTAvvwbqJoZXFsPM1yE56gmcQqNYJkTLSMWIhnWfzoO+V8Sz1Pf7J4ZbaU aN7FpklgWpaEZ6eGe4eCbLWji9iGSWlwg2tch8abXqtZOXVskvqycL+YRq9tNIZ2 WIJugx4lP9OypeTSUvvzk8CUZfWiQ82qanaGcql0XPjXLrebmteWd6yVatjEhbaW iKyVdu2gUNamQsmYTa9vTOPf4FdmasFeAdvWnHaDsEMaVpaUdbWefOKee/O3reim S9iZU7yHcLWndNmBWfTRbPrTVNe5mrihU9yrU7SMRsiiVrR0VseVdurLRvzkKce0 WZZ4WdG7Kqd3a/zXNvXJR9e4SI53S6qgl6d+hPW+QOrGU8WKaLiCZf3LNN7U08Sy kua1QcN1adW5iuKfhP+4W+uQTJWLWsBeN8zJhNnDRoaBV8yrmNizPq+gXZeSWu1Q GcODd6OYWN+aTLBtZ9/RPcaBRpumYaSrgerTRa+xicTCkpiRZd/BPfnAK7KmmMjD XcyuitaPY4+VVwAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQACgAAACwAAAAAQABA AAAI/wAHEBhIsKDBgwgNKiBg4MCBKgOhBBhgwICCDzmgwKkTisUlhwYFOhxJsqTJ kyUtWDhQ0QAWA0V6bNKywkCTAzlYFOIVKgxLkwNRjmzZUKjJlgdUkiTQplepTaRW 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 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=avatar118090_1.gif Content-Type: image/gif; name=avatar118090_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar118090_1.gif Content-Transfer-Encoding: Base64 R0lGODlhUABQAPf/AAgJCAwXDBgaGAkkCRkmGRo4GigpKCg2KDY3NgtFCRdBFxBS CwRsBBlpETdNNzBbLi9mLzdxM0VGRUlWSVVWVV1oXVF7UWVlZW9ve29+b3R1dHJy fnV4dXx8fHR0gHp6hX5+iQabBQuVBwmcBgydCxWRFRGeEQ2gCRSkDRagFhmjFxui GxupESqMHDOdMyKuFiWvGSqzGzG4HyOlIyimKCypLDOrMzmvNzquOja6JD6wPT7A KEqpOECxKkCwP0a6Pkq5MVSMU1ibUkKuQkSyREe5QUq0REq1Sku8Q025SVupV1K+ SVO5U1u8W2+WbnqEen6cfWC/XWK+YmuxaHmueUXGLUjENEzKMlLNN1rTO2DXP1jJ R1rAU17CWF7TQmHNTWTHWmXaRGzUVnDfTnLWXHHbVXTZXGXBZGjDZWrCam3IZnDH bXHKannNbXPFc3XIdHrHcX3CfXvNdXvJennXZ33Tcm3gR3TlTHzqUoDNfYDabYDV dYTVeoTac4fZeojWfYnae4HuVYPoX4PwV4XxWIv0XJD3XpD4X4PiaIzhdY/2YJDi epL1ZZT1aZL4YZj1b5n6ap/ze6H6dqL5eIKDgoKCjIOJg4uLi4aGkImJk46OmJOU k5SUnZubm5eXoJ2dpYaqhZ+in5W+laOjo6Ojqqqrq6yss6uwq7OztLS0urq6vr29 woPMgojOiInVgozQjI3Yg5LVj5Pch5PZi5nei5TTlJrVmprblJzYmpbjgprkh5zr g6HcnKjGqKTboqjUpq3SrKjepKvcq77AvrHesaTjmKnmm6zrmaj4g7D7i7Lzl7b2 m7X5l7r3n7z6nqrgpK7hqq7ooLDmprLirrDppLXoq7ruqrjjtrn0orzwq7/wsMDn vsD1q8D7pMHysMLDw8XFysbIxsjIzM7O0cfZxtLS09XV2Nra3N7e4MPmwsboxMnr xsvpytDsztPt09nv2drw2uPj5Obm6OTp5Ovr6+/v8OPz4+r26u747vT09Pf3+PT6 9P7+/gAAAAAAAAD/ACH5BAEKAP8ALAAAAABQAFAAAAj/AP8JHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDMe1Mexo8ePIEOKHElSX0V+KOvRk8eypcuXMGPKnBmTnj6U /CCi1AeOlCdNQIMKHUq0qNGjRj15MmUOpUOU5jyBwERKldWrWLNq3cq1K1dUnipV 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 zviM0BiN0riMAQEAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=viewpost.gif Content-Type: image/gif; name=viewpost.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/viewpost.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMAPcAAP7+/k96W05zWpWZnk57XLrX0UhrV6/tra/urbjsuY6TmYzf ik99XLnsvKbPr527sMft2FaCYWR2dbLRx3nGfojgg3vTeqDym4zjg3bUeFeDYpzh mnrbe3+Xkofvg2rBcWW2bq66wILefqvvqH/mgcru3n3aenzEfszb3Xe9eXW7eYuk naHPpkhoVVhkaH6GjGSBcpuhppGko5ajprnYzcDa1sXM1aPipbrW0HjWePn7/Xzg fKrQtL3kyoCdj6XHtLPPxEVmVHvafaGsspSZnk10Wa7msHzAfnvYfDlbULrsv8DH z4K4h2J7csnt27DusP3+/qbxoD1nVs7w5pKbob/I0FBtXpn0lIPcgKzLvbvCyne4 e5TBm/P2+YOMkZm3qqriq5rrlJ3DqMPM046WnKTGtk97W1iGYrPQxpngm5y8rJHk j5evqXfGecfj3m2GfluuaZDzis/U3Ju7q7rsvL3GzZSwpLLguKLmoJSfo3jTeHPR dGmLd27McoDjfKjQscDryarPtqTFtPj6/YmQlQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACwAAAAADAAMAAAIoQBRlHnwRc2PQDz+OGABxE0BGV7yzKBR wgmEKRhqTOgQAwAALXfoJABUAUcPMW8IeVwCBkEDLGiUGOECg4jHEBsOmMjyZAQe JlYGQAEw5kYOQVEuhDkiQMEgAHLS7JlzZc2JM2R0AKgjIk4fOwu2RHjRBUAVC348 fFiRQgMVjzba6MmwA4QPFXxcSGhCAYkQDiTgDEnSIoiBIgHMEGAghU1AADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=avatar147337_3.gif Content-Type: image/gif; name=avatar147337_3.gif Content-Location: http://forum.qip.ru/customavatars/avatar147337_3.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gNzUK/9sAQwAIBgYHBgUIBwcH CQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04 MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAUABQAwEiAAIRAQMRAf/E AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY 2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a AAwDAQACEQMRAD8A6C4bcR3NRoCR0pXYbvaqOparHp0YJwZGztWojFzlyx3Z9Uou TtE1Yo0UZbipB88irGC5PYVwVxr8rHc0xyOeD0pYfEko+5MVHsetehDBJaNnV9Wa W56O1ldKMuir6DeOaoSOElMbEBx1BNcLLr5iYyC7k8wnk+Ycmq0etsDuD1pPB01p cUaLXxM9FD8U4vxg9a4+x8QMBgtuXqQe1dDbX0VxCHjIx9a4K1CVLV7ETpuGvQtF zTUfE0ZGc7h0+tch4j8TX9rrYsNNeKJbeMSTvLCH3lhkDnoAMcjnJ9q19Gv57wW5 uGhaZ4ILhliXb5fmDIU8nnAz64I9aueDqwpKtLZnMsRB1PZ9Sa8vo7aJpHYAKMk1 5pqmsyXt7JKzEZOAOwFbHi/UJYz9nVh5ZOT2NczpumS6vOwEwihQfPJjPPoPes8O pN2jubU24/CtWRTaqAm1zVNtXZm2xIW9s13th4R0SDHnRieQgsXnO4HAz06fpWzE mlWKAQW8cTAgfLGEHTkce9eosBiG/edivYV5vWSXornmUSazcKHi0y4ZfXymx+ZF atpp+sz5D6bNGfcgf1r0iz1HRkk3XULSjj5Qevrz/jVDWPEFi0xFtCsCdkLZPf8A +tWkcuXWTt30NaVGUZ2bb83axwk32+0kEbW86OexQ81c0jX7iG7SP5xk42+/0raW 885wWYFM9PWrdnGlrKtxHukTPzROzN/3yc5FcGJioRfvaDqR5epxnjFrp/ErBCVN 3FETuOMEDaQfT7vOa6rwo11BZiCW6sdPvZZ98rXEW4gAYUkGRR2IwBjBHSuVsZJY /EuoTXIRyJZWLzqGQAkryTnHVcHoMZ4xS3tjcWN/bGa122xAERuJgzvnBZ1wQGXd uAIGMYrqowrzlGjLbSzsnp6M+bdSKqOb7/cd5Ja6w8G271uWaMjBV4Im/UrXNapO 9jPvQqxONxVQAfwAFdzd/vIyvOK5u9sDMNuwGvGhVlTd4nsU6jpu8VqYB8QptAfj HpUUniGIjhvzNWZPCouHzs2/SpofAaOc5Y/SuhZjXUeVGrxdR7I52fXmYkIx/CoF mvLtwUBHua9AtPAECkFoyT71uW3hW3t8BUHtxWDrVZbsynVqy3Zw+k2ToytKHdjX TwRNswfyreGlRxgYUYFR3EAjjIAAxWbUt2Tq9zh9XtUt7hrkRqZGxuB6EDpx0rIg vdIWX99b+XnqMfLn+neuj1qMlG4rz69RvOIAwM16eCzjEYaPIrNdn+jOHE4WE3zb PyPaGYN0A/Oo0iWRveo45VPBzmp4iobOc15S1O1ouQ2qDsKuKAowAB+FV0mVR1qQ TJ/+utFYtIuxlQo9T0qQngCs1rlQCAact2hH3ua0ugLcpXbWbdsNvXOaJ7xVGM1m zXW4n0rOUkNGbqUQdWFcfdaYDOD71191MuDk5rCuJkEnJHWsb6mc0jYhvF/Cri3Y 9a4gakynvUy6ywxnOaSYrncJdbv4qkF1jPzfmK4Ua4UPJOKkPiAEdwR70+Zl3Oul vfc/iarPqaqcb8VysmtjaSGxxWdca0zEgHI9R3ouyXOx2E2roozu/Ws+bXY1Xhxk 1xc1/LIe9VnuJD60+UzlWsdRd68uCA1Yc2qu75DE85rMYs3Uk0mOadkc8qsmf//Z ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=CapDaughter.png Content-Type: image/png; name=CapDaughter.png Content-Location: http://mystatus.skype.com/smallicon/CapDaughter Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/g AAAANlBMVEX////////29/fy8/Pu7+/l5+fh4+Pd39/a3d3W2NjMzMzDx8fAxMS6 vr62u7uxtbWvtLSssLAwgBwiAAAAAXRSTlMAQObYZgAAAAlwSFlzAAAK8AAACvAB Qqw0mAAAABV0RVh0Q3JlYXRpb24gVGltZQA4LzE4LzA1oj6Z/QAAACV0RVh0U29m dHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVggMjAwNId2rM8AAAB6SURBVBhX Xc9BDsQgCEBRUForjij3v2xBSdsMu/9CIgKA2sBntBwHf9D7LLVWDlLvy5q5LVHr M3ln7i5ay5UwMSekANs3SZhljC2VW0brOecC7lP+QAhzRnJZ73TrYUixMqVRF+nU RGSf8nsnrlWO2ccuMvT/RD8IcAMCGwfk9MNc3gAAAABJRU5ErkJggg== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_multi_quote.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_multi_quote.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_multi_quote.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemVzIHRoZSBNUSBpbWFnZXMsIHNvIHRoZXkgYXJlIGNsaWNrYWJsZS4g QWRkaXRpb25hbGx5LCBpdCByZWRvZXMKKiB0aGUgY29sb3Jpbmcgb2YgdGhlIGlt YWdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb29raWUuIFRo aXMKKiBpcyBoZWxwZnVsIGlmIGEgdXNlciB1c2VzIHRoZSBiYWNrIGJ1dHRvbi4K KgoqIEBwYXJhbQlvYmplY3QJVGhlIG9iamVjdCB0byBzZWFyY2ggd2l0aGluIGZv ciBNUSBpbWFnZXMuCiovCmZ1bmN0aW9uIG1xX2luaXQob2JqKQp7Cgl2YXIgY29v a2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211bHRpcXVvdGUnKTsK CWlmIChjb29raWVfaWRzICE9IG51bGwgJiYgY29va2llX2lkcyAhPSAnJykKCXsK CQljb29raWVfaWRzID0gY29va2llX2lkcy5zcGxpdCgnLCcpOwoJfQoJZWxzZQoJ ewoJCWNvb2tpZV9pZHMgPSBuZXcgQXJyYXkoKTsKCX0KCgl2YXIgcG9zdGlkOwoK CXZhciBpbWFnZXMgPSBmZXRjaF90YWdzKG9iaiwgJ2ltZycpOwoJZm9yICh2YXIg aSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGltYWdlc1tp XS5pZCAmJiBpbWFnZXNbaV0uaWQuc3Vic3RyKDAsIDMpID09ICdtcV8nKQoJCXsK CQkJcG9zdGlkID0gaW1hZ2VzW2ldLmlkLnN1YnN0cigzKTsKCQkJaW1hZ2VzW2ld Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IHJldHVybiBtcV9jbGljayh0aGlzLmlk LnN1YnN0cigzKSk7IH07CgkJCWNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIChQSFAu aW5fYXJyYXkocG9zdGlkLCBjb29raWVfaWRzKSA+IC0xID8gdHJ1ZSA6IGZhbHNl KSk7CgkJfQoJfQp9CgovKioKKiBDYWxsYmFjayBmdW5jdGlvbiB0byB3aGVuIGFu IE1RIGltYWdlIGlzIGNsaWNrZWQuIE1vZGlmaWVzIHRoZSBjb29raWUgYW5kCiog dXBkYXRlcyB0aGUgbG9vayBvZiB0aGUgaW1hZ2UgdG8gc3VpdC4KKgoqIEBwYXJh bQlpbnRlZ2VyCVBvc3QgSUQgb2YgdGhlIGltYWdlIGNsaWNrZWQuCioKKiBAcmV0 dXJuCWZhbHNlCUFsd2F5cyByZXR1cm5zIGZhbHNlIHRvIGVuc3VyZSBhbnkgaHJl ZiBldmVudCBkb2VzIG5vdCBydW4KKi8KZnVuY3Rpb24gbXFfY2xpY2socG9zdGlk KQp7Cgl2YXIgY29va2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211 bHRpcXVvdGUnKTsKCgl2YXIgY29va2llX3RleHQgPSBuZXcgQXJyYXkoKTsKCXZh ciBpc19zZWxlY3RlZCA9IGZhbHNlOwoKCWlmIChjb29raWVfaWRzICE9IG51bGwg JiYgY29va2llX2lkcyAhPSAnJykKCXsKCQljb29raWVfaWRzID0gY29va2llX2lk cy5zcGxpdCgnLCcpOwoKCQlmb3IgKGkgaW4gY29va2llX2lkcykKCQl7CgkJCWlm IChjb29raWVfaWRzW2ldID09IHBvc3RpZCkKCQkJewoJCQkJaXNfc2VsZWN0ZWQg PSB0cnVlOwoJCQl9CgkJCWVsc2UgaWYgKGNvb2tpZV9pZHNbaV0pCgkJCXsKCQkJ CWNvb2tpZV90ZXh0LnB1c2goY29va2llX2lkc1tpXSk7CgkJCX0KCQl9Cgl9CgoJ Ly8gZmxpcCB0aGUgaW1hZ2UgdG8gdGhlIG90aGVyIG9wdGlvbgoJY2hhbmdlX21x X2ltYWdlKHBvc3RpZCwgKGlzX3NlbGVjdGVkID8gZmFsc2UgOiB0cnVlKSk7CgoJ Ly8gaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcG9zdGlkIGluIHRoZSBjb29raWUsIGFk ZCBpdAoJaWYgKCFpc19zZWxlY3RlZCkKCXsKCQljb29raWVfdGV4dC5wdXNoKHBv c3RpZCk7CgkJaWYgKHR5cGVvZiBtcWxpbWl0ICE9ICd1bmRlZmluZWQnICYmIG1x bGltaXQgPiAwKQoJCXsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCAoY29va2llX3Rl eHQubGVuZ3RoIC0gbXFsaW1pdCk7IGkrKykKCQkJewoJCQkJdmFyIHJlbW92YWwg PSBjb29raWVfdGV4dC5zaGlmdCgpOwoJCQkJY2hhbmdlX21xX2ltYWdlKHJlbW92 YWwsIGZhbHNlKTsKCQkJfQoJCX0KCX0KCglzZXRfY29va2llKCd2YnVsbGV0aW5f bXVsdGlxdW90ZScsIGNvb2tpZV90ZXh0LmpvaW4oJywnKSk7CgoJcmV0dXJuIGZh bHNlOwp9CgovKioKKiBDaGFuZ2VzIHRoZSBNUSBpbWFnZSB0byBzaG93IGFzIGJl aW5nIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQKKgoqIEBwYXJhbQlpbnRlZ2VyCUlE IG9mIHRoZSBwb3N0IHdob3NlIE1RIGJ1dHRvbiBpcyBjaGFuZ2luZwoqIEBwYXJh bQlib29sZWFuCVdoZXRoZXIgdG8gbWFrZSB0aGUgaW1hZ2Ugc2VsZWN0ZWQgb3Ig bm90CiovCmZ1bmN0aW9uIGNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIHRvX3NlbGVj dGVkKQp7Cgl2YXIgbXFfb2JqID0gZmV0Y2hfb2JqZWN0KCdtcV8nICsgcG9zdGlk KTsKCWlmIChtcV9vYmopCgl7CgkJaWYgKHRvX3NlbGVjdGVkID09IHRydWUpCgkJ ewoJCQltcV9vYmouc3JjID0gbXFfb2JqLnNyYy5yZXBsYWNlKC9cL211bHRpcXVv dGVfb2ZmXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVvdGVfb24uJDEnKTsK CQl9CgkJZWxzZQoJCXsKCQkJbXFfb2JqLnNyYyA9IG1xX29iai5zcmMucmVwbGFj ZSgvXC9tdWx0aXF1b3RlX29uXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVv dGVfb2ZmLiQxJyk7CgkJfQoJfQp9CgptcV9pbml0KGZldGNoX29iamVjdCgncG9z dHMnKSk7CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qXAp8fCAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwp8fCAjIERvd25sb2FkZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGgg MjAwOAp8fCAjIENWUzogJFJDU2ZpbGUkIC0gJFJldmlzaW9uOiAxNTE3NSAkCnx8 ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjClwqPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_textedit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_textedit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_textedit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjExIFBhdGNoIExldmVsIDEKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1RleHRfRWRpdG9yCgovKioK KiB2QnVsbGV0aW4gRWRpdG9yIENsYXNzCioKKiBBY3RpdmF0ZXMgYW55IEhUTUwg Y29udHJvbHMgZm9yIGFuIGVkaXRvcgoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUg a2V5IGZvciB0aGlzIGVkaXRvcgoqIEBwYXJhbQlib29sZWFuCUluaXRpYWxpc2Ug dG8gV1lTSVdZRyBtb2RlPwoqIEBwYXJhbQlzdHJpbmcJRm9ydW1pZCAvIENhbGVu ZGFyIGV0Yy4KKiBAcGFyYW0JYm9vbGVhbglQYXJzZSBzbWlsaWVzPwoqIEBwYXJh bQlzdHJpbmcJKE9wdGlvbmFsKSBJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IK KiBAcGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgRXh0cmEgYXJndW1lbnRzIHRvIHBh c3Mgd2hlbiBzd2l0Y2hpbmcgZWRpdG9yIG1vZGVzCiovCmZ1bmN0aW9uIHZCX1Rl eHRfRWRpdG9yKGVkaXRvcmlkLCBtb2RlLCBwYXJzZXR5cGUsIHBhcnNlc21pbGll cywgaW5pdGlhbF90ZXh0LCBhamF4X2V4dHJhKQp7CgkvKioKCSogTWlzY2VsbGFu ZW91cyB2YXJpYWJsZXMKCSoKCSogQHZhcglzdHJpbmcJVW5pcXVlIEVkaXRvciBJ RAoJKiBAdmFyCWJvb2xlYW4JV1lTSVdZRyBtb2RlCgkqIEB2YXIJYm9vbGVhbglI YXZlIHdlIGluaXRpYWxpemVkIHRoZSBlZGl0b3I/CgkqIEB2YXIJbWl4ZWQJUGFz c2VkIHBhcnNldHlwZSAoY29ycmVzcG9uZHMgdG8gYmJjb2RlcGFyc2UgZm9ydW1p ZCkKCSogQHZhcglib29sZWFuCVBhc3NlZCBwYXJzZXNtaWxpZXMgb3B0aW9uCgkq IEB2YXIJYm9vbGVhbglDYW4gd2UgdXNlIHZCbWVudSBwb3B1cHM/CgkqIEB2YXIJ b2JqZWN0CVRoZSBlbGVtZW50IGNvbnRhaW5pbmcgY29udHJvbHMKCSogQHZhcglv YmplY3QJVGhlIHRleHRhcmVhIG9iamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFs IHRleHQKCSogQHZhcglhcnJheQlBcnJheSBjb250YWluaW5nIGFsbCBidXR0b24g b2JqZWN0cwoJKiBAdmFyCWFycmF5CUFycmF5IGNvbnRhaW5pbmcgYWxsIHBvcHVw IG9iamVjdHMKCSogQHZhcglvYmplY3QJQ3VycmVudCBwcm9tcHQoKSBlbXVsYXRp b24gcG9wdXAKCSogQHZhcglzdHJpbmcJU3RhdGUgb2YgdGhlIGZvbnQgY29udGV4 dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0YXRlIG9mIHRoZSBzaXplIGNvbnRl eHQgY29udHJvbAoJKiBAdmFyCXN0cmluZwlTdGF0ZSBvZiB0aGUgY29sb3IgY29u dGV4dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0cmluZyB0byBjb250YWluIHRo ZSBmYWtlICdjbGlwYm9hcmQnCgkqIEB2YXIJYm9vbGVhbglJcyB0aGUgZWRpdG9y ICdkaXNhYmxlZCc/IChxdWljayByZXBseSB1c2UpCgkqIEB2YXIJdkJfSGlzdG9y eQlIaXN0b3J5IG1hbmFnZXIgZm9yIHVuZG8vcmVkbyBzeXN0ZW1zCgkqIEB2YXIg IGludGVnZXIgSXMgdGhlIGVkaXRvciBtb2RlIHRyeWluZyB0byBiZSBjaGFuZ2Vk PwoJKi8KCXRoaXMuZWRpdG9yaWQgPSBlZGl0b3JpZDsKCXRoaXMud3lzaXd5Z19t b2RlID0gcGFyc2VJbnQobW9kZSwgMTApID8gMSA6IDA7Cgl0aGlzLmluaXRpYWxp emVkID0gZmFsc2U7Cgl0aGlzLnBhcnNldHlwZSA9ICh0eXBlb2YgcGFyc2V0eXBl ID09ICd1bmRlZmluZWQnID8gJ25vbmZvcnVtJyA6IHBhcnNldHlwZSk7Cgl0aGlz LmFqYXhfZXh0cmEgPSAodHlwZW9mIHBhcnNldHlwZSA9PSAndW5kZWZpbmVkJyA/ ICcnIDogYWpheF9leHRyYSk7Cgl0aGlzLnBhcnNlc21pbGllcyA9ICh0eXBlb2Yg cGFyc2VzbWlsaWVzID09ICd1bmRlZmluZWQnID8gMSA6IHBhcnNlc21pbGllcyk7 Cgl0aGlzLnBvcHVwbW9kZSA9ICh0eXBlb2YgdkJtZW51ID09ICd1bmRlZmluZWQn ID8gZmFsc2UgOiB0cnVlKTsKCXRoaXMuY29udHJvbGJhciA9IGZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb250cm9scycpOwoJdGhpcy50ZXh0b2JqID0g ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3RleHRhcmVhJyk7Cgl0aGlz LmJ1dHRvbnMgPSBuZXcgQXJyYXkoKTsKCXRoaXMucG9wdXBzID0gbmV3IEFycmF5 KCk7Cgl0aGlzLnByb21wdF9wb3B1cCA9IG51bGw7Cgl0aGlzLmZvbnRzdGF0ZSA9 IG51bGw7Cgl0aGlzLnNpemVzdGF0ZSA9IG51bGw7Cgl0aGlzLmNvbG9yc3RhdGUg PSBudWxsOwoJdGhpcy5jbGlwYm9hcmQgPSAnJzsKCXRoaXMuZGlzYWJsZWQgPSBm YWxzZTsKCXRoaXMuaGlzdG9yeSA9IG5ldyB2Ql9IaXN0b3J5KCk7Cgl0aGlzLmlu Zmx1eCA9IDA7CgoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v IHZCX1RleHRfRWRpdG9yIG1ldGhvZHMKCgkvKioKCSogRWRpdG9yIGluaXRpYWxp emF0aW9uIHdyYXBwZXIKCSovCgl0aGlzLmluaXQgPSBmdW5jdGlvbigpCgl7CgkJ aWYgKHRoaXMuaW5pdGlhbGl6ZWQpCgkJewoJCQlyZXR1cm47CgkJfQoKCQl0aGlz LnRleHRvYmouZGlzYWJsZWQgPSBmYWxzZTsKCgkJaWYgKHRoaXMudGVtcGlmcmFt ZSkKCQl7CgkJCXRoaXMudGVtcGlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMudGVtcGlmcmFtZSk7CgkJfQoKCQl0aGlzLnNldF9lZGl0b3JfY29udGVu dHMoaW5pdGlhbF90ZXh0KTsKCgkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9ucygp OwoKCQl0aGlzLmluaXRfY29udHJvbHMoKTsKCgkJdGhpcy5pbml0X3NtaWxpZXMo ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3NtaWxpZWJveCcpKTsKCgkJ aWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYmICFzbWls aWVfd2luZG93LmNsb3NlZCkKCQl7CgkJCXRoaXMuaW5pdF9zbWlsaWVzKHNtaWxp ZV93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NtaWxpZXRhYmxlJykp OwoJCX0KCgkJdGhpcy5jYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ImltYWdlc3RhbXAiKTsKCQlpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwpCgkJewoJ CQl0aGlzLmNhcHRjaGEuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIDEpOwoJCX0K CgkJdGhpcy5pbml0aWFsaXplZCA9IHRydWU7Cgl9OwoKCS8qKgoJKiBDaGVjayBp ZiB3ZSBuZWVkIHRvIHJlZm9jdXMgdGhlIGVkaXRvciB3aW5kb3cKCSovCgl0aGlz LmNoZWNrX2ZvY3VzID0gZnVuY3Rpb24oKQoJewoJCWlmICghdGhpcy5lZGl0d2lu Lmhhc2ZvY3VzKQoJCXsKCQkJdGhpcy5lZGl0d2luLmZvY3VzKCk7CgkJCWlmIChp c19vcGVyYSkKCQkJewoJCQkJLy8gc2VlIGh0dHA6Ly93d3cudmJ1bGxldGluLmNv bS9mb3J1bS9idWdzMzUucGhwP2RvPXZpZXcmYnVnaWQ9Njg3CgkJCQl0aGlzLmVk aXR3aW4uZm9jdXMoKTsKCQkJfQoJCX0KCX0KCgkvKioKCSogSW5pdCBidXR0b24g Y29udHJvbHMgZm9yIHRoZSBlZGl0b3IKCSovCgl0aGlzLmluaXRfY29udHJvbHMg PSBmdW5jdGlvbigpCgl7CgkJdmFyIGNvbnRyb2xzID0gbmV3IEFycmF5KCk7CgoJ CWlmICh0aGlzLmNvbnRyb2xiYXIgPT0gbnVsbCkKCQl7CgkJCXJldHVybjsKCQl9 CgoJCXZhciBidXR0b25zID0gZmV0Y2hfdGFncyh0aGlzLmNvbnRyb2xiYXIsICdk aXYnKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKysp CgkJewoJCQlpZiAoYnV0dG9uc1tpXS5jbGFzc05hbWUgPT0gJ2ltYWdlYnV0dG9u JyAmJiBidXR0b25zW2ldLmlkKQoJCQl7CgkJCQljb250cm9sc1tjb250cm9scy5s ZW5ndGhdID0gYnV0dG9uc1tpXS5pZDsKCQkJfQoJCX0KCQlmb3IgKHZhciBpID0g MDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGNvbnRyb2wg PSBmZXRjaF9vYmplY3QoY29udHJvbHNbaV0pOwoKCQkJaWYgKGNvbnRyb2wuaWQu aW5kZXhPZih0aGlzLmVkaXRvcmlkICsgJ19jbWRfJykgIT0gLTEpCgkJCXsKCQkJ CXRoaXMuaW5pdF9jb21tYW5kX2J1dHRvbihjb250cm9sKTsKCQkJfQoJCQllbHNl IGlmIChjb250cm9sLmlkLmluZGV4T2YodGhpcy5lZGl0b3JpZCArICdfcG9wdXBf JykgIT0gLTEpCgkJCXsKCQkJCXRoaXMuaW5pdF9wb3B1cF9idXR0b24oY29udHJv bCk7CgkJCX0KCQl9CgoJCXNldF91bnNlbGVjdGFibGUodGhpcy5jb250cm9sYmFy KTsKCX07CgoJLyoqCgkqIEluaXQgU21pbGllcwoJKi8KCXRoaXMuaW5pdF9zbWls aWVzID0gZnVuY3Rpb24oc21pbGllX2NvbnRhaW5lcikKCXsKCQlpZiAoc21pbGll X2NvbnRhaW5lciAhPSBudWxsKQoJCXsKCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90 YWdzKHNtaWxpZV9jb250YWluZXIsICdpbWcnKTsKCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQl7CgkJCQlpZiAoc21pbGllc1tp XS5pZCAmJiBzbWlsaWVzW2ldLmlkLmluZGV4T2YoJ19zbWlsaWVfJykgIT0gZmFs c2UpCgkJCQl7CgkJCQkJc21pbGllc1tpXS5zdHlsZS5jdXJzb3IgPSBwb2ludGVy X2N1cnNvcjsKCQkJCQlzbWlsaWVzW2ldLmVkaXRvcmlkID0gdGhpcy5lZGl0b3Jp ZDsKCQkJCQlzbWlsaWVzW2ldLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLnNtaWxpZV9vbmNsaWNrOwoJCQkJCXNtaWxpZXNbaV0udW5z ZWxlY3RhYmxlID0gJ29uJzsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvKioKCSogSW5p dCBjb21tYW5kIGJ1dHRvbiAoYiwgaSwgdSBldGMuKQoJKgoJKiBAcGFyYW0Jb2Jq ZWN0CUN1cnJlbnQgSFRNTCBidXR0b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9jb21t YW5kX2J1dHRvbiA9IGZ1bmN0aW9uKG9iaikKCXsKCQlvYmouY21kID0gb2JqLmlk LnN1YnN0cihvYmouaWQuaW5kZXhPZignX2NtZF8nKSArIDUpOwoJCW9iai5lZGl0 b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJdGhpcy5idXR0b25zW29iai5jbWRdID0g b2JqOwoKCQlpZiAob2JqLmNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlpZiAo QUpBWF9Db21wYXRpYmxlKQoJCQl7CgkJCQlvYmouc3RhdGUgPSB0aGlzLnd5c2l3 eWdfbW9kZSA/IHRydWUgOiBmYWxzZTsKCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5 bGUob2JqLCAnYnV0dG9uJywgdGhpcy53eXNpd3lnX21vZGUgPyAnc2VsZWN0ZWQn IDogJ25vcm1hbCcpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb2JqLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQob2JqKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlvYmou c3RhdGUgPSBmYWxzZTsKCQkJb2JqLm1vZGUgPSAnbm9ybWFsJzsKCQl9CgoJCS8v IGV2ZW50IGhhbmRsZXJzCgkJb2JqLm9uY2xpY2sgPSBvYmoub25tb3VzZWRvd24g PSBvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3VzZW91dCA9IHZCX1RleHRfRWRp dG9yX0V2ZW50cy5wcm90b3R5cGUuY29tbWFuZF9idXR0b25fb25tb3VzZWV2ZW50 OwoJfQoKCS8qKgoJKiBJbml0IHBvcHVwIGJ1dHRvbiAoZm9yZWNvbG9yLCBmb250 bmFtZSBldGMuKQoJKgoJKiBAcGFyYW0Jb2JqZWN0CUN1cnJlbnQgSFRNTCBidXR0 b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9wb3B1cF9idXR0b24gPSBmdW5jdGlvbihv YmopCgl7CgkJb2JqLmNtZCA9IG9iai5pZC5zdWJzdHIob2JqLmlkLmluZGV4T2Yo J19wb3B1cF8nKSArIDcpOwoKCQlpZiAodGhpcy5wb3B1cG1vZGUpCgkJewoJCQkv LyByZWdpc3RlciBwb3B1cCBtZW51IGNvbnRyb2wKCQkJdkJtZW51LnJlZ2lzdGVy KG9iai5pZCwgdHJ1ZSk7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLm9wZW5fc3Rl cHMgPSA1OwoKCQkJb2JqLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJb2Jq LnN0YXRlID0gZmFsc2U7CgkJCXRoaXMuYnV0dG9uc1tvYmouY21kXSA9IG9iajsK CgkJCWlmIChvYmouY21kID09ICdmb250bmFtZScpCgkJCXsKCQkJCXRoaXMuZm9u dG91dCA9IGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19mb250X291dCcp OwoJCQkJdGhpcy5mb250b3V0LmlubmVySFRNTCA9IG9iai50aXRsZTsKCQkJCXRo aXMuZm9udG9wdGlvbnMgPSB7JycgOiB0aGlzLmZvbnRvdXR9OwoKCQkJCWZvciAo dmFyIG9wdGlvbiBpbiBmb250b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgZGl2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQkJZGl2LmlkID0gdGhp cy5lZGl0b3JpZCArICdfZm9udG9wdGlvbl8nICsgZm9udG9wdGlvbnNbb3B0aW9u XTsKCQkJCQlkaXYuc3R5bGUud2lkdGggPSB0aGlzLmZvbnRvdXQuc3R5bGUud2lk dGg7CgkJCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQkJZGl2Lmlu bmVySFRNTCA9IGZvbnRvcHRpb25zW29wdGlvbl07CgkJCQkJdGhpcy5mb250b3B0 aW9uc1tmb250b3B0aW9uc1tvcHRpb25dXSA9IHRoaXMuZm9udG91dC5wYXJlbnRO b2RlLmFwcGVuZENoaWxkKGRpdik7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAob2Jq LmNtZCA9PSAnZm9udHNpemUnKQoJCQl7CgkJCQl0aGlzLnNpemVvdXQgPSBmZXRj aF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfc2l6ZV9vdXQnKTsKCQkJCXRoaXMu c2l6ZW91dC5pbm5lckhUTUwgPSBvYmoudGl0bGU7CgkJCQl0aGlzLnNpemVvcHRp b25zID0geycnIDogdGhpcy5zaXplb3V0fTsKCgkJCQlmb3IgKHZhciBvcHRpb24g aW4gc2l6ZW9wdGlvbnMpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCWRpdi5pZCA9IHRoaXMuZWRpdG9yaWQg KyAnX3NpemVvcHRpb25fJyArIHNpemVvcHRpb25zW29wdGlvbl07CgkJCQkJZGl2 LnN0eWxlLndpZHRoID0gdGhpcy5zaXplb3V0LnN0eWxlLndpZHRoOwoJCQkJCWRp di5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJCWRpdi5pbm5lckhUTUwgPSBz aXplb3B0aW9uc1tvcHRpb25dOwoJCQkJCXRoaXMuc2l6ZW9wdGlvbnNbc2l6ZW9w dGlvbnNbb3B0aW9uXV0gPSB0aGlzLnNpemVvdXQucGFyZW50Tm9kZS5hcHBlbmRD aGlsZChkaXYpOwoJCQkJfQoJCQl9CgoJCQkvLyBleHRlbmQgb25tb3VzZW92ZXIK CQkJb2JqLl9vbm1vdXNlb3ZlciA9IG9iai5vbm1vdXNlb3ZlcjsKCQkJLy8gZXh0 ZW5kIG9uY2xpY2sKCQkJb2JqLl9vbmNsaWNrID0gb2JqLm9uY2xpY2s7CgoJCQkv LyBldmVudCBoYW5kbGVycwoJCQlvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3Vz ZW91dCA9IG9iai5vbmNsaWNrID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5wb3B1cF9idXR0b25fb25tb3VzZWV2ZW50OwoKCQkJLy8gZXh0ZW5kIG1l bnUgc2hvdwoJCQl2Qm1lbnUubWVudXNbb2JqLmlkXS5fc2hvdyA9IHZCbWVudS5t ZW51c1tvYmouaWRdLnNob3c7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLnNob3cg PSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnBvcHVwX2J1dHRvbl9z aG93OwoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmJ1aWxkX3NlbGVjdChvYmopOwoJ CX0KCX0KCgkvKioKCSogUmVwbGFjZSB0aGUgcG9wdXAgY29udHJvbHMgd2l0aCA8 c2VsZWN0PiBtZW51cyBmb3IgcnViYmlzaCBicm93c2VycwoJKgoJKiBAcGFyYW0J b2JqZWN0CVRoZSBwb3B1cCBjb250cm9sIGVsZW1lbnQKCSovCgl0aGlzLmJ1aWxk X3NlbGVjdCA9IGZ1bmN0aW9uKG9iaikKCXsKCQl2YXIgc2VsID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CgkJc2VsLmlkID0gdGhpcy5lZGl0b3Jp ZCArICdfc2VsZWN0XycgKyBvYmouY21kOwoJCXNlbC5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJc2VsLmNtZCA9IG9iai5jbWQ7CgoJCXZhciBvcHQgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQlvcHQudmFsdWUgPSAnJzsK CQlvcHQudGV4dCA9IG9iai50aXRsZTsKCQlzZWwuYWRkKG9wdCwgaXNfaWUgPyBz ZWwub3B0aW9ucy5sZW5ndGggOiBudWxsKTsKCgkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCW9wdC52YWx1ZSA9ICcnOwoJCW9w dC50ZXh0ID0gJyAnOwoJCXNlbC5hZGQob3B0LCBpc19pZSA/IHNlbC5vcHRpb25z Lmxlbmd0aCA6IG51bGwpOwoKCQlzd2l0Y2ggKG9iai5jbWQpCgkJewoJCQljYXNl ICdmb250bmFtZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZm9udG9w dGlvbnMubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IGZvbnRv cHRpb25zW2ldOwoJCQkJCW9wdC50ZXh0ID0gKGZvbnRvcHRpb25zW2ldLmxlbmd0 aCA+IDEwID8gKGZvbnRvcHRpb25zW2ldLnN1YnN0cigwLCAxMCkgKyAnLi4uJykg OiBmb250b3B0aW9uc1tpXSk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2Vs Lm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdl ID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3Nl bGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdmb250c2l6 ZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZW9wdGlvbnMubGVu Z3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IHNpemVvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gc2l6ZW9wdGlvbnNbaV07CgkJCQkJc2VsLmFkZChv cHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJ CQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJ CQljYXNlICdmb3JlY29sb3InOgoJCQl7CgkJCQlmb3IgKHZhciBpIGluIGNvbG9y b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnb3B0aW9uJyk7CgkJCQkJb3B0LnZhbHVlID0gY29sb3JvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gUEhQLnRyaW0oKGNvbG9yb3B0aW9uc1tpXS5sZW5n dGggPiA1ID8gKGNvbG9yb3B0aW9uc1tpXS5zdWJzdHIoMCwgNSkgKyAnLi4uJykg OiBjb2xvcm9wdGlvbnNbaV0pLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFtBLVpdKScs ICdnJyksICcgJDEnKSk7CgkJCQkJb3B0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9 IGk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3Ro IDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsK CQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdzbWlsaWUnOgoJCQl7CgkJCQlmb3Ig KHZhciBjYXQgaW4gc21pbGllb3B0aW9ucykKCQkJCXsKCQkJCQlmb3IgKHZhciBz bWlsaWVpZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCQkJewoJCQkJCQlpZiAo c21pbGllaWQgIT0gJ21vcmUnKQoJCQkJCQl7CgkJCQkJCQl2YXIgb3B0ID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CgkJCQkJCQlvcHQudmFsdWUg PSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0LnRl eHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0 LnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJCQlvcHQuc21pbGllcGF0aCA9IHNt aWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVpZF1bMF07CgkJCQkJCQlvcHQuc21pbGll dGl0bGUgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzJdOwoJCQkJCQkJ c2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7 CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVzZWxlY3Rfb25jaGFuZ2U7 CgkJCQlicmVhazsKCQkJfQoKCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJCQkJc2Vs Lm9ubW91c2VvdmVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5h dHRhY2hzZWxlY3Rfb25tb3VzZW92ZXI7CgkJCQlzZWwub25jaGFuZ2UgPSB2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbmNoYW5n ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQl3aGlsZSAob2JqLmhhc0NoaWxkTm9k ZXMoKSkKCQl7CgkJCW9iai5yZW1vdmVDaGlsZChvYmouZmlyc3RDaGlsZCk7CgkJ fQoKCQl0aGlzLmJ1dHRvbnNbb2JqLmNtZF0gPSBvYmouYXBwZW5kQ2hpbGQoc2Vs KTsKCX0KCgkvKioKCSogSW5pdCBtZW51IGNvbnRyb2xzIGZvciB0aGUgZWRpdG9y CgkqCgkqIEBwYXJhbQlvYmplY3QJSFRNTCBtZW51IG5vZGUKCSovCgl0aGlzLmlu aXRfcG9wdXBfbWVudSA9IGZ1bmN0aW9uKG9iaikKCXsKCQlpZiAodGhpcy5kaXNh YmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCAob2JqLmNtZCkKCQl7 CgkJCWNhc2UgJ2ZvbnRuYW1lJzoKCQkJewoJCQkJdmFyIG1lbnUgPSB0aGlzLmlu aXRfbWVudV9jb250YWluZXIoJ2ZvbnRuYW1lJywgJzIwMHB4JywgJzI1MHB4Jywg J2F1dG8nKTsKCQkJCXRoaXMuYnVpbGRfZm9udG5hbWVfcG9wdXAob2JqLCBtZW51 KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJewoJCQkJ dmFyIG1lbnUgPSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ2ZvbnRzaXplJywg J2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQl0aGlzLmJ1aWxkX2ZvbnRz aXplX3BvcHVwKG9iaiwgbWVudSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdm b3JlY29sb3InOgoJCQl7CgkJCQl2YXIgbWVudSA9IHRoaXMuaW5pdF9tZW51X2Nv bnRhaW5lcignZm9yZWNvbG9yJywgJ2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7 CgkJCQl0aGlzLmJ1aWxkX2ZvcmVjb2xvcl9wb3B1cChvYmosIG1lbnUpOwoJCQkJ YnJlYWs7CgkJCX0KCQkJY2FzZSAnc21pbGllJzoKCQkJewoJCQkJdmFyIG1lbnUg PSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ3NtaWxpZScsICcxNzVweCcsICcy NTBweCcsICdhdXRvJyk7CgkJCQl0aGlzLmJ1aWxkX3NtaWxpZV9wb3B1cChvYmos IG1lbnUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJ CQkJaWYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyAhPSAndW5kZWZpbmVkJyAmJiB2 Ql9BdHRhY2htZW50cy5oYXNfYXR0YWNobWVudHMoKSkKCQkJCXsKCQkJCQl2YXIg bWVudSA9IHRoaXMuaW5pdF9tZW51X2NvbnRhaW5lcignYXR0YWNoJywgJ2F1dG8n LCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQkJdGhpcy5idWlsZF9hdHRhY2htZW50 c19wb3B1cChtZW51LCBvYmopOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7CgkJCQl9CgkJCX0KCQl9CgoJCXRoaXMucG9wdXBzW29iai5jbWRd ID0gdGhpcy5jb250cm9sYmFyLmFwcGVuZENoaWxkKG1lbnUpOwoKCQlzZXRfdW5z ZWxlY3RhYmxlKG1lbnUpOwoJfTsKCgkvKioKCSogSW5pdCBNZW51IENvbnRhaW5l ciBESVYKCSoKCSogQHBhcmFtCXN0cmluZwlDb21tYW5kIHN0cmluZyAoZm9yZWNv bG9yLCBmb250bmFtZSBldGMuKQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyB3aWR0aCBm b3IgdGhlIG1lbnUKCSogQHBhcmFtCXN0cmluZwlDU1MgaGVpZ2h0IGZvciB0aGUg bWVudQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyBvdmVyZmxvdyBmb3IgdGhlIG1lbnUK CSoKCSogQHJldHVybglvYmplY3QJTmV3bHkgY3JlYXRlZCBtZW51IGVsZW1lbnQK CSovCgl0aGlzLmluaXRfbWVudV9jb250YWluZXIgPSBmdW5jdGlvbihjbWQsIHdp ZHRoLCBoZWlnaHQsIG92ZXJmbG93KQoJewoJCXZhciBtZW51ID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CgoJCW1lbnUuaWQgPSB0aGlzLmVkaXRvcmlk ICsgJ19wb3B1cF8nICsgY21kICsgJ19tZW51JzsKCQltZW51LmNsYXNzTmFtZSA9 ICd2Ym1lbnVfcG9wdXAnOwoJCW1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK CQltZW51LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JzsKCQltZW51LnN0eWxlLnBh ZGRpbmcgPSAnM3B4JzsKCQltZW51LnN0eWxlLndpZHRoID0gd2lkdGg7CgkJbWVu dS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7CgkJbWVudS5zdHlsZS5vdmVyZmxvdyA9 IG92ZXJmbG93OwoKCQlyZXR1cm4gbWVudTsKCX0KCgkvKioKCSogQnVpbGQgRm9u dCBOYW1lIFBvcHVwIENvbnRlbnRzCgkqCgkqIEBwYXJhbQlvYmplY3QJVGhlIGNv bnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBt ZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2ZvbnRuYW1lX3Bv cHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAodmFyIG4gaW4gZm9u dG9wdGlvbnMpCgkJewoJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7CgkJCW9wdGlvbi5pbm5lckhUTUwgPSAnPGZvbnQgZmFjZT0i JyArIGZvbnRvcHRpb25zW25dICsgJyI+JyArIGZvbnRvcHRpb25zW25dICsgJzwv Zm9udD4nOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29mb250JzsKCQkJb3B0aW9u LnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0JzsKCQkJb3B0aW9uLnRpdGxlID0gZm9u dG9wdGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24u Y29udHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5l ZGl0b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2Vv dXQgPSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2Vl dmVudDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBw ZW5kQ2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvbnQgU2l6 ZSBQb3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9s IG9iamVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBj b250YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb250c2l6ZV9wb3B1cCA9 IGZ1bmN0aW9uKG9iaiwgbWVudSkKCXsKCQlmb3IgKHZhciBuIGluIHNpemVvcHRp b25zKQoJCXsKCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2RpdicpOwoJCQlvcHRpb24uaW5uZXJIVE1MID0gJzxmb250IHNpemU9IicgKyBz aXplb3B0aW9uc1tuXSArICciPicgKyBzaXplb3B0aW9uc1tuXSArICc8L2ZvbnQ+ JzsKCQkJb3B0aW9uLmNsYXNzTmFtZSA9ICdvc2l6ZSc7CgkJCW9wdGlvbi5zdHls ZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKCQkJb3B0aW9uLnRpdGxlID0gc2l6ZW9w dGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24uY29u dHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0 b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2VvdXQg PSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVu dDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBwZW5k Q2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvcmVDb2xvciBQ b3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9sIG9i amVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBjb250 YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb3JlY29sb3JfcG9wdXAgPSBm dW5jdGlvbihvYmosIG1lbnUpCgl7CgkJdmFyIGNvbG9yb3V0ID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yX291dCcpOwoJCWNvbG9yb3V0LmVk aXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQljb2xvcm91dC5vbmNsaWNrID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5jb2xvcm91dF9vbmNsaWNrOwoK CQl2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwoJ CXRhYmxlLmNlbGxQYWRkaW5nID0gMDsKCQl0YWJsZS5jZWxsU3BhY2luZyA9IDA7 CgkJdGFibGUuYm9yZGVyID0gMDsKCgkJdmFyIGkgPSAwOwoJCWZvciAodmFyIGhl eCBpbiBjb2xvcm9wdGlvbnMpCgkJewoJCQlpZiAoaSAlIDggPT0gMCkKCQkJewoJ CQkJdmFyIHRyID0gdGFibGUuaW5zZXJ0Um93KC0xKTsKCQkJfQoJCQlpKys7CgoJ CQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWRp di5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCgkJ CXZhciBvcHRpb24gPSB0ci5pbnNlcnRDZWxsKC0xKTsKCQkJb3B0aW9uLnN0eWxl LnRleHRBbGlnbiA9ICdjZW50ZXInOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29j b2xvcic7CgkJCW9wdGlvbi5hcHBlbmRDaGlsZChkaXYpOwoJCQlvcHRpb24uY21k ID0gb2JqLmNtZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsK CQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7CgkJCW9wdGlvbi5jb2xvcm5h bWUgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCQkJb3B0aW9uLmlkID0gdGhpcy5lZGl0 b3JpZCArICdfY29sb3JfJyArIGNvbG9yb3B0aW9uc1toZXhdOwoJCQlvcHRpb24u b25tb3VzZW92ZXIgPSBvcHRpb24ub25tb3VzZW91dCA9IG9wdGlvbi5vbm1vdXNl dXAgPSBvcHRpb24ub25tb3VzZWRvd24gPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZWV2ZW50OwoJCQlvcHRpb24ub25j bGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuY29sb3JvcHRp b25fb25jbGljazsKCQl9CgoJCW1lbnUuYXBwZW5kQ2hpbGQodGFibGUpOwoJfQoK CS8qKgoJKiBCdWlsZCBTbWlsaWUgUG9wdXAgQ29udGVudHMKCSoKCSogQHBhcmFt CW9iamVjdAlUaGUgY29udHJvbCBvYmplY3QgZm9yIHRoZSBtZW51CgkqIEBwYXJh bQlvYmplY3QJVGhlIG1lbnUgY29udGFpbmVyIG9iamVjdAoJKi8KCXRoaXMuYnVp bGRfc21pbGllX3BvcHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAo dmFyIGNhdCBpbiBzbWlsaWVvcHRpb25zKQoJCXsKCQkJdmFyIGNhdGVnb3J5ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWNhdGVnb3J5LmNsYXNz TmFtZSA9ICd0aGVhZCc7CgkJCWNhdGVnb3J5LmlubmVySFRNTCA9IGNhdDsKCQkJ bWVudS5hcHBlbmRDaGlsZChjYXRlZ29yeSk7CgoJCQlmb3IgKHZhciBzbWlsaWVp ZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCXsKCQkJCWlmIChzbWlsaWVpZCA9 PSAnbW9yZScpCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAndGhlYWQn OwoJCQkJCW9wdGlvbi5pbm5lckhUTUwgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21p bGllaWRdOwoJCQkJCW9wdGlvbi5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsKCQkJCQlvcHRpb24uZWRpdG9yaWQgPSB0aGlzLmVkaXRvcmlkOwoJCQkJCW9w dGlvbi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJCW9wdGlvbi5vbmNsaWNrID0g dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVtb3JlX29uY2xp Y2s7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7 CgkJCQkJb3B0aW9uLnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJb3B0aW9uLnNt aWxpZXRleHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJ CW9wdGlvbi5zbWlsaWV0aXRsZSA9IHNtaWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVp ZF1bMl07CgoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQkJ b3B0aW9uLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iJyArIHNtaWxpZW9wdGlvbnNb Y2F0XVtzbWlsaWVpZF1bMF0gKyAnIiBhbHQ9IicgKyBzbWlsaWVvcHRpb25zW2Nh dF1bc21pbGllaWRdWzJdICsgJyIgLz4gJyArIHNtaWxpZW9wdGlvbnNbY2F0XVtz bWlsaWVpZF1bMl07CgoJCQkJCW9wdGlvbi5vbm1vdXNlb3ZlciA9IG9wdGlvbi5v bm1vdXNlb3V0ID0gb3B0aW9uLm9ubW91c2Vkb3duID0gb3B0aW9uLm9ubW91c2V1 cCA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9v bm1vdXNlZXZlbnQ7CgoJCQkJCW9wdGlvbi5vbmNsaWNrID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVvcHRpb25fb25jbGljazsKCQkJCX0K CgkJCQltZW51LmFwcGVuZENoaWxkKG9wdGlvbik7CgkJCX0KCQl9Cgl9CgoJLyoq CgkqIEJ1aWxkIEF0dGFjaG1lbnRzIFBvcHVwCgkqCgkqIEBwYXJhbQlvYmplY3QJ VGhlIGNvbnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBtZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2F0dGFj aG1lbnRzX3BvcHVwID0gZnVuY3Rpb24obWVudSwgb2JqKQoJewoJCWlmICh0aGlz LnBvcHVwbW9kZSkKCQl7CgkJCXdoaWxlIChtZW51Lmhhc0NoaWxkTm9kZXMoKSkK CQkJewoJCQkJbWVudS5yZW1vdmVDaGlsZChtZW51LmZpcnN0Q2hpbGQpOwoJCQl9 CgoJCQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCWRpdi5jb250cm9sa2V5 ID0gb2JqLmlkOwoJCQlkaXYuY2xhc3NOYW1lID0gJ3RoZWFkJzsKCQkJZGl2LnN0 eWxlLmN1cnNvciA9IHBvaW50ZXJfY3Vyc29yOwoJCQlkaXYuaW5uZXJIVE1MID0g ZmV0Y2hfb2JqZWN0KCdtYW5hZ2VfYXR0YWNobWVudHNfYnV0dG9uJykudmFsdWU7 CgkJCWRpdi50aXRsZSA9IGZldGNoX29iamVjdCgnbWFuYWdlX2F0dGFjaG1lbnRz X2J1dHRvbicpLnRpdGxlOwoJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuYXR0YWNobWFuYWdlX29uY2xpY2s7CgoJCQltZW51 LmFwcGVuZENoaWxkKGRpdik7CgoJCQl2YXIgYXR0YWNoX2NvdW50ID0gMDsKCQkJ Zm9yICh2YXIgaWQgaW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsK CQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCQlkaXYuY29udHJvbGtl eSA9IG9iai5pZDsKCQkJCWRpdi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQlk aXYuYXR0YWNobWVudGlkID0gaWQ7CgkJCQlkaXYuaW5uZXJIVE1MID0gJzxpbWcg c3JjPSInICsgdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHNbaWRdWydpbWdwYXRo J10gKyAnIiBhbHQ9IiIgLz4gJyArIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRz W2lkXVsnZmlsZW5hbWUnXTsKCQkJCWRpdi5vbm1vdXNlb3ZlciA9IGRpdi5vbm1v dXNlb3V0ID0gZGl2Lm9ubW91c2Vkb3duID0gZGl2Lm9ubW91c2V1cCA9IHZCX1Rl eHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNlZXZl bnQ7CgkJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuYXR0YWNob3B0aW9uX29uY2xpY2s7CgoJCQkJbWVudS5hcHBlbmRDaGls ZChkaXYpOwoJCQkJYXR0YWNoX2NvdW50Kys7CgkJCX0KCQkJaWYgKGF0dGFjaF9j b3VudCA+IDEpCgkJCXsKCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKCQkJCWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQKCQkJ CWRpdi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJZGl2LmNsYXNzTmFtZSA9ICdv c21pbGllJzsKCQkJCWRpdi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwoJCQkJ ZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzI1cHgnOwoJCQkJZGl2LmlubmVySFRN TCA9IHZicGhyYXNlWydpbnNlcnRfYWxsJ107CgkJCQlkaXYub25tb3VzZW92ZXIg PSBkaXYub25tb3VzZW91dCA9IGRpdi5vbm1vdXNlZG93biA9IGRpdi5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25f b25tb3VzZWV2ZW50OwoJCQkJZGl2Lm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9F dmVudHMucHJvdG90eXBlLmF0dGFjaGluc2VydGFsbF9vbmNsaWNrOwoKCQkJCW1l bnUuYXBwZW5kQ2hpbGQoZGl2KTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQl3aGls ZSAobWVudS5vcHRpb25zLmxlbmd0aCA+IDIpCgkJCXsKCQkJCW1lbnUucmVtb3Zl KG1lbnUub3B0aW9ucy5sZW5ndGggLSAxKTsKCQkJfQoKCQkJZm9yICh2YXIgaWQg aW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsKCQkJCXZhciBvcHQg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQkJCW9wdC52YWx1 ZSA9IGlkOwoJCQkJb3B0LnRleHQgPSB2Ql9BdHRhY2htZW50cy5hdHRhY2htZW50 c1tpZF1bJ2ZpbGVuYW1lJ107CgkJCQltZW51LmFkZChvcHQsIGlzX2llID8gbWVu dS5vcHRpb25zLmxlbmd0aCA6IG51bGwpOwoJCQl9CgkJfQoKCQlzZXRfdW5zZWxl Y3RhYmxlKG1lbnUpOwoJfQoKCS8qKgoJKiBNZW51IENvbnRleHQKCSoKCSogQHBh cmFtCW9iamVjdAlUaGUgbWVudSBjb250YWluZXIgb2JqZWN0CgkqIEBwYXJhbQlz dHJpbmcJVGhlIHN0YXRlIG9mIHRoZSBjb250cm9sCgkqLwoJdGhpcy5tZW51X2Nv bnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlKQoJewoJCWlmICh0aGlzLmRpc2Fi bGVkKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJ ewoJCQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIG1lbnUgaXMgb3BlbgoJCQl7CgkJ CQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdkb3duJyk7 CgkJCQlicmVhazsKCQkJfQoKCQkJZGVmYXVsdDoKCQkJewoJCQkJc3dpdGNoIChz dGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0 aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJ ewoJCQkJCQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ3BvcHVwJywgJ2Rv d24nKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNldXAnOgoJ CQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdob3ZlcicpOwoJCQkJCQlicmVhazsK CQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qKgoJKiBCdXR0b24gQ29udGV4 dAoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBidXR0b24gb2JqZWN0CgkqIEBwYXJh bQlzdHJpbmcJSW5jb21pbmcgZXZlbnQgdHlwZQoJKiBAcGFyYW0Jc3RyaW5nCUNv bnRyb2wgdHlwZSAtICdidXR0b24nIG9yICdtZW51JwoJKi8KCXRoaXMuYnV0dG9u X2NvbnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlLCBjb250cm9sdHlwZSkKCXsK CQlpZiAodGhpcy5kaXNhYmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0 eXBlb2YgY29udHJvbHR5cGUgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQljb250cm9s dHlwZSA9ICdidXR0b24nOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJewoJ CQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIGJ1dHRvbgoJCQl7CgkJCQlzd2l0Y2gg KHN0YXRlKQoJCQkJewoJCQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJY2FzZSAn bW91c2Vkb3duJzoKCQkJCQljYXNlICdtb3VzZXVwJzoKCQkJCQl7CgkJCQkJCXRo aXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCBjb250cm9sdHlwZSwgJ2Rvd24nKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlb3V0JzoKCQkJCQl7 CgkJCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCAnYnV0dG9uJywgJ3Nl bGVjdGVkJyk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJ CQl9CgoJCQlkZWZhdWx0OiAvLyBub3Qgc2VsZWN0ZWQKCQkJewoJCQkJc3dpdGNo IChzdGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW92ZXInOgoJCQkJCWNhc2Ug J21vdXNldXAnOgoJCQkJCXsKCQkJCQkJdGhpcy5zZXRfY29udHJvbF9zdHlsZShv YmosIGNvbnRyb2x0eXBlLCAnaG92ZXInKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJ CQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdkb3duJyk7CgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0aGlz LnNldF9jb250cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9 OwoKCS8qKgoJKiBTZXQgQ29udHJvbCBTdHlsZQoJKgoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBvYmplY3QgdG8gYmUgc3R5bGVkCgkqIEBwYXJhbQlzdHJpbmcJQ29udHJv bCB0eXBlIC0gJ2J1dHRvbicgb3IgJ21lbnUnCgkqIEBwYXJhbQlzdHJpbmcJVGhl IG1vZGUgdG8gdXNlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpc3R5bGVzIGFycmF5 CgkqLwoJdGhpcy5zZXRfY29udHJvbF9zdHlsZSA9IGZ1bmN0aW9uKG9iaiwgY29u dHJvbHR5cGUsIG1vZGUpCgl7CgkJaWYgKG9iai5tb2RlICE9IG1vZGUpCgkJewoJ CQlvYmoubW9kZSA9IG1vZGU7CgoJCQkvLyBjb25zdHJ1Y3QgdGhlIG5hbWUgb2Yg dGhlIGFwcHJvcHJpYXRlIGFycmF5IGtleSBmcm9tIHRoZSBpc3R5bGVzIGFycmF5 CgkJCWlzdHlsZSA9ICdwaV8nICsgY29udHJvbHR5cGUgKyAnXycgKyBvYmoubW9k ZTsKCgkJCS8vIHNldCBlbGVtZW50IGJhY2tncm91bmQsIGNvbG9yLCBwYWRkaW5n IGFuZCBib3JkZXIKCQkJaWYgKHR5cGVvZiBpc3R5bGVzICE9ICd1bmRlZmluZWQn ICYmIHR5cGVvZiBpc3R5bGVzW2lzdHlsZV0gIT0gJ3VuZGVmaW5lZCcpCgkJCXsK CQkJCW9iai5zdHlsZS5iYWNrZ3JvdW5kID0gaXN0eWxlc1tpc3R5bGVdWzBdOwoJ CQkJb2JqLnN0eWxlLmNvbG9yID0gaXN0eWxlc1tpc3R5bGVdWzFdOwoJCQkJaWYg KGNvbnRyb2x0eXBlICE9ICdtZW51JykKCQkJCXsKCQkJCQlvYmouc3R5bGUucGFk ZGluZyA9IGlzdHlsZXNbaXN0eWxlXVsyXTsKCQkJCX0KCQkJCW9iai5zdHlsZS5i b3JkZXIgPSBpc3R5bGVzW2lzdHlsZV1bM107CgoJCQkJdmFyIHRkcyA9IGZldGNo X3RhZ3Mob2JqLCAndGQnKTsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGRzLmxl bmd0aDsgaSsrKQoJCQkJewoJCQkJCXN3aXRjaCAodGRzW2ldLmNsYXNzTmFtZSkK CQkJCQl7CgkJCQkJCS8vIHNldCB0aGUgcmlnaHQtYm9yZGVyIGZvciBwb3B1cF9m ZWVkYmFjayBjbGFzcyBlbGVtZW50cwoJCQkJCQljYXNlICdwb3B1cF9mZWVkYmFj ayc6CgkJCQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJSaWdodCA9ICht b2RlID09ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVszXSA6 IGlzdHlsZXNbaXN0eWxlXVszXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJ CQkvLyBzZXQgdGhlIGJvcmRlciBjb2xvdXIgZm9yIHBvcHVwX3BpY2tidXR0b24g Y2xhc3MgZWxlbWVudHMKCQkJCQkJY2FzZSAncG9wdXBfcGlja2J1dHRvbic6CgkJ CQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9IChtb2RlID09 ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVswXSA6IGlzdHls ZXNbaXN0eWxlXVswXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJCQkvLyBz ZXQgdGhlIGxlZnQtcGFkZGluZyBhbmQgbGVmdC1ib3JkZXIgZm9yIGFsdF9waWNr YnV0dG9uIGVsZW1lbnRzCgkJCQkJCWNhc2UgJ2FsdF9waWNrYnV0dG9uJzoKCQkJ CQkJewoJCQkJCQkJaWYgKG9iai5zdGF0ZSkKCQkJCQkJCXsKCQkJCQkJCQl0ZHNb aV0uc3R5bGUucGFkZGluZ0xlZnQgPSBpc3R5bGVzWydwaV9idXR0b25fbm9ybWFs J11bMl07CgkJCQkJCQkJdGRzW2ldLnN0eWxlLmJvcmRlckxlZnQgPSBpc3R5bGVz WydwaV9idXR0b25fbm9ybWFsJ11bM107CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJ CQkJCQl7CgkJCQkJCQkJdGRzW2ldLnN0eWxlLnBhZGRpbmdMZWZ0ID0gaXN0eWxl c1tpc3R5bGVdWzJdOwoJCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJMZWZ0ID0g aXN0eWxlc1tpc3R5bGVdWzNdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJ fQoJCQl9CgkJfQoJfTsKCgkvKioKCSogRm9ybWF0IHRleHQKCSoKCSogQHBhcmFt CWV2ZW50CUV2ZW50IG9iamVjdAoJKiBAcGFyYW0Jc3RyaW5nCUZvcm1hdHRpbmcg Y29tbWFuZAoJKiBAcGFyYW0Jc3RyaW5nCU9wdGlvbmFsIGFyZ3VtZW50IHRvIHRo ZSBmb3JtYXR0aW5nIGNvbW1hbmQKCSoKCSogQHJldHVybglib29sZWFuCgkqLwoJ dGhpcy5mb3JtYXQgPSBmdW5jdGlvbihlLCBjbWQsIGFyZykKCXsKCQllID0gZG9f YW5fZShlKTsKCgkJaWYgKHRoaXMuZGlzYWJsZWQpCgkJewoJCQlyZXR1cm4gZmFs c2U7CgkJfQoKCQlpZiAoY21kICE9ICdyZWRvJykKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCX0K CgkJaWYgKGNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlzd2l0Y2hfZWRpdG9y X21vZGUodGhpcy5lZGl0b3JpZCk7CgkJCXJldHVybjsKCQl9CgkJZWxzZSBpZiAo Y21kLnN1YnN0cigwLCA2KSA9PSAncmVzaXplJykKCQl7CgkJCXRoaXMucmVzaXpl X2VkaXRvcihwYXJzZUludChjbWQuc3Vic3RyKDkpLCAxMCkgKiAocGFyc2VJbnQo Y21kLnN1YnN0cig3LCAxKSwgMTApID09ICcxJyA/IDEgOiAtMSkpOwoJCQlyZXR1 cm47CgkJfQoKCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCWlmIChjbWQuc3Vic3Ry KDAsIDQpID09ICd3cmFwJykKCQl7CgkJCXZhciByZXQgPSB0aGlzLndyYXBfdGFn cyhjbWQuc3Vic3RyKDYpLCAoY21kLnN1YnN0cig0LCAxKSA9PSAnMScgPyB0cnVl IDogZmFsc2UpKTsKCQl9CgkJZWxzZSBpZiAodGhpc1tjbWRdKQoJCXsKCQkJdmFy IHJldCA9IHRoaXNbY21kXShlKTsKCQl9CgkJZWxzZQoJCXsKCQkJdHJ5CgkJCXsK CQkJCXZhciByZXQgPSB0aGlzLmFwcGx5X2Zvcm1hdChjbWQsIGZhbHNlLCAodHlw ZW9mIGFyZyA9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBhcmcpKTsKCQkJfQoJCQlj YXRjaChlKQoJCQl7CgkJCQl0aGlzLmhhbmRsZV9lcnJvcihjbWQsIGUpOwoJCQkJ dmFyIHJldCA9IGZhbHNlOwoJCQl9CgkJfQoKCQlpZiAoY21kICE9ICd1bmRvJykK CQl7CgkJCXRoaXMuaGlzdG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9y X2NvbnRlbnRzKCkpOwoJCX0KCgkJdGhpcy5zZXRfY29udGV4dChjbWQpOwoKCQl0 aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCXJldHVybiByZXQ7Cgl9OwoKCS8qKgoJKiBJ bnNlcnQgSW1hZ2UKCSoKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKiBA cGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgSW1hZ2UgVVJMCgkqCgkqIEByZXR1cm4J Ym9vbGVhbgoJKi8KCXRoaXMuaW5zZXJ0aW1hZ2UgPSBmdW5jdGlvbihlLCBpbWcp Cgl7CgkJaWYgKHR5cGVvZiBpbWcgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQlpbWcg PSB0aGlzLnNob3dfcHJvbXB0KHZicGhyYXNlWydlbnRlcl9pbWFnZV91cmwnXSwg J2h0dHA6Ly8nLCB0cnVlKTsKCQl9CgkJaWYgKGltZyA9IHRoaXMudmVyaWZ5X3By b21wdChpbWcpKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdpbnNl cnRpbWFnZScsIGZhbHNlLCBpbWcpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4g ZmFsc2U7CgkJfQoJfTsKCgkvKioKCSogV3JhcCBUYWdzCgkqCgkqIEBwYXJhbQlz dHJpbmcJVGFnIHRvIHdyYXAKCSogQHBhcmFtCWJvb2xlYW4JVXNlIG9wdGlvbj8K CSogQHBhcmFtCXN0cmluZwkoT3B0aW9uYWwpIHNlbGVjdGVkIHRleHQKCSoKCSog QHJldHVybglib29sZWFuCgkqLwoJdGhpcy53cmFwX3RhZ3MgPSBmdW5jdGlvbih0 YWduYW1lLCB1c2VvcHRpb24sIHNlbGVjdGlvbikKCXsKCQl0YWduYW1lID0gdGFn bmFtZS50b1VwcGVyQ2FzZSgpOwoKCQlzd2l0Y2ggKHRhZ25hbWUpCgkJewoJCQlj YXNlICdDT0RFJzoKCQkJY2FzZSAnSFRNTCc6CgkJCWNhc2UgJ1BIUCc6CgkJCXsK CQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdyZW1vdmVmb3JtYXQnKTsKCQkJfQoJCQli cmVhazsKCQl9CgoJCWlmICh0eXBlb2Ygc2VsZWN0aW9uID09ICd1bmRlZmluZWQn KQoJCXsKCQkJc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCWlm IChzZWxlY3Rpb24gPT09IGZhbHNlKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSAnJzsK CQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGVjdGlvbiA9IG5ldyBTdHJpbmcoc2Vs ZWN0aW9uKTsKCQkJfQoJCX0KCgkJaWYgKHVzZW9wdGlvbiA9PT0gdHJ1ZSkKCQl7 CgkJCXZhciBvcHRpb24gPSB0aGlzLnNob3dfcHJvbXB0KGNvbnN0cnVjdF9waHJh c2UodmJwaHJhc2VbJ2VudGVyX3RhZ19vcHRpb24nXSwgKCdbJyArIHRhZ25hbWUg KyAnXScpKSwgJycsIGZhbHNlKTsKCQkJaWYgKG9wdGlvbiA9IHRoaXMudmVyaWZ5 X3Byb21wdChvcHRpb24pKQoJCQl7CgkJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRh Z25hbWUgKyAnPSInICsgb3B0aW9uICsgJyInICsgJ10nOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHVzZW9w dGlvbiAhPT0gZmFsc2UpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25h bWUgKyAnPSInICsgdXNlb3B0aW9uICsgJyInICsgJ10nOwoJCX0KCQllbHNlCgkJ ewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25hbWUgKyAnXSc7CgkJfQoKCQl2 YXIgY2xvc2V0YWcgPSAnWy8nICsgdGFnbmFtZSArICddJzsKCQl2YXIgdGV4dCA9 IG9wZW50YWcgKyBzZWxlY3Rpb24gKyBjbG9zZXRhZzsKCgkJdGhpcy5pbnNlcnRf dGV4dCh0ZXh0LCBvcGVudGFnLnZCbGVuZ3RoKCksIGNsb3NldGFnLnZCbGVuZ3Ro KCkpOwoKCQlyZXR1cm4gZmFsc2U7Cgl9OwoKCS8qKgoJKiBDaGVjayBTcGVsbGlu ZyAodXNlcyBpZVNwZWxsIGZyb20gd3d3Lmllc3BlbGwuY29tKQoJKgoJKiBFdmVu dHVhbGx5IHdlIGhvcGUgdG8gaW50ZWdyYXRlIFNwZWxsQm91bmQgKGh0dHA6Ly9z cGVsbGJvdW5kLnNvdXJjZWZvcmdlLm5ldCkgZm9yIEdlY2tvLgoJKi8KCXRoaXMu c3BlbGxpbmcgPSBmdW5jdGlvbigpCgl7CgkJaWYgKGlzX2llKQoJCXsKCQkJdHJ5 CgkJCXsKCQkJCS8vIGF0dGVtcHQgdG8gaW5zdGFudGlhdGUgaWVTcGVsbAoJCQkJ ZXZhbCgibmV3IEEiICsgImN0aXYiICsgImVYIiArICJPYiIgKyAiamVjdCgnaWVT cGVsbC4iICsgImllU3BlbGxFeHQiICsgImVuc2lvbicpLkNoZWNrRCIgKyAib2N1 bWVudE5vZGUodGhpcy5zcGVsbG9iaik7Iik7CgkJCX0KCQkJY2F0Y2goZSkKCQkJ ewoJCQkJLy8gYXNrIGlmIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgaWVTcGVsbAoJ CQkJaWYgKGUubnVtYmVyID09IC0yMTQ2ODI3ODU5ICYmIGNvbmZpcm0odmJwaHJh c2VbJ2llc3BlbGxfbm90X2luc3RhbGxlZCddKSkKCQkJCXsKCQkJCQkvLyBvb2gg dGhleSBkby4uLgoJCQkJCXdpbmRvdy5vcGVuKCdodHRwOi8vd3d3Lmllc3BlbGwu Y29tL2Rvd25sb2FkLnBoJyArICdwJyk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBp ZiAoaXNfbW96KQoJCXsKCQkJLy8gYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBTcGVs bEJvdW5kLi4uIHdoZW4gaXQgc3VwcG9ydHMgdGhpcyBiZWhhdmlvdXIKCQl9Cgl9 OwoKCS8qKgoJKiBIYW5kbGUgRXJyb3IKCSoKCSogQHBhcmFtCXN0cmluZwlDb21t YW5kIG5hbWUKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKi8KCXRoaXMu aGFuZGxlX2Vycm9yID0gZnVuY3Rpb24oY21kLCBlKQoJewoJfTsKCgkvKioKCSog U2hvdyBKUyBQcm9tcHQgYW5kIGZpbHRlciByZXN1bHQKCSoKCSogQHBhcmFtCXN0 cmluZwlUZXh0IGZvciB0aGUgZGlhbG9nCgkqIEBwYXJhbQlzdHJpbmcJRGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGRpYWxvZwoJKiBAcGFyYW0Jc3RyaW5nCVdoZXRoZXIg dG8gZm9yY2UgTFRSIChmb3IgVVJMcywgZXRjKQoJKgoJKiBAcmV0dXJuCXN0cmlu ZwoJKi8KCXRoaXMuc2hvd19wcm9tcHQgPSBmdW5jdGlvbihkaWFsb2d0eHQsIGRl ZmF1bHR2YWwsIGZvcmNlbHRyKQoJewoJCWlmIChpc19pZTcpCgkJewoJCQkvLyBy ZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2VlICMyMzA5NykKCQkJdmFyIGJhc2VfdGFn ID0gZmV0Y2hfdGFncyhkb2N1bWVudCwgJ2Jhc2UnKTsKCQkJaWYgKGJhc2VfdGFn ICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCXsKCQkJCXZh ciBtb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdmFyIG1vZGFsX3ByZWZpeCA9ICcnOwoJCQl9CgoJCQl2YXIgcmV0 dXJudmFsdWUgPSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKG1vZGFsX3ByZWZpeCAr ICJjbGllbnRzY3JpcHQvaWVwcm9tcHQuaHRtbD8iLCB7IHZhbHVlOiBkZWZhdWx0 dmFsLCBsYWJlbDogZGlhbG9ndHh0LCBkaXI6IGRvY3VtZW50LmRpciwgdGl0bGU6 IGRvY3VtZW50LnRpdGxlLCBmb3JjZWx0cjogKHR5cGVvZihmb3JjZWx0cikgIT0g InVuZGVmaW5lZCIgPyBmb3JjZWx0ciA6IGZhbHNlKSB9LCAiZGlhbG9nV2lkdGg6 MzIwcHg7IGRpYWxvZ0hlaWdodDoxNTBweDsgZGlhbG9nVG9wOiIgKyAocGFyc2VJ bnQod2luZG93LnNjcmVlblRvcCkgKyBwYXJzZUludCh3aW5kb3cuZXZlbnQuY2xp ZW50WSkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgLSAxMDAp ICsgInB4OyBkaWFsb2dMZWZ0OiIgKyAocGFyc2VJbnQod2luZG93LnNjcmVlbkxl ZnQpICsgcGFyc2VJbnQod2luZG93LmV2ZW50LmNsaWVudFgpICsgcGFyc2VJbnQo ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSAtIDE2MCkgKyAicHg7IHJlc2l6YWJs ZTogTm87Iik7CgkJfQoJCWVsc2UKCQl7CgkJCXZhciByZXR1cm52YWx1ZSA9IHBy b21wdChkaWFsb2d0eHQsIGRlZmF1bHR2YWwpOwoJCX0KCgkJLy8gZGVhbCB3aXRo IHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlCgkJaWYgKHR5cGVvZihyZXR1cm52YWx1 ZSkgPT0gInVuZGVmaW5lZCIpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVs c2UgaWYgKHJldHVybnZhbHVlID09IGZhbHNlIHx8IHJldHVybnZhbHVlID09IG51 bGwpCgkJewoJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJfQoJCWVsc2UKCQl7CgkJ CXJldHVybiBQSFAudHJpbShuZXcgU3RyaW5nKHJldHVybnZhbHVlKSk7CgkJfQoJ fTsKCgkvKioKCSogQ2xvc2VzIGFuIG9wZW4gcHJvbXB0IChlbXVsYXRvcikgd2lu ZG93IG9wZW5lZCBieSBzaG93X3Byb21wdCgpIHVuZGVyIElFNysKCSovCgl0aGlz LmNsb3NlX3Byb21wdCA9IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5wcm9tcHRf cG9wdXApCgkJewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidkJfRWRpdG9y XzAwMSIpLnJlbW92ZUNoaWxkKHRoaXMucHJvbXB0X3BvcHVwKTsKCQkJdGhpcy5w cm9tcHRfcG9wdXAgPSBudWxsOwoJCX0KCgkJdGhpcy5jaGVja19mb2N1cygpOwoJ fQoKCS8qKgoJKiBWZXJpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGphdmFzY3Jp cHQgcHJvbXB0CgkqCgkqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGJlIGNoZWNr ZWQKCSoKCSogQHJldHVybgltaXhlZAlGYWxzZSBvbiBmYWlsLCBzdHJpbmcgb24g c3VjY2VzcwoJKi8KCXRoaXMudmVyaWZ5X3Byb21wdCA9IGZ1bmN0aW9uKHN0cikK CXsKCQlzd2l0Y2goc3RyKQoJCXsKCQkJY2FzZSAnaHR0cDovLyc6CgkJCWNhc2Ug J251bGwnOgoJCQljYXNlICd1bmRlZmluZWQnOgoJCQljYXNlICdmYWxzZSc6CgkJ CWNhc2UgJyc6CgkJCWNhc2UgbnVsbDoKCQkJY2FzZSBmYWxzZToKCQkJCXJldHVy biBmYWxzZTsKCgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gc3RyOwoJCX0KCX07CgoJ LyoqCgkqIE9wZW4gU21pbGllIFdpbmRvdwoJKgoJKiBAcGFyYW0JaW50ZWdlcglX aW5kb3cgd2lkdGgKCSogQHBhcmFtCWludGVnZXIJV2luZG93IGhlaWdodAoJKi8K CXRoaXMub3Blbl9zbWlsaWVfd2luZG93ID0gZnVuY3Rpb24od2lkdGgsIGhlaWdo dCkKCXsKCQlzbWlsaWVfd2luZG93ID0gb3BlbldpbmRvdygnbWlzYy5waHA/JyAr IFNFU1NJT05VUkwgKyAnZG89Z2V0c21pbGllcyZlZGl0b3JpZD0nICsgdGhpcy5l ZGl0b3JpZCwgd2lkdGgsIGhlaWdodCwgJ3NtaWxpZV93aW5kb3cnKTsKCgkJd2lu ZG93Lm9udW5sb2FkID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWV3aW5kb3dfb251bmxvYWQ7Cgl9CgoJLyoqCgkqIFJlc2l6ZSBFZGl0b3IK CSoKCSogQHBhcmFtCWludGVnZXIJTnVtYmVyIG9mIHBpeGVscyBieSB3aGljaCB0 byByZXNpemUgdGhlIGVkaXRvcgoJKi8KCXRoaXMucmVzaXplX2VkaXRvciA9IGZ1 bmN0aW9uKGNoYW5nZSkKCXsKCQl2YXIgbmV3aGVpZ2h0ID0gcGFyc2VJbnQodGhp cy5lZGl0Ym94LnN0eWxlLmhlaWdodCwgMTApICsgY2hhbmdlOwoKCQlpZiAobmV3 aGVpZ2h0ID49IDEwMCkKCQl7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQg PSBuZXdoZWlnaHQgKyAncHgnOwoKCQkJLy8gcmVtZW1iZXIgdGhlIHNldHRpbmcg Zm9yIG5leHQgdGltZQoJCQlpZiAoY2hhbmdlICUgOTkgIT0gMCkKCQkJewoJCQkJ c2V0X2Nvb2tpZSgnZWRpdG9yX2hlaWdodCcsIG5ld2hlaWdodCk7CgkJCX0KCQl9 Cgl9OwoKCS8qKgoJKiBEZXN0cm95IFBvcHVwCgkqLwoJdGhpcy5kZXN0cm95X3Bv cHVwID0gZnVuY3Rpb24ocG9wdXBuYW1lKQoJewoJCXRoaXMucG9wdXBzW3BvcHVw bmFtZV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHVwc1twb3B1cG5h bWVdKTsKCQl0aGlzLnBvcHVwc1twb3B1cG5hbWVdID0gbnVsbDsKCX0KCgkvKioK CSogRGVzdHJveSBFZGl0b3IKCSovCgl0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigp Cgl7CgkJLy8gcmVzZXQgYWxsIGJ1dHRvbnMgdG8gZGVmYXVsdCBzdGF0ZQoJCWZv ciAodmFyIGkgaW4gdGhpcy5idXR0b25zKQoJCXsKCQkJdGhpcy5zZXRfY29udHJv bF9zdHlsZSh0aGlzLmJ1dHRvbnNbaV0sICdidXR0b24nLCAnbm9ybWFsJyk7CgkJ fQoKCQkvLyBkZXN0cm95IHBvcHVwcwoJCWZvciAodmFyIG1lbnUgaW4gdGhpcy5w b3B1cHMpCgkJewoJCQl0aGlzLmRlc3Ryb3lfcG9wdXAobWVudSk7CgkJfQoKCQlp ZiAodGhpcy5mb250b3B0aW9ucykKCQl7CgkJCWZvciAodmFyIGkgaW4gdGhpcy5m b250b3B0aW9ucykKCQkJewoJCQkJaWYgKGkgIT0gJycpCgkJCQl7CgkJCQkJdGhp cy5mb250b3B0aW9uc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZm9u dG9wdGlvbnNbaV0pOwoJCQkJfQoJCQl9CgkJCXRoaXMuZm9udG9wdGlvbnNbJydd LnN0eWxlLmRpc3BsYXkgPSAnJzsKCQl9CgoJCWlmICh0aGlzLnNpemVvcHRpb25z KQoJCXsKCQkJZm9yICh2YXIgaSBpbiB0aGlzLnNpemVvcHRpb25zKQoJCQl7CgkJ CQlpZiAoaSAhPSAnJykKCQkJCXsKCQkJCQl0aGlzLnNpemVvcHRpb25zW2ldLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zaXplb3B0aW9uc1tpXSk7CgkJCQl9 CgkJCX0KCQkJdGhpcy5zaXplb3B0aW9uc1snJ10uc3R5bGUuZGlzcGxheSA9ICcn OwoJCX0KCX07CgoJLyoqCgkqIENvbGxhcHNlIHRoZSBjdXJyZW50IHNlbGVjdGlv biBhbmQgcGxhY2UgdGhlIGN1cnNvciB3aGVyZSB0aGUgZW5kIG9mIHRoZQoJKiBz ZWxlY3Rpb24gd2FzLgoJKi8KCXRoaXMuY29sbGFwc2Vfc2VsZWN0aW9uX2VuZCA9 IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5lZGl0ZG9jLnNlbGVjdGlvbikKCQl7 CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UoKTsKCQkJLy8gZml4IGZvciBob3JyaWJseSBjb25mdXNpbmcgSUUgYnVnIHdo ZXJlIGl0IHJhbmRvbWx5IG1ha2VzIHRleHQgd2hpdGUgZm9yIGZ1bnNpZXMKCQkJ Ly8gc2VlIDMuNSBidWcgIzI3OQoJCQlldmFsKCJyYW5nZS4iICsgIm1vdmUiICsg IignY2hhcmFjdGVyJywgLTEpOyIpOwoJCQlyYW5nZS5jb2xsYXBzZShmYWxzZSk7 CgkJCXJhbmdlLnNlbGVjdCgpOwoJCX0KCQllbHNlIGlmIChkb2N1bWVudC5zZWxl Y3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKQoJCXsKCQkJ dmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CgkJ CXJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKCQkJcmFuZ2Uuc2VsZWN0KCk7CgkJfQoJ CWVsc2UgaWYgKHR5cGVvZih0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICE9 ICd1bmRlZmluZWQnKQoJCXsKCQkJdmFyIG9wbiA9IHRoaXMuZWRpdGRvYy5zZWxl Y3Rpb25TdGFydCArIDA7CgkJCXZhciBzZWxfdGV4dCA9IHRoaXMuZWRpdGRvYy52 YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0LCB0aGlzLmVk aXRkb2Muc2VsZWN0aW9uRW5kIC0gdGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0 KTsKCgkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCA9IHRoaXMuZWRpdGRv Yy5zZWxlY3Rpb25TdGFydCArIHNlbF90ZXh0LnZCbGVuZ3RoKCk7CgkJfQoJCWVs c2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pCgkJewoJCQkvLyBkb24ndCB0aGlu ayBJIGNhbiBkbyBhbnl0aGluZyBmb3IgdGhpcwoJCX0KCX0KCgkvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoJLy8gV1lTSVdZRyBlZGl0b3IKCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CglpZiAodGhpcy53eXNpd3lnX21v ZGUpCgl7CgkJLyoqCgkJKiBEaXNhYmxlcyB0aGUgZWRpdG9yCgkJKgoJCSogQHBh cmFtCXN0cmluZwlJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuZGlzYWJsZV9lZGl0b3IgPSBmdW5jdGlvbih0ZXh0KQoJCXsKCQkJaWYgKCF0 aGlzLmRpc2FibGVkKQoJCQl7CgkJCQl0aGlzLmRpc2FibGVkID0gdHJ1ZTsKCgkJ CQl2YXIgaGlkZXIgPSBmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfaGlk ZXInKTsKCQkJCWlmIChoaWRlcikKCQkJCXsKCQkJCQloaWRlci5wYXJlbnROb2Rl LnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJCX0KCgkJCQl2YXIgZGl2ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQlkaXYuaWQgPSB0aGlzLmVkaXRv cmlkICsgJ19oaWRlcic7CgkJCQlkaXYuY2xhc3NOYW1lID0gJ3d5c2l3eWcnOwoJ CQkJZGl2LnN0eWxlLmJvcmRlciA9ICcycHggaW5zZXQnOwoJCQkJZGl2LnN0eWxl LndpZHRoID0gdGhpcy5lZGl0Ym94LnN0eWxlLndpZHRoOwoJCQkJZGl2LnN0eWxl LmhlaWdodCA9IHRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQ7CgkJCQl2YXIgY2hp bGRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCWNoaWxk ZGl2LnN0eWxlLm1hcmdpbiA9ICc4cHgnOwoJCQkJY2hpbGRkaXYuaW5uZXJIVE1M ID0gdGV4dDsKCQkJCWRpdi5hcHBlbmRDaGlsZChjaGlsZGRpdik7CgkJCQl0aGlz LmVkaXRib3gucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkaXYpOwoKCQkJCS8vIGFu ZCBoaWRlIHRoZSByZWFsIGVkaXRvcgoJCQkJdGhpcy5lZGl0Ym94LnN0eWxlLndp ZHRoID0gJzBweCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuaGVpZ2h0ID0gJzBw eCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuYm9yZGVyID0gJ25vbmUnOwoJCQl9 CgkJfTsKCgkJLyoqCgkJKiBFbmFibGVzIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFy YW0Jc3RyaW5nCUluaXRpYWwgdGV4dCBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhp cy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlmICh0eXBl b2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5zZXRfZWRpdG9y X2NvbnRlbnRzKHRleHQpOwoJCQl9CgoJCQl2YXIgaGlkZXIgPSBmZXRjaF9vYmpl Y3QodGhpcy5lZGl0b3JpZCArICdfaGlkZXInKTsKCQkJaWYgKGhpZGVyKQoJCQl7 CgkJCQloaWRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJfQoK CQkJdGhpcy5kaXNhYmxlZCA9IGZhbHNlOwoJCX07CgoJCS8qKgoJCSogUHV0cyB0 aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFyYW0Jc3RyaW5nCVRl eHQgdG8gd3JpdGUKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0g ZnVuY3Rpb24odGV4dCwgZG9pbml0KQoJCXsKCQkJaWYgKHRleHQgPT0gJycpCgkJ CXsKCQkJCWlmIChpc19pZSkKCQkJCXsKCQkJCQl0ZXh0ID0gJzxwPjwvcD4nOwoJ CQkJfQoJCQkJZWxzZSBpZiAoaXNfbW96KQoJCQkJewoJCQkJCXRleHQgPSAnPGJy IC8+JzsKCQkJCX0KCQkJfQoJCQlpZiAodGhpcy5lZGl0ZG9jICYmIHRoaXMuZWRp dGRvYy5pbml0aWFsaXplZCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuaW5u ZXJIVE1MID0gdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIEZvcmNlIEZp cmVmb3ggMS4wIHRvIHJ1biBpdCBoZXJlIGFuZCBGaXJlZm94IDEuNSsgbGF0ZXIg b24sIHNlZSBCdWcgIzIyNjYxCgkJCQlpZiAoZG9pbml0ICYmIHR5cGVvZiBBcnJh eS5wcm90b3R5cGUubWFwID09ICd1bmRlZmluZWQnKSB7IHRoaXMuZWRpdGRvYy5k ZXNpZ25Nb2RlID0gJ29uJzsgfQoJCQkJdGhpcy5lZGl0ZG9jID0gdGhpcy5lZGl0 d2luLmRvY3VtZW50OyAvLyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v d29ya3Nob3AvYXV0aG9yL2RodG1sL292ZXJ2aWV3L1hwU3AyQ29tcGF0LmFzcCNj YWNoaW5nCgkJCQl0aGlzLmVkaXRkb2Mub3BlbigndGV4dC9odG1sJywgJ3JlcGxh Y2UnKTsKCQkJCXRoaXMuZWRpdGRvYy53cml0ZSh0ZXh0KTsKCQkJCXRoaXMuZWRp dGRvYy5jbG9zZSgpOwoJCQkJaWYgKGRvaW5pdCkKCQkJCXsKCQkJCQl0aGlzLmVk aXRkb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSB0cnVlOwoJCQkJCWlmICh0eXBl b2YgQXJyYXkucHJvdG90eXBlLm1hcCAhPSAndW5kZWZpbmVkJykKCQkJCQl7CgkJ CQkJCXRoaXMuZWRpdGRvYy5kZXNpZ25Nb2RlID0gJ29uJzsKCQkJCQl9CgkJCQl9 CgkJCQl0aGlzLmVkaXRkb2MuYm9keS5zcGVsbGNoZWNrID0gdHJ1ZTsKCgkJCQl0 aGlzLmVkaXRkb2MuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQkJCXRoaXMuc2V0X2Vk aXRvcl9zdHlsZSgpOwoJCQl9CgoJCQl0aGlzLnNldF9kaXJlY3Rpb24oKTsKCQl9 CgoJCS8qKgoJCSogUHV0IHRoZSB0ZXh0IGludG8gdGhlIGVkaXRvcgoJCSovCgkJ dGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rpb24oaW5pdGlhbF90ZXh0 KQoJCXsKCQkJaWYgKGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19pZnJh bWUnKSkKCQkJewoJCQkJdGhpcy5lZGl0Ym94ID0gZmV0Y2hfb2JqZWN0KHRoaXMu ZWRpdG9yaWQgKyAnX2lmcmFtZScpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdmFy IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoJCQkJ aWYgKGlzX2llICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6 JykKCQkJCXsKCQkJCQkvLyB3b3JrYXJvdW5kIGZvciBJRSB0aHJvd2luZyBpbnNl Y3VyZSBwYWdlIHdhcm5pbmdzCgkJCQkJaWZyYW1lLnNyYyA9ICdjbGllbnRzY3Jp cHQvaW5kZXguaHRtbCc7CgkJCQl9CgkJCQl0aGlzLmVkaXRib3ggPSB0aGlzLnRl eHRvYmoucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpZnJhbWUpOwoJCQkJdGhpcy5l ZGl0Ym94LmlkID0gdGhpcy5lZGl0b3JpZCArICdfaWZyYW1lJzsKCQkJCXRoaXMu ZWRpdGJveC50YWJJbmRleCA9IDE7CgkJCX0KCgkJCWlmICghaXNfaWUpCgkJCXsK CQkJCXRoaXMuZWRpdGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGluc2V0JzsKCQkJ fQoJCQl0aGlzLmVkaXRib3guc3R5bGUud2lkdGggPSB0aGlzLnRleHRvYmouc3R5 bGUud2lkdGg7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQgPSB0aGlzLnRl eHRvYmouc3R5bGUuaGVpZ2h0OwoJCQl0aGlzLnRleHRvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMuZWRpdGJveC5jb250 ZW50V2luZG93OwoJCQl0aGlzLmVkaXRkb2MgPSB0aGlzLmVkaXR3aW4uZG9jdW1l bnQ7CgoJCQl0aGlzLndyaXRlX2VkaXRvcl9jb250ZW50cygodHlwZW9mIGluaXRp YWxfdGV4dCA9PSAndW5kZWZpbmVkJyA/ICB0aGlzLnRleHRvYmoudmFsdWUgOiBp bml0aWFsX3RleHQpLCB0cnVlKTsKCgkJCWlmICh0aGlzLmVkaXRkb2MuZGlyID09 ICdydGwnKQoJCQl7CgkJCS8vCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgnanVz dGlmeXJpZ2h0JywgZmFsc2UsIG51bGwpOwoJCQl9CgkJCXRoaXMuc3BlbGxvYmog PSB0aGlzLmVkaXRkb2MuYm9keTsKCgkJCXRoaXMuZWRpdGRvYy5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCXRoaXMuZWRpdHdpbi5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJfTsKCgkJLyoqCgkJKiBTZXRzIHRoZSB0ZXh0IGRpcmVjdGlv biBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhpcy5zZXRfZGlyZWN0aW9uID0gZnVu Y3Rpb24oKQoJCXsKCQkJdGhpcy5lZGl0ZG9jLmRpciA9IHRoaXMudGV4dG9iai5k aXI7CgkJfTsKCgkJLyoqCgkJKiBTZXQgdGhlIENTUyBzdHlsZSBvZiB0aGUgZWRp dG9yCgkJKi8KCQl0aGlzLnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJ ewoJCQlpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxsZXRpbl9jc3MnXSkK CQkJewoJCQkJdmFyIHJ1bGVzID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxs ZXRpbl9jc3MnXS5ydWxlczsKCQkJCXZhciBuZXdjc3MgPSAnJzsKCgkJCQlmb3Ig KHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKQoJCQkJewoJCQkJCWlm IChydWxlc1tpXS5zZWxlY3RvclRleHQuaW5kZXhPZignLnd5c2l3eWcnKSA+PSAw IHx8IHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnQk9EWScpCgkJCQkJewoJCQkJ CQluZXdjc3MgKz0gJyAnICsgcnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgJyB7ICcg KyBydWxlc1tpXS5zdHlsZS5jc3NUZXh0ICsgJyB9ICc7CgkJCQkJfQoJCQkJfQoK CQkJCWlmICghbmV3Y3NzKQoJCQkJewoJCQkJCS8vIGZhbGwgYmFjayBpbiBjYXNl IHRoZSBuZXcgbWV0aG9kIGRvZXNuJ3Qgd29yawoJCQkJCW5ld2NzcyA9IGRvY3Vt ZW50LnN0eWxlU2hlZXRzWyd2YnVsbGV0aW5fY3NzJ10uY3NzVGV4dDsKCQkJCX0K CgkJCQl0aGlzLmVkaXRkb2MuY3JlYXRlU3R5bGVTaGVldCgpLmNzc1RleHQgPSBu ZXdjc3MgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQl0aGlzLmVkaXRkb2Mu Ym9keS5jbGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5zZXRfZWRpdG9yX2Z1 bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuZWRpdGRvYy5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25t b3VzZXVwOwoJCQl0aGlzLmVkaXRkb2Mub25rZXl1cCA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwOwoKCQkJaWYgKHRoaXMu ZWRpdGRvYy5hdHRhY2hFdmVudCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHku YXR0YWNoRXZlbnQoIm9ucmVzaXplc3RhcnQiLCB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCk7CgkJCX0KCgkJCXRo aXMuZWRpdHdpbi5vbmZvY3VzID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5lZGl0d2luX29uZm9jdXM7CgkJCXRoaXMuZWRpdHdpbi5vbmJsdXIgPSB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXR3aW5fb25ibHVyOwoJ CX07CgoJCS8qKgoJCSogU2V0IENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbnRl eHQgPSBmdW5jdGlvbihjbWQpCgkJewoJCQlmb3IgKHZhciBpIGluIGNvbnRleHRj b250cm9scykKCQkJewoJCQkJdmFyIG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmVk aXRvcmlkICsgJ19jbWRfJyArIGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQlpZiAo b2JqICE9IG51bGwpCgkJCQl7CgkJCQkJdmFyIHN0YXRlID0gdGhpcy5lZGl0ZG9j LnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQkJLy9h bGVydCAoY29udGV4dGNvbnRyb2xzW2ldICsgJyAnICsgc3RhdGUgKyAnICcgKyBv Ymouc3RhdGUpOwoJCQkJCWlmIChvYmouc3RhdGUgIT0gc3RhdGUpCgkJCQkJewoJ CQkJCQlvYmouc3RhdGUgPSBzdGF0ZTsKCQkJCQkJdGhpcy5idXR0b25fY29udGV4 dChvYmosIChvYmouY21kID09IGNtZCA/ICdtb3VzZW92ZXInIDogJ21vdXNlb3V0 JykpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdGhpcy5zZXRfZm9udF9jb250ZXh0 KCk7CgoJCQl0aGlzLnNldF9zaXplX2NvbnRleHQoKTsKCgkJCXRoaXMuc2V0X2Nv bG9yX2NvbnRleHQoKTsKCQl9OwoKCQkvKioKCQkqIFNldCBGb250IENvbnRleHQK CQkqLwoJCXRoaXMuc2V0X2ZvbnRfY29udGV4dCA9IGZ1bmN0aW9uKGZvbnRzdGF0 ZSkKCQl7CgkJCWlmICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10pCgkJCXsKCQkJ CWlmICh0eXBlb2YgZm9udHN0YXRlID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJ CWZvbnRzdGF0ZSA9IHRoaXMuZWRpdGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9u dG5hbWUnKTsKCQkJCX0KCQkJCXN3aXRjaCAoZm9udHN0YXRlKQoJCQkJewoJCQkJ CWNhc2UgJyc6CgkJCQkJewoJCQkJCQlpZiAoIWlzX2llICYmIHdpbmRvdy5nZXRD b21wdXRlZFN0eWxlKQoJCQkJCQl7CgkJCQkJCQlmb250c3RhdGUgPSB0aGlzLmVk aXRkb2MuYm9keS5zdHlsZS5mb250RmFtaWx5OwoJCQkJCQl9CgkJCQkJfQoJCQkJ CWJyZWFrOwoKCQkJCQljYXNlIG51bGw6CgkJCQkJewoJCQkJCQlmb250c3RhdGUg PSAnJzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJaWYgKGZvbnRzdGF0 ZSAhPSB0aGlzLmZvbnRzdGF0ZSkKCQkJCXsKCQkJCQl0aGlzLmZvbnRzdGF0ZSA9 IGZvbnRzdGF0ZTsKCQkJCQl2YXIgdGhpbmd5ID0gUEhQLnVjZmlyc3QodGhpcy5m b250c3RhdGUsICcsJyk7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7 CgkJCQkJCWZvciAodmFyIGkgaW4gdGhpcy5mb250b3B0aW9ucykKCQkJCQkJewoJ CQkJCQkJdGhpcy5mb250b3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0g dGhpbmd5ID8gJycgOiAnbm9uZScpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UK CQkJCQl7CgkJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zWydm b250bmFtZSddLm9wdGlvbnMubGVuZ3RoOyBpKyspCgkJCQkJCXsKCQkJCQkJCWlm ICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSB0 aGluZ3kpCgkJCQkJCQl7CgkJCQkJCQkJdGhpcy5idXR0b25zWydmb250bmFtZSdd LnNlbGVjdGVkSW5kZXggPSBpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJ CQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfTsKCgkJLyoqCgkJKiBTZXQgU2l6ZSBD b250ZXh0CgkJKi8KCQl0aGlzLnNldF9zaXplX2NvbnRleHQgPSBmdW5jdGlvbihz aXplc3RhdGUpCgkJewoJCQlpZiAodGhpcy5idXR0b25zWydmb250c2l6ZSddKQoJ CQl7CgkJCQlpZiAodHlwZW9mIHNpemVzdGF0ZSA9PSAndW5kZWZpbmVkJykKCQkJ CXsKCQkJCQlzaXplc3RhdGUgPSB0aGlzLmVkaXRkb2MucXVlcnlDb21tYW5kVmFs dWUoJ2ZvbnRzaXplJyk7CgkJCQl9CgkJCQlzd2l0Y2ggKHNpemVzdGF0ZSkKCQkJ CXsKCQkJCQljYXNlIG51bGw6CgkJCQkJY2FzZSAnJzoKCQkJCQl7CgkJCQkJCWlm IChpc19tb3opCgkJCQkJCXsKCQkJCQkJCXNpemVzdGF0ZSA9IHRoaXMudHJhbnNs YXRlX2ZvbnRzaXplKHRoaXMuZWRpdGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplKTsK CQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChzaXplc3Rh dGUgIT0gdGhpcy5zaXplc3RhdGUpCgkJCQl7CgkJCQkJdGhpcy5zaXplc3RhdGUg PSBzaXplc3RhdGU7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7CgkJ CQkJCWZvciAodmFyIGkgaW4gdGhpcy5zaXplb3B0aW9ucykKCQkJCQkJewoJCQkJ CQkJdGhpcy5zaXplb3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0gdGhp cy5zaXplc3RhdGUgPyAnJyA6ICdub25lJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJ ZWxzZQoJCQkJCXsKCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1dHRv bnNbJ2ZvbnRzaXplJ10ub3B0aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJ CQkJaWYgKHRoaXMuYnV0dG9uc1snZm9udHNpemUnXS5vcHRpb25zW2ldLnZhbHVl ID09IHRoaXMuc2l6ZXN0YXRlKQoJCQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9u c1snZm9udHNpemUnXS5zZWxlY3RlZEluZGV4ID0gaTsKCQkJCQkJCQlicmVhazsK CQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX07CgoJCS8qKgoJ CSogU2V0IENvbG9yIENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbG9yX2NvbnRl eHQgPSBmdW5jdGlvbihjb2xvcnN0YXRlKQoJCXsKCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10pCgkJCXsKCQkJCWlmICh0eXBlb2YgY29sb3JzdGF0ZSA9 PSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQljb2xvcnN0YXRlID0gdGhpcy5lZGl0 ZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JlY29sb3InKTsKCQkJCX0KCQkJCWlm IChjb2xvcnN0YXRlICE9IHRoaXMuY29sb3JzdGF0ZSkKCQkJCXsKCQkJCQlpZiAo dGhpcy5wb3B1cG1vZGUpCgkJCQkJewoJCQkJCQl2YXIgb2JqID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yXycgKyB0aGlzLnRyYW5zbGF0ZV9j b2xvcl9jb21tYW5kdmFsdWUodGhpcy5jb2xvcnN0YXRlKSk7CgkJCQkJCWlmIChv YmogIT0gbnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gZmFsc2U7CgkJ CQkJCQl0aGlzLmJ1dHRvbl9jb250ZXh0KG9iaiwgJ21vdXNlb3V0JywgJ21lbnUn KTsKCQkJCQkJfQoKCQkJCQkJdGhpcy5jb2xvcnN0YXRlID0gY29sb3JzdGF0ZTsK CgkJCQkJCWVsbWlkID0gdGhpcy5lZGl0b3JpZCArICdfY29sb3JfJyArIHRoaXMu dHJhbnNsYXRlX2NvbG9yX2NvbW1hbmR2YWx1ZShjb2xvcnN0YXRlKTsKCQkJCQkJ dmFyIG9iaiA9IGZldGNoX29iamVjdChlbG1pZCk7CgkJCQkJCWlmIChvYmogIT0g bnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gdHJ1ZTsKCQkJCQkJCXRo aXMuYnV0dG9uX2NvbnRleHQob2JqLCAnbW91c2VvdXQnLCAnbWVudScpOwoJCQkJ CQl9CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXRoaXMuY29sb3JzdGF0 ZSA9IGNvbG9yc3RhdGU7CgoJCQkJCQljb2xvcnN0YXRlID0gdGhpcy50cmFuc2xh dGVfY29sb3JfY29tbWFuZHZhbHVlKHRoaXMuY29sb3JzdGF0ZSk7CgoJCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10ub3B0 aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSBjb2xvcnN0YXRlKQoJ CQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10uc2VsZWN0 ZWRJbmRleCA9IGk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ CQl9CgkJCQl9CgkJCX0KCQl9OwoKCQkvKioKCQkqIEZ1bmN0aW9uIHRvIHRyYW5z bGF0ZSB0aGUgb3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xv cicpIGludG8gc29tZXRoaW5nIHVzZWZ1bAoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJ T3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xvcicpCgkJKgoJ CSogQHJldHVybglzdHJpbmcKCQkqLwoJCXRoaXMudHJhbnNsYXRlX2NvbG9yX2Nv bW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQl7CgkJCXJldHVybiB0 aGlzLnRyYW5zbGF0ZV9zaWxseV9oZXgoKGZvcmVjb2xvciAmIDB4RkYpLnRvU3Ry aW5nKDE2KSwgKChmb3JlY29sb3IgPj4gOCkgJiAweEZGKS50b1N0cmluZygxNiks ICgoZm9yZWNvbG9yID4+IDE2KSAmIDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJfTsK CgkJLyoqCgkJKiBGdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBoZXggbGlrZSBGIEFC IDkgdG8gIzBGQUIwOSBhbmQgdGhlbiB0byBjb2xvcm9wdGlvbnNbJyMwRkFCMDkn XQoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJUmVkIHZhbHVlCgkJKiBAcGFyYW0Jc3Ry aW5nCUdyZWVuIHZhbHVlCgkJKiBAcGFyYW0Jc3RyaW5nCUJsdWUgdmFsdWUKCQkq CgkJKiBAcmV0dXJuCXN0cmluZwlPcHRpb24gZnJvbSBjb2xvcm9wdGlvbnMgYXJy YXkKCQkqLwoJCXRoaXMudHJhbnNsYXRlX3NpbGx5X2hleCA9IGZ1bmN0aW9uKHIs IGcsIGIpCgkJewoJCQlyZXR1cm4gY29sb3JvcHRpb25zWycjJyArIChQSFAuc3Ry X3BhZChyLCAyLCAwKSArIFBIUC5zdHJfcGFkKGcsIDIsIDApICsgUEhQLnN0cl9w YWQoYiwgMiwgMCkpLnRvVXBwZXJDYXNlKCldOwoJCX07CgoJCS8qKgoJCSogQXBw bHkgRm9ybWF0dGluZwoJCSovCgkJdGhpcy5hcHBseV9mb3JtYXQgPSBmdW5jdGlv bihjbWQsIGRpYWxvZywgYXJndW1lbnQpCgkJewoJCQl0aGlzLmVkaXRkb2MuZXhl Y0NvbW1hbmQoY21kLCAodHlwZW9mIGRpYWxvZyA9PSAndW5kZWZpbmVkJyA/IGZh bHNlIDogZGlhbG9nKSwgKHR5cGVvZiBhcmd1bWVudCA9PSAndW5kZWZpbmVkJyA/ IHRydWUgOiBhcmd1bWVudCkpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCgkJLyoq CgkJKiBJbnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rp b24oZSwgdXJsKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdjcmVh dGVsaW5rJywgaXNfaWUsICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnID8gdHJ1 ZSA6IHVybCkpOwoJCX07CgoJCS8qKgoJCSogSW5zZXJ0IEVtYWlsIExpbmsKCQkq LwoJCXRoaXMuZW1haWwgPSBmdW5jdGlvbihlLCBlbWFpbCkKCQl7CgkJCWlmICh0 eXBlb2YgZW1haWwgPT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWVtYWlsID0gdGhp cy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAnJywg dHJ1ZSk7CgkJCX0KCgkJCWVtYWlsID0gdGhpcy52ZXJpZnlfcHJvbXB0KGVtYWls KTsKCgkJCWlmIChlbWFpbCA9PT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiB0aGlz LmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl2 YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCQlyZXR1cm4g dGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0ibWFpbHRvOicgKyBlbWFpbCArICci PicgKyAoc2VsZWN0aW9uID8gc2VsZWN0aW9uIDogZW1haWwpICsgJzwvYT4nLCAo c2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlKSk7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluc2VydCBTbWlsaWUKCQkqLwoJCXRoaXMuaW5zZXJ0X3NtaWxpZSA9IGZ1bmN0 aW9uKGUsIHNtaWxpZXRleHQsIHNtaWxpZXBhdGgsIHNtaWxpZWlkKQoJCXsKCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQo JzxpbWcgc3JjPSInICsgc21pbGllcGF0aCArICciIGJvcmRlcj0iMCIgYWx0PSIw IiBzbWlsaWVpZD0iJyArIHNtaWxpZWlkICsgJyIgLz4nLCBmYWxzZSk7CgkJfTsK CgkJLyoqCgkJKiBHZXQgRWRpdG9yIENvbnRlbnRzCgkJKi8KCQl0aGlzLmdldF9l ZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbigpCgkJewoJCQlyZXR1cm4gdGhpcy5l ZGl0ZG9jLmJvZHkuaW5uZXJIVE1MOwoJCX07CgoJCS8qKgoJCSogR2V0IFNlbGVj dGVkIFRleHQKCQkqLwoJCXRoaXMuZ2V0X3NlbGVjdGlvbiA9IGZ1bmN0aW9uKCkK CQl7CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRl UmFuZ2UoKTsKCQkJaWYgKHJhbmdlLmh0bWxUZXh0ICYmIHJhbmdlLnRleHQpCgkJ CXsKCQkJCXJldHVybiByYW5nZS5odG1sVGV4dDsKCQkJfQoJCQllbHNlCgkJCXsK CQkJCXZhciBkb19ub3Rfc3RlYWxfdGhpc19jb2RlX2h0bWwgPSAnJzsKCQkJCWZv ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJ ZG9fbm90X3N0ZWFsX3RoaXNfY29kZV9odG1sICs9IHJhbmdlLml0ZW0oaSkub3V0 ZXJIVE1MOwoJCQkJfQoJCQkJcmV0dXJuIGRvX25vdF9zdGVhbF90aGlzX2NvZGVf aHRtbDsKCQkJfQoJCX07CgoJCS8qKgoJCSogUGFzdGUgSFRNTAoJCSovCgkJdGhp cy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHRleHQsIG1vdmVzdGFydCwgbW92ZWVu ZCkKCQl7CgkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCWlmICh0eXBlb2YodGhp cy5lZGl0ZG9jLnNlbGVjdGlvbikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0 ZG9jLnNlbGVjdGlvbi50eXBlICE9ICdUZXh0JyAmJiB0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uLnR5cGUgIT0gJ05vbmUnKQoJCQl7CgkJCQltb3Zlc3RhcnQgPSBmYWxz ZTsKCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY2xlYXIoKTsKCQkJfQoKCQkJ dmFyIHNlbCA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJc2VsLnBhc3RlSFRNTCh0ZXh0KTsKCgkJCWlmICh0ZXh0LmluZGV4T2YoJ1xu JykgPT0gLTEpCgkJCXsKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJ ewoJCQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBt b3Zlc3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJc2VsLm1vdmVTdGFy dCgnY2hhcmFjdGVyJywgLXRleHQudkJsZW5ndGgoKSArbW92ZXN0YXJ0KTsKCQkJ CQlzZWwubW92ZUVuZCgnY2hhcmFjdGVyJywgLW1vdmVlbmQpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC10ZXh0 LnZCbGVuZ3RoKCkpOwoJCQkJfQoJCQkJc2VsLnNlbGVjdCgpOwoJCQl9CgkJfTsK CgkJLyoqCgkJKiBQcmVwYXJlIEZvcm0gRm9yIFN1Ym1pdAoJCSovCgkJdGhpcy5w cmVwYXJlX3N1Ym1pdCA9IGZ1bmN0aW9uKHN1YmplY3R0ZXh0LCBtaW5jaGFycykK CQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRoaXMuZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoKCQkJdmFyIHJldHVybnZhbHVlID0gdmFsaWRhdGVtZXNzYWdlKHN0 cmlwY29kZSh0aGlzLnRleHRvYmoudmFsdWUsIHRydWUpLCBzdWJqZWN0dGV4dCwg bWluY2hhcnMpOwoKCQkJaWYgKHJldHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4g cmV0dXJudmFsdWU7CgkJCX0KCQkJZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51 bGwgJiYgdGhpcy5jYXB0Y2hhLmZhaWxlZCkKCQkJewoJCQkJcmV0dXJuIGZhbHNl OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJ cmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoJCS8vIE1vemlsbGEgV1lTSVdZRyBvbmx5CgkJLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCQlpZiAoaXNfbW96KQoJCXsKCQkJLyoq CgkJCSogU2V0IGVkaXRvciBjb250ZW50cwoJCQkqLwoJCQl0aGlzLl9zZXRfZWRp dG9yX2NvbnRlbnRzID0gdGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzOwoJCQl0aGlz LnNldF9lZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbihpbml0aWFsX3RleHQpCgkJ CXsKCQkJCXRoaXMuX3NldF9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsK CgkJCQl0aGlzLmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25rZXlwcmVz cywgdHJ1ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBTZXQgZWRpdG9yIHN0eWxlCgkJ CSovCgkJCXRoaXMuc2V0X2VkaXRvcl9zdHlsZSA9IGZ1bmN0aW9uKCkKCQkJewoJ CQkJZm9yICh2YXIgc3MgPSAwOyBzcyA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxl bmd0aDsgc3MrKykKCQkJCXsKCQkJCQl0cnkKCQkJCQl7CgkJCQkJCWlmIChkb2N1 bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXMubGVuZ3RoIDw9IDApCgkJCQkJ CXsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKGUp CgkJCQkJeyAvLyB0cnlpbmcgdG8gYWNjZXNzIGEgc3R5bGVzaGVldCBvdXRzaWRl IHRoZSBhbGxvd2VkIGRvbWFpbgoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJ Zm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3Nz UnVsZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5 bGVTaGVldHNbc3NdLmNzc1J1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnLnd5c2l3 eWcnKQoJCQkJCQl7CgkJCQkJCQluZXdzcyA9IHRoaXMuZWRpdGRvYy5jcmVhdGVF bGVtZW50KCdzdHlsZScpOwoJCQkJCQkJbmV3c3MudHlwZSA9ICd0ZXh0L2Nzcyc7 CgkJCQkJCQluZXdzcy5pbm5lckhUTUwgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tz c10uY3NzUnVsZXNbaV0uY3NzVGV4dCArICcgcCB7IG1hcmdpbjogMHB4OyB9JzsK CQkJCQkJCXRoaXMuZWRpdGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1sw XS5hcHBlbmRDaGlsZChuZXdzcyk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5j bGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5z dHlsZS5mb250RmFtaWx5ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1 bGVzW2ldLnN0eWxlLmZvbnRGYW1pbHk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9k eS5zdHlsZS5mb250U2l6ZSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NS dWxlc1tpXS5zdHlsZS5mb250U2l6ZTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJ CQkJfQoJCQkJCX0KCQkJCX0KCQkJfTsKCgkJCS8qKgoJCQkqIFRyYW5zbGF0ZSBD b2xvciBDb21tYW5kIFZhbHVlCgkJCSovCgkJCXRoaXMudHJhbnNsYXRlX2NvbG9y X2NvbW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQkJewoJCQkJaWYg KGZvcmVjb2xvciA9PSAnJyB8fCBmb3JlY29sb3IgPT0gbnVsbCkKCQkJCXsKCQkJ CQlmb3JlY29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVkaXRk b2MuYm9keSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKTsKCQkJCX0K CgkJCQlpZiAoZm9yZWNvbG9yLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncmdiJykg PT0gMCkKCQkJCXsKCQkJCQl2YXIgbWF0Y2hlcyA9IGZvcmVjb2xvci5tYXRjaCgv XnJnYlxzKlwoKFswLTldKyksXHMqKFswLTldKyksXHMqKFswLTldKylcKSQvKTsK CQkJCQlpZiAobWF0Y2hlcykKCQkJCQl7CgkJCQkJCXJldHVybiB0aGlzLnRyYW5z bGF0ZV9zaWxseV9oZXgoKG1hdGNoZXNbMV0gJiAweEZGKS50b1N0cmluZygxNiks IChtYXRjaGVzWzJdICYgMHhGRikudG9TdHJpbmcoMTYpLCAobWF0Y2hlc1szXSAm IDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJ CQkJCXJldHVybiB0aGlzLnRyYW5zbGF0ZV9jb2xvcl9jb21tYW5kdmFsdWUobnVs bCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJldHVybiBmb3Jl Y29sb3I7CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBUcmFuc2xhdGUgQ1NTIGZv bnRTaXplIHRvIEhUTUwgRm9udCBTaXplCgkJCSovCgkJCXRoaXMudHJhbnNsYXRl X2ZvbnRzaXplID0gZnVuY3Rpb24oY3Nzc2l6ZSkKCQkJewoJCQkJc3dpdGNoIChj c3NzaXplKQoJCQkJewoJCQkJCWNhc2UgJzcuNXB0JzoKCQkJCQljYXNlICcxMHB4 JzogcmV0dXJuIDE7CgkJCQkJY2FzZSAnMTBwdCc6IHJldHVybiAyOwoJCQkJCWNh c2UgJzEycHQnOiByZXR1cm4gMzsKCQkJCQljYXNlICcxNHB0JzogcmV0dXJuIDQ7 CgkJCQkJY2FzZSAnMThwdCc6IHJldHVybiA1OwoJCQkJCWNhc2UgJzI0cHQnOiBy ZXR1cm4gNjsKCQkJCQljYXNlICczNnB0JzogcmV0dXJuIDc7CgkJCQkJZGVmYXVs dDogICAgIHJldHVybiAnJzsKCQkJCX0KCQkJfQoKCQkJLyoqCgkJCSogQXBwbHkg Rm9ybWF0CgkJCSovCgkJCXRoaXMuX2FwcGx5X2Zvcm1hdCA9IHRoaXMuYXBwbHlf Zm9ybWF0OwoJCQl0aGlzLmFwcGx5X2Zvcm1hdCA9IGZ1bmN0aW9uKGNtZCwgZGlh bG9nLCBhcmcpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgndXNl Q1NTJywgZmFsc2UsIHRydWUpOwoJCQkJcmV0dXJuIHRoaXMuX2FwcGx5X2Zvcm1h dChjbWQsIGRpYWxvZywgYXJnKTsKCQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBM aW5rCgkJCSovCgkJCXRoaXMuX2NyZWF0ZWxpbmsgPSB0aGlzLmNyZWF0ZWxpbms7 CgkJCXRoaXMuY3JlYXRlbGluayA9IGZ1bmN0aW9uKGUsIHVybCkKCQkJewoJCQkJ aWYgKHR5cGVvZiB1cmwgPT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJdXJsID0g dGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0 dHA6Ly8nLCB0cnVlKTsKCQkJCX0KCQkJCWlmICgodXJsID0gdGhpcy52ZXJpZnlf cHJvbXB0KHVybCkpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQlpZiAodGhpcy5nZXRf c2VsZWN0aW9uKCkpCgkJCQkJewoJCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5s aW5rJyk7CgkJCQkJCXRoaXMuX2NyZWF0ZWxpbmsoZSwgdXJsKTsKCQkJCQl9CgkJ CQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0i JyArIHVybCArICciPicgKyB1cmwgKyAnPC9hPicpOwoJCQkJCX0KCQkJCX0KCQkJ CXJldHVybiB0cnVlOwoJCQl9OwoKCQkJLyoqCgkJCSogSW5zZXJ0IFNtaWxpZQoJ CQkqLwoJCQl0aGlzLmluc2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0 ZXh0LCBzbWlsaWVwYXRoLCBzbWlsaWVpZCkKCQkJewoJCQkJdGhpcy5jaGVja19m b2N1cygpOwoKCQkJCXRyeQoJCQkJewoJCQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdJ bnNlcnRJbWFnZScsIGZhbHNlLCBzbWlsaWVwYXRoKTsKCQkJCQl2YXIgc21pbGll cyA9IGZldGNoX3RhZ3ModGhpcy5lZGl0ZG9jLmJvZHksICdpbWcnKTsKCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHNtaWxpZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJ CQkJCQlpZiAoc21pbGllc1tpXS5zcmMgPT0gc21pbGllcGF0aCkKCQkJCQkJewoJ CQkJCQkJaWYgKHNtaWxpZXNbaV0uZ2V0QXR0cmlidXRlKCdzbWlsaWVpZCcpIDwg MSkKCQkJCQkJCXsKCQkJCQkJCQlzbWlsaWVzW2ldLnNldEF0dHJpYnV0ZSgnc21p bGllaWQnLCBzbWlsaWVpZCk7CgkJCQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1 dGUoJ2JvcmRlcicsICIwIik7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCQljYXRjaChlKQoJCQkJewoJCQkJCS8vIGZhaWxlZC4uLiBwcm9iYWJseSBk dWUgdG8gaW5zZXJ0aW5nIGEgc21pbGllIG92ZXIgYSBzbWlsaWUgaW4gbW96aWxs YQoJCQkJfQoJCQl9OwoKCQkJLyoqCgkJCSogR2V0IFNlbGVjdGlvbgoJCQkqLwoJ CQl0aGlzLmdldF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXNlbGVj dGlvbiA9IHRoaXMuZWRpdHdpbi5nZXRTZWxlY3Rpb24oKTsKCQkJCXRoaXMuY2hl Y2tfZm9jdXMoKTsKCQkJCXJhbmdlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmdl dFJhbmdlQXQoMCkgOiB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJl dHVybiB0aGlzLnJlYWRfbm9kZXMocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxz ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBQYXN0ZSBUZXh0CgkJCSovCgkJCXRoaXMu aW5zZXJ0X3RleHQgPSBmdW5jdGlvbihzdHIpCgkJCXsKCQkJCXRoaXMuZWRpdGRv Yy5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBzdHIpOwoJCQkJLypm cmFnbWVudCA9IHRoaXMuZWRpdGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7 CgkJCQlob2xkZXIgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3Bhbicp OwoJCQkJaG9sZGVyLmlubmVySFRNTCA9IHN0cjsKCgkJCQl3aGlsZSAoaG9sZGVy LmZpcnN0Q2hpbGQpCgkJCQl7CgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaG9s ZGVyLmZpcnN0Q2hpbGQpOwoJCQkJfQoKCQkJCXRoaXMuaW5zZXJ0X25vZGVfYXRf c2VsZWN0aW9uKGZyYWdtZW50KTsqLwoJCQl9OwoKCQkJLyoqCgkJCSogU2V0IGVk aXRvciBmdW5jdGlvbnMKCQkJKi8KCQkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9u cyA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmFkZEV2ZW50TGlz dGVuZXIoJ21vdXNldXAnLCB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25tb3VzZXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdGRvYy5hZGRF dmVudExpc3RlbmVyKCdrZXl1cCcsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuZWRpdGRvY19vbmtleXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdpbi5h ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5w cm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdp bi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciwgdHJ1ZSk7CgkJCX07CgoKCQkJLyoq CgkJCSogQWRkIFJhbmdlIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLmFkZF9yYW5n ZSA9IGZ1bmN0aW9uKG5vZGUpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsK CQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl2 YXIgcmFuZ2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJhbmdl LnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKCQkJCXNlbC5yZW1vdmVBbGxSYW5n ZXMoKTsKCQkJCXNlbC5hZGRSYW5nZShyYW5nZSk7CgkJCX07CgoJCQkvKioKCQkJ KiBSZWFkIE5vZGVzIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLnJlYWRfbm9kZXMg PSBmdW5jdGlvbihyb290LCB0b3B0YWcpCgkJCXsKCQkJCXZhciBodG1sID0gIiI7 CgkJCQl2YXIgbW96X2NoZWNrID0gL19tb3ovaTsKCgkJCQlzd2l0Y2ggKHJvb3Qu bm9kZVR5cGUpCgkJCQl7CgkJCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKCQkJ CQljYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKCQkJCQl7CgkJCQkJ CXZhciBjbG9zZWQ7CgkJCQkJCWlmICh0b3B0YWcpCgkJCQkJCXsKCQkJCQkJCWNs b3NlZCA9ICFyb290Lmhhc0NoaWxkTm9kZXMoKTsKCQkJCQkJCWh0bWwgPSAnPCcg KyByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJCXZhciBhdHRyID0g cm9vdC5hdHRyaWJ1dGVzOwoJCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRy Lmxlbmd0aDsgKytpKQoJCQkJCQkJewoJCQkJCQkJCXZhciBhID0gYXR0ci5pdGVt KGkpOwoJCQkJCQkJCWlmICghYS5zcGVjaWZpZWQgfHwgYS5uYW1lLm1hdGNoKG1v el9jaGVjaykgfHwgYS52YWx1ZS5tYXRjaChtb3pfY2hlY2spKQoJCQkJCQkJCXsK CQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJfQoKCQkJCQkJCQlodG1sICs9ICIg IiArIGEubmFtZS50b0xvd2VyQ2FzZSgpICsgJz0iJyArIGEudmFsdWUgKyAnIic7 CgkJCQkJCQl9CgkJCQkJCQlodG1sICs9IGNsb3NlZCA/ICIgLz4iIDogIj4iOwoJ CQkJCQl9CgkJCQkJCWZvciAodmFyIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkg PSBpLm5leHRTaWJsaW5nKQoJCQkJCQl7CgkJCQkJCQlodG1sICs9IHRoaXMucmVh ZF9ub2RlcyhpLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQlpZiAodG9wdGFnICYmICFj bG9zZWQpCgkJCQkJCXsKCQkJCQkJCWh0bWwgKz0gIjwvIiArIHJvb3QudGFnTmFt ZS50b0xvd2VyQ2FzZSgpICsgIj4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFr OwoKCQkJCQljYXNlIE5vZGUuVEVYVF9OT0RFOgoJCQkJCXsKCQkJCQkJLy9odG1s ID0gaHRtbHNwZWNpYWxjaGFycyhyb290LmRhdGEpOwoJCQkJCQlodG1sID0gUEhQ Lmh0bWxzcGVjaWFsY2hhcnMocm9vdC5kYXRhKTsKCQkJCQl9CgkJCQkJYnJlYWs7 CgkJCQl9CgoJCQkJcmV0dXJuIGh0bWw7CgkJCX07CgoJCQkvKioKCQkJKiBJbnNl cnQgTm9kZSBhdCBTZWxlY3Rpb24gKE1vemlsbGEpCgkJCSovCgkJCXRoaXMuaW5z ZXJ0X25vZGVfYXRfc2VsZWN0aW9uID0gZnVuY3Rpb24odGV4dCkKCQkJewoJCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4u Z2V0U2VsZWN0aW9uKCk7CgkJCQl2YXIgcmFuZ2UgPSBzZWwgPyBzZWwuZ2V0UmFu Z2VBdCgwKSA6IHRoaXMuZWRpdGRvYy5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnJl bW92ZUFsbFJhbmdlcygpOwoJCQkJcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKCgkJ CQl2YXIgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOwoJCQkJdmFyIHBvcyA9 IHJhbmdlLnN0YXJ0T2Zmc2V0OwoKCQkJCXN3aXRjaCAobm9kZS5ub2RlVHlwZSkK CQkJCXsKCQkJCQljYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgoJCQkJCXsKCQkJCQkJ aWYgKHRleHQubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF KQoJCQkJCQl7CgkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJ CQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc2VsTm9kZSA9IHRleHQ7CgkJ CQkJCX0KCQkJCQkJbm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgbm9kZS5jaGlsZE5v ZGVzW3Bvc10pOwoJCQkJCQl0aGlzLmFkZF9yYW5nZShzZWxOb2RlKTsKCQkJCQl9 CgkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgTm9kZS5URVhUX05PREU6CgkJCQkJewoJ CQkJCQlpZiAodGV4dC5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKCQkJCQkJ ewoJCQkJCQkJdmFyIHRleHRfbGVuZ3RoID0gcG9zICsgdGV4dC5sZW5ndGg7CgkJ CQkJCQlub2RlLmluc2VydERhdGEocG9zLCB0ZXh0LmRhdGEpOwoJCQkJCQkJcmFu Z2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCQkJCXJhbmdlLnNl dEVuZChub2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlyYW5nZS5zZXRTdGFydChu b2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlzZWwuYWRkUmFuZ2UocmFuZ2UpOwoJ CQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJbm9kZSA9IG5vZGUuc3Bs aXRUZXh0KHBvcyk7CgkJCQkJCQl2YXIgc2VsTm9kZTsKCQkJCQkJCWlmICh0ZXh0 Lm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkKCQkJCQkJ CXsKCQkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJCQkJfQoJ CQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCXNlbE5vZGUgPSB0ZXh0OwoJCQkJ CQkJfQoJCQkJCQkJbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBu b2RlKTsKCQkJCQkJCXRoaXMuYWRkX3JhbmdlKHNlbE5vZGUpOwoJCQkJCQl9CgkJ CQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9OwoJCX0KCQkvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoJCS8vIE9wZXJhIFdZU0lXWUcgb25seQoJCS8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJZWxzZSBpZiAoaXNfb3Bl cmEpCgkJewoJCQkvKioKCQkJCVRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB3aXRo IE9wZXJhIHdoaWNoIGlzIHdoeSB0aGlzIGNvZGUgaXMgZGlzYWJsZWQ6CgkJCQkJ MS4gRm9jdXMgaXNzdWVzLCB3aGVuIGEgYnV0dG9uIGlzIHByZXNzZWQgdGhlIGVk aXRvciBsb3NlcyBmb2N1cwoJCQkJCTIuIFN0eWxpbmcgaXMgbG9zdCB3aGVuIHdl IG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBlZGl0b3IKCQkJCQkzLiBBZGRp bmcgYSBVUkwgaXMgZXZlciBsYXN0aW5nIGV2ZW4gaWYgeW91IHB1c2ggZW50ZXIK CQkJKi8KCQkJLyoqCgkJCSogU2V0IGVkaXRvciBzdHlsZQoJCQkqLwoJCQl0aGlz LnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJCXsKCQkJCWZvciAodmFy IHNzID0gMDsgc3MgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IHNzKysp CgkJCQl7CgkJCQkJdHJ5CgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5bGVT aGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0aCA8PSAwKQoJCQkJCQl7CgkJCQkJCQlj b250aW51ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQljYXRjaChlKQoJCQkJCXsgLy8g dHJ5aW5nIHRvIGFjY2VzcyBhIHN0eWxlc2hlZXQgb3V0c2lkZSB0aGUgYWxsb3dl ZCBkb21haW4KCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWZvciAodmFyIGkg PSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0 aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW3Nz XS5jc3NSdWxlc1tpXS5zZWxlY3RvclRleHQgPT0gJy53eXNpd3lnJykKCQkJCQkJ ewoJCQkJCQkJbmV3c3MgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3R5 bGUnKTsKCQkJCQkJCW5ld3NzLnR5cGUgPSAndGV4dC9jc3MnOwoJCQkJCQkJbmV3 c3MuaW5uZXJIVE1MID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVz W2ldLmNzc1RleHQgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQkJCQl0aGlz LmVkaXRkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hp bGQobmV3c3MpOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuY2xhc3NOYW1lID0g J3d5c2l3eWcnOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9udEZh bWlseSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NSdWxlc1tpXS5zdHls ZS5mb250RmFtaWx5OwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9u dFNpemUgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXNbaV0uc3R5 bGUuZm9udFNpemU7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9 CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBJbnNlcnQgTGluawoJCQkqLwoJCQl0 aGlzLl9jcmVhdGVsaW5rID0gdGhpcy5jcmVhdGVsaW5rOwoJCQl0aGlzLmNyZWF0 ZWxpbmsgPSBmdW5jdGlvbihlLCB1cmwpCgkJCXsKCQkJCWlmICh0eXBlb2YgdXJs ID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJCXVybCA9IHRoaXMuc2hvd19wcm9t cHQodmJwaHJhc2VbJ2VudGVyX2xpbmtfdXJsJ10sICdodHRwOi8vJywgdHJ1ZSk7 CgkJCQl9CgkJCQlpZiAoKHVybCA9IHRoaXMudmVyaWZ5X3Byb21wdCh1cmwpKSAh PT0gZmFsc2UpCgkJCQl7CgkJCQkJaWYgKHRoaXMuZ2V0X3NlbGVjdGlvbigpKQoJ CQkJCXsKCQkJCQkJdGhpcy5hcHBseV9mb3JtYXQoJ3VubGluaycpOwoJCQkJCQl0 aGlzLl9jcmVhdGVsaW5rKGUsIHVybCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7 CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQoJzxhIGhyZWY9IicgKyB1cmwgKyAnIj4n ICsgdXJsICsgJzwvYT4nKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsK CQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBTbWlsaWUKCQkJKi8KCQkJdGhpcy5p bnNlcnRfc21pbGllID0gZnVuY3Rpb24oZSwgc21pbGlldGV4dCwgc21pbGllcGF0 aCwgc21pbGllaWQpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCQl0 cnkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgnSW5zZXJ0SW1hZ2UnLCBm YWxzZSwgc21pbGllcGF0aCk7CgkJCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90YWdz KHRoaXMuZWRpdGRvYy5ib2R5LCAnaW1nJyk7CgkJCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKHNtaWxp ZXNbaV0uc3JjID09IHNtaWxpZXBhdGgpCgkJCQkJCXsKCQkJCQkJCWlmIChzbWls aWVzW2ldLmdldEF0dHJpYnV0ZSgnc21pbGllaWQnKSA8IDEpCgkJCQkJCQl7CgkJ CQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1dGUoJ3NtaWxpZWlkJywgc21pbGll aWQpOwoJCQkJCQkJCXNtaWxpZXNbaV0uc2V0QXR0cmlidXRlKCdib3JkZXInLCAi MCIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2goZSkK CQkJCXsKCQkJCQkvLyBmYWlsZWQuLi4gcHJvYmFibHkgZHVlIHRvIGluc2VydGlu ZyBhIHNtaWxpZSBvdmVyIGEgc21pbGllIGluIG1vemlsbGEKCQkJCX0KCQkJfTsK CgkJCS8qKgoJCQkqIEdldCBTZWxlY3Rpb24KCQkJKi8KCQkJdGhpcy5nZXRfc2Vs ZWN0aW9uID0gZnVuY3Rpb24oKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSB0aGlzLmVk aXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJ CQlyYW5nZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDog dGhpcy5lZGl0ZG9jLmNyZWF0ZVJhbmdlKCk7CgkJCQl2YXIgbHNzZXJpYWxpemVy ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlTFNTZXJpYWxpemVyKCk7 CgkJCQlyZXR1cm4gbHNzZXJpYWxpemVyLndyaXRlVG9TdHJpbmcocmFuZ2UuY2xv bmVDb250ZW50cygpKTsKCQkJfTsKCgkJCS8qKgoJCQkqIFBhc3RlIFRleHQKCQkJ Ki8KCQkJdGhpcy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHN0cikKCQkJewoJCQkJ dGhpcy5lZGl0ZG9jLmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHN0 cik7CgkJCX07CgkJfQoJfQoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCS8vIFN0YW5kYXJkIGVkaXRvcgoJLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCWVsc2UKCXsKCQl0aGlzLmRpc2FibGVfZWRpdG9yID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCWlmICghdGhpcy5kaXNhYmxlZCkKCQkJewoJCQkJdGhp cy5kaXNhYmxlZCA9IHRydWU7CgoJCQkJaWYgKHR5cGVvZiB0ZXh0ICE9ICd1bmRl ZmluZWQnKQoJCQkJewoJCQkJCXRoaXMuZWRpdGJveC52YWx1ZSA9IHRleHQ7CgkJ CQl9CgkJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQgPSB0cnVlOwoJCQl9CgkJfTsK CgkJdGhpcy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlm ICh0eXBlb2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5lZGl0 Ym94LnZhbHVlID0gdGV4dDsKCQkJfQoJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQg PSBmYWxzZTsKCgkJCXRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKCQl9OwoKCQkvKioK CQkqIFdyaXRlcyBjb250ZW50cyB0byB0aGUgPHRleHRhcmVhPgoJCSoKCQkqIEBw YXJhbQlvYmplY3QJPHRleHRhcmVhPgoJCSogQHBhcmFtCXN0cmluZwlJbml0aWFs IHRleHQKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRleHQ7CgkJfQoK CQkvKioKCQkqIFB1dCB0aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuc2V0X2VkaXRvcl9jb250ZW50cyA9IGZ1bmN0aW9uKGluaXRpYWxfdGV4dCkK CQl7CgkJCXZhciBpZnJhbWUgPSB0aGlzLnRleHRvYmoucGFyZW50Tm9kZS5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07CgkJCWlmIChpZnJhbWUpCgkJ CXsKCQkJCXRoaXMudGV4dG9iai5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQl0aGlz LnRleHRvYmouc3R5bGUud2lkdGggPSBpZnJhbWUuc3R5bGUud2lkdGg7CgkJCQl0 aGlzLnRleHRvYmouc3R5bGUuaGVpZ2h0ID0gaWZyYW1lLnN0eWxlLmhlaWdodDsK CgkJCQlpZnJhbWUuc3R5bGUud2lkdGggPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHls ZS5oZWlnaHQgPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9u ZSc7CgkJCX0KCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMudGV4dG9iajsKCQkJdGhp cy5lZGl0ZG9jID0gdGhpcy50ZXh0b2JqOwoJCQl0aGlzLmVkaXRib3ggPSB0aGlz LnRleHRvYmo7CgkJCXRoaXMuc3BlbGxvYmogPSB0aGlzLnRleHRvYmo7CgoJCQlp ZiAodHlwZW9mIGluaXRpYWxfdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJ dGhpcy53cml0ZV9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsKCQkJfQoK CQkJdGhpcy5lZGl0ZG9jLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJdGhp cy5lZGl0d2luLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCgkJCXRoaXMuaGlz dG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJ CX07CgoJCS8qKgoJCSogU2V0IHRoZSBDU1Mgc3R5bGUgb2YgdGhlIGVkaXRvcgoJ CSovCgkJdGhpcy5zZXRfZWRpdG9yX3N0eWxlID0gZnVuY3Rpb24oKQoJCXsKCQl9 OwoKCQkvKioKCQkqIEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5z ZXRfZWRpdG9yX2Z1bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCWlmICh0aGlz LmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcikKCQkJewoJCQkJdGhpcy5lZGl0ZG9j LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5lZGl0ZG9jX29ua2V5cHJlc3MsIGZhbHNlKTsKCQkJfQoJ CQllbHNlIGlmIChpc19pZSkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLm9ua2V5ZG93 biA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtl eXByZXNzOwoJCQl9CgoJCQl0aGlzLmVkaXR3aW4ub25mb2N1cyA9IHZCX1RleHRf RWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzOwoJCQl0aGlz LmVkaXR3aW4ub25ibHVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5lZGl0d2luX29uYmx1cjsKCQl9OwoKCQkvKioKCQkqIFNldCBDb250ZXh0CgkJ Ki8KCQl0aGlzLnNldF9jb250ZXh0ID0gZnVuY3Rpb24oKQoJCXsKCQl9OwoKCQkv KioKCQkqIEFwcGx5IGZvcm1hdHRpbmcKCQkqLwoJCXRoaXMuYXBwbHlfZm9ybWF0 ID0gZnVuY3Rpb24oY21kLCBkaWFsb2csIGFyZ3VtZW50KQoJCXsKCQkJLy8gdW5k byAmIHJlZG8gYXJyYXkgcG9wcwoKCQkJc3dpdGNoIChjbWQpCgkJCXsKCQkJCWNh c2UgJ2JvbGQnOgoJCQkJY2FzZSAnaXRhbGljJzoKCQkJCWNhc2UgJ3VuZGVybGlu ZSc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cigwLCAxKSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdqdXN0aWZ5bGVm dCc6CgkJCQljYXNlICdqdXN0aWZ5Y2VudGVyJzoKCQkJCWNhc2UgJ2p1c3RpZnly aWdodCc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cig3KSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbmRlbnQnOgoJ CQkJewoJCQkJCXRoaXMud3JhcF90YWdzKGNtZCwgZmFsc2UpOwoJCQkJCXJldHVy bjsKCQkJCX0KCgkJCQljYXNlICdmb250bmFtZSc6CgkJCQl7CgkJCQkJdGhpcy53 cmFwX3RhZ3MoJ2ZvbnQnLCBhcmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoK CQkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygn c2l6ZScsIGFyZ3VtZW50KTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY2FzZSAn Zm9yZWNvbG9yJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygnY29sb3InLCBh cmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ2NyZWF0ZWxp bmsnOgoJCQkJewoJCQkJCXZhciBzZWwgPSB0aGlzLmdldF9zZWxlY3Rpb24oKTsK CQkJCQlpZiAoc2VsKQoJCQkJCXsKCQkJCQkJdGhpcy53cmFwX3RhZ3MoJ3VybCcs IGFyZ3VtZW50KTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy53 cmFwX3RhZ3MoJ3VybCcsIGFyZ3VtZW50LCBhcmd1bWVudCk7CgkJCQkJfQoJCQkJ CXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbnNlcnRpbWFnZSc6CgkJCQl7CgkJ CQkJdGhpcy53cmFwX3RhZ3MoJ2ltZycsIGZhbHNlLCBhcmd1bWVudCk7CgkJCQkJ cmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ3JlbW92ZWZvcm1hdCc6CgkJCQlyZXR1 cm47CgkJCX0KCgkJCS8vYWxlcnQoJ2NtZCA6OiAnICsgY21kICsgJ1xuZGlhbG9n IDo6ICcgKyBkaWFsb2cgKyAnXG5hcmd1bWVudCA6OiAnICsgYXJndW1lbnQpOwoJ CX07CgoJCXRoaXMudW5kbyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCQl0 aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoLTEpOwoJCQlpZiAoKHN0ciA9IHRoaXMu aGlzdG9yeS5nZXRfc25hcHNob3QoKSkgIT09IGZhbHNlKQoJCQl7CgkJCQl0aGlz LmVkaXRkb2MudmFsdWUgPSBzdHI7CgkJCX0KCQl9OwoKCQl0aGlzLnJlZG8gPSBm dW5jdGlvbigpCgkJewoJCQl0aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoMSk7CgkJ CWlmICgoc3RyID0gdGhpcy5oaXN0b3J5LmdldF9zbmFwc2hvdCgpKSAhPT0gZmFs c2UpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy52YWx1ZSA9IHN0cjsKCQkJfQoJCX07 CgoJCS8qKgoJCSogU3RyaXAgYSBzaW1wbGUgdGFnLi4uCgkJKi8KCQl0aGlzLnN0 cmlwX3NpbXBsZSA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsK CQkJdmFyIG9wZW50YWcgPSAnWycgKyB0YWcgKyAnXSc7CgkJCXZhciBjbG9zZXRh ZyA9ICdbLycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMg PT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoK CQkJd2hpbGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFn KSkgIT09IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0 aW9ucyAtLTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBj bG9zZXRhZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgdGV4dCA9IHN0ci5z dWJzdHIoc3RhcnRpbmRleCArIG9wZW50YWcubGVuZ3RoLCBzdG9waW5kZXggLSBz dGFydGluZGV4IC0gb3BlbnRhZy5sZW5ndGgpOwoJCQkJCXN0ciA9IHN0ci5zdWJz dHIoMCwgc3RhcnRpbmRleCkgKyB0ZXh0ICsgc3RyLnN1YnN0cihzdG9waW5kZXgg KyBjbG9zZXRhZy5sZW5ndGgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog U3RyaXAgYSB0YWcgd2l0aCBhbiBvcHRpb24KCQkqLwoJCXRoaXMuc3RyaXBfY29t cGxleCA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsKCQkJdmFy IG9wZW50YWcgPSAnWycgKyB0YWcgKyAnPSc7CgkJCXZhciBjbG9zZXRhZyA9ICdb LycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMgPT0gJ3Vu ZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoKCQkJd2hp bGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFnKSkgIT09 IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0aW9ucyAt LTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBjbG9zZXRh ZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgb3BlbmVuZCA9IFBIUC5zdHJp cG9zKHN0ciwgJ10nLCBzdGFydGluZGV4KTsKCQkJCQlpZiAob3BlbmVuZCAhPT0g ZmFsc2UgJiYgb3BlbmVuZCA+IHN0YXJ0aW5kZXggJiYgb3BlbmVuZCA8IHN0b3Bp bmRleCkKCQkJCQl7CgkJCQkJCXZhciB0ZXh0ID0gc3RyLnN1YnN0cihvcGVuZW5k ICsgMSwgc3RvcGluZGV4IC0gb3BlbmVuZCAtIDEpOwoJCQkJCQlzdHIgPSBzdHIu c3Vic3RyKDAsIHN0YXJ0aW5kZXgpICsgdGV4dCArIHN0ci5zdWJzdHIoc3RvcGlu ZGV4ICsgY2xvc2V0YWcubGVuZ3RoKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog UmVtb3ZlIEZvcm1hdHRpbmcKCQkqLwoJCXRoaXMucmVtb3ZlZm9ybWF0ID0gZnVu Y3Rpb24oZSkKCQl7CgkJCXZhciBzaW1wbGVzdHJpcCA9IG5ldyBBcnJheSgnYics ICdpJywgJ3UnKTsKCQkJdmFyIGNvbXBsZXhzdHJpcCA9IG5ldyBBcnJheSgnZm9u dCcsICdjb2xvcicsICdzaXplJyk7CgoJCQl2YXIgc3RyID0gdGhpcy5nZXRfc2Vs ZWN0aW9uKCk7CgkJCWlmIChzdHIgPT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm47 CgkJCX0KCgkJCS8vIHNpbXBsZSBzdHJpcHBlcgoJCQlmb3IgKHZhciB0YWcgaW4g c2ltcGxlc3RyaXApCgkJCXsKCQkJCXN0ciA9IHRoaXMuc3RyaXBfc2ltcGxlKHNp bXBsZXN0cmlwW3RhZ10sIHN0cik7CgkJCX0KCgkJCS8vIGNvbXBsZXggc3RyaXBw ZXIKCQkJZm9yICh2YXIgdGFnIGluIGNvbXBsZXhzdHJpcCkKCQkJewoJCQkJc3Ry ID0gdGhpcy5zdHJpcF9jb21wbGV4KGNvbXBsZXhzdHJpcFt0YWddLCBzdHIpOwoJ CQl9CgoJCQl0aGlzLmluc2VydF90ZXh0KHN0cik7CgkJfTsKCgkJLyoqCgkJKiBJ bnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rpb24oZSwg dXJsKQoJCXsKCQkJdGhpcy5wcm9tcHRfbGluaygndXJsJywgdXJsLCB2YnBocmFz ZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0dHA6Ly8nKTsKCQl9OwoKCQkvKioKCQkq IFJlbW92ZSBMaW5rCgkJKi8KCQl0aGlzLnVubGluayA9IGZ1bmN0aW9uKGUpCgkJ ewoJCQl2YXIgc2VsID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCXNlbCA9IHRo aXMuc3RyaXBfc2ltcGxlKCd1cmwnLCBzZWwpOwoJCQlzZWwgPSB0aGlzLnN0cmlw X2NvbXBsZXgoJ3VybCcsIHNlbCk7CgkJCXRoaXMuaW5zZXJ0X3RleHQoc2VsKTsK CQl9OwoKCQkvKioKCQkqIEluc2VydCBFbWFpbCBMaW5rCgkJKi8KCQl0aGlzLmVt YWlsID0gZnVuY3Rpb24oZSwgZW1haWwpCgkJewoJCQl0aGlzLnByb21wdF9saW5r KCdlbWFpbCcsIGVtYWlsLCB2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAn Jyk7CgkJfTsKCgkJLyoqCgkJKiBJbnNlcnQgU21pbGllCgkJKi8KCQl0aGlzLmlu c2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0ZXh0KQoJCXsKCQkJdGhp cy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQoc21p bGlldGV4dCwgc21pbGlldGV4dC5sZW5ndGgsIDApOwoJCX07CgoJCS8qKgoJCSog V3JhcHBlciBmb3IgTGluayAvIEVtYWlsIExpbmsgaW5zZXJ0CgkJKi8KCQl0aGlz LnByb21wdF9saW5rID0gZnVuY3Rpb24odGFnbmFtZSwgdmFsdWUsIHBocmFzZSwg aXByb21wdCkKCQl7CgkJCWlmICh0eXBlb2YgdmFsdWUgPT0gJ3VuZGVmaW5lZCcp CgkJCXsKCQkJCXZhbHVlID0gdGhpcy5zaG93X3Byb21wdChwaHJhc2UsIGlwcm9t cHQsIHRydWUpOwoJCQl9CgkJCWlmICgodmFsdWUgPSB0aGlzLnZlcmlmeV9wcm9t cHQodmFsdWUpKSAhPT0gZmFsc2UpCgkJCXsKCQkJCWlmICh0aGlzLmdldF9zZWxl Y3Rpb24oKSkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7 CgkJCQkJdGhpcy53cmFwX3RhZ3ModGFnbmFtZSwgdmFsdWUpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXRoaXMud3JhcF90YWdzKHRhZ25hbWUsIHZhbHVlLCB2 YWx1ZSk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHRydWU7CgkJfTsKCgkJLyoqCgkJ KiBJbnNlcnQgT3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydG9yZGVyZWRs aXN0ID0gZnVuY3Rpb24oZSkKCQl7CgkJCXRoaXMuaW5zZXJ0bGlzdCh2YnBocmFz ZVsnaW5zZXJ0X29yZGVyZWRfbGlzdCddLCAnMScpOwoJCX07CgoJCS8qKgoJCSog SW5zZXJ0IFVub3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydHVub3JkZXJl ZGxpc3QgPSBmdW5jdGlvbihlKQoJCXsKCQkJdGhpcy5pbnNlcnRsaXN0KHZicGhy YXNlWydpbnNlcnRfdW5vcmRlcmVkX2xpc3QnXSwgJycpOwoJCX07CgoJCS8qKgoJ CSogSW5zZXJ0IExpc3QKCQkqLwoJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9u KHBocmFzZSwgbGlzdHR5cGUpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbTElTVCcg KyAobGlzdHR5cGUgPyAoJz0nICsgbGlzdHR5cGUpIDogJycpICsgJ11cbic7CgkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCgkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJewoJCQkJdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgn KFtcclxuXSt8XltcclxuXSopKD8hXFxbXFwqXFxdfFxcW1xcLz9saXN0KSg/PVte XHJcbl0pJywgJ2dpJyk7CgkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0odHh0 KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsKCQkJ CXRoaXMuaW5zZXJ0X3RleHQodHh0LCB0eHQudkJsZW5ndGgoKSwgMCk7CgkJCX0K CQkJZWxzZQoJCQl7CgkJCQl0aGlzLmluc2VydF90ZXh0KG9wZW50YWcgKyBjbG9z ZXRhZywgb3BlbnRhZy5sZW5ndGgsIGNsb3NldGFnLmxlbmd0aCk7CgoJCQkJaWYg KGlzX2llNykKCQkJCXsKCQkJCQkvLyByZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2Vl ICMyMzA5NykKCQkJCQl2YXIgYmFzZV90YWcgPSBmZXRjaF90YWdzKGRvY3VtZW50 LCAnYmFzZScpOwoJCQkJCXZhciBtb2RhbF9wcmVmaXg7CgkJCQkJaWYgKGJhc2Vf dGFnICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCQkJewoJ CQkJCQltb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQkJCX0KCQkJ CQllbHNlCgkJCQkJewoJCQkJCQltb2RhbF9wcmVmaXggPSAnJzsKCQkJCQl9CgkJ CQkJdmFyIGxpc3R2YWx1ZSA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cobW9kYWxf cHJlZml4ICsgImNsaWVudHNjcmlwdC9pZXByb21wdC5odG1sPyIsIHsgJ3ZhbHVl JzogJycsICdsYWJlbCc6IHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJ2Rp cic6IGRvY3VtZW50LmRpciwgJ3RpdGxlJzogZG9jdW1lbnQudGl0bGUsICdsaXN0 dHlwZSc6IGxpc3R0eXBlIH0sICJkaWFsb2dXaWR0aDozMjBweDsgZGlhbG9nSGVp Z2h0OjIzMnB4OyBkaWFsb2dUb3A6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVu VG9wKSArIHBhcnNlSW50KHdpbmRvdy5ldmVudC5jbGllbnRZKSArIHBhcnNlSW50 KGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSAtIDEwMCkgKyAicHg7IGRpYWxvZ0xl ZnQ6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVuTGVmdCkgKyBwYXJzZUludCh3 aW5kb3cuZXZlbnQuY2xpZW50WCkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQpIC0gMTYwKSArICJweDsgcmVzaXphYmxlOiBObzsiKTsKCQkJCQlp ZiAodGhpcy52ZXJpZnlfcHJvbXB0KGxpc3R2YWx1ZSkpCgkJCQkJewoJCQkJCQl0 aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3RoKCks IDApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl3aGlsZSAobGlz dHZhbHVlID0gdGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlzdF9p dGVtJ10sICcnLCBmYWxzZSkpCgkJCQkJewoJCQkJCQlsaXN0dmFsdWUgPSAnWypd JyArIGxpc3R2YWx1ZSArICdcbic7CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQobGlz dHZhbHVlLCBsaXN0dmFsdWUudkJsZW5ndGgoKSwgMCk7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJfTsKCgkJLyoqCgkJKiBPdXRkZW50CgkJKi8KCQl0aGlzLm91dGRlbnQg PSBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHNlbCA9IHRoaXMuZ2V0X3NlbGVjdGlv bigpOwoJCQlzZWwgPSB0aGlzLnN0cmlwX3NpbXBsZSgnaW5kZW50Jywgc2VsLCAx KTsKCQkJdGhpcy5pbnNlcnRfdGV4dChzZWwpOwoJCX07CgoJCS8qKgoJCSogR2V0 IEVkaXRvciBDb250ZW50cwoJCSovCgkJdGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRz ID0gZnVuY3Rpb24oKQoJCXsKCQkJcmV0dXJuIHRoaXMuZWRpdGRvYy52YWx1ZTsK CQl9OwoKCQkvKioKCQkqIEdldCBTZWxlY3RlZCBUZXh0CgkJKi8KCQl0aGlzLmdl dF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJewoJCQlpZiAodHlwZW9mKHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJ CXJldHVybiB0aGlzLmVkaXRkb2MudmFsdWUuc3Vic3RyKHRoaXMuZWRpdGRvYy5z ZWxlY3Rpb25TdGFydCwgdGhpcy5lZGl0ZG9jLnNlbGVjdGlvbkVuZCAtIHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCk7CgkJCX0KCQkJZWxzZSBpZiAoZG9jdW1l bnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSkK CQkJewoJCQkJcmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp LnRleHQ7CgkJCX0KCQkJZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikKCQkJ ewoJCQkJcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSArICcnOwoJCQl9CgkJ CWVsc2UKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfTsKCgkJLyoqCgkJ KiBQYXN0ZSBIVE1MCgkJKi8KCQl0aGlzLmluc2VydF90ZXh0ID0gZnVuY3Rpb24o dGV4dCwgbW92ZXN0YXJ0LCBtb3ZlZW5kKQoJCXsKCQkJdmFyIHNlbGVjdGlvbl9j aGFuZ2VkID0gZmFsc2U7CgoJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJCQoJCQlp ZiAodHlwZW9mKHRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVm aW5lZCcpCgkJCXsKCQkJCXZhciBvcG4gPSB0aGlzLmVkaXRkb2Muc2VsZWN0aW9u U3RhcnQgKyAwOwoJCQkJdmFyIHNjcm9sbHBvcyA9IHRoaXMuZWRpdGRvYy5zY3Jv bGxUb3A7CgoJCQkJdGhpcy5lZGl0ZG9jLnZhbHVlID0gdGhpcy5lZGl0ZG9jLnZh bHVlLnN1YnN0cigwLCB0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICsgdGV4 dCArIHRoaXMuZWRpdGRvYy52YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVj dGlvbkVuZCk7CgoJCQkJaWYgKG1vdmVzdGFydCA9PT0gZmFsc2UpCgkJCQl7CgkJ CQkJLy8gZG8gbm90aGluZwoJCQkJfQoJCQkJZWxzZSBpZiAodHlwZW9mIG1vdmVz dGFydCAhPSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQl0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uU3RhcnQgPSBvcG4gKyBtb3Zlc3RhcnQ7CgkJCQkJdGhpcy5lZGl0ZG9j LnNlbGVjdGlvbkVuZCA9IG9wbiArIHRleHQudkJsZW5ndGgoKSAtIG1vdmVlbmQ7 CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGhpcy5lZGl0ZG9jLnNlbGVjdGlv blN0YXJ0ID0gb3BuOwoJCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25FbmQgPSBv cG4gKyB0ZXh0LnZCbGVuZ3RoKCk7CgkJCQl9CgkJCQl0aGlzLmVkaXRkb2Muc2Ny b2xsVG9wID0gc2Nyb2xscG9zOwoJCQl9CgkJCWVsc2UgaWYgKGRvY3VtZW50LnNl bGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpCgkJCXsK CQkJCXZhciBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJCXNlbC50ZXh0ID0gdGV4dC5yZXBsYWNlKC9ccj9cbi9nLCAnXHJcbicpOwoJ CQkJCQkJCQkJCQkKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJewoJ CQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBtb3Zl c3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJaWYgKChtb3Zlc3RhcnQg LSB0ZXh0LnZCbGVuZ3RoKCkpICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZVN0 YXJ0KCdjaGFyYWN0ZXInLCBtb3Zlc3RhcnQgLSB0ZXh0LnZCbGVuZ3RoKCkpOwoJ CQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJCQkJfQoJCQkJCWlmICht b3ZlZW5kICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZUVuZCgnY2hhcmFjdGVy JywgLW1vdmVlbmQpOwoJCQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJ CQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2No YXJhY3RlcicsIC10ZXh0LnZCbGVuZ3RoKCkpOwoJCQkJCXNlbGVjdGlvbl9jaGFu Z2VkID0gdHJ1ZTsKCQkJCX0KCgkJCQlpZiAoc2VsZWN0aW9uX2NoYW5nZWQpCgkJ CQl7CgkJCQkJc2VsLnNlbGVjdCgpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJ CQkJLy8gZmFpbGVkIC0ganVzdCBzdHVmZiBpdCBhdCB0aGUgZW5kIG9mIHRoZSBt ZXNzYWdlCgkJCQl0aGlzLmVkaXRkb2MudmFsdWUgKz0gdGV4dDsKCQkJfQoJCX07 CgoJCS8qKgoJCSogUHJlcGFyZSBGb3JtIEZvciBTdWJtaXQKCQkqLwoJCXRoaXMu cHJlcGFyZV9zdWJtaXQgPSBmdW5jdGlvbihzdWJqZWN0dGV4dCwgbWluY2hhcnMp CgkJewoJCQl2YXIgcmV0dXJudmFsdWUgPSB2YWxpZGF0ZW1lc3NhZ2UodGhpcy50 ZXh0b2JqLnZhbHVlLCBzdWJqZWN0dGV4dCwgbWluY2hhcnMpOwoKCQkJaWYgKHJl dHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJCX0KCQkJ ZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwgJiYgdGhpcy5jYXB0Y2hhLmZh aWxlZCkKCQkJewoJCQkJcmV0dXJuIHJldHVybnZhbHVlOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJ CQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCS8v IFNhZmFyaSAvIE9sZCBPcGVyYSBTdGFuZGFyZCBFZGl0b3IgT25seQoJCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJaWYgKGlzX3NhZiB8fCAoaXNf b3BlcmEgJiYgKCFvcGVyYS52ZXJzaW9uIHx8IG9wZXJhLnZlcnNpb24oKSA8IDgp KSkKCQl7CgkJCS8qKgoJCQkqIEluc2VydCBMaXN0IGZvciBTYWZhcmkgYW5kIG9s ZGVyIE9wZXJhCgkJCSovCgkJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9uKHBo cmFzZSwgbGlzdHR5cGUpCgkJCXsKCQkJCXZhciBvcGVudGFnID0gJ1tMSVNUJyAr IChsaXN0dHlwZSA/ICgnPScgKyBsaXN0dHlwZSkgOiAnJykgKyAnXVxuJzsKCQkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCQkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJCXsKCQkJCQl2YXIgcmVnZXggPSBuZXcgUmVnRXhw KCcoW1xyXG5dK3xeW1xyXG5dKikoPyFcXFtcXCpcXF18XFxbXFwvP2xpc3QpKD89 W15cclxuXSknLCAnZ2knKTsKCQkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0o dHh0KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsK CQkJCQl0aGlzLmluc2VydF90ZXh0KHR4dCwgdHh0LnZCbGVuZ3RoKCksIDApOwoJ CQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRoaXMuaW5zZXJ0X3RleHQob3BlbnRh Zywgb3BlbnRhZy5sZW5ndGgsIDApOwoKCQkJCQl3aGlsZSAobGlzdHZhbHVlID0g cHJvbXB0KHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJycpKQoJCQkJCXsK CQkJCQkJbGlzdHZhbHVlID0gJ1sqXScgKyBsaXN0dmFsdWUgKyAnXG4nOwoJCQkJ CQl0aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3Ro KCksIDApOwoJCQkJCX0KCgkJCQkJdGhpcy5pbnNlcnRfdGV4dChjbG9zZXRhZywg Y2xvc2V0YWcubGVuZ3RoLCAwKTsKCQkJCX0KCQkJfTsKCQl9Cgl9CgoJLy8gZ2Vu dGxlbWVuLCBzdGFydCB5b3VyIGVuZ2luZXMuLi4KCXRoaXMuaW5pdCgpOwp9Cgov LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBFZGl0b3IgZXZlbnQg aGFuZGxlciBmdW5jdGlvbnMKCi8qKgoqIENsYXNzIGNvbnRhaW5pbmcgZWRpdG9y IGV2ZW50IGhhbmRsZXJzCiovCmZ1bmN0aW9uIHZCX1RleHRfRWRpdG9yX0V2ZW50 cygpCnsKfQoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIGluIHRo ZSBzbWlsaWVib3gKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVfb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5pbnNlcnRfc21pbGllKGUsCgkJdGhpcy5hbHQsCgkJdGhpcy5zcmMs CgkJdGhpcy5pZC5zdWJzdHIodGhpcy5pZC5sYXN0SW5kZXhPZignXycpICsgMSkK CSk7CgoJaWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYm ICFzbWlsaWVfd2luZG93LmNsb3NlZCkKCXsKCQlzbWlsaWVfd2luZG93LmZvY3Vz KCk7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogSGFuZGxlcyBhIG1vdXNl IGV2ZW50IG9uIGEgY29tbWFuZCBidXR0b24KKi8KdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5jb21tYW5kX2J1dHRvbl9vbm1vdXNlZXZlbnQgPSBmdW5j dGlvbihlKQp7CgllID0gZG9fYW5fZShlKTsKCglpZiAoZS50eXBlID09ICdjbGlj aycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlz LmNtZCwgZmFsc2UsIHRydWUpOwoJfQoKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5idXR0b25fY29udGV4dCh0aGlzLCBlLnR5cGUpOwp9OwoKLyoqCiogSGFuZGxl cyBhIG1vdXNlIGV2ZW50IG9uIGEgcG9wdXAgY29udHJvbGxlciBidXR0b24KKi8K dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5wb3B1cF9idXR0b25fb25t b3VzZWV2ZW50ID0gZnVuY3Rpb24oZSkKewoJZSA9IGRvX2FuX2UoZSk7CgoJaWYg KGUudHlwZSA9PSAnY2xpY2snKQoJewoJCXRoaXMuX29uY2xpY2soZSk7CgkJdkJf RWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLCAnbW91c2Vv dmVyJyk7Cgl9CgllbHNlCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1l bnVfY29udGV4dCh0aGlzLCBlLnR5cGUpOwoJfQp9OwoKLyoqCiogT3ZlcnJpZGVz IHRoZSBzaG93KCkgZnVuY3Rpb24gZnJvbSB0aGUgdkJtZW51IHN5c3RlbQoqCiog QHBhcmFtCW9iamVjdAlDb250cm9sIG9iamVjdAoqIEBwYXJhbQlib29sZWFuCVNo b3cgaW5zdGFudGx5PwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LnBvcHVwX2J1dHRvbl9zaG93ID0gZnVuY3Rpb24ob2JqLCBpbnN0YW50KQp7Cglp ZiAodHlwZW9mIHZCX0VkaXRvcltvYmouZWRpdG9yaWRdLnBvcHVwc1tvYmouY21k XSA9PSAndW5kZWZpbmVkJyB8fCB2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlkXS5wb3B1 cHNbb2JqLmNtZF0gPT0gbnVsbCkKCXsKCQl2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlk XS5pbml0X3BvcHVwX21lbnUob2JqKTsKCX0KCWVsc2UgaWYgKG9iai5jbWQgPT0g J2F0dGFjaCcgJiYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyA9PSAndW5kZWZpbmVk JyB8fCAhdkJfQXR0YWNobWVudHMuaGFzX2F0dGFjaG1lbnRzKCkpKQoJewoJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7Cgl9Cgl0aGlzLl9zaG93KG9iaiwgaW5zdGFudCk7Cn07CgovKioK KiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gYSBmb3JtYXR0aW5nIDxzZWxlY3Q+ IG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0 aW5nX3NlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCXZhciBhcmcgPSB0 aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsKCWlmIChhcmcg IT0gJycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0 aGlzLmNtZCwgYXJnKTsKCX0KCXRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7Cn07Cgov KioKKiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gdGhlIHNtaWxpZXMgPHNlbGVj dD4gbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnNtaWxp ZXNlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSAhPSAnJykKCXsKCQl2Ql9FZGl0 b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3NtaWxpZShlLAoJCQl0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllcGF0aCwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllaWQKCQkpOwoJfQoJdGhpcy5zZWxlY3Rl ZEluZGV4ID0gMDsKfTsKCi8qKgoqIEhhbmRsZXMgYSBzZWxlY3Rpb24gZnJvbSB0 aGUgYXR0YWNobWVudCA8c2VsZWN0PiBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2 ZW50cy5wcm90b3R5cGUuYXR0YWNoc2VsZWN0X29uY2hhbmdlID0gZnVuY3Rpb24o ZSkKewoJdmFyIGFyZyA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhd LnZhbHVlOwoJaWYgKGFyZyAhPSAnJykKCXsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0 b3JpZF0ud3JhcF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgYXJnKTsKCX0KCXRoaXMu c2VsZWN0ZWRJbmRleCA9IDA7Cn07CgovKioKKiBIYW5kbGVzIGEgbW91c2Ugb3Zl ciBldmVudCBmb3IgdGhlIGF0dGFjaG1lbnQgPHNlbGVjdD4gbWVudQoqLwp2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlvbnMubGVuZ3RoIDw9 IDIpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1aWxkX2F0dGFjaG1l bnRzX3BvcHVwKHRoaXMpOwoJCXJldHVybiB0cnVlOwoJfQp9OwoKLyoqCiogSGFu ZGxlcyBhIG1vdXNlIGV2ZW50IG9uIGEgbWVudSBvcHRpb24KKi8KdkJfVGV4dF9F ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVudCA9 IGZ1bmN0aW9uKGUpCnsKCWUgPSBkb19hbl9lKGUpOwoJdkJfRWRpdG9yW3RoaXMu ZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsIGUudHlwZSwgJ21lbnUnKTsK fTsKCi8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhIGZvcm1hdHRpbmcgb3B0aW9u IGluIHRoZSBmb250L3NpemUgbWVudXMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5mb3JtYXR0aW5nX29wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24o ZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlzLmNt ZCwgdGhpcy5maXJzdENoaWxkLmlubmVySFRNTCk7Cgl2Qm1lbnUuaGlkZSgpOwp9 OwoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgY29sb3Igb3B0aW9uIGluIHRo ZSBjb2xvciBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu Y29sb3JvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCWZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9iYXInKS5zdHlsZS5iYWNrZ3JvdW5k Q29sb3IgPSB0aGlzLmNvbG9ybmFtZTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5mb3JtYXQoZSwgdGhpcy5jbWQsIHRoaXMuY29sb3JuYW1lKTsKCXZCbWVudS5o aWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbG9yIGlu c3RhbnQtc2VsZWN0IGJ1dHRvbgoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmNvbG9yb3V0X29uY2xpY2sgPSBmdW5jdGlvbihlKQp7CgllID0gZG9f YW5fZShlKTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXS5mb3JtYXQoZSwgJ2Zv cmVjb2xvcicsIGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9i YXInKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpOwoJcmV0dXJuIGZhbHNlOwp9OwoK LyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIG9wdGlvbiBpbiB0aGUg c21pbGllIG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0 aGlzLmVkaXRvcmlkXS5idXR0b25fY29udGV4dCh0aGlzLCAnbW91c2VvdXQnLCAn bWVudScpOwoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmluc2VydF9zbWlsaWUo ZSwgdGhpcy5zbWlsaWV0ZXh0LCBmZXRjaF90YWdzKHRoaXMsICdpbWcnKVswXS5z cmMsIHRoaXMuc21pbGllaWQpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhh bmRsZXMgYSBjbGljayBvbiB0aGUgJ01vcmUnIGxpbmsgaW4gdGhlIHNtaWxpZSBt ZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuc21pbGllbW9y ZV9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLm9wZW5fc21pbGllX3dpbmRvdyhzbWlsaWV3aW5kb3dfeCwgc21pbGlld2lu ZG93X3kpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhhbmRsZXMgYSBjbGlj ayBvbiB0aGUgJ01hbmFnZScgbGluayBpbiB0aGUgYXR0YWNobWVudHMgbWVudQoq Lwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaG1hbmFnZV9v bmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJtZW51LmhpZGUoKTsKCWZldGNoX29i amVjdCgnbWFuYWdlX2F0dGFjaG1lbnRzX2J1dHRvbicpLm9uY2xpY2soKTsKfTsK Ci8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhbiBhdHRhY2htZW50IG9wdGlvbiBp biB0aGUgYXR0YWNobWVudHMgbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmF0dGFjaG9wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJ dkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsICdt b3VzZW91dCcsICdtZW51Jyk7Cgl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0ud3Jh cF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgdGhpcy5hdHRhY2htZW50aWQpOwoJdkJt ZW51LmhpZGUoKTsKfTsKCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu YXR0YWNoaW5zZXJ0YWxsX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7Cgl2YXIgaW5z ZXJ0ID0gJyc7Cgl2YXIgYnJlYWtjaGFyID0gKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS53eXNpd3lnX21vZGUgPyAnPGJyIC8+PGJyIC8+JyA6ICdcclxuXHJcbicp OwoKCWZvciAodmFyIGlkIGluIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRzKQoJ ewoJCWluc2VydCArPSBpbnNlcnQgIT0gJycgPyBicmVha2NoYXIgOiAnJzsKCQlp bnNlcnQgKz0gJ1tBVFRBQ0hdJyArIGlkICsgJ1svQVRUQUNIXSc7Cgl9Cgl2Ql9F ZGl0b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3RleHQoaW5zZXJ0KTsKCXZCbWVu dS5oaWRlKCk7Cn0KCi8qKgoqIENsb3NlcyB0aGUgc21pbGllIHdpbmRvdyB3aGVu IHRoZSBtYWluIHBhZ2UgZXhpdHMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnBy b3RvdHlwZS5zbWlsaWV3aW5kb3dfb251bmxvYWQgPSBmdW5jdGlvbihlKQp7Cglp ZiAodHlwZW9mIHNtaWxpZV93aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgIXNtaWxp ZV93aW5kb3cuY2xvc2VkKQoJewoJCXNtaWxpZV93aW5kb3cuY2xvc2UoKTsKCX0K fTsKCi8qKgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IHRydWUgb24gZm9jdXMK Ki8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uZm9j dXMgPSBmdW5jdGlvbihlKQp7Cgl0aGlzLmhhc2ZvY3VzID0gdHJ1ZTsKfTsKCi8q KgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IGZhbHNlIG9uIGJsdXIKKi8KdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuaGFzZm9jdXMgPSBmYWxzZTsKfTsKCi8qKgoqIFNl dHMgY29udGV4dCBhbmQgaGlkZXMgbWVudXMgb24gbW91c2UgY2xpY2tzIGluIHRo ZSBlZGl0b3IKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0 ZG9jX29ubW91c2V1cCA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5zZXRfY29udGV4dCgpOwoJaWYgKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS5wb3B1cG1vZGUpCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8qKgoq IFNldHMgY29udGV4dCBvbiBrZXkgcHJlc3NlcyBpbiB0aGUgZWRpdG9yCiovCnZC X1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwID0g ZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLnNldF9jb250 ZXh0KCk7Cn07CgovKioKKiBIYW5kbGUgYSBrZXlwcmVzcyBldmVudCBpbiB0aGUg ZWRpdG9yIHdpbmRvdwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUpCnsKCWlmICghZSkKCXsK CQllID0gd2luZG93LmV2ZW50OwoJfQoKCWlmIChlLmN0cmxLZXkpCgl7CgkJdmFy IGNvZGUgPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZTsKCQlz d2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKSkK CQl7CgkJCWNhc2UgJ2InOiBjbWQgPSAnYm9sZCc7IGJyZWFrOwoJCQljYXNlICdp JzogY21kID0gJ2l0YWxpYyc7IGJyZWFrOwoJCQljYXNlICd1JzogY21kID0gJ3Vu ZGVybGluZSc7IGJyZWFrOwoJCQlkZWZhdWx0OiByZXR1cm47CgkJfQoKCQllID0g ZG9fYW5fZShlKTsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0uYXBwbHlfZm9y bWF0KGNtZCwgZmFsc2UsIG51bGwpOwoJCXJldHVybiBmYWxzZTsKCX0KCWVsc2Ug aWYgKGUua2V5Q29kZSA9PSA5KQoJewoJCS8vIGZpcnN0IGxldHMgdHJ5IHBvc3Qg aWNvbiwgdGhlbiBzdWJtaXQsIHRoZW4ganVzdCBsZXQgaXQgcHJvY2VlZCBtYWtp bmcgdGhlIHRhYgoJCS8vIHlvdSBjYW4ndCBzdXBwcmVzcyBldmVudHMgYSB0YWIg ZXZlbiBvbiBPcGVyYSBzbyBza2lwIHRoYXQgdG9vLgoJCXZhciBmaXJzdGljb24g PSBmZXRjaF9vYmplY3QoJ3JiX2ljb25pZF8wJyk7CgkJaWYgKGZpcnN0aWNvbiAh PSBudWxsKQoJCXsKCQkJZmlyc3RpY29uLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYg KGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19zYXZlJykgIT0gbnVsbCAm JiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCAr ICdfc2F2ZScpLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYgKGZldGNoX29iamVjdCgn cXJfc3VibWl0JykgIT0gbnVsbCAmJiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9v YmplY3QoJ3FyX3N1Ym1pdCcpLmZvY3VzKCk7CgkJfQoJCWVsc2UKCQl7CgkJCXJl dHVybjsKCQl9CgkJZSA9IGRvX2FuX2UoZSk7Cgl9Cn07CgovKioKKiBTdG9wIHJl c2l6aW5nIG9mIGltYWdlcyBpbiBJRQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCA9IGZ1bmN0aW9uKGUpCnsK CWlmIChlLnNyY0VsZW1lbnQudGFnTmFtZSA9PSAnSU1HJykKCXsKCQlyZXR1cm4g ZmFsc2U7Cgl9Cn07CgovKioKKiBTYXZlIGVkaXRvciBjb250ZW50cyB0byB0ZXh0 YXJlYSBzbyBpZiB3ZSBoaXQgYmFjayAvIGZvcndhcmQgaXRzIG5vdCBsb3N0Ciog T25seSBhcHBlYXJzIHRvIHdvcmsgd2l0aCBGaXJlZm94IGF0IHRoZSBtb21lbnQK Ki8KZnVuY3Rpb24gc2F2ZV9pZnJhbWVfdG9fdGV4dGFyZWEoKQp7Cglmb3IgKHZh ciBlZGl0b3JpZCBpbiB2Ql9FZGl0b3IpCgl7CgkJaWYgKHZCX0VkaXRvcltlZGl0 b3JpZF0ud3lzaXd5Z19tb2RlICYmIHZCX0VkaXRvcltlZGl0b3JpZF0uaW5pdGlh bGl6ZWQpCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLnRleHRvYmoudmFsdWUg PSB2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKTsKCQl9 Cgl9Cn0KCmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpCnsKCXdpbmRvdy5hdHRhY2hF dmVudCgnb25iZWZvcmV1bmxvYWQnLCBzYXZlX2lmcmFtZV90b190ZXh0YXJlYSk7 Cn0KZWxzZSBpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikKewoJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHNhdmVfaWZyYW1lX3RvX3RleHRhcmVh LCB0cnVlKTsKfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g RWRpdG9yIG1vZGUgc3dpdGNoZXIgc3lzdGVtCgovKioKKiBTd2l0Y2ggZWRpdG9y IGJldHdlZW4gc3RhbmRhcmQgYW5kIHd5c2l3eWcgbW9kZXMKKgoqIEBwYXJhbQlz dHJpbmcJRWRpdG9ySUQgKHZCX0VkaXRvclt4XSkKKi8KZnVuY3Rpb24gc3dpdGNo X2VkaXRvcl9tb2RlKGVkaXRvcmlkKQp7CglpZiAoQUpBWF9Db21wYXRpYmxlKQoJ ewoJCXZhciBtb2RlID0gKHZCX0VkaXRvcltlZGl0b3JpZF0ud3lzaXd5Z19tb2Rl ID8gMCA6IDEpOwoKCQlpZiAodkJfRWRpdG9yW2VkaXRvcmlkXS5pbmZsdXggPT0g MSkKCQl7CgkJCS8vIGFscmVhZHkgY2xpY2tlZCwgZ28gYXdheSEKCQkJcmV0dXJu OwoJCX0KCQllbHNlCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLmluZmx1eCA9 IDE7CgkJfQoKCQlpZiAodHlwZW9mIHZCbWVudSAhPSAndW5kZWZpbmVkJykKCQl7 CgkJCXZCbWVudS5oaWRlKCk7CgkJfQoKCQl2YXIgYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7CgkJYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UoZnVuY3Rp b24oKQoJCXsKCQkJaWYgKGFqYXguaGFuZGxlci5yZWFkeVN0YXRlID09IDQgJiYg YWpheC5oYW5kbGVyLnN0YXR1cyA9PSAyMDApCgkJCXsKCQkJCWlmIChhamF4Lmhh bmRsZXIucmVzcG9uc2VYTUwpCgkJCQl7CgkJCQkJLy8gZGVzdHJveWVyCgkJCQkJ dmFyIHBhcnNldHlwZSA9IHZCX0VkaXRvcltlZGl0b3JpZF0ucGFyc2V0eXBlOwoJ CQkJCXZhciBwYXJzZXNtaWxpZXMgPSB2Ql9FZGl0b3JbZWRpdG9yaWRdLnBhcnNl c21pbGllczsKCQkJCQl2YXIgYWpheF9leHRyYSA9IHZCX0VkaXRvcltlZGl0b3Jp ZF0uYWpheF9leHRyYTsKCgkJCQkJdkJfRWRpdG9yW2VkaXRvcmlkXS5kZXN0cm95 KCk7CgoJCQkJCXZhciBwYXJzZWRfdGV4dCA9IGFqYXguZmV0Y2hfZGF0YShmZXRj aF90YWdzKGFqYXguaGFuZGxlci5yZXNwb25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7 CgkJCQkJdmFyIG1hdGNoZXMgPSBwYXJzZWRfdGV4dC5tYXRjaCgvJiMoWzAtOV0r KTsvZyk7CgkJCQkJaWYgKG1hdGNoZXMpCgkJCQkJewoJCQkJCQlmb3IgKHZhciBp ID0gMDsgdHlwZW9mIG1hdGNoZXNbaV0gIT0gJ3VuZGVmaW5lZCc7IGkrKykKCQkJ CQkJewoJCQkJCQkJaWYgKHN1Ym1hdGNoID0gbWF0Y2hlc1tpXS5tYXRjaCgvXiYj KFswLTldKyk7JC8pKQoJCQkJCQkJewoJCQkJCQkJCXBhcnNlZF90ZXh0ID0gcGFy c2VkX3RleHQucmVwbGFjZShzdWJtYXRjaFswXSwgU3RyaW5nLmZyb21DaGFyQ29k ZShzdWJtYXRjaFsxXSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyByZW1vdmluZyB0aGlzIGxpbmUgYmVjYXVzZSBvZiBJRTcgZm9jdXMgaXNzdWVz IC0gb24gc2Vjb25kIGFjdGl2YXRpb24gb2YgSUU3IFdZV0lXWUcsIGZvY3VzIGlz IGxvc3QKCQkJCQkvL3ZCX0VkaXRvcltlZGl0b3JpZF0gPSBudWxsOyAvLyBjb2xs ZWN0IHRoZSBnYXJiYWdlCgoJCQkJCXZCX0VkaXRvcltlZGl0b3JpZF0gPSBuZXcg dkJfVGV4dF9FZGl0b3IoZWRpdG9yaWQsIG1vZGUsIHBhcnNldHlwZSwgcGFyc2Vz bWlsaWVzLCBwYXJzZWRfdGV4dCwgYWpheF9leHRyYSk7CgkJCQkJdkJfRWRpdG9y W2VkaXRvcmlkXS5jaGVja19mb2N1cygpOwoJCQkJCWZldGNoX29iamVjdChlZGl0 b3JpZCArICdfbW9kZScpLnZhbHVlID0gbW9kZTsKCQkJCX0KCgkJCQlpZiAoaXNf aWUpCgkJCQl7CgkJCQkJYWpheC5oYW5kbGVyLmFib3J0KCk7CgkJCQl9CgkJCX0K CQl9KTsKCgkJLy8gISFhdHRlbnRpb24KCQlhamF4LnNlbmQoJ2FqYXgucGhwP2Rv PWVkaXRvcnN3aXRjaCcsICdkbz1lZGl0b3Jzd2l0Y2gnCgkJCSsgJyZ0b3d5c2l3 eWc9JwkrIG1vZGUKCQkJKyAnJnBhcnNldHlwZT0nICsgdkJfRWRpdG9yW2VkaXRv cmlkXS5wYXJzZXR5cGUKCQkJKyAnJmFsbG93c21pbGllPScgKyB2Ql9FZGl0b3Jb ZWRpdG9yaWRdLnBhcnNlc21pbGllcwoJCQkrICcmbWVzc2FnZT0nICsgUEhQLnVy bGVuY29kZSh2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMo KSkKCQkJKyAodkJfRWRpdG9yW2VkaXRvcmlkXS5hamF4X2V4dHJhID8gKCcmJyAr IHZCX0VkaXRvcltlZGl0b3JpZF0uYWpheF9leHRyYSkgOiAnJykKCQkpOwoJfQp9 CgoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gR2VuZXJpYyBn bG9iYWwgZWRpdG9yIHZhcmlhYmxlcwoKLyoqCiogRGVmaW5lIHdoaWNoIGJ1dHRv bnMgYXJlIGNvbnRleHQtY29udHJvbGxlZAoqCiogQHZhcglhcnJheQlDb250ZXh0 IGNvbnRyb2xzCiovCnZhciBjb250ZXh0Y29udHJvbHMgPSBuZXcgQXJyYXkoCgkn Ym9sZCcsCgknaXRhbGljJywKCSd1bmRlcmxpbmUnLAoJJ2p1c3RpZnlsZWZ0JywK CSdqdXN0aWZ5Y2VudGVyJywKCSdqdXN0aWZ5cmlnaHQnLAoJJ2luc2VydG9yZGVy ZWRsaXN0JywKCSdpbnNlcnR1bm9yZGVyZWRsaXN0JwopOwoKLyoqCiogRGVmaW5l IGF2YWlsYWJsZSBjb2xvciBuYW1lIG9wdGlvbnMgLSBrZXllZCB3aXRoIGhleCB2 YWx1ZQoqCiogQHZhcglhcnJheQlDb2xvciBvcHRpb25zCiovCnZhciBjb2xvcm9w dGlvbnMgPSBuZXcgQXJyYXkoKTsKY29sb3JvcHRpb25zID0gewoJJyMwMDAwMDAn IDogJ0JsYWNrJywKCScjQTA1MjJEJyA6ICdTaWVubmEnLAoJJyM1NTZCMkYnIDog J0RhcmtPbGl2ZUdyZWVuJywKCScjMDA2NDAwJyA6ICdEYXJrR3JlZW4nLAoJJyM0 ODNEOEInIDogJ0RhcmtTbGF0ZUJsdWUnLAoJJyMwMDAwODAnIDogJ05hdnknLAoJ JyM0QjAwODInIDogJ0luZGlnbycsCgknIzJGNEY0RicgOiAnRGFya1NsYXRlR3Jh eScsCgknIzhCMDAwMCcgOiAnRGFya1JlZCcsCgknI0ZGOEMwMCcgOiAnRGFya09y YW5nZScsCgknIzgwODAwMCcgOiAnT2xpdmUnLAoJJyMwMDgwMDAnIDogJ0dyZWVu JywKCScjMDA4MDgwJyA6ICdUZWFsJywKCScjMDAwMEZGJyA6ICdCbHVlJywKCScj NzA4MDkwJyA6ICdTbGF0ZUdyYXknLAoJJyM2OTY5NjknIDogJ0RpbUdyYXknLAoJ JyNGRjAwMDAnIDogJ1JlZCcsCgknI0Y0QTQ2MCcgOiAnU2FuZHlCcm93bicsCgkn IzlBQ0QzMicgOiAnWWVsbG93R3JlZW4nLAoJJyMyRThCNTcnIDogJ1NlYUdyZWVu JywKCScjNDhEMUNDJyA6ICdNZWRpdW1UdXJxdW9pc2UnLAoJJyM0MTY5RTEnIDog J1JveWFsQmx1ZScsCgknIzgwMDA4MCcgOiAnUHVycGxlJywKCScjODA4MDgwJyA6 ICdHcmF5JywKCScjRkYwMEZGJyA6ICdNYWdlbnRhJywKCScjRkZBNTAwJyA6ICdP cmFuZ2UnLAoJJyNGRkZGMDAnIDogJ1llbGxvdycsCgknIzAwRkYwMCcgOiAnTGlt ZScsCgknIzAwRkZGRicgOiAnQ3lhbicsCgknIzAwQkZGRicgOiAnRGVlcFNreUJs dWUnLAoJJyM5OTMyQ0MnIDogJ0RhcmtPcmNoaWQnLAoJJyNDMEMwQzAnIDogJ1Np bHZlcicsCgknI0ZGQzBDQicgOiAnUGluaycsCgknI0Y1REVCMycgOiAnV2hlYXQn LAoJJyNGRkZBQ0QnIDogJ0xlbW9uQ2hpZmZvbicsCgknIzk4RkI5OCcgOiAnUGFs ZUdyZWVuJywKCScjQUZFRUVFJyA6ICdQYWxlVHVycXVvaXNlJywKCScjQUREOEU2 JyA6ICdMaWdodEJsdWUnLAoJJyNEREEwREQnIDogJ1BsdW0nLAoJJyNGRkZGRkYn IDogJ1doaXRlJwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ly8gdkJfSGlzdG9yeQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK ZnVuY3Rpb24gdkJfSGlzdG9yeSgpCnsKCXRoaXMuY3Vyc29yID0gLTE7Cgl0aGlz LnN0YWNrID0gbmV3IEFycmF5KCk7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci8vIHZCX0hpc3RvcnkgbWV0aG9kcwoKdkJfSGlzdG9yeS5wcm90 b3R5cGUubW92ZV9jdXJzb3IgPSBmdW5jdGlvbihpbmNyZW1lbnQpCnsKCXZhciB0 ZXN0ID0gdGhpcy5jdXJzb3IgKyBpbmNyZW1lbnQ7CglpZiAodGVzdCA+PSAwICYm IHRoaXMuc3RhY2tbdGVzdF0gIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zdGFja1t0 ZXN0XSAhPSAndW5kZWZpbmVkJykKCXsKCQl0aGlzLmN1cnNvciArPSBpbmNyZW1l bnQ7Cgl9Cn07Cgp2Ql9IaXN0b3J5LnByb3RvdHlwZS5hZGRfc25hcHNob3QgPSBm dW5jdGlvbihzdHIpCnsKCWlmICh0aGlzLnN0YWNrW3RoaXMuY3Vyc29yXSA9PSBz dHIpCgl7CgkJcmV0dXJuOwoJfQoJZWxzZQoJewoJCXRoaXMuY3Vyc29yKys7CgkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gPSBzdHI7CgoJCWlmICh0eXBlb2YgdGhp cy5zdGFja1t0aGlzLmN1cnNvciArIDFdICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvciArIDFdID0gbnVsbDsKCQl9Cgl9Cn07Cgp2 Ql9IaXN0b3J5LnByb3RvdHlwZS5nZXRfc25hcHNob3QgPSBmdW5jdGlvbigpCnsK CWlmICh0eXBlb2YgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gJ3VuZGVmaW5l ZCcgJiYgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gbnVsbCkKCXsKCQlyZXR1 cm4gdGhpcy5zdGFja1t0aGlzLmN1cnNvcl07Cgl9CgllbHNlCgl7CgkJcmV0dXJu IGZhbHNlOwoJfQp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAxNDo0MSwgVGh1IFNl cCAxOHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMjcw MjIgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0qLw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_editor.css Content-Type: text/css; charset=windows-1251; name=vbulletin_editor.css Content-Location: http://forum.qip.ru/clientscript/vbulletin_editor.css Content-Transfer-Encoding: 8bit /*======================================================================*\ || #################################################################### || || # vBulletin 3.6.10 Patch Level 2 || # ---------------------------------------------------------------- # || || # All code in this file is ©2000-2008 Jelsoft Enterprises Ltd. # || || # This file may not be redistributed in whole or significant part. # || || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || || #################################################################### || \*======================================================================*/ /* the container for the editor */ .vBulletin_editor { border: 2px groove; } /* the container for all the edit controls */ #controlbar, .controlbar { padding: 2px; } /* the WYSIWYG edit area itself */ #htmlbox { border: 2px inset; font: 10pt verdana; overflow: auto; } /* an individual button */ .imagebutton { left: 0px; top: 0px; } /* an individual WYSIWYG color element in the color popup */ .ocolor { padding: 2px; font-size: 1px; } /* WYSIWYG the part of the color element that gets colored */ .ocolor div { width: 10px; height: 10px; border: 1px solid #ACA899; } /* WYSIWYG font, size and smilie elements within popups */ .ofont, .osize, .osmilie, .otextlink { font: 11px tahoma; cursor: default; } /* style for WYSIWYG font option elements */ .ofont { padding: 0px 4px 0px 10px; font-size: 14px; height: 20px; } /* style for WYSIWYG size option elements */ .osize { padding: 0px 4px 0px 4px; width: 30px; } /* the smilie image within a WYSIWYG smilie popup */ .osmilie img { vertical-align: middle; margin: 4px; } /* text buttons within popup menus */ .otextlink { text-align: center; margin-top: 4px; height: 20px; } /* the left cell of a WYSIWYG popup menu control */ .popup_feedback { font: 11px tahoma; height: 18px; padding: 0px 3px 0px 3px; white-space: nowrap; overflow: hidden; } /* the container window for a WYSIWYG popup menu */ .popupwindow { border: 1px solid APPWORKSPACE; padding: 3px; position: absolute; left: 0px; top: 0px; z-index: 5; } /* the WYSIWYG color popup */ #popup_forecolor { padding: 3px; } /* the WYSIWYG font popup */ #popup_fontname { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG size popup */ #popup_fontsize { padding: 1px; } /* the WYSIWYG smilie popup */ #popup_smilie { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG attach popup */ #popup_attach { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the context-notification area for WYSIWYG font and size feedback */ #fontOut, #sizeOut, .popup_feedback div { height: 16px; border: 0px solid; padding: 0px 2px 0px 2px; cursor: default; font: 11px tahoma; overflow: hidden; } /*======================================================================*\ || #################################################################### || # Downloaded: 05:52, Tue Jun 24th 2008 || # CVS: $RCSfile$ - $Revision: 13470 $ || #################################################################### \*======================================================================*/ ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_quick_edit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_quick_edit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_edit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemUgQUpBWCBwb3N0IGVkaXRpbmcKKgoqIEBwYXJhbQltaXhlZAlJRCBv ZiBlbGVtZW50IChvciBhY3R1YWwgZWxlbWVudCkgY29udGFpbmluZyBwb3N0Yml0 cwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1F1aWNrRWRpdF9Jbml0KHBvc3RvYmopCnsK CWlmIChBSkFYX0NvbXBhdGlibGUpCgl7CgkJaWYgKHR5cGVvZiBwb3N0b2JqID09 ICdzdHJpbmcnKQoJCXsKCQkJcG9zdG9iaiA9IGZldGNoX29iamVjdChwb3N0b2Jq KTsKCQl9CgkJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKHBvc3RvYmosICdhJyk7 CgkJdmFyIHBvc3RpZCA9IDA7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNob3Jz Lmxlbmd0aDsgaSsrKQoJCXsKCQkJaWYgKGFuY2hvcnNbaV0ubmFtZSAmJiBhbmNo b3JzW2ldLm5hbWUuaW5kZXhPZigndkI6OlF1aWNrRWRpdDo6JykgIT0gLTEpCgkJ CXsKCQkJCWFuY2hvcnNbaV0ub25jbGljayA9IHZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5lZGl0YnV0dG9uX2NsaWNrOwoJCQl9CgkJfQoJfQp9 CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9BSkFYX1F1 aWNrRWRpdG9yCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioK KiBDbGFzcyB0byBhbGxvdyBxdWljayBlZGl0aW5nIG9mIHBvc3RzIHdpdGhpbiBw b3N0Yml0IHZpYSBBSkFYCiovCmZ1bmN0aW9uIHZCX0FKQVhfUXVpY2tFZGl0b3Io KQp7Cgl0aGlzLnBvc3RpZCA9IG51bGw7Cgl0aGlzLm1lc3NhZ2VvYmogPSBudWxs OwoJdGhpcy5jb250YWluZXIgPSBudWxsOwoJdGhpcy5vcmlnaW5hbGh0bWwgPSBu dWxsOwoJdGhpcy5hamF4ID0gbnVsbDsKCXRoaXMuZWRpdHN0YXRlID0gZmFsc2U7 Cgl0aGlzLmVkaXRvcmNvdW50ZXIgPSAwOwoJdGhpcy5wZW5kaW5nID0gZmFsc2U7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0FKQVhf UXVpY2tFZGl0b3IgbWV0aG9kcwoKLyoqCiogQ2hlY2sgaWYgdGhlIEFKQVggc3lz dGVtIGlzIHJlYWR5IGZvciB1cyB0byBwcm9jZWVkCioKKiBAcmV0dXJuCWJvb2xl YW4KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUucmVhZHkgPSBmdW5j dGlvbigpCnsKCWlmICh0aGlzLmVkaXRzdGF0ZSB8fCB0aGlzLnBlbmRpbmcpCgl7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCXJldHVybiB0cnVlOwoJfQp9 OwoKLyoqCiogUHJlcGFyZSB0byBlZGl0IGEgc2luZ2xlIHBvc3QKKgoqIEBwYXJh bQlzdHJpbmcJTmFtZSBhdHRyaWJ1dGUgb2YgY2xpY2tlZCBsaW5rIC0gdGFrZXMg dGhlIGZvcm0gb2YgJ3ZCOjpRdWlja0VkaXQ6OiRwb3N0aWQnCioKKiBAcmV0dXJu CWJvb2xlYW4JZmFsc2UKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUu ZWRpdCA9IGZ1bmN0aW9uKGFuY2hvcl9uYW1lKQp7Cgl2YXIgdGVzdF9hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCWlmICghdGVzdF9hamF4LmluaXQo KSB8fCAodHlwZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2 Yl9kaXNhYmxlX2FqYXggPiAwKSkKCXsKCQkvLyBjb3VsZG4ndCBpbml0aWFsaXpl LCByZXR1cm4gdHJ1ZSB0byBhbGxvdyBjbGljayB0byBnbyB0aHJvdWdoCgkJcmV0 dXJuIHRydWU7Cgl9CgoJdmFyIHRtcHBvc3RpZCA9IGFuY2hvcl9uYW1lLnN1YnN0 cihhbmNob3JfbmFtZS5sYXN0SW5kZXhPZignOjonKSArIDIpOwoKCWlmICh0aGlz LnBlbmRpbmcpCgl7CgkJLy8gc29tZXRoaW5nIGlzIHdhaXRpbmcgdG8gY29tcGxl dGUKCQlyZXR1cm4gZmFsc2U7Cgl9CgllbHNlIGlmICghdGhpcy5yZWFkeSgpKQoJ ewoJCWlmICh0aGlzLnBvc3RpZCA9PSB0bXBwb3N0aWQpCgkJewoJCQl0aGlzLmZ1 bGxfZWRpdCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXRoaXMuYWJvcnQoKTsK CX0KCgl0aGlzLmVkaXRvcmNvdW50ZXIrKzsKCXRoaXMuZWRpdG9yaWQgPSAndkJf RWRpdG9yX1FFXycgKyB0aGlzLmVkaXRvcmNvdW50ZXI7CgoJdGhpcy5wb3N0aWQg PSB0bXBwb3N0aWQ7CgoJdGhpcy5tZXNzYWdlb2JqID0gZmV0Y2hfb2JqZWN0KCdw b3N0X21lc3NhZ2VfJyArIHRoaXMucG9zdGlkKTsKCXRoaXMub3JpZ2luYWxodG1s ID0gdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTDsKCgl0aGlzLnVuY2hhbmdlZCA9 IG51bGw7Cgl0aGlzLnVuY2hhbmdlZF9yZWFzb24gPSBudWxsOwoKCXRoaXMuZmV0 Y2hfZWRpdG9yKCk7CgoJdGhpcy5lZGl0c3RhdGUgPSB0cnVlOwoKCXJldHVybiBm YWxzZTsKfTsKCi8qKgoqIFNlbmQgYW4gQUpBWCByZXF1ZXN0IHRvIGZldGNoIHRo ZSBlZGl0b3IgSFRNTAoqLwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5m ZXRjaF9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3By b2dyZXNzXycgKyB0aGlzLnBvc3RpZCkpCgl7CgkJZmV0Y2hfb2JqZWN0KCdwcm9n cmVzc18nICsgdGhpcy5wb3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKCX0KCWRv Y3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3dhaXQnOwoJdGhpcy5hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCXRoaXMuYWpheC5vbnJlYWR5c3Rh dGVjaGFuZ2UodGhpcy5kaXNwbGF5X2VkaXRvcik7Cgl0aGlzLmFqYXguc2VuZCgn YWpheC5waHA/ZG89cXVpY2tlZGl0JnA9JyArIHRoaXMucG9zdGlkLCAnZG89cXVp Y2tlZGl0JnA9JyArIHRoaXMucG9zdGlkICsgJyZlZGl0b3JpZD0nICsgUEhQLnVy bGVuY29kZSh0aGlzLmVkaXRvcmlkKSk7Cgl0aGlzLnBlbmRpbmcgPSB0cnVlOwp9 OwoKLyoqCiogRGlzcGxheSB0aGUgZWRpdG9yIEhUTUwgd2hlbiBBSkFYIHNheXMg ZmV0Y2hfZWRpdG9yKCkgaXMgcmVhZHkKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGlzcGxheV9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFY ID0gdkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5 U3RhdGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJaWYgKGZldGNo X29iamVjdCgncHJvZ3Jlc3NfJyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCkpCgkJ ewoJCQlmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0VkaXRvci5w b3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJfQoJCWRvY3VtZW50LmJv ZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJCXZCX1F1aWNrRWRpdG9yLnBlbmRp bmcgPSBmYWxzZTsKCgkJaWYgKGZldGNoX3RhZ19jb3VudChBSkFYLnJlc3BvbnNl WE1MLCAnZGlzYWJsZWQnKSkKCQl7CgkJCS8vIHRoaXMgd2lsbCBmaXJlIGlmIHF1 aWNrIGVkaXQgaGFzIGJlZW4gZGlzYWJsZWQgYWZ0ZXIgdGhlIHNob3d0aHJlYWQg cGFnZSBpcyBsb2FkZWQKCQkJd2luZG93LmxvY2F0aW9uID0gJ2VkaXRwb3N0LnBo cD8nICsgU0VTU0lPTlVSTCArICdkbz1lZGl0cG9zdCZwb3N0aWQ9JyArIHZCX1F1 aWNrRWRpdG9yLnBvc3RpZDsKCQl9CgkJZWxzZSBpZiAoZmV0Y2hfdGFnX2NvdW50 KEFKQVgucmVzcG9uc2VYTUwsICdlcnJvcicpKQoJCXsKCQkJLy8gZG8gbm90aGlu ZwoJCX0KCQllbHNlCgkJewoJCQl2YXIgZWRpdG9yID0gZmV0Y2hfdGFncyhBSkFY LnJlc3BvbnNlWE1MLCAnZWRpdG9yJylbMF07CgkJCWlmICh0eXBlb2YgZWRpdG9y ID09ICd1bmRlZmluZWQnKQoJCQl7CgkJCQl3aW5kb3cubG9jYXRpb24gPSAiZWRp dHBvc3QucGhwPyIgKyBTRVNTSU9OVVJMICsgImRvPWVkaXRwb3N0JnBvc3RpZD0i ICsgdGhpcy5wb3N0aWQ7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJdmFyIHJl YXNvbiA9IGVkaXRvci5nZXRBdHRyaWJ1dGUoJ3JlYXNvbicpOwoKCQkJLy8gZGlz cGxheSB0aGUgZWRpdG9yCgkJCXZCX1F1aWNrRWRpdG9yLm1lc3NhZ2VvYmouaW5u ZXJIVE1MID0gdkJfUXVpY2tFZGl0b3IuYWpheC5mZXRjaF9kYXRhKGVkaXRvcik7 CgoJCQkvLyBkaXNwbGF5IHRoZSByZWFzb24KCQkJaWYgKGZldGNoX29iamVjdCh2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKSkKCQkJewoJ CQkJdkJfUXVpY2tFZGl0b3IudW5jaGFuZ2VkX3JlYXNvbiA9IFBIUC51bmh0bWxz cGVjaWFsY2hhcnMocmVhc29uKTsKCQkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKS52YWx1ZSA9IHZCX1F1aWNr RWRpdG9yLnVuY2hhbmdlZF9yZWFzb247CgkJCQlmZXRjaF9vYmplY3QodkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRfcmVhc29uJykub25rZXlwcmVzcyA9 IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5 X3RyYXA7CgkJCX0KCgkJCS8vIGluaXRpYWxpemUgdGhlIGVkaXRvcgoJCQl2Ql9F ZGl0b3JbdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWRdID0gbmV3IHZCX1RleHRfRWRp dG9yKAoJCQkJdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQsCgkJCQllZGl0b3IuZ2V0 QXR0cmlidXRlKCdtb2RlJyksCgkJCQllZGl0b3IuZ2V0QXR0cmlidXRlKCdwYXJz ZXR5cGUnKSwKCQkJCWVkaXRvci5nZXRBdHRyaWJ1dGUoJ3BhcnNlc21pbGllcycp CgkJCSk7CgoJCQlpZiAoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0b3InKSAmJiBmZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWQgKyAnX2VkaXRvcicpLnNjcm9sbEludG9WaWV3KQoJCQl7CgkJCQlm ZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRvcicp LnNjcm9sbEludG9WaWV3KHRydWUpOwoJCQl9CgoJCQl2Ql9FZGl0b3JbdkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWRdLmVkaXRib3guc3R5bGUud2lkdGggPSAnMTAwJSc7 CgkJCXZCX0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uY2hlY2tfZm9j dXMoKTsKCgkJCXZCX1F1aWNrRWRpdG9yLnVuY2hhbmdlZCA9IHZCX0VkaXRvclt2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250ZW50cygpOwoK CQkJZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkICsgJ19zYXZl Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9yLnNhdmU7CgkJCWZldGNoX29iamVj dCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfYWJvcnQnKS5vbmNsaWNrID0g dkJfUXVpY2tFZGl0b3IuYWJvcnQ7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfYWR2Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LmZ1bGxfZWRpdDsKCgkJCXZhciBkZWxidXR0b24gPSBmZXRjaF9vYmplY3QodkJf UXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2RlbGV0ZScpOwoJCQlpZiAoZGVsYnV0 dG9uKQoJCQl7CgkJCQlkZWxidXR0b24ub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LnNob3dfZGVsZXRlOwoJCQl9CgkJfQoKCQlpZiAoaXNfaWUpCgkJewoJCQlBSkFY LmFib3J0KCk7CgkJfQoJfQp9OwoKLyoqCiogRGVzdHJveSB0aGUgZWRpdG9yLCBh bmQgdXNlIHRoZSBzcGVjaWZpZWQgdGV4dCBhcyB0aGUgcG9zdCBjb250ZW50cwoq CiogQHBhcmFtCXN0cmluZwlUZXh0IG9mIHBvc3QKKi8KdkJfQUpBWF9RdWlja0Vk aXRvci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKHBvc3RfaHRtbCwgdHlw ZSkKewoJdGhpcy5oaWRlX2Vycm9ycyh0cnVlKTsKCWlmICh0aGlzLmVkaXRvcmlk ICYmIHZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXSAmJiB2Ql9FZGl0b3JbdGhpcy5l ZGl0b3JpZF0uaW5pdGlhbGl6ZWQpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLmRlc3Ryb3koKTsKCX0KCWlmICh0eXBlID09ICd0YWJsZW9iaicpCgl7CgkJ Ly8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHNhdmVkCgkJZmV0Y2hf b2JqZWN0KCdlZGl0JyArIHRoaXMucG9zdGlkKS5pbm5lckhUTUwgPSBwb3N0X2h0 bWw7Cgl9CgllbHNlCgl7CgkJLy8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdl IGVkaXQgaXMgY2FuY2VsbGVkCgkJdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTCA9 IHBvc3RfaHRtbDsKCX0KCgl0aGlzLmVkaXRzdGF0ZSA9IGZhbHNlOwp9OwoKLyoq CiogQ2FuY2VsIHRoZSBwb3N0IGVkaXQgYW5kIHJlc3RvcmUgZXZlcnl0aGluZyB0 byBob3cgaXQgc3RhcnRlZAoqCiogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9u KGUpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0Vk aXRvci5wb3N0aWQpKQoJewoJCWZldGNoX29iamVjdCgncHJvZ3Jlc3NfJyArIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0K CWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJdkJfUXVpY2tF ZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5vcmlnaW5hbGh0bWwsICdtZXNz YWdlb2JqJyk7Cn07CgovKioKKiBQYXNzIHRoZSBlZGl0cyBhbG9uZyB0byB0aGUg ZnVsbCBlZGl0cG9zdC5waHAgaW50ZXJmYWNlCioKKiBAcGFyYW0JZXZlbnQJRXZl bnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3IucHJvdG90eXBlLmZ1bGxf ZWRpdCA9IGZ1bmN0aW9uKGUpCnsKCXZhciBmb3JtID0gbmV3IHZCX0hpZGRlbl9G b3JtKCdlZGl0cG9zdC5waHA/ZG89ZWRpdHBvc3QmcG9zdGlkPScgKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQpOwoKCWZvcm0uYWRkX3ZhcmlhYmxlKCdkbycsICd1cGRh dGVwb3N0Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncycsIGZldGNoX3Nlc3Npb25o YXNoKCkpOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3NlY3VyaXR5dG9rZW4nLCBTRUNV UklUWVRPS0VOKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdhZHZhbmNlZCcsIDEpOwoJ Ly8gRG9uJ3QgcHJldmlldyAtIHNlZSBlZGl0cG9zdC5waHAgaWYgeW91IHdhbnQg dG8ga25vdyB3aHkKCS8vZm9ybS5hZGRfdmFyaWFibGUoJ3ByZXZpZXcnLCAnWWVz Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncG9zdGlkJywgdkJfUXVpY2tFZGl0b3Iu cG9zdGlkKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCd3eXNpd3lnJywgdkJfRWRpdG9y W3ZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkXS53eXNpd3lnX21vZGUpOwoJZm9ybS5h ZGRfdmFyaWFibGUoJ21lc3NhZ2UnLCB2Ql9FZGl0b3JbdkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKSk7Cglmb3JtLmFkZF92YXJp YWJsZSgncmVhc29uJywgZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKTsKCglmb3JtLnN1Ym1pdF9mb3Jt KCk7Cn0KCi8qKgoqIFNhdmUgdGhlIGVkaXRlZCBwb3N0IHZpYSBBSkFYCioKKiBA cGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Iu cHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihlKQp7Cgl2YXIgbmV3dGV4dCA9IHZC X0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoJdmFyIG5ld3JlYXNvbiA9IHZCX0VkaXRvclt2Ql9RdWlja0VkaXRv ci5lZGl0b3JpZF07CgoJaWYgKG5ld3RleHQgPT0gdkJfUXVpY2tFZGl0b3IudW5j aGFuZ2VkICYmIG5ld3JlYXNvbiA9PSB2Ql9RdWlja0VkaXRvci51bmNoYW5nZWRf cmVhc29uKQoJewoJCXZCX1F1aWNrRWRpdG9yLmFib3J0KGUpOwoJfQoJZWxzZQoJ ewoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfcG9z dGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJZG9jdW1lbnQuYm9keS5z dHlsZS5jdXJzb3IgPSAnd2FpdCc7CgoJCXBjX29iaiA9IGZldGNoX29iamVjdCgn cG9zdGNvdW50JyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCk7CgkJdkJfUXVpY2tF ZGl0b3IuYWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdkJfUXVp Y2tFZGl0b3IuYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UodkJfUXVpY2tFZGl0b3Iu dXBkYXRlKTsKCQl2Ql9RdWlja0VkaXRvci5hamF4LnNlbmQoJ2VkaXRwb3N0LnBo cD9kbz11cGRhdGVwb3N0JnBvc3RpZD0nICsgdkJfUXVpY2tFZGl0b3IucG9zdGlk LAoJCQknZG89dXBkYXRlcG9zdCZhamF4PTEmcG9zdGlkPScKCQkJKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQKCQkJKyAnJnd5c2l3eWc9JyArIHZCX0VkaXRvclt2Ql9R dWlja0VkaXRvci5lZGl0b3JpZF0ud3lzaXd5Z19tb2RlCgkJCSsgJyZtZXNzYWdl PScgKyBQSFAudXJsZW5jb2RlKG5ld3RleHQpCgkJCSsgJyZyZWFzb249JyArIFBI UC51cmxlbmNvZGUoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlk ICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKQoJCQkrIChwY19vYmogIT0gbnVsbCA/ ICcmcG9zdGNvdW50PScgKyBQSFAudXJsZW5jb2RlKHBjX29iai5uYW1lKSA6ICcn KQoJCSk7CgoJCXZCX1F1aWNrRWRpdG9yLnBlbmRpbmcgPSB0cnVlOwoJfQp9OwoK LyoqCiogU2hvdyB0aGUgZGVsZXRlIGRpYWxvZwoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS5zaG93X2RlbGV0ZSA9IGZ1bmN0aW9uKCkKewoJdkJfUXVp Y2tFZGl0b3IuZGVsZXRlZGlhbG9nID0gZmV0Y2hfb2JqZWN0KCdxdWlja2VkaXRf ZGVsZXRlJyk7CglpZiAodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nICYmIHZC X1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ICE9ICcnKQoJ ewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ID0g Jyc7CgoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1dHRvbiA9IGZldGNoX29iamVj dCgncXVpY2tlZGl0X2RvZGVsZXRlJyk7CgkJdkJfUXVpY2tFZGl0b3IuZGVsZXRl YnV0dG9uLm9uY2xpY2sgPSB2Ql9RdWlja0VkaXRvci5kZWxldGVfcG9zdDsKCgkJ aWYgKGZldGNoX29iamVjdCgnZGVsX3JlYXNvbicpKQoJCXsKCQkJZmV0Y2hfb2Jq ZWN0KCdkZWxfcmVhc29uJykub25rZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJfQoK CQkvLyBkb24ndCBkbyB0aGlzIHN0dWZmIGZvciBicm93c2VycyB0aGF0IGRvbid0 IGhhdmUgYW55IGRlZmluZWQgZXZlbnRzCgkJLy8gdG8gZGV0ZWN0IGNoYW5nZWQg cmFkaW8gYnV0dG9ucyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24KCQlpZiAoIWlz X29wZXJhICYmICFpc19zYWYpCgkJewoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVi dXR0b24uZGlzYWJsZWQgPSB0cnVlOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zID0gbmV3IEFycmF5KCk7CgoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydsZWF2ZSddID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsK CQkJdkJfUXVpY2tFZGl0b3IuZGVsZXRlb3B0aW9uc1snc29mdCddID0gZmV0Y2hf b2JqZWN0KCdyYl9kZWxfc29mdCcpOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydoYXJkJ10gPSBmZXRjaF9vYmplY3QoJ3JiX2RlbF9oYXJkJyk7CgoJ CQlmb3IgKHZhciBpIGluIHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnMpCgkJ CXsKCQkJCWlmICh2Ql9RdWlja0VkaXRvci5kZWxldGVvcHRpb25zW2ldKQoJCQkJ ewoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jbGljayA9 IHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jaGFuZ2UgPSB2Ql9B SkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9o YW5kbGVyOwoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25r ZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5k ZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovKioK KiBSdW4gdGhlIGRlbGV0ZSBzeXN0ZW0KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGVsZXRlX3Bvc3QgPSBmdW5jdGlvbigpCnsKCXZhciBkb250ZGVs ZXRlID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsKCWlmIChkb250ZGVs ZXRlICYmIGRvbnRkZWxldGUuY2hlY2tlZCkKCXsKCQl2Ql9RdWlja0VkaXRvci5h Ym9ydCgpOwoJCXJldHVybjsKCX0KCgl2YXIgZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgnZWRpdHBvc3QucGhwJyk7CgoJZm9ybS5hZGRfdmFyaWFibGUoJ2RvJywg J2RlbGV0ZXBvc3QnKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdzJywgZmV0Y2hfc2Vz c2lvbmhhc2goKSk7Cglmb3JtLmFkZF92YXJpYWJsZSgnc2VjdXJpdHl0b2tlbics IFNFQ1VSSVRZVE9LRU4pOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3Bvc3RpZCcsIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCk7Cglmb3JtLmFkZF92YXJpYWJsZXNfZnJvbV9v YmplY3QodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nKTsKCglmb3JtLnN1Ym1p dF9mb3JtKCk7Cn07CgovKioKKiBDaGVjayBmb3IgZXJyb3JzIGV0Yy4gYW5kIGlu aXRpYWxpemUgcmVzdG9yZSB3aGVuIEFKQVggc2F5cyBzYXZlKCkgaXMgY29tcGxl dGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFYID0g dkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5U3Rh dGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJdkJfUXVpY2tFZGl0 b3IucGVuZGluZyA9IGZhbHNlOwoJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29y ID0gJ2F1dG8nOwoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3Jp ZCArICdfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoKCQkv LyB0aGlzIGlzIHRoZSBuaWNlIGVycm9yIGhhbmRsZXIsIG9mIHdoaWNoIFNhZmFy aSBtYWtlcyBhIG1lc3MKCQlpZiAoZmV0Y2hfdGFnX2NvdW50KEFKQVgucmVzcG9u c2VYTUwsICdlcnJvcicpKQoJCXsKCQkJdmFyIGVycm9ycyA9IGZldGNoX3RhZ3Mo QUpBWC5yZXNwb25zZVhNTCwgJ2Vycm9yJyk7CgoJCQl2YXIgZXJyb3JfaHRtbCA9 ICc8b2w+JzsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBp KyspCgkJCXsKCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgdkJfUXVpY2tFZGl0 b3IuYWpheC5mZXRjaF9kYXRhKGVycm9yc1tpXSkgKyAnPC9saT4nOwoJCQl9CgkJ CWVycm9yX2h0bWwgKz0gJzwvb2w+JzsKCgkJCXZCX1F1aWNrRWRpdG9yLnNob3df ZXJyb3JzKCc8b2w+JyArIGVycm9yX2h0bWwgKyAnPC9vbD4nKTsKCQl9CgkJZWxz ZQoJCXsKCQkJdkJfUXVpY2tFZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5h amF4LmZldGNoX2RhdGEoZmV0Y2hfdGFncyhBSkFYLnJlc3BvbnNlWE1MLCAncG9z dGJpdCcpWzBdKSwgJ3RhYmxlb2JqJyk7CgkJCVBvc3RCaXRfSW5pdChmZXRjaF9v YmplY3QoJ3Bvc3QnICsgdkJfUXVpY2tFZGl0b3IucG9zdGlkKSwgdkJfUXVpY2tF ZGl0b3IucG9zdGlkKTsKCQl9CgoJCWlmIChpc19pZSkKCQl7CgkJCUFKQVguYWJv cnQoKTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogUG9wIHVwIGEg d2luZG93IHNob3dpbmcgZXJyb3JzCioKKiBAcGFyYW0Jc3RyaW5nCUVycm9yIEhU TUwKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUuc2hvd19lcnJvcnMg PSBmdW5jdGlvbihlcnJvcnRleHQpCnsKCWZldGNoX29iamVjdCgnYWpheF9wb3N0 X2Vycm9yc19tZXNzYWdlJykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0OwoJdmFyIGVy cm9ydGFibGUgPSBmZXRjaF9vYmplY3QoJ2FqYXhfcG9zdF9lcnJvcnMnKTsKCWVy cm9ydGFibGUuc3R5bGUud2lkdGggPSAnNDAwcHgnOwoJZXJyb3J0YWJsZS5zdHls ZS56SW5kZXggPSA1MDA7Cgl2YXIgbWVhc3VyZXIgPSAoaXNfc2FmID8gJ2JvZHkn IDogJ2RvY3VtZW50RWxlbWVudCcpOwoJZXJyb3J0YWJsZS5zdHlsZS5sZWZ0ID0g KGlzX2llID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDog c2VsZi5pbm5lcldpZHRoKSAvIDIgLSAyMDAgKyBkb2N1bWVudFttZWFzdXJlcl0u c2Nyb2xsTGVmdCArICdweCc7CgllcnJvcnRhYmxlLnN0eWxlLnRvcCA9IChpc19p ZSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBzZWxm LmlubmVySGVpZ2h0KSAvIDIgLSAxNTAgKyBkb2N1bWVudFttZWFzdXJlcl0uc2Ny b2xsVG9wICsgJ3B4JzsKCWVycm9ydGFibGUuc3R5bGUuZGlzcGxheSA9ICcnOwp9 OwoKLyoqCiogSGlkZSB0aGUgZXJyb3Igd2luZG93CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3IucHJvdG90eXBlLmhpZGVfZXJyb3JzID0gZnVuY3Rpb24oc2tpcF9mb2N1 c19jaGVjaykKewoJdGhpcy5lcnJvcnMgPSBmYWxzZTsKCWZldGNoX29iamVjdCgn YWpheF9wb3N0X2Vycm9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CglpZiAo c2tpcF9mb2N1c19jaGVjayAhPSB0cnVlKQoJewoJCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5jaGVja19mb2N1cygpOwoJfQp9OwoKLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLy8gdkJfQUpBWF9RdWlja0VkaXRvciBFdmVudCBIYW5k bGVycwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHF1aWNrIGVkaXRvciBldmVudHMK Ki8KZnVuY3Rpb24gdkJfQUpBWF9RdWlja0VkaXRvcl9FdmVudHMoKQp7Cn0KCi8q KgoqIEhhbmRsZXMgY2xpY2tzIG9uIGVkaXQgYnV0dG9ucyBvZiBwb3N0Yml0cwoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGJ1dHRv bl9jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJldHVybiB2Ql9RdWlja0VkaXRvci5l ZGl0KHRoaXMubmFtZSk7Cn07CgovKioKKiBIYW5kbGVzIG1hbmlwdWxhdGlvbiBv ZiBmb3JtIGVsZW1lbnRzIGluIHRoZSBkZWxldGUgc2VjdGlvbgoqLwp2Ql9BSkFY X1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9oYW5k bGVyID0gZnVuY3Rpb24oZSkKewoJaWYgKHRoaXMuaWQgPT0gJ3JiX2RlbF9sZWF2 ZScgJiYgdGhpcy5jaGVja2VkKQoJewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1 dHRvbi5kaXNhYmxlZCA9IHRydWU7Cgl9CgllbHNlCgl7CgkJdkJfUXVpY2tFZGl0 b3IuZGVsZXRlYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7Cgl9Cn0KCi8qKgoqIEtl eSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5X3RyYXAgPSBmdW5jdGlvbihlKQp7 CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJc3dpdGNoIChlLmtleUNvZGUp Cgl7CgkJY2FzZSA5OiAvLyB0YWIKCQl7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlj a0VkaXRvci5lZGl0b3JpZCArICdfc2F2ZScpLmZvY3VzKCk7CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJYnJlYWs7CgoJCWNhc2UgMTM6IC8vIGVudGVyCgkJewoJCQl2 Ql9RdWlja0VkaXRvci5zYXZlKCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJYnJl YWs7CgoJCWRlZmF1bHQ6CgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0KCi8q KgoqIEtleSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXAgPSBm dW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJaWYgKGUu a2V5Q29kZSA9PSAxMykgLy8gZW50ZXIKCXsKCQlpZiAodkJfUXVpY2tFZGl0b3Iu ZGVsZXRlYnV0dG9uLmRpc2FibGVkID09IGZhbHNlKQoJCXsKCQkJdkJfUXVpY2tF ZGl0b3IuZGVsZXRlX3Bvc3QoKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXJl dHVybiB0cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwov LyBpbml0aWFsaXplIHRoZSBlZGl0b3IgY2xhc3MKCnZhciB2Ql9RdWlja0VkaXRv ciA9IG5ldyB2Ql9BSkFYX1F1aWNrRWRpdG9yKCk7CgovKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qXAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp8fCAjIERvd25sb2Fk ZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGggMjAwOAp8fCAjIENWUzogJFJDU2ZpbGUk IC0gJFJldmlzaW9uOiAyNjQ0NiAkCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwq PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSov ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_quick_reply.js Content-Type: application/x-javascript; name=vbulletin_quick_reply.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_reply.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwNCnx8ICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIHx8DQp8fCAjIHZCdWxsZXRpbiAzLjYuMTAgUGF0Y2ggTGV2ZWwgMg0KfHwg IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICMgfHwNCnx8ICMgQ29weXJpZ2h0IKkyMDAwLTIw MDggSmVsc29mdCBFbnRlcnByaXNlcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu IHx8DQp8fCAjIFRoaXMgZmlsZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgaW4g d2hvbGUgb3Igc2lnbmlmaWNhbnQgcGFydC4gIyB8fA0KfHwgIyAtLS0tLS0tLS0t LS0tLS0tIFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0t LS0tLS0tICMgfHwNCnx8ICMgaHR0cDovL3d3dy52YnVsbGV0aW4uY29tIHwgaHR0 cDovL3d3dy52YnVsbGV0aW4uY29tL2xpY2Vuc2UuaHRtbCAjIHx8DQp8fCAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyB8fA0KXCo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N Cg0KdmFyIHFyX3JlcG9zdCA9IGZhbHNlOw0KdmFyIHFyX2Vycm9yc19zaG93biA9 IGZhbHNlOw0KdmFyIHFyX2FjdGl2ZSA9IGZhbHNlOw0KdmFyIHFyX3Bvc3Rpbmcg PSAwOw0KdmFyIGNsaWNrZWRlbG0gPSBmYWxzZTsNCg0KLyoqDQoqIEluaXRpYWxp emVzIHRoZSBxdWljayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9pbml0 KCkNCnsNCglxcl9kaXNhYmxlX2NvbnRyb2xzKCk7DQoJcXJfaW5pdF9idXR0b25z KGZldGNoX29iamVjdCgncG9zdHMnKSk7DQp9DQoNCi8qKg0KKiBTdGVwcyB0aHJv dWdoIHRoZSBnaXZlbiBvYmplY3QgYWN0aXZhdGluZyBhbGwgcXVpY2sgcmVwbHkg YnV0dG9ucyBpdCBmaW5kcw0KKg0KKiBAcGFyYW0Jb2JqZWN0CUhUTUwgb2JqZWN0 IHRvIHNlYXJjaA0KKi8NCmZ1bmN0aW9uIHFyX2luaXRfYnV0dG9ucyhvYmopDQp7 DQoJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKG9iaiwgJ2EnKTsNCglmb3IgKHZh ciBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpKyspDQoJew0KCQlpZiAoYW5j aG9yc1tpXS5pZCAmJiBhbmNob3JzW2ldLmlkLnN1YnN0cigwLCAzKSA9PSAncXJf JykNCgkJew0KCQkJYW5jaG9yc1tpXS5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBy ZXR1cm4gcXJfYWN0aXZhdGUodGhpcy5pZC5zdWJzdHIoMykpOyB9Ow0KCQl9DQoJ fQ0KfQ0KDQovKioNCiogRGlzYWJsZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBxdWlj ayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9kaXNhYmxlX2NvbnRyb2xz KCkNCnsNCglpZiAocmVxdWlyZV9jbGljaykNCgl7DQoJCWZldGNoX29iamVjdCgn cXJfcG9zdGlkJykudmFsdWUgPSAwOw0KDQoJCXZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uZGlzYWJsZV9lZGl0b3IodmJwaHJhc2VbJ2NsaWNrX3F1aWNrX3JlcGx5X2lj b24nXSk7DQoNCgkJdmFyIHFyX3NpZyA9IGZldGNoX29iamVjdCgnY2Jfc2lnbmF0 dXJlJyk7DQoJCWlmIChxcl9zaWcgIT0gbnVsbCkNCgkJew0KCQkJcXJfc2lnLmRp c2FibGVkID0gdHJ1ZTsNCgkJfQ0KDQoJCWFjdGl2ZSA9IGZhbHNlOw0KCQlxcl9h Y3RpdmUgPSBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsNCgkJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVudHMoJycpOw0KCQlxcl9hY3RpdmUg PSB0cnVlOw0KCX0NCg0KCWlmICh0aHJlYWRlZF9tb2RlICE9IDEpDQoJew0KCQlm ZXRjaF9vYmplY3QoJ3FyX3F1aWNrcmVwbHknKS5kaXNhYmxlZCA9IHRydWU7DQoJ fQ0KDQp9DQoNCi8qKg0KKiBBY3RpdmF0ZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBx dWljayByZXBseSBzeXN0ZW0NCioNCiogQHBhcmFtCWludGVnZXIJUG9zdCBJRCBv ZiB0aGUgcG9zdCB0byB3aGljaCB3ZSBhcmUgcmVwbHlpbmcNCioNCiogQHJldHVy bglib29sZWFuCWZhbHNlDQoqLw0KZnVuY3Rpb24gcXJfYWN0aXZhdGUocG9zdGlk KQ0Kew0KCXZhciBxcl9jb2xsYXBzZSA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfcXVpY2tyZXBseScpOw0KCWlmIChxcl9jb2xsYXBzZSAmJiBxcl9jb2xsYXBz ZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCXRvZ2dsZV9jb2xsYXBz ZSgncXVpY2tyZXBseScpOw0KCX0NCg0KCWZldGNoX29iamVjdCgncXJfcG9zdGlk JykudmFsdWUgPSBwb3N0aWQ7DQoJZmV0Y2hfb2JqZWN0KCdxcl9wcmV2aWV3Jyku c2VsZWN0KCk7DQoJZmV0Y2hfb2JqZWN0KCdxcl9xdWlja3JlcGx5JykuZGlzYWJs ZWQgPSBmYWxzZTsNCg0KCXZhciBxcl9zaWcgPSBmZXRjaF9vYmplY3QoImNiX3Np Z25hdHVyZSIpOw0KCWlmIChxcl9zaWcpDQoJew0KCQlxcl9zaWcuZGlzYWJsZWQg PSBmYWxzZTsNCgkJLy8gV29ya2Fyb3VuZCBmb3IgMy41IEJ1ZyAjIDE2MTg6IFNl dCBjaGVja2VkIGFzIEZpcmVmb3ggPCAxLjUgImZvcmdldHMiIHRoYXQgd2hlbiBj aGVja2JveCBpcyBkaXNhYmxlZCB2aWEgSlMNCgkJcXJfc2lnLmNoZWNrZWQgPSB0 cnVlOw0KCX0NCg0KCWlmIChxcl9hY3RpdmUgPT0gZmFsc2UpDQoJew0KCQl2Ql9F ZGl0b3JbUVJfRWRpdG9ySURdLmVuYWJsZV9lZGl0b3IoJycpOw0KCX0NCg0KCWlm ICghaXNfaWUgJiYgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGUp DQoJew0KCQlmZXRjaF9vYmplY3QoJ3FyX3Njcm9sbCcpLnNjcm9sbEludG9WaWV3 KGZhbHNlKTsNCgl9DQoNCgl2Ql9FZGl0b3JbUVJfRWRpdG9ySURdLmNoZWNrX2Zv Y3VzKCk7DQoNCglxcl9hY3RpdmUgPSB0cnVlOw0KDQoJcmV0dXJuIGZhbHNlOw0K fQ0KDQovKioNCiogQ2hlY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlcGx5 IGFuZCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IHRvIGFsbG93IGl0IHRocm91Z2gN CioNCiogQHBhcmFtCW9iamVjdAk8Zm9ybT4gb2JqZWN0IGNvbnRhaW5pbmcgcXVp Y2sgcmVwbHkNCiogQHBhcmFtCWludGVnZXIJTWluaW11bSBhbGxvd2VkIGNoYXJh Y3RlcnMgaW4gbWVzc2FnZQ0KKg0KKiBAcmV0dXJuCWJvb2xlYW4NCiovDQpmdW5j dGlvbiBxcl9wcmVwYXJlX3N1Ym1pdChmb3Jtb2JqLCBtaW5jaGFycykNCnsNCglp ZiAocXJfcmVwb3N0ID09IHRydWUpDQoJew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoN CglpZiAoIWFsbG93X2FqYXhfcXIgfHwgIUFKQVhfQ29tcGF0aWJsZSkNCgl7DQoJ CS8vIG5vdCBsYXN0IHBhZ2UsIG9yIHRocmVhZGVkIG1vZGUgLSBkbyBub3QgYXR0 ZW1wdCB0byB1c2UgQUpBWA0KCQlyZXR1cm4gcXJfY2hlY2tfZGF0YShmb3Jtb2Jq LCBtaW5jaGFycyk7DQoJfQ0KCWVsc2UgaWYgKHFyX2NoZWNrX2RhdGEoZm9ybW9i aiwgbWluY2hhcnMpKQ0KCXsNCgkJdmFyIHRlc3RfYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7DQoJCWlmICghdGVzdF9hamF4LmluaXQoKSB8fCAodHlw ZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2Yl9kaXNhYmxl X2FqYXggPiAwKSkNCgkJew0KCQkJLy8gY291bGRuJ3QgaW5pdGlhbGl6ZSwgcmV0 dXJuIHRydWUgdG8gYWxsb3cgY2xpY2sgdG8gZ28gdGhyb3VnaA0KCQkJcmV0dXJu IHRydWU7DQoJCX0NCg0KCQlpZiAoaXNfaWUgJiYgdXNlckFnZW50LmluZGV4T2Yo J21zaWUgNS4nKSAhPSAtMSkNCgkJew0KCQkJLy8gSUUgNSBoYXMgcHJvYmxlbXMg d2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBiZWluZyByZXR1cm5lZCBieQ0KCQkJ Ly8gQUpBWC4gRG9uJ3QgdW5pdmVyc2FsbHkgZGlzYWJsZSBpdCwgYnV0IGlmIHdl J3JlIGdvaW5nIHRvIGJlIHNlbmRpbmcNCgkJCS8vIG5vbi1BU0NJSSwgbGV0J3Mg bm90IHVzZSBBSkFYLg0KCQkJaWYgKFBIUC51cmxlbmNvZGUoZm9ybW9iai5tZXNz YWdlLnZhbHVlKS5pbmRleE9mKCcldScpICE9IC0xKQ0KCQkJew0KCQkJCXJldHVy biB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKHFyX3Bvc3RpbmcgPT0gMSkNCgkJ ew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcXJfcG9z dGluZyA9IDE7DQoJCQlzZXRUaW1lb3V0KCJxcl9wb3N0aW5nID0gMCIsIDEwMDAp Ow0KCQl9DQoNCgkJaWYgKGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZh bHVlKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJ CXZhciBzdWJtaXRzdHJpbmcgPSAnYWpheD0xJzsNCgkJCWlmICh0eXBlb2YgYWph eF9sYXN0X3Bvc3QgIT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJc3VibWl0c3Ry aW5nICs9ICcmYWpheF9sYXN0cG9zdD0nICsgUEhQLnVybGVuY29kZShhamF4X2xh c3RfcG9zdCk7DQoJCQl9DQoNCgkJCWZvciAoaSA9IDA7IGkgPCBmb3Jtb2JqLmVs ZW1lbnRzLmxlbmd0aDsgaSsrKQ0KCQkJew0KCQkJCXZhciBvYmogPSBmb3Jtb2Jq LmVsZW1lbnRzW2ldOw0KDQoJCQkJaWYgKG9iai5uYW1lICYmICFvYmouZGlzYWJs ZWQpDQoJCQkJew0KCQkJCQlzd2l0Y2ggKG9iai50eXBlKQ0KCQkJCQl7DQoJCQkJ CQljYXNlICd0ZXh0JzoNCgkJCQkJCWNhc2UgJ3RleHRhcmVhJzoNCgkJCQkJCWNh c2UgJ2hpZGRlbic6DQoJCQkJCQkJc3VibWl0c3RyaW5nICs9ICcmJyArIG9iai5u YW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpOw0KCQkJCQkJCWJy ZWFrOw0KCQkJCQkJY2FzZSAnY2hlY2tib3gnOg0KCQkJCQkJY2FzZSAncmFkaW8n Og0KCQkJCQkJCXN1Ym1pdHN0cmluZyArPSBvYmouY2hlY2tlZCA/ICcmJyArIG9i ai5uYW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpIDogJyc7DQoJ CQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3Qtb25lJzoNCgkJCQkJCQlz dWJtaXRzdHJpbmcgKz0gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5j b2RlKG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS52YWx1ZSk7DQoJCQkJ CQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3QtbXVsdGlwbGUnOg0KCQkJCQkJ CWZvciAodmFyIGogPSAwOyBqIDwgb2JqLm9wdGlvbnMubGVuZ3RoOyBqKyspDQoJ CQkJCQkJew0KCQkJCQkJCQlzdWJtaXRzdHJpbmcgKz0gKG9iai5vcHRpb25zW2pd LnNlbGVjdGVkID8gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5jb2Rl KG9iai5vcHRpb25zW2pdLnZhbHVlKSA6ICcnKTsNCgkJCQkJCQl9DQoJCQkJCQkJ YnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCWZldGNoX29iamVjdCgn cXJfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJCQlkb2N1bWVu dC5ib2R5LnN0eWxlLmN1cnNvciA9ICd3YWl0JzsNCg0KCQkJcXJfYWpheF9wb3N0 KGZvcm1vYmouYWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9DQoN Ci8qKg0KKiBXb3JrcyB3aXRoIGZvcm0gZGF0YSB0byBkZWNpZGUgd2hhdCB0byBk bw0KKg0KKiBAcGFyYW0Jb2JqZWN0CTxmb3JtPiBvYmplY3QgY29udGFpbmluZyBx dWljayByZXBseQ0KKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFsbG93ZWQgY2hh cmFjdGVycyBpbiBtZXNzYWdlDQoqDQoqIEByZXR1cm4JYm9vbGVhbg0KKi8NCmZ1 bmN0aW9uIHFyX2NoZWNrX2RhdGEoZm9ybW9iaiwgbWluY2hhcnMpDQp7DQoJc3dp dGNoIChmZXRjaF9vYmplY3QoJ3FyX3Bvc3RpZCcpLnZhbHVlKQ0KCXsNCgkJY2Fz ZSAnMCc6DQoJCXsNCgkJCWFsZXJ0KHZicGhyYXNlWydjbGlja19xdWlja19yZXBs eV9pY29uJ10pOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJY2FzZSAnd2hv IGNhcmVzJzoNCgkJew0KCQkJaWYgKHR5cGVvZiBmb3Jtb2JqLnF1aWNrcmVwbHkg IT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJZm9ybW9iai5xdWlja3JlcGx5LmNo ZWNrZWQgPSBmYWxzZTsNCgkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJaWYg KGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZhbHVlKQ0KCXsNCgkJbWlu Y2hhcnMgPSAwOw0KCX0NCg0KCXJldHVybiB2Ql9FZGl0b3JbUVJfRWRpdG9ySURd LnByZXBhcmVfc3VibWl0KDAsIG1pbmNoYXJzKTsNCn0NCg0KLyoqDQoqIFNlbmRz IHF1aWNrIHJlcGx5IGRhdGEgdG8gbmV3cmVwbHkucGhwIHZpYSBBSkFYDQoqDQoq IEBwYXJhbQlzdHJpbmcJR0VUIHN0cmluZyBmb3IgYWN0aW9uIChuZXdyZXBseS5w aHApDQoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHJlcHJlc2VudGluZyBmb3JtIGRh dGEgKCd4PTEmeT0yJno9MycgZXRjLikNCiovDQpmdW5jdGlvbiBxcl9hamF4X3Bv c3Qoc3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpDQp7DQoJcXJfcmVwb3N0ID0g ZmFsc2U7DQoJeG1sID0gbmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsNCgl4bWwu b25yZWFkeXN0YXRlY2hhbmdlKHFyX2RvX2FqYXhfcG9zdCk7DQoJeG1sLnNlbmQo c3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KfQ0KDQovKioNCiogSGFuZGxl cyBxdWljayByZXBseSBkYXRhIHdoZW4gQUpBWCBzYXlzIHFyX2FqYXhfcG9zdCgp IGlzIGNvbXBsZXRlDQoqLw0KZnVuY3Rpb24gcXJfZG9fYWpheF9wb3N0KCkNCnsN CglpZiAoeG1sLmhhbmRsZXIucmVhZHlTdGF0ZSA9PSA0ICYmIHhtbC5oYW5kbGVy LnN0YXR1cyA9PSAyMDApDQoJew0KCQlpZiAoeG1sLmhhbmRsZXIucmVzcG9uc2VY TUwpDQoJCXsNCgkJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8n Ow0KCQkJZmV0Y2hfb2JqZWN0KCdxcl9wb3N0aW5nX21zZycpLnN0eWxlLmRpc3Bs YXkgPSAnbm9uZSc7DQoJCQlxcl9wb3N0aW5nID0gMDsNCg0KCQkJaWYgKGZldGNo X3RhZ19jb3VudCh4bWwuaGFuZGxlci5yZXNwb25zZVhNTCwgJ3Bvc3RiaXQnKSkN CgkJCXsNCgkJCQlhamF4X2xhc3RfcG9zdCA9IHhtbC5mZXRjaF9kYXRhKGZldGNo X3RhZ3MoeG1sLmhhbmRsZXIucmVzcG9uc2VYTUwsICd0aW1lJylbMF0pOw0KCQkJ CXFyX2Rpc2FibGVfY29udHJvbHMoKTsNCgkJCQlxcl9oaWRlX2Vycm9ycygpOw0K DQoJCQkJdmFyIHBvc3RiaXRzID0gZmV0Y2hfdGFncyh4bWwuaGFuZGxlci5yZXNw b25zZVhNTCwgJ3Bvc3RiaXQnKTsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHBv c3RiaXRzLmxlbmd0aDsgaSsrKQ0KCQkJCXsNCgkJCQkJdmFyIG5ld2RpdiA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQkJCQluZXdkaXYuaW5uZXJI VE1MID0geG1sLmZldGNoX2RhdGEocG9zdGJpdHNbaV0pOw0KCQkJCQl2YXIgbHAg PSBmZXRjaF9vYmplY3QoJ2xhc3Rwb3N0Jyk7DQoJCQkJCXZhciBscHBhcmVudCA9 IGxwLnBhcmVudE5vZGU7DQoJCQkJCXZhciBwb3N0Yml0ID0gbHBwYXJlbnQuaW5z ZXJ0QmVmb3JlKG5ld2RpdiwgbHApOw0KDQoJCQkJCVBvc3RCaXRfSW5pdChwb3N0 Yml0LCBwb3N0Yml0c1tpXS5nZXRBdHRyaWJ1dGUoJ3Bvc3RpZCcpKTsNCgkJCQl9 DQoNCgkJCQkvLyB1bmZvY3VzIHRoZSBxcl9zdWJtaXQgYnV0dG9uIHRvIHByZXZl bnQgYSBzcGFjZSBmcm9tIHJlc3VibWl0dGluZw0KCQkJCWlmIChmZXRjaF9vYmpl Y3QoJ3FyX3N1Ym1pdCcpKQ0KCQkJCXsNCgkJCQkJZmV0Y2hfb2JqZWN0KCdxcl9z dWJtaXQnKS5ibHVyKCk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJ CWlmICghaXNfc2FmKQ0KCQkJCXsNCgkJCQkJLy8gdGhpcyBpcyB0aGUgbmljZSBl cnJvciBoYW5kbGVyLCBvZiB3aGljaCBTYWZhcmkgbWFrZXMgYSBtZXNzDQoJCQkJ CXZhciBlcnJvcnMgPSBmZXRjaF90YWdzKHhtbC5oYW5kbGVyLnJlc3BvbnNlWE1M LCAnZXJyb3InKTsNCg0KCQkJCQl2YXIgZXJyb3JfaHRtbCA9ICc8b2w+JzsNCgkJ CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspDQoJCQkJ CXsNCgkJCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgeG1sLmZldGNoX2RhdGEo ZXJyb3JzW2ldKSArICc8L2xpPic7DQoJCQkJCX0NCgkJCQkJZXJyb3JfaHRtbCAr PSAnPC9vbD4nOw0KDQoJCQkJCXFyX3Nob3dfZXJyb3JzKCc8b2w+JyArIGVycm9y X2h0bWwgKyAnPC9vbD4nKTsNCg0KCQkJCQlpZiAoaXNfaWUpDQoJCQkJCXsNCgkJ CQkJCXhtbC5oYW5kbGVyLmFib3J0KCk7DQoJCQkJCX0NCg0KCQkJCQlyZXR1cm4g ZmFsc2U7DQoJCQkJfQ0KDQoJCQkJLy8gdGhpcyBpcyB0aGUgbm90IHNvIG5pY2Ug ZXJyb3IgaGFuZGxlciwgd2hpY2ggaXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBw cmV2aW91cyBvbmUgZG9lc24ndCB3b3JrDQoNCgkJCQlxcl9yZXBvc3QgPSB0cnVl Ow0KCQkJCWZldGNoX29iamVjdCgncXJmb3JtJykuc3VibWl0KCk7DQoJCQl9DQoJ CX0NCgkJZWxzZQ0KCQl7DQoJCQlxcl9yZXBvc3QgPSB0cnVlOw0KCQkJZmV0Y2hf b2JqZWN0KCdxcmZvcm0nKS5zdWJtaXQoKTsNCgkJfQ0KDQoJCWlmIChpc19pZSkN CgkJew0KCQkJLy8gaW4gbXkgdGVzdHMsIEZGIGZyZWFrcyBvdXQgaWYgSSBkbyB0 aGlzIGFib3J0IGNhbGwgaGVyZS4uLg0KCQkJLy8gaG93ZXZlciwgaXQgc2VlbXMg dG8gYmUgbmVjZXNzYXJ5IChpbiBsb2NhbCB0ZXN0cykgZm9yIElFDQoJCQl4bWwu aGFuZGxlci5hYm9ydCgpOw0KCQl9DQoJfQ0KfQ0KDQovKioNCiogVW4taGlkZXMg dGhlIHF1aWNrIHJlcGx5IGVycm9ycyBlbGVtZW50DQoqDQoqIEBwYXJhbQlzdHJp bmcJRXJyb3IocykgdG8gc2hvdw0KKg0KKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UN CiovDQpmdW5jdGlvbiBxcl9zaG93X2Vycm9ycyhlcnJvcnRleHQpDQp7DQoJcXJf ZXJyb3JzX3Nob3duID0gdHJ1ZTsNCglmZXRjaF9vYmplY3QoJ3FyX2Vycm9yX3Rk JykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0Ow0KCWZldGNoX29iamVjdCgncXJfZXJy b3JfdGJvZHknKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS5jaGVja19mb2N1cygpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KLyoq DQoqIEhpZGVzIHRoZSBxdWljayByZXBseSBlcnJvcnMgZWxlbWVudA0KKg0KKiBA cmV0dXJuCWJvb2xlYW4JZmFsc2UNCiovDQpmdW5jdGlvbiBxcl9oaWRlX2Vycm9y cygpDQp7DQoJaWYgKHFyX2Vycm9yc19zaG93bikNCgl7DQoJCXFyX2Vycm9yc19z aG93biA9IHRydWU7DQoJCWZldGNoX29iamVjdCgncXJfZXJyb3JfdGJvZHknKS5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0K DQp2YXIgdkJfUXVpY2tSZXBseSA9IHRydWU7DQoNCi8qPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSpcDQp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgNCnx8ICMgQ1ZTOiAkUkNTZmls ZSQgLSAkUmV2aXNpb246IDI0Mjc2ICQNCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLy8g1ujy4PLgIOL75OXr5e3t 7uPuIPLl6vHy4CDoIO3o6iDiIO7y4uXyIC0gzeD34OvuDQpmdW5jdGlvbiBJbnNl cnQobmlja25hbWUsIHRleHQsIHBvc3RuYikNCnsNCiAgaWYgKHRleHQhPSIiKQ0K ICAgIHBhc3RlKCJbcXVvdGU9IituaWNrbmFtZSsiOyIrcG9zdG5iKyJdIit0ZXh0 KyJbL3F1b3RlXVxuIiwgMCk7DQogICAgZG9jdW1lbnQudmJmb3JtLm1lc3NhZ2Uu Zm9jdXMoKTsNCn0NCmZ1bmN0aW9uIHBhc3RlKHRleHQpDQp7DQogIHZCX0VkaXRv cltRUl9FZGl0b3JJRF0uY2hlY2tfZm9jdXMoKTsNCiAgdmFyIG90ID0gdkJfRWRp dG9yW1FSX0VkaXRvcklEXS5nZXRfZWRpdG9yX2NvbnRlbnRzKCk7DQogIGlmKG90 ICE9ICcnICYmIG90ICE9ICc8UD48L1A+JyAmJiBvdCAhPSAnPFA+Jm5ic3A7PC9Q PicgJiYgb3QgIT0gJzxCUiAvPicpDQogIHsNCiAgICBvdCArPSAodkJfRWRpdG9y W1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGU/Jzxicj4nOidcbicpOw0KICB9DQog IGlmKG90ID09ICc8UD4mbmJzcDs8L1A+JykNCiAgew0KICAgIG90ID0gJyc7DQog IH0NCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVu dHMob3QgKyB0ZXh0LCBmYWxzZSk7DQp9DQpmdW5jdGlvbiBnZXRfc2VsZWN0aW9u KCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlvbikNCiAgew0KICAgIHNl bGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOw0KICAgIHNlbGVjdGlv biA9IHNlbGVjdGlvbi5yZXBsYWNlKC9cclxuXHJcbi9naSwgIl9kb3VibGVjYXJl dF8iKTsNCiAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucmVwbGFjZSgvXHJcbi9n aSwgIiAiKTsNCiAgICB3aGlsZSAoc2VsZWN0aW9uLmluZGV4T2YoIiAgIikgIT0t MSkgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoLyAgL2dpLCAiIik7DQog ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoL19kb3VibGVjYXJldF8v Z2ksICJcclxuXHJcbiIpOw0KICB9DQogIGVsc2UNCiAgICBzZWxlY3Rpb24gPSBk b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Ow0KfQ0KZnVuY3Rp b24gY2F0Y2hTZWxlY3Rpb24oKQ0Kew0KICBpZiAod2luZG93LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50 b1N0cmluZygpOw0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigp Ow0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikNCiAgew0KICAg IHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRl eHQ7DQogIH0NCn0NCmZ1bmN0aW9uIGluc2VydG5pY2sobmlja25hbWUpDQp7DQog IHZhciBvdCA9IHZCX0VkaXRvcltRUl9FZGl0b3JJRF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOw0KICBpZihvdCAhPSAnJyAmJiBvdCAhPSAnPFA+PC9QPicgJiYgb3Qg IT0gJzxQPiZuYnNwOzwvUD4nICYmIG90ICE9ICc8QlIgLz4nKQ0KICB7DQogICAg b3QgKz0gKHZCX0VkaXRvcltRUl9FZGl0b3JJRF0ud3lzaXd5Z19tb2RlPyc8YnI+ JzonXG4nKTsNCiAgfQ0KICBpZihvdCA9PSAnPFA+Jm5ic3A7PC9QPicpDQogIHsN CiAgICBvdCA9ICcnOw0KICB9DQogIG90ICs9IHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0ud3lzaXd5Z19tb2RlPyc8Yj4nICsgbmlja25hbWUgKyAnPC9iPiwgJzonW2Jd JyArIG5pY2tuYW1lICsgJ1svYl0sICc7DQogIHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uY2hlY2tfZm9jdXMoKTsNCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0 ZV9lZGl0b3JfY29udGVudHMob3QsIGZhbHNlKTsNCn0NCi8vINbo8uDy4CDi++Tl 6+Xt7e7j7iDy5erx8uAg6CDt6Oog4iDu8uLl8iAtIMru7eX2 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=collapse_tcat.gif Content-Type: image/gif; name=collapse_tcat.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_tcat.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAOYAADVyM8jix/Pz85HDj+vr6/L48oi/hu7u7s7lzZ3Km+rv6p/L ndDlz5LEkDRxMqjPpvH38c3kzJ3Im/T59JvKmtDj0D+HPafNprDQr8zdzMfhxqfO pZLDkOPn46jPp0ukSf39/KrQqWKsX0udSMveyyZtKOTq5CBqIsrdyXbCcqvQqTd2 NXeqeDyCO5XTkt7x3UKNQDqJO+327ESZQiuALCBdIX6xgCloKOfy51WnUmu3aPX1 9bLdsD2JPtHo0ILJfTp8OJ3Jm2m5ZnTBcS6BL93o3YrLhmS1YfH58bvjuEyhSYvA iTiHOkSRQpirmODn3zN6NkCNPqnXp4rNhun06Y/Cj1GlTnKicjJ3MXnDdWK0X5bK lbzUu8riyVSqUbXNtF2xWmSxYdDjz2m4ZkmRRiJ3JOXt5EqfSTGBM5zIm/D57ylu Kjh3No29i4/QijZ5NM7YzzKDMu3t7UeWRKjOpzaBNc3hzUiVSdzn3Wa1YzB6L3/F fDqEOOnp6fT09P///yH5BAAAAAAALAAAAAAPAA8AAAfXgH2CfRkYEksSGBmDfQQE HRcJCBB/EAwLFx2OB08cAUhJLj9GUjIBHCYHcmkaL24/Q38iYXk+GnQHKBRqU1lH f8BkVjlUFCQbETwpWsAAwDAzVREbAwV7Qs0AQMB8dwUNBiBjYCMtbH9NFitYaCBL 1TpeSnPAfxZRcT3fHghbHx/NgNWhYQOBBzsJcJwB5sDBGwN/SuBJIMZPkABdYqy5 oYfIiRpOuKjY4cdMgwBFrkApw4QFnC9tFPgRIEBBiAUMJvyZcCmEApp+gvqp8GCA gQEPKgj1EwgAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=removeformat.gif Content-Type: image/gif; name=removeformat.gif Content-Location: http://forum.qip.ru/images/editor/removeformat.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP8AAAAA/wAAmf///yH5BAEAAAMALAAAAAAVABQAAAJDnI+p y+0/gArhSHYNrfHdXWUOQA0UIAhQ8KHps5Hu25SGO9CLHQmXjgCFUj4iBHcDLpAW VWPmzBUxngbxioVot1xtAQA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=separator.gif Content-Type: image/gif; name=separator.gif Content-Location: http://forum.qip.ru/images/editor/separator.gif Content-Transfer-Encoding: Base64 R0lGODlhBgAUAIAAAMXCuN/f3yH5BAEAAAEALAAAAAAGABQAAAISTGCJedy8lIuG Pgmnzhz7unkFADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=bold.gif Content-Type: image/gif; name=bold.gif Content-Location: http://forum.qip.ru/images/editor/bold.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAIABAAAAAN/f3yH5BAEAAAEALAAAAAAVABQAAAIkjI+py+0Po0yg 2iqt0ZDz52HdJY7AVjrhaaKsSqbTTNf2jSMFADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=italic.gif Content-Type: image/gif; name=italic.gif Content-Location: http://forum.qip.ru/images/editor/italic.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIglI+p y+0Po2yh1mkqwAJcrnFewAkhNpanZFnlC8fyHBUAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=underline.gif Content-Type: image/gif; name=underline.gif Content-Location: http://forum.qip.ru/images/editor/underline.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIplI+p y+0Po0yhBmEvrIdHj2mbCD5g6ZyiSa5pAAgA+lrTjWQ6zvc+XgAAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=color.gif Content-Type: image/gif; name=color.gif Content-Location: http://forum.qip.ru/images/editor/color.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAQAJEAAICAgAAAgJkzAN/f3yH5BAEAAAMALAAAAAAVABAAAAIqnI+p y53hGgggroBtmrhqk2XfBFIfhooReXSWOnArhHDehbYp/fX+nygAADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=clear.gif Content-Type: image/gif; name=clear.gif Content-Location: http://forum.qip.ru/clear.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAIAAAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=menupop.gif Content-Type: image/gif; name=menupop.gif Content-Location: http://forum.qip.ru/images/editor/menupop.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAQAIABAAAAAN/f3yH5BAEAAAEALAAAAAALABAAAAIPjI+py+0PDZhz 0Qai3jwWADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=createlink.gif Content-Type: image/gif; name=createlink.gif Content-Location: http://forum.qip.ru/images/editor/createlink.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUALMKAAAAgJCdsgCAgMHS7sDAwICAgACAAP///wAA/wAAAN/f3wAA AAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAVABQAAARwUMlJq704y8K7ppxADIOR fEpxEEdgvKbGIStiI2+RFQgRBIAXLobhuWAAQfBUtB1hNuaFd4MZBAippQCoQgG6 TOKWKCcAZm3lnGCxEquVmtJO2wlzCTxRaBPwfQd5CnV2ZnhiboJxiBpphGYokpMY EQA7 ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=insertimage.gif Content-Type: image/gif; name=insertimage.gif Content-Location: http://forum.qip.ru/images/editor/insertimage.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAKIGAMDAwICAAICAgP//AP///wAAAN/f3wAAACH5BAEAAAYALAAA AAAVABQAAANaaLrc/jDKWaq92JVBuO/gUGhhKFQCMTZbyRVBsK1M4XawrGrfdxYC Eal3oy1aL2TIqLC9BCeRc8d6nk4AgJNpsAGh4ELWq/maoWIt94tuY7VljLwyqdvv eEMCADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/images/editor/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP//AAAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJLnI+p yz0BowwtiAuuyJcuy21aZn3dZAmlAo7umqSQGgCyYIa6irNaROv0YiLMa4iQWZa3 nMsISz6LPAZKiVRofras4wD5VsTksqMAADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=resize_1.gif Content-Type: image/gif; name=resize_1.gif Content-Location: http://forum.qip.ru/images/editor/resize_1.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+py50AoVtx MmBVlPnUjmAgWAAAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=smilie.gif Content-Type: image/gif; name=smilie.gif Content-Location: http://forum.qip.ru/images/editor/smilie.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAE1NpgAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJBnI+p y50AoUNQWCsduBy33XUAAwbBZXoKKKSWK4xPSMsUHdoHi6t3SzvFFqWOUPdrmWDI ZG5S4WQmg8iUis1qswUAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=resize_0.gif Content-Type: image/gif; name=resize_0.gif Content-Location: http://forum.qip.ru/images/editor/resize_0.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+pe8BvgIRL WlpxnbpZ14UiUgAAOw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=rating_4.gif Content-Type: image/gif; name=rating_4.gif Content-Location: http://forum.qip.ru/images/rating/rating_4.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPfbAP//y3aRwP//iP//r9uuZHmSvoqYvP/inpaWpPPWV//4rf// uf/hW///nI+Xp///jO7bZaVzG///w//oTuizUpumuOXMZ8qzktuPL3qTwP//Ypmd p6WotP//turQdv//wt2bH///ppGguXyUwe7Ha32VwP//t+HEi4GYwP/qP9DHl5+k rv//e/TRhv//s5tuRf//yv//zn6UvNrDb6t9IouburZ4DbFvD56ksHeSwZZmFc2/ g9bEjZGVqPXaVP//l//bYeKfYf7qTHV6i9q0SLGKXv+4Sf/sjeq1Z///kaltCum7 YtCdZf//vYabwKKem6GLbKefkP//ZHyVwvDLgO3NcXeSwP/RS6ZrBf//m/nlY+Wv a4CVvIOWuujLdrCuovPOb+nPYNqZYP/qnoCXwqR/SPXOf3eSv///yaSlqPXLaaSk p9OwT7iroNnGd///o8yIE97Pg6RnEP//g+TKY6Z7MP/XXoiVtL+LV///zf/oRXmU wqJ/RJ+nuerYbP/tof/yTf/lQ///hP+1R/TSc4WawXuVwv//hoKWvnmSv4mcvpih rqRrEdaNLZhoFeSva4udvpduJ3eFoYqZtKZtEfniX7Gwpf//Zf/mif//x5Obs7us nt/Qgv//rvPIZt7Ea3iIqv/qQqhpDf/rRPDKgf//n+7baahuD8eCEP//scOQWnWR wPbfY4qWsq6Sdv3RT4GYwpSbsv//mZ+BTf/VW6qvrv//sqGAT4SZvv//nfLNgf/w TaZ0Gv//vvbfYNizRq2wrJmhrPjVl//WUn6XwniSwP/ST3uVwXiTwf//z45xWtaN L4OYv///pKKIYpFwVYKZwp2muuzQW4KWv//miv+yRdmZX6+RdImZtvrYmOHLbHOP vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAANsALAAAAAA8AAwAQAj/ALcJHEiwoMBg2AwSXDRJ 4UARDhwKhCixohNASXQRSobnDMFCu5JQAZNHVSKCGYQ8aEECBhMZKFWydAmz4kBO fj6xYSXLmJxIdShBiWOKzi9fWYaJcsQLizMVECwQSdCAwQ0dEZSUgSqVqlWsSm7Z LAgtEKMADmHpOYXMYYAJNkq4hSt3bMEoWnp1eIPJWiyCTyo16dCMmhhNBDf4WGAi xJEgCBIvbvw4sl2BVQhYEVjMTBuCXgig3baK1CaCPCiMGHjiAmrVrF1fJnhlVsVX fCp6oKGb9+yCli6hAuXwixQ4khyu0ABiiHLmzmeT0SYgRqZOc2hVa3TN0BQ3h2Kg gxkgyM6gZa725NjBAgAAFwKAGMFQhNj69u/jzy9ybLa0UrZIMIYyBoWRSyoS/PGM QTP8MMAHCrzAoIMQSvgbMKNsgUgXaghzB0G1hPLINFx4kk0rBFWQAhIGFLDEAT2k uGKLL8Y42xrMEARJNASlgQtBivRBEA41EIQCB0MWOdCRAgUEADs= ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=vbulletin_ajax_threadrate.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_ajax_threadrate.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_ajax_threadrate.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEFk ZHMgb25jbGljayBldmVudHMgdG8gYXBwcm9wcmlhdGUgZWxlbWVudHMgZm9yIHRo cmVhZCByYXRpbmcKKgoqIEBwYXJhbQlzdHJpbmcJVGhlIElEIG9mIHRoZSBmb3Jt IHRoYXQgY29udGFpbnMgdGhlIHJhdGluZyBvcHRpb25zCiovCmZ1bmN0aW9uIHZC X0FKQVhfVGhyZWFkUmF0ZV9Jbml0KGZvcm1pZCkKewoJdmFyIGZvcm1vYmogPSBm ZXRjaF9vYmplY3QoZm9ybWlkKTsKCglpZiAoQUpBWF9Db21wYXRpYmxlICYmICh0 eXBlb2YgdmJfZGlzYWJsZV9hamF4ID09ICd1bmRlZmluZWQnIHx8IHZiX2Rpc2Fi bGVfYWpheCA8IDIpICYmIGZvcm1vYmopCgl7CgkJZm9yICh2YXIgaSA9IDA7IGkg PCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJCXsKCQkJLy9hbGVydCgx KTsKCQkJaWYgKGZvcm1vYmouZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykK CQkJewoJCQkJLy8gcHJldmVudCB0aGUgZm9ybSBmcm9tIHN1Ym1pdHRpbmcgd2hl biBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvbgoJCQkJdmFyIHNidXR0b24gPSBm b3Jtb2JqLmVsZW1lbnRzW2ldOwoJCQkJdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CgkJCQlidXR0b24udHlwZSA9ICdidXR0b24n OwoJCQkJYnV0dG9uLmNsYXNzTmFtZSA9IHNidXR0b24uY2xhc3NOYW1lOwoJCQkJ YnV0dG9uLnZhbHVlICAgICA9IHNidXR0b24udmFsdWU7CgkJCQlidXR0b24ub25j bGljayAgID0gdkJfQUpBWF9UaHJlYWRSYXRlLnByb3RvdHlwZS5mb3JtX2NsaWNr OwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sIHNi dXR0b24pOwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNidXR0 b24pOwoJCQl9CgkJfQoJfQp9OwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHRocmVh ZCByYXRpbmcKKgoqIEBwYXJhbQlvYmplY3QJVGhlIGZvcm0gb2JqZWN0IGNvbnRh aW5pbmcgdGhlIHZvdGUgb3B0aW9ucwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1RocmVh ZFJhdGUoZm9ybW9iaikKewoJLy8gQUpBWCBoYW5kbGVyCgl0aGlzLnhtbF9zZW5k ZXIgPSBudWxsOwoKCS8vIHZCX0hpZGRlbl9Gb3JtIG9iamVjdCB0byBoYW5kbGUg Zm9ybSB2YXJpYWJsZXMKCXRoaXMucHNldWRvZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgndGhyZWFkcmF0ZS5waHAnKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFy aWFibGUoJ2FqYXgnLCAxKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFyaWFibGVz X2Zyb21fb2JqZWN0KGZvcm1vYmopOwoKCS8vIE91dHB1dCBvYmplY3QKCXRoaXMu b3V0cHV0X2VsZW1lbnRfaWQgPSAndGhyZWFkcmF0aW5nX2N1cnJlbnQnOwoKCS8v IENsb3N1cmUKCXZhciBtZSA9IHRoaXM7CgoJLyoqCgkqIE9uUmVhZHlTdGF0ZUNo YW5nZSBjYWxsYmFjay4gVXNlcyBhIGNsb3N1cmUgdG8ga2VlcCBzdGF0ZS4KCSog UmVtZW1iZXIgdG8gdXNlIG1lIGluc3RlYWQgb2YgdGhpcyBpbnNpZGUgdGhpcyBm dW5jdGlvbiEKCSovCgl0aGlzLmhhbmRsZV9hamF4X3Jlc3BvbnNlID0gZnVuY3Rp b24oKQoJewoJCWlmIChtZS54bWxfc2VuZGVyLmhhbmRsZXIucmVhZHlTdGF0ZSA9 PSA0ICYmIG1lLnhtbF9zZW5kZXIuaGFuZGxlci5zdGF0dXMgPT0gMjAwKQoJCXsK CQkJaWYgKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNwb25zZVhNTCkKCQkJewoJ CQkJdmFyIG9iaiA9IGZldGNoX29iamVjdChtZS5vYmppZCk7CgkJCQkvLyBjaGVj ayBmb3IgZXJyb3IgZmlyc3QKCQkJCXZhciBlcnJvciA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ2Vycm9yJylbMF0pOwoJCQkJaWYgKGVycm9yKQoJCQkJewoJCQkJ CS8vIEhpZGUgdGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2 Qm1lbnUuYWN0aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJ CXZCbWVudS5oaWRlKCk7CgkJCQkJfQoJCQkJCWFsZXJ0KGVycm9yKTsKCQkJCX0K CQkJCWVsc2UKCQkJCXsKCQkJCQl2YXIgbmV3cmF0aW5nID0gbWUueG1sX3NlbmRl ci5mZXRjaF9kYXRhKGZldGNoX3RhZ3MobWUueG1sX3NlbmRlci5oYW5kbGVyLnJl c3BvbnNlWE1MLCAndm90ZWF2ZycpWzBdKTsKCQkJCQlpZiAobmV3cmF0aW5nICE9 ICcnKQoJCQkJCXsKCQkJCQkJZmV0Y2hfb2JqZWN0KG1lLm91dHB1dF9lbGVtZW50 X2lkKS5pbm5lckhUTUwgPSBuZXdyYXRpbmc7CgkJCQkJfQoJCQkJCS8vIEhpZGUg dGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2Qm1lbnUuYWN0 aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJCXZCbWVudS5o aWRlKCk7CgkJCQkJfQoKCQkJCQl2YXIgbWVzc2FnZSA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7CgkJCQkJaWYgKG1lc3NhZ2UpCgkJCQkJ ewoJCQkJCQlhbGVydChtZXNzYWdlKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlm IChpc19pZSkKCQkJewoJCQkJbWUueG1sX3NlbmRlci5oYW5kbGVyLmFib3J0KCk7 CgkJCX0KCQl9Cgl9Cn07CgovKioKKiBQbGFjZXMgdGhlIHZvdGUKKi8KdkJfQUpB WF9UaHJlYWRSYXRlLnByb3RvdHlwZS5yYXRlID0gZnVuY3Rpb24oKQp7CglpZiAo dGhpcy5wc2V1ZG9mb3JtLmZldGNoX3ZhcmlhYmxlKCd2b3RlJykgIT0gbnVsbCkK CXsKCQl0aGlzLnhtbF9zZW5kZXIgPSBuZXcgdkJfQUpBWF9IYW5kbGVyKHRydWUp OwoJCXRoaXMueG1sX3NlbmRlci5vbnJlYWR5c3RhdGVjaGFuZ2UodGhpcy5oYW5k bGVfYWpheF9yZXNwb25zZSk7CgkJdGhpcy54bWxfc2VuZGVyLnNlbmQoCgkJCSd0 aHJlYWRyYXRlLnBocD90PScgKyB0aHJlYWRpZCArICcmdm90ZT0nICsgUEhQLnVy bGVuY29kZSh0aGlzLnBzZXVkb2Zvcm0uZmV0Y2hfdmFyaWFibGUoJ3ZvdGUnKSks CgkJCXRoaXMucHNldWRvZm9ybS5idWlsZF9xdWVyeV9zdHJpbmcoKQoJCSk7Cgl9 Cn07CgovKioKKiBIYW5kbGVzIHRoZSBmb3JtICdzdWJtaXQnIGFjdGlvbgoqLwp2 Ql9BSkFYX1RocmVhZFJhdGUucHJvdG90eXBlLmZvcm1fY2xpY2sgPSBmdW5jdGlv bigpCnsKCXZhciBBSkFYX1RocmVhZFJhdGUgPSBuZXcgdkJfQUpBWF9UaHJlYWRS YXRlKHRoaXMuZm9ybSk7CglBSkFYX1RocmVhZFJhdGUucmF0ZSgpOwoJcmV0dXJu IGZhbHNlOwp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAy NHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMTc2NDkg JAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLw== ------------acg8XfHUQdCCWsRCB8dlLi Content-Disposition: inline; filename=collapse_thead.gif Content-Type: image/gif; name=collapse_thead.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_thead.gif Content-Transfer-Encoding: Base64 R0lGODlhDQANAOYAAEGMP4K4d+Ds4EicRlyZXGijZEyhSV+bXjyCO+ry61ytWmii ZDp8OPv9+6fIp2ahYzh3Nm+3baHEobrcuYS5eIe7es72rGGsX831q3+1dMfcx6/b lsbtp/L388btpc/3rI/CgIzAfWisZs72rcTspMfup6vKq464joO4d8TrpLHcl2Kd Y7Lfmd7r3kydSs/3rXi7dYC/funs6ZW5lNvo21+bX0SRQkeWROPl42GcYIzAftHi 0W2kbbvmn2ijZc73rLDOsJrAmM31rMv0qs73rdnn2tXl1XW6c7TZs5DCgFmQWJK7 k/3+/WSeZIrEiMfvqJvBm7rmnny9ep3CnZfJhbLfmJfJhq7WrK/SrWanZYSyhJ7K nWmharLdl7DXr8/2rcbtpjVyM02mS////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAANAA0AAAehgEQfIz0BPgQFAVE/L18W Q1YHUEUdNBI5VBgWQjpaGhMwCkdIOychGCwEGk5iYmMDBjFMK1UUUxOtY7oABl4O FAUCEa5jYbsXCQUHHQpiAwjFYQguDQcLwmIGumMMNsgLKA5XxMZjAFtAARtNDVLP EAwQSjI8G08VS0ZYWTciQTgzKpTgQCJJDQktxggwwQVECg4ewIDpkuEBgQcZVEQE EwgAOw== ------------acg8XfHUQdCCWsRCB8dlLi--