- Startseite
- Service
- Händlersuche
Wo kann man die Menzerna Polituren kaufen?
Händler- und Onlineshop- Suche
Sie möchten Menzerna Polituren oder Zubehör erwerben? Unser internationales Händlernetzwerk bietet
zügigen und kompetenten Service weltweit. Mit der Händlersuche finden Sie qualifizierte Menzerna Händler für
Autopolituren, Bootspolituren und feste Polierpasten in Ihrer Nähe.
Finden Sie auch qualifizierte Autopflege Onlineshops mit umfangreichem Menzerna-Sortiment.
CiAgICAgICAgICAgICAgICAgICAgICAKICAgIDxkaXYgaWQ9Im1vYmlsZS1jaGVjayI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtcmVzZXQtc2VhcmNoIj4KICAgICAgICA8YnV0dG9uIGlkPSJyZXNldC1zZWFyY2giIGNsYXNzPSJidG4iPkjDpG5kbGVyc3VjaGUgZXJuZXV0IG51dHplbjwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmaWx0ZXJmb3JtLWNvbnRhaW5lciBkZWFsZXItc2VhcmNoLWZvcm0td3JhcCI+CiAgICAgICAgPGZvcm0gZGF0YS1hamF4dXJsPSIvc2VydmljZS9oYWVuZGxlcnN1Y2hlP25vX2NhY2hlPTEmYW1wO3R4X3B4cGRlYWxlcnNfYWpheGNhbGwlNUJhY3Rpb24lNUQ9YWpheENhbGwmYW1wO3R4X3B4cGRlYWxlcnNfYWpheGNhbGwlNUJjb250cm9sbGVyJTVEPURlYWxlciZhbXA7dHlwZT0xMTIyJmFtcDtjSGFzaD1iMTA2OGNkZTAyNzEwNDk1OGRjM2QyMjFjZmNmN2Q0ZCIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iZGVhbGVyLXNlYXJjaC1mb3JtIiBpZD0ic2VsZWN0Rm9ybSIgYWN0aW9uPSIvc2VydmljZS9oYWVuZGxlcnN1Y2hlP3R4X3B4cGRlYWxlcnNfYWpheGNhbGwlNUJhY3Rpb24lNUQ9YWpheENhbGwmYW1wO3R4X3B4cGRlYWxlcnNfYWpheGNhbGwlNUJjb250cm9sbGVyJTVEPURlYWxlciZhbXA7dHlwZT0xMTIyJmFtcDtjSGFzaD1iMTA2OGNkZTAyNzEwNDk1OGRjM2QyMjFjZmNmN2Q0ZCI+CjxkaXY+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR4X3B4cGRlYWxlcnNfYWpheGNhbGxbX19yZWZlcnJlcl1bQGV4dGVuc2lvbl0iIHZhbHVlPSJQeHBkZWFsZXJzIiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW19fcmVmZXJyZXJdW0Bjb250cm9sbGVyXSIgdmFsdWU9IkRlYWxlciIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtfX3JlZmVycmVyXVtAYWN0aW9uXSIgdmFsdWU9Imxpc3QiIC8+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR4X3B4cGRlYWxlcnNfYWpheGNhbGxbX19yZWZlcnJlcl1bYXJndW1lbnRzXSIgdmFsdWU9IllUb3dPbnQ5YzMyYWZkMDg5YmJiNzFhMDIwYWQyNmNlNmY1NTBjZjA2MGM0OWUzNSIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtfX3JlZmVycmVyXVtAcmVxdWVzdF0iIHZhbHVlPSJ7JnF1b3Q7QGV4dGVuc2lvbiZxdW90OzomcXVvdDtQeHBkZWFsZXJzJnF1b3Q7LCZxdW90O0Bjb250cm9sbGVyJnF1b3Q7OiZxdW90O0RlYWxlciZxdW90OywmcXVvdDtAYWN0aW9uJnF1b3Q7OiZxdW90O2xpc3QmcXVvdDt9MmU0MDkyNmYxNTEwNTg3NTg2YzZkYzBjYmM3OTVjMTNjNDc3YzRhOSIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtfX3RydXN0ZWRQcm9wZXJ0aWVzXSIgdmFsdWU9InsmcXVvdDtjYXRlZ29yaWVzJnF1b3Q7OlsxLDEsMV19NWU4OGJjZjVkMDY0NmExNWFjMGM0OTRhNmE2YjRiNzliMDZmNjU0YiIgLz4KPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2NhdGlvbi1zZWFyY2gtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iY291bnRyeS1zZWxlY3QiIGNsYXNzPSJzZWxlY3QtbGFiZWwgZm9ybS1iaWctbGFiZWwiPkJpdHRlIGdlYmVuIFNpZSBJaHJlbiBTdGFuZG9ydCBhbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBsb2NhdGlvbi1zZWFyY2gtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlbGVjdC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtjb3VudHJ5XSIgaWQ9ImNvdW50cnktc2VsZWN0IiBjbGFzcz0iZm9ybS1jb250cm9sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPkJpdHRlIHfDpGhsZW4gLi4uPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjU0IiBkYXRhLW5hbWU9IkRldXRzY2hsYW5kIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkRFIj5EZXV0c2NobGFuZDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI2MiIgZGF0YS1uYW1lPSLDhGd5cHRlbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkVHIj7DhGd5cHRlbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI2IiBkYXRhLW5hbWU9IkFsYmFuaWVuIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iQUwiPkFsYmFuaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExIiBkYXRhLW5hbWU9IkFyZ2VudGluaWVuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJBUiI+QXJnZW50aW5pZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTMiIGRhdGEtbmFtZT0iw5ZzdGVycmVpY2giIGRhdGEtY2F0ZWdvcmllcz0iMyIgZGF0YS1pc28yPSJBVCI+w5ZzdGVycmVpY2g8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTQiIGRhdGEtbmFtZT0iQXVzdHJhbGllbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkFVIj5BdXN0cmFsaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIwIiBkYXRhLW5hbWU9IkJlbGdpZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iQkUiPkJlbGdpZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjkiIGRhdGEtbmFtZT0iQnJhc2lsaWVuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMyIgZGF0YS1pc28yPSJCUiI+QnJhc2lsaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIyIiBkYXRhLW5hbWU9IkJ1bGdhcmllbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJCRyI+QnVsZ2FyaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQ0IiBkYXRhLW5hbWU9IkNoaWxlIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iQ0wiPkNoaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQ2IiBkYXRhLW5hbWU9IkNoaW5hIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iQ04iPkNoaW5hPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjU2IiBkYXRhLW5hbWU9IkTDpG5lbWFyayIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkRLIj5Ew6RuZW1hcms8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNjEiIGRhdGEtbmFtZT0iRXN0bGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkVFIj5Fc3RsYW5kPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjY3IiBkYXRhLW5hbWU9IkZpbm5sYW5kIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJGSSI+RmlubmxhbmQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNzIiIGRhdGEtbmFtZT0iRnJhbmtyZWljaCIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJGUiI+RnJhbmtyZWljaDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI4NSIgZGF0YS1uYW1lPSJHcmllY2hlbmxhbmQiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IkdSIj5HcmllY2hlbmxhbmQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNzQiIGRhdGEtbmFtZT0iR3Jvw59icml0YW5uaWVuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkdCIj5Hcm/Dn2JyaXRhbm5pZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTYiIGRhdGEtbmFtZT0iSW5kb25lc2llbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iSUQiPkluZG9uZXNpZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTA0IiBkYXRhLW5hbWU9Ikl0YWxpZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iSVQiPkl0YWxpZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTA3IiBkYXRhLW5hbWU9IkphcGFuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkpQIj5KYXBhbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIzNiIgZGF0YS1uYW1lPSJLYW5hZGEiIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iQ0EiPkthbmFkYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMTgiIGRhdGEtbmFtZT0iS2FzYWNoc3RhbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IktaIj5LYXNhY2hzdGFuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQ3IiBkYXRhLW5hbWU9IktvbHVtYmllbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkNPIj5Lb2x1bWJpZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTMiIGRhdGEtbmFtZT0iS3JvYXRpZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iSFIiPktyb2F0aWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExNiIgZGF0YS1uYW1lPSJLdXdhaXQiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJLVyI+S3V3YWl0PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEyOCIgZGF0YS1uYW1lPSJMZXR0bGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkxWIj5MZXR0bGFuZDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMjAiIGRhdGEtbmFtZT0iTGliYW5vbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJMQiI+TGliYW5vbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMjYiIGRhdGEtbmFtZT0iTGl0YXVlbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkxUIj5MaXRhdWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE0NCIgZGF0YS1uYW1lPSJNYWx0YSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9Ik1UIj5NYWx0YTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMzAiIGRhdGEtbmFtZT0iTWFyb2trbyIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9Ik1BIj5NYXJva2tvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE0OCIgZGF0YS1uYW1lPSJNZXhpa28iIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9Ik1YIj5NZXhpa288L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTU3IiBkYXRhLW5hbWU9Ik5pZWRlcmxhbmRlIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9Ik5MIj5OaWVkZXJsYW5kZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMzUiIGRhdGEtbmFtZT0iTm9yZG1hemVkb25pZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJNSyI+Tm9yZG1hemVkb25pZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTU4IiBkYXRhLW5hbWU9Ik5vcndlZ2VuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJOTyI+Tm9yd2VnZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTY0IiBkYXRhLW5hbWU9IlBhbmFtYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlBBIj5QYW5hbWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTcwIiBkYXRhLW5hbWU9IlBvbGVuIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iUEwiPlBvbGVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE3NCIgZGF0YS1uYW1lPSJQb3J0dWdhbCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlBUIj5Qb3J0dWdhbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNzMiIGRhdGEtbmFtZT0iUHVlcnRvIFJpY28iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iUFIiPlB1ZXJ0byBSaWNvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExNSIgZGF0YS1uYW1lPSJSZXB1YmxpayBLb3JlYSIgZGF0YS1jYXRlZ29yaWVzPSIzIiBkYXRhLWlzbzI9IktSIj5SZXB1YmxpayBLb3JlYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNzkiIGRhdGEtbmFtZT0iUnVtw6RuaWVuIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iUk8iPlJ1bcOkbmllbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxODAiIGRhdGEtbmFtZT0iUnVzc2lzY2hlIEbDtmRlcmF0aW9uIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iUlUiPlJ1c3Npc2NoZSBGw7ZkZXJhdGlvbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMzUiIGRhdGEtbmFtZT0iU8O8ZGFmcmlrYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iWkEiPlPDvGRhZnJpa2E8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTgyIiBkYXRhLW5hbWU9IlNhdWRpLUFyYWJpZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlNBIj5TYXVkaS1BcmFiaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4NiIgZGF0YS1uYW1lPSJTY2h3ZWRlbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iU0UiPlNjaHdlZGVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjQxIiBkYXRhLW5hbWU9IlNjaHdlaXoiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJDSCI+U2Nod2Vpejwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyNDMiIGRhdGEtbmFtZT0iU2VyYmllbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlJTIj5TZXJiaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4OSIgZGF0YS1uYW1lPSJTbG93ZW5pZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJTSSI+U2xvd2VuaWVuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjY1IiBkYXRhLW5hbWU9IlNwYW5pZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iRVMiPlNwYW5pZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTk5IiBkYXRhLW5hbWU9IlN5cmllbiIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlNZIj5TeXJpZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjEyIiBkYXRhLW5hbWU9IlTDvHJrZWkiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlRSIj5Uw7xya2VpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIwNSIgZGF0YS1uYW1lPSJUaGFpbGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlRIIj5UaGFpbGFuZDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMTciIGRhdGEtbmFtZT0iVWtyYWluZSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iVUEiPlVrcmFpbmU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTUiIGRhdGEtbmFtZT0iVW5nYXJuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJIVSI+VW5nYXJuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIyMSIgZGF0YS1uYW1lPSJVcnVndWF5IiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iVVkiPlVydWd1YXk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiIgZGF0YS1uYW1lPSJWZXJlaW5pZ3RlIEFyYWJpc2NoZSBFbWlyYXRlIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJBRSI+VmVyZWluaWd0ZSBBcmFiaXNjaGUgRW1pcmF0ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMjAiIGRhdGEtbmFtZT0iVmVyZWluaWd0ZSBTdGFhdGVuIHZvbiBBbWVyaWthIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IlVTIj5WZXJlaW5pZ3RlIFN0YWF0ZW4gdm9uIEFtZXJpa2E8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMzQiIGRhdGEtbmFtZT0iV2Vpw59ydXNzbGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkJZIj5XZWnDn3J1c3NsYW5kPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2NhdGlvbi13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNiLWxvY2F0aW9uIiBjbGFzcz0iY2ItbGFiZWwgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWt0dWVsbGVuIFN0YW5kb3J0IHZlcndlbmRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIHZhbHVlPSIiIC8+PGlucHV0IGRhdGEtYWpheHVybD0iL3NlcnZpY2UvaGFlbmRsZXJzdWNoZT9ub19jYWNoZT0xJmFtcDt0eF9weHBkZWFsZXJzX2FqYXhjYWxsJTVCYWN0aW9uJTVEPWdldENvdW50cnlDb2RlQWpheCZhbXA7dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmNvbnRyb2xsZXIlNUQ9RGVhbGVyJmFtcDt0eXBlPTExMjImYW1wO2NIYXNoPTBiNmJkOGZmZGJjNGE2YjU0NDgyOGIzMmNkZTQ1Njk4IiBpZD0iY2ItbG9jYXRpb24iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSIiIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJnZW9sb2NhdGlvbi1sb2FkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+U3RhbmRvcnQgd2lyZCBlcm1pdHRlbHQgLi4uPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJnZW9sb2NhdGlvbi1lcnJvciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPkJpdHRlIGVybGF1YmVuIFNpZSBkZW4gWnVncmlmZiBhdWYgSWhyZW4gU3RhbmRvcnQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhdGVnb3J5LXNlYXJjaC1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImZvcm0tYmlnLWxhYmVsIj5Xw6RobGVuIFNpZSBJaHIgUHJvZHVrdCBhdXM8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXRlZ29yaWVzLWNiLWNvbnRhaW5lciIgZGF0YS1hbGwtY2F0ZWdvcnktdWlkcz0iMSwyLDMiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXQtY2IgY2hlY2tib3gtd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNiLUF1dG9wb2xpdHVyZW4iIGNsYXNzPSJjYi1sYWJlbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0b3BvbGl0dXJlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtjYXRlZ29yaWVzXSIgdmFsdWU9IiIgLz48aW5wdXQgY2xhc3M9ImNhdGVnb3J5LWNiIGVuYWJsZWQiIGlkPSJjYi1BdXRvcG9saXR1cmVuIiB0eXBlPSJjaGVja2JveCIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtjYXRlZ29yaWVzXVtdIiB2YWx1ZT0iMSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXQtY2IgY2hlY2tib3gtd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNiLUJvb3RzcG9saXR1cmVuIiBjbGFzcz0iY2ItbGFiZWwgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3RzcG9saXR1cmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNhdGVnb3J5LWNiIGVuYWJsZWQiIGlkPSJjYi1Cb290c3BvbGl0dXJlbiIgdHlwZT0iY2hlY2tib3giIG5hbWU9InR4X3B4cGRlYWxlcnNfYWpheGNhbGxbY2F0ZWdvcmllc11bXSIgdmFsdWU9IjIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2F0LWNiIGNoZWNrYm94LXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjYi1GZXN0cGFzdGVuIiBjbGFzcz0iY2ItbGFiZWwgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlc3RwYXN0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY2F0ZWdvcnktY2IgZW5hYmxlZCIgaWQ9ImNiLUZlc3RwYXN0ZW4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW2NhdGVnb3JpZXNdW10iIHZhbHVlPSIzIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RpZmllci1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiYjNDJIaW53ZWlzOiBNZW56ZXJuYSBQb2xpdHVyZW4gc2luZCBmw7xyIGdld2VyYmxpY2hlIEFud2VuZGVyIGtvbnpwaWVydC48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+TWl0IEtsaWNrIGF1ZiAmcXVvdDtKZXR6dCBIw6RuZGxlciBzdWNoZW4mcXVvdDsgYmVzdMOkdGlnZSBpY2gsIGRhc3MgaWNoIHp1IGRpZXNlciBWZXJicmF1Y2hlcmdydXBwZSBnZWjDtnJlLjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VibWl0LWJ1dHRvbi1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzdWJtaXQtYnRuIGJ0biIgdHlwZT0ic3VibWl0IiBuYW1lPSIiIHZhbHVlPSIiPkpldHp0IEjDpG5kbGVyIHN1Y2hlbjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlYWxlci1zZWFyY2gtbWFwLXdyYXAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVhbGVyLXNlYXJjaC1tYXAiIGlkPSJnbWFwIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJlc3VsdC1jb250YWluZXIgZGVhbGVyLXNlYXJjaC1yZXN1bHQiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXAtaGVhZGxpbmUiICBzdHlsZT0iZGlzcGxheTogbm9uZTsiPlF1YWxpZml6aWVydGUgSMOkbmRsZXIgdW5kIGF1dG9yaXNpZXJ0ZSBPbmxpbmUtU2hvcHMgaW4mbmJzcDs8c3BhbiBpZD0ibWFwLWhlYWRsaW5lLWNvdW50cnkiPjwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi13cmFwIGRlYWxlci1zZWFyY2gtYWNjb3JkaW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtZ3JvdXAiIGlkPSJhY2NvcmRpb24iIHJvbGU9InRhYmxpc3QiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIj4KCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjb250YWN0LWhlYWRsaW5lIiBkYXRhLXN0cmluZz0iS29udGFrdCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJjYXRlZ29yaWVzLWhlYWRsaW5lIiBkYXRhLXN0cmluZz0iRGFzIEjDpG5kbGVyLVNvcnRpbWVudCB1bWZhc3N0IGZvbGdlbmRlIFByb2R1a3RrYXRlZ29yaWVuOiI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ0ZXh0LWxpbmstb25saW5lc2hvcCIgZGF0YS1zdHJpbmc9Ilp1bSBPbmxpbmUtU2hvcCBkZXMgSMOkbmRsZXJzIj48L2Rpdj4KICAgIDxkaXYgaWQ9InRleHQtbGluay13ZWJzaXRlIiBkYXRhLXN0cmluZz0iWnVyIFdlYnNpdGUgZGVzIEjDpG5kbGVycyI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ0ZXh0LWNsb3NlLWFjY29yZGlvbiIgZGF0YS1zdHJpbmc9IkjDpG5kbGVyLUluZm9ybWF0aW9uIHNjaGxpZcOfZW4iPjwvZGl2PgogICAgPGRpdiBpZD0iZGVlcGxpbmsiIGRhdGEtc3RyaW5nPSIiPjwvZGl2PgogICAgCgogICAgCiAgICAgICAgICAgIDxzY3JpcHQgYXN5bmMgZGVmZXIgc3JjPSJodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PUFJemFTeUNJa2pvUW5BbkRseW0wSDd1RXFRcEF5YzBCMGc1N0dRZyZsaWJyYXJpZXM9cGxhY2VzJmNhbGxiYWNrPWluaXRNYXAiPjwvc2NyaXB0PgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgdmFyIG1hcDsKICAgICAgICAgICAgICAgIHZhciBnZW9jb2RlcjsKICAgICAgICAgICAgICAgIHZhciBtYXJrZXJzID0gW107CiAgICAgICAgICAgICAgICB2YXIgbWFwU3R5bGUgPSAgWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNmNWY1ZjUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy5pY29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpc2liaWxpdHkiOiAib2ZmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM2MTYxNjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LnN0cm9rZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZjVmNWY1IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJhZG1pbmlzdHJhdGl2ZS5sYW5kX3BhcmNlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNiZGJkYmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInBvaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZWVlZWVlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJwb2kiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjNzU3NTc1IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJwb2kucGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZTVlNWU1IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJwb2kucGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM5ZTllOWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInJvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiI2ZmZmZmZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAicm9hZC5hcnRlcmlhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM3NTc1NzUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInJvYWQuaGlnaHdheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZGFkYWRhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJyb2FkLmhpZ2h3YXkiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjNjE2MTYxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJyb2FkLmxvY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiIzllOWU5ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAidHJhbnNpdC5saW5lIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNlNWU1ZTUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInRyYW5zaXQuc3RhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZWVlZWVlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJ3YXRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjYzljOWM5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJ3YXRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM5ZTllOWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRNYXAoKSB7CiAgICAgICAgICAgICAgICAgICAgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ21hcCcpLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcjoge2xhdDogNDguNzc5NTk0MiwgbG5nOiA4LjIwNTg2NzR9LAogICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA2LAogICAgICAgICAgICAgICAgICAgICAgICBtYXhab29tOiAxOCwKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzOiBtYXBTdHlsZQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV1TWVtYmVycyA9IFsxMywyMCwyMiw1Miw1Myw1NCw1Niw2MSw2NSw2Nyw3Miw4NSw5Myw5NSw5NywxMDQsMTI2LDEyNywxMjgsMTQ0LDE1NywxNzAsMTc0LDE3OSwxODYsMTg5LDE5MV07CiAgICAgICAgICAgICAgICAgICAgdmFyIGFsbENhdGVnb3J5VWlkcyA9ICQoJy5jYXRlZ29yaWVzLWNiLWNvbnRhaW5lcicpLmRhdGEoJ2FsbC1jYXRlZ29yeS11aWRzJykuc3BsaXQoJywnKTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlcmZvcm0gPSAkKCcjc2VsZWN0Rm9ybScpOwogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5U2VsZWN0ID0gJCgnI2NvdW50cnktc2VsZWN0Jyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uQ2hlY2tib3ggPSAkKCcjY2ItbG9jYXRpb24nKTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uU2VhcmNoQ29udGFpbmVyID0gJCgnLmxvY2F0aW9uLXNlYXJjaC1jb250YWluZXInKTsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0ZWdvcnlTZWFyY2hDb250YWluZXIgPSAkKCcuY2F0ZWdvcnktc2VhcmNoLWNvbnRhaW5lcicpOwogICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllckNvbnRhaW5lciA9ICQoJy5ub3RpZmllci1jb250YWluZXInKTsKICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWl0QnV0dG9uQ29udGFpbmVyID0gJCgnLnN1Ym1pdC1idXR0b24tY29udGFpbmVyJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdENvbnRhaW5lciA9ICQoJy5yZXN1bHQtY29udGFpbmVyJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcENvbnRhaW5lciA9ICQoJy5kZWFsZXItc2VhcmNoLW1hcC13cmFwJyk7CgogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q2F0ZWdvcmllcyA9ICcnOwogICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5TmFtZSA9ICcnOwogICAgICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZENhdGVnb3JpZXMgPSAnJzsKCiAgICAgICAgICAgICAgICAgICAgdmFyIG1vYmlsZUNoZWNrID0gJCgnI21vYmlsZS1jaGVjaycpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgYWpheFVybCA9IGZpbHRlcmZvcm0uZGF0YSgnYWpheHVybCcpOwogICAgICAgICAgICAgICAgICAgIHZhciBnZXRDb3VudHJ5Q29kZUFqYXhVcmwgPSBsb2NhdGlvbkNoZWNrYm94LmRhdGEoJ2FqYXh1cmwnKTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZXBsaW5rID0gJCgnI2RlZXBsaW5rJykuZGF0YSgnc3RyaW5nJykgPT0gMTsKCiAgICAgICAgICAgICAgICAgICAgaWYoZGVlcGxpbmspewogICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q2F0ZWdvcmllcyA9IGNvdW50cnlTZWxlY3QuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykuZGF0YSgnY2F0ZWdvcmllcycpICsgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlOYW1lID0gY291bnRyeVNlbGVjdC5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5kYXRhKCduYW1lJykgKyAnJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5pY2h0IGltIExhbmQgdm9yaGFuZGVuZSBDYXRlZ29yaWVzIGRpc2FibGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkQ2F0ZWdvcmllcyA9IGFycl9kaWZmIChhbGxDYXRlZ29yeVVpZHMsIGNvdW50cnlDYXRlZ29yaWVzLnNwbGl0KCcsJykpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc2FibGVkQ2F0ZWdvcmllcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNhdGVnb3J5LWNiW3ZhbHVlPSInICsgZGlzYWJsZWRDYXRlZ29yaWVzW2ldICsgJyJdJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jYXRlZ29yeS1jYlt2YWx1ZT0iJyArIGRpc2FibGVkQ2F0ZWdvcmllc1tpXSArICciXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY2F0ZWdvcnktY2JbdmFsdWU9IicgKyBkaXNhYmxlZENhdGVnb3JpZXNbaV0gKyAnIl0nKS5jbG9zZXN0KCcuY2hlY2tib3gtd3JhcHBlcicpLmFkZENsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeVNlYXJjaENvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihhcnJheUNvbnRhaW5zKHBhcnNlSW50KGNvdW50cnlTZWxlY3QudmFsKCkpLGV1TWVtYmVycykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJDb250YWluZXIuc2xpZGVEb3duKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJDb250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheENhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtb2JpbGVDaGVjay5pcygnOnZpc2libGUnKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm1vYmlsZS1yZXNldC1zZWFyY2gnKS5mYWRlSW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZGVhbGVyLXNlYXJjaC1mb3JtJykuZmFkZU91dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5tYXAtaGVhZGxpbmUnKS5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNtYXAtaGVhZGxpbmUtY291bnRyeScpLnRleHQoY291bnRyeU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgIGNvdW50cnlTZWxlY3Qub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDYXRlZ29yaWVzID0gJCh0aGlzKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5kYXRhKCdjYXRlZ29yaWVzJykgKyAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeU5hbWUgPSAkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLmRhdGEoJ25hbWUnKSArICcnOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCh0aGlzKS52YWwoKSA9PT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlTZWFyY2hDb250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlbm4gVXNlciBTZWxlY3QtVmFsdWUgw6RuZGVydCwgU3RhbmRvcnQtQ2hlY2tib3ggcmVzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkNoZWNrYm94LnZhbCgnMCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQ2hlY2tib3gucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1lcnJvcicpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1sb2FkJykuaGlkZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbGUgQ2F0ZWdvcmllcyB3aWVkZXIgZW5hYmxlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNhdGVnb3J5LWNiJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuY2hlY2tib3gtd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuaWNodCBpbSBMYW5kIHZvcmhhbmRlbmUgQ2F0ZWdvcmllcyBkaXNhYmxlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRDYXRlZ29yaWVzID0gYXJyX2RpZmYgKGFsbENhdGVnb3J5VWlkcywgY291bnRyeUNhdGVnb3JpZXMuc3BsaXQoJywnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc2FibGVkQ2F0ZWdvcmllcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jYXRlZ29yeS1jYlt2YWx1ZT0iJyArIGRpc2FibGVkQ2F0ZWdvcmllc1tpXSArICciXScpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNhdGVnb3J5LWNiW3ZhbHVlPSInICsgZGlzYWJsZWRDYXRlZ29yaWVzW2ldICsgJyJdJykuY2xvc2VzdCgnLmNoZWNrYm94LXdyYXBwZXInKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeVNlYXJjaENvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbkNvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFycmF5Q29udGFpbnMocGFyc2VJbnQoJCh0aGlzKS52YWwoKSksZXVNZW1iZXJzKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJDb250YWluZXIuc2xpZGVEb3duKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllckNvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubWFwLWhlYWRsaW5lJykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI21hcC1oZWFkbGluZS1jb3VudHJ5JykudGV4dChjb3VudHJ5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkNoZWNrYm94Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tlZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnMScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeVNlbGVjdC52YWwoJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWxvYWQnKS5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHBvc2l0aW9uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBlcm1pdHRlbHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlICE9PSB1bmRlZmluZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tbG9hZCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYXRpb25Db3VudHJ5Q29kZShnZXRDb3VudHJ5Q29kZUFqYXhVcmwsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZlaGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1lcnJvcicpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tbG9hZCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbCgnJykuY2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tZXJyb3InKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tbG9hZCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGZpbHRlcmZvcm0uc3VibWl0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhDYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcENvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihtb2JpbGVDaGVjay5pcygnOnZpc2libGUnKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICQoJy5kZWFsZXItc2VhcmNoLW1hcC13cmFwJykub2Zmc2V0KCkudG9wIC0gJCgnLnBhZ2UtaGVhZGVyJykub3V0ZXJIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgODAwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubW9iaWxlLXJlc2V0LXNlYXJjaCcpLmZhZGVJbignc2xvdycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmRlYWxlci1zZWFyY2gtZm9ybScpLmZhZGVPdXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGd0bUV2ZW50TGFiZWwgPSAkKCcjY291bnRyeS1zZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpICsgJyAtJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCQoJyNjYi1BdXRvcG9saXR1cmVuJykuaXMoIjpjaGVja2VkIikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RtRXZlbnRMYWJlbCA9IGd0bUV2ZW50TGFiZWwgKyAnIEF1dG9wb2xpdHVyZW4nOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCQoJyNjYi1Cb290c3BvbGl0dXJlbicpLmlzKCI6Y2hlY2tlZCIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0bUV2ZW50TGFiZWwgPSBndG1FdmVudExhYmVsICsgJyBCb290c3BvbGl0dXJlbic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2NiLUZlc3RwYXN0ZW4nKS5pcygiOmNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBndG1FdmVudExhYmVsID0gZ3RtRXZlbnRMYWJlbCArICcgRmVzdHBhc3Rlbic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdIYWVuZGxlcnN1Y2hlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnc3VjaGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnY2xpY2snLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGd0bUV2ZW50TGFiZWwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldExvY2F0aW9uQ291bnRyeUNvZGUoYWpheFVybCwgbGF0LCBsb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJC5wb3N0KGFqYXhVcmwsIHsgJ3R4X3B4cGRlYWxlcnNfYWpheGNhbGxbbGF0XSc6IGxhdCwgJ3R4X3B4cGRlYWxlcnNfYWpheGNhbGxbbG9uXSc6IGxvbiB9LCBmdW5jdGlvbihyZXNwb25zZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9uVmFsdWUgPSAkKCcjY291bnRyeS1zZWxlY3Qgb3B0aW9uW2RhdGEtaXNvMj0nK3Jlc3BvbnNlKyddJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbChvcHRpb25WYWx1ZSkuY2hhbmdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWpheENhbGwoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTWFya2VycygpOwogICAgICAgICAgICAgICAgICAgICAgICAkKCcjYWNjb3JkaW9uJykuaHRtbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICQucG9zdChhamF4VXJsLCBmaWx0ZXJmb3JtLnNlcmlhbGl6ZSgpLCBmdW5jdGlvbihyZXNwb25zZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwQm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwgJiYgcmVzcG9uc2UubGVuZ3RoICE9IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3BvbnNlLCBmdW5jdGlvbihpLCBpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0ubGF0ICE9PSAnJyAmJiBpdGVtLmxvbiAhPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0ubGF0LCBpdGVtLmxvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmxvY2F0aW9uaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5hZGRpdGlvbmFsTGF0T25lICE9PSAnJyAmJiBpdGVtLmFkZGl0aW9uYWxMb25PbmUgIT09ICcnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRkaXRpb25hbE1hcmtlck9uZSA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhpdGVtLmFkZGl0aW9uYWxMYXRPbmUsIGl0ZW0uYWRkaXRpb25hbExvbk9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLXJlZC5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogaXRlbS5sb2NhdGlvbmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKGFkZGl0aW9uYWxNYXJrZXJPbmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEJvdW5kcy5leHRlbmQoYWRkaXRpb25hbE1hcmtlck9uZS5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmFkZGl0aW9uYWxMYXRUd28gIT09ICcnICYmIGl0ZW0uYWRkaXRpb25hbExvblR3byAhPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsTWFya2VyVHdvID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0uYWRkaXRpb25hbExhdFR3bywgaXRlbS5hZGRpdGlvbmFsTG9uVHdvKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItcmVkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmxvY2F0aW9uaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2goYWRkaXRpb25hbE1hcmtlclR3byk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChhZGRpdGlvbmFsTWFya2VyVHdvLnBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0uYWRkaXRpb25hbExhdFRocmVlICE9PSAnJyAmJiBpdGVtLmFkZGl0aW9uYWxMb25UaHJlZSAhPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsTWFya2VyVGhyZWUgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoaXRlbS5hZGRpdGlvbmFsTGF0VGhyZWUsIGl0ZW0uYWRkaXRpb25hbExvblRocmVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItcmVkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmxvY2F0aW9uaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2goYWRkaXRpb25hbE1hcmtlclRocmVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBCb3VuZHMuZXh0ZW5kKGFkZGl0aW9uYWxNYXJrZXJUaHJlZS5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmFkZGl0aW9uYWxMYXRGb3VyICE9PSAnJyAmJiBpdGVtLmFkZGl0aW9uYWxMb25Gb3VyICE9PSAnJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxNYXJrZXJGb3VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0uYWRkaXRpb25hbExhdEZvdXIsIGl0ZW0uYWRkaXRpb25hbExvbkZvdXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA6IG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6IGl0ZW0ubG9jYXRpb25pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMucHVzaChhZGRpdGlvbmFsTWFya2VyRm91cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChhZGRpdGlvbmFsTWFya2VyRm91ci5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmFkZGl0aW9uYWxMYXRGaXZlICE9PSAnJyAmJiBpdGVtLmFkZGl0aW9uYWxMb25GaXZlICE9PSAnJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxNYXJrZXJGaXZlID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0uYWRkaXRpb25hbExhdEZpdmUsIGl0ZW0uYWRkaXRpb25hbExvbkZpdmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA6IG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6IGl0ZW0ubG9jYXRpb25pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMucHVzaChhZGRpdGlvbmFsTWFya2VyRml2ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChhZGRpdGlvbmFsTWFya2VyRml2ZS5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKG1hcmtlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBCb3VuZHMuZXh0ZW5kKG1hcmtlci5wb3NpdGlvbik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2FjY29yZGlvbicpLmFwcGVuZChnZXRIdG1sVGVtcGxhdGUoaXRlbSxpKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdEVudHJ5ID0gJCgnI2xvY2F0aW9uJyArIGl0ZW0ubG9jYXRpb25pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RFbnRyeS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG1hcmtlcnMsIGZ1bmN0aW9uKGksbWFya2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oLTEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0SWNvbignL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLXJlZC5wbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbGxhcHNlJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ3Nob3cnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnLmNvbGxhcHNlLWxpbmsnKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISQodGhpcykuY2xvc2VzdCgnLnBhbmVsJykuZmluZCgnLmNvbGxhcHNlJykuaXMoJzp2aXNpYmxlJykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5wYW5lbCcpLnNpYmxpbmdzKCcucGFuZWwnKS5maW5kKCcuY29sbGFwc2UtbGluaycpLmFkZENsYXNzKCdjb2xsYXBzZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5zaWJsaW5ncygnLnBhbmVsJykuZmluZCgnLmFjY29yZGlvbi1jb2xsYXBzZScpLnJlbW92ZUNsYXNzKCdzaG93Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5maW5kKCcuYWNjb3JkaW9uLWNvbGxhcHNlJykuaGFzQ2xhc3MoJ3Nob3cnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmNsb3Nlc3QoJy5wYW5lbCcpLmZpbmQoJy5hY2NvcmRpb24tY29sbGFwc2UnKS5oYXNDbGFzcygnY29sbGFwc2luZycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5maW5kKCcuYWNjb3JkaW9uLWNvbGxhcHNlJykuYWRkQ2xhc3MoJ3Nob3cnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0SWNvbignL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLWdyZXkucG5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJPbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlck9uZS5zZXRJY29uKCcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItZ3JleS5wbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJPbmUuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJUd28gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlclR3by5zZXRJY29uKCcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItZ3JleS5wbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJUd28uc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJUaHJlZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyVGhyZWUuc2V0SWNvbignL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLWdyZXkucG5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyVGhyZWUuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJGb3VyICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJGb3VyLnNldEljb24oJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1ncmV5LnBuZycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlckZvdXIuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJGaXZlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJGaXZlLnNldEljb24oJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1ncmV5LnBuZycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlckZpdmUuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJDbGlja0xpc3RlbmVyIChtYXJrZXIsIG1hcmtlcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWRkaXRpb25hbE1hcmtlck9uZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyQ2xpY2tMaXN0ZW5lcihhZGRpdGlvbmFsTWFya2VyT25lLCBtYXJrZXJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJUd28gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckNsaWNrTGlzdGVuZXIoYWRkaXRpb25hbE1hcmtlclR3bywgbWFya2Vycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyVGhyZWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckNsaWNrTGlzdGVuZXIoYWRkaXRpb25hbE1hcmtlclRocmVlLCBtYXJrZXJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJGb3VyICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJDbGlja0xpc3RlbmVyKGFkZGl0aW9uYWxNYXJrZXJGb3VyLCBtYXJrZXJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJGaXZlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJDbGlja0xpc3RlbmVyKGFkZGl0aW9uYWxNYXJrZXJGaXZlLCBtYXJrZXJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmlzT25seU9ubGluZXNob3AgPT09IHRydWUpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFya2Vyc1tpXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tpXS5zZXRNYXAobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuZml0Qm91bmRzKG1hcEJvdW5kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbGVhck1hcmtlcnMoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlcnNbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2ldLnNldE1hcChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzID0gW107CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtYXJrZXJDbGlja0xpc3RlbmVyKG1hcmtlclRlbXAsIG1hcmtlckFycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKG1hcmtlclRlbXAsICdjbGljaycsIChmdW5jdGlvbihtYXJrZXIsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2gobWFya2VyQXJyYXksIGZ1bmN0aW9uKGksbWFya2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oLTEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0T3B0aW9ucyh7aWNvbjogInR5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLXJlZC5wbmcifSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldE9wdGlvbnMoe2ljb246ICJ0eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1ncmV5LnBuZyJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkKCcuY29sbGFwc2UtbGluaycpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkKCcjbG9jYXRpb24nK21hcmtlci5sb2NhdGlvbl9pZCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICQoJy5jb2xsYXBzZS1saW5rJykuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnI2xvY2F0aW9uJyttYXJrZXIubG9jYXRpb25faWQpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSkucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNsb2NhdGlvbicrbWFya2VyLmxvY2F0aW9uX2lkKS5jbGljaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRBbmltYXRpb24oZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkJPVU5DRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICQoJyNsb2NhdGlvbicrbWFya2VyLmxvY2F0aW9uX2lkKS5vZmZzZXQoKS50b3AgLSAoJCgnLnBhZ2UtaGVhZGVyJykub3V0ZXJIZWlnaHQoKSArIDM1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KShtYXJrZXJUZW1wLCBpKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcnJheUNvbnRhaW5zKG5lZWRsZSwgYXJyaGF5c3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhcnJoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPiAtMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFycl9kaWZmIChhMSwgYTIpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gW10sIGRpZmYgPSBbXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbYTFbaV1dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFbYTJbaV1dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFbYTJbaV1dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2EyW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZi5wdXNoKGspOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIAogICAgPHNjcmlwdD4KICAgICAgICAkKGRvY3VtZW50LmJvZHkpLm9uKCdjbGljaycsJy5tb2JpbGUtY2xvc2UtYWNjb3JkaW9uLXRyaWdnZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gJCh0aGlzKS5jbG9zZXN0KCcuY29sbGFwc2UnKS5zbGlkZVVwKCk7CiAgICAgICAgICAgICQodGhpcykucGFyZW50cygnLmFjY29yZGlvbi1pdGVtJykuZmluZCgnLmFjY29yZGlvbi1jb2xsYXBzZScpLnJlbW92ZUNsYXNzKCdzaG93Jyk7CiAgICAgICAgICAgICQodGhpcykucGFyZW50cygnLmFjY29yZGlvbi1pdGVtJykuZmluZCgnLmNvbGxhcHNlLWxpbmsnKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgfSk7CgogICAgICAgICQoZG9jdW1lbnQuYm9keSkub24oJ2NsaWNrJywnI3Jlc2V0LXNlYXJjaCcsIGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgY291bnRyeVNlbGVjdC52YWwoJycpLmNoYW5nZSgpOwogICAgICAgICAgICBjYXRlZ29yeVNlYXJjaENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbkNvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgIG5vdGlmaWVyQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgJCgnLmRlYWxlci1zZWFyY2gtZm9ybScpLmZhZGVJbigpOwogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoKTsKICAgICAgICB9KTsKCiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5vbignY2xpY2snLCcuaXRlbS1saW5rJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmKCQodGhpcykuZGF0YSgnYW5hbHl0aWNzZXZlbnQnKSAhPT0gJycpewogICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgICAgICAgICAgICAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goewogICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnSGFlbmRsZXJzdWNoZScsCiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd3ZWl0ZXJsZWl0dW5nJywKICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdjbGljaycsCiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICQodGhpcykuZGF0YSgnYW5hbHl0aWNzZXZlbnQnKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gZ2V0SHRtbFRlbXBsYXRlKGl0ZW0saSl7CiAgICAgICAgICAgIHZhciBjb250YWN0SGVhZGxpbmUgPSAkKCcjY29udGFjdC1oZWFkbGluZScpLmRhdGEoJ3N0cmluZycpOwogICAgICAgICAgICB2YXIgY2F0ZWdvcmllc0hlYWRsaW5lID0gJCgnI2NhdGVnb3JpZXMtaGVhZGxpbmUnKS5kYXRhKCdzdHJpbmcnKTsKICAgICAgICAgICAgdmFyIHRleHRMaW5rT25saW5lc2hvcCA9ICQoJyN0ZXh0LWxpbmstb25saW5lc2hvcCcpLmRhdGEoJ3N0cmluZycpOwogICAgICAgICAgICB2YXIgdGV4dExpbmtXZWJzaXRlID0gJCgnI3RleHQtbGluay13ZWJzaXRlJykuZGF0YSgnc3RyaW5nJyk7CiAgICAgICAgICAgIHZhciBjbG9zZUFjY29yZGlvblRyaWdnZXJUZXh0ID0gJCgnI3RleHQtY2xvc2UtYWNjb3JkaW9uJykuZGF0YSgnc3RyaW5nJyk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvckNsYXNzID0gJyc7CiAgICAgICAgICAgIGlmIChpID09ICcwJykgewogICAgICAgICAgICAgICAgaXRlcmF0b3JDbGFzcyA9ICcgZmlyc3QnOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgYW5hbHl0aWNzRXZlbnQgPSAnJzsKICAgICAgICAgICAgaWYoaXRlbS5hbmFseXRpY3NFdmVudCAhPSAnJyl7CiAgICAgICAgICAgICAgICBhbmFseXRpY3NFdmVudCA9IGl0ZW0uYW5hbHl0aWNzRXZlbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9ImFjY29yZGlvbi1pdGVtIHBhbmVsIj4nOwoKICAgICAgICAgICAgaHRtbCAgICs9ICcgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0iYWNjb3JkaW9uLXRpdGxlIGNvbGxhcHNlLWxpbmsgY29sbGFwc2VkIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGlkPSJsb2NhdGlvbicgKyBpdGVtLmxvY2F0aW9uaWQgKyciIGRhdGEtYnMtdGFyZ2V0PSIjY29sbGFwc2UnICsgaXRlbS5sb2NhdGlvbmlkICsnIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0ibG9jYXRpb24nICsgaXRlbS5sb2NhdGlvbmlkICsnIj4nOwogICAgICAgICAgICBodG1sICAgKz0gJzxkaXYgY2xhc3M9ImFjYy10aXRsZSI+JyArIGl0ZW0udGl0bGUgKyc8L2Rpdj4nOwoKICAgICAgICAgICAgaHRtbCAgICs9ICc8ZGl2IGNsYXNzPSJhY2Mtc3VidGl0bGUiPicgKyBpdGVtLnN1YnRpdGxlICsnPC9kaXY+PC9hPic7CgogICAgICAgICAgICBodG1sICAgKz0nPGRpdiBkYXRhLWJzLXBhcmVudD0iI2FjY29yZGlvbiIgaWQ9ImNvbGxhcHNlJyArIGl0ZW0ubG9jYXRpb25pZCArJyIgY2xhc3M9ImFjY29yZGlvbi1jb2xsYXBzZSBjb2xsYXBzZSIgc3R5bGU9IiI+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5Ij4nOwoKCiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJyb3cgZGVzY3JpcHRpb24tcm93Ij4nOwogICAgICAgICAgICBodG1sICAgKz0nPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLWxnLTgiPic7CiAgICAgICAgICAgIGh0bWwgICArPScgPGRpdiBjbGFzcz0iZGVhbGVyLWRlc2NyaXB0aW9uIj4nICsgaXRlbS5kZXNjcmlwdGlvbiArICc8L2Rpdj4nOwogICAgICAgICAgICBodG1sICAgKz0nPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy00Ij4nOwoKICAgICAgICAgICAgaWYoaXRlbS5pbWFnZVVybCAhPT0gJycpewogICAgICAgICAgICAgICAgaHRtbCArPSAnPGltZyBzcmM9IicgKyBpdGVtLmltYWdlVXJsICsgJyIgY2xhc3M9ImltZy1yZXNwb25zaXZlIiB3aWR0aD0iMjUwIiAvPic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGh0bWwgICArPSc8L2Rpdj48L2Rpdj4nOwoKICAgICAgICAgICAgaHRtbCAgICs9JyA8ZGl2IGNsYXNzPSJyb3cgY29udGFjdC1yb3ciPic7CiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctOCI+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgY2xhc3M9ImNhdGVnb3JpZXMtaGVhZGxpbmUiPicgKyBjYXRlZ29yaWVzSGVhZGxpbmUgKyAnPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgY2xhc3M9Iml0ZW0tY2F0ZWdvcmllcyI+JzsKCiAgICAgICAgICAgIGlmKGl0ZW0uY2F0ZWdvcmllcyAhPT0gJycpewogICAgICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXNBcnJheSA9IGl0ZW0uY2F0ZWdvcmllczsKCiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjYXRlZ29yaWVzQXJyYXkpKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iaXRlbS1jYXQgJyArIGtleSAgKyAnIj4nICsgdmFsdWUgICsgJzwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICBodG1sICArPSc8L2Rpdj4nOwogICAgICAgICAgICBodG1sICArPSc8L2Rpdj4nOwoKICAgICAgICAgICAgaHRtbCAgKz0nPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLWxnLTQiPic7CgogICAgICAgICAgICBodG1sICArPSc8ZGl2IGNsYXNzPSJjb250YWN0LWhlYWRsaW5lIj4nICsgY29udGFjdEhlYWRsaW5lICsgJzwvZGl2Pic7CgogICAgICAgICAgICBpZiAoaXRlbS5hZGRyZXNzKSB7CiAgICAgICAgICAgICAgICBodG1sICArPScgPGRpdj48ZGl2IGNsYXNzPSJpdGVtLWFkZHJlc3MiPicgKyBpdGVtLmFkZHJlc3MgKyAnPC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGl0ZW0ucGhvbmUpIHsKICAgICAgICAgICAgICAgIGh0bWwgICs9JzxkaXY+PGRpdiBjbGFzcz0iaXRlbS1waG9uZSI+PGEgaHJlZj0idGVsOicrIGl0ZW0ucGhvbmUgKyciPicgKyBpdGVtLnBob25lICsgJzwvYT48L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXRlbS5lbWFpbCkgewogICAgICAgICAgICAgICAgaHRtbCAgKz0nPGRpdj48ZGl2IGNsYXNzPSJpdGVtLWVtYWlsIj48YSBocmVmPSJtYWlsdG86JysgaXRlbS5lbWFpbCArJyI+JyArIGl0ZW0uZW1haWwgKyAnPC9hPjwvZGl2PjwvZGl2Pic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGh0bWwgICs9JyAgPGRpdiBjbGFzcz0idmlzaXQtc3RvcmUtbGlua3MiPic7CgogICAgICAgICAgICBpZihpdGVtLmxpbmtXZWJzaXRlICE9PSAnJyl7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8YSBocmVmPSInICsgaXRlbS5saW5rV2Vic2l0ZSArICciIGNsYXNzPSJpdGVtLWxpbmsgYnRuIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1hbmFseXRpY3NldmVudD0iJyArIGFuYWx5dGljc0V2ZW50ICsgJyI+JyArIHRleHRMaW5rV2Vic2l0ZSArICc8L2E+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoaXRlbS5saW5rT25saW5lU2hvcCAhPT0gJycpewogICAgICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iJyArIGl0ZW0ubGlua09ubGluZVNob3AgKyAnIiBjbGFzcz0iaXRlbS1saW5rIGJ0biIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtYW5hbHl0aWNzZXZlbnQ9IicgKyBhbmFseXRpY3NFdmVudCArICciPicgKyB0ZXh0TGlua09ubGluZXNob3AgKyAnPC9hPic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGh0bWwgKz0nPC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nPC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nPC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nPGRpdiBjbGFzcz0icm93Ij4nOwoKICAgICAgICAgICAgaHRtbCArPScgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4nOwoKICAgICAgICAgICAgaHRtbCArPScgIDxkaXYgY2xhc3M9Im1vYmlsZS1jbG9zZS1hY2NvcmRpb24iPjxzcGFuIGNsYXNzPSJtb2JpbGUtY2xvc2UtYWNjb3JkaW9uLXRyaWdnZXIiPicrIGNsb3NlQWNjb3JkaW9uVHJpZ2dlclRleHQgKyc8L3NwYW4+PC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nPC9kaXY+PC9kaXY+IDwvZGl2PjwvZGl2PjwvZGl2Pic7CgoKICAgICAgICAgICAgcmV0dXJuIGh0bWw7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMobmVlZGxlLCBhcnJoYXlzdGFjaykgewogICAgICAgICAgICByZXR1cm4gKGFycmhheXN0YWNrLmluZGV4T2YobmVlZGxlKSA+IC0xKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYXJyX2RpZmYgKGExLCBhMikgewoKICAgICAgICAgICAgdmFyIGEgPSBbXSwgZGlmZiA9IFtdOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYVthMVtpXV0gPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoYVthMltpXV0pIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgYVthMltpXV07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGFbYTJbaV1dID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhKSB7CiAgICAgICAgICAgICAgICBkaWZmLnB1c2goayk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBkaWZmOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgICAgICAgICAgICAgICAg
Mit Klick auf "Google Maps laden" willige ich in die Verarbeitung meiner Daten durch Google ein. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.