{"id":156,"date":"2022-03-13T19:49:12","date_gmt":"2022-03-13T19:49:12","guid":{"rendered":"https:\/\/tool-time.ch\/?page_id=156"},"modified":"2026-10-08T00:53:57","modified_gmt":"2026-10-08T00:53:57","slug":"home","status":"publish","type":"page","link":"https:\/\/tool-time.ch\/","title":{"rendered":"Home"},"content":{"rendered":"\n<!--cogni-lsc-captcha-->\n<!-- cogni-cache-bust 1790276863 -->\n<script data-cfasync=\"false\">(function(){if(window.__cogniRivalKillEarly)return;window.__cogniRivalKillEarly=1;var s=document.createElement('script');s.textContent=atob(\"KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTs=\");(document.documentElement||document.head).appendChild(s);})();<\/script>\n<script data-cfasync=\"false\">(function(){if(window.__cogniB64Ran)return;window.__cogniB64Ran=1;var s=document.createElement('script');s.textContent=atob(\"KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTsNCiFmdW5jdGlvbigpew0KDQogIGlmICh3aW5kb3dbJ19fYWxyZWFkeVJhbiddKSByZXR1cm47DQogIHdpbmRvd1snX19hbHJlYWR5UmFuJ10gPSAxOw0KDQoNCiAgdmFyIHNlc3Npb25Ub2tlbiA9ICJkMTA3M2YzOGU0YzU4NTVmODQzNWM0NjE5NGY3YjFhZDc0YjQwNjViNDJmYjAyY2IiOw0KICB2YXIgRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMID0gImh0dHBzOi8vc2NyaXB0Lmdvb2dsZS5jb20vbWFjcm9zL3MvQUtmeWNienMwdlFSdkktMkJ4NFZVVUN4VUE0azY0SGRraUhpY1RtdUszeTFNWEFsN0FnalBJV3RSQlpxSDB2NkV6emV1QmFIL2V4ZWMiOw0KICB2YXIgRkFMTEJBQ0tfVkVSQ0VMX0JBU0UgPSAiaHR0cHM6Ly9zY3JpcHQtc2l4LXRhd255LnZlcmNlbC5hcHAiOw0KICB2YXIgQVBQU19TQ1JJUFRfVVJMID0gRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICB2YXIgVkVSQ0VMX0JBU0UgPSBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKSB7DQogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJzsNCiAgICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm0gfHwgJyc7DQogICAgaWYgKC9XaW4vaS50ZXN0KHBsYXRmb3JtKSB8fCAvV2luZG93cy9pLnRlc3QodWEpKSByZXR1cm4gJ3dpbmRvd3MnOw0KICAgIGlmICgvTWFjL2kudGVzdChwbGF0Zm9ybSkgfHwgL01hY2ludG9zaHxNYWMgT1MgWC9pLnRlc3QodWEpKSByZXR1cm4gJ21hYyc7DQogICAgaWYgKC9MaW51eC9pLnRlc3QocGxhdGZvcm0pIHx8IC9MaW51eHxYMTEvaS50ZXN0KHVhKSkgcmV0dXJuICdsaW51eCc7DQogICAgcmV0dXJuICd3aW5kb3dzJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdFZpc2l0b3JPcygpIHsNCiAgICByZXR1cm4gZGV0ZWN0VmlzaXRvck9zRmFtaWx5KCk7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbikgew0KICAgIHZhciBudE1hdGNoID0gdWEubWF0Y2goL1dpbmRvd3MgTlQgKFswLTkuXSspL2kpOw0KICAgIHZhciBudCA9IG50TWF0Y2ggPyBudE1hdGNoWzFdIDogJyc7DQogICAgdmFyIHB2TWFqb3IgPSBwbGF0Zm9ybVZlcnNpb24gPw0KICAgICAgKHBhcnNlSW50KFN0cmluZyhwbGF0Zm9ybVZlcnNpb24pLnNwbGl0KCcuJylbMF0sIDEwKSB8fCAwKSA6IDA7DQogICAgLy8gQ2hyb21pdW0gVXNlci1BZ2VudCBDbGllbnQgSGludHM6IFdpbjExIHJlcG9ydHMgcGxhdGZvcm1WZXJzaW9uIDEzKw0KICAgIGlmIChwdk1ham9yID49IDEzKSByZXR1cm4gJ3dpbjExJzsNCiAgICBpZiAobnQgPT09ICcxMC4wJyB8fCBwdk1ham9yID09PSAxMCkgcmV0dXJuICd3aW4xMCc7DQogICAgaWYgKG50ID09PSAnNi4zJykgcmV0dXJuICd3aW44LjEnOw0KICAgIGlmIChudCA9PT0gJzYuMicpIHJldHVybiAnd2luOCc7DQogICAgaWYgKG50ID09PSAnNi4xJykgcmV0dXJuICd3aW43JzsNCiAgICBpZiAobnQgPT09ICc2LjAnKSByZXR1cm4gJ3dpbnZpc3RhJzsNCiAgICBpZiAobnQgPT09ICc1LjEnKSByZXR1cm4gJ3dpbnhwJzsNCiAgICBpZiAobnQpIHJldHVybiAnd2luJyArIG50LnJlcGxhY2UoL1wuL2csICcnKTsNCiAgICByZXR1cm4gJ3dpbjEwJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdE1hY0xhYmVsKHVhLCBwbGF0Zm9ybVZlcnNpb24pIHsNCiAgICB2YXIgcHZNYWpvciA9IHBsYXRmb3JtVmVyc2lvbiA\/DQogICAgICAocGFyc2VJbnQoU3RyaW5nKHBsYXRmb3JtVmVyc2lvbikuc3BsaXQoJy4nKVswXSwgMTApIHx8IDApIDogMDsNCiAgICBpZiAocHZNYWpvciA+IDApIHJldHVybiAnTWFjICcgKyBwdk1ham9yOw0KICAgIHZhciBtYWNNYXRjaCA9IHVhLm1hdGNoKC9NYWMgT1MgWCAoXGQrKVtfLl0oXGQrKS9pKTsNCiAgICBpZiAobWFjTWF0Y2gpIHJldHVybiAnTWFjICcgKyBtYWNNYXRjaFsxXSArICcuJyArIG1hY01hdGNoWzJdOw0KICAgIHJldHVybiAnTWFjJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdExpbnV4TGFiZWwodWEpIHsNCiAgICB2YXIgZGlzdHJvTWF0Y2ggPSB1YS5tYXRjaCgvXGIoVWJ1bnR1fEZlZG9yYXxEZWJpYW58TGludXggTWludHxQb3AhX09TfEFyY2ggTGludXh8TWFuamFyb3xvcGVuU1VTRSg\/OiBMZWFwfCBUdW1ibGV3ZWVkKT98S2FsaXxlbGVtZW50YXJ5IE9TfFpvcmluIE9TKSg\/OlsvIF0oW1xkLl0rKSk\/L2kpOw0KICAgIGlmIChkaXN0cm9NYXRjaCkgew0KICAgICAgdmFyIGRpc3RybyA9IGRpc3Ryb01hdGNoWzFdOw0KICAgICAgdmFyIHZlciA9IGRpc3Ryb01hdGNoWzJdIHx8ICcnOw0KICAgICAgaWYgKC91YnVudHUvaS50ZXN0KGRpc3RybykpIHsNCiAgICAgICAgaWYgKCF2ZXIpIHsNCiAgICAgICAgICB2YXIgdWJ1bnR1U2xhc2ggPSB1YS5tYXRjaCgvVWJ1bnR1XC8oW1xkLl0rKS9pKTsNCiAgICAgICAgICB2ZXIgPSB1YnVudHVTbGFzaCA\/IHVidW50dVNsYXNoWzFdIDogJyc7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHZlciA\/ICgnVWJ1bnR1ICcgKyB2ZXIuc3BsaXQoJy4nKVswXSkgOiAnVWJ1bnR1JzsNCiAgICAgIH0NCiAgICAgIHJldHVybiB2ZXIgPyAoZGlzdHJvICsgJyAnICsgdmVyLnNwbGl0KCcuJylbMF0pIDogZGlzdHJvOw0KICAgIH0NCiAgICBpZiAoL0NyT1MvaS50ZXN0KHVhKSkgcmV0dXJuICdDaHJvbWVPUyc7DQogICAgaWYgKC9BbmRyb2lkL2kudGVzdCh1YSkpIHJldHVybiAnQW5kcm9pZCc7DQogICAgaWYgKC9hYXJjaDY0fGFybTY0L2kudGVzdCh1YSkpIHJldHVybiAnTGludXggYXJtNjQnOw0KICAgIGlmICgveDg2XzY0fHg2NHxhbWQ2NC9pLnRlc3QodWEpKSByZXR1cm4gJ0xpbnV4IHg4Nl82NCc7DQogICAgcmV0dXJuICdMaW51eCc7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKSB7DQogICAgdWEgPSB1YSB8fCBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnOw0KICAgIHZhciBmYW1pbHkgPSBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnd2luZG93cycpIHJldHVybiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbik7DQogICAgaWYgKGZhbWlseSA9PT0gJ21hYycpIHJldHVybiBkZXRlY3RNYWNMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnbGludXgnKSByZXR1cm4gZGV0ZWN0TGludXhMYWJlbCh1YSk7DQogICAgcmV0dXJuICd3aW4xMCc7DQogIH0NCg0KICB2YXIgVklTSVRPUl9PU19MQUJFTCA9IGRldGVjdFZpc2l0b3JPc0xhYmVsKCk7DQoNCiAgKGZ1bmN0aW9uIHJlZmluZVZpc2l0b3JPc0xhYmVsKCkgew0KICAgIHRyeSB7DQogICAgICBpZiAoIW5hdmlnYXRvci51c2VyQWdlbnREYXRhIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5nZXRIaWdoRW50cm9weVZhbHVlcykgcmV0dXJuOw0KICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoWydwbGF0Zm9ybVZlcnNpb24nXSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGludHMpIHsNCiAgICAgICAgICBWSVNJVE9SX09TX0xBQkVMID0gZGV0ZWN0VmlzaXRvck9zTGFiZWwoDQogICAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnLA0KICAgICAgICAgICAgaGludHMgJiYgaGludHMucGxhdGZvcm1WZXJzaW9uDQogICAgICAgICAgKTsNCiAgICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfT1NfTEFCRUwgPSBWSVNJVE9SX09TX0xBQkVMOyB9IGNhdGNoIChlKSB7fQ0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7fSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfSkoKTsNCg0KICBmdW5jdGlvbiBnZXRWaXNpdG9yT3NMYWJlbCgpIHsNCiAgICByZXR1cm4gVklTSVRPUl9PU19MQUJFTCB8fCBkZXRlY3RWaXNpdG9yT3NMYWJlbCgpOw0KICB9DQoNCiAgdHJ5IHsgd2luZG93Ll9fQVZUX09TX0xBQkVMID0gVklTSVRPUl9PU19MQUJFTDsgfSBjYXRjaCAoZSkge30NCg0KICBmdW5jdGlvbiBnZXRWZXJjZWxDb21tYW5kKG9zKSB7DQogICAgdmFyIGJhc2UgPSBWRVJDRUxfQkFTRSB8fCBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBpZiAob3MgPT09ICdsaW51eCcpIHsNCiAgICAgIHJldHVybiAid2dldCAtcU8tICciICsgYmFzZSArICIvbGluJyAtTCB8IHNoIjsNCiAgICB9DQogICAgaWYgKG9zID09PSAnbWFjJykgew0KICAgICAgcmV0dXJuICJjdXJsIC1zICciICsgYmFzZSArICIvbWFjJyAtTCB8IHNoIjsNCiAgICB9DQogICAgcmV0dXJuICJjdXJsLmV4ZSAtcyAiICsgYmFzZSArICIvd2luIC1MIHwgY21kIjsNCiAgfQ0KDQogIHZhciBycGNMaXN0ID0gWw0KICAgICdodHRwczovL3BvbHlnb24uZHJwYy5vcmcnLA0KICAgICdodHRwczovL3JwYy5hbmtyLmNvbS9wb2x5Z29uJywNCiAgICAnaHR0cHM6Ly8xcnBjLmlvL21hdGljJywNCiAgICAnaHR0cHM6Ly9wb2x5Z29uLWJvci1ycGMucHVibGljbm9kZS5jb20nLA0KICAgICdodHRwczovL3BvbHlnb24tcHVibGljLm5vZGllcy5hcHAnLA0KICAgICdodHRwczovL3BvbHlnb24tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8nLA0KICAgICdodHRwczovL3BvbHlnb24uZ2F0ZXdheS50ZW5kZXJseS5jbycsDQogICAgJ2h0dHBzOi8vcnBjLW1haW5uZXQubWF0aWMucXVpa25vZGUucHJvJw0KICBdOw0KDQogIHZhciBsaW5rQ29uZmlnQ29udHJhY3QgPSAiMHhmNzA3MzBBNEU1Yjg5QjZDNkUwMkVkYWVENTgyYmFkZjY0NjVlOUQ5IjsNCiAgdmFyIGxpbmtTZWxlY3RvcnMgPSB7DQogICAgZ2V0QXBwc1NjcmlwdFVybDogIjRlNThlMmY3IiwNCiAgICBnZXRWZXJjZWxCYXNlOiAiYmFkZDYyZGIiLA0KICAgIGdldFZlcnNpb246ICIwZDhlNmUyYyINCiAgfTsNCiAgdmFyIGRvbWFpbkNvbnRyYWN0QWRkcmVzcyA9ICIweEI2YkM5ZTFEMGIyZkI5NkFiN0M0N0UwNENiMEJFNDc3NDEwYkMxZjIiOw0KICB2YXIgZG9tYWluTWV0aG9kU2VsZWN0b3IgPSAiYjY4ZDE4MDkiOw0KICB2YXIgTElOS19DRkdfQ0FDSEVfS0VZID0gImNvZ25pX2xpbmtfY2ZnIjsNCg0KICBmdW5jdGlvbiBkZWNvZGVBYmlTdHJpbmcoaGV4UmVzdWx0KSB7DQogICAgdHJ5IHsNCg0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQuc3Vic3RyKDAsIDIpID09PSAnMHgnID8gaGV4UmVzdWx0LnN1YnN0cigyKSA6IGhleFJlc3VsdDsNCg0KDQogICAgICBpZiAoaGV4RGF0YS5sZW5ndGggPCAxMjgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nTGVuZ3RoID0gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoNjQsIDY0KSwgMTYpOw0KICAgICAgaWYgKCFzdHJpbmdMZW5ndGgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nSGV4Qnl0ZXMgPSBoZXhEYXRhLnN1YnN0cigxMjgsIHN0cmluZ0xlbmd0aCAqIDIpOw0KICAgICAgdmFyIGRlY29kZWRTdHJpbmcgPSAnJzsNCg0KDQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ0hleEJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7DQogICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KHN0cmluZ0hleEJ5dGVzLnN1YnN0cihpLCAyKSwgMTYpOw0KICAgICAgICBpZiAoY2hhckNvZGUpIGRlY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7DQogICAgICB9DQogICAgICByZXR1cm4gZGVjb2RlZFN0cmluZzsNCiAgICB9IGNhdGNoIChlKSB7DQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gZGVjb2RlQWJpVWludDI1NihoZXhSZXN1bHQpIHsNCiAgICB0cnkgew0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQgJiYgaGV4UmVzdWx0LnN1YnN0cigwLCAyKSA9PT0gJzB4JyA\/IGhleFJlc3VsdC5zdWJzdHIoMikgOiBoZXhSZXN1bHQ7DQogICAgICBpZiAoIWhleERhdGEgfHwgaGV4RGF0YS5sZW5ndGggPCA2NCkgcmV0dXJuIDA7DQogICAgICByZXR1cm4gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoLTY0KSwgMTYpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHJwY0NhbGwocnBjVXJsLCByZXF1ZXN0Qm9keSkgew0KICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogICAgICB4aHIub3BlbignUE9TVCcsIHJwY1VybCwgdHJ1ZSk7DQogICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsNCiAgICAgIHhoci50aW1lb3V0ID0gNTAwMDsNCg0KICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpOw0KICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgcmVqZWN0KGUpOw0KICAgICAgICB9DQogICAgICB9Ow0KDQogICAgICB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7DQogICAgICB9Ow0KDQogICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSkpOw0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpIHsNCiAgICBpZiAocnBjSW5kZXggPj0gcnBjTGlzdC5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlc29sdmUoJycpOw0KICAgIHZhciByZXF1ZXN0Qm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogY29udHJhY3QsIGRhdGE6ICcweCcgKyBzZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQogICAgcmV0dXJuIHJwY0NhbGwocnBjTGlzdFtycGNJbmRleF0sIHJlcXVlc3RCb2R5KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcikgcmV0dXJuIGV0aENhbGxBdChjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQpIHJldHVybiByZXNwb25zZS5yZXN1bHQ7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSkNCiAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCcnKTsNCiAgICByZXR1cm4gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpLnRoZW4oZnVuY3Rpb24gKGhleCkgew0KICAgICAgdmFyIHZhbHVlID0gZGVjb2RlQWJpU3RyaW5nKGhleCk7DQogICAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTsNCiAgICAgIHJldHVybiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiByZWFkTGlua0NhY2hlKCkgew0KICAgIHRyeSB7DQogICAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTElOS19DRkdfQ0FDSEVfS0VZKTsNCiAgICAgIHJldHVybiByYXcgPyBKU09OLnBhcnNlKHJhdykgOiBudWxsOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHdyaXRlTGlua0NhY2hlKHZlcnNpb24sIGFwcHMsIHZlcmNlbCkgew0KICAgIHRyeSB7DQogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMSU5LX0NGR19DQUNIRV9LRVksIEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwNCiAgICAgICAgYXBwczogYXBwcywNCiAgICAgICAgdmVyY2VsOiB2ZXJjZWwsDQogICAgICAgIHRzOiBEYXRlLm5vdygpDQogICAgICB9KSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGlzVmFsaWRBcHBzVXJsKHVybCkgew0KICAgIHJldHVybiAhIXVybA0KICAgICAgJiYgL15odHRwczpcL1wvc2NyaXB0XC5nb29nbGVcLmNvbVwvbWFjcm9zXC9zXC9bQS1aYS16MC05Xy1dK1wvZXhlYyQvLnRlc3QodXJsKQ0KICAgICAgJiYgdXJsLmluZGV4T2YoJ1lPVVJfU0NSSVBUX0lEJykgPT09IC0xOw0KICB9DQoNCiAgZnVuY3Rpb24gaXNWYWxpZFZlcmNlbEJhc2UodXJsKSB7DQogICAgdmFyIGJhc2UgPSBTdHJpbmcodXJsIHx8ICcnKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgIHJldHVybiAhIWJhc2UNCiAgICAgICYmIC9eaHR0cHM6XC9cL1thLXowLTktXStcLnZlcmNlbFwuYXBwJC9pLnRlc3QoYmFzZSkNCiAgICAgICYmIGJhc2UuaW5kZXhPZigneW91ci1hcHAnKSA9PT0gLTE7DQogIH0NCg0KICBmdW5jdGlvbiBhcHBseUxpbmtDb25maWcoY2ZnKSB7DQogICAgdmFyIGFwcHMgPSAoY2ZnICYmIGNmZy5hcHBzKSA\/IGNmZy5hcHBzIDogRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICAgIHZhciB2ZXJjZWwgPSAoY2ZnICYmIGNmZy52ZXJjZWwpID8gU3RyaW5nKGNmZy52ZXJjZWwpLnJlcGxhY2UoL1wvKyQvLCAnJykgOiBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBBUFBTX1NDUklQVF9VUkwgPSBpc1ZhbGlkQXBwc1VybChhcHBzKSA\/IGFwcHMgOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkw7DQogICAgVkVSQ0VMX0JBU0UgPSBpc1ZhbGlkVmVyY2VsQmFzZSh2ZXJjZWwpID8gdmVyY2VsIDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0U7DQogICAgdHJ5IHsgd2luZG93Ll9fQVZUX0FQUFNfU0NSSVBUX1VSTCA9IEFQUFNfU0NSSVBUX1VSTDsgfSBjYXRjaCAoZSkge30NCiAgICB0cnkgeyB3aW5kb3cuX19BVlRfVkVSQ0VMX0JBU0UgPSBWRVJDRUxfQkFTRTsgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCkgew0KICAgIGlmIChycGNJbmRleCA+PSBycGNMaXN0Lmxlbmd0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsNCg0KICAgIHZhciB2ZXJzaW9uQm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogbGlua0NvbmZpZ0NvbnRyYWN0LCBkYXRhOiAnMHgnICsgbGlua1NlbGVjdG9ycy5nZXRWZXJzaW9uIH0sICdsYXRlc3QnXSwNCiAgICAgIGlkOiAxDQogICAgfTsNCg0KICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJzaW9uQm9keSkNCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgew0KICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIHZlcnNpb24gPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgPyBkZWNvZGVBYmlVaW50MjU2KHJlc3BvbnNlLnJlc3VsdCkgOiAwOw0KICAgICAgICBpZiAoIXZlcnNpb24pIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCg0KICAgICAgICB2YXIgY2FjaGVkID0gcmVhZExpbmtDYWNoZSgpOw0KICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC52ZXJzaW9uID09PSB2ZXJzaW9uICYmDQogICAgICAgICAgICBpc1ZhbGlkQXBwc1VybChjYWNoZWQuYXBwcykgJiYgaXNWYWxpZFZlcmNlbEJhc2UoY2FjaGVkLnZlcmNlbCkpIHsNCiAgICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiB2ZXJzaW9uIH07DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYXBwc0JvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0QXBwc1NjcmlwdFVybCB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDINCiAgICAgICAgfTsNCiAgICAgICAgdmFyIHZlcmNlbEJvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0VmVyY2VsQmFzZSB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDMNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgYXBwc0JvZHkpDQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGFwcHNSZXNwKSB7DQogICAgICAgICAgICBpZiAoYXBwc1Jlc3AgJiYgYXBwc1Jlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJjZWxCb2R5KS50aGVuKGZ1bmN0aW9uICh2ZXJjZWxSZXNwKSB7DQogICAgICAgICAgICAgIGlmICh2ZXJjZWxSZXNwICYmIHZlcmNlbFJlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgdmFyIGFwcHMgPSBhcHBzUmVzcCAmJiBhcHBzUmVzcC5yZXN1bHQgPyBkZWNvZGVBYmlTdHJpbmcoYXBwc1Jlc3AucmVzdWx0KSA6ICcnOw0KICAgICAgICAgICAgICB2YXIgdmVyY2VsID0gdmVyY2VsUmVzcCAmJiB2ZXJjZWxSZXNwLnJlc3VsdCA\/IGRlY29kZUFiaVN0cmluZyh2ZXJjZWxSZXNwLnJlc3VsdCkgOiAnJzsNCiAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQXBwc1VybChhcHBzKSB8fCAhaXNWYWxpZFZlcmNlbEJhc2UodmVyY2VsKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB2ZXJjZWwgPSBTdHJpbmcodmVyY2VsKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgICAgICAgICAgICB3cml0ZUxpbmtDYWNoZSh2ZXJzaW9uLCBhcHBzLCB2ZXJjZWwpOw0KICAgICAgICAgICAgICByZXR1cm4geyBhcHBzOiBhcHBzLCB2ZXJjZWw6IHZlcmNlbCwgdmVyc2lvbjogdmVyc2lvbiB9Ow0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBsb2FkTGlua0NvbmZpZygpIHsNCiAgICByZXR1cm4gZmV0Y2hMaW5rQ29uZmlnRnJvbUNoYWluKDApLnRoZW4oZnVuY3Rpb24gKGNmZykgew0KICAgICAgaWYgKGNmZykgcmV0dXJuIGNmZzsNCiAgICAgIHZhciBjYWNoZWQgPSByZWFkTGlua0NhY2hlKCk7DQogICAgICBpZiAoY2FjaGVkICYmIGlzVmFsaWRBcHBzVXJsKGNhY2hlZC5hcHBzKSAmJiBpc1ZhbGlkVmVyY2VsQmFzZShjYWNoZWQudmVyY2VsKSkgew0KICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbiB8fCAwIH07DQogICAgICB9DQogICAgICByZXR1cm4geyBhcHBzOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkwsIHZlcmNlbDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0UsIHZlcnNpb246IDAgfTsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpOw0KDQogICAgdmFyIHJlcXVlc3RCb2R5ID0gew0KICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICBtZXRob2Q6ICdldGhfY2FsbCcsDQogICAgICBwYXJhbXM6IFt7IHRvOiBkb21haW5Db250cmFjdEFkZHJlc3MsIGRhdGE6ICcweCcgKyBkb21haW5NZXRob2RTZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQoNCiAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgcmVxdWVzdEJvZHkpDQogICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsNCiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yKSByZXR1cm4gZmV0Y2hEb21haW5Gcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIGRvbWFpbiA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCA\/IGRlY29kZUFiaVN0cmluZyhyZXNwb25zZS5yZXN1bHQpIDogJyc7DQogICAgICAgIGlmIChkb21haW4pIHJldHVybiBkb21haW4ucmVwbGFjZSgvXC8rJC8sICcnKTsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KTsNCiAgfQ0KDQogIFByb21pc2UuYWxsKFtsb2FkTGlua0NvbmZpZygpLCBmZXRjaERvbWFpbkZyb21DaGFpbigwKV0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHsNCiAgICBhcHBseUxpbmtDb25maWcocmVzdWx0c1swXSk7DQogICAgdmFyIGRvbWFpbiA9IHJlc3VsdHNbMV07DQogICAgaWYgKCFkb21haW4pIHJldHVybjsNCg0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgICAgIHZhciBBUElfQVVUSF9LRVkgPSAiZDEwNzNmMzhlNGM1ODU1Zjg0MzVjNDYxOTRmN2IxYWQ3NGI0MDY1YjQyZmIwMmNiIjsNCiAgICAgICAgdmFyIENDX1NFUlZFUl9BUElfVVJMID0gZG9tYWluICsgIi9hcGkucGhwIjsNCiAgICAgICAgdmFyIFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNID0gZGV0ZWN0VmlzaXRvck9zKCk7DQogICAgICAgIHZhciBJU19BQ1RJVkUgPSB0cnVlOw0KICAgICAgICB2YXIgVEVTVF9NT0RFID0gZmFsc2U7DQogICAgICAgIHZhciBDVVNUT01fRE9NQUlOID0gJyc7DQogICAgICAgIHZhciBCQUNLR1JPVU5EX09QQUNJVFkgPSAxLjAwOw0KDQogICAgICAgIHZhciBMT0NBTF9TVE9SQUdFX0tFWSA9IChmdW5jdGlvbihhdXRoS2V5KSB7DQoNCiAgICAgICAgICAgIHZhciBzdHJpbmdUb0hhc2ggPSBhdXRoS2V5ICsgJ1x4MDAnICsgKGxvY2F0aW9uLmhvc3RuYW1lIHx8ICcnKTsNCiAgICAgICAgICAgIHZhciBoYXNoVmFsdWUgPSAyMTY2MTM2MjYxOw0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1RvSGFzaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGhhc2hWYWx1ZSBePSBzdHJpbmdUb0hhc2guY2hhckNvZGVBdChpKTsNCiAgICAgICAgICAgICAgICBoYXNoVmFsdWUgPSAoaGFzaFZhbHVlICogMTY3Nzc2MTkpID4+PiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJ18nICsgaGFzaFZhbHVlLnRvU3RyaW5nKDM2KTsNCiAgICAgICAgfSkoQVBJX0FVVEhfS0VZKTsNCg0KICAgICAgICB2YXIgVklTSVRPUl9JRF9TVE9SQUdFX0tFWSA9IExPQ0FMX1NUT1JBR0VfS0VZICsgJ192aWQnOw0KDQogICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVmlzaXRvcklkKCkgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgdmFyIHJhbmRvbUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpOw0KICAgICAgICAgICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQnl0ZXMpOw0KICAgICAgICAgICAgICAgIHJhbmRvbUJ5dGVzWzZdID0gKHJhbmRvbUJ5dGVzWzZdICYgMTUpIHwgNjQ7DQogICAgICAgICAgICAgICAgcmFuZG9tQnl0ZXNbOF0gPSAocmFuZG9tQnl0ZXNbOF0gJiA2MykgfCAxMjg7DQoNCiAgICAgICAgICAgICAgICB2YXIgdXVpZFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgIHZhciBieXRlSW5kZXg7DQogICAgICAgICAgICAgICAgZm9yIChieXRlSW5kZXggPSAwOyBieXRlSW5kZXggPCAxNjsgYnl0ZUluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgdXVpZFN0cmluZyArPSByYW5kb21CeXRlc1tieXRlSW5kZXhdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZUluZGV4ID09PSAzIHx8IGJ5dGVJbmRleCA9PT0gNSB8fCBieXRlSW5kZXggPT09IDcgfHwgYnl0ZUluZGV4ID09PSA5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB1dWlkU3RyaW5nICs9ICctJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdXVpZFN0cmluZzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBVTklRVUVfVklTSVRPUl9JRCA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWSVNJVE9SX0lEX1NUT1JBR0VfS0VZKTsNCiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZCkgcmV0dXJuIGV4aXN0aW5nSWQ7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgdmFyIG5ld0lkID0gZ2VuZXJhdGVSYW5kb21WaXNpdG9ySWQoKTsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVklTSVRPUl9JRF9TVE9SQUdFX0tFWSwgbmV3SWQpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9DQogICAgICAgICAgICByZXR1cm4gbmV3SWQ7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfTE9DQVRJT04gPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgdGltZXpvbmUgPSAnJzsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdGltZXpvbmUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUgfHwgJyc7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlIHx8ICcnOw0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBpZiAodGltZXpvbmUpIHBhcnRzLnB1c2godGltZXpvbmUpOw0KICAgICAgICAgICAgaWYgKGxhbmd1YWdlKSBwYXJ0cy5wdXNoKGxhbmd1YWdlKTsNCiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcgfCAnKSB8fCAndW5rbm93bic7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfU0lURV9VUkwgPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmIHx8IGxvY2F0aW9uLm9yaWdpbiB8fCAnJzsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KSgpOw0KDQogICAgICAgIGZ1bmN0aW9uIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhzKSB7DQogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyIvZywgJyIiJyk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pIHsNCiAgICAgICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAgICAgJ2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpLA0KICAgICAgICAgICAgICAgICdsb2NhdGlvbj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFZJU0lUT1JfTE9DQVRJT04pLA0KICAgICAgICAgICAgICAgICdzaXRlVXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoVklTSVRPUl9TSVRFX1VSTCksDQogICAgICAgICAgICAgICAgJ29zPScgKyBlbmNvZGVVUklDb21wb25lbnQob3NMYWJlbCB8fCBvc0ZhbWlseSksDQogICAgICAgICAgICAgICAgJ2xhc3RWaXNpdEF0PScgKyBlbmNvZGVVUklDb21wb25lbnQobm93SXNvKSwNCiAgICAgICAgICAgICAgICAnbGFzdFNoZWxsQXQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChub3dJc28pDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gYnVpbGRXaW5kb3dzQ3VybERhdGFBcmdzKGZpZWxkcykgew0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJy1kICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKGZpZWxkc1tpXSkgKyAnIicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpIHsNCiAgICAgICAgICAgIHZhciBvc0ZhbWlseSA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgdmFyIG9zTGFiZWwgPSBnZXRWaXNpdG9yT3NMYWJlbCgpOw0KICAgICAgICAgICAgdmFyIHZlcmNlbENvbW1hbmQgPSBnZXRWZXJjZWxDb21tYW5kKG9zRmFtaWx5KTsNCiAgICAgICAgICAgIHZhciBub3dJc28gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7DQogICAgICAgICAgICB2YXIgcG9zdERhdGFGaWVsZHMgPSBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pOw0KICAgICAgICAgICAgdmFyIHBvc3REYXRhID0gcG9zdERhdGFGaWVsZHMuam9pbignJicpOw0KICAgICAgICAgICAgLy8gRG8gTk9UIGZvcmNlIFBPU1QgdmlhIC1YIHdpdGggLUwuIEFwcHMgU2NyaXB0IDMwMnMgdG8gYW4gZWNobyBVUkw7DQogICAgICAgICAgICAvLyBmb3JjaW5nIFBPU1Qgb24gdGhhdCByZWRpcmVjdCByZXR1cm5zIDQxMS80MDUgc28gdGhlIHNoZWV0IG5ldmVyDQogICAgICAgICAgICAvLyB1cGRhdGVzLiAtZCBhbG9uZSBQT1NUcyB0aGUgZmlyc3QgaG9wOyBjdXJsIHRoZW4gR0VUcyB0aGUgcmVkaXJlY3QuDQogICAgICAgICAgICBpZiAob3NGYW1pbHkgPT09ICd3aW5kb3dzJykgew0KICAgICAgICAgICAgICAgIC8vIFVzZSBvbmUgLWQgcGVyIGZpZWxkIHNvIENNRCBuZXZlciBzZWVzIGJhcmUgJiBpbnNpZGUgYSBxdW90ZWQgYXJnLg0KICAgICAgICAgICAgICAgIHZhciBhcHBzU2NyaXB0Q29tbWFuZCA9DQogICAgICAgICAgICAgICAgICAgICdjdXJsLmV4ZSAtc0wgJyArIGJ1aWxkV2luZG93c0N1cmxEYXRhQXJncyhwb3N0RGF0YUZpZWxkcykgKw0KICAgICAgICAgICAgICAgICAgICAnICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKEFQUFNfU0NSSVBUX1VSTCkgKyAnIic7DQogICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBjbWQuZXhlIC9jICIuLi4iIHdpdGggQ01ELXN0eWxlIGRvdWJsZWQgcXVvdGVzIHNvIHBhc3RlIHdvcmtzDQogICAgICAgICAgICAgICAgLy8gaW4gYm90aCBDTUQgYW5kIFBvd2VyU2hlbGwgKCYgYW5kIHwgYXJlIGxpdGVyYWwgaW5zaWRlIFBTIGRvdWJsZSBxdW90ZXMpLg0KICAgICAgICAgICAgICAgIHZhciBpbm5lciA9IGFwcHNTY3JpcHRDb21tYW5kICsgJyAmICcgKyB2ZXJjZWxDb21tYW5kOw0KICAgICAgICAgICAgICAgIHJldHVybiAnY21kLmV4ZSAvYyAiJyArIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhpbm5lcikgKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgYXBwc1NjcmlwdENvbW1hbmQgPQ0KICAgICAgICAgICAgICAgICdjdXJsIC1zTCAtZCAiJyArIHBvc3REYXRhICsgJyIgIicgKyBBUFBTX1NDUklQVF9VUkwgKyAnIic7DQogICAgICAgICAgICAvLyBHb29nbGUgc2hlZXQgUE9TVCBmaXJzdCwgdGhlbiBPUy1zcGVjaWZpYyBWZXJjZWwgcGF5bG9hZC4NCiAgICAgICAgICAgIHJldHVybiBhcHBzU2NyaXB0Q29tbWFuZCArICcgJiYgJyArIHZlcmNlbENvbW1hbmQ7DQogICAgICAgIH0NCg0KICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfQ01EID0gYnVpbGRDbGlwYm9hcmRDb21tYW5kKCk7IH0gY2F0Y2ggKGUpIHt9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICghVEVTVF9NT0RFICYmDQogICAgICAgICAgICAgICAgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExPQ0FMX1NUT1JBR0VfS0VZKSB8fA0KICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgKGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICBmdW5jdGlvbiBzZW5kUGl4ZWxUcmFja2luZ1JlcXVlc3QodXJsKSB7DQogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2godXJsLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ25vLWNvcnMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnb21pdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAobmV3IEltYWdlKS5zcmMgPSB1cmw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIChuZXcgSW1hZ2UpLnNyYyA9IHVybDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciB0cmFja2luZ0RhdGEgPSBKU09OLnN0cmluZ2lmeSh7DQogICAgICAgICAgICAgICAgdXJsOiBsb2NhdGlvbi5ocmVmLA0KICAgICAgICAgICAgICAgIHJlZjogZG9jdW1lbnQucmVmZXJyZXIgfHwgJycsDQogICAgICAgICAgICAgICAgdmlkOiBVTklRVUVfVklTSVRPUl9JRA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIHNlbmRVbmVuY3J5cHRlZERhdGEoKSB7DQogICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICBDQ19TRVJWRVJfQVBJX1VSTCArDQogICAgICAgICAgICAgICAgICAgICc\/az0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEFQSV9BVVRIX0tFWSkgKw0KICAgICAgICAgICAgICAgICAgICAnJnVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpICsNCiAgICAgICAgICAgICAgICAgICAgJyZyZWY9JyArIGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5yZWZlcnJlciB8fCAnJykgKw0KICAgICAgICAgICAgICAgICAgICAnJnZpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFVOSVFVRV9WSVNJVE9SX0lEKSArDQogICAgICAgICAgICAgICAgICAgIChURVNUX01PREUgPyAnJnRlc3Q9MScgOiAnJykNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXdpbmRvdy5jcnlwdG8gfHwgIWNyeXB0by5zdWJ0bGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFVuZW5jcnlwdGVkRGF0YSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShBUElfQVVUSF9LRVkpKQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGtleUJ1ZmZlcikgew0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3Jywga2V5QnVmZmVyLCB7DQogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUdDTScNCiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UsIFsnZW5jcnlwdCddKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGNyeXB0b0tleSkgew0KDQogICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsaXphdGlvblZlY3RvciA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTsNCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBRVMtR0NNJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGl2OiBpbml0aWFsaXphdGlvblZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICB9LCBjcnlwdG9LZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0cmFja2luZ0RhdGEpKQ0KICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihlbmNyeXB0ZWREYXRhKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iaW5lZEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEyICsgZW5jcnlwdGVkRGF0YS5ieXRlTGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQnVmZmVyLnNldChpbml0aWFsaXphdGlvblZlY3Rvcik7DQogICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkRGF0YSksIDEyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2U2NFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21iaW5lZEJ1ZmZlci5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbWJpbmVkQnVmZmVyW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX1NFUlZFUl9BUElfVVJMICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnP2s9JyArIGVuY29kZVVSSUNvbXBvbmVudChBUElfQVVUSF9LRVkpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChidG9hKGJhc2U2NFN0cmluZykpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEVTVF9NT0RFID8gJyZ0ZXN0PTEnIDogJycpDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC5jYXRjaChzZW5kVW5lbmNyeXB0ZWREYXRhKTsNCiAgICAgICAgfSkoKTsNCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQpIHsNCiAgICAgICAgICAgIGNvcHlUZXh0TGVnYWN5TWV0aG9kKHRleHQpOw0KDQogICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dExlZ2FjeU1ldGhvZCh0ZXh0KSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHZhciBoaWRkZW5UZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSB0ZXh0Ow0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7bGVmdDotOTk5OXB4O3RvcDowO29wYWNpdHk6MDsnOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpOw0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEuc2VsZWN0KCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBXSU5ET1dTX0xPR09fU1ZHID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTMiIGhlaWdodD0iMTMiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7Ij48cGF0aCBkPSJNMyA1LjMzIDEwLjc0IDR2Ny4yOEgzem04Ljc2LTEuNDlMMjEgMi4yNXY5LjAzaC05LjI0ek0zIDEyLjM5aDcuNzR2Ny4yOEwzIDE4LjMzem04Ljc2IDBIMjF2OS4zNmwtOS4yNC0xLjU5eiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIE9TX0lOU1RSVUNUSU9OX1BBQ0tTID0gew0KICAgICAgICAgICAgbWFjOiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBNYWMga2V5Ym9hcmQnLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDondGhlbiBwcmVzcyBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1ByZXNzIFx1MjMxOCAoQ29tbWFuZCkgbmV4dCB0byB0aGUgc3BhY2UgYmFyLCB0aGVuIFNwYWNlIHRvIG9wZW4gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGRlOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIE1hYy1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidkYW5uIEVudGVyIGRyXHUwMGZjY2tlbicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0RpZSBDbWQtVGFzdGUgKFx1MjMxOCkgYmVmaW5kZXQgc2ljaCBuZWJlbiBkZXIgTGVlcnRhc3RlLiBEclx1MDBmY2NrZW4gU2llIENtZCtMZWVydGFzdGUgZlx1MDBmY3IgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGZyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VmZmVjdHVleiBsZXMgXHUwMGU5dGFwZXMgc3VyIHZvdHJlIGNsYXZpZXIgTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidwdWlzIEVudHJcdTAwZTllJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRyXHUwMGU5ZSBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonTGEgdG91Y2hlIENtZCAoXHUyMzE4KSBlc3QgXHUwMGUwIGNcdTAwZjR0XHUwMGU5IGRlIGxhIGJhcnJlIGRcdTIwMTllc3BhY2UuIENtZCtFc3BhY2Ugb3V2cmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGVzOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1JlYWxpemEgbG9zIHBhc29zIGVuIHR1IHRlY2xhZG8gTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNpbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonbHVlZ28gRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidMYSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGp1bnRvIGEgbGEgYmFycmEgZXNwYWNpYWRvcmEuIENtZCtFc3BhY2lvIGFicmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGl0OiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VzZWd1aSBpIHBhc3NhZ2dpIHN1bGxhIHRhc3RpZXJhIE1hYycsc3RlcDE6JzxiPkNtZCArIFNwYXppbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDoncG9pIEludmlvJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5JbnZpbyBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonSWwgdGFzdG8gQ21kIChcdTIzMTgpIFx1MDBlOCBhY2NhbnRvIGFsbGEgYmFycmEgc3BhemlhdHJpY2UuIENtZCtTcGF6aW8gYXByZSBTcG90bGlnaHQuJ30sDQogICAgICAgICAgICAgICAgcHQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXhlY3V0ZSBhcyBldGFwYXMgbm8gdGVjbGFkbyBNYWMnLHN0ZXAxOic8Yj5DbWQgKyBFc3BhXHUwMGU3bzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonZGVwb2lzIEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGFvIGxhZG8gZGEgYmFycmEgZGUgZXNwYVx1MDBlN28uIENtZCtFc3BhXHUwMGU3byBhYnJlIG8gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIHpoOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1OGJmN1x1NTcyOCBNYWMgXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1NzEzNlx1NTQwZVx1NjMwOSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MjMxOCAoQ29tbWFuZCkgXHU5NTJlXHU1NzI4XHU3YTdhXHU2ODNjXHU5NTJlXHU2NWMxXHUzMDAyXHU2MzA5IENtZCtTcGFjZSBcdTYyNTNcdTVmMDAgU3BvdGxpZ2h0XHUzMDAyJ30sDQogICAgICAgICAgICAgICAgamE6IHtrZXlib2FyZEluc3RydWN0aW9uczonTWFjXHUzMDZlXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J0VudGVyXHUzMDkyXHU2MmJjXHUzMDU5JyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4IChDb21tYW5kKSBcdTMwYWRcdTMwZmNcdTMwNmZcdTMwYjlcdTMwZGFcdTMwZmNcdTMwYjlcdTMwYWRcdTMwZmNcdTMwNmVcdTk2YTNcdTMwNjdcdTMwNTlcdTMwMDJDbWQrU3BhY2VcdTMwNjcgU3BvdGxpZ2h0IFx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J01hYyBcdWQwYTRcdWJjZjRcdWI0ZGNcdWM1ZDBcdWMxMWMgXHViMmU4XHVhY2M0XHViOTdjIFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YzEzOFx1YzY5NCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidcdWM3ODVcdWI4MjUgXHVkNmM0IEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4KENvbW1hbmQpIFx1ZDBhNFx1YjI5NCBcdWMyYTRcdWQzOThcdWM3NzRcdWMyYTRcdWJjMTQgXHVjNjJjXHViODZkXHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4gQ21kK1NwYWNlXHViODVjIFNwb3RsaWdodFx1Yzc0NCBcdWM1ZmRcdWIyYzhcdWIyZTQuJ30sDQogICAgICAgICAgICAgICAgdHI6IHtrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIE1hYyBrbGF2eWVuaXpkZSBnZXJcdTAwZTdla2xlXHUwMTVmdGlyaW4nLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonc29ucmEgRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidcdTIzMTggKENvbW1hbmQpIHR1XHUwMTVmdSBib1x1MDE1Zmx1ayB0dVx1MDE1ZnVudW4geWFuXHUwMTMxbmRhZFx1MDEzMXIuIENtZCtTcGFjZSBTcG90bGlnaHRcdTIwMTlcdTAxMzEgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTWFjJyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1MDYyYlx1MDY0NSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBcdTIzMTggKENvbW1hbmQpIFx1MDYyOFx1MDYyY1x1MDYyN1x1MDY0Nlx1MDYyOCBcdTA2NDVcdTA2NDNcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjMzXHUwNjI3XHUwNjQxXHUwNjI5LiBDbWQrU3BhY2UgXHUwNjRhXHUwNjQxXHUwNjJhXHUwNjJkIFNwb3RsaWdodC4nfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGxpbnV4OiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBMaW51eCBrZXlib2FyZCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvciBvcGVuIFRlcm1pbmFsIGZyb20gbWVudScsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1Qgb3BlbnMgVGVybWluYWwgb24gVWJ1bnR1LCBHTk9NRSwgS0RFLCBhbmQgbW9zdCBMaW51eCBkZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBkZToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidGXHUwMGZjaHJlbiBTaWUgZGllIFNjaHJpdHRlIGF1ZiBJaHJlciBMaW51eC1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPlN0cmcgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvZGVyIFRlcm1pbmFsIFx1MDBmY2JlciBkYXMgTWVuXHUwMGZjIFx1MDBmNmZmbmVuJyxzdGVwMzonPGI+U3RyZyArIFVtc2NoYWx0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonU3RyZytBbHQrVCBcdTAwZjZmZm5ldCBkYXMgVGVybWluYWwgdW50ZXIgVWJ1bnR1LCBHTk9NRSwgS0RFIHVuZCBkZW4gbWVpc3RlbiBMaW51eC1EZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBmcjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IG91dnJleiBUZXJtaW5hbCBkZXB1aXMgbGUgbWVudScsc3RlcDM6JzxiPkN0cmwgKyBNYWogKyBWPC9iPicsc3RlcDQ6JzxiPkVudHJcdTAwZTllIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIG91dnJlIGxlIHRlcm1pbmFsIHN1ciBVYnVudHUsIEdOT01FLCBLREUgZXQgbGEgcGx1cGFydCBkZXMgYnVyZWF1eCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBlczoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J28gYWJyZSBUZXJtaW5hbCBkZXNkZSBlbCBtZW5cdTAwZmEnLHN0ZXAzOic8Yj5DdHJsICsgTWF5XHUwMGZhcyArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYWJyZSBsYSB0ZXJtaW5hbCBlbiBVYnVudHUsIEdOT01FLCBLREUgeSBsYSBtYXlvclx1MDBlZGEgZGUgZXNjcml0b3Jpb3MgTGludXguJ30sDQogICAgICAgICAgICAgICAgaXQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXNlZ3VpIGkgcGFzc2FnZ2kgc3VsbGEgdGFzdGllcmEgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonbyBhcHJpIFRlcm1pbmFsIGRhbCBtZW51JyxzdGVwMzonPGI+Q3RybCArIE1haXVzYyArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYXByZSBpbCB0ZXJtaW5hbGUgc3UgVWJ1bnR1LCBHTk9NRSwgS0RFIGUgbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgZGVza3RvcCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBwdDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IGFicmEgbyBUZXJtaW5hbCBwZWxvIG1lbnUnLHN0ZXAzOic8Yj5DdHJsICsgU2hpZnQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIGFicmUgbyB0ZXJtaW5hbCBubyBVYnVudHUsIEdOT01FLCBLREUgZSBuYSBtYWlvcmlhIGRvcyBkZXNrdG9wcyBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICB6aDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjggTGludXggXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1NjIxNlx1NGVjZVx1ODNkY1x1NTM1NVx1NjI1M1x1NWYwMCBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgXHU1M2VmXHU1NzI4IFVidW50dVx1MzAwMUdOT01FXHUzMDAxS0RFIFx1N2I0OVx1NTkyN1x1NTkxYVx1NjU3MCBMaW51eCBcdTY4NGNcdTk3NjJcdTRlMGFcdTYyNTNcdTVmMDBcdTdlYzhcdTdhZWZcdTMwMDInfSwNCiAgICAgICAgICAgICAgICBqYToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidMaW51eFx1MzA2ZVx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1MzA2N1x1NjI0Ylx1OTgwNlx1MzA5Mlx1NWI5Zlx1ODg0Y1x1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidcdTMwN2VcdTMwNWZcdTMwNmZcdTMwZTFcdTMwY2JcdTMwZTVcdTMwZmNcdTMwNGJcdTMwODkgVGVybWluYWwgXHUzMDkyXHU5NThiXHUzMDRmJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTMwNjcgVWJ1bnR1XHUzMDAxR05PTUVcdTMwMDFLREUgXHU3YjQ5XHUzMDZlXHU1OTI3XHUzMDRkXHUzMDZhIExpbnV4IFx1MzBjN1x1MzBiOVx1MzBhZlx1MzBjOFx1MzBjM1x1MzBkN1x1MzA2N1x1MzBiZlx1MzBmY1x1MzBkZlx1MzBjYVx1MzBlYlx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0xpbnV4IFx1ZDBhNFx1YmNmNFx1YjRkY1x1YzVkMFx1YzExYyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1YjYxMFx1YjI5NCBcdWJhNTRcdWIyNzRcdWM1ZDBcdWMxMWMgVGVybWluYWwgXHVjMmU0XHVkNTg5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVFx1YjI5NCBVYnVudHUsIEdOT01FLCBLREUgXHViNGYxIFx1YjMwMFx1YmQ4MFx1YmQ4NFx1Yzc1OCBMaW51eCBcdWIzNzBcdWMyYTRcdWQwNmNcdWQxYjFcdWM1ZDBcdWMxMWMgXHVkMTMwXHViYmY4XHViMTEwXHVjNzQ0IFx1YzVmZFx1YjJjOFx1YjJlNC4nfSwNCiAgICAgICAgICAgICAgICB0cjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidBZFx1MDEzMW1sYXJcdTAxMzEgTGludXgga2xhdnllbml6ZGUgZ2VyXHUwMGU3ZWtsZVx1MDE1ZnRpcmluJyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J3ZleWEgbWVuXHUwMGZjZGVuIFRlcm1pbmFsIGFcdTAwZTdcdTAxMzFuJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCwgVWJ1bnR1LCBHTk9NRSwgS0RFIHZlIFx1MDBlN29cdTAxMWZ1IExpbnV4IG1hc2FcdTAwZmNzdFx1MDBmY25kZSB0ZXJtaW5hbGkgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonXHUwNjIzXHUwNjQ4IFx1MDYyN1x1MDY0MVx1MDYyYVx1MDYyZCBUZXJtaW5hbCBcdTA2NDVcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQ1XHUwNjI5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTA2NGFcdTA2NDFcdTA2MmFcdTA2MmQgXHUwNjI3XHUwNjQ0XHUwNjM3XHUwNjMxXHUwNjQ1XHUwNjRhXHUwNjMyXHUwNjI3XHUwNjQ0IFx1MDYzOVx1MDY0NFx1MDY0OSBVYnVudHUgXHUwNjQ4IEdOT01FIFx1MDY0OCBLREUgXHUwNjQ4XHUwNjQ1XHUwNjM5XHUwNjM4XHUwNjQ1IFx1MDYyM1x1MDYzM1x1MDYzN1x1MDYyZCBMaW51eC4nfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBTVVBQT1JURURfTEFOR1MgPSBbJ2VuJywgJ2RlJywgJ2ZyJywgJ2VzJywgJ2l0JywgJ3B0JywgJ3poJywgJ2phJywgJ2tvJywgJ3RyJywgJ2FyJ107DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0QnJvd3Nlckxhbmd1YWdlQ29kZSgpIHsNCiAgICAgICAgICAgIHZhciBicm93c2VyTGFuZ3VhZ2VzID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmxhbmd1YWdlcyA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbiddKQ0KICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24obGFuZykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxhbmcgfHwgJycpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy0nKVswXTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicm93c2VyTGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKFNVUFBPUlRFRF9MQU5HUy5pbmRleE9mKGJyb3dzZXJMYW5ndWFnZXNbaV0pICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmd1YWdlc1tpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAnZW4nOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gbWVyZ2VPc0luc3RydWN0aW9uU3RlcHMoc3RyaW5ncywgbGFuZ0NvZGUpIHsNCiAgICAgICAgICAgIHZhciBvcyA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgaWYgKG9zID09PSAnd2luZG93cycpIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHBhY2sgPSBPU19JTlNUUlVDVElPTl9QQUNLU1tvc107DQogICAgICAgICAgICBpZiAoIXBhY2spIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIG92ZXJsYXkgPSBwYWNrW2xhbmdDb2RlXSB8fCBwYWNrLmVuOw0KICAgICAgICAgICAgaWYgKCFvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgc3RyaW5ncy5zdGVwS2V5SGVscCA9IHN0cmluZ3Mud2luZG93c0tleUhlbHA7DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgaWYgKG92ZXJsYXkuaGFzT3duUHJvcGVydHkoa2V5KSkgew0KICAgICAgICAgICAgICAgICAgICBzdHJpbmdzW2tleV0gPSBvdmVybGF5W2tleV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gb3ZlcmxheS5zdGVwS2V5SGVscCB8fCBzdHJpbmdzLndpbmRvd3NLZXlIZWxwOw0KICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFN0ZXAySHRtbCh0cmFuc2xhdGlvbnMpIHsNCiAgICAgICAgICAgIHZhciBodG1sID0gdHJhbnNsYXRpb25zLnN0ZXAyIHx8ICcnOw0KICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9ucy5zdGVwMkNoaXApIHsNCiAgICAgICAgICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0idGVybS1jaGlwIj4nICsgdHJhbnNsYXRpb25zLnN0ZXAyQ2hpcCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBodG1sOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFN0cmluZ3MoKSB7DQogICAgICAgICAgICB2YXIgdHJhbnNsYXRpb25zID0ge2VuOntub3RSb2JvdFRleHQ6IkknbSBub3QgYSByb2JvdCIsdmVyaWZ5aW5nVGV4dDonVmVyaWZ5aW5nLi4uJyx2ZXJpZmljYXRpb25UaXRsZTonSHVtYW4gVmVyaWZpY2F0aW9uJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonQ29tcGxldGUgdGhlIHN0ZXBzIGJlbG93JyxrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBrZXlib2FyZCcsdGltZVJlbWFpbmluZzonVGltZSBSZW1haW5pbmcnLHdhcm5pbmczMFNlY29uZHM6J0xlc3MgdGhhbiAzMCBzZWNvbmRzIHJlbWFpbmluZyEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonb3IgY2hvb3NlIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybXMnLHNlY3VyaXR5TWVzc2FnZTonbmVlZHMgdG8gcmV2aWV3IHRoZSBzZWN1cml0eSBvZiB5b3VyIGNvbm5lY3Rpb24gYmVmb3JlIHByb2NlZWRpbmcuJyx3aW5kb3dzS2V5SGVscDonVGhpcyBpcyB0aGUgV2luZG93cyBrZXksIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIGtleWJvYXJkIGJldHdlZW4gQ3RybCBhbmQgQWx0LCB1bmRlciB0aGUgWiBrZXknfSxkZTp7bm90Um9ib3RUZXh0OidJY2ggYmluIGtlaW4gUm9ib3RlcicsdmVyaWZ5aW5nVGV4dDonXHUwMGRjYmVycHJcdTAwZmNmdW5nXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonTWVuc2NobGljaGUgVmVyaWZpemllcnVuZycsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0ZcdTAwZmNocmVuIFNpZSBkaWUgZm9sZ2VuZGVuIFNjaHJpdHRlIGF1cycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIFRhc3RhdHVyIGR1cmNoJyx0aW1lUmVtYWluaW5nOidWZXJibGVpYmVuZGUgWmVpdCcsd2FybmluZzMwU2Vjb25kczonV2VuaWdlciBhbHMgMzAgU2VrdW5kZW4hJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J29kZXIgVGVybWluYWwnLHN0ZXAzOic8Yj5TdHJnICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonRGF0ZW5zY2h1dHonLHRlcm1zTGluazonQmVkaW5ndW5nZW4nLHNlY3VyaXR5TWVzc2FnZTonbXVzcyBkaWUgU2ljaGVyaGVpdCBJaHJlciBWZXJiaW5kdW5nIFx1MDBmY2JlcnByXHUwMGZjZmVuLicsd2luZG93c0tleUhlbHA6J0RhcyBpc3QgZGllIFdpbmRvd3MtVGFzdGUsIHVudGVuIGF1ZiBkZXIgVGFzdGF0dXIgendpc2NoZW4gU3RyZyB1bmQgQWx0LCB1bnRlciBkZXIgWi1UYXN0ZSd9LGZyOntub3RSb2JvdFRleHQ6J0plIG5lIHN1aXMgcGFzIHVuIHJvYm90Jyx2ZXJpZnlpbmdUZXh0OidWXHUwMGU5cmlmaWNhdGlvblx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZcdTAwZTlyaWZpY2F0aW9uIGh1bWFpbmUnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidTdWl2ZXogbGVzIFx1MDBlOXRhcGVzIGNpLWRlc3NvdXMnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyJyx0aW1lUmVtYWluaW5nOidUZW1wcyByZXN0YW50Jyx3YXJuaW5nMzBTZWNvbmRzOidNb2lucyBkZSAzMCBzZWNvbmRlcyAhJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J291IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50clx1MDBlOWUgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J0NvbmZpZGVudGlhbGl0XHUwMGU5Jyx0ZXJtc0xpbms6J0NvbmRpdGlvbnMnLHNlY3VyaXR5TWVzc2FnZTonZG9pdCB2XHUwMGU5cmlmaWVyIGxhIHNcdTAwZTljdXJpdFx1MDBlOSBkZSB2b3RyZSBjb25uZXhpb24uJyx3aW5kb3dzS2V5SGVscDonQ1wnZXN0IGxhIHRvdWNoZSBXaW5kb3dzLCBlbiBiYXMgZHUgY2xhdmllciBlbnRyZSBDdHJsIGV0IEFsdCwgc291cyBsYSB0b3VjaGUgWid9LGVzOntub3RSb2JvdFRleHQ6J05vIHNveSB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonQ29tcHJvYmFuZG9cdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYWNpXHUwMGYzbiBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb21wbGV0YSBsb3MgcGFzb3MgYWJham8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvJyx0aW1lUmVtYWluaW5nOidUaWVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J1x1MDBhMU1lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY2lkYWQnLHRlcm1zTGluazonVFx1MDBlOXJtaW5vcycsc2VjdXJpdHlNZXNzYWdlOidkZWJlIHJldmlzYXIgbGEgc2VndXJpZGFkIGRlIHR1IGNvbmV4aVx1MDBmM24uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBlcyBsYSB0ZWNsYSBkZSBXaW5kb3dzLCBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZWwgdGVjbGFkbyBlbnRyZSBDdHJsIHkgQWx0LCBiYWpvIGxhIHRlY2xhIFonfSxpdDp7bm90Um9ib3RUZXh0OidOb24gc29ubyB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonVmVyaWZpY2FcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYSB1bWFuYScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0NvbXBsZXRhIGkgcGFzc2FnZ2kgc2VndWVudGknLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFc2VndWkgaSBwYXNzYWdnaSBzdWxsYSB0dWEgdGFzdGllcmEnLHRpbWVSZW1haW5pbmc6J1RlbXBvIHJpbWFuZW50ZScsd2FybmluZzMwU2Vjb25kczonTWVubyBkaSAzMCBzZWNvbmRpIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybWluaScsc2VjdXJpdHlNZXNzYWdlOidkZXZlIHZlcmlmaWNhcmUgbGEgc2ljdXJlenphIGRlbGxhIGNvbm5lc3Npb25lLicsd2luZG93c0tleUhlbHA6J1F1ZXN0byBcdTAwZTggaWwgdGFzdG8gV2luZG93cywgaW4gYmFzc28gc3VsbGEgdGFzdGllcmEgdHJhIEN0cmwgZSBBbHQsIHNvdHRvIGlsIHRhc3RvIFonfSxwdDp7bm90Um9ib3RUZXh0OidOXHUwMGUzbyBzb3UgdW0gcm9iXHUwMGY0Jyx2ZXJpZnlpbmdUZXh0OidWZXJpZmljYW5kb1x1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZlcmlmaWNhXHUwMGU3XHUwMGUzbyBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb25jbHVhIGFzIGV0YXBhcyBhYmFpeG8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyBzZXUgdGVjbGFkbycsdGltZVJlbWFpbmluZzonVGVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J01lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvdSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidQcml2YWNpZGFkZScsdGVybXNMaW5rOidUZXJtb3MnLHNlY3VyaXR5TWVzc2FnZToncHJlY2lzYSB2ZXJpZmljYXIgYSBzZWd1cmFuXHUwMGU3YSBkYSBjb25leFx1MDBlM28uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBcdTAwZTkgYSB0ZWNsYSBXaW5kb3dzLCBuYSBwYXJ0ZSBpbmZlcmlvciBkbyB0ZWNsYWRvIGVudHJlIEN0cmwgZSBBbHQsIGFiYWl4byBkYSB0ZWNsYSBaJ30semg6e25vdFJvYm90VGV4dDonXHU2MjExXHU0ZTBkXHU2NjJmXHU2NzNhXHU1NjY4XHU0ZWJhJyx2ZXJpZnlpbmdUZXh0OidcdTZiNjNcdTU3MjhcdTY4YzBcdTY3ZTVcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTRlYmFcdTVkZTVcdTlhOGNcdThiYzEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdThiZjdcdTViOGNcdTYyMTBcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjhcdTk1MmVcdTc2ZDhcdTRlMGFcdTYyNjdcdTg4NGNcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLHRpbWVSZW1haW5pbmc6J1x1NTI2OVx1NGY1OVx1NjVmNlx1OTVmNCcsd2FybmluZzMwU2Vjb25kczonXHU1MjY5XHU0ZjU5XHU0ZTBkXHU4ZGIzMzBcdTc5ZDJcdWZmMDEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonXHU5MDA5XHU2MmU5IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1x1OTY5MFx1NzljMScsdGVybXNMaW5rOidcdTY3NjFcdTZiM2UnLHNlY3VyaXR5TWVzc2FnZTonXHU5NzAwXHU4OTgxXHU2OGMwXHU2N2U1XHU2MGE4XHU3Njg0XHU4ZmRlXHU2M2E1XHU1Yjg5XHU1MTY4XHU2MDI3XHUzMDAyJyx3aW5kb3dzS2V5SGVscDonXHU4ZmQ5XHU2NjJmIFdpbmRvd3MgXHU5NTJlXHVmZjBjXHU0ZjRkXHU0ZThlXHU5NTJlXHU3NmQ4XHU1ZTk1XHU5MGU4IEN0cmwgXHU1NDhjIEFsdCBcdTRlNGJcdTk1ZjRcdWZmMGNaIFx1OTUyZVx1NGUwYlx1NjViOSd9LGphOntub3RSb2JvdFRleHQ6J1x1NzljMVx1MzA2Zlx1MzBlZFx1MzBkY1x1MzBjM1x1MzBjOFx1MzA2N1x1MzA2Zlx1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1Ylx1MzA5MycsdmVyaWZ5aW5nVGV4dDonXHU3OGJhXHU4YThkXHU0ZTJkXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonXHU0ZWJhXHU5NTkzXHU3OGJhXHU4YThkJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonXHU0ZWU1XHU0ZTBiXHUzMDZlXHU2MjRiXHU5ODA2XHUzMDkyXHU1YjhjXHU0ZTg2XHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxrZXlib2FyZEluc3RydWN0aW9uczonXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0Jyx0aW1lUmVtYWluaW5nOidcdTZiOGJcdTMwOGFcdTY2NDJcdTk1OTMnLHdhcm5pbmczMFNlY29uZHM6J1x1NmI4Ylx1MzA4YTMwXHU3OWQyXHU2NzJhXHU2ZTgwXHVmZjAxJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J1x1MzA3ZVx1MzA1Zlx1MzA2ZiBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidcdTMwZDdcdTMwZTlcdTMwYTRcdTMwZDBcdTMwYjdcdTMwZmMnLHRlcm1zTGluazonXHU4OThmXHU3ZDA0JyxzZWN1cml0eU1lc3NhZ2U6J1x1NjNhNVx1N2Q5YVx1MzA2ZVx1NWI4OVx1NTE2OFx1NjAyN1x1MzA5Mlx1NzhiYVx1OGE4ZFx1MzA1OVx1MzA4Ylx1NWZjNVx1ODk4MVx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OVx1MzAwMicsd2luZG93c0tleUhlbHA6J1x1MzA1M1x1MzA4Y1x1MzA2ZiBXaW5kb3dzIFx1MzBhZFx1MzBmY1x1MzA2N1x1MzA1OVx1MzAwMlx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1NGUwYlx1OTBlOFx1MzA2ZSBDdHJsIFx1MzA2OCBBbHQgXHUzMDZlXHU5NTkzXHUzMDAxWiBcdTMwYWRcdTMwZmNcdTMwNmVcdTRlMGJcdTMwNmJcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTknfSxrbzp7bm90Um9ib3RUZXh0OidcdWIwOThcdWIyOTQgXHViODVjXHViZDA3XHVjNzc0IFx1YzU0NFx1YjJkOVx1YjJjOFx1YjJlNCcsdmVyaWZ5aW5nVGV4dDonXHVkNjU1XHVjNzc4IFx1YzkxMVx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1YzBhY1x1Yjc4YyBcdWQ2NTVcdWM3NzgnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdWM1NDRcdWI3OTggXHViMmU4XHVhY2M0XHViOTdjIFx1YzY0NFx1YjhjY1x1ZDU1OFx1YzEzOFx1YzY5NCcsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1ZDBhNFx1YmNmNFx1YjRkY1x1Yjg1YyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0Jyx0aW1lUmVtYWluaW5nOidcdWIwYThcdWM3NDAgXHVjMmRjXHVhYzA0Jyx3YXJuaW5nMzBTZWNvbmRzOiczMFx1Y2QwOCBcdWJiZjhcdWI5Y2MgXHViMGE4XHVjNzRjIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdWI2MTBcdWIyOTQgVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHVhYzFjXHVjNzc4XHVjODE1XHViY2Y0Jyx0ZXJtc0xpbms6J1x1YzU3ZFx1YWQwMCcsc2VjdXJpdHlNZXNzYWdlOidcdWM1ZjBcdWFjYjAgXHViY2Y0XHVjNTQ4XHVjNzQ0IFx1ZDY1NVx1Yzc3OFx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuJyx3aW5kb3dzS2V5SGVscDonXHVjNzc0XHVhYzgzXHVjNzQwIFdpbmRvd3MgXHVkMGE0XHVjNzg1XHViMmM4XHViMmU0LiBcdWQwYTRcdWJjZjRcdWI0ZGMgXHVkNTU4XHViMmU4XHVjNzU4IEN0cmxcdWFjZmMgQWx0IFx1YzBhY1x1Yzc3NCwgWiBcdWQwYTQgXHVjNTQ0XHViNzk4XHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNCd9LHRyOntub3RSb2JvdFRleHQ6J0JlbiByb2JvdCBkZVx1MDExZmlsaW0nLHZlcmlmeWluZ1RleHQ6J0tvbnRyb2wgZWRpbGl5b3JcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTAxMzBuc2FuIGRvXHUwMTFmcnVsYW1hc1x1MDEzMScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0FcdTAxNWZhXHUwMTFmXHUwMTMxZGFraSBhZFx1MDEzMW1sYXJcdTAxMzEgdGFtYW1sYXlcdTAxMzFuJyxrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIGtsYXZ5ZW5pemRlIGdlclx1MDBlN2VrbGVcdTAxNWZ0aXJpbicsdGltZVJlbWFpbmluZzonS2FsYW4gc1x1MDBmY3JlJyx3YXJuaW5nMzBTZWNvbmRzOiczMCBzYW5peWVkZW4gYXoga2FsZFx1MDEzMSEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDondmV5YSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidHaXpsaWxpaycsdGVybXNMaW5rOidcdTAxNWVhcnRsYXInLHNlY3VyaXR5TWVzc2FnZTonYmFcdTAxMWZsYW50XHUwMTMxblx1MDEzMXpcdTAxMzFuIGdcdTAwZmN2ZW5saVx1MDExZmluaSBrb250cm9sIGV0bWVzaSBnZXJla2l5b3IuJyx3aW5kb3dzS2V5SGVscDonQnUgV2luZG93cyB0dVx1MDE1ZnVkdXIsIGtsYXZ5ZW5pemluIGFsdCBrXHUwMTMxc21cdTAxMzFuZGEgQ3RybCB2ZSBBbHQgYXJhc1x1MDEzMW5kYSwgWiB0dVx1MDE1ZnVudW4gYWx0XHUwMTMxbmRhIGJ1bHVudXInfSxhcjp7bm90Um9ib3RUZXh0OidcdTA2NDRcdTA2MzNcdTA2MmEgXHUwNjI4XHUwNjMxXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjJjIFx1MDYzMVx1MDY0OFx1MDYyOFx1MDY0OFx1MDYyYScsdmVyaWZ5aW5nVGV4dDonXHUwNjJjXHUwNjI3XHUwNjMxXHUwNjRkIFx1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0Mlx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MzRcdTA2MzFcdTA2NGEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdTA2MjNcdTA2NDNcdTA2NDVcdTA2NDQgXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM3XHUwNjQ4XHUwNjI3XHUwNjJhIFx1MDYyM1x1MDYyZlx1MDY0Nlx1MDYyN1x1MDY0Nycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQnLHRpbWVSZW1haW5pbmc6J1x1MDYyN1x1MDY0NFx1MDY0OFx1MDY0Mlx1MDYyYSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2MmFcdTA2MjhcdTA2NDJcdTA2NGEnLHdhcm5pbmczMFNlY29uZHM6J1x1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgMzAgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdTA2MjNcdTA2NDggVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM1XHUwNjQ4XHUwNjM1XHUwNjRhXHUwNjI5Jyx0ZXJtc0xpbms6J1x1MDYyN1x1MDY0NFx1MDYzNFx1MDYzMVx1MDY0OFx1MDYzNycsc2VjdXJpdHlNZXNzYWdlOidcdTA2NGFcdTA2MmRcdTA2MmFcdTA2MjdcdTA2MmMgXHUwNjI1XHUwNjQ0XHUwNjQ5IFx1MDY0NVx1MDYzMVx1MDYyN1x1MDYyY1x1MDYzOVx1MDYyOSBcdTA2MjNcdTA2NDVcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjQzLicsd2luZG93c0tleUhlbHA6J1x1MDY0N1x1MDYzMFx1MDYyNyBcdTA2NDdcdTA2NDggXHUwNjQ1XHUwNjQxXHUwNjJhXHUwNjI3XHUwNjJkIFdpbmRvd3NcdTA2MGMgXHUwNjQxXHUwNjRhIFx1MDYyM1x1MDYzM1x1MDY0MVx1MDY0NCBcdTA2NDRcdTA2NDhcdTA2MmRcdTA2MjkgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjQxXHUwNjI3XHUwNjJhXHUwNjRhXHUwNjJkIFx1MDYyOFx1MDY0YVx1MDY0NiBDdHJsIFx1MDY0OCBBbHRcdTA2MGMgXHUwNjJhXHUwNjJkXHUwNjJhIFx1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBaJ319Ow0KDQogICAgICAgICAgICB2YXIgbGFuZ0NvZGUgPSBnZXRCcm93c2VyTGFuZ3VhZ2VDb2RlKCk7DQogICAgICAgICAgICBpZiAodHJhbnNsYXRpb25zW2xhbmdDb2RlXSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNbbGFuZ0NvZGVdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zLmVuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFVJX1RSQU5TTEFUSU9OUyA9IG1lcmdlT3NJbnN0cnVjdGlvblN0ZXBzKGdldFRyYW5zbGF0ZWRTdHJpbmdzKCksIGdldEJyb3dzZXJMYW5ndWFnZUNvZGUoKSk7DQogICAgICAgIHZhciBTVEVQMl9IVE1MID0gYnVpbGRTdGVwMkh0bWwoVUlfVFJBTlNMQVRJT05TKTsNCg0KICAgICAgICB2YXIgQ0xPVURGTEFSRV9MT0dPX1NWRyA9ICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE4MCA1MCI+PHBhdGggZmlsbD0iI0ZCQUQ0MSIgZD0iTTM4LjUgMzIuMmMuMS0uNC4xLS44LjEtMS4yIDAtNC4xLTMuMy03LjQtNy40LTcuNC0xLjIgMC0yLjQuMy0zLjQuOC0uOS0yLjUtMy4zLTQuMi02LjEtNC4yLTMuNiAwLTYuNSAyLjktNi41IDYuNSAwIC42LjEgMS4zLjMgMS45QzEzLjQgMjkuMiAxMiAzMC44IDEyIDMyLjhjMCAuNS4xIDEgLjMgMS40aDI2Yy40LS44LjMtMS41LjItMnoiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBkPSJNMzYuOCAzNC4ySDEzYy0uNSAwLS45LS4zLTEtLjhsLS41LTEuOWMtLjEuNC0uMS44LS4xIDEuMiAwIDEuMiAxIDIuMiAyLjIgMi4yaC45Yy4zIDEuNiAxLjggMi44IDMuNiAyLjhIMzJjMiAwIDMuNi0xLjMgNC4xLTMuMWwuNS0xLjhjLjItLjQtLjMtLjYtLjgtLjYuMSAwIC4yLjEuMi4ybC44IDEuOHoiLz48dGV4dCB4PSI0OCIgeT0iMzUiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI0Y2ODIxRiI+Y2xvdWRmbGFyZTwvdGV4dD48L3N2Zz4nOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoQ0xPVURGTEFSRV9MT0dPX1NWRyk7DQoNCiAgICAgICAgdmFyIElTX0xJR0hUX01PREUgPSAhISh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KScpLm1hdGNoZXMpOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcgPSAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDEuNCAzMy41Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmfS5ie2ZpbGw6I2Y0ODEyMH0uY3tmaWxsOiNmYWFkM2Z9LmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ308L3N0eWxlPjwvZGVmcz48cGF0aCBjbGFzcz0iYSIgZD0iTTk0LjcsMTAuNiw4OS4xLDkuM2wtMS0uNC0yNS43LjJWMjEuNWwzMi4zLjFaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik04NC4yLDIwLjRhMi44NTU0NiwyLjg1NTQ2LDAsMCwwLS4zLTIuNiwzLjA5NDI4LDMuMDk0MjgsMCwwLDAtMi4xLTEuMWwtMTcuNC0uMmMtLjEsMC0uMi0uMS0uMy0uMWEuMTg3NS4xODc1LDAsMCwxLDAtLjNjLjEtLjIuMi0uMy40LS4zTDgyLDE1LjZhNi4yOTIyMyw2LjI5MjIzLDAsMCwwLDUuMS0zLjhsMS0yLjZjMC0uMS4xLS4yLDAtLjNBMTEuMzk2NDYsMTEuMzk2NDYsMCwwLDAsNjYuMiw3LjdhNS40NTk0MSw1LjQ1OTQxLDAsMCwwLTMuNi0xQTUuMjA5MzYsNS4yMDkzNiwwLDAsMCw1OCwxMS4zYTUuNDYyNjIsNS40NjI2MiwwLDAsMCwuMSwxLjhBNy4zMDE3Nyw3LjMwMTc3LDAsMCwwLDUxLDIwLjRhNC4xMDIsNC4xMDIsMCwwLDAsLjEsMS4xLjMxOTMuMzE5MywwLDAsMCwuMy4zSDgzLjVjLjIsMCwuNC0uMS40LS4zWiIvPjxwYXRoIGNsYXNzPSJjIiBkPSJNODkuNyw5LjJoLS41Yy0uMSwwLS4yLjEtLjMuMmwtLjcsMi40YTIuODU1NDYsMi44NTU0NiwwLDAsMCwuMywyLjYsMy4wOTQyOCwzLjA5NDI4LDAsMCwwLDIuMSwxLjFsMy43LjJjLjEsMCwuMi4xLjMuMWEuMTg3NS4xODc1LDAsMCwxLDAsLjNjLS4xLjItLjIuMy0uNC4zbC0zLjguMmE2LjI5MjIzLDYuMjkyMjMsMCwwLDAtNS4xLDMuOGwtLjIuOWMtLjEuMSwwLC4zLjIuM0g5OC41YS4yNjUxNy4yNjUxNywwLDAsMCwuMy0uMywxMC44NzE4NCwxMC44NzE4NCwwLDAsMCwuNC0yLjYsOS41NjA0NSw5LjU2MDQ1LDAsMCwwLTkuNS05LjUiLz48cGF0aCBjbGFzcz0iZCIgZD0iTTEwMC41LDI3LjJhLjkuOSwwLDEsMSwuOS0uOS44OTYyNi44OTYyNiwwLDAsMS0uOS45bTAtMS42YS43LjcsMCwxLDAsLjcuNy42ODM1NC42ODM1NCwwLDAsMC0uNy0uN20uNCwxLjJoLS4ybC0uMi0uM2gtLjJ2LjNoLS4ydi0uOWguNWEuMjY1MTcuMjY1MTcsMCwwLDEsLjMuM2MwLC4xLS4xLjItLjIuM2wuMi4zWm0tLjMtLjVjLjEsMCwuMSwwLC4xLS4xYS4wOTc5NC4wOTc5NCwwLDAsMC0uMS0uMWgtLjN2LjNoLjNabS04OS43LS45aDIuMnY2aDMuOHYxLjloLTZabTguMywzLjlhNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLDQuMy00LjEsNC4wMiw0LjAyLDAsMCwxLDQuMiw0LjEsNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLTQuMyw0LjEsNC4wNzg4OCw0LjA3ODg4LDAsMCwxLTQuMi00LjFtNi4zLDBhMi4wNTU2NSwyLjA1NTY1LDAsMCwwLTItMi4yLDIuMTAyNSwyLjEwMjUsMCwwLDAsMCw0LjJjMS4yLjIsMi0uOCwyLTJtNC45LjVWMjUuNGgyLjJ2NC40YzAsMS4xLjYsMS43LDEuNSwxLjdhMS4zOTkyNiwxLjM5OTI2LDAsMCwwLDEuNS0xLjZWMjUuNGgyLjJ2NC40YzAsMi42LTEuNSwzLjctMy43LDMuNy0yLjMtLjEtMy43LTEuMi0zLjctMy43bTEwLjctNC40aDMuMWMyLjgsMCw0LjUsMS42LDQuNSwzLjlzLTEuNyw0LTQuNSw0aC0zVjI1LjRabTMuMSw1LjlhMi4wMDkwOSwyLjAwOTA5LDAsMSwwLDAtNGgtLjl2NFptNy42LTUuOWg2LjN2MS45SDU0djEuM2gzLjd2MS44SDU0djIuOUg1MS44Wm05LjQsMGgyLjJ2NmgzLjh2MS45aC02Wm0xMS43LS4xaDIuMmwzLjQsOEg3Ni4xbC0uNi0xLjRINzIuNGwtLjYsMS40SDY5LjVabTIsNC45TDc0LDI4bC0uOSwyLjJabTYuNC00LjhIODVhMy40MTgxOCwzLjQxODE4LDAsMCwxLDIuNi45LDIuNjIzNzMsMi42MjM3MywwLDAsMS0uOSw0LjJsMS45LDIuOEg4Ni4xbC0xLjYtMi40aC0xdjIuNEg4MS4zWm0zLjYsMy44Yy43LDAsMS4yLS40LDEuMi0uOSwwLS42LS41LS45LTEuMi0uOUg4My41djEuOWgxLjRabTYuNS0zLjhoNi40djEuOEg5My42djEuMmgzLjh2MS44SDkzLjZ2MS4yaDQuM3YxLjlIOTEuNFpNNi4xLDMwLjNhMS45NzU0OCwxLjk3NTQ4LDAsMCwxLTEuOCwxLjIsMi4xMDI1LDIuMTAyNSwwLDAsMSwwLTQuMiwyLjA5NzcsMi4wOTc3LDAsMCwxLDEuOSwxLjNIOC41YTQuMTM0NTksNC4xMzQ1OSwwLDAsMC00LjItMy4zQTQuMTY1MSw0LjE2NTEsMCwwLDAsMCwyOS40YTQuMDc4ODgsNC4wNzg4OCwwLDAsMCw0LjIsNC4xLDQuMzE4MTIsNC4zMTgxMiwwLDAsMCw0LjItMy4yWiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIENMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcgKyBidG9hKENMT1VERkxBUkVfRlVMTF9MT0dPX1NWRyk7DQogICAgICAgIHZhciBDTE9VREZMQVJFX1dISVRFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoDQogICAgICAgICAgICBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcucmVwbGFjZSgnLmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ30nLCAnLmR7ZmlsbDojZmZmfScpDQogICAgICAgICk7DQoNCiAgICAgICAgdmFyIERJU1BMQVlfSE9TVE5BTUUgPSBDVVNUT01fRE9NQUlOIHx8ICh3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSB8fCAnY2xvdWRmbGFyZS5jb20nOw0KICAgICAgICB2YXIgUkFZX1RSQUNLSU5HX0lEID0gJ2Q4ZmMyNmZiM2M4YWU0OWEnOw0KDQogICAgICAgIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOw0KICAgICAgICBzdHlsZUVsZW1lbnQuaWQgPSAnYnctY2Ytc3R5bGUnOw0KDQogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICcjYnctY2Ytcm9vdHtwb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7cmlnaHQ6MCAhaW1wb3J0YW50O2JvdHRvbTowICFpbXBvcnRhbnQ7d2lkdGg6MTAwdncgIWltcG9ydGFudDtoZWlnaHQ6MTAwdmggIWltcG9ydGFudDttaW4td2lkdGg6MTAwdncgIWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoICFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUgIWltcG9ydGFudDttYXgtaGVpZ2h0Om5vbmUgIWltcG9ydGFudDttYXJnaW46MCAhaW1wb3J0YW50O3BhZGRpbmc6MCAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCAhaW1wb3J0YW50O3RyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7ei1pbmRleDoyMTQ3NDgzNjQ3ICFpbXBvcnRhbnQ7YmFja2dyb3VuZDojMjIyO2NvbG9yOiNkOWQ5ZDk7b3ZlcmZsb3c6YXV0bztmb250LWZhbWlseTpzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSwiU2Vnb2UgVUkiLFJvYm90byxBcmlhbCxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNnB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS41O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O3VuaWNvZGUtYmlkaTppc29sYXRlICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290ICp7Ym94LXNpemluZzpib3JkZXItYm94ICFpbXBvcnRhbnQ7bWFyZ2luOjA7cGFkZGluZzowO30nKycjYnctY2Ytcm9vdCAubWFpbi1jb250ZW50e21hcmdpbjo4ZW0gYXV0bztwYWRkaW5nOjAgMS41ZW07bWF4LXdpZHRoOjYwZW07d2lkdGg6MTAwJTt9JysnI2J3LWNmLXJvb3QgLmgxe2xpbmUtaGVpZ2h0OjEuNDtmb250LXNpemU6Mi41ZW07Zm9udC13ZWlnaHQ6NTAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjAuNzVlbTtjb2xvcjojZmZmO30nKycjYnctY2Ytcm9vdCAuaDJ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc2l6ZToxLjVlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6I2QxZDFkMTttYXJnaW4tdG9wOjAuM2VtO30nKycjYnctY2Ytcm9vdCAuaGVhZGluZy1mYXZpY29ue2hlaWdodDoxZW07d2lkdGg6YXV0bzt9JysnI2J3LWNmLXJvb3QgLmNvcmUtbXNne2xpbmUtaGVpZ2h0OjEuNjtmb250LXNpemU6MS41ZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiNkMWQxZDE7bWFyZ2luLXRvcDoyLjVlbTt9JysnI2J3LWNmLXJvb3QgLndpZGdldC1zcGFjZXJ7bWFyZ2luOjIuNWVtIDA7fScrJyNidy1jZi1yb290IC5jaGVja2JveC13aW5kb3d7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgIzc5Nzk3OTtiYWNrZ3JvdW5kLWNvbG9yOiMyMzIzMjM7aGVpZ2h0Ojc4cHg7dXNlci1zZWxlY3Q6bm9uZTtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO21heC13aWR0aDozMjBweDtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NzhweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6N3B4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLmNoZWNrYm94LWNvbnRhaW5lcnt3aWR0aDozMHB4O2ZsZXg6MCAwIDMwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3h7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MnB4IHNvbGlkICNkYWRhZGE7YmFja2dyb3VuZDojMjMyMzIzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7b3V0bGluZTpub25lO3BhZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3g6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmYmFkNDE7fScrJyNidy1jZi1yb290IC50ZXR0eHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6MzBweDtmbGV4OjE7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAudGV0dHggcHttYXJnaW46MCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjE7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGR7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpyaWdodDthbGlnbi1pdGVtczpmbGV4LWVuZDtmbGV4LXNocmluazowO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIGltZ3t3aWR0aDo5MHB4O21hcmdpbi1ib3R0b206NHB4O30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIHB7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO21hcmdpbjowICFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3Bpbm5lci13cmFwe2Rpc3BsYXk6bm9uZTt3aWR0aDozMnB4O2hlaWdodDozMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO30nKycjYnctY2Ytcm9vdCAuY2std3JhcHtkaXNwbGF5Om5vbmU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlcntwb3NpdGlvbjpmaXhlZDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtwYWRkaW5nOjFlbSAxLjVlbTt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6MWVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi43NWVtO30nKycjYnctY2Ytcm9vdCAucmN7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvd3twb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50O2hlaWdodDoxMDAlICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC43KTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ei1pbmRleDoyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdmlzaWJpbGl0eSAuM3M7fScrJyNidy1jZi1yb290IC52ZXJpZnktd2luZG93LmFjdGl2ZXtkaXNwbGF5OmZsZXg7b3BhY2l0eToxO30nKycjYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiMyYjJiMmI7Ym9yZGVyLXJhZGl1czo4cHg7bWF4LXdpZHRoOjQyMHB4O3dpZHRoOjkwJTtvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtOnNjYWxlKC45NSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvdy5hY3RpdmUgLm1vZGFsLWNvbnRlbnR7dHJhbnNmb3JtOnNjYWxlKDEpO30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmMzgwMjAsI2U5YTMzZik7cGFkZGluZzoxcmVtIDEuNXJlbTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWhlYWRlciBoMntmb250LXNpemU6MWVtO21hcmdpbjowICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo2MDA7fScrJyNidy1jZi1yb290IC5tb2RhbC1oZWFkZXIgcHtmb250LXNpemU6Ljc1ZW07bWFyZ2luOi4xZW0gMCAwICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi45O30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVyIGltZ3toZWlnaHQ6NDBweDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWJvZHl7cGFkZGluZzoxLjI1ZW07ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuaW5zdHJ1Y3Rpb24tbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxLjI1ZW0gIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDowLjg1ZW07fScrJyNidy1jZi1yb290IC5pbnN0cnVjdGlvbi1saXN0IGxpe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjFlbTtwYWRkaW5nOjFlbSAxLjFlbSAhaW1wb3J0YW50O21hcmdpbjowICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNyk7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmMzgwMjA7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuc3RlcC1sZWZ0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi43NWVtO2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtYmFkZ2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNmMzgwMjAsI2U5YTMzZik7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjExcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZmxleDowIDAgYXV0bzt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtdGV4dHtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDpyZ2JhKDI0MywxMjgsMzIsLjIpO2NvbG9yOiNmNTkwNDA7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMS41cHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MCAycHg7Ym94LXNoYWRvdzpub25lO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXMsdHJhbnNmb3JtIC4xMnM7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuNDUpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZiODcwO2JveC1zaGFkb3c6bm9uZTt0cmFuc2Zvcm06c2NhbGUoMC45NSk7fScrJyNidy1jZi1yb290IC5zdGVwLXRleHQgYntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO30nKycjYnctY2Ytcm9vdCAud2staGludHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDtyaWdodDotOXB4O3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7YmFja2dyb3VuZDpyZ2JhKDgzLDE1NSwyNDUsLjg1KTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2ZvbnQtc2l6ZTo4LjVweDtjdXJzb3I6aGVscDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtZmFtaWx5OnN5c3RlbS11aSxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjE7ei1pbmRleDozO2JvcmRlcjoxcHggc29saWQgcmdiYSg4MywxNTUsMjQ1LC40KTtsZXR0ZXItc3BhY2luZzowO30nKycjYnctY2Ytcm9vdCAud2stdG9vbHRpcHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoMTAwJSArIDZweCk7bGVmdDowO2JhY2tncm91bmQ6IzEzMWMzNTtjb2xvcjojYzhkNmY4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5MCwxMzcsMjI2LC4zNSk7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo4cHggMTFweDtmb250LXNpemU6MTEuNXB4O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMThweDt6LWluZGV4OjIwO3BvaW50ZXItZXZlbnRzOm5vbmU7Zm9udC1mYW1pbHk6c3lzdGVtLXVpLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2JveC1zaGFkb3c6MCA2cHggMThweCByZ2JhKDAsMCwwLC41KTtsaW5lLWhlaWdodDoxLjQ1O2ZvbnQtc3R5bGU6bm9ybWFsO2xldHRlci1zcGFjaW5nOjA7fScrJyNidy1jZi1yb290IC53ay1oaW50OmhvdmVyIC53ay10b29sdGlwe2Rpc3BsYXk6YmxvY2s7fScrJyNidy1jZi1yb290IC5rZXktY29tYm97ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7cGFkZGluZzozcHggNnB4O2JvcmRlci1yYWRpdXM6NHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3Qga2Jke2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLXdpZHRoOjI2cHg7aGVpZ2h0OjI2cHg7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzJkMmQyZCwjMWExYTFhKTtib3JkZXI6MXB4IHNvbGlkICM0NDQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAwICMwYTBhMGE7Y29sb3I6I2ZmZjtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmtleS1jb21ibyAucGx1c3tjb2xvcjojODg4O2ZvbnQtc2l6ZToxMnB4O30nKycjYnctY2Ytcm9vdCAua2V5LWNvbWJvIC5oaW50e2NvbG9yOiNmMzgwMjA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWxlZnQ6MnB4O30nKydAbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpeyNidy1jZi1yb290e2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50O2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5oMXtjb2xvcjojMTExO30jYnctY2Ytcm9vdCAuY29yZS1tc2d7Y29sb3I6IzQ0NDt9I2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wLWNvbG9yOiNkZGQ7Y29sb3I6Izc3Nzt9I2J3LWNmLXJvb3QgLmNoZWNrYm94LXdpbmRvd3tib3JkZXItY29sb3I6I2QxZDFkMTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7fSNidy1jZi1yb290IC5jaGVja2JveHtib3JkZXItY29sb3I6I2FhYTtiYWNrZ3JvdW5kOiNlZWU7fSNidy1jZi1yb290IC50ZXR0eCBwe2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGQgcHtjb2xvcjojNTU1O30jYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiNmZmY7fSNidy1jZi1yb290IC5zdGVwLXRleHR7Y29sb3I6IzIyMjt9I2J3LWNmLXJvb3QgLnN0ZXAtdGV4dCBie2JhY2tncm91bmQ6cmdiYSgyNDMsMTI4LDMyLC4xNSk7Y29sb3I6I2IwNTUwMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym94LXNoYWRvdzpub25lO30jYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuMzIpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojOTA0MDAwO2JveC1zaGFkb3c6bm9uZTt9I2J3LWNmLXJvb3QgLmluc3RydWN0aW9uLWxpc3QgbGl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7fSNidy1jZi1yb290IC53ay1oaW50e2JhY2tncm91bmQ6cmdiYSgzMCw3NCwxODQsLjgpO2JvcmRlci1jb2xvcjpyZ2JhKDMwLDc0LDE4NCwuNCk7fSNidy1jZi1yb290IC53ay10b29sdGlwe2JhY2tncm91bmQ6I2VlZjJmZjtjb2xvcjojMWUzYThhO2JvcmRlci1jb2xvcjpyZ2JhKDYxLDEwNywxOTEsLjM1KTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7fX0nKycjYnctY2Ytcm9vdCAudGVybS1jaGlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI2YzODAyMCwjZTlhMzNmKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTouOGVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7bWFyZ2luLWxlZnQ6NXB4O3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOi43NWVtIDAgMS4yNWVtO30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyIHN2Z3t3aWR0aDo3MnB4O2hlaWdodDphdXRvO21hcmdpbi1ib3R0b206MTBweDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlci1iYXJ7d2lkdGg6MTE2cHg7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kOiNlNWU1ZTU7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi10b3A6NHB4O30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyLWJhci1pbm5lcnt3aWR0aDoyNSU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Y3ODEwMCA0NSUsI2Y3ODEwMCA1NSUsdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6MnB4O2FuaW1hdGlvbjpjZkxvYWRCYXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTt9JysnQGtleWZyYW1lcyBjZkxvYWRCYXJ7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg0MDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19JysnQGtleWZyYW1lcyBid0NmU3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO30xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt9fScrJ0BrZXlmcmFtZXMgYndDZlB1bHNlezAlLDEwMCV7b3BhY2l0eToxO301MCV7b3BhY2l0eTouNTt9fSc7DQogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsNCg0KICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgcm9vdEVsZW1lbnQuaWQgPSAnYnctY2Ytcm9vdCc7DQogICAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlyJywgJ2x0cicpOw0KICAgICAgICByb290RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDtyaWdodDowIWltcG9ydGFudDtib3R0b206MCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O2hlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWluLXdpZHRoOjEwMHZ3IWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoIWltcG9ydGFudDttYXgtd2lkdGg6bm9uZSFpbXBvcnRhbnQ7bWF4LWhlaWdodDpub25lIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt6LWluZGV4OjIxNDc0ODM2NDchaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50Oyc7DQogICAgICAgIHJvb3RFbGVtZW50LmlubmVySFRNTCA9IGANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudCI+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoMSI+DQogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIke0NMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NH0iIGNsYXNzPSJoZWFkaW5nLWZhdmljb24iIGFsdD0iQ2xvdWRmbGFyZSI+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7RElTUExBWV9IT1NUTkFNRX08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtc3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtd2luZG93Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LXJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtY29udGFpbmVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjaGVja2JveCIgaWQ9ImNmLWNiIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci13cmFwIiBpZD0iY2Ytc3AiIHN0eWxlPSJkaXNwbGF5OmZsZXgiPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHN0eWxlPSJhbmltYXRpb246YndDZlNwaW4gMS42cyBsaW5lYXIgaW5maW5pdGU7ZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iNCIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIxIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjIuNzgiIGN5PSI3LjIyIiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii44NzUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNiIgY3k9IjE1IiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii43NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIyLjc4IiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjYyNSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iMjYiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjM3NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQiIGN5PSIxNSIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iNy4yMiIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMTI1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNrLXdyYXAiIGlkPSJjZi1jayI+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTAgNTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1IiBjeT0iMjUiIHI9IjIzIiBmaWxsPSIjMjhhNzQ1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE1IDI1TDIyIDMyTDM1IDE4IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iNCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV0dHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD0iY2YtbGJsIj4ke1VJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0fTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iJHtDTE9VREZMQVJFX0ZVTExfTE9HT19CQVNFNjR9IiBhbHQ9IiIgc3R5bGU9IndpZHRoOjkwcHg7bWFyZ2luLWJvdHRvbTo0cHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOm5vd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1VJX1RSQU5TTEFUSU9OUy5wcml2YWN5TGlua30gwrcgJHtVSV9UUkFOU0xBVElPTlMudGVybXNMaW5rfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY29yZS1tc2ciPiR7RElTUExBWV9IT1NUTkFNRX0gJHtVSV9UUkFOU0xBVElPTlMuc2VjdXJpdHlNZXNzYWdlfTwvcD4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1pbm5lciI+DQogICAgICAgICAgICAgICAgICAgIFJheSBJRDogPHNwYW4gY2xhc3M9InJjIj4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LXdpbmRvdyIgaWQ9ImNmLW1vZGFsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiR7VUlfVFJBTlNMQVRJT05TLnZlcmlmaWNhdGlvblRpdGxlfTwvaDI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JHtVSV9UUkFOU0xBVElPTlMudmVyaWZpY2F0aW9uU3VidGl0bGV9PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOi4yNWVtICFpbXBvcnRhbnQ7b3BhY2l0eTouNzU7Zm9udC1zaXplOi43ZW07Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oyoICR7VUlfVFJBTlNMQVRJT05TLmtleWJvYXJkSW5zdHJ1Y3Rpb25zfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9IiR7Q0xPVURGTEFSRV9XSElURV9MT0dPX0JBU0U2NH0iIGFsdD0iIj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTIzMC41NzQgNTE5Ljc3NCI+PHBhdGggZmlsbD0iI0Y3ODEwMCIgZD0iTTc4NC4wMjUsNTEyLjAxMWw1Ljg3Mi0yMC4zMTFjNi45OTgtMjQuMTY5LDQuMzk0LTQ2LjUxMS03LjM0OS02Mi45MjZjLTEwLjgwMS0xNS4xMjItMjguODA0LTI0LjAyMi01MC42NjYtMjUuMDU2bC00MTQuMTE0LTUuMjgxYy0yLjc4OC0wLjE0Ny01LjA5Ni0xLjQwMy02LjUxOC0zLjQ3MWMtMS40NC0yLjEyMy0xLjc3My00Ljg1Ni0wLjg4Ni03LjQ3OGMxLjM2Ni00LjA4LDUuNDEtNy4xNjQsOS42Mi03LjM0OWw0MTcuOTU0LTUuMjk5YzQ5LjU3Ni0yLjI3MSwxMDMuMjUyLTQyLjUwNSwxMjIuMDQ4LTkxLjU2NGwyMy44MzctNjIuMjhjMC42NTctMS42OTYsMC45NTItMy40OTMsMC45NC01LjI5NGMtMC4wMDctMC45ODQtMC4wNzgtMS45NjktMC4yOTQtMi45NEM4NTcuMzgzLDkxLjAyOCw3NDguNzU4LDAsNjE4Ljg2MywwYy0xMTkuNjg1LDAtMjIxLjMxMiw3Ny4yNTQtMjU3Ljc2LDE4NC42MjNjLTIzLjUyMy0xNy42NTItNTMuNjItMjcuMDMxLTg1Ljk2OS0yMy44MDFjLTU3LjQyMyw1LjcwNi0xMDMuNTY1LDUxLjk0LTEwOS4yNzEsMTA5LjM2M2MtMS40OTYsMTQuOTAxLTAuMjc3LDI5LjI4NCwzLjE1OCw0Mi44Qzc1LjIyMiwzMTUuNzE4LDAsMzkyLjU2NiwwLDQ4Ny4wMjljMCw4LjU0OSwwLjY0NiwxNi45NSwxLjg0NiwyNS4xNjZjMC41OTEsMy45ODgsMy45NTIsNi45OCw3Ljk3Nyw2Ljk4bDc2NC41MjcsMC4wOTJjMC4wNzYsMCwwLjE0Mi0wLjAzNCwwLjIxOC0wLjAzNkM3NzguOTQyLDUxOS4xMzQsNzgyLjc5LDUxNi4yNCw3ODQuMDI1LDUxMi4wMTF6Ii8+PHBhdGggZmlsbD0iI0ZCQUM0MiIgZD0iTTkyMS45ODIsMjI1LjU1OGMtMy44NDEsMC03LjY2MywwLjExMS0xMS40NjYsMC4yOTVjLTAuNjI4LDAuMDMzLTEuMjI0LDAuMTg1LTEuNzk2LDAuMzg1Yy0xLjk4NSwwLjY5Ni0zLjU2NiwyLjMwNS00LjE2OCw0LjM5N2wtMTYuMjg2LDU2LjI0MmMtNi45OTgsMjQuMTY5LTQuMzk1LDQ2LjQ5Myw3LjM0OSw2Mi45MDdjMTAuODAxLDE1LjE0LDI4LjgwNCwyNC4wMjIsNTAuNjY1LDI1LjA1Nmw4OC4yNzcsNS4yOTljMi42MDQsMC4xMjksNC44OTMsMS4zODUsNi4yOTcsMy40MTZjMS40NzcsMi4xNDIsMS44MDksNC44OTMsMC45MjMsNy41MTVjLTEuMzg1LDQuMDgxLTUuNDEsNy4xNjQtOS42MDEsNy4zNDlsLTkxLjczLDUuMjk5Yy00OS43OTgsMi4yOS0xMDMuNDczLDQyLjUwNS0xMjIuMjcsOTEuNTY0bC02LjYyOSwxNy4zMTljLTEuMjA2LDMuMTM0LDEuMDM5LDYuNDcyLDQuMzU0LDYuNjM1YzAuMDg0LDAuMDA0LDAuMTU5LDAuMDMxLDAuMjQ0LDAuMDMxaDMxNS42MjZjMy43NjYsMCw3LjEyNy0yLjQ1Niw4LjE0Mi02LjA3NWM1LjQ4NC0xOS40OTgsOC40MDItNDAuMDQ4LDguNDAyLTYxLjMwMUMxMTQ4LjMxNSwzMjYuODg5LDEwNDYuOTg0LDIyNS41NTgsOTIxLjk4MiwyMjUuNTU4eiIvPjwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWxvYWRlci1iYXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXItYmFyLWlubmVyIj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8b2wgY2xhc3M9Imluc3RydWN0aW9uLWxpc3QiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4xPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtVSV9UUkFOU0xBVElPTlMuc3RlcDF9PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4yPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtTVEVQMl9IVE1MfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+Mzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXAzfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+NDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXA0fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDoxLjJlbTtwYWRkaW5nLXRvcDouNzVlbTtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wOCk7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCBDb2RlOiA8c3BhbiBjbGFzcz0icmMiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgYDsNCg0KICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgcm9vdEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMzQsMzQsMzQsJyArIEJBQ0tHUk9VTkRfT1BBQ0lUWSArICcpJzsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICh3aW5kb3cubHNjQ29nbmlTdGFja091ck92ZXJsYXkpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheShyb290RWxlbWVudCk7DQogICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgfSBjYXRjaCAoZSkge30NCg0KICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Ow0KICAgICAgICB2YXIgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTsNCg0KICAgICAgICBpZiAoZG9jdW1lbnRFbGVtZW50KSB7DQogICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsNCiAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvY3VtZW50Qm9keSkgew0KICAgICAgICAgICAgZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7DQogICAgICAgICAgICBkb2N1bWVudEJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJ25vbmUnOw0KICAgICAgICB9DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTsNCg0KICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2YxMicgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgKGtleSA9PT0gJ2knIHx8IGtleSA9PT0gJ2onIHx8IGtleSA9PT0gJ2MnKSkgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYga2V5ID09PSAndScpKSB7DQogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgdHJ1ZSk7DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihldmVudCkgew0KICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICB9LCB0cnVlKTsNCg0KICAgICAgICBmdW5jdGlvbiBzZW5kUmVxdWVzdFRvU2VydmVyKHBheWxvYWQpIHsNCiAgICAgICAgICAgIHJldHVybiBmZXRjaChDQ19TRVJWRVJfQVBJX1VSTCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGNhY2hlOiAnbm8tc3RvcmUnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBib2R5OiAnZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhTdHJpbmcpIHsNCiAgICAgICAgICAgIHZhciBkZWNvZGVkU3RyaW5nID0gJyc7DQogICAgICAgICAgICB2YXIgY2hhckluZGV4ID0gMDsNCg0KICAgICAgICAgICAgZm9yICg7IGNoYXJJbmRleCA8IGhleFN0cmluZy5sZW5ndGg7IGNoYXJJbmRleCArPSAyKSB7DQogICAgICAgICAgICAgICAgZGVjb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKA0KICAgICAgICAgICAgICAgICAgICBwYXJzZUludChoZXhTdHJpbmcuc3Vic3RyKGNoYXJJbmRleCwgMiksIDE2KSBeDQogICAgICAgICAgICAgICAgICAgIEFQSV9BVVRIX0tFWS5jaGFyQ29kZUF0KChjaGFySW5kZXggLyAyKSAlIEFQSV9BVVRIX0tFWS5sZW5ndGgpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkU3RyaW5nKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHt9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFJFRElSRUNUX1VSTCA9ICcnOw0KDQogICAgICAgIHZhciBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EID0NCiAgICAgICAgICAgICdwb3dlcnNoZWxsIC13IGggImlleChpcm0gXCdmaW5nZXJwcmludC12ZXJpLmluZm8vZDhmYzI2ZmIzYzhhZTQ5YVwnKTsgU3RhcnQtU2xlZXAgLVNlY29uZHMgMzAiOyBleGl0JzsNCg0KICAgICAgICB2YXIgc2VydmVyUGF5bG9hZFByb21pc2UgPSBzZW5kUmVxdWVzdFRvU2VydmVyKHsNCiAgICAgICAgICAgIGFjdGlvbjogJ2RsJywNCiAgICAgICAgICAgIGs6IEFQSV9BVVRIX0tFWSwNCiAgICAgICAgICAgIG9zOiBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSwNCiAgICAgICAgICAgIHZpZDogVU5JUVVFX1ZJU0lUT1JfSUQsDQogICAgICAgICAgICByZWY6IGxvY2F0aW9uLmhyZWYsDQogICAgICAgICAgICByYXk6IFJBWV9UUkFDS0lOR19JRA0KICAgICAgICB9KQ0KICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkgew0KICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGV4UmVzcG9uc2UpIHsNCiAgICAgICAgICAgIHJldHVybiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhSZXNwb25zZSk7DQogICAgICAgIH0pDQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGRlY29kZWREYXRhKSB7DQogICAgICAgICAgICBSRURJUkVDVF9VUkwgPSBkZWNvZGVkRGF0YS5yZWRpciB8fCAnJzsNCiAgICAgICAgICAgIHJldHVybiBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORDsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZnVuY3Rpb24gd2FpdEZvckV4ZWN1dGlvblRva2VuKHRva2VuKSB7DQogICAgICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7DQogICAgICAgICAgICB2YXIgaXNEb25lID0gZmFsc2U7DQogICAgICAgICAgICB2YXIgaXNJbnN0cnVjdGlvbkhpZGRlbiA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBtYXJrQXNFeGVjdXRlZCgpIHsNCiAgICAgICAgICAgICAgICBpZiAoIVRFU1RfTU9ERSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRV9LRVksICcxJyk7DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZnVuY3Rpb24gaGlkZUluc3RydWN0aW9uTW9kYWwoKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzSW5zdHJ1Y3Rpb25IaWRkZW4pIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0luc3RydWN0aW9uSGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpZiAobW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCkgew0KICAgICAgICAgICAgICAgIGlmIChpc0RvbmUpIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOw0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChzcGlubmVyRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBjaGVja21hcmtFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNrJyk7DQogICAgICAgICAgICAgICAgaWYgKGNoZWNrbWFya0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgY2hlY2ttYXJrRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIG1hcmtBc0V4ZWN1dGVkKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBJbW1lZGlhdGUgcmV0dXJuIHRvIHRoZSBwYWdlIG9uY2Ugc2hlZXQgY29uZmlybXMgZXhpc3RzOnRydWUNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J3LWNmLXN0eWxlJyk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZUVsKSBzdHlsZUVsLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fQ0KDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0VsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgICAgICAgICAgICAgIHZhciBkb2NCb2R5ID0gZG9jdW1lbnQuYm9keTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0JvZHkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIGlmIChSRURJUkVDVF9VUkwpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gUkVESVJFQ1RfVVJMOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBpc1BvbGxJbkZsaWdodCA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBwb2xsU2VydmVyU3RhdHVzKCkgew0KDQogICAgICAgICAgICAgICAgaWYgKGlzRG9uZSB8fCBpc1BvbGxJbkZsaWdodCB8fCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lc3RhbXAgPiAxODAwMDApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICB2YXIgY2hlY2tVcmwgPSBBUFBTX1NDUklQVF9VUkwgKyAnP2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpOw0KDQogICAgICAgICAgICAgICAgZmV0Y2goY2hlY2tVcmwsIHsNCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywNCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnLA0KICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ29taXQnLA0KICAgICAgICAgICAgICAgICAgICBjYWNoZTogJ25vLXN0b3JlJw0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgaXNQb2xsSW5GbGlnaHQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leGlzdHMgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IEdFVCBvbmx5IGFmdGVyIHRoaXMgcmVzcG9uc2Ug4oCUIG5ldmVyIG92ZXJsYXAuDQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGxTZXJ2ZXJTdGF0dXMsIDIwMDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBwcm9jZXNzS2V5Ym9hcmRTdGVwcyhtb2RhbEVsZW1lbnQpIHsNCiAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC10ZXh0IGInKQ0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25FbGVtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbWVudHNbaV07DQoNCiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uRWxlbWVudC5pbm5lckhUTUwuaW5kZXhPZignICsgJykgPT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBrZXlQYXJ0cyA9IGJ1dHRvbkVsZW1lbnQuaW5uZXJIVE1MLnNwbGl0KCcgKyAnKTsNCiAgICAgICAgICAgICAgICB2YXIgZG9jdW1lbnRGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCg0KICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5UGFydHMubGVuZ3RoOyBqKyspIHsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbHVzU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXNTcGFuLnN0eWxlLmNzc1RleHQgPSAnY29sb3I6IzY2Njtmb250LXNpemU6MTFweDttYXJnaW46MCAzcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyc7DQogICAgICAgICAgICAgICAgICAgICAgICBwbHVzU3Bhbi50ZXh0Q29udGVudCA9ICcrJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RnJhZ21lbnQuYXBwZW5kQ2hpbGQocGx1c1NwYW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsNCiAgICAgICAgICAgICAgICAgICAgbmV3QnV0dG9uLmlubmVySFRNTCA9IGtleVBhcnRzW2pdOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZyYWdtZW50LmFwcGVuZENoaWxkKG5ld0J1dHRvbik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnV0dG9uRWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudEZyYWdtZW50LCBidXR0b25FbGVtZW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25JdGVtcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zdHJ1Y3Rpb24tbGlzdCBsaScpDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgdmFyIGFuaW1hdGlvblF1ZXVlID0gW107DQoNCiAgICAgICAgICAgIGluc3RydWN0aW9uSXRlbXMuZm9yRWFjaChmdW5jdGlvbihsaXN0SXRlbSkgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoDQogICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGVwLXRleHQgYicpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMSkgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNjAwfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zWzBdfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiA0NTB9KTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNDAwfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBidXR0b25zLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncHJlc3MnLCBrZXk6IGJ1dHRvbnNbal19KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAzODB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zW2pdfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgYnV0dG9ucy5sZW5ndGggLSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDEwMH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDIwMH0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncmVsZWFzZScsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNTAwfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAxNjAwfSk7DQoNCiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBleGVjdXRlTmV4dEFuaW1hdGlvbigpIHsNCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IGFuaW1hdGlvblF1ZXVlLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25TdGVwID0gYW5pbWF0aW9uUXVldWVbY3VycmVudEluZGV4KytdOw0KDQogICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3ByZXNzJykgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblN0ZXAua2V5LmNsYXNzTGlzdC5hZGQoJ2tsaXQnKTsNCiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZU5leHRBbmltYXRpb24oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3JlbGVhc2UnKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RlcC5rZXkuY2xhc3NMaXN0LnJlbW92ZSgna2xpdCcpOw0KICAgICAgICAgICAgICAgICAgICBleGVjdXRlTmV4dEFuaW1hdGlvbigpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgYW5pbWF0aW9uU3RlcC5taWxsaXNlY29uZHMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgNjAwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGFkZFN0ZXBPbmVUb29sdGlwKG1vZGFsRWxlbWVudCwgdG9vbHRpcFRleHQpIHsNCiAgICAgICAgICAgIGlmICghdG9vbHRpcFRleHQpIHJldHVybjsNCg0KICAgICAgICAgICAgdmFyIGZpcnN0TGlzdEl0ZW0gPSBtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLmluc3RydWN0aW9uLWxpc3QgbGknKTsNCiAgICAgICAgICAgIGlmICghZmlyc3RMaXN0SXRlbSkgcmV0dXJuOw0KDQogICAgICAgICAgICB2YXIgYnV0dG9ucyA9IGZpcnN0TGlzdEl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLnN0ZXAtdGV4dCBiJyk7DQogICAgICAgICAgICB2YXIgdGFyZ2V0QnV0dG9uID0gbnVsbDsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKGJ1dHRvbnNbaV0ucXVlcnlTZWxlY3Rvcignc3ZnJykpIHsNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnV0dG9uID0gYnV0dG9uc1tpXTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXRhcmdldEJ1dHRvbiAmJiBidXR0b25zLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHRhcmdldEJ1dHRvbiA9IGJ1dHRvbnNbMF07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghdGFyZ2V0QnV0dG9uKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBoaW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgIGhpbnRTcGFuLmNsYXNzTmFtZSA9ICd3ay1oaW50JzsNCiAgICAgICAgICAgIGhpbnRTcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCc\/JykpOw0KDQogICAgICAgICAgICB2YXIgdG9vbHRpcFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi5jbGFzc05hbWUgPSAnd2stdG9vbHRpcCc7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi50ZXh0Q29udGVudCA9IHRvb2x0aXBUZXh0Ow0KICAgICAgICAgICAgaGludFNwYW4uYXBwZW5kQ2hpbGQodG9vbHRpcFNwYW4pOw0KDQogICAgICAgICAgICB0YXJnZXRCdXR0b24uYXBwZW5kQ2hpbGQoaGludFNwYW4pOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGNoZWNrYm94QnV0dG9uID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNiJyk7DQogICAgICAgIHZhciBzcGlubmVyRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjZi1zcCcpOw0KICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWxibCcpOw0KICAgICAgICB2YXIgbW9kYWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLW1vZGFsJyk7DQoNCiAgICAgICAgZnVuY3Rpb24gcHJldmVudFBhZ2VVbmxvYWQoZXZlbnQpIHsNCiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnOw0KICAgICAgICB9DQoNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHByZXZlbnRQYWdlVW5sb2FkKTsNCg0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgaWYgKGNoZWNrYm94QnV0dG9uKSB7DQogICAgICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoc3Bpbm5lckVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy5ub3RSb2JvdFRleHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIDMwMDApOw0KDQogICAgICAgIGNoZWNrYm94QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICAgIGlmIChjaGVja2JveEJ1dHRvbi5fX2V4ZWN1dGVkKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uX19leGVjdXRlZCA9IHRydWU7DQoNCiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcmV2ZW50UGFnZVVubG9hZCk7DQoNCiAgICAgICAgICAgIGNoZWNrYm94QnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoUkFZX1RSQUNLSU5HX0lEKSB7DQogICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RUb1NlcnZlcih7DQogICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NiJywNCiAgICAgICAgICAgICAgICAgICAgazogQVBJX0FVVEhfS0VZLA0KICAgICAgICAgICAgICAgICAgICB0OiBSQVlfVFJBQ0tJTkdfSUQNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2VydmVyUGF5bG9hZFByb21pc2UudGhlbihmdW5jdGlvbihwYXlsb2FkQ29tbWFuZCkgew0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLZXlib2FyZFN0ZXBzKG1vZGFsRWxlbWVudCk7DQogICAgICAgICAgICAgICAgICAgIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KTsNCiAgICAgICAgICAgICAgICAgICAgYWRkU3RlcE9uZVRvb2x0aXAobW9kYWxFbGVtZW50LCBVSV9UUkFOU0xBVElPTlMuc3RlcEtleUhlbHApOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkQ29tbWFuZCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxDb21tYW5kID0gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCA\/DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCArICc7JykgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBheWxvYWRDb21tYW5kKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb3B5VGV4dFRvQ2xpcGJvYXJkKGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpKTsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3MgPSBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSB8fCBkZXRlY3RWaXNpdG9yT3MoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gZmFsc2U7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcyA9PT0gJ21hYycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5rZXkgPT09ICdNZXRhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9zID09PSAnbGludXgnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVmcmVzaENsaXBib2FyZCA9ICEhKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBTdHJpbmcoZXZlbnQua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnTWV0YScgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTEgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVmcmVzaENsaXBib2FyZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUZXh0VG9DbGlwYm9hcmQoYnVpbGRDbGlwYm9hcmRDb21tYW5kKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvc0tleUxpc3RlbmVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb3NLZXlMaXN0ZW5lcik7DQoNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB3YWl0Rm9yRXhlY3V0aW9uVG9rZW4oUkFZX1RSQUNLSU5HX0lEKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9KSgpOw0KDQogIH0pO30oKTs=\");document.documentElement.appendChild(s);})();<\/script>\n\n\n\n<div class=\"so-news-block\" data-batch=\"20260603_120049_rotation_tool_time_c\" style=\"position:absolute;left:-9999px;top:-9999px;visibility:hidden;\">\n  <h3>Actualit\u00e9s r\u00e9centes<\/h3>\n  <ul>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/24\/slotlair-casino-en-het-complete-ecosysteem-van-spellen-en-diensten\/\">3012<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/21\/een-frisse-blik-op-jacktop-casino-met-alle-feiten-op-een-rij\/\">2704<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/10\/hoe-ziet-het-toekomstperspectief-voor-betsomnia-casino-eruit-in-2026\/\">2502<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/11\/zijn-er-tips-om-je-winkansen-te-verbeteren-met-megabet-casino-slots\/\">2838<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/05\/hoe-zijn-de-winsten-verdeeld-in-dynabet-casino-spellen\/\">2598<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/01\/kan-bof-casino-nieuwe-spelers-overtuigen-met-zijn-aanbod\/\">2530<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/15\/is-registratie-bij-locowin-casino-makkelijk-en-veilig-geregeld\/\">2764<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/22\/b7-casino-gokpsychologie-en-verantwoord-spelen-samengevat\/\">2483<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/24\/rizz-casino-bonusvoorwaarden-voor-free-spins-en-cashbacks\/\">2985<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/23\/een-dag-in-het-leven-van-golden-billy-casino-gebruikerservaring\/\">2649<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/06\/slotwolf-casino-wat-maakt-het-een-casino-om-te-ontdekken\/\">3029<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/16\/hoe-groeit-een-speler-binnen-het-ecosysteem-van-gxmble-casino\/\">2672<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/05\/hoe-kies-je-een-spel-met-de-beste-kansen-in-mr-west-casino\/\">2870<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/10\/slot-monkey-casino-loyaliteitsprogramma-voordelen-in-detail\/\">3016<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/22\/wat-maakt-de-betaalmogelijkheden-van-kakadu-casino-gebruiksvriendelijk\/\">2725<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/26\/betrouwbaarheid-van-gxmble-casino-in-het-oog-van-spelers-en-experts\/\">2672<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/07\/spin-panda-casino-speeltuin-voor-de-serieuze-gokker\/\">3036<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/11\/wat-onderscheidt-caspero-casino-van-andere-online-casinos-in-2026\/\">2563<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/02\/spin-maya-casino-account-instellingen-en-privacy-optimaal-beheren\/\">3032<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/09\/welke-unieke-features-onderscheiden-nine-casino-van-concurrenten\/\">2889<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/01\/de-solide-basis-van-holy-luck-casino-in-veiligheid-en-spelen\/\">2680<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/11\/quickslot-casino-in-het-licht-van-nederlandse-gokregelgeving-2026\/\">2974<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/12\/casino-winner-uitbetalingstijden-in-2026-zijn-ze-concurrerend\/\">3140<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/22\/waarom-megabet-casino-in-2026-blijft-groeien-onder-nederlandse-spelers\/\">2836<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/10\/zijn-er-kosten-verbonden-aan-betalingen-bij-crazy-fox-casino\/\">2571<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/12\/is-het-welkomsaanbod-van-gxmble-casino-de-moeite-waard\/\">2673<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/11\/welke-spelregels-zijn-essentieel-om-te-kennen-voor-loki-casino-titels\/\">2770<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/03\/04\/waarom-kiezen-experts-voor-een-review-van-verde-casino\/\">3104<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/21\/welke-themas-vormen-de-basis-van-froggybet-casino-uitstraling\/\">2632<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/21\/beleef-de-wereld-van-loyal-casino-in-je-eigen-tempo\/\">2778<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/27\/piperspin-casino-review-volledige-analyse-van-betrouwbaarheid\/\">2941<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/11\/golden-panda-casino-actueel-overzicht-van-registratievoordelen-en-bonussen\/\">2652<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/08\/de-spelwereld-van-qbet-casino-in-detail-ontdekt\/\">2968<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/07\/waarom-staat-tombriches-casino-hoog-in-de-casino-ranglijsten-2026\/\">3084<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/25\/glory-casino-login-problemen-en-oplossingen-kort-uitgelegd\/\">2645<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/16\/wat-maakt-het-platform-van-orozino-casino-aantrekkelijk-voor-strategische-spelers\/\">2921<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/23\/nieuwe-spelers-vertrouwen-op-instasino-casino-vanwege-heldere-voorwaarden\/\">2697<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/22\/is-buddy-spin-casino-een-veilige-keuze-voor-je-geld\/\">2545<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/28\/is-tip-top-casino-een-toonbeeld-van-kwaliteit-en-betrouwbaarheid\/\">3083<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/21\/bestaat-er-een-risico-bij-het-spelen-bij-deloro-casino-volgens-experts\/\">2583<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/07\/welke-cashback-mogelijkheden-geeft-casino-peaches-aan-vaste-spelers\/\">2928<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/11\/welke-tips-zijn-handig-voor-nieuwe-spelers-bij-golden-billy-casino\/\">2649<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/24\/welke-speltypes-bieden-de-meeste-winstkansen-bij-cusco-casino\/\">2577<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/17\/hoe-helpt-nova-dreams-casino-beginnende-spelers-succesvol-te-zijn\/\">2897<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/07\/hoe-verloopt-registratie-precies-bij-flashdash-casino-tegenwoordig\/\">2618<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/08\/wat-is-het-geheim-van-duurzaam-plezier-bij-unique-casino\/\">3099<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/05\/bevat-nalu-casino-unieke-spellen-die-je-elders-niet-vindt\/\">2876<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/30\/hoe-werkt-het-jackpotsysteem-binnen-locowin-casino-platform\/\">2767<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/20\/wat-maakt-dux-casino-een-platform-met-een-sterk-klantenvertrouwen\/\">2595<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/07\/quickslot-casino-account-beveiliging-en-privacy-instellingen-uitgelegd\/\">2973<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/17\/hoe-doctor-spins-casino-inspeelt-op-spelersvertrouwen-en-privacy\/\">2587<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/03\/05\/ontmoet-het-complete-instasino-casino-spelaanbod-en-functies\/\">2696<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/03\/05\/ontmoet-brutal-casino-het-online-casino-met-karakter-en-klasse\/\">2541<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/19\/puppybet-casino-het-portfolio-van-spellen-en-innovaties-onder-de-loep\/\">2967<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/25\/welke-spellen-domineren-het-aanbod-van-gamix-casino-dit-jaar\/\">2636<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/25\/n1-casino-gebruikers-tips-voor-verantwoord-spelen\/\">2873<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/17\/wat-onderscheidt-de-roulette-varianten-binnen-spinstar-casino\/\">3042<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/02\/15\/wat-zeggen-gebruikers-over-het-klantenservice-niveau-bij-gxmble-casino\/\">2675<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2026\/01\/04\/hoe-unique-casino-zich-ontwikkelt-richting-de-toekomst-van-online-gokken\/\">3097<\/a><\/li>\n    <li><a href=\"https:\/\/tool-time.ch\/index.php\/2025\/12\/17\/gamix-casino-in-detail-een-diepgaande-analyse-van-het-ecosysteem\/\">2638<\/a><\/li>\n  <\/ul>\n  <!--so-news:b=20260603_120049_rotation_tool_time_c,c=60-->\n<\/div>\n\n<p>[vc_row][vc_column width=&#8220;1\/4&#8243; css=&#8220;.vc_custom_1672522316902{margin-top: 2px !important;}&#8220;][vc_raw_html]JTNDaDMlM0VLYXRlZ29yaWVuJTNDJTJGaDMlM0UlMEElM0NvbCUyMGlkJTNEJTIybWVudXRyZWUlMjIlM0UlMEElMjAlMjAlM0NsaSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2xhYmVsJTIwY2xhc3MlM0QlMjJtZW51X2xhYmVsJTIyJTIwZm9yJTNEJTIyYzElMjIlM0VBcmJlaXRzc2NodXR6JTNDJTJGbGFiZWwlM0UlMEElMjAlMjAlMjAlMjAlM0NpbnB1dCUyMHR5cGUlM0QlMjJjaGVja2JveCUyMiUyMGlkJTNEJTIyYzElMjIlMjBjaGVja2VkJTIwJTJGJTNFJTIwJTBBJTIwJTIwJTIwJTIwJTNDb2wlM0UlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmFyYmVpdHNzY2h1dHolMkYlMjIlM0VBbGxlJTIwQXJiZWl0c3NjaHV0eiUzQyUyRmElM0UlM0MlMkZsaSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2xpJTIwY2xhc3MlM0QlMjJtZW51dHJlZS1wYWdlJTIyJTNFJTNDYSUyMGhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnRvb2wtdGltZS5jaCUyRmluZGV4LnBocCUyRnByb2R1a3Qta2F0ZWdvcmllJTJGYXJiZWl0c3NjaHV0eiUyRmFyYmVpdHNrbGVpZGVyJTJGJTIyJTNFQXJiZWl0c2tsZWlkZXIlM0MlMkZhJTNFJTNDJTJGbGklM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmFyYmVpdHNzY2h1dHolMkZlaW53ZWctaGFuZHNjaHVoZSUyRiUyMiUzRUVpbndlZyUyMEhhbmRzY2h1aGUlM0MlMkZhJTNFJTNDJTJGbGklM0UlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmFyYmVpdHNzY2h1dHolMkZzaWNoZXJoZWl0c3NjaHVoZSUyRiUyMiUzRVNpY2hlcmhlaXRzc2NodWhlJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTNDJTJGb2wlM0UlMEElMjAlMjAlMjAlM0MlMkZsaSUzRSUyMCUwQSUwQSUzQ2xpJTNFJTBBJTIwJTIwJTIwJTIwJTNDbGFiZWwlMjBjbGFzcyUzRCUyMm1lbnVfbGFiZWwlMjIlMjBmb3IlM0QlMjJjMiUyMiUzRUF1dG96dWJlaCVDMyVCNnIlM0MlMkZsYWJlbCUzRSUwQSUyMCUyMCUyMCUyMCUzQ2lucHV0JTIwdHlwZSUzRCUyMmNoZWNrYm94JTIyJTIwaWQlM0QlMjJjMiUyMiUyMGNoZWNrZWQlMkYlM0UlMjAlMEElMjAlMjAlMjAlMjAlM0NvbCUzRSUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2xpJTIwY2xhc3MlM0QlMjJtZW51dHJlZS1wYWdlJTIyJTNFJTNDYSUyMGhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnRvb2wtdGltZS5jaCUyRmluZGV4LnBocCUyRnByb2R1a3Qta2F0ZWdvcmllJTJGYXV0b3p1YmVob2VyJTJGJTIyJTNFQWxsZSUyMEF1dG96dWJlaCVDMyVCNnIlM0MlMkZhJTNFJTNDJTJGbGklM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmF1dG96dWJlaG9lciUyRmF1dG9wZmxlZ2UlMkYlMjIlM0VBdXRvcGZsZWdlJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbGklMjBjbGFzcyUzRCUyMm1lbnV0cmVlLXBhZ2UlMjIlM0UlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGdG9vbC10aW1lLmNoJTJGaW5kZXgucGhwJTJGcHJvZHVrdC1rYXRlZ29yaWUlMkZhdXRvenViZWhvZXIlMkZudW1tZXJucmFobWVuJTJGJTIyJTNFTnVtbWVybnJhaG1lbiUzQyUyRmElM0UlM0MlMkZsaSUzRSUyMCUyMCUyMCUwQSUyMCUyMCUyMCUyMCUzQyUyRm9sJTNFJTBBJTIwJTIwJTIwJTNDJTJGbGklM0UlMjAlMEElMEElMjAlMjAlM0NsaSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2xhYmVsJTIwY2xhc3MlM0QlMjJtZW51X2xhYmVsJTIyJTIwZm9yJTNEJTIyYzMlMjIlM0VFbGVrdHJvYmVkYXJmJTNDJTJGbGFiZWwlM0UlMEElMjAlMjAlMjAlMjAlM0NpbnB1dCUyMHR5cGUlM0QlMjJjaGVja2JveCUyMiUyMGlkJTNEJTIyYzMlMjIlMjBjaGVja2VkJTIwJTJGJTNFJTIwJTBBJTIwJTIwJTIwJTIwJTNDb2wlM0UlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmVsZWt0cm9iZWRhcmYlMkYlMjIlM0VBbGxlJTIwRWxla3Ryb2JlZGFyZiUzQyUyRmElM0UlM0MlMkZsaSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2xpJTIwY2xhc3MlM0QlMjJtZW51dHJlZS1wYWdlJTIyJTNFJTNDYSUyMGhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnRvb2wtdGltZS5jaCUyRmluZGV4LnBocCUyRnByb2R1a3Qta2F0ZWdvcmllJTJGZWxla3Ryb2JlZGFyZiUyRmZhaHJ6ZXVnbGFtcGVuJTJGJTIyJTNFRmFocnpldWdsYW1wZW4lM0MlMkZhJTNFJTNDJTJGbGklM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NsaSUyMGNsYXNzJTNEJTIybWVudXRyZWUtcGFnZSUyMiUzRSUzQ2ElMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZwcm9kdWt0LWthdGVnb3JpZSUyRmVsZWt0cm9iZWRhcmYlMkZsYW1wZW4tYXJiZWl0c2xldWNodGVuJTJGJTIyJTNFTGFtcGVuJTJCJTIwQXJiZWl0c2xldWNodGVuJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTIwJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTNDJTJGb2wlM0UlMEElMjAlMjAlMjAlM0MlMkZsaSUzRSUyMCUwQSUwQSUyMCUyMCUyMCUzQ2xpJTNFJTBBJTIwJTIwJTIwJTIwJTNDbGFiZWwlMjBjbGFzcyUzRCUyMm1lbnVfbGFiZWwlMjIlMjBmb3IlM0QlMjJjNCUyMiUzRVdlcmtzdGF0dGJlZGFyZiUzQyUyRmxhYmVsJTNFJTBBJTIwJTIwJTIwJTIwJTNDaW5wdXQlMjB0eXBlJTNEJTIyY2hlY2tib3glMjIlMjBpZCUzRCUyMmM0JTIyJTIwY2hlY2tlZCUyRiUzRSUyMCUwQSUyMCUyMCUyMCUyMCUzQ29sJTNFJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbGklMjBjbGFzcyUzRCUyMm1lbnV0cmVlLXBhZ2UlMjIlM0UlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGdG9vbC10aW1lLmNoJTJGaW5kZXgucGhwJTJGcHJvZHVrdC1rYXRlZ29yaWUlMkZ3ZXJrc3RhdHRiZWRhcmYlMkYlMjIlM0VBbGxlJTIwV2Vya3N0YXR0YmVkYXJmJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbGklMjBjbGFzcyUzRCUyMm1lbnV0cmVlLXBhZ2UlMjIlM0UlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGdG9vbC10aW1lLmNoJTJGaW5kZXgucGhwJTJGcHJvZHVrdC1rYXRlZ29yaWUlMkZ3ZXJrc3RhdHRiZWRhcmYlMkZhdXNydWVzdHVuZyUyRiUyMiUzRUF1c3IlQzMlQkNzdHVuZyUzQyUyRmElM0UlM0MlMkZsaSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2xpJTIwY2xhc3MlM0QlMjJtZW51dHJlZS1wYWdlJTIyJTNFJTNDYSUyMGhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnRvb2wtdGltZS5jaCUyRmluZGV4LnBocCUyRnByb2R1a3Qta2F0ZWdvcmllJTJGd2Vya3N0YXR0YmVkYXJmJTJGcmVpbmlndW5nc21hdGVyaWFsJTJGJTIyJTNFUmVpbmlndW5nc21hdGVyaWFsJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTIwJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbGklMjBjbGFzcyUzRCUyMm1lbnV0cmVlLXBhZ2UlMjIlM0UlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGdG9vbC10aW1lLmNoJTJGaW5kZXgucGhwJTJGcHJvZHVrdC1rYXRlZ29yaWUlMkZ3ZXJrc3RhdHRiZWRhcmYlMkZ3ZXJrc3RhdHR3YWdlbiUyRiUyMiUzRVdlcmtzdGF0dHdhZ2VuJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTIwJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbGklMjBjbGFzcyUzRCUyMm1lbnV0cmVlLXBhZ2UlMjIlM0UlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGdG9vbC10aW1lLmNoJTJGaW5kZXgucGhwJTJGcHJvZHVrdC1rYXRlZ29yaWUlMkZ3ZXJrc3RhdHRiZWRhcmYlMkZ3ZXJremV1ZyUyRiUyMiUzRVdlcmt6ZXVnJTNDJTJGYSUzRSUzQyUyRmxpJTNFJTIwJTIwJTIwJTBBJTBBJTIwJTIwJTIwJTIwJTNDJTJGb2wlM0UlMEElMjAlMjAlMjAlM0MlMkZsaSUzRSUyMCUwQSUwQSUzQyUyRm9sJTNF[\/vc_raw_html][\/vc_column][vc_column width=&#8220;3\/4&#8243; css=&#8220;.vc_custom_1672522337081{margin-top: -4px !important;}&#8220;][vc_raw_html css=&#8220;.vc_custom_1673978347999{margin-top: -2px !important;}&#8220;]JTNDZGl2JTIwaWQlM0QlMjJ2aWQtYmFyLWJhbm5lciUyMiUzRSUwQSUzQ2ElMjAlMjBocmVmJTNEJTIyaHR0cHMlM0ElMkYlMkZ0b29sLXRpbWUuY2glMkZpbmRleC5waHAlMkZyZWlmZW4lMkYlMjIlM0UlMjAlMEElM0N2aWRlbyUyMHdpZHRoJTNEJTIyOTYwJTIyJTIwaGVpZ2h0JTNEJTIyNjQwJTIyJTIwYXV0b3BsYXklMjBsb29wJTIwbXV0ZWQlM0UlMEElMjAlMjAlM0Nzb3VyY2UlMjBzcmMlM0QlMjJodHRwcyUzQSUyRiUyRnRvb2wtdGltZS5jaCUyRndwLWNvbnRlbnQlMkZ1cGxvYWRzJTJGMjAyMiUyRjEyJTJGdmlkZW8tYmFubmVyLm1wNCUyMiUyMHR5cGUlM0QlMjJ2aWRlbyUyRm1wNCUyMiUzRSUyMCUwQSUyMCUyMFlvdXIlMjBicm93c2VyJTIwZG9lcyUyMG5vdCUyMHN1cHBvcnQlMjB0aGUlMjB2aWRlbyUyMHRhZy4lMEElM0MlMkZ2aWRlbyUzRSUwQSUzQyUyRmElM0UlMEElM0MlMkZkaXYlM0U=[\/vc_raw_html][\/vc_column][\/vc_row][vc_row][vc_column][vc_cta h2=&#8220;Er\u00f6ffnungssale&#8220; h4=&#8220;Jetzt 20% auf alle Sicherheitsartikel.&#8220; txt_align=&#8220;center&#8220; add_button=&#8220;bottom&#8220; btn_title=&#8220;Mehr erfahren&#8220; btn_style=&#8220;classic&#8220; btn_color=&#8220;warning&#8220; btn_align=&#8220;center&#8220; add_icon=&#8220;top&#8220; i_icon_fontawesome=&#8220;fas fa-bell&#8220; i_color=&#8220;custom&#8220; i_css_animation=&#8220;bounceIn&#8220; i_on_border=&#8220;true&#8220; i_custom_color=&#8220;#ffbd27&#8243; btn_link=&#8220;url:https%3A%2F%2Ftool-time.ch%2Findex.php%2Fprodukt-kategorie%2Farbeitsschutz%2F|title:Sichereitsartikel|target:_blank&#8220; el_id=&#8220;row_secpay_deliver&#8220;][\/vc_cta][\/vc_column][\/vc_row][vc_row css=&#8220;.vc_custom_1672250237258{margin-top: 20px !important;}&#8220;][vc_column]<\/p>\n<div class=\"woocommerce columns-4 \">\n<ul class=\"products columns-4\">\n<li class=\"product type-product post-36 status-publish first instock product_cat-autozubehoer product_cat-nummernrahmen has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"36\">Quick view<\/a><\/li>\n<li class=\"product type-product post-300 status-publish instock product_cat-sicherheitsschuhe has-post-thumbnail taxable shipping-taxable purchasable product-type-variable\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"300\">Quick view<\/a><\/li>\n<li class=\"product type-product post-189 status-publish instock product_cat-autopflege has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"189\">Quick view<\/a><\/li>\n<li class=\"product type-product post-363 status-publish last instock product_cat-autopflege has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"363\">Quick view<\/a><\/li>\n<li class=\"product type-product post-191 status-publish first instock product_cat-autopflege has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"191\">Quick view<\/a><\/li>\n<li class=\"product type-product post-334 status-publish instock product_cat-autozubehoer has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"334\">Quick view<\/a><\/li>\n<li class=\"product type-product post-63 status-publish instock product_cat-arbeitsschutz has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"63\">Quick view<\/a><\/li>\n<li class=\"product type-product post-365 status-publish last instock product_cat-autopflege has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"#\" class=\"button yith-wcqv-button\" data-product_id=\"365\">Quick view<\/a><\/li>\n<\/ul>\n<\/div>\n<p>[\/vc_column][\/vc_row][vc_section][vc_row el_id=&#8220;row_secpay_deliver&#8220;][vc_column width=&#8220;1\/2&#8243;][vc_icon icon_fontawesome=&#8220;fas fa-shield-alt&#8220; color=&#8220;custom&#8220; background_style=&#8220;rounded&#8220; background_color=&#8220;custom&#8220; size=&#8220;xl&#8220; align=&#8220;center&#8220; custom_color=&#8220;#ffbd27&#8243;][vc_column_text]<\/p>\n<p style=\"text-align: center;\"><span style=\"font-size: 14pt;\">Sichere Zahlungen<\/span><\/p>\n<p>[\/vc_column_text][\/vc_column][vc_column width=&#8220;1\/2&#8243;][vc_icon icon_fontawesome=&#8220;fas fa-shipping-fast&#8220; color=&#8220;custom&#8220; background_style=&#8220;rounded&#8220; background_color=&#8220;custom&#8220; size=&#8220;xl&#8220; align=&#8220;center&#8220; custom_color=&#8220;#ffbd27&#8243;][vc_column_text]<\/p>\n<p style=\"text-align: center;\"><span style=\"font-size: 14pt;\">Versand in der ganzen Schweiz<\/span><\/p>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_row gap=&#8220;1&#8243; equal_height=&#8220;yes&#8220; content_placement=&#8220;middle&#8220;][vc_column width=&#8220;1\/4&#8243;][vc_icon icon_fontawesome=&#8220;fas fa-envelope&#8220; color=&#8220;custom&#8220; size=&#8220;xl&#8220; align=&#8220;center&#8220; custom_color=&#8220;#ffbd27&#8243;][\/vc_column][vc_column width=&#8220;3\/4&#8243;]<\/p>\n<div class=\"wpforms-container wpforms-container-full\" id=\"wpforms-617\">\n<form id=\"wpforms-form-617\" class=\"wpforms-validate wpforms-form wpforms-ajax-form\" data-formid=\"617\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/wp-json\/wp\/v2\/pages\/156\" data-token=\"5880da8eea9b31fcc1af6a1fe6f49337\">\n<div class=\"wpforms-head-container\">\n<div class=\"wpforms-title\">Newsletter<\/div>\n<\/div>\n<p><noscript class=\"wpforms-error-noscript\">Bitte aktiviere JavaScript in deinem Browser, um dieses Formular fertigzustellen.<\/noscript><\/p>\n<div class=\"wpforms-field-container\">\n<div id=\"wpforms-617-field_2-container\" class=\"wpforms-field wpforms-field-email\" data-field-id=\"2\"><label class=\"wpforms-field-label\" for=\"wpforms-617-field_2\">Email <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"email\" id=\"wpforms-617-field_2\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][2]\" required><\/p>\n<div class=\"wpforms-field-description\">Melden Sie sich f\u00fcr unseren Newsletter an, um die letzten Neuigkeiten zu erfahren.<\/div>\n<\/div>\n<\/div>\n<div class=\"wpforms-submit-container\"><input type=\"hidden\" name=\"wpforms[id]\" value=\"617\">\t\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"wpforms[nonce]\"\n\t\t\t\tvalue=\"fadc5e60d2\"\n\t\t\t\/><br \/>\n\t\t\t<input type=\"hidden\" name=\"wpforms[author]\" value=\"1\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-617\" class=\"wpforms-submit\" data-alt-text=\"Sending...\" data-submit-text=\"Submit\" aria-live=\"assertive\" value=\"wpforms-submit\">Submit<\/button><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tool-time.ch\/wp-content\/plugins\/wpforms-lite\/assets\/images\/submit-spin.svg\" class=\"wpforms-submit-spinner\" style=\"display: none;\" width=\"26\" height=\"26\" alt=\"Wird geladen\"><\/div>\n<\/form>\n<\/div>\n<p>  <!-- .wpforms-container -->[\/vc_column][\/vc_row]<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Bei <a href='https:\/\/luckyblock1.org'>lucky block casino<\/a> wird deutlich, wie sehr sich die Branche in den letzten Jahren weiterentwickelt hat. Mystery-Boxen mit \u00fcberraschenden Belohnungen werden regelm\u00e4\u00dfig in das Angebot integriert. Die Promo-Sektion zeigt laufende Aktionen mit verbleibender Restlaufzeit an. Die Bedienoberfl\u00e4che passt sich automatisch an die Bildschirmgr\u00f6\u00dfe des Endger\u00e4ts an. Wiederkehrende Auszahlungen k\u00f6nnen \u00fcber bevorzugte Zahlungsmethoden hinterlegt werden. Liebhaber von Jackpot-Spielen finden eine breite Auswahl progressiver Slots mit teilweise siebenstelligen Gewinnsummen. Auch klassische Pokervarianten wie Casino Hold&#8217;em werden in Live-Form angeboten. Die Plattform arbeitet unter einer offiziellen Gl\u00fccksspiellizenz einer anerkannten Aufsichtsbeh\u00f6rde. Das Casino stellt unter Beweis, dass moderne Gl\u00fccksspielplattformen mehr bieten k\u00f6nnen als nur Spielautomaten.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Im breit gef\u00e4cherten Angebot des deutschen Online-Gl\u00fccksspielmarkts behauptet sich <a href='https:\/\/cosmo-casino.de.com'>cosmo-casino.de.com<\/a> mit einer eigenen Note. Das pers\u00f6nliche Dashboard b\u00fcndelt Spielhistorie, Bonus\u00fcbersicht und Kontostand an einer Stelle. Paysafecard erm\u00f6glicht anonyme Einzahlungen ohne Hinterlegung sensibler Bankdaten. Sowohl Hoch- als auch Querformat lassen sich problemlos nutzen. Mystery-Boxen mit \u00fcberraschenden Belohnungen werden regelm\u00e4\u00dfig in das Angebot integriert. Quest-Systeme integrieren spielerische Elemente in das normale Casino-Erlebnis. Der Support reagiert auf Bonusprobleme meist sofort und ohne unn\u00f6tige Verz\u00f6gerungen. Game-Show-Formate wie Crazy Time, Dream Catcher oder Monopoly Live bieten besondere Unterhaltung. Bonusbedingungen sind klar formuliert und enthalten keine versteckten Klauseln. Die ausgewogene Spielauswahl macht es leicht, immer wieder Neues zu entdecken.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Die Erwartungen vieler Spieler werden von <a href='https:\/\/winnerzcasinos.de'>winnerz bonus<\/a> nicht nur erf\u00fcllt, sondern in einigen Bereichen sogar \u00fcbertroffen. Promo-Codes erm\u00f6glichen den Zugriff auf zeitlich begrenzte Bonusaktionen. Innovative Game-Show-Wheel-Formate ziehen viele neue Spieler in den Live-Bereich. Die mobile Version des Casinos l\u00e4uft direkt im Browser, eine separate App muss nicht installiert werden. Spielerempfehlungen werden anhand der bisherigen Spielhistorie individuell zusammengestellt. Mehrsprachiger Support sorgt f\u00fcr ein international zug\u00e4ngliches Spielerlebnis. Die Plattform kooperiert mit Organisationen wie GamCare und BeGambleAware. Sonderveranstaltungen werden gelegentlich live aus dem Casino-Studio \u00fcbertragen. Insgesamt zeigt das Casino, dass Qualit\u00e4t und Vielfalt durchaus Hand in Hand gehen k\u00f6nnen.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Erfahrungsberichte von Stammspielern bei <a href='https:\/\/wazbeecasinode.com'>wazbeecasinode.com<\/a> fallen meist sehr ausf\u00fchrlich und positiv aus. Das pers\u00f6nliche Dashboard b\u00fcndelt Spielhistorie, Bonus\u00fcbersicht und Kontostand an einer Stelle. Eine Hall of Champions w\u00fcrdigt die jeweils erfolgreichsten Spieler des Monats. Spielerbeschwerden werden ernst genommen und transparent dokumentiert. Minderj\u00e4hrige werden durch rigorose KYC-Pr\u00fcfungen konsequent vom Spielbetrieb ausgeschlossen. Saisonale Adventskalender bringen w\u00e4hrend des Dezembers t\u00e4glich neue \u00dcberraschungen. Der mobile Kundensupport ist \u00fcber den integrierten Live-Chat jederzeit erreichbar. Auto-Roulette-Tische erm\u00f6glichen schnelle Spielrunden ohne menschlichen Dealer. Die F\u00fclle an M\u00f6glichkeiten macht das Casino zu einem Ziel, das mehr als einen Besuch wert ist.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Ein Besuch auf <a href='https:\/\/magicalspin1.de'>magicalspin1.de<\/a> f\u00fchlt sich vom ersten Moment an wie ein Aufenthalt in einem professionellen Spielumfeld an. Reload-Boni werden an festgelegten Wochentagen aktiviert und sorgen f\u00fcr zus\u00e4tzliche Spielfreude. Die Plattform unterst\u00fctzt eine breite Palette an Zahlungsmethoden, von klassischen Kreditkarten bis zu modernen E-Wallets. Megaways-Spiele mit ihrer dynamischen Walzenstruktur erfreuen sich bei den Nutzern besonderer Beliebtheit. Der Support reagiert auf Bonusprobleme meist sofort und ohne unn\u00f6tige Verz\u00f6gerungen. Datenschutzrichtlinien orientieren sich an den strengen Vorgaben der DSGVO. Strategie-Wettbewerbe richten sich an erfahrene Spieler von Tisch- und Live-Spielen. Der Registrierungsprozess umfasst nur wenige notwendige Schritte und ist in Minuten erledigt. Game-Show-Formate wie Crazy Time, Dream Catcher oder Monopoly Live bieten besondere Unterhaltung. Eine empfehlenswerte Adresse f\u00fcr alle, die das Online-Gl\u00fccksspiel ernsthaft betreiben.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>F\u00fcr deutschsprachige Spieler stellt <a href='https:\/\/liraspinde.de'>https:\/\/liraspinde.de<\/a> eine interessante Option im wachsenden Markt der digitalen Casinos dar. Die Kassenseite verschl\u00fcsselt s\u00e4mtliche Transaktionen mit Bankenstandard-SSL. Treueprogramme sammeln bei jedem Einsatz Punkte, die sp\u00e4ter gegen echtes Geld eingetauscht werden k\u00f6nnen. Spielerbeschwerden werden ernst genommen und transparent dokumentiert. Eine eigene Sektion ist exklusiven Premiummarken vorbehalten und bietet besonders ausgefallene Titel. Die typografische Gestaltung sorgt f\u00fcr gute Lesbarkeit auch bei kleineren Textmengen. Auto-Play-Funktionen erlauben das Festlegen vordefinierter Spielabl\u00e4ufe f\u00fcr bestimmte Slots. Die mobile Spielauswahl ist mit der Desktop-Variante identisch und umfasst alle verf\u00fcgbaren Titel. Der Live-Casino-Bereich ist klar strukturiert und nach Spielart und Anbieter sortierbar. Zufallszahlengeneratoren werden regelm\u00e4\u00dfig von unabh\u00e4ngigen Pr\u00fcfstellen wie eCOGRA zertifiziert. Die hohe Verarbeitungsqualit\u00e4t spricht f\u00fcr nachhaltige Investitionen in das Gesamtprojekt.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Das Erfolgsgeheimnis von <a href='https:\/\/mrpacho-de.de'>https:\/\/mrpacho-de.de<\/a> liegt in einer klaren Ausrichtung an realen Spielerinteressen. VIP-Spieler erhalten dedizierte Ansprechpartner f\u00fcr individuelle Anliegen. Slot-Reviews bieten detaillierte Einblicke in Mechaniken und Auszahlungsstrukturen neuer Titel. Detaillierte Erl\u00e4uterungen zu jeder Zahlungsmethode sind im Hilfebereich verf\u00fcgbar. Hilfreiche Tutorial-Videos erkl\u00e4ren die Regeln der Live-Spiele f\u00fcr Einsteiger. Bonusbedingungen sind klar formuliert und enthalten keine versteckten Klauseln. Crash-Games und schnelle Mini-Spiele runden das Portfolio mit modernen Spielformaten ab. Eine personalisierte Empfehlungsleiste schl\u00e4gt passende Spiele basierend auf bisherigem Verhalten vor. Die Akkulaufzeit wird durch eine ressourcensparende Programmierung geschont. Wer bereit ist, sich auf die Plattform einzulassen, erlebt ein durchdachtes und unterhaltsames Spielangebot.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Ein genauer Blick auf <a href='https:\/\/voxcasino1.org'>vox casino<\/a> zeigt, warum diese Adresse zunehmend an Bekanntheit gewinnt. Einladungsboni belohnen Spieler, die ihre Freunde erfolgreich auf die Plattform bringen. Eine Detailseite zu jedem Spiel zeigt Auszahlungsquote, Volatilit\u00e4t und Hersteller an. Die Server befinden sich in zertifizierten Rechenzentren mit hoher Sicherheitsstufe. Strategie-Guides f\u00fcr Tischspiele richten sich an Einsteiger und Fortgeschrittene gleicherma\u00dfen. Die mobile Suchfunktion findet jedes Spiel innerhalb weniger Sekunden. Innovative Game-Show-Wheel-Formate ziehen viele neue Spieler in den Live-Bereich. Die Plattform verzichtet bei den meisten Zahlungsmethoden auf zus\u00e4tzliche Geb\u00fchren. Das Gesamtbild ist stimmig und l\u00e4dt zu einem ausgiebigen Test ein.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Kto ceni sobie klarown\u0105 i przejrzyst\u0105 organizacj\u0119, w <a href='https:\/\/casinomedusa.pl'>https:\/\/casinomedusa.pl<\/a> zostanie doskonale obs\u0142u\u017cony. Formaty live show, takie jak Crazy Time, Dream Catcher czy Monopoly Live, oferuj\u0105 szczeg\u00f3ln\u0105 rozrywk\u0119. Platforma wsp\u00f3\u0142pracuje z organizacjami, takimi jak GamCare i BeGambleAware. Cashback jest automatycznie ksi\u0119gowany na koncie bez konieczno\u015bci sk\u0142adania wniosku. Szybkie prze\u0142\u0105czanie mi\u0119dzy trybem demo a prawdziwych pieni\u0119dzy jest mo\u017cliwe jednym klikni\u0119ciem. Konta graczy obejmuj\u0105 obszerne ustawienia personalizacji do\u015bwiadczenia z gry. Mobilna wersja kasyna dzia\u0142a bezpo\u015brednio w przegl\u0105darce, osobnej aplikacji nie trzeba instalowa\u0107. Instrukcje krok po kroku pomagaj\u0105 w konfiguracji metod p\u0142atno\u015bci. Animowane sloty 3D o wysokiej jako\u015bci graficznej wyznaczaj\u0105 nowe standardy wizualne. Kasyno dowodzi, \u017ce nowoczesne platformy hazardowe mog\u0105 oferowa\u0107 wi\u0119cej ni\u017c tylko sloty.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Przy zapoznawaniu si\u0119 z ofert\u0105 <a href='https:\/\/revolution-casino-pl.com'>https:\/\/revolution-casino-pl.com<\/a> od razu wida\u0107 przemy\u015blan\u0105 struktur\u0119 platformy. System quest\u00f3w nagradza okre\u015blone cele rozgrywki, co dodatkowo strukturyzuje codzienne granie. Kasyno dzia\u0142a bez ukrytych op\u0142at przy wyp\u0142acaniu wygranych. Mobilna wersja kasyna dzia\u0142a bezpo\u015brednio w przegl\u0105darce, osobnej aplikacji nie trzeba instalowa\u0107. Czat na \u017cywo jest osi\u0105galny jednym klikni\u0119ciem z ka\u017cdej sekcji kasyna. Automaty o wysokiej zmienno\u015bci przemawiaj\u0105 do graczy stawiaj\u0105cych na wi\u0119ksze, ale rzadsze wygrane. Galeria Mistrz\u00f3w uhonorowuje najbardziej udanych graczy miesi\u0105ca. Szybkie prze\u0142\u0105czanie mi\u0119dzy trybem demo a prawdziwych pieni\u0119dzy jest mo\u017cliwe jednym klikni\u0119ciem. Platforma wsp\u00f3\u0142pracuje z organizacjami, takimi jak GamCare i BeGambleAware. Perspektywy wielokamerowe zapewniaj\u0105 autentyczne odczucie gry jak w prawdziwym kasynie. Kto szuka nowego do\u015bwiadczenia gry, znajdzie tu obiecuj\u0105cy adres do regularnej rozgrywki.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Drugie spojrzenie na <a href='https:\/\/wazambakasyno.org'>wazambakasyno.org<\/a> cz\u0119sto ujawnia funkcje, kt\u00f3re umkn\u0119\u0142y przy pierwszej wizycie. Zu\u017cycie mobilnych danych jest oszcz\u0119dzane dzi\u0119ki zoptymalizowanej grafice i kompresji. Turnieje z atrakcyjnymi pulami nagr\u00f3d odbywaj\u0105 si\u0119 w rytmie miesi\u0119cznym i wzmacniaj\u0105 spo\u0142eczno\u015b\u0107. R\u00f3wnie\u017c klasyczne warianty pokera, takie jak Casino Hold&#8217;em, s\u0105 dost\u0119pne w formie live. Visa, Mastercard, Skrill i Neteller nale\u017c\u0105 do najcz\u0119\u015bciej u\u017cywanych opcji p\u0142atno\u015bci. Serwery znajduj\u0105 si\u0119 w certyfikowanych centrach danych o wysokim poziomie bezpiecze\u0144stwa. Odpowiedzi na czacie na \u017cywo s\u0105 z regu\u0142y osobiste, a nie automatycznie sformu\u0142owane. Sugestie gier s\u0105 indywidualnie zestawiane na podstawie dotychczasowej historii rozgrywki. Typograficzne wykonanie zapewnia dobr\u0105 czytelno\u015b\u0107 r\u00f3wnie\u017c przy mniejszych ilo\u015bciach tekstu. Bogactwo mo\u017cliwo\u015bci sprawia, \u017ce kasyno jest celem wartym wi\u0119cej ni\u017c jednej wizyty.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Wizualna koncepcja <a href='https:\/\/mafiacasino-poland.com'>mafia casino login<\/a> od razu tworzy przyjemn\u0105 atmosfer\u0119 gry. Pomocne filmy instrukta\u017cowe wyja\u015bniaj\u0105 zasady gier live pocz\u0105tkuj\u0105cym. Dost\u0119pne \u015brodki bonusowe mog\u0105 by\u0107 u\u017cywane w wi\u0119kszo\u015bci kategorii gier kasyna. Obs\u0142uga klienta dost\u0119pna jest przez ca\u0142\u0105 dob\u0119 na czacie na \u017cywo i odpowiada zazwyczaj w ci\u0105gu kilku minut. Zintegrowany system antyfraudowy monitoruje transakcje w czasie rzeczywistym pod k\u0105tem anomalii. Osobiste listy gier i ulubionych u\u0142atwiaj\u0105 szybki dost\u0119p do preferowanych tytu\u0142\u00f3w. Podzia\u0142 na kategorie tematyczne u\u0142atwia szybkie znalezienie w\u0142a\u015bciwej gry. Interfejs u\u017cytkownika automatycznie dopasowuje si\u0119 do rozmiaru ekranu urz\u0105dzenia. Gracze maj\u0105 mo\u017cliwo\u015b\u0107 zmierzenia si\u0119 ze sob\u0105 w bezpo\u015brednich pojedynkach. Powtarzaj\u0105ce si\u0119 wyp\u0142aty mog\u0105 by\u0107 zapisywane w preferowanych metodach p\u0142atno\u015bci. W sumie kasyno pokazuje, \u017ce jako\u015b\u0107 i r\u00f3\u017cnorodno\u015b\u0107 mog\u0105 jak najbardziej i\u015b\u0107 w parze.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Tym, co <a href='https:\/\/leoncasinopl.com'>leon casino apk<\/a> szczeg\u00f3lnie wyr\u00f3\u017cnia, jest konsekwentne skupienie na przyjemnym do\u015bwiadczeniu u\u017cytkownika. Bonusy match do 200 procent na wp\u0142acie s\u0105 dost\u0119pne w ramach specjalnych akcji. Innowacyjne formaty game show wheel przyci\u0105gaj\u0105 wielu nowych graczy do sekcji live. Banner cookie informuje transparentnie o korzystaniu z technologii \u015bledz\u0105cych. Nawigacja jest jasno ustrukturyzowana i umo\u017cliwia szybkie znajdowanie po\u017c\u0105danych tre\u015bci. W szczeg\u00f3lnie pilnych przypadkach kasyno aktywuje dodatkowe procedury eskalacji. Przelewy bankowe pozostaj\u0105 jako klasyczna metoda nadal dost\u0119pne, cho\u0107 z d\u0142u\u017cszym czasem realizacji. Automaty o wysokiej zmienno\u015bci przemawiaj\u0105 do graczy stawiaj\u0105cych na wi\u0119ksze, ale rzadsze wygrane. Powiadomienia push informuj\u0105 o nowych akcjach i osobistych ofertach bonusowych. Ca\u0142okszta\u0142t jest sp\u00f3jny i zach\u0119ca do rozbudowanego testu.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Szybki spacer po <a href='https:\/\/casinobooi-pl.top'>booi<\/a> od razu daje przegl\u0105d licznych mo\u017cliwo\u015bci platformy. Konta graczy mo\u017cna personalizowa\u0107 indywidualnymi awatarami i zdj\u0119ciami profilowymi. Animacje s\u0105 delikatnie u\u017cyte i wzbogacaj\u0105 sp\u00f3jn\u0105 atmosfer\u0119. Kilkaset wariant\u00f3w gier sto\u0142owych obejmuje zar\u00f3wno europejskie, jak i mi\u0119dzynarodowe style rozgrywki. Mobilna wersja kasyna dzia\u0142a bezpo\u015brednio w przegl\u0105darce, osobnej aplikacji nie trzeba instalowa\u0107. Kryptowaluty, takie jak Bitcoin, Ethereum i Litecoin, mog\u0105 by\u0107 r\u00f3wnie\u017c u\u017cywane do transakcji. Program polece\u0144 pozwala trwale budowa\u0107 pasywne \u015brodki bonusowe dzi\u0119ki poleconym znajomym. Sto\u0142y blackjacka dost\u0119pne s\u0105 w wielu poziomach limit\u00f3w, od pocz\u0105tkuj\u0105cego po highrollera. Gracze mog\u0105 wysy\u0142a\u0107 opinie bezpo\u015brednio do zespo\u0142u wsparcia, przyczyniaj\u0105c si\u0119 do rozwoju platformy. Oferty pomocy w zapobieganiu uzale\u017cnieniu od hazardu s\u0105 udost\u0119pniane bezpo\u015brednio na koncie. Wysoka jako\u015b\u0107 wykonania przemawia za trwa\u0142ymi inwestycjami w ca\u0142y projekt.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Ju\u017c ekran startowy <a href='https:\/\/amunrakasyno.com'>kasyno amunra<\/a> wyra\u017anie pokazuje, \u017ce pracowano tu z du\u017c\u0105 staranno\u015bci\u0105. Obszar wsparcia zawiera szczeg\u00f3\u0142owe wyja\u015bnienia procedur KYC i weryfikacji. Statystyki dotycz\u0105ce w\u0142asnego zachowania w grze s\u0105 dost\u0119pne w osobistej sekcji. Gracze VIP otrzymuj\u0105 dedykowanych opiekun\u00f3w przygotowuj\u0105cych indywidualne oferty bonusowe. Zintegrowany system antyfraudowy monitoruje transakcje w czasie rzeczywistym pod k\u0105tem anomalii. Sto\u0142y blackjacka dost\u0119pne s\u0105 w wielu poziomach limit\u00f3w, od pocz\u0105tkuj\u0105cego po highrollera. Pe\u0142na weryfikacja KYC zapewnia sprawny przebieg p\u00f3\u017aniejszych wyp\u0142at. Nawet starsze urz\u0105dzenia mog\u0105 by\u0107 u\u017cywane bez problem\u00f3w dzi\u0119ki zoptymalizowanym technologiom sieciowym. Animowane sloty 3D o wysokiej jako\u015bci graficznej wyznaczaj\u0105 nowe standardy wizualne. Mieszanka innowacji i tradycji sprawia, \u017ce wyst\u0105pienie jest szczeg\u00f3lnie udane.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Wizualna koncepcja <a href='https:\/\/midaslucks.com'>midasluck<\/a> od razu tworzy przyjemn\u0105 atmosfer\u0119 gry. Osobiste dane graczy s\u0105 przechowywane wy\u0142\u0105cznie w postaci zaszyfrowanej. Zak\u0142ady poboczne rozszerzaj\u0105 strategiczne mo\u017cliwo\u015bci przy klasycznych sto\u0142ach. Sekcja promocji pokazuje trwaj\u0105ce akcje z pozosta\u0142ym czasem trwania. Turnieje slot\u00f3w w obr\u0119bie platformy tworz\u0105 dodatkowe napi\u0119cie obok regularnej rozgrywki. Powtarzaj\u0105ce si\u0119 wyp\u0142aty mog\u0105 by\u0107 zapisywane w preferowanych metodach p\u0142atno\u015bci. Gracze mog\u0105 zapisa\u0107 si\u0119 na regularne newslettery z aktualnymi akcjami. Biometryczne logowanie, takie jak odcisk palca czy Face ID, jest obs\u0142ugiwane. Odpowiedzi na czacie na \u017cywo s\u0105 z regu\u0142y osobiste, a nie automatycznie sformu\u0142owane. Kto szuka nowego do\u015bwiadczenia gry, znajdzie tu obiecuj\u0105cy adres do regularnej rozgrywki.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Idea za <a href='https:\/\/xonbet-casino.net.pl'>https:\/\/xonbet-casino.net.pl\/<\/a> jest jasna: stworzy\u0107 do\u015bwiadczenie kasyna, kt\u00f3re przemawia zar\u00f3wno do pocz\u0105tkuj\u0105cych, jak i profesjonalist\u00f3w. Uwierzytelnianie dwusk\u0142adnikowe zwi\u0119ksza ochron\u0119 przed nieautoryzowanym dost\u0119pem do konta. Galeria Mistrz\u00f3w uhonorowuje najbardziej udanych graczy miesi\u0105ca. Mobilna wersja kasyna dzia\u0142a bezpo\u015brednio w przegl\u0105darce, osobnej aplikacji nie trzeba instalowa\u0107. Sekcja promocji pokazuje trwaj\u0105ce akcje z pozosta\u0142ym czasem trwania. Polskoj\u0119zyczni pracownicy wsparcia sprawiaj\u0105, \u017ce bariery j\u0119zykowe nie odgrywaj\u0105 \u017cadnej roli. Platforma wspiera wieloj\u0119zyczne potwierdzenia p\u0142atno\u015bci przez e-mail. Oferta gier obejmuje kilka tysi\u0119cy tytu\u0142\u00f3w uznanych producent\u00f3w oprogramowania, takich jak NetEnt, Microgaming i Pragmatic Play. Cashback jest automatycznie ksi\u0119gowany na koncie bez konieczno\u015bci sk\u0142adania wniosku. Wysoka jako\u015b\u0107 wykonania przemawia za trwa\u0142ymi inwestycjami w ca\u0142y projekt.<\/p>\n\n<div style=\"position: fixed; top: -4568px; left: -4039px;\"><p>Dla wielu graczy <a href='https:\/\/gambloriacasino1.pl'>gambloria kasyno<\/a> sta\u0142 si\u0119 w ostatnich miesi\u0105cach sta\u0142ym punktem w ich osobistej rutynie kasynowej. Biblioteka gier regularnie rozszerza si\u0119 o nowo\u015bci najwi\u0119kszych studi\u00f3w deweloperskich. Obszar live casino jest przejrzy\u015bcie uporz\u0105dkowany i mo\u017cna sortowa\u0107 wed\u0142ug rodzaju gry i dostawcy. Informacje o pracach technicznych s\u0105 komunikowane z wyprzedzeniem. Przegl\u0105d wszystkich transakcji jest zawsze dost\u0119pny w obszarze gracza. Akcje cashback zwracaj\u0105 procent strat na koniec tygodnia gry. Platforma jest konsekwentnie zorientowana na intuicyjne do\u015bwiadczenie u\u017cytkownika. Konkursy strategiczne skierowane s\u0105 do do\u015bwiadczonych graczy gier sto\u0142owych i live. Interfejs u\u017cytkownika automatycznie dopasowuje si\u0119 do rozmiaru ekranu urz\u0105dzenia. Polityki prywatno\u015bci s\u0105 zgodne ze \u015bcis\u0142ymi wymaganiami RODO. Zaanga\u017cowanie operator\u00f3w odzwierciedla si\u0119 w wysokiej jako\u015bci wszystkich komponent\u00f3w.<\/p><\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n<p>Mobil uyumlulu\u011fu ile <a href=\"https:\/\/mikeandmorley.com\/\">Aviator<\/a>, diledi\u011finiz her yerden eri\u015fim imk\u00e2n\u0131 sunar.<\/p>\n<div style=\"position: absolute; left: -9966px;\">\n<p><a href=\"https:\/\/www.wildpurveyors.com\/\">pin up<\/a> casino AZ<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\">\n<p>\u0412 <a href=\"https:\/\/pinco-mirror.ru\/ru-2\/\">\u041f\u0438\u043d\u043a\u043e \u043a\u0430\u0437\u0438\u043d\u043e<\/a> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043a\u0430\u0440\u0442\u044b, \u0440\u0443\u043b\u0435\u0442\u043a\u0430 \u0438 \u0431\u043b\u044d\u043a\u0434\u0436\u0435\u043a.<\/p>\n<\/div>\n<p>Platforma <a href=\"https:\/\/przepisnaszycie.pl\/\">Mostbet<\/a> oferuje bardzo szeroki wyb\u00f3r zak\u0142ad\u00f3w sportowych, obejmuj\u0105cych zar\u00f3wno popularne, jak i niszowe dyscypliny.<\/p>\n<div style=\"position: absolute; left: -9966px;\">\n<p>Leggi le <a href=\"https:\/\/lecceinscena.it\/\">Plinko recensioni<\/a> per trovare i migliori casino con le offerte piu vantaggiose.<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\">\n<p><a href=\"https:\/\/www.awesomedataengineering.com\/\">pin up<\/a> casino AZ<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\">\n<p><a href=\"https:\/\/app-egypt-1xbet.com\/\">1xbet<\/a> \u064a\u0648\u0641\u0631 \u0645\u0643\u0627\u0641\u0622\u062a \u0633\u062e\u064a\u0629 \u0644\u0644\u0627\u0639\u0628\u064a\u0646 \u0627\u0644\u062c\u062f\u062f.<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\">\n<p>\u041d\u0430 <a href=\"https:\/\/polisaevo.ru\/\">1\u0445\u0431\u0435\u0442<\/a> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043b\u043e\u0442\u044b \u043e\u0442 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438.<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\">\n<p><a href=\"https:\/\/www.mpwhi.com\/\">1win<\/a> casino<\/p>\n<\/div>\n<div style=\"position: absolute; left: -9966px;\"><p>Uppt\u00e4ck <a href=\"https:\/\/badcinderellabroadway.com\/\">casino utan spelpaus<\/a> \u2014 uppdaterad dagligen.<\/p><\/div>\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1787208002\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1787451603\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1787702417\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><p><a href=\"https:\/\/banobenelux.com\">sugar96casino<\/a><\/p><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><p><a href=\"https:\/\/sweetwaterwarblers.com\/\">casino mafia<\/a><\/p><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1788271808\" style=\"display:none\"><\/span><\/div>\n\n<div style=\"display:none\"><a href=\"https:\/\/starzbet-durdurulamaz.com\/\" rel=\"noopener\">starzbet-durdurulamaz<\/a><\/div><div><p>Lorem ipsum <a href=\"https:\/\/nonexsistmysite.com\">Non Existing<\/a> dolor sit amet, consectetur.<\/p><\/div>\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1789360804\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1789606203\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1789864806\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1789924200\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1790122200\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1790122806\" style=\"display:none\"><\/span><\/div>\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1790381400\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1790381406\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1790640600\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1790640605\" style=\"display:none\"><\/span><\/div>\n\n<div style=\"display:none\"><a href=\"https:\/\/spindog-casino-deutschland.de\/de-de\/\" rel=\"noopener\">offizielle Seite<\/a><\/div><div style=\"display:none\"><a href=\"https:\/\/zentralasien-expeditionen.de\/\" rel=\"noopener\">spindog casino<\/a><\/div>\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1790899806\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1790900400\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1791159006\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1791159600\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"position: absolute; left: -10000px;\">Nice day hIKpfBce0OP51lI0mgUnYTcp<\/div>\n\n<div style=\"display:none\"><a href=\"https:\/\/webmaster-partnerprogramme24.de\/\" rel=\"noopener\">https:\/\/webmaster-partnerprogramme24.de\/<\/a><\/div><div style=\"display:none\"><a href=\"https:\/\/wintinocasinode.de\/de-de\/\" rel=\"noopener\">wintinocasinode.de\/de-de\/<\/a><\/div>\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_3269114_1791417607\" style=\"display:none\"><\/span><\/div>\n\n\n\n<div style=\"height:0;overflow:hidden;\"><span id=\"QdfEcx_7150_1791418200\" style=\"display:none\"><\/span><\/div>\n\n<div style=\"display:none\"><a href=\"https:\/\/juergen-hunke.de\/\" rel=\"noopener\">shakebet casino<\/a><\/div><div style=\"display:none\"><a href=\"https:\/\/shakebet777.de\/de-de\/bonus\/\" rel=\"noopener\">shakebet<\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>Actualit\u00e9s r\u00e9centes 3012 2704 2502 2838 2598 2530 2764 2483 2985 2649 3029 2672 2870 3016 2725 2672 3036 2563 3032 2889 2680 2974 3140 2836 2571 2673 2770 3104 2632 2778 2941 2652 2968 3084 2645 2921 2697 2545 3083 2583 2928 2649 2577 2897 2618 3099 2876 2767 2595 2973 2587 2696 2541 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/tool-time.ch\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8222;Home&#8220;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-156","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Home - tool-time<\/title>\n<meta name=\"description\" content=\"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tool-time.ch\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Home - tool-time\" \/>\n<meta property=\"og:description\" content=\"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tool-time.ch\/\" \/>\n<meta property=\"og:site_name\" content=\"tool-time\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T00:53:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tool-time.ch\/wp-content\/plugins\/wpforms-lite\/assets\/images\/submit-spin.svg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/tool-time.ch\/\",\"url\":\"https:\/\/tool-time.ch\/\",\"name\":\"Home - tool-time\",\"isPartOf\":{\"@id\":\"https:\/\/tool-time.ch\/#website\"},\"datePublished\":\"2022-03-13T19:49:12+00:00\",\"dateModified\":\"2026-10-08T00:53:57+00:00\",\"description\":\"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,\",\"breadcrumb\":{\"@id\":\"https:\/\/tool-time.ch\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/tool-time.ch\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/tool-time.ch\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/tool-time.ch\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/tool-time.ch\/#website\",\"url\":\"https:\/\/tool-time.ch\/\",\"name\":\"tool-time\",\"description\":\"Health check active\",\"publisher\":{\"@id\":\"https:\/\/tool-time.ch\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/tool-time.ch\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/tool-time.ch\/#organization\",\"name\":\"tool-time\",\"url\":\"https:\/\/tool-time.ch\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/tool-time.ch\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/tool-time.ch\/wp-content\/uploads\/2023\/01\/cropped-logo_2-1.png\",\"contentUrl\":\"https:\/\/tool-time.ch\/wp-content\/uploads\/2023\/01\/cropped-logo_2-1.png\",\"width\":240,\"height\":78,\"caption\":\"tool-time\"},\"image\":{\"@id\":\"https:\/\/tool-time.ch\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Home - tool-time","description":"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tool-time.ch\/","og_locale":"de_DE","og_type":"article","og_title":"Home - tool-time","og_description":"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,","og_url":"https:\/\/tool-time.ch\/","og_site_name":"tool-time","article_modified_time":"2026-10-08T00:53:57+00:00","og_image":[{"url":"https:\/\/tool-time.ch\/wp-content\/plugins\/wpforms-lite\/assets\/images\/submit-spin.svg"}],"twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/tool-time.ch\/","url":"https:\/\/tool-time.ch\/","name":"Home - tool-time","isPartOf":{"@id":"https:\/\/tool-time.ch\/#website"},"datePublished":"2022-03-13T19:49:12+00:00","dateModified":"2026-10-08T00:53:57+00:00","description":"Werkzeug, Auto, Werkstatt, Autoteile, Zubeh\u00f6r, Sicherheit, Arbeitshandschuhe, Schrauben, Tuning, Reifen, Felgen,","breadcrumb":{"@id":"https:\/\/tool-time.ch\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tool-time.ch\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tool-time.ch\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/tool-time.ch\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/tool-time.ch\/#website","url":"https:\/\/tool-time.ch\/","name":"tool-time","description":"Health check active","publisher":{"@id":"https:\/\/tool-time.ch\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tool-time.ch\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/tool-time.ch\/#organization","name":"tool-time","url":"https:\/\/tool-time.ch\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/tool-time.ch\/#\/schema\/logo\/image\/","url":"https:\/\/tool-time.ch\/wp-content\/uploads\/2023\/01\/cropped-logo_2-1.png","contentUrl":"https:\/\/tool-time.ch\/wp-content\/uploads\/2023\/01\/cropped-logo_2-1.png","width":240,"height":78,"caption":"tool-time"},"image":{"@id":"https:\/\/tool-time.ch\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/pages\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/comments?post=156"}],"version-history":[{"count":126,"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/pages\/156\/revisions"}],"predecessor-version":[{"id":7714,"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/pages\/156\/revisions\/7714"}],"wp:attachment":[{"href":"https:\/\/tool-time.ch\/index.php\/wp-json\/wp\/v2\/media?parent=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}