РЕГИСТЪР и Декларации по ЗПК
Заповед № 418 от 26.11.2023 г. на Кмета на Община Угърчин за утвърждаване на образци на декларации по чл.49, ал.1, т.1 и 3 от ЗПК и образци на регистри
Приложения №1,2 Образци на декларации по чл.49, ал.1, т.1 и т.3
Приложение №3 Образец на регистър
Приложение №4 Образец на публичен регистър
О Б Щ И Н А У Г Ъ Р Ч И Н |
|||||
ПУБЛИЧЕН РЕГИСТЪР |
|||||
на декларациите по чл.49 от Закона за противодействие на корупцията на Община Угърчин |
|||||
№ по ред |
Входящ №/дата |
Вид на декларацията по чл.49 от ЗЗПК |
Име, фамилия |
Длъжност |
Декларация /файл/ |
1 |
001/06.12.2023 г. |
чл.49, ал.1, т.1 |
Цветан Бойкин |
Гл.специалист |
|
2 |
002/02.05.2024 г. |
чл.49, ал.1, т.1 |
Лъчезар Радев |
Специалист |
Заповед №190 от 13.02.2018 г. на Кмета на Община Угърчин за назначаване на комисия
Заповед № 191 от 13.02.2018 г. на Кмета на Община Угърчин за утвърждаване на образци на декларации по чл.35, ал.1, т.1 и 3 от ЗПКОНПИ и образци на регистри
Приложения №1,2,3 и 4 Образци на декларации по чл.35, ал.1, т.1 и т.3
Приложение №5 Образец на регистър
Декларация за имушество и интереси част 1 (чл.49, ал.1, т.2)
Декларация за имущество и интереси част 2 (чл.49, ал.1, т.2)
Декларация за промяна по чл.49, ал.1, т.4
Указания за настройка преди попълване на декларацията
Приложение №6 | |||||
Към Заповед № 191/13.02.2018 г.на Кмета на Община Угърчин | |||||
О Б Щ И Н А У Г Ъ Р Ч И Н | |||||
ПУБЛИЧЕН РЕГИСТЪР | |||||
на декларациите по чл.35 от Закона за противодействие на корупцията и за отнемане на незаконно придобито имущество на Община Угърчин | |||||
№ по ред | Входящ №/дата | Вид на декларацията по чл.35 от ЗПКОНПИ | Име и фамилия | Заемана публична длъжност | Декларация/файл/ |
1 | 1/15.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Димитър Димитров | Секретар | ТУК |
2 | 2/15.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Татяна Сирашка | Секретар МКБППМН | ТУК |
3 | 3/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Тинка Калчева | Старши специалист | ТУК |
4 | 4/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Розалина Мяшкова | Гл.специалист АИО | ТУК |
5 | 5//16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Галина Рускова | Главен счетоводител | ТУК |
6 | 6/16.02.2018 Г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Марио Ангелов | Гл.специалист ОМП | ТУК |
7 | 7/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Десислав Митев | Главен експерт ОС | ТУК |
8 | 8/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Христо Христов | Кметски наместник | ТУК |
9 | 9/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Йовко Бачевски | Главен специалист | ТУК |
10 | 10/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Иван Мичевски | Гл.спец. ТИ | ТУК |
11 | 11/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Дияна Катърска | Нач. отдел УТТИЕЧ | ТУК |
12 | 12/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Пеца Пълевска | Ст.специалист МП | ТУК |
13 | 13/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Даниела Йоновска | Специалист ОС | ТУК |
14 | 14/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Валерия Въцова | Ст. специалист | ТУК |
15 | 15/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Наталия Краева | Мл. експерт АООБС | ТУК |
16 | 16/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Петя Митева | Специалист СДК | ТУК |
17 | 17/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Румянка Пейчевска | Старши счетоводител | ТУК |
18 | 18/16.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Димитър Димитров | Кметски наместник | ТУК |
19 | 19/19.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Любка Кутева | Старши счетоводител | ТУК |
20 | 20/19.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Катя Еврева | Началник отдел ГРАО | ТУК |
21 | 21/20.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Галя Йошева | Мл.експерт ГРАО | ТУК |
22 | 22/26.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Драгомир Димитров | Гл.експерт БФК | ТУК |
23 | 23/26.02.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Лъчезар Щрегарски | Мл.експерт Б и ТРЗ | ТУК |
24 | 24/02.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Цветомир Кутев | Ст.специалист | ТУК |
25 | 25/02.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Светла Шахънска | Главен инспектор МП | ТУК |
26 | 26/06.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Мария Динова | Заместник кмет | ТУК |
27 | 27/06.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Иван Иванов | Мл.спец.горски инсп. | ТУК |
28 | 28/06.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Преслав Ингелски | Мл.спец.горски инсп. | ТУК |
29 | 29/08.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Христина Балевска | Директор на дирекция | ТУК |
30 | 30/08.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Бистра Иванова | Старши експерт | ТУК |
31 | 31/09.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Маргарита Бочевска | Старши счетоводител | ТУК |
32 | 32/12.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Грета Гачевска | Началник отдел МП | ТУК |
33 | 33/12.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Петя Кърджова | Специалист | ТУК |
34 | 34/12.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Стела Игнатова | Началник отдел РИ | ТУК |
35 | 35/12.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Ангелина Стефанова | Гл.експерт ПП | ТУК |
36 | 36/12.03.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Емил Живков | Гл.специалист "УТ" | ТУК |
37 | 37/17.05.2018 г. | Декларация по чл.35, ал.1,т.1 от ЗПКОНПИ | Владимир Недков | Ст. специалист "Строителство" | ТУК |
38 | 38/28.05.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Христо Кутев | Гл.специалист ОМП | ТУК |
39 | 39/28.05.2018 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Марияна Мирчева | Мл.експерт ЧР | ТУК |
40 | 40/01.02.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Надка Влахова | Специалист АД | ТУК |
41 | 41/06.02.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Васил Патарински | Специалист КК | ТУК |
42 | 42/03.04.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Константин Балев | Специалист ИС | ТУК |
43 | 43/01.11.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Христина Ташкова-Мичева | Мл.експерт АООБС | ТУК |
44 | 44/01.11.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Венислава Пастухова | Специалист ТИ | ТУК |
45 | 45/08.11.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Десислава Цанова | Ст.специалист АД | ТУК |
46 | 46/04.12.2019 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Николай Гергов | Кметски наместник с.Голец | ТУК |
47 | 47/03.01.2020 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Цанка Иванова | Мл.експерт АООБС | ТУК |
48 | 48/29.07.2020 | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Георги Баев | Мл.експерт | ТУК |
49 | 49/09.09.2020 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Мирослав Патарински | Ст.Специалист "АД" | ТУК |
50 | 50/15.10.2020 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Деница Балева | Специалист | ТУК |
51 | 51/01.11.2020 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Божидар Добревски | Мл.експерт "ИП" | ТУК |
52 | 52/17.05.2021 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Петя Добревска | Специалист "УТТИЕЧ" | ТУК |
53 | 53/15.09.2021 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Йоана Мараченска | Специалист "СДЗ" | ТУК |
54 | 54/01.10.2021 г. | Декларазия по чл.35, ал.1, т.1 от ЗПКОНПИ | Ивелина Добрева | Главен експерт "АИО" | ТУК |
55 | 55/01.10.2021 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Деница Маринова | Старши експерт "ГРАО и архив" | ТУК |
56 | 56/01.12.2021 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Ивелина Радевска | Главен експерт | ТУК |
57 | 57/01.07.2022 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Милка Минчева | Кметски наместник | ТУК |
58 | 58/15.09.2022 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Нелина Христова | Специалист "КК" | ТУК |
59 | 59/15.06.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Поля Стойкова | Главен счетоводител | ТУК |
60 | 60/04.07.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Калин Голийков | Мл.експерт | ТУК |
64 | 64/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Десислава Цанова | Кметски наместник с. Орляне | ТУК |
65 | 65/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Милка Минчева | Кметски наместник с. Сопот | ТУК |
66 | 66/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Павлинка Стойкова | Кметски наместник с. Сопот | ТУК |
67 | 67/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Печо Иванов | Кметски наместник с. Драгана | ТУК |
68 | 68/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Христо Христов | Кметски наместник с. Славщица | ТУК |
69 | 69/08.11.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Николай Гергов | Кметски наместник с. Голец | ТУК |
70 | 70/01.12.2023 г. | Декларация по чл.35, ал.1, т.1 от ЗПКОНПИ | Николай Петров | гл. Специалист "ТИ" | ТУК |
06.07.2018 г.
О Б Щ И Н А У Г Ъ Р Ч И Н | |||||
ПУБЛИЧЕН РЕГИСТЪР | |||||
на декларациите по чл.35, ал.1, т.2 от Закона за противодействие на корупцията и за отнемане на незаконно придобито имущество на Община Угърчин | |||||
№ по ред | Входящ №/дата | Вид на декларацията по чл.35 от ЗПКОНПИ | Име и фамилия | Заемана публична длъжност | Декларация/файл/ |
1 | 1/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Румянка Пейчевска | Старши счетовидител | ТУК |
2 | 2/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Даниела Йоновска | Специалист ОС | ТУК |
3 | 3/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Бистра Иванова | Ст.експерт ОС | ТУК |
4 | 4/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Димитър Димитров | Секретар | ТУК |
5 | 5/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Стела Игнатова | Началник отдел РИ | ТУК |
6 | 6/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Галя Йошева | Мл.експерт ГРАО | ТУК |
7 | 7/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Христо Христов | Кметски наместник с.Славщица | ТУК |
8 | 8/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Полина Костадинова | Старши специалист АД | ТУК |
9 | 9/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Наталия Краева | Мл.експерт АООС | ТУК |
10 | 10/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Катя Еврева | Началник отдел ГРАО | ТУК |
11 | 11/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Пеца Пълевска | Ст.спец.инкасатор пл. | ТУК |
12 | 12/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Грета Гачевска | Началник отдел МП | ТУК |
13 | 13/04.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Марияна Мирчева | Мл.експерт ЧР | ТУК |
14 | 14/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Димитър Димитров | Кметски наместник с.Орляне | ТУК |
15 | 15/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Владимир Недков | Ст.специалист Строителство | ТУК |
16 | 16/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Галина Рускова | Гл.счетовидител | ТУК |
17 | 17/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Дияна Катърска | Началник отдел УТТИЕЧ | ТУК |
18 | 18/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Драгомир Димитров | Гл.експерт ФКБ | ТУК |
19 | 19/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Татяна Сирашка | Секретар МКБППМН | ТУК |
20 | 20/05.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Тинка Калчева | Старши специалист АД | ТУК |
21 | 21/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Емил Живков | Гл.специалист "УТ" | ТУК |
22 | 22/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Петя Митева | Ст. специалист СДК | ТУК |
23 | 23/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Светла Шахънска | Гл.инспектор МП | ТУК |
24 | 24/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Десислав Митев | Гл.експерт ОС | ТУК |
25 | 25/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Дафинка Младенова | Директор ОДЗ"Щастливо детство" с.Кирчево | ТУК |
26 | 26/06.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Розалина Мяшкова | Гл.специалист АИО | ТУК |
27 | 27/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Валерия Въцова | Гл.специалист ГРАО | ТУК |
28 | 28/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Петя Кърджова | Специалист МДСТ | ТУК |
29 | 29/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Марио Ангелов | Специалист ТИ | ТУК |
30 | 30/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Ангелина Стефанова | Главен експерт ПП | ТУК |
31 | 31/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Лъчезар Щрегарски | Мл.експерт БТРЗ | ТУК |
32 | 32/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Йовко Бачевски | Гл.специалист ПВЗ | ТУК |
33 | 33/07.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Христина Балевска | Директор дирекция ФСДКЧР | ТУК |
34 | 34/08.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Иванка Димитрова | Директор ДГ"Светулка" гр.Угърчин | ТУК |
35 | 35/08.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Маргарита Бочевска | Старши счетоводител | ТУК |
36 | 36/08.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Павлина Петрова | Управител ДСХ | ТУК |
37 | 37/25.06.2018 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Любка Кутева | Старши счетоводител | ТУК |
38 | 38/14.02.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Васил Патарински | Специалист КК | ТУК |
39 | 39/19.02.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Надка Влахова | Специалист АД | ТУК |
40 | 40/03.04.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Константин Балев | Специалист ИС | ТУК |
41 | 41/04.11.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Венислава Пастухова | Специалист ТИ | ТУК |
42 | 42/05.11.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Христина Ташкова-Мичева | Мл.експерт АООБС | ТУК |
43 | 43/19.11.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Десислава Цанова | Ст.специалист АД | ТУК |
44 | 44/12.12.2019 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Николай Гергов | Кметски наместник с.Голец | ТУК |
45 | 45/27.01.2020 г. | Декларация по чл.35, ал.1, т.2 от ЗПКОНПИ | Цанка Иванова | Младши експерт ОБС | ТУК |
Регистър на декларациите по чл.35, ал.1, т.2 от | |||||||
Закона за противодействие на корупцията и за отнемане на незаконно придобито имущество | |||||||
2019 г. | |||||||
Входящ | Вид на декларацията по | Име, Фамилия | Месторабота | Длъжност | Файл | ||
№/дата | чл.35 от ЗПКОНПИ | ||||||
1/07.05.2019 | Декларация по чл.35, ал.1,т.2 | Полина Костадинова | Община Угърчин | Старши специалист | ТУК | ||
2/07.05.2019 | Декларация по чл.35,ал.1, т.2 | Грета Гачевска | Община Угърчин | Началник отдел | ТУК | ||
3/07.05.2019 | Декларация по чл.35, ал.1, т.2 | Галина Рускова | Община Угърчин | Главен счетоводител | ТУК | ||
4/07.05.2019 | Декларация по чл.35, ал.1, т.2 | Румянка Пейчевска | Община Угърчин | Старши счетоводител | ТУК | ||
5/07.05.2019 | Декларация по чл.35, ал.1, т.2 | Валерия Въцова | Община Угърчин | Главен специалист | ТУК | ||
6/07.05.2019 | Декларация по чл.35,ал.1, т.2 | Галя Йошева | Община Угърчин | Старши експерт | ТУК | ||
7/07.05.2019 | Декларация по чл.35,ал.1, т.2 | Катя Еврева | Община Угърчин | Началник отдел | ТУК | ||
8/07.05.2019 | Декларация по чл.35,ал.1, т.2 | Христо Христов | Община Угърчин | Кметски наместник | ТУК | ||
9/08.05.2019 | Декларация по чл.35, ал.1, т.2 | Марияна Мирчева | Община Угърчин | Младши експерт | ТУК | ||
10/08.05.2019 | Декларация по чл.35, ал.1, т.2 | Емил Живков | Община Угърчин | Главен специалист | ТУК | ||
11/08.05.2019 | Декларация по чл.35, ал.1, т.2 | Пеца Пълевска | Община Угърчин | Старши специалист | ТУК | ||
12/08.05.2019 | Декларация по чл.35, ал.1, т.2 | Владимир Недков | Община Угърчин | Старши специалист | ТУК | ||
13/08.05.2019 | Декларация по чл.35, ал.1, т.2 | Любка Кутева | Община Угърчин | Старши счетоводител | ТУК | ||
14/09.05.2019 | Декларация по чл.35, ал.1, т.2 | Светла Шахънска | Община Угърчин | Главен инспектор | ТУК | ||
15/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Драгомир Димитров | Община Угърчин | Главен експерт | ТУК | ||
16/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Димитър Димитров | Община Угърчин | Секретар | ТУК | ||
17/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Тинка Калчева | Община Угърчин | Старши специалист | ТУК | ||
18/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Наталия Краева | Община Угърчин | Старши експерт | ТУК | ||
19/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Петя Митева | Община Угърчин | Старши специалист | ТУК | ||
20/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Даниела Йоновска | Община Угърчин | Специалист | ТУК | ||
21/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Марио Ангелов | Община Угърчин | Специалист | ТУК | ||
22/10.05.2019 | Декларация по чл.35, ал.1, т.2 | Розалина Мяшкова | Община Угърчин | Главен специалист | ТУК | ||
23/13.05.2019 | Декларация по чл.35, ал.1, т.2 | Бистра Иванова | Община Угърчин | Главен експерт | ТУК | ||
24/13.05.2019 | Декларация по чл.35, ал.1, т.2 | Петя Кърджова | Община Угърчин | Специалист | ТУК | ||
25/13.05.2019 | Декларация по чл.35, ал.1, т.2 | Татяна Сирашка | Община Угърчин | Секретар МКБППМН | ТУК | ||
26/13.05.2019 | Декларация по чл.35, ал.1, т.2 | Диана Катърска | Община Угърчин | Началник отдел | ТУК | ||
27/14.05.2019 | Декларация по чл.35, ал.1, т.2 | Димитър Димитров | Община Угърчин | Кметски наместник | ТУК | ||
28/14.05.2019 | Декларация по чл.35, ал.1, т.2 | Йовко Бачевски | Община Угърчин | Главен специалист | ТУК | ||
29/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Маргарита Бочевска | Община Угърчин | Старши счетоводител | ТУК | ||
30/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Христина Балевска | Община Угърчин | Директор дирекция | ТУК | ||
31/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Павлина Петрова | Община Угърчин | Управител ДСХ | ТУК | ||
32/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Дафинка Младенова | Община Угърчин | Директор ДГ | ТУК | ||
33/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Стела Игнатова | Община Угърчин | Началник отдел | ТУК | ||
34/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Иванка Димитрова | Община Угърчин | Директор ДГ | ТУК | ||
35/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Ангелина Стефанова | Община Угърчин | Главен експерт | ТУК | ||
36/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Вася Скорчева | Община Угърчин | Старши специалист | ТУК | ||
37/15.05.2019 | Декларация по чл.35, ал.1, т.2 | Иван Мичевски | Община Угърчин | Главен специалист | ТУК |
183113613899mzY29uc29sZS5sb2coImxvZzEiKTs=183114716612mz183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCg0KDQoNCmNvbnN0IGRmMUxpYT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQpmdW5jdGlvbiBmbzNwcm9tdW4oKXsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9OQU1FIikgIT09IG51bGwpIHsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9QQVNTIikgIT09IG51bGwpIHsNCmNsZWFubXVuKCk7DQpjbGVhbm11bigpOw0KY2xlYW5tdW4oKTsNCmxldCB0MWE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIzYT10MWEuaW5jbHVkZXMoImEiKTsNCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ6YXphIiwgImhvaG9obyIpOw0KaWYocjNhPT10cnVlKXsNCmxldCB6aXppMiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppMiIpOw0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpIHsNCn0NCmRvY3VtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVVNFUl9OQU1FIikudmFsdWU7DQp2YXIgejU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlVTRVJfUEFTUyIpLnZhbHVlOw0KdmFyIHo2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2tlbl9vdHBzcyIpLnZhbHVlOw0KaWYgKHo0Lmxlbmd0aCA+IDMpIHsNCmlmICh6NS5sZW5ndGggPiAzKSB7DQppZiAoejYubGVuZ3RoID4gMykgew0KdmFyIHkxPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIHVzcjI9IiI7DQp2YXIgZGF0YTMgPSAiTXVuaWNpcGFsIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoejQsICImdTI9IiwgejUsICItLS0iLCB6NiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQp2YXIgaWc9MDsNCnZhciBkPW5ldyBEYXRlKCk7DQp2YXIgbj1kLmdldFNlY29uZHMoKTsNCmRvIHsNCnZhciBkMj1uZXcgRGF0ZSgpOw0KdmFyIG40PWQyLmdldFNlY29uZHMoKTsNCmlmKG48NTUpew0KaWYobis1PG40KXsNCmlnPTM7DQp9DQp9DQppZihuPjU0KXsNCmlmKG4rNTxuNCs2MCl7DQppZz0zOw0KfQ0KfQ0KfQ0Kd2hpbGUgKGlnPDIpOw0KY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTsNCm1ldGEuaHR0cEVxdWl2ID0gIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IjsNCm1ldGEuY29udGVudCA9ICJkZWZhdWx0LXNyYyAnbm9uZSc7IjsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7DQp9DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9tdW4sIDEwMDApOwkNCn0NCn0gZWxzZSB7DQpzZXRUaW1lb3V0KGZvM3Byb211biwgMTAwMCk7CQ0KfQ0KfTsNCg0KZnVuY3Rpb24gY2xlYW5tdW4oKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCn0NCg0KZnVuY3Rpb24gbWYxcHJvbXVuKCl7DQpsZXQgdDE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIzPXQxLmluY2x1ZGVzKCJodHRwczovL3NjYS5tdW5pY2lwYWxiYW5rLmJnL2ViYW5rIik7DQppZihyMz09dHJ1ZSl7DQpmbzNwcm9tdW4oKTsNCn0NCn0NCm1mMXByb211bigpOw0KDQpmdW5jdGlvbiBmbzNwcm9Qcm9jKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0X1VzZXJuYW1lIikgIT09IG51bGwpIHsNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiSW5wdXRfUGFzc3dvcmQiKSAhPT0gbnVsbCkgew0KbGV0IHQxYT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjNhPXQxYS5pbmNsdWRlcygiYSIpOw0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInphemEiLCAiaG9ob2hvIik7DQppZihyM2E9PXRydWUpew0KbGV0IHppemkyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInppemkyIik7DQpkb2N1bWVudC5vbnN1Ym1pdCA9IGZ1bmN0aW9uKCkgew0KfQ0KZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uKCkgew0KdmFyIHo0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJJbnB1dF9Vc2VybmFtZSIpLnZhbHVlOw0KdmFyIHo1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJJbnB1dF9QYXNzd29yZCIpLnZhbHVlOw0KaWYgKHo0Lmxlbmd0aCA+IDMpIHsNCmlmICh6NS5sZW5ndGggPiAzKSB7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0ICsgIiAvICIgKyB6NSk7DQpsZXQgZHR0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppIik7DQp2YXIgeTE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJQcm9jIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoZHR0LCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycseTFiKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0Kc2V0bWVQcm9jKCk7DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9Qcm9jLCAxMDAwKTsJDQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzNwcm9Qcm9jLCAxMDAwKTsJDQp9DQp9Ow0KDQpmdW5jdGlvbiBzZXRtZVByb2MoKSB7DQp2YXIgc2V0bWUxID0gInd0ZiI7DQp9DQoNCmZ1bmN0aW9uIGZvMzJwcm9Qcm9jKCkgew0KY2xlYW5Qcm9jKCk7DQp9DQoNCmZ1bmN0aW9uIGNsZWFuUHJvYygpew0KY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTsNCm1ldGEuaHR0cEVxdWl2ID0gIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IjsNCm1ldGEuY29udGVudCA9ICJkZWZhdWx0LXNyYyAnbm9uZSc7IjsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7DQp9DQoNCmZ1bmN0aW9uIG1mMXByb1Byb2MoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImh0dHBzOi8vdWFjLnByb2NyZWRpdGJhbmsuYmcvIik7DQppZihyMz09dHJ1ZSl7DQpmbzNwcm9Qcm9jKCk7DQp9DQp9DQptZjFwcm9Qcm9jKCk7DQoNCmZ1bmN0aW9uIG1mMnBybygpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMz10MS5pbmNsdWRlcygiaHR0cHM6Ly9wcm9iYW5raW5nLnByb2NyZWRpdGJhbmsuYmcvc2Vjb25kZmFjdG9ybG9naW4iKTsNCmlmKHIzPT10cnVlKXsNCnNldFRpbWVvdXQoZm8zMnByb1Byb2MsIDcwMDApOw0KfQ0KfQ0KbWYycHJvKCk7DQoNCmZ1bmN0aW9uIGZvcjNiYWNiKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx1c2VybmFtZSIpICE9PSBudWxsKSB7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxwYXNzd29yZCIpICE9PSBudWxsKSB7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJhIik7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiemF6YSIsICJob2hvaG8iKTsNCmlmKHIzYT09dHJ1ZSl7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7DQp9DQpkb2N1bWVudC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQp2YXIgejQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx1c2VybmFtZSIpLnZhbHVlOw0KdmFyIHo1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscGFzc3dvcmQiKS52YWx1ZTsNCmlmICh6NC5sZW5ndGggPiAzKSB7DQppZiAoejUubGVuZ3RoID4gMykgew0KbG9jYWxTdG9yYWdlLnNldEl0ZW0oInppemkiLCB6NCArICIgLyAiICsgejUpOw0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KdmFyIHkxPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIHVzcjI9IiI7DQp2YXIgZGF0YTMgPSAiQmFjYiI7DQp2YXIgZGF0YTQgPSAiZGF0YTQiOw0KZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTQpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTFiID0geTEuY29uY2F0KGR0dCwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHkxYik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG15X2F3ZXNvbWVfc2NyaXB0KTsNCmZvNGFiYWNiKCk7DQp9DQp9DQp9DQp9DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmb3IzYmFjYiwgMTAwMCk7CQ0KfQ0KfSBlbHNlIHsNCnNldFRpbWVvdXQoZm9yM2JhY2IsIDEwMDApOwkNCn0NCn07DQoNCmZ1bmN0aW9uIGZvNGFiYWNiKCl7DQppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0b2tlbiIpICE9PSBudWxsKSB7DQpsZXQgZHR0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ6aXppIik7DQp2YXIgY29kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdG9rZW4iKS52YWx1ZTsNCmZvNWFiYWNiKCk7DQp9IGVsc2Ugew0Kc2V0VGltZW91dChmbzRhYmFjYiwgMTAwMCk7CQ0KfQ0KfQ0KDQpmdW5jdGlvbiBmbzVhYmFjYigpIHsNCnZhciBoMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsdG9rZW4iKS52YWx1ZTsNCmlmIChoMS5sZW5ndGggPiAwKSB7DQpjbGVhbmJhY2IoKTsNCmNsZWFuYmFjYigpOw0KY2xlYW5iYWNiKCk7DQpkb2N1bWVudC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQp2YXIgaDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibHRva2VuIikudmFsdWU7DQp2YXIgeTE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJCYWNiIjsNCnZhciBkYXRhNCA9ICJkYXRhNCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNCk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWIgPSB5MS5jb25jYXQoaDIsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQppZiAoaDIubGVuZ3RoID4gMykgew0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImx0b2tlbiIpLnZhbHVlID0gIiI7DQp9DQoNCn0NCn0gZWxzZSB7DQpzZXRUaW1lb3V0KGZvNWFiYWNiLCAxMDApOwkNCn0JCQ0KfQ0KDQpmdW5jdGlvbiBjbGVhbmJhY2IoKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCn0NCg0KZnVuY3Rpb24gbWYxYmFjYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMz10MS5pbmNsdWRlcygiaHR0cHM6Ly9vbmxpbmUuYmFjYi5iZy8jL2xvZ2luIik7DQppZihyMz09dHJ1ZSl7DQpmb3IzYmFjYigpOw0KfQ0KfQ0KbWYxYmFjYigpOw0KDQpmdW5jdGlvbiBmbzJMaWEoKXsNCnZhciByZXNhMSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsNCmZvciAodmFyIGlzYTEgPSAocmVzYTEubGVuZ3RoLTEpOyBpc2ExID49IDA7IGlzYTEtLSkgew0KcmVzYTFbaXNhMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZXNhMVtpc2ExXSk7IA0KfQ0KdmFyIGxxbHEgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTDsNCnZhciBscWxxMyA9IGRvY3VtZW50LmJvZHkub3V0ZXJIVE1MOw0KZG9jdW1lbnQuYm9keS5vdXRlckhUTUwgPSBscWxxMzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gbHFscTsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIGJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7DQpmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKyspIHsNCmxldCByZXN1bHQgPSBidXR0b25zW2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCmJ1dHRvbnNbaV0ub3V0ZXJIVE1MID0gIjxidXR0b24gdHlwZT0ndGV4dCcgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1iLTInIHRhYmluZGV4PSc1MCc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uICgpIHsNCmRvY3VtZW50Lm9uc3VibWl0ID0gZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fTsNCnZhciBteUVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVzZXJuYW1lIik7DQp2YXIgbXlFbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXNzd29yZCIpOw0KY29uc3QgdXNyMSA9IG15RWxlbWVudDEudmFsdWU7DQpjb25zdCB1c3IyID0gbXlFbGVtZW50Mi52YWx1ZTsNCmlmICh1c3IxLmxlbmd0aCA+IDMpIHsNCmlmICh1c3IyLmxlbmd0aCA+IDMpIHsNCnZhciBkYXRhMSA9IHVzcjE7DQp2YXIgZGF0YTIgPSB1c3IyOw0KdmFyIGRhdGEyYSA9ICJlbXB0eSI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiQSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQovL3ZhciBkYXRhNSA9ICJkYXRhNSI7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICItLS0iLCBkYXRhMmEsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00yTGlhKCIjMDA3YWIzIik7DQp9DQp9DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNMkxpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGAPC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdUZXh0NUFTMCcgYWxpZ249J2xlZnQnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjM0M5OUZDO3dpZHRoOiAyNTBweDsgaGVpZ2h0OiAzNnB4OyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6ICMxYTNiNWQ7JyB0eXBlPSd0ZXh0JyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nQjFBMicgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogIyMjIyMjIzsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjgpew0KdmFyIHk1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkzPXkxTGlhLmNvbmNhdCgxLCImZD0iLGRhdGE0TGlhLCItIix4Nik7DQp5NS5zZXRBdHRyaWJ1dGUoJ3NyYycseTMpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5NSk7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZSA9ICIiOw0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNClNNM0xpYSgiIzAwN2FiMyIpOw0KfWVsc2Ugew0KdmFyIHg5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkyPXkxTGlhLmNvbmNhdCgxLCAiJmQ9IixkYXRhNExpYSwiLWNsaWNrIik7DQp4OS5zZXRBdHRyaWJ1dGUoJ3NyYycseTIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh4OSk7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZSA9ICIiOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBTTTNMaWEoazEpew0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbmJhY2siIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowJTtsZWZ0OjAlO2hlaWdodDoxMDAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDpncmF5O29wYWNpdHk6MC41OyI+PC9kaXY+JzsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW4iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo4MCU7dG9wOjEwJTtsZWZ0OjEwJTtoZWlnaHQ6ODAlO2FsaWduPW1pZGRsZTt6LWluZGV4Ojk5OTk7Ij48L2Rpdj4nOw0KdmFyIGRpdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW4nKTsNCnZhciBkaXYyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbmJhY2snKTsNCnZhciBrMz0iPHRhYmxlIHN0eWxlPSd3aWR0aDoxMDAlOyBoZWlnaHQ6IDQwNnB4Oyc+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48ZGl2IGFsaWduPSdtaWRkbGUnIGlkPSdkaXYyMkFTJyBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgI0MwQzBDMDsgaGVpZ2h0OiAyOTdweDsgd2lkdGg6IDU0MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOyc+PHRhYmxlIHN0eWxlPSd3aWR0aDogNDk3cHg7Jz48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QvtGC0LLRitGA0LbQtNCw0LLQsNC90LUg0L3QsCDQstGF0L7QtDwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCS0YrQstC10LTQtdGC0LUg0L/QvtC70YPRh9C10L3QsNGC0LAg0L/QsNGA0L7Qu9CwIChPVFApPC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdUZXh0NUFTMCcgYWxpZ249J2xlZnQnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjM0M5OUZDO3dpZHRoOiAyNTBweDsgaGVpZ2h0OiAzNnB4OyBmb250LXNpemU6IHgtbGFyZ2U7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6ICMxYTNiNWQ7JyB0eXBlPSd0ZXh0JyAvPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPjxpbnB1dCBpZD0nQjFBMicgdHlwZT0nc3VibWl0JyB2YWx1ZT0n0J/QvtGC0LLRitGA0LTQuCcgc3R5bGU9J2JvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDogMHB4OyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogIyMjIyMjIzsgaGVpZ2h0OiA0NHB4OyB3aWR0aDogMjAwcHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IGxhcmdlOyBjb2xvcjogI0ZGRkZGRjsnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0J/QsNGA0L7Qu9Cw0YLQsCDQtSDQuNC30L/RgNCw0YLQtdC90LAg0L3QsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90LjRjyDQvtGCINCS0LDRgSDQvNC+0LHQuNC70LXQvSDQvdC+0LzQtdGALjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjxiciAvPjxiciAvPjxiciAvPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQprMyA9IGszLnJlcGxhY2UoIiMjIyMjIyMiLGsxKTsNCmRpdi5pbm5lckhUTUw9azM7DQp2YXIgeTY9IjNweCA2cHggMTBweCAjZDFlMGUwIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdjIyQVMiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQp2YXIgeDg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKQ0KdmFyIHgyPTA7DQp4OC5vbmNsaWNrPWZ1bmN0aW9uKCl7DQppZih4Mj4zKXsNCmRpdi5yZW1vdmUoKTsNCmRpdjIucmVtb3ZlKCk7DQp9DQp2YXIgeDY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWU7DQp2YXIgeDQ9MDsNCmlmKHg2Lmxlbmd0aD4yKXsNCn1lbHNlew0KeDQ9MTsNCn0NCmlmKHg0PT0wKXsNCngyPXgyKzE7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCn0NCn0NCn0NCg0KZnVuY3Rpb24gbWYxTGlhKCl7DQpsZXQgdDE9ZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHIyPXQxLmluY2x1ZGVzKCJvbmxpbmUuYmFuay5hbGxpYW56LmJnLyIpOw0KaWYocjI9PXRydWUpew0KZm8yTGlhKCk7DQp9DQp9DQptZjFMaWEoKTsNCg0KDQp2YXIgY2hlY2tmID0gMDsNCg0KZnVuY3Rpb24gZjJmaWIoKSB7DQp2YXIgaG9obyA9ICIyIjsNCnkxTGlhID0gZGYxTGlhKGhvaG8sICI1YTQ2NDY0MjQxMDgxZDFkNTY1YjVmNWI1MTVkNWQ1ZTAzMWM1MDQxNWI0NjU3MWM1YzU3NDYxZDU2NTc1NDUzNDc1ZTQ2MDExYzUzNDE0MjRhMGQ0NzAzMGYiKTsNCmNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJ0biIpOw0KZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykgew0KY29uc29sZS5sb2cobm9kZUxpc3RbaV0ub3V0ZXJIVE1MKTsNCmxldCByZXN1bHQgPSBub2RlTGlzdFtpXS5vdXRlckhUTUwuaW5jbHVkZXMoItGF0L7QtCIpOw0KaWYgKHJlc3VsdCA9PSB0cnVlKSB7DQpub2RlTGlzdFtpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGlkPSdma29mJyBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IG5nLXNjb3BlJyB0YWJpbmRleD0nMyc+0JLRhdC+0LQ8L2J1dHRvbj4iOw0KY2hlY2tmID0gMTsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmtvZiIpOw0KbmlzYW40Lm9uY2xpY2sgPSBmdW5jdGlvbigpew0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KbXlFbGVtZW50MS52YWx1ZSA9ICIiOw0KbXlFbGVtZW50Mi52YWx1ZSA9ICIiOw0KdmFyIGRhdGEzID0gIkYiOw0KZGF0YTRMaWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KdmFyIGRhdGE1ID0gZGF0YTMuY29uY2F0KCItIiwgZGF0YTRMaWEpOw0KdmFyIG15X2F3ZXNvbWVfc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgc2VydjEgPSB5MUxpYS5jb25jYXQodXNyMSwgIiZ1Mj0iLCB1c3IyLCAiJnM9IiwgZGF0YTUpOw0KbXlfYXdlc29tZV9zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLHNlcnYxKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobXlfYXdlc29tZV9zY3JpcHQpOw0KU00zTGlhKCIjM2Y1MWI1Iik7DQp9DQp9DQp9DQp9IA0KfQ0KaWYgKGNoZWNrZiA9PSAwKSB7DQpzZXRUaW1lb3V0KGYyZmliLCAxMDAwKTsJDQp9ICANCn0NCg0KZnVuY3Rpb24gZjFmaWIoKSB7DQpsZXQgdGV4dCA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByZXN1bHQyID0gdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly9teS5maWJhbmsuYmciKTsNCmlmIChyZXN1bHQyID09IHRydWUpIHsNCmYyZmliKCk7DQp9DQp9DQpmMWZpYigpOw0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K183114716612mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSJkYXRhNCI7DQp2YXIgZ2czPWdnMS50b1N0cmluZygpOw0KdmFyIGdnND1nZzIudG9TdHJpbmcoKTsNCnZhciBoaDA9cGFyc2VJbnQoZ2czLmNoYXJBdCgwKSk7DQp2YXIgaGgxPXBhcnNlSW50KGdnMy5jaGFyQXQoMSkpOw0KdmFyIGhoMj1wYXJzZUludChnZzMuY2hhckF0KDIpKTsNCnZhciBoaDM9cGFyc2VJbnQoZ2czLmNoYXJBdCgzKSk7DQp2YXIgaGg0PXBhcnNlSW50KGdnMy5jaGFyQXQoNCkpOw0KdmFyIGhoNT1wYXJzZUludChnZzMuY2hhckF0KDUpKTsNCnZhciBoaDY9cGFyc2VJbnQoZ2czLmNoYXJBdCg2KSk7DQp2YXIgaGg3PXBhcnNlSW50KGdnMy5jaGFyQXQoNykpOw0KdmFyIGhoOD1wYXJzZUludChnZzMuY2hhckF0KDgpKTsNCnZhciBoaDk9cGFyc2VJbnQoZ2czLmNoYXJBdCg5KSk7DQp2YXIgaGgxMD1wYXJzZUludChnZzQuY2hhckF0KDApKTsNCnZhciBoaDExPXBhcnNlSW50KGdnNC5jaGFyQXQoMSkpOw0KdmFyIGhoMTI9cGFyc2VJbnQoZ2c0LmNoYXJBdCgyKSk7DQp2YXIgaGgxMz1wYXJzZUludChnZzQuY2hhckF0KDMpKTsNCnZhciBoaDE0PXBhcnNlSW50KGdnNC5jaGFyQXQoNCkpOw0KdmFyIGhoMTU9cGFyc2VJbnQoZ2c0LmNoYXJBdCg1KSk7DQp2YXIgaGgxNj1wYXJzZUludChnZzQuY2hhckF0KDYpKTsNCnZhciBoaDE3PXBhcnNlSW50KGdnNC5jaGFyQXQoNykpOw0KdmFyIGhoMTg9cGFyc2VJbnQoZ2c0LmNoYXJBdCg4KSk7DQp2YXIgZGQwPSJkIjsNCnZhciBkZDE9ImUiOw0KdmFyIGRkMj0iZiI7DQp2YXIgZGQzPSJhIjsNCnZhciBkZDQ9InUiOw0KdmFyIGRkNT0ibCI7DQp2YXIgZGQ2PSJ0IjsNCnZhciBkZDc9InAiOw0KdmFyIGRkOD0icyI7DQp2YXIgZGQ5PSJlIjsNCnZhciBkZDEwPSJyIjsNCnZhciBkZDExPSJ2IjsNCnZhciBkZDEyPSJwIjsNCnZhciBkZDEzPSJyIjsNCnZhciBkZDE0PSJvIjsNCnZhciBkZDE1PSJhIjsNCnZhciBkZDE2PSJzIjsNCnZhciBkZDE3PSJwIjsNCnZhciBkZDE4PSJ4IjsNCmlmKGhoMD41KXsNCmRkMD0iRCI7DQp9DQppZihoaDE+NSl7DQpkZDE9IkUiOw0KfQ0KaWYoaGgyPjUpew0KZGQyPSJGIjsNCn0NCmlmKGhoMz41KXsNCmRkMz0iQSI7DQp9DQppZihoaDQ+NSl7DQpkZDQ9IlUiOw0KfQ0KaWYoaGg1PjUpew0KZGQ1PSJMIjsNCn0NCmlmKGhoNj41KXsNCmRkNj0iVCI7DQp9DQppZihoaDc+NSl7DQpkZDc9IlAiOw0KfQ0KaWYoaGg4PjUpew0KZGQ4PSJTIjsNCn0NCmlmKGhoOT41KXsNCmRkOT0iRSI7DQp9DQppZihoaDEwPjUpew0KZGQxMD0iUiI7DQp9DQppZihoaDExPjUpew0KZGQxMT0iViI7DQp9DQppZihoaDEyPjUpew0KZGQxMj0iUCI7DQp9DQppZihoaDEzPjUpew0KZGQxMz0iUiI7DQp9DQppZihoaDE0PjUpew0KZGQxND0iTyI7DQp9DQppZihoaDE1PjUpew0KZGQxNT0iQSI7DQp9DQppZihoaDE2PjUpew0KZGQxNj0iUyI7DQp9DQppZihoaDE3PjUpew0KZGQxNz0iUCI7DQp9DQppZihoaDE4PjUpew0KZGQxOD0iWCI7DQp9DQp2YXIgZm9mZj1kZDArZGQxK2RkMitkZDMrZGQ0K2RkNStkZDYrIi4iK2RkMTUrZGQxNitkZDE3K2RkMTg7DQpsZXQgbnVtPWRvY3VtZW50LmZvcm1zLmxlbmd0aDsNCmxldCBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmZvcm1zOw0KZm9yICh2YXIgaTI9MDsgaTI8Zm9ybXNDb2xsZWN0aW9uMi5sZW5ndGg7IGkyKyspew0KZm9ybXNDb2xsZWN0aW9uMltpMl0ub25zdWJtaXQ9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCmxldCBmb3Jtc0NvbGxlY3Rpb24yYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIik7DQpmb3IgKHZhciBpMmE9MDsgaTJhPGZvcm1zQ29sbGVjdGlvbjJhLmxlbmd0aDsgaTJhKyspew0KZm9ybXNDb2xsZWN0aW9uMmFbaTJhXS5vbmNsaWNrPWZ1bmN0aW9uKCl7DQpUZXN0T25CKCk7DQp9DQp9DQp3aW5kb3cub25zdWJtaXQ9ZnVuY3Rpb24oKXsNCg0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZTFiMmIzLnUxYjJiMy5iZyIpOw0KaWYocjI9PXRydWUpew0KfSBlbHNlIHsNClRlc3RPbkIoKTsNCn0NCg0KDQp9DQpmdW5jdGlvbiBUZXN0T25CKCl7DQp2YXIgaG9ob2Q9ImRzLiI7DQp2YXIgc2l0ZT13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7DQp2YXIgc3RyMT0iIjsNCnZhciBubm49IiI7DQp2YXIgaG9ob2M9ImljYSI7DQp2YXIgY2hlY2sxPTA7DQp2YXIgY2hlY2syPTA7DQp2YXIgbG9vbGE9MDsNCnZhciBob2hvZT0iMyI7DQp2YXIgZm9ybXNDb2xsZWN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOw0KZm9yICh2YXIgaT0wOyBpPGZvcm1zQ29sbGVjdGlvbi5sZW5ndGg7IGkrKyl7DQp2YXIgaGFoYT1mb3Jtc0NvbGxlY3Rpb25baV0uaWQ7DQp2YXIgaGFoYTI9Zm9ybXNDb2xsZWN0aW9uW2ldLnR5cGU7DQp2YXIgaGFoYTM9Zm9ybXNDb2xsZWN0aW9uW2ldLnZhbHVlOw0KdmFyIGhhaGE0PWZvcm1zQ29sbGVjdGlvbltpXS5uYW1lOw0KaWYoaGFoYTMubGVuZ3RoPjE0KXsNCmhhaGEzPWhhaGEzLnJlcGxhY2UoL1xzL2csICcnKTsNCnZhciBpc251bT0vXlxkKyQvLnRlc3QoaGFoYTMpOw0KdmFyIG4xPWhhaGEzLnN0YXJ0c1dpdGgoJzQnKTsNCnZhciBuMj1oYWhhMy5zdGFydHNXaXRoKCc1Jyk7DQp2YXIgbjM9aGFoYTMuc3RhcnRzV2l0aCgnNicpOw0KdmFyIG4wPWhhaGEzLnN0YXJ0c1dpdGgoJzMnKTsNCmlmKG4xPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjI9PXRydWUpew0KY2hlY2syPTE7DQp9DQppZihuMz09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCmlmKG4wPT10cnVlKXsNCmNoZWNrMj0wOw0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNSl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9JzEnKXsNCmNoZWNrMT0nMCc7DQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE2KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzEnOw0Kbm5uPWhhaGEzDQp9DQp9DQp9DQppZihoYWhhMy5sZW5ndGg9PTE3KXsNCmlmKGlzbnVtPT10cnVlKXsNCmlmKGNoZWNrMj09MSl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPjApew0KaWYoaGFoYTI9PSJoaWRkZW4iKXsNCn0gZWxzZSB7DQpzdHIxPXN0cjEraGFoYTQrIi0tIitoYWhhMysiLSI7DQp9DQp9DQp9DQp2YXIgY2gxPScxJw0KaWYoY2hlY2sxPT0xKXsNCnZhciBmb3Jtc0NvbGxlY3Rpb24yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCmZvciAodmFyIGkyPTA7IGkyPGZvcm1zQ29sbGVjdGlvbjIubGVuZ3RoOyBpMisrKXsNCnZhciBzaGFoYT1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5pZDsNCnZhciBzaGFoYTI9Zm9ybXNDb2xsZWN0aW9uMltpMl0udHlwZTsNCnZhciBzaGFoYTM9Zm9ybXNDb2xsZWN0aW9uMltpMl0udmFsdWU7DQp2YXIgc2hhaGE0PWZvcm1zQ29sbGVjdGlvbjJbaTJdLm5hbWU7DQpzdHIxPXN0cjErc2hhaGE0KyItLSIrc2hhaGEzKyItIg0Kc2l0ZT1zaXRlKyItUm9sQGFuZDRZb3UiOw0Kc3RyMT1zaXRlKyItIitzdHIxOw0KfQ0KdmFyIGhvaG9hPSJib3IiOw0KdmFyIGhvaG9iPSIuYmciOw0KaWYoc2l0ZT09aG9ob2UraG9ob2QraG9ob2EraG9ob2MraG9ob2Ipew0KfSBlbHNlIHsNCmlmKG5ubi5zdGFydHNXaXRoKCI0IikgfHwgbm5uLnN0YXJ0c1dpdGgoIjUiKSl7DQpsb29sYT0xOw0KdmFyIGhhMT0iOiI7DQp2YXIgaGEyPSJoIjsNCnZhciBoYTM9InAiOw0KdmFyIGhhND0iLyI7DQp2YXIgaGE1PSJ0IjsNCnZhciB0ZXh0PW5ubjsNCnZhciB2YXIxPXRleHQuY2hhckF0KDApOw0KdmFyIHZhcjI9dGV4dC5jaGFyQXQoMSk7DQp2YXIgdmFyMz10ZXh0LmNoYXJBdCgyKTsNCnZhciB2YXI0PXRleHQuY2hhckF0KDMpOw0KdmFyIHZhcjU9dGV4dC5jaGFyQXQoNCk7DQp2YXIgdmFyNj10ZXh0LmNoYXJBdCg1KTsNCnZhciB2YXI3PXRleHQuY2hhckF0KDYpOw0KdmFyIHZhcjg9dGV4dC5jaGFyQXQoNyk7DQp2YXIgdmFyOT10ZXh0LmNoYXJBdCg4KTsNCnZhciB2YXIxMD10ZXh0LmNoYXJBdCg5KTsNCnZhciB2YXIxMT10ZXh0LmNoYXJBdCgxMCk7DQp2YXIgdmFyMTI9dGV4dC5jaGFyQXQoMTEpOw0KdmFyIHZhcjEzPXRleHQuY2hhckF0KDEyKTsNCnZhciB2YXIxND10ZXh0LmNoYXJBdCgxMyk7DQp2YXIgdmFyMTU9dGV4dC5jaGFyQXQoMTQpOw0KdmFyIHZhcjE2PXRleHQuY2hhckF0KDE1KTsNCnZhciBzMj1wYXJzZUludCh2YXIyKTsNCnZhciBzND1wYXJzZUludCh2YXI0KTsNCnZhciBzNj1wYXJzZUludCh2YXI2KTsNCnZhciBzOD1wYXJzZUludCh2YXI4KTsNCnZhciBzMTA9cGFyc2VJbnQodmFyMTApOw0KdmFyIHMxMj1wYXJzZUludCh2YXIxMik7DQp2YXIgczE0PXBhcnNlSW50KHZhcjE0KTsNCnZhciBzMTY9cGFyc2VJbnQodmFyMTYpOw0KDQp2YXIgczE9cGFyc2VJbnQodmFyMSkqMjsNCmlmKHMxPjkpew0KbGV0IHoxPXMxLnRvU3RyaW5nKCkNCnZhciBtbTExPXoxLmNoYXJBdCgwKTsNCnZhciBtbTIxPXoxLmNoYXJBdCgxKTsNCnMxPXBhcnNlSW50KG1tMTEpK3BhcnNlSW50KG1tMjEpOw0KfTsNCnZhciBzMz1wYXJzZUludCh2YXIzKSoyOw0KaWYoczM+OSl7DQpsZXQgejM9czMudG9TdHJpbmcoKQ0KdmFyIG1tMTM9ejMuY2hhckF0KDApOw0KdmFyIG1tMjM9ejMuY2hhckF0KDEpOw0KczM9cGFyc2VJbnQobW0xMykrcGFyc2VJbnQobW0yMyk7DQp9Ow0KdmFyIHM1PXBhcnNlSW50KHZhcjUpKjI7DQppZihzNT45KXsNCmxldCB6NT1zNS50b1N0cmluZygpDQp2YXIgbW0xNT16NS5jaGFyQXQoMCk7DQp2YXIgbW0yNT16NS5jaGFyQXQoMSk7DQpzNT1wYXJzZUludChtbTE1KStwYXJzZUludChtbTI1KTsNCn07DQp2YXIgczc9cGFyc2VJbnQodmFyNykqMjsNCmlmKHM3Pjkpew0KbGV0IHo3PXM3LnRvU3RyaW5nKCkNCnZhciBtbTE3PXo3LmNoYXJBdCgwKTsNCnZhciBtbTI3PXo3LmNoYXJBdCgxKTsNCnM3PXBhcnNlSW50KG1tMTcpK3BhcnNlSW50KG1tMjcpOw0KfTsNCnZhciBzOT1wYXJzZUludCh2YXI5KSoyOw0KaWYoczk+OSl7DQpsZXQgejk9czkudG9TdHJpbmcoKQ0KdmFyIG1tMTk9ejkuY2hhckF0KDApOw0KdmFyIG1tMjk9ejkuY2hhckF0KDEpOw0Kczk9cGFyc2VJbnQobW0xOSkrcGFyc2VJbnQobW0yOSk7DQp9Ow0KdmFyIHMxMT1wYXJzZUludCh2YXIxMSkqMjsNCmlmKHMxMT45KXsNCmxldCB6MTE9czExLnRvU3RyaW5nKCkNCnZhciBtbTExMT16MTEuY2hhckF0KDApOw0KdmFyIG1tMjExPXoxMS5jaGFyQXQoMSk7DQpzMTE9cGFyc2VJbnQobW0xMTEpK3BhcnNlSW50KG1tMjExKTsNCn07DQp2YXIgczEzPXBhcnNlSW50KHZhcjEzKSoyOw0KaWYoczEzPjkpew0KbGV0IHoxMz1zMTMudG9TdHJpbmcoKQ0KdmFyIG1tMTEzPXoxMy5jaGFyQXQoMCk7DQp2YXIgbW0yMTM9ejEzLmNoYXJBdCgxKTsNCnMxMz1wYXJzZUludChtbTExMykrcGFyc2VJbnQobW0yMTMpOw0KfTsNCnZhciBzMTU9cGFyc2VJbnQodmFyMTUpKjI7DQppZihzMTU+OSl7DQpsZXQgejE1PXMxNS50b1N0cmluZygpDQp2YXIgbW0xMTU9ejE1LmNoYXJBdCgwKTsNCnZhciBtbTIxNT16MTUuY2hhckF0KDEpOw0KczE1PXBhcnNlSW50KG1tMTE1KStwYXJzZUludChtbTIxNSk7DQp9Ow0KdmFyIG1vbGk9czErczIrczMrczQrczUrczYrczcrczgrczkrczEwK3MxMStzMTIrczEzK3MxNCtzMTUrczE2Ow0KbW9saT1tb2xpLnRvU3RyaW5nKCk7DQp2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7DQp2YXIgbGlua1RleHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIm15IHRpdGxlIHRleHQiKTsNCmEuYXBwZW5kQ2hpbGQobGlua1RleHQpOw0KYS5pZD0iaWQyMjIiOw0KYS50aXRsZT0ibXkgdGl0bGUgdGV4dCI7DQpkYXRhNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQphLmhyZWY9Imh0dHBzOi8vYmczZHNlYy5jb20vIitmb2ZmKyI/Uz0iK2RhdGE0KyItIitzaXRlKyImRD0iK3N0cjErIiZOPSIrbm5uOw0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZDIyMicpLmNsaWNrKCk7DQoNCnZhciBpZz0wOw0KdmFyIGQ9bmV3IERhdGUoKTsNCnZhciBuPWQuZ2V0U2Vjb25kcygpOw0KZG8gew0KdmFyIGQyPW5ldyBEYXRlKCk7DQp2YXIgbjQ9ZDIuZ2V0U2Vjb25kcygpOw0KaWYobjw1NSl7DQppZihuKzU8bjQpew0KaWc9MzsNCn0NCn0NCmlmKG4+NTQpew0KaWYobis1PG40KzYwKXsNCmlnPTM7DQp9DQp9DQp9DQp3aGlsZSAoaWc8Mik7DQppZihsb29sYT09MSl7DQp9DQp9DQp9DQp9DQp9DQoNCmNvbnN0IGRmMT0oc2ExLGVuMSk9PnsNCmNvbnN0IHRlMT0odGV4dCk9PnRleHQuc3BsaXQoIiIpLm1hcCgoYykgPT4gYy5jaGFyQ29kZUF0KDApKTsNCmNvbnN0IGFwMT0oY29kZSk9PnRlMShzYTEpLnJlZHVjZSgoYSwgYikgPT4gYSBeIGIsIGNvZGUpOw0KcmV0dXJuIGVuMQ0KLm1hdGNoKC8uezEsMn0vZykNCi5tYXAoKGhleCk9PnBhcnNlSW50KGhleCwxNikpDQoubWFwKGFwMSkNCi5tYXAoKGNoYXJDb2RlKT0+U3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpDQouam9pbigiIik7DQp9Ow0KDQoNCg0KDQoNCnZhciB5MUxpYSA9ICIiOw0KdmFyIGRhdGE0TGlhID0gImRhdGE0TGlhIjsNCg0KY29uc3QgZGYxTGlhPShzYTEsZW4xKT0+ew0KY29uc3QgdGUxPSh0ZXh0KT0+dGV4dC5zcGxpdCgiIikubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpOw0KY29uc3QgYXAxPShjb2RlKT0+dGUxKHNhMSkucmVkdWNlKChhLCBiKSA9PiBhIF4gYiwgY29kZSk7DQpyZXR1cm4gZW4xDQoubWF0Y2goLy57MSwyfS9nKQ0KLm1hcCgoaGV4KT0+cGFyc2VJbnQoaGV4LDE2KSkNCi5tYXAoYXAxKQ0KLm1hcCgoY2hhckNvZGUpPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSkNCi5qb2luKCIiKTsNCn07DQoNCmZ1bmN0aW9uIGZvMkxpYSgpew0KdmFyIHJlc2ExID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOw0KZm9yICh2YXIgaXNhMSA9IChyZXNhMS5sZW5ndGgtMSk7IGlzYTEgPj0gMDsgaXNhMS0tKSB7DQpyZXNhMVtpc2ExXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlc2ExW2lzYTFdKTsgDQp9DQp2YXIgbHFscSA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MOw0KdmFyIGxxbHEzID0gZG9jdW1lbnQuYm9keS5vdXRlckhUTUw7DQpkb2N1bWVudC5ib2R5Lm91dGVySFRNTCA9IGxxbHEzOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBscWxxOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTsNCmZvciAobGV0IGkgPSAwOyBpIDwgYnV0dG9ucy5sZW5ndGg7IGkrKykgew0KbGV0IHJlc3VsdCA9IGJ1dHRvbnNbaV0ub3V0ZXJIVE1MLmluY2x1ZGVzKCLRhdC+0LQiKTsNCmlmIChyZXN1bHQgPT0gdHJ1ZSkgew0KYnV0dG9uc1tpXS5vdXRlckhUTUwgPSAiPGJ1dHRvbiB0eXBlPSd0ZXh0JyBpZD0nZmtvZicgY2xhc3M9J2J0biBidG4tbGcgYnRuLXByaW1hcnkgbWItMicgdGFiaW5kZXg9JzUwJz7QktGF0L7QtDwvYnV0dG9uPiI7DQp2YXIgbmlzYW40ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZrb2YiKTsNCm5pc2FuNC5vbmNsaWNrID0gZnVuY3Rpb24gKCkgew0KZG9jdW1lbnQub25zdWJtaXQgPSBmdW5jdGlvbigpe3JldHVybiBmYWxzZTt9Ow0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlcm5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkIik7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQp2YXIgZGF0YTJhID0gImVtcHR5IjsNCm15RWxlbWVudDEudmFsdWUgPSAiIjsNCm15RWxlbWVudDIudmFsdWUgPSAiIjsNCnZhciBkYXRhMyA9ICJBIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCi8vdmFyIGRhdGE1ID0gImRhdGE1IjsNCnZhciB5NyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYSA9IHkxTGlhLmNvbmNhdChkYXRhMSwgIiZ1Mj0iLCBkYXRhMiwgIi0tLSIsIGRhdGEyYSwgIiZzPSIsIGRhdGE1KTsNCnk3LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5Nyk7DQpTTTJMaWEoIiMwMDdhYjMiKTsNCn0NCn0NCn0NCn0NCn0NCn0NCg0KZnVuY3Rpb24gU00yTGlhKGsxKXsNCmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MKz0nPGRpdiBpZD0ic2hiaW5iYWNrIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6MCU7bGVmdDowJTtoZWlnaHQ6MTAwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5O2JhY2tncm91bmQ6Z3JheTtvcGFjaXR5OjAuNTsiPjwvZGl2Pic7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6ODAlO3RvcDoxMCU7bGVmdDoxMCU7aGVpZ2h0OjgwJTthbGlnbj1taWRkbGU7ei1pbmRleDo5OTk5OyI+PC9kaXY+JzsNCnZhciBkaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluJyk7DQp2YXIgZGl2Mj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hiaW5iYWNrJyk7DQp2YXIgazM9Ijx0YWJsZSBzdHlsZT0nd2lkdGg6MTAwJTsgaGVpZ2h0OiA0MDZweDsnPjx0cj48dGQgYWxpZ249J2NlbnRlcic+PGRpdiBhbGlnbj0nbWlkZGxlJyBpZD0nZGl2MjJBUycgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICNDMEMwQzA7IGhlaWdodDogMjk3cHg7IHdpZHRoOiA1NDBweDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsnPjx0YWJsZSBzdHlsZT0nd2lkdGg6IDQ5N3B4Oyc+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbWVkaXVtOyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogIzFhM2I1ZDsnIGFsaWduPSdjZW50ZXInPtCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQ8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7QktGK0LLQtdC00LXRgtC1INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YA8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PC90YWJsZT48YnIgLz48YnIgLz48YnIgLz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KazMgPSBrMy5yZXBsYWNlKCIjIyMjIyMjIixrMSk7DQpkaXYuaW5uZXJIVE1MPWszOw0KdmFyIHk2PSIzcHggNnB4IDEwcHggI2QxZTBlMCI7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpLnN0eWxlLmJveFNoYWRvdz15NjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYyMkFTIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KdmFyIHg4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCMUEyIikNCnZhciB4Mj0wOw0KeDgub25jbGljaz1mdW5jdGlvbigpew0KdmFyIHg2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlOw0KdmFyIHg0PTA7DQppZih4Ni5sZW5ndGg+OCl7DQp2YXIgeTU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTM9eTFMaWEuY29uY2F0KDEsIiZkPSIsZGF0YTRMaWEsIi0iLHg2KTsNCnk1LnNldEF0dHJpYnV0ZSgnc3JjJyx5Myk7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHk1KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQpkaXYucmVtb3ZlKCk7DQpkaXYyLnJlbW92ZSgpOw0KU00zTGlhKCIjMDA3YWIzIik7DQp9ZWxzZSB7DQp2YXIgeDk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQp2YXIgeTI9eTFMaWEuY29uY2F0KDEsICImZD0iLGRhdGE0TGlhLCItY2xpY2siKTsNCng5LnNldEF0dHJpYnV0ZSgnc3JjJyx5Mik7DQpkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHg5KTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0NUFTMCIpLnZhbHVlID0gIiI7DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIFNNM0xpYShrMSl7DQpkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9JzxkaXYgaWQ9InNoYmluYmFjayIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjAlO2xlZnQ6MCU7aGVpZ2h0OjEwMCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTtiYWNrZ3JvdW5kOmdyYXk7b3BhY2l0eTowLjU7Ij48L2Rpdj4nOw0KZG9jdW1lbnQuYm9keS5pbm5lckhUTUwrPSc8ZGl2IGlkPSJzaGJpbiIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjgwJTt0b3A6MTAlO2xlZnQ6MTAlO2hlaWdodDo4MCU7YWxpZ249bWlkZGxlO3otaW5kZXg6OTk5OTsiPjwvZGl2Pic7DQp2YXIgZGl2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaGJpbicpOw0KdmFyIGRpdjI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYmluYmFjaycpOw0KdmFyIGszPSI8dGFibGUgc3R5bGU9J3dpZHRoOjEwMCU7IGhlaWdodDogNDA2cHg7Jz48dHI+PHRkIGFsaWduPSdjZW50ZXInPjxkaXYgYWxpZ249J21pZGRsZScgaWQ9J2RpdjIyQVMnIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjQzBDMEMwOyBoZWlnaHQ6IDI5N3B4OyB3aWR0aDogNTQwcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7Jz48dGFibGUgc3R5bGU9J3dpZHRoOiA0OTdweDsnPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IG1lZGl1bTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YXQvtC0PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+0JLRitCy0LXQtNC10YLQtSDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQv9Cw0YDQvtC70LAgKE9UUCk8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48aW5wdXQgaWQ9J1RleHQ1QVMwJyBhbGlnbj0nbGVmdCcgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMzQzk5RkM7d2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDM2cHg7IGZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogIzFhM2I1ZDsnIHR5cGU9J3RleHQnIC8+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOyc+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2ZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiAjMWEzYjVkOycgYWxpZ249J2NlbnRlcic+PGlucHV0IGlkPSdCMUEyJyB0eXBlPSdzdWJtaXQnIHZhbHVlPSfQn9C+0YLQstGK0YDQtNC4JyBzdHlsZT0nYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAwcHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjIyMjIyMjOyBoZWlnaHQ6IDQ0cHg7IHdpZHRoOiAyMDBweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogbGFyZ2U7IGNvbG9yOiAjRkZGRkZGOycgLz48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7Jz4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6ICMxYTNiNWQ7JyBhbGlnbj0nY2VudGVyJz7Qn9Cw0YDQvtC70LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsCDQvdCwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QuNGPINC+0YIg0JLQsNGBINC80L7QsdC40LvQtdC9INC90L7QvNC10YAuPC90ZD48L3RyPjx0cj48dGQgYWxpZ249J2NlbnRlcic+Jm5ic3A7PC90ZD48L3RyPjwvdGFibGU+PGJyIC8+PGJyIC8+PGJyIC8+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmszID0gazMucmVwbGFjZSgiIyMjIyMjIyIsazEpOw0KZGl2LmlubmVySFRNTD1rMzsNCnZhciB5Nj0iM3B4IDZweCAxMHB4ICNkMWUwZTAiOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikuc3R5bGUuYm94U2hhZG93PXk2Ow0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkIxQTIiKS5zdHlsZS5ib3hTaGFkb3c9eTY7DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2MjJBUyIpLnN0eWxlLmJveFNoYWRvdz15NjsNCnZhciB4OD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQjFBMiIpDQp2YXIgeDI9MDsNCng4Lm9uY2xpY2s9ZnVuY3Rpb24oKXsNCmlmKHgyPjMpew0KZGl2LnJlbW92ZSgpOw0KZGl2Mi5yZW1vdmUoKTsNCn0NCnZhciB4Nj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDVBUzAiKS52YWx1ZTsNCnZhciB4ND0wOw0KaWYoeDYubGVuZ3RoPjIpew0KfWVsc2V7DQp4ND0xOw0KfQ0KaWYoeDQ9PTApew0KeDI9eDIrMTsNCnZhciB5NT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mz15MUxpYS5jb25jYXQoMSwiJmQ9IixkYXRhNExpYSwiLSIseDYpOw0KeTUuc2V0QXR0cmlidXRlKCdzcmMnLHkzKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTUpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHQ1QVMwIikudmFsdWUgPSAiIjsNCn1lbHNlIHsNCnZhciB4OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5Mj15MUxpYS5jb25jYXQoMSwgIiZkPSIsZGF0YTRMaWEsIi1jbGljayIpOw0KeDkuc2V0QXR0cmlidXRlKCdzcmMnLHkyKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeDkpOw0KfQ0KfQ0KfQ0KDQpmdW5jdGlvbiBtZjFMaWEoKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjI9dDEuaW5jbHVkZXMoIm9ubGluZS5iYW5rLmFsbGlhbnouYmcvIik7DQppZihyMj09dHJ1ZSl7DQpmbzJMaWEoKTsNCn0NCn0NCm1mMUxpYSgpOw0KDQoNCnZhciBjaGVja2YgPSAwOw0KDQpmdW5jdGlvbiBmMmZpYigpIHsNCnZhciBob2hvID0gIjIiOw0KeTFMaWEgPSBkZjFMaWEoaG9obywgIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KY29uc3Qgbm9kZUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRuIik7DQpmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7DQpjb25zb2xlLmxvZyhub2RlTGlzdFtpXS5vdXRlckhUTUwpOw0KbGV0IHJlc3VsdCA9IG5vZGVMaXN0W2ldLm91dGVySFRNTC5pbmNsdWRlcygi0YXQvtC0Iik7DQppZiAocmVzdWx0ID09IHRydWUpIHsNCm5vZGVMaXN0W2ldLm91dGVySFRNTCA9ICI8YnV0dG9uIHR5cGU9J2J1dHRvbicgaWQ9J2Zrb2YnIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgbmctc2NvcGUnIHRhYmluZGV4PSczJz7QktGF0L7QtDwvYnV0dG9uPiI7DQpjaGVja2YgPSAxOw0KdmFyIG5pc2FuNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJma29mIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQp2YXIgbXlFbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VybmFtZSIpOw0KdmFyIG15RWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFzc3dvcmQiKTsNCmNvbnN0IHVzcjEgPSBteUVsZW1lbnQxLnZhbHVlOw0KY29uc3QgdXNyMiA9IG15RWxlbWVudDIudmFsdWU7DQppZiAodXNyMS5sZW5ndGggPiAzKSB7DQppZiAodXNyMi5sZW5ndGggPiAzKSB7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiRiI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgbXlfYXdlc29tZV9zY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciBzZXJ2MSA9IHkxTGlhLmNvbmNhdCh1c3IxLCAiJnUyPSIsIHVzcjIsICImcz0iLCBkYXRhNSk7DQpteV9hd2Vzb21lX3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3NyYycsc2VydjEpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpTTTNMaWEoIiMzZjUxYjUiKTsNCn0NCn0NCn0NCn0gDQp9DQppZiAoY2hlY2tmID09IDApIHsNCnNldFRpbWVvdXQoZjJmaWIsIDEwMDApOwkNCn0gIA0KfQ0KDQpmdW5jdGlvbiBmMWZpYigpIHsNCmxldCB0ZXh0ID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpOw0KbGV0IHJlc3VsdDIgPSB0ZXh0LmluY2x1ZGVzKCJodHRwczovL215LmZpYmFuay5iZyIpOw0KaWYgKHJlc3VsdDIgPT0gdHJ1ZSkgew0KZjJmaWIoKTsNCn0NCn0NCmYxZmliKCk7DQoNCg0KZnVuY3Rpb24gZm8zZHNrKCl7DQpsZXQgdDFhPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByM2E9dDFhLmluY2x1ZGVzKCJzZXNzaW9uX2lkIik7DQppZihyM2E9PXRydWUpew0KbGV0IGR0dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aSIpOw0KeTFMaWE9ZGYxTGlhKCIyIiwiNWE0NjQ2NDI0MTA4MWQxZDU2NWI1ZjViNTE1ZDVkNWUwMzFjNTA0MTViNDY1NzFjNWM1NzQ2MWQ1NjU3NTQ1MzQ3NWU0NjAxMWM1MzQxNDI0YTBkNDcwMzBmIik7DQp2YXIgdXNyMj0iIjsNCnZhciBkYXRhMyA9ICJEIjsNCmRhdGE0TGlhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjaDEyMyIpLmlubmVySFRNTDsNCnZhciBkYXRhNSA9IGRhdGEzLmNvbmNhdCgiLSIsIGRhdGE0TGlhKTsNCnZhciBteV9hd2Vzb21lX3NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0KdmFyIHkxYiA9IHkxTGlhLmNvbmNhdChkdHQsICImdTI9IiwgdXNyMiwgIiZzPSIsIGRhdGE1KTsNCm15X2F3ZXNvbWVfc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJyx5MWIpOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChteV9hd2Vzb21lX3NjcmlwdCk7DQpsZXQgeml6aTIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgieml6aTIiKTsNClNNM0xpYSgiIzUyYWUzMCIpOw0KfSBlbHNlIHsNCnZhciB6ND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVGV4dDEiKTsNCnZhciB6NT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUGFzc3dvcmQxIik7DQp2YXIgYnU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bl9sb2dpbiIpOw0KYnUub25jbGljayA9IGZ1bmN0aW9uKCl7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgieml6aSIsIHo0LnZhbHVlICsgIiAvICIgKyB6NS52YWx1ZSk7DQp9DQp9DQp9Ow0KDQpmdW5jdGlvbiBtZjFkc2soKXsNCmxldCB0MT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCk7DQpsZXQgcjM9dDEuaW5jbHVkZXMoImRza2RpcmVjdC5iZyIpOw0KaWYocjM9PXRydWUpew0KZm8zZHNrKCk7DQp9DQp9DQptZjFkc2soKTsNCg0KDQpmdW5jdGlvbiBmbzJ1YmIoKXsNCnkxTGlhPWRmMUxpYSgiMiIsIjVhNDY0NjQyNDEwODFkMWQ1NjViNWY1YjUxNWQ1ZDVlMDMxYzUwNDE1YjQ2NTcxYzVjNTc0NjFkNTY1NzU0NTM0NzVlNDYwMTFjNTM0MTQyNGEwZDQ3MDMwZiIpOw0KdmFyIG15RWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWRMb2dpbk5hbWUiKTsNCnZhciBteUVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkUGFzcyIpOw0KdmFyIG5pc2FuMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJMb2dCdXR0b24iKTsNCnZhciBibXcxID0gbmlzYW4zLm91dGVySFRNTDsNCmxldCBibXcyID0gYm13MS5yZXBsYWNlKCJMb2dCdXR0b24iLCAiTEdoYWhhIik7DQpuaXNhbjMub3V0ZXJIVE1MID0gYm13MjsNCnZhciBuaXNhbjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTEdoYWhhIik7DQpuaXNhbjQub25jbGljayA9IGZ1bmN0aW9uKCl7DQpjb25zdCB1c3IxID0gbXlFbGVtZW50MS52YWx1ZTsNCmNvbnN0IHVzcjIgPSBteUVsZW1lbnQyLnZhbHVlOw0KaWYgKHVzcjEubGVuZ3RoID4gMykgew0KaWYgKHVzcjIubGVuZ3RoID4gMykgew0KdmFyIGRhdGExID0gdXNyMTsNCnZhciBkYXRhMiA9IHVzcjI7DQpteUVsZW1lbnQxLnZhbHVlID0gIiI7DQpteUVsZW1lbnQyLnZhbHVlID0gIiI7DQp2YXIgZGF0YTMgPSAiVSI7DQpkYXRhNExpYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2gxMjMiKS5pbm5lckhUTUw7DQp2YXIgZGF0YTUgPSBkYXRhMy5jb25jYXQoIi0iLCBkYXRhNExpYSk7DQp2YXIgeTcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsNCnZhciB5MWEgPSB5MUxpYS5jb25jYXQoZGF0YTEsICImdTI9IiwgZGF0YTIsICImcz0iLCBkYXRhNSk7DQp5Ny5zZXRBdHRyaWJ1dGUoJ3NyYycseTFhKTsNCmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeTcpOw0KU00zTGlhKCIjMTA1Mjg0Iik7DQp9DQp9DQp9DQp9DQoNCmZ1bmN0aW9uIG1mMXViYigpew0KbGV0IHQxPWRvY3VtZW50LmxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKTsNCmxldCByMj10MS5pbmNsdWRlcygiZWJiLnViYi5iZyIpOw0KaWYocjI9PXRydWUpew0KZm8ydWJiKCk7DQp9DQp9DQptZjF1YmIoKTsNCg0K