You want to buy Menzerna polishes or accessories? Our range caters to professionals with the highest standards
and is available from selected partners around the globe. Our international network of qualified dealers offers
fast and competent service worldwide.
Whether auto detail shop or car detailing supplies stores: Find the right stockist among numerous polishing and
car care shops with our Menzerna dealer and onlineshop search. For car polishes, boat polishes and solid compounds.
CiAgICAgICAgICAgICAgICAgICAgICAKICAgIDxkaXYgaWQ9Im1vYmlsZS1jaGVjayI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtcmVzZXQtc2VhcmNoIj4KICAgICAgICA8YnV0dG9uIGlkPSJyZXNldC1zZWFyY2giIGNsYXNzPSJidG4iPlVzZSBEZWFsZXItc2VhcmNoIGFnYWluPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZpbHRlcmZvcm0tY29udGFpbmVyIGRlYWxlci1zZWFyY2gtZm9ybS13cmFwIj4KICAgICAgICA8Zm9ybSBkYXRhLWFqYXh1cmw9Ii9zZXJ2aWNlL2RlYWxlci1zZWFyY2g/bm9fY2FjaGU9MSZhbXA7dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmFjdGlvbiU1RD1hamF4Q2FsbCZhbXA7dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmNvbnRyb2xsZXIlNUQ9RGVhbGVyJmFtcDt0eXBlPTExMjImYW1wO2NIYXNoPWIxMDY4Y2RlMDI3MTA0OTU4ZGMzZDIyMWNmY2Y3ZDRkIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJkZWFsZXItc2VhcmNoLWZvcm0iIGlkPSJzZWxlY3RGb3JtIiBhY3Rpb249Ii9zZXJ2aWNlL2RlYWxlci1zZWFyY2g/dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmFjdGlvbiU1RD1hamF4Q2FsbCZhbXA7dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmNvbnRyb2xsZXIlNUQ9RGVhbGVyJmFtcDt0eXBlPTExMjImYW1wO2NIYXNoPWIxMDY4Y2RlMDI3MTA0OTU4ZGMzZDIyMWNmY2Y3ZDRkIj4KPGRpdj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtfX3JlZmVycmVyXVtAZXh0ZW5zaW9uXSIgdmFsdWU9IlB4cGRlYWxlcnMiIC8+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR4X3B4cGRlYWxlcnNfYWpheGNhbGxbX19yZWZlcnJlcl1bQGNvbnRyb2xsZXJdIiB2YWx1ZT0iRGVhbGVyIiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW19fcmVmZXJyZXJdW0BhY3Rpb25dIiB2YWx1ZT0ibGlzdCIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtfX3JlZmVycmVyXVthcmd1bWVudHNdIiB2YWx1ZT0iWVRvd09udDljMzJhZmQwODliYmI3MWEwMjBhZDI2Y2U2ZjU1MGNmMDYwYzQ5ZTM1IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW19fcmVmZXJyZXJdW0ByZXF1ZXN0XSIgdmFsdWU9InsmcXVvdDtAZXh0ZW5zaW9uJnF1b3Q7OiZxdW90O1B4cGRlYWxlcnMmcXVvdDssJnF1b3Q7QGNvbnRyb2xsZXImcXVvdDs6JnF1b3Q7RGVhbGVyJnF1b3Q7LCZxdW90O0BhY3Rpb24mcXVvdDs6JnF1b3Q7bGlzdCZxdW90O30yZTQwOTI2ZjE1MTA1ODc1ODZjNmRjMGNiYzc5NWMxM2M0NzdjNGE5IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW19fdHJ1c3RlZFByb3BlcnRpZXNdIiB2YWx1ZT0ieyZxdW90O2NhdGVnb3JpZXMmcXVvdDs6WzEsMSwxXX01ZTg4YmNmNWQwNjQ2YTE1YWMwYzQ5NGE2YTZiNGI3OWIwNmY2NTRiIiAvPgo8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvY2F0aW9uLXNlYXJjaC1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb3VudHJ5LXNlbGVjdCIgY2xhc3M9InNlbGVjdC1sYWJlbCBmb3JtLWJpZy1sYWJlbCI+U2VhcmNoIGZvciBsb2NhdGlvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBsb2NhdGlvbi1zZWFyY2gtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlbGVjdC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtjb3VudHJ5XSIgaWQ9ImNvdW50cnktc2VsZWN0IiBjbGFzcz0iZm9ybS1jb250cm9sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBjb3VudHJ5PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjYiIGRhdGEtbmFtZT0iQWxiYW5pYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkFMIj5BbGJhbmlhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExIiBkYXRhLW5hbWU9IkFyZ2VudGluYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iQVIiPkFyZ2VudGluYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNCIgZGF0YS1uYW1lPSJBdXN0cmFsaWEiIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IkFVIj5BdXN0cmFsaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTMiIGRhdGEtbmFtZT0iQXVzdHJpYSIgZGF0YS1jYXRlZ29yaWVzPSIzIiBkYXRhLWlzbzI9IkFUIj5BdXN0cmlhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjM0IiBkYXRhLW5hbWU9IkJlbGFydXMiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJCWSI+QmVsYXJ1czwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMCIgZGF0YS1uYW1lPSJCZWxnaXVtIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkJFIj5CZWxnaXVtPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjI5IiBkYXRhLW5hbWU9IkJyYXppbCIgZGF0YS1jYXRlZ29yaWVzPSIxLDMiIGRhdGEtaXNvMj0iQlIiPkJyYXppbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMiIgZGF0YS1uYW1lPSJCdWxnYXJpYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJCRyI+QnVsZ2FyaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMzYiIGRhdGEtbmFtZT0iQ2FuYWRhIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkNBIj5DYW5hZGE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNDQiIGRhdGEtbmFtZT0iQ2hpbGUiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJDTCI+Q2hpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNDYiIGRhdGEtbmFtZT0iQ2hpbmEiIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IkNOIj5DaGluYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0NyIgZGF0YS1uYW1lPSJDb2xvbWJpYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkNPIj5Db2xvbWJpYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0OCIgZGF0YS1uYW1lPSJDb3N0YSBSaWNhIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iQ1IiPkNvc3RhIFJpY2E8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTMiIGRhdGEtbmFtZT0iQ3JvYXRpYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJIUiI+Q3JvYXRpYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI1MyIgZGF0YS1uYW1lPSJDemVjaCBSZXB1YmxpYyIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IkNaIj5DemVjaCBSZXB1YmxpYzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI1NiIgZGF0YS1uYW1lPSJEZW5tYXJrIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iREsiPkRlbm1hcms8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNjIiIGRhdGEtbmFtZT0iRWd5cHQiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJFRyI+RWd5cHQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNjEiIGRhdGEtbmFtZT0iRXN0b25pYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDMiIGRhdGEtaXNvMj0iRUUiPkVzdG9uaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNjciIGRhdGEtbmFtZT0iRmlubGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iRkkiPkZpbmxhbmQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNzIiIGRhdGEtbmFtZT0iRnJhbmNlIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IkZSIj5GcmFuY2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNTQiIGRhdGEtbmFtZT0iR2VybWFueSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJERSI+R2VybWFueTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI4NSIgZGF0YS1uYW1lPSJHcmVlY2UiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IkdSIj5HcmVlY2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTUiIGRhdGEtbmFtZT0iSHVuZ2FyeSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iSFUiPkh1bmdhcnk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTYiIGRhdGEtbmFtZT0iSW5kb25lc2lhIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJJRCI+SW5kb25lc2lhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEwMSIgZGF0YS1uYW1lPSJJcmFxIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iSVEiPklyYXE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iOTciIGRhdGEtbmFtZT0iSXJlbGFuZCIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iSUUiPklyZWxhbmQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTA0IiBkYXRhLW5hbWU9Ikl0YWx5IiBkYXRhLWNhdGVnb3JpZXM9IjEsMiwzIiBkYXRhLWlzbzI9IklUIj5JdGFseTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMDciIGRhdGEtbmFtZT0iSmFwYW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iSlAiPkphcGFuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjExOCIgZGF0YS1uYW1lPSJLYXpha2hzdGFuIiBkYXRhLWNhdGVnb3JpZXM9IjEsMyIgZGF0YS1pc28yPSJLWiI+S2F6YWtoc3Rhbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMTYiIGRhdGEtbmFtZT0iS3V3YWl0IiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iS1ciPkt1d2FpdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMDkiIGRhdGEtbmFtZT0iS3lyZ3l6c3RhbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDMiIGRhdGEtaXNvMj0iS0ciPkt5cmd5enN0YW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTI4IiBkYXRhLW5hbWU9IkxhdHZpYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDMiIGRhdGEtaXNvMj0iTFYiPkxhdHZpYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMjAiIGRhdGEtbmFtZT0iTGViYW5vbiIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJMQiI+TGViYW5vbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMjYiIGRhdGEtbmFtZT0iTGl0aHVhbmlhIiBkYXRhLWNhdGVnb3JpZXM9IjEsMyIgZGF0YS1pc28yPSJMVCI+TGl0aHVhbmlhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE0OSIgZGF0YS1uYW1lPSJNYWxheXNpYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9Ik1ZIj5NYWxheXNpYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNDQiIGRhdGEtbmFtZT0iTWFsdGEiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJNVCI+TWFsdGE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTQ4IiBkYXRhLW5hbWU9Ik1leGljbyIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iTVgiPk1leGljbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMzAiIGRhdGEtbmFtZT0iTW9yb2NjbyIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9Ik1BIj5Nb3JvY2NvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE1NyIgZGF0YS1uYW1lPSJOZXRoZXJsYW5kcyIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJOTCI+TmV0aGVybGFuZHM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTYyIiBkYXRhLW5hbWU9Ik5ldyBaZWFsYW5kIiBkYXRhLWNhdGVnb3JpZXM9IjEsMiIgZGF0YS1pc28yPSJOWiI+TmV3IFplYWxhbmQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTM1IiBkYXRhLW5hbWU9Ik5vcnRoIE1hY2Vkb25pYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9Ik1LIj5Ob3J0aCBNYWNlZG9uaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTU4IiBkYXRhLW5hbWU9Ik5vcndheSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iTk8iPk5vcndheTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNjQiIGRhdGEtbmFtZT0iUGFuYW1hIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iUEEiPlBhbmFtYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNjgiIGRhdGEtbmFtZT0iUGhpbGlwcGluZXMiIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IlBIIj5QaGlsaXBwaW5lczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNzAiIGRhdGEtbmFtZT0iUG9sYW5kIiBkYXRhLWNhdGVnb3JpZXM9IjEsMyIgZGF0YS1pc28yPSJQTCI+UG9sYW5kPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE3NCIgZGF0YS1uYW1lPSJQb3J0dWdhbCIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlBUIj5Qb3J0dWdhbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNzMiIGRhdGEtbmFtZT0iUHVlcnRvIFJpY28iIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlBSIj5QdWVydG8gUmljbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNzkiIGRhdGEtbmFtZT0iUm9tYW5pYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlJPIj5Sb21hbmlhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4MCIgZGF0YS1uYW1lPSJSdXNzaWEiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJSVSI+UnVzc2lhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4MiIgZGF0YS1uYW1lPSJTYXVkaSBBcmFiaWEiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlNBIj5TYXVkaSBBcmFiaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjQzIiBkYXRhLW5hbWU9IlNlcmJpYSIgZGF0YS1jYXRlZ29yaWVzPSIxIiBkYXRhLWlzbzI9IlJTIj5TZXJiaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTg3IiBkYXRhLW5hbWU9IlNpbmdhcG9yZSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iU0ciPlNpbmdhcG9yZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxOTEiIGRhdGEtbmFtZT0iU2xvdmFraWEiIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IlNLIj5TbG92YWtpYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxODkiIGRhdGEtbmFtZT0iU2xvdmVuaWEiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJTSSI+U2xvdmVuaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjM1IiBkYXRhLW5hbWU9IlNvdXRoIEFmcmljYSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIiIGRhdGEtaXNvMj0iWkEiPlNvdXRoIEFmcmljYTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMTUiIGRhdGEtbmFtZT0iU291dGggS29yZWEiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJLUiI+U291dGggS29yZWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNjUiIGRhdGEtbmFtZT0iU3BhaW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyLDMiIGRhdGEtaXNvMj0iRVMiPlNwYWluPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjE4NiIgZGF0YS1uYW1lPSJTd2VkZW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlNFIj5Td2VkZW48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNDEiIGRhdGEtbmFtZT0iU3dpdHplcmxhbmQiIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IkNIIj5Td2l0emVybGFuZDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxOTkiIGRhdGEtbmFtZT0iU3lyaWEiIGRhdGEtY2F0ZWdvcmllcz0iMSIgZGF0YS1pc28yPSJTWSI+U3lyaWE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjA1IiBkYXRhLW5hbWU9IlRoYWlsYW5kIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iVEgiPlRoYWlsYW5kPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIxMiIgZGF0YS1uYW1lPSJUdXJrZXkiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlRSIj5UdXJrZXk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjE3IiBkYXRhLW5hbWU9IlVrcmFpbmUiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlVBIj5Va3JhaW5lPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIiIGRhdGEtbmFtZT0iVW5pdGVkIEFyYWIgRW1pcmF0ZXMiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IkFFIj5Vbml0ZWQgQXJhYiBFbWlyYXRlczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI3NCIgZGF0YS1uYW1lPSJVbml0ZWQgS2luZ2RvbSIgZGF0YS1jYXRlZ29yaWVzPSIxLDIsMyIgZGF0YS1pc28yPSJHQiI+VW5pdGVkIEtpbmdkb208L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjIwIiBkYXRhLW5hbWU9IlVuaXRlZCBTdGF0ZXMiIGRhdGEtY2F0ZWdvcmllcz0iMSwyIiBkYXRhLWlzbzI9IlVTIj5Vbml0ZWQgU3RhdGVzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIyMSIgZGF0YS1uYW1lPSJVcnVndWF5IiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iVVkiPlVydWd1YXk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMjIyIiBkYXRhLW5hbWU9IlV6YmVraXN0YW4iIGRhdGEtY2F0ZWdvcmllcz0iMSwzIiBkYXRhLWlzbzI9IlVaIj5VemJla2lzdGFuPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjIyOCIgZGF0YS1uYW1lPSJWaWV0bmFtIiBkYXRhLWNhdGVnb3JpZXM9IjEiIGRhdGEtaXNvMj0iVk4iPlZpZXRuYW08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvY2F0aW9uLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iY2ItbG9jYXRpb24iIGNsYXNzPSJjYi1sYWJlbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY3VycmVudCBsb2NhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIHZhbHVlPSIiIC8+PGlucHV0IGRhdGEtYWpheHVybD0iL3NlcnZpY2UvZGVhbGVyLXNlYXJjaD9ub19jYWNoZT0xJmFtcDt0eF9weHBkZWFsZXJzX2FqYXhjYWxsJTVCYWN0aW9uJTVEPWdldENvdW50cnlDb2RlQWpheCZhbXA7dHhfcHhwZGVhbGVyc19hamF4Y2FsbCU1QmNvbnRyb2xsZXIlNUQ9RGVhbGVyJmFtcDt0eXBlPTExMjImYW1wO2NIYXNoPTBiNmJkOGZmZGJjNGE2YjU0NDgyOGIzMmNkZTQ1Njk4IiBpZD0iY2ItbG9jYXRpb24iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSIiIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJnZW9sb2NhdGlvbi1sb2FkIiBzdHlsZT0iZGlzcGxheTpub25lOyI+TG9jYXRpb24gaXMgZGV0ZXJtaW5lZCAuLi48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Imdlb2xvY2F0aW9uLWVycm9yIiBzdHlsZT0iZGlzcGxheTpub25lOyI+UGxlYXNlIGFsbG93IGFjY2VzcyB0byB5b3VyIGxvY2F0aW9uPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXRlZ29yeS1zZWFyY2gtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWJpZy1sYWJlbCI+SSYjMDM5O20gbG9va2luZyBmb3IgLi4uPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2F0ZWdvcmllcy1jYi1jb250YWluZXIiIGRhdGEtYWxsLWNhdGVnb3J5LXVpZHM9IjEsMiwzIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2F0LWNiIGNoZWNrYm94LXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjYi1DYXIgcG9saXNoZXMiIGNsYXNzPSJjYi1sYWJlbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyIHBvbGlzaGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW2NhdGVnb3JpZXNdIiB2YWx1ZT0iIiAvPjxpbnB1dCBjbGFzcz0iY2F0ZWdvcnktY2IgZW5hYmxlZCIgaWQ9ImNiLUNhciBwb2xpc2hlcyIgdHlwZT0iY2hlY2tib3giIG5hbWU9InR4X3B4cGRlYWxlcnNfYWpheGNhbGxbY2F0ZWdvcmllc11bXSIgdmFsdWU9IjEiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2F0LWNiIGNoZWNrYm94LXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjYi1Cb2F0IHBvbGlzaGVzIiBjbGFzcz0iY2ItbGFiZWwgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvYXQgcG9saXNoZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY2F0ZWdvcnktY2IgZW5hYmxlZCIgaWQ9ImNiLUJvYXQgcG9saXNoZXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0eF9weHBkZWFsZXJzX2FqYXhjYWxsW2NhdGVnb3JpZXNdW10iIHZhbHVlPSIyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhdC1jYiBjaGVja2JveC13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iY2ItU29saWQgQ29tcG91bmQiIGNsYXNzPSJjYi1sYWJlbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29saWQgQ29tcG91bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY2F0ZWdvcnktY2IgZW5hYmxlZCIgaWQ9ImNiLVNvbGlkIENvbXBvdW5kIiB0eXBlPSJjaGVja2JveCIgbmFtZT0idHhfcHhwZGVhbGVyc19hamF4Y2FsbFtjYXRlZ29yaWVzXVtdIiB2YWx1ZT0iMyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90aWZpZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90aWZpZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4mIzQyTm90ZTogTWVuemVybmEgcG9saXNoZXMgYXJlIG1hZGUgZm9yIHByb2Zlc3Npb25hbCB1c2Vycy48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+QnkgY2xpY2tpbmcgb24gJnF1b3Q7RmluZCBkZWFsZXJzIG5vdyZxdW90OyBJIGNvbmZpcm0gdGhhdCBJIGJlbG9uZyB0byB0aGlzIGN1c3RvbWVyIGdyb3VwLjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VibWl0LWJ1dHRvbi1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzdWJtaXQtYnRuIGJ0biIgdHlwZT0ic3VibWl0IiBuYW1lPSIiIHZhbHVlPSIiPkZpbmQgZGVhbGVyczwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlYWxlci1zZWFyY2gtbWFwLXdyYXAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVhbGVyLXNlYXJjaC1tYXAiIGlkPSJnbWFwIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAKCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InJlc3VsdC1jb250YWluZXIgZGVhbGVyLXNlYXJjaC1yZXN1bHQiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXAtaGVhZGxpbmUiICBzdHlsZT0iZGlzcGxheTogbm9uZTsiPlF1YWxpZmllZCBkZWFsZXJzIGFuZCBhdXRob3JpemVkIG9ubGluZSBzaG9wcyBpbiZuYnNwOzxzcGFuIGlkPSJtYXAtaGVhZGxpbmUtY291bnRyeSI+PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLXdyYXAgZGVhbGVyLXNlYXJjaC1hY2NvcmRpb25zIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ncm91cCIgaWQ9ImFjY29yZGlvbiIgcm9sZT0idGFibGlzdCIgYXJpYS1tdWx0aXNlbGVjdGFibGU9InRydWUiPgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNvbnRhY3QtaGVhZGxpbmUiIGRhdGEtc3RyaW5nPSJDb250YWN0Ij48L2Rpdj4KICAgIDxkaXYgaWQ9ImNhdGVnb3JpZXMtaGVhZGxpbmUiIGRhdGEtc3RyaW5nPSJUaGUgZGVhbGVyIHJhbmdlIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgcHJvZHVjdCBjYXRlZ29yaWVzOiI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ0ZXh0LWxpbmstb25saW5lc2hvcCIgZGF0YS1zdHJpbmc9IlRvIHRoZSBPbmxpbmVzaG9wIj48L2Rpdj4KICAgIDxkaXYgaWQ9InRleHQtbGluay13ZWJzaXRlIiBkYXRhLXN0cmluZz0iVG8gdGhlIFdlYnNpdGUiPjwvZGl2PgogICAgPGRpdiBpZD0idGV4dC1jbG9zZS1hY2NvcmRpb24iIGRhdGEtc3RyaW5nPSJDbG9zZSBEZWFsZXItSW5mb3JtYXRpb24iPjwvZGl2PgogICAgPGRpdiBpZD0iZGVlcGxpbmsiIGRhdGEtc3RyaW5nPSIiPjwvZGl2PgogICAgCiAgICAKICAgICAgICAgICAgPHNjcmlwdCBhc3luYyBkZWZlciBzcmM9Imh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9QUl6YVN5Q3U5aFpPaFBtYnhNUUhaeTN2cDZoQlo2S0d4V0Vrd1E0JmxpYnJhcmllcz1wbGFjZXMmY2FsbGJhY2s9aW5pdE1hcCI+PC9zY3JpcHQ+CiAgICAgICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgICAgICB2YXIgbWFwOwogICAgICAgICAgICAgICAgdmFyIGdlb2NvZGVyOwogICAgICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSBbXTsKICAgICAgICAgICAgICAgIHZhciBtYXBTdHlsZSA9ICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiI2Y1ZjVmNSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLmljb24iLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlzaWJpbGl0eSI6ICJvZmYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiIzYxNjE2MSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuc3Ryb2tlIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNmNWY1ZjUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogImFkbWluaXN0cmF0aXZlLmxhbmRfcGFyY2VsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiI2JkYmRiZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAicG9pIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNlZWVlZWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInBvaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM3NTc1NzUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInBvaS5wYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNlNWU1ZTUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInBvaS5wYXJrIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiIzllOWU5ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAicm9hZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJnZW9tZXRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjZmZmZmZmIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJyb2FkLmFydGVyaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiIzc1NzU3NSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAicm9hZC5oaWdod2F5IiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNkYWRhZGEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInJvYWQuaGlnaHdheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50VHlwZSI6ICJsYWJlbHMudGV4dC5maWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiM2MTYxNjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogInJvYWQubG9jYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAibGFiZWxzLnRleHQuZmlsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzdHlsZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciI6ICIjOWU5ZTllIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICJmZWF0dXJlVHlwZSI6ICJ0cmFuc2l0LmxpbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAiZWxlbWVudFR5cGUiOiAiZ2VvbWV0cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiI2U1ZTVlNSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAiZmVhdHVyZVR5cGUiOiAidHJhbnNpdC5zdGF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNlZWVlZWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogIndhdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImdlb21ldHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgInN0eWxlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbG9yIjogIiNjOWM5YzkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgImZlYXR1cmVUeXBlIjogIndhdGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgImVsZW1lbnRUeXBlIjogImxhYmVscy50ZXh0LmZpbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAic3R5bGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sb3IiOiAiIzllOWU5ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdE1hcCgpIHsKICAgICAgICAgICAgICAgICAgICBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnbWFwJyksIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyOiB7bGF0OiA0OC43Nzk1OTQyLCBsbmc6IDguMjA1ODY3NH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDYsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IG1hcFN0eWxlCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB2YXIgZXVNZW1iZXJzID0gWzEzLDIwLDIyLDUyLDUzLDU0LDU2LDYxLDY1LDY3LDcyLDg1LDkzLDk1LDk3LDEwNCwxMjYsMTI3LDEyOCwxNDQsMTU3LDE3MCwxNzQsMTc5LDE4NiwxODksMTkxXTsKICAgICAgICAgICAgICAgICAgICB2YXIgYWxsQ2F0ZWdvcnlVaWRzID0gJCgnLmNhdGVnb3JpZXMtY2ItY29udGFpbmVyJykuZGF0YSgnYWxsLWNhdGVnb3J5LXVpZHMnKS5zcGxpdCgnLCcpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZm9ybSA9ICQoJyNzZWxlY3RGb3JtJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnlTZWxlY3QgPSAkKCcjY291bnRyeS1zZWxlY3QnKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25DaGVja2JveCA9ICQoJyNjYi1sb2NhdGlvbicpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25TZWFyY2hDb250YWluZXIgPSAkKCcubG9jYXRpb24tc2VhcmNoLWNvbnRhaW5lcicpOwogICAgICAgICAgICAgICAgICAgIHZhciBjYXRlZ29yeVNlYXJjaENvbnRhaW5lciA9ICQoJy5jYXRlZ29yeS1zZWFyY2gtY29udGFpbmVyJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyQ29udGFpbmVyID0gJCgnLm5vdGlmaWVyLWNvbnRhaW5lcicpOwogICAgICAgICAgICAgICAgICAgIHZhciBzdWJtaXRCdXR0b25Db250YWluZXIgPSAkKCcuc3VibWl0LWJ1dHRvbi1jb250YWluZXInKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0Q29udGFpbmVyID0gJCgnLnJlc3VsdC1jb250YWluZXInKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbWFwQ29udGFpbmVyID0gJCgnLmRlYWxlci1zZWFyY2gtbWFwLXdyYXAnKTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnlDYXRlZ29yaWVzID0gJyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnlOYW1lID0gJyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc2FibGVkQ2F0ZWdvcmllcyA9ICcnOwoKICAgICAgICAgICAgICAgICAgICB2YXIgbW9iaWxlQ2hlY2sgPSAkKCcjbW9iaWxlLWNoZWNrJyk7CgogICAgICAgICAgICAgICAgICAgIHZhciBhamF4VXJsID0gZmlsdGVyZm9ybS5kYXRhKCdhamF4dXJsJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdldENvdW50cnlDb2RlQWpheFVybCA9IGxvY2F0aW9uQ2hlY2tib3guZGF0YSgnYWpheHVybCcpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZGVlcGxpbmsgPSAkKCcjZGVlcGxpbmsnKS5kYXRhKCdzdHJpbmcnKSA9PSAxOwoKICAgICAgICAgICAgICAgICAgICBpZihkZWVwbGluayl7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDYXRlZ29yaWVzID0gY291bnRyeVNlbGVjdC5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5kYXRhKCdjYXRlZ29yaWVzJykgKyAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeU5hbWUgPSBjb3VudHJ5U2VsZWN0LmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLmRhdGEoJ25hbWUnKSArICcnOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmljaHQgaW0gTGFuZCB2b3JoYW5kZW5lIENhdGVnb3JpZXMgZGlzYWJsZW4KICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRDYXRlZ29yaWVzID0gYXJyX2RpZmYgKGFsbENhdGVnb3J5VWlkcywgY291bnRyeUNhdGVnb3JpZXMuc3BsaXQoJywnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzYWJsZWRDYXRlZ29yaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY2F0ZWdvcnktY2JbdmFsdWU9IicgKyBkaXNhYmxlZENhdGVnb3JpZXNbaV0gKyAnIl0nKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNhdGVnb3J5LWNiW3ZhbHVlPSInICsgZGlzYWJsZWRDYXRlZ29yaWVzW2ldICsgJyJdJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jYXRlZ29yeS1jYlt2YWx1ZT0iJyArIGRpc2FibGVkQ2F0ZWdvcmllc1tpXSArICciXScpLmNsb3Nlc3QoJy5jaGVja2JveC13cmFwcGVyJykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5U2VhcmNoQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b25Db250YWluZXIuc2xpZGVEb3duKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFycmF5Q29udGFpbnMocGFyc2VJbnQoY291bnRyeVNlbGVjdC52YWwoKSksZXVNZW1iZXJzKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllckNvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllckNvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4Q2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmsnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1vYmlsZUNoZWNrLmlzKCc6dmlzaWJsZScpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubW9iaWxlLXJlc2V0LXNlYXJjaCcpLmZhZGVJbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5kZWFsZXItc2VhcmNoLWZvcm0nKS5mYWRlT3V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm1hcC1oZWFkbGluZScpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI21hcC1oZWFkbGluZS1jb3VudHJ5JykudGV4dChjb3VudHJ5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgY291bnRyeVNlbGVjdC5vbignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNhdGVnb3JpZXMgPSAkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLmRhdGEoJ2NhdGVnb3JpZXMnKSArICcnOwogICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5TmFtZSA9ICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykuZGF0YSgnbmFtZScpICsgJyc7CgogICAgICAgICAgICAgICAgICAgICAgICBpZigkKHRoaXMpLnZhbCgpID09PSAnJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeVNlYXJjaENvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b25Db250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXJDb250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VubiBVc2VyIFNlbGVjdC1WYWx1ZSDDpG5kZXJ0LCBTdGFuZG9ydC1DaGVja2JveCByZXNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQ2hlY2tib3gudmFsKCcwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25DaGVja2JveC5wcm9wKCdjaGVja2VkJywgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWVycm9yJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWxvYWQnKS5oaWRlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsZSBDYXRlZ29yaWVzIHdpZWRlciBlbmFibGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY2F0ZWdvcnktY2InKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5jaGVja2JveC13cmFwcGVyJykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5pY2h0IGltIExhbmQgdm9yaGFuZGVuZSBDYXRlZ29yaWVzIGRpc2FibGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZENhdGVnb3JpZXMgPSBhcnJfZGlmZiAoYWxsQ2F0ZWdvcnlVaWRzLCBjb3VudHJ5Q2F0ZWdvcmllcy5zcGxpdCgnLCcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzYWJsZWRDYXRlZ29yaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNhdGVnb3J5LWNiW3ZhbHVlPSInICsgZGlzYWJsZWRDYXRlZ29yaWVzW2ldICsgJyJdJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY2F0ZWdvcnktY2JbdmFsdWU9IicgKyBkaXNhYmxlZENhdGVnb3JpZXNbaV0gKyAnIl0nKS5jbG9zZXN0KCcuY2hlY2tib3gtd3JhcHBlcicpLmFkZENsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5U2VhcmNoQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXJyYXlDb250YWlucyhwYXJzZUludCgkKHRoaXMpLnZhbCgpKSxldU1lbWJlcnMpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllckNvbnRhaW5lci5zbGlkZURvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5tYXAtaGVhZGxpbmUnKS5zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbWFwLWhlYWRsaW5lLWNvdW50cnknKS50ZXh0KGNvdW50cnlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQ2hlY2tib3gub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q29udGFpbmVyLnNsaWRlVXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja2VkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcxJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5U2VsZWN0LnZhbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZ2VvbG9jYXRpb24tbG9hZCcpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocG9zaXRpb24pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGVybWl0dGVsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgIT09IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1sb2FkJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2NhdGlvbkNvdW50cnlDb2RlKGdldENvdW50cnlDb2RlQWpheFVybCwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLCBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmVobGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2dlb2xvY2F0aW9uLWVycm9yJykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1sb2FkJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJzAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlTZWxlY3QudmFsKCcnKS5jaGFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1lcnJvcicpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNnZW9sb2NhdGlvbi1sb2FkJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZm9ybS5zdWJtaXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgYWpheENhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVyLnNsaWRlRG93bigpOwogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDb250YWluZXIuc2xpZGVEb3duKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1vYmlsZUNoZWNrLmlzKCc6dmlzaWJsZScpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2JvZHksaHRtbCcpLmFuaW1hdGUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogJCgnLmRlYWxlci1zZWFyY2gtbWFwLXdyYXAnKS5vZmZzZXQoKS50b3AgLSAkKCcucGFnZS1oZWFkZXInKS5vdXRlckhlaWdodCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA4MDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5tb2JpbGUtcmVzZXQtc2VhcmNoJykuZmFkZUluKCdzbG93Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuZGVhbGVyLXNlYXJjaC1mb3JtJykuZmFkZU91dCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3RtRXZlbnRMYWJlbCA9ICQoJyNjb3VudHJ5LXNlbGVjdCBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCkgKyAnIC0nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2NiLUF1dG9wb2xpdHVyZW4nKS5pcygiOmNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBndG1FdmVudExhYmVsID0gZ3RtRXZlbnRMYWJlbCArICcgQXV0b3BvbGl0dXJlbic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2NiLUJvb3RzcG9saXR1cmVuJykuaXMoIjpjaGVja2VkIikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RtRXZlbnRMYWJlbCA9IGd0bUV2ZW50TGFiZWwgKyAnIEJvb3RzcG9saXR1cmVuJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZigkKCcjY2ItRmVzdHBhc3RlbicpLmlzKCI6Y2hlY2tlZCIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0bUV2ZW50TGFiZWwgPSBndG1FdmVudExhYmVsICsgJyBGZXN0cGFzdGVuJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ0hhZW5kbGVyc3VjaGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdzdWNoZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdjbGljaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ3RtRXZlbnRMYWJlbAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0TG9jYXRpb25Db3VudHJ5Q29kZShhamF4VXJsLCBsYXQsIGxvbikgewogICAgICAgICAgICAgICAgICAgICAgICAkLnBvc3QoYWpheFVybCwgeyAndHhfcHhwZGVhbGVyc19hamF4Y2FsbFtsYXRdJzogbGF0LCAndHhfcHhwZGVhbGVyc19hamF4Y2FsbFtsb25dJzogbG9uIH0sIGZ1bmN0aW9uKHJlc3BvbnNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25WYWx1ZSA9ICQoJyNjb3VudHJ5LXNlbGVjdCBvcHRpb25bZGF0YS1pc28yPScrcmVzcG9uc2UrJ10nKS52YWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlTZWxlY3QudmFsKG9wdGlvblZhbHVlKS5jaGFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhamF4Q2FsbCgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNYXJrZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhY2NvcmRpb24nKS5odG1sKCcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJC5wb3N0KGFqYXhVcmwsIGZpbHRlcmZvcm0uc2VyaWFsaXplKCksIGZ1bmN0aW9uKHJlc3BvbnNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBCb3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCAmJiByZXNwb25zZS5sZW5ndGggIT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChyZXNwb25zZSwgZnVuY3Rpb24oaSwgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmxhdCAhPT0gJycgJiYgaXRlbS5sb24gIT09ICcnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhpdGVtLmxhdCwgaXRlbS5sb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItcmVkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogaXRlbS5sb2NhdGlvbmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0uYWRkaXRpb25hbExhdE9uZSAhPT0gJycgJiYgaXRlbS5hZGRpdGlvbmFsTG9uT25lICE9PSAnJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxNYXJrZXJPbmUgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoaXRlbS5hZGRpdGlvbmFsTGF0T25lLCBpdGVtLmFkZGl0aW9uYWxMb25PbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXA6IG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBnb29nbGUubWFwcy5BbmltYXRpb24uRFJPUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6IGl0ZW0ubG9jYXRpb25pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMucHVzaChhZGRpdGlvbmFsTWFya2VyT25lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBCb3VuZHMuZXh0ZW5kKGFkZGl0aW9uYWxNYXJrZXJPbmUucG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5hZGRpdGlvbmFsTGF0VHdvICE9PSAnJyAmJiBpdGVtLmFkZGl0aW9uYWxMb25Ud28gIT09ICcnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRkaXRpb25hbE1hcmtlclR3byA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhpdGVtLmFkZGl0aW9uYWxMYXRUd28sIGl0ZW0uYWRkaXRpb25hbExvblR3byksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLXJlZC5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogaXRlbS5sb2NhdGlvbmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKGFkZGl0aW9uYWxNYXJrZXJUd28pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEJvdW5kcy5leHRlbmQoYWRkaXRpb25hbE1hcmtlclR3by5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmFkZGl0aW9uYWxMYXRUaHJlZSAhPT0gJycgJiYgaXRlbS5hZGRpdGlvbmFsTG9uVGhyZWUgIT09ICcnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRkaXRpb25hbE1hcmtlclRocmVlID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGl0ZW0uYWRkaXRpb25hbExhdFRocmVlLCBpdGVtLmFkZGl0aW9uYWxMb25UaHJlZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLXJlZC5wbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5EUk9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogaXRlbS5sb2NhdGlvbmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKGFkZGl0aW9uYWxNYXJrZXJUaHJlZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChhZGRpdGlvbmFsTWFya2VyVGhyZWUucG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5hZGRpdGlvbmFsTGF0Rm91ciAhPT0gJycgJiYgaXRlbS5hZGRpdGlvbmFsTG9uRm91ciAhPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsTWFya2VyRm91ciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhpdGVtLmFkZGl0aW9uYWxMYXRGb3VyLCBpdGVtLmFkZGl0aW9uYWxMb25Gb3VyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItcmVkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmxvY2F0aW9uaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2goYWRkaXRpb25hbE1hcmtlckZvdXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEJvdW5kcy5leHRlbmQoYWRkaXRpb25hbE1hcmtlckZvdXIucG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5hZGRpdGlvbmFsTGF0Rml2ZSAhPT0gJycgJiYgaXRlbS5hZGRpdGlvbmFsTG9uRml2ZSAhPT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsTWFya2VyRml2ZSA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhpdGVtLmFkZGl0aW9uYWxMYXRGaXZlLCBpdGVtLmFkZGl0aW9uYWxMb25GaXZlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItcmVkLnBuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZ29vZ2xlLm1hcHMuQW5pbWF0aW9uLkRST1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiBpdGVtLmxvY2F0aW9uaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2goYWRkaXRpb25hbE1hcmtlckZpdmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcEJvdW5kcy5leHRlbmQoYWRkaXRpb25hbE1hcmtlckZpdmUucG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwQm91bmRzLmV4dGVuZChtYXJrZXIucG9zaXRpb24pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhY2NvcmRpb24nKS5hcHBlbmQoZ2V0SHRtbFRlbXBsYXRlKGl0ZW0saSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbkxpc3RFbnRyeSA9ICQoJyNsb2NhdGlvbicgKyBpdGVtLmxvY2F0aW9uaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0RW50cnkuYmluZCgnY2xpY2snLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChtYXJrZXJzLCBmdW5jdGlvbihpLG1hcmtlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldEljb24oJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jb2xsYXBzZScpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdzaG93Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICQoJy5jb2xsYXBzZS1saW5rJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkKHRoaXMpLmNsb3Nlc3QoJy5wYW5lbCcpLmZpbmQoJy5jb2xsYXBzZScpLmlzKCc6dmlzaWJsZScpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5zaWJsaW5ncygnLnBhbmVsJykuZmluZCgnLmNvbGxhcHNlLWxpbmsnKS5hZGRDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnBhbmVsJykuc2libGluZ3MoJy5wYW5lbCcpLmZpbmQoJy5hY2NvcmRpb24tY29sbGFwc2UnKS5yZW1vdmVDbGFzcygnc2hvdycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuY2xvc2VzdCgnLnBhbmVsJykuZmluZCgnLmFjY29yZGlvbi1jb2xsYXBzZScpLmhhc0NsYXNzKCdzaG93JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5maW5kKCcuYWNjb3JkaW9uLWNvbGxhcHNlJykuaGFzQ2xhc3MoJ2NvbGxhcHNpbmcnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnBhbmVsJykuZmluZCgnLmFjY29yZGlvbi1jb2xsYXBzZScpLmFkZENsYXNzKCdzaG93Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnY29sbGFwc2VkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldEljb24oJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1ncmV5LnBuZycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyT25lICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJPbmUuc2V0SWNvbignL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLWdyZXkucG5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyT25lLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyVHdvICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJUd28uc2V0SWNvbignL3R5cG8zY29uZi9leHQvcHhwZGVhbGVycy9SZXNvdXJjZXMvUHVibGljL0ltYWdlcy9tYXAtbWFya2VyLWdyZXkucG5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyVHdvLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyVGhyZWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlclRocmVlLnNldEljb24oJy90eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1ncmV5LnBuZycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbE1hcmtlclRocmVlLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyRm91ciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyRm91ci5zZXRJY29uKCcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItZ3JleS5wbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJGb3VyLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyRml2ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWFya2VyRml2ZS5zZXRJY29uKCcvdHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItZ3JleS5wbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxNYXJrZXJGaXZlLnNldEFuaW1hdGlvbihnb29nbGUubWFwcy5BbmltYXRpb24uQk9VTkNFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyQ2xpY2tMaXN0ZW5lciAobWFya2VyLCBtYXJrZXJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFkZGl0aW9uYWxNYXJrZXJPbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckNsaWNrTGlzdGVuZXIoYWRkaXRpb25hbE1hcmtlck9uZSwgbWFya2Vycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyVHdvICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJDbGlja0xpc3RlbmVyKGFkZGl0aW9uYWxNYXJrZXJUd28sIG1hcmtlcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYWRkaXRpb25hbE1hcmtlclRocmVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJDbGlja0xpc3RlbmVyKGFkZGl0aW9uYWxNYXJrZXJUaHJlZSwgbWFya2Vycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyRm91ciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyQ2xpY2tMaXN0ZW5lcihhZGRpdGlvbmFsTWFya2VyRm91ciwgbWFya2Vycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhZGRpdGlvbmFsTWFya2VyRml2ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyQ2xpY2tMaXN0ZW5lcihhZGRpdGlvbmFsTWFya2VyRml2ZSwgbWFya2Vycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5pc09ubHlPbmxpbmVzaG9wID09PSB0cnVlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1hcmtlcnNbaV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbaV0uc2V0TWFwKG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyhtYXBCb3VuZHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXJNYXJrZXJzKCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tpXS5zZXRNYXAobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VycyA9IFtdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFya2VyQ2xpY2tMaXN0ZW5lcihtYXJrZXJUZW1wLCBtYXJrZXJBcnJheSkgewogICAgICAgICAgICAgICAgICAgICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihtYXJrZXJUZW1wLCAnY2xpY2snLCAoZnVuY3Rpb24obWFya2VyLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG1hcmtlckFycmF5LCBmdW5jdGlvbihpLG1hcmtlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLnNldE9wdGlvbnMoe2ljb246ICJ0eXBvM2NvbmYvZXh0L3B4cGRlYWxlcnMvUmVzb3VyY2VzL1B1YmxpYy9JbWFnZXMvbWFwLW1hcmtlci1yZWQucG5nIn0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRPcHRpb25zKHtpY29uOiAidHlwbzNjb25mL2V4dC9weHBkZWFsZXJzL1Jlc291cmNlcy9QdWJsaWMvSW1hZ2VzL21hcC1tYXJrZXItZ3JleS5wbmcifSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnLmNvbGxhcHNlLWxpbmsnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnI2xvY2F0aW9uJyttYXJrZXIubG9jYXRpb25faWQpLmFkZENsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkKCcuY29sbGFwc2UtbGluaycpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSkuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICQoJyNsb2NhdGlvbicrbWFya2VyLmxvY2F0aW9uX2lkKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbG9jYXRpb24nK21hcmtlci5sb2NhdGlvbl9pZCkuY2xpY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0QW5pbWF0aW9uKGdvb2dsZS5tYXBzLkFuaW1hdGlvbi5CT1VOQ0UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKCcjbG9jYXRpb24nK21hcmtlci5sb2NhdGlvbl9pZCkub2Zmc2V0KCkudG9wIC0gKCQoJy5wYWdlLWhlYWRlcicpLm91dGVySGVpZ2h0KCkgKyAzNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSkobWFya2VyVGVtcCwgaSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJyYXlDb250YWlucyhuZWVkbGUsIGFycmhheXN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYXJyaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpID4gLTEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcnJfZGlmZiAoYTEsIGEyKSB7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IFtdLCBkaWZmID0gW107CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ExW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhW2EyW2ldXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhW2EyW2ldXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVthMltpXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYucHVzaChrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICAKICAgIDxzY3JpcHQ+CiAgICAgICAgJChkb2N1bWVudC5ib2R5KS5vbignY2xpY2snLCcubW9iaWxlLWNsb3NlLWFjY29yZGlvbi10cmlnZ2VyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vICQodGhpcykuY2xvc2VzdCgnLmNvbGxhcHNlJykuc2xpZGVVcCgpOwogICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5hY2NvcmRpb24taXRlbScpLmZpbmQoJy5hY2NvcmRpb24tY29sbGFwc2UnKS5yZW1vdmVDbGFzcygnc2hvdycpOwogICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5hY2NvcmRpb24taXRlbScpLmZpbmQoJy5jb2xsYXBzZS1saW5rJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgIH0pOwoKICAgICAgICAkKGRvY3VtZW50LmJvZHkpLm9uKCdjbGljaycsJyNyZXNldC1zZWFyY2gnLCBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGNvdW50cnlTZWxlY3QudmFsKCcnKS5jaGFuZ2UoKTsKICAgICAgICAgICAgY2F0ZWdvcnlTZWFyY2hDb250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICBzdWJtaXRCdXR0b25Db250YWluZXIuc2xpZGVVcCgpOwogICAgICAgICAgICBub3RpZmllckNvbnRhaW5lci5zbGlkZVVwKCk7CiAgICAgICAgICAgICQoJy5kZWFsZXItc2VhcmNoLWZvcm0nKS5mYWRlSW4oKTsKICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KCk7CiAgICAgICAgfSk7CgogICAgICAgICQoZG9jdW1lbnQuYm9keSkub24oJ2NsaWNrJywnLml0ZW0tbGluaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZigkKHRoaXMpLmRhdGEoJ2FuYWx5dGljc2V2ZW50JykgIT09ICcnKXsKICAgICAgICAgICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwogICAgICAgICAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBldmVudDogJ0hhZW5kbGVyc3VjaGUnLAogICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnd2VpdGVybGVpdHVuZycsCiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnY2xpY2snLAogICAgICAgICAgICAgICAgICAgIGxhYmVsOiAkKHRoaXMpLmRhdGEoJ2FuYWx5dGljc2V2ZW50JykKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIGdldEh0bWxUZW1wbGF0ZShpdGVtLGkpewogICAgICAgICAgICB2YXIgY29udGFjdEhlYWRsaW5lID0gJCgnI2NvbnRhY3QtaGVhZGxpbmUnKS5kYXRhKCdzdHJpbmcnKTsKICAgICAgICAgICAgdmFyIGNhdGVnb3JpZXNIZWFkbGluZSA9ICQoJyNjYXRlZ29yaWVzLWhlYWRsaW5lJykuZGF0YSgnc3RyaW5nJyk7CiAgICAgICAgICAgIHZhciB0ZXh0TGlua09ubGluZXNob3AgPSAkKCcjdGV4dC1saW5rLW9ubGluZXNob3AnKS5kYXRhKCdzdHJpbmcnKTsKICAgICAgICAgICAgdmFyIHRleHRMaW5rV2Vic2l0ZSA9ICQoJyN0ZXh0LWxpbmstd2Vic2l0ZScpLmRhdGEoJ3N0cmluZycpOwogICAgICAgICAgICB2YXIgY2xvc2VBY2NvcmRpb25UcmlnZ2VyVGV4dCA9ICQoJyN0ZXh0LWNsb3NlLWFjY29yZGlvbicpLmRhdGEoJ3N0cmluZycpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3JDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoaSA9PSAnMCcpIHsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yQ2xhc3MgPSAnIGZpcnN0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFuYWx5dGljc0V2ZW50ID0gJyc7CiAgICAgICAgICAgIGlmKGl0ZW0uYW5hbHl0aWNzRXZlbnQgIT0gJycpewogICAgICAgICAgICAgICAgYW5hbHl0aWNzRXZlbnQgPSBpdGVtLmFuYWx5dGljc0V2ZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJhY2NvcmRpb24taXRlbSBwYW5lbCI+JzsKCiAgICAgICAgICAgIGh0bWwgICArPSAnIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImFjY29yZGlvbi10aXRsZSBjb2xsYXBzZS1saW5rIGNvbGxhcHNlZCIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIiBpZD0ibG9jYXRpb24nICsgaXRlbS5sb2NhdGlvbmlkICsnIiBkYXRhLWJzLXRhcmdldD0iI2NvbGxhcHNlJyArIGl0ZW0ubG9jYXRpb25pZCArJyIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtY29udHJvbHM9ImxvY2F0aW9uJyArIGl0ZW0ubG9jYXRpb25pZCArJyI+JzsKICAgICAgICAgICAgaHRtbCAgICs9ICc8ZGl2IGNsYXNzPSJhY2MtdGl0bGUiPicgKyBpdGVtLnRpdGxlICsnPC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgICArPSAnPGRpdiBjbGFzcz0iYWNjLXN1YnRpdGxlIj4nICsgaXRlbS5zdWJ0aXRsZSArJzwvZGl2PjwvYT4nOwoKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgZGF0YS1icy1wYXJlbnQ9IiNhY2NvcmRpb24iIGlkPSJjb2xsYXBzZScgKyBpdGVtLmxvY2F0aW9uaWQgKyciIGNsYXNzPSJhY2NvcmRpb24tY29sbGFwc2UgY29sbGFwc2UiIHN0eWxlPSIiPic7CiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSI+JzsKCgogICAgICAgICAgICBodG1sICAgKz0nPGRpdiBjbGFzcz0icm93IGRlc2NyaXB0aW9uLXJvdyI+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy04Ij4nOwogICAgICAgICAgICBodG1sICAgKz0nIDxkaXYgY2xhc3M9ImRlYWxlci1kZXNjcmlwdGlvbiI+JyArIGl0ZW0uZGVzY3JpcHRpb24gKyAnPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCAgICs9JzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctNCI+JzsKCiAgICAgICAgICAgIGlmKGl0ZW0uaW1hZ2VVcmwgIT09ICcnKXsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxpbWcgc3JjPSInICsgaXRlbS5pbWFnZVVybCArICciIGNsYXNzPSJpbWctcmVzcG9uc2l2ZSIgd2lkdGg9IjI1MCIgLz4nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBodG1sICAgKz0nPC9kaXY+PC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgICArPScgPGRpdiBjbGFzcz0icm93IGNvbnRhY3Qtcm93Ij4nOwogICAgICAgICAgICBodG1sICAgKz0nPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLWxnLTgiPic7CiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJjYXRlZ29yaWVzLWhlYWRsaW5lIj4nICsgY2F0ZWdvcmllc0hlYWRsaW5lICsgJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgICArPSc8ZGl2IGNsYXNzPSJpdGVtLWNhdGVnb3JpZXMiPic7CgogICAgICAgICAgICBpZihpdGVtLmNhdGVnb3JpZXMgIT09ICcnKXsKICAgICAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzQXJyYXkgPSBpdGVtLmNhdGVnb3JpZXM7CgogICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2F0ZWdvcmllc0FycmF5KSkgewogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Iml0ZW0tY2F0ICcgKyBrZXkgICsgJyI+JyArIHZhbHVlICArICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaHRtbCAgKz0nPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCAgKz0nPC9kaXY+JzsKCiAgICAgICAgICAgIGh0bWwgICs9JzxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy00Ij4nOwoKICAgICAgICAgICAgaHRtbCAgKz0nPGRpdiBjbGFzcz0iY29udGFjdC1oZWFkbGluZSI+JyArIGNvbnRhY3RIZWFkbGluZSArICc8L2Rpdj4nOwoKICAgICAgICAgICAgaWYgKGl0ZW0uYWRkcmVzcykgewogICAgICAgICAgICAgICAgaHRtbCAgKz0nIDxkaXY+PGRpdiBjbGFzcz0iaXRlbS1hZGRyZXNzIj4nICsgaXRlbS5hZGRyZXNzICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpdGVtLnBob25lKSB7CiAgICAgICAgICAgICAgICBodG1sICArPSc8ZGl2PjxkaXYgY2xhc3M9Iml0ZW0tcGhvbmUiPjxhIGhyZWY9InRlbDonKyBpdGVtLnBob25lICsnIj4nICsgaXRlbS5waG9uZSArICc8L2E+PC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGl0ZW0uZW1haWwpIHsKICAgICAgICAgICAgICAgIGh0bWwgICs9JzxkaXY+PGRpdiBjbGFzcz0iaXRlbS1lbWFpbCI+PGEgaHJlZj0ibWFpbHRvOicrIGl0ZW0uZW1haWwgKyciPicgKyBpdGVtLmVtYWlsICsgJzwvYT48L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBodG1sICArPScgIDxkaXYgY2xhc3M9InZpc2l0LXN0b3JlLWxpbmtzIj4nOwoKICAgICAgICAgICAgaWYoaXRlbS5saW5rV2Vic2l0ZSAhPT0gJycpewogICAgICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iJyArIGl0ZW0ubGlua1dlYnNpdGUgKyAnIiBjbGFzcz0iaXRlbS1saW5rIGJ0biIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtYW5hbHl0aWNzZXZlbnQ9IicgKyBhbmFseXRpY3NFdmVudCArICciPicgKyB0ZXh0TGlua1dlYnNpdGUgKyAnPC9hPic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKGl0ZW0ubGlua09ubGluZVNob3AgIT09ICcnKXsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxhIGhyZWY9IicgKyBpdGVtLmxpbmtPbmxpbmVTaG9wICsgJyIgY2xhc3M9Iml0ZW0tbGluayBidG4iIHRhcmdldD0iX2JsYW5rIiBkYXRhLWFuYWx5dGljc2V2ZW50PSInICsgYW5hbHl0aWNzRXZlbnQgKyAnIj4nICsgdGV4dExpbmtPbmxpbmVzaG9wICsgJzwvYT4nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBodG1sICs9JzwvZGl2Pic7CgogICAgICAgICAgICBodG1sICs9JzwvZGl2Pic7CgogICAgICAgICAgICBodG1sICs9JzwvZGl2Pic7CgogICAgICAgICAgICBodG1sICs9JzxkaXYgY2xhc3M9InJvdyI+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiI+JzsKCiAgICAgICAgICAgIGh0bWwgKz0nICA8ZGl2IGNsYXNzPSJtb2JpbGUtY2xvc2UtYWNjb3JkaW9uIj48c3BhbiBjbGFzcz0ibW9iaWxlLWNsb3NlLWFjY29yZGlvbi10cmlnZ2VyIj4nKyBjbG9zZUFjY29yZGlvblRyaWdnZXJUZXh0ICsnPC9zcGFuPjwvZGl2Pic7CgogICAgICAgICAgICBodG1sICs9JzwvZGl2PjwvZGl2PiA8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKCiAgICAgICAgICAgIHJldHVybiBodG1sOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBhcnJheUNvbnRhaW5zKG5lZWRsZSwgYXJyaGF5c3RhY2spIHsKICAgICAgICAgICAgcmV0dXJuIChhcnJoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPiAtMSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFycl9kaWZmIChhMSwgYTIpIHsKCiAgICAgICAgICAgIHZhciBhID0gW10sIGRpZmYgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGFbYTFbaV1dID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGFbYTJbaV1dKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFbYTJbaV1dOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhW2EyW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYSkgewogICAgICAgICAgICAgICAgZGlmZi5wdXNoKGspOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZGlmZjsKICAgICAgICB9CiAgICA8L3NjcmlwdD4KCiAgICAgICAgICAgICAgICAgIA==
By clicking on "Load Google Maps" I consent to the processing of my data by Google. This consent can be revoked at any time with effect for the future. Further information can be found in our privacy policy.