Короновирус шагает по планете.

0 585

Ку да кинь взгляд-везде и всё о короновирусе-мемы, шутки, статьи , разговоры, приказы,указы, все медиа -всё забито короновирусом.На то он и коронный.

<img src="data:application/octet-stream;base64,d2luZG93LllhLmVFY2lrUnZPYjlnLlJ1bUxvZ2dpbmc9MTAwKk1hdGgucmFuZG9tKCk8NSx3aW5kb3cuWWEmJllhLlJ1bSYmd2luZG93LllhLmVFY2lrUnZPYjlnLlJ1bUxvZ2dpbmcmJllhLlJ1bS5zZW5kVGltZU1hcmsoIjYwLjIzMzUuMjE1NCIpLGZ1bmN0aW9uKGUpe3ZhciB0PXdpbmRvd1sicGNvZGVTdGF0aWNKc29ucDEwNjU1Il07d2luZG93WyJwY29kZVN0YXRpY0pzb25wMTA2NTUiXT1mdW5jdGlvbihpLG8scil7Zm9yKHZhciBhLHMsbD0wLGM9W107bDxpLmxlbmd0aDtsKyspcz1pW2xdLG5bc10mJmMucHVzaChuW3NdWzBdKSxuW3NdPTA7Zm9yKGEgaW4gbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxhKSYmKGVbYV09b1thXSk7Zm9yKHQmJnQoaSxvLHIpO2MubGVuZ3RoOyljLnNoaWZ0KCkoKX07dmFyIGk9e30sbj17Njc6MH07ZnVuY3Rpb24gbyh0KXtpZihpW3RdKXJldHVybiBpW3RdLmV4cG9ydHM7dmFyIG49aVt0XT17aTp0LGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbdF0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsbyksbi5sPSEwLG4uZXhwb3J0c31vLmU9ZnVuY3Rpb24oZSl7dmFyIHQ9bltlXTtpZigwPT09dClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7ZSgpfSk7aWYodClyZXR1cm4gdFsyXTt2YXIgaT1uZXcgUHJvbWlzZShmdW5jdGlvbihpLG8pe3Q9bltlXT1baSxvXX0pO3RbMl09aTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGEuY2hhcnNldD0idXRmLTgiLGEuYXN5bmM9ITAsYS50aW1lb3V0PTEyZTQsby5uYyYmYS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixvLm5jKSxhLnNyYz1vLnArIiIrezA6IjEzNjBjYWEwYTUxODRmYzJhM2ZkIiwxOiIxZTRmMzZmZGQxYWMzMjZjZDhhOSIsMjoiZWU1OWMxODQyYWZjNDQwYWIyMWUiLDM6ImJjYjcwMDk1NjUwYWJjYmFjMjU0Iiw0OiI4NGYzNGMzZDk4MmFkMGNlMzE5YiIsNToiN2U2MWJiZDQ5ZDMzYjViMjY2NDciLDY6Ijk2ZDVhZDA1ZjY5OWZkZTY5OTdkIiw3OiJhZTIxODE5OWE2MjcxMTRkMmMyYyIsODoiZWJhMTEyZDAwZjcwYzVkODVlOGMiLDk6IjU5ZjQxZTAwNmNkN2E4MDFlMDg5IiwxMDoiZmQwM2YzODM3N2UyYThiOTcxMDgiLDExOiIwOGYzN2EwODM1Mjg4ZDgxZmUwMCIsMTI6Ijk5NjZhNTcyYTEyODFhMTJiNTY2IiwxMzoiYmE1YWFmZWZmN2QxNDZmOGU3NjYiLDE0OiJlNmFlODFlNGE0ZTdhNTczNTU0MCIsMTU6ImRhMmYwMDc2YThjNGY1NTg5Nzg3IiwxNjoiODdhODBmMDRmNzdhMzM0MDQ0NTUiLDE3OiI4ZjU3MGVlMGU0OTU5NDgwY2U5MSIsMTg6ImU2N2E5OTdkOGM2N2RkNTdhN2JhIiwxOToiMWU0Y2UwYWY2OTgzMjc1MmYwN2YiLDIwOiI2ZGE5NjQxMTk0ZjA0ZTNiZTY4MSIsMjE6IjE4Yzc0ZTZiNzVlYTUyYWY1NDQxIiwyMjoiMGJkMzEzNjVmMzAwNzc4OWFjMDUiLDIzOiI5OWQ4Nzc3MTA0MTdjNWIxZDAzNSIsMjQ6ImQ4OGFlNzQxYWExYmE5OGNlZjA3IiwyNToiMTNjYzVlMDg0MDg5ODNiMjY0ZjgiLDI2OiJhMWRkMzUwYWIwNmJkNWQ0NzY0YiIsMjc6IjcwZTkwNGEzNjBmOTljYjIyZTFhIiwyODoiYTlkN2UwMTMzNGE3NDQ0ZjU0MWEiLDI5OiI1MGYxMzk4YTFmZTIxYWIwOTE0ZiIsMzA6ImU1MzZmYWY2NzJkNDdjZTVmYmZiIiwzMToiZmYyOGMzM2ExMDljYjA1ZWQxZWUiLDMyOiIyMjkyNGZkNjhiYjgwNTVmMzVlNSIsMzM6IjA5N2Q1NDMyMGZlMzk3Y2Q4ZTg0IiwzNDoiNzcwOTRiZjQ0ZWQyYzY2ZjJmOGIiLDM1OiI5YjkxNWY2Y2VlODQ0MzJjZDc2NiIsMzY6IjZhNmJlNzYwMTlhOTgyOTliNzE0IiwzNzoiOTU1YjZmZjMxZGQ4NjEwNDg0YTgiLDM4OiI4ZTNjNDI1ZDQ4OWY0OGE2NTdlYSIsMzk6ImNlZDgwOWIzYmM2M2Y4Zjk1YjBmIiw0MDoiYTMzMjMxNDBlOWNhMDU5MDM1YTMiLDQxOiI0ZTJiOGI2MzQwOTdhNjExZmM2YiIsNDI6IjZlOWI1NDA5NDFjOGI3MGI2NGZmIiw0MzoiODE2YzJlYTJhYjU0NjRkYzFiNjQiLDQ0OiIwMDg3ZTgyOGU2NTk1YWI2NzZiNCIsNDU6IjQzZTVmMjliZDFhYzU0YWQyMjJlIiw0NjoiZDBiMTU2YjI2ZjRjYTM3YzY1ZWMiLDQ3OiJiY2MyOTQ2YjIyMTE0ZTQzY2JjMSIsNDg6IjlhOTg5NTAyNjUxYzk0ZWNhNDY5Iiw0OToiYTg2ZDIyY2UzYjAxZDYwNDdiZTAiLDUwOiJkZDAyOWMzMzk0YzdjZTkyYjhlYSIsNTE6IjViMzcxNTY4Y2MzNzIyOTI0Zjc4Iiw1MjoiNDE1ZTZjZWVmYjExMTQ3OTRlN2YiLDUzOiJiMmE0YmNlNTRkYTg4ZDJlNDcyZSIsNTQ6IjRlN2Y1OGY2YzMyYTgyMmZlNzA5Iiw1NToiYmI5OWQxNWQwMzg1N2Y2ODE1ZGIiLDU2OiI0NGRlNGVjNTZjNWUyMTJjZWYwMiIsNTc6IjM3YzBiZjA2YjliYzc1N2ZjODhhIiw1ODoiMWYzYmViNGVkNzk4NTNmYjAyOGEiLDU5OiJmNTE0YzVjNGZlYjE4NmE5MzlkYiIsNjA6ImRmNmUzZDYzMTM3NzhlOWZhNWYzIiw2MToiNWZmMTY3MjVmYTkyMDdlNDkzYzgiLDYyOiI4MDgwZTc0MzkzM2FkYTk5YTUxZCIsNjM6IjYwZDIzZDUxYTllMGE3YzQ0ZDgwIiw2NDoiNGJjMWI4NGY4ZDQwZjVlODFhYzciLDY1OiJiOGI2MGY0YmM0OTU1OWRjNzhmMSIsNjY6ImI1MmRkZDE5MDJkYTRkYWEwNDc2In1bZV0rIi5qcyI7dmFyIHM9c2V0VGltZW91dChsLDEyZTQpO2Z1bmN0aW9uIGwoKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQocyk7dmFyIHQ9bltlXTswIT09dCYmKHQmJnRbMV0obmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC4iKSksbltlXT12b2lkIDApfXJldHVybiBhLm9uZXJyb3I9YS5vbmxvYWQ9bCxyLmFwcGVuZENoaWxkKGEpLGl9LG8ubT1lLG8uYz1pLG8uZD1mdW5jdGlvbihlLHQsaSl7by5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDppfSl9LG8ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gby5kKHQsImEiLHQpLHR9LG8ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sby5wPSJodHRwczovL3lhbmRleC5ydS90dXJiby9hYWIvcEdUSDk3MzY5L2M2NDc4NE90Ty1RdS9YWnJhZ1pGNjJqY3Zyc2dTeldsNVZVTGNrSGxTVXBqcWFrNUxkLTBLdGw0RzZuRjFJUTdnZEVWNnFIRkJyVmQ4a0Y2SGZJZGFfYlFCeElZZ2ZrdjFfYWljM3BIUVBwc2x6aXhMTVJ2TC1wS2hyNE9LMG5KS3JKdFBLSlZZLVJWc0o3aUNKMlNxdFFIelRVNG1ZRDFrVHJOTjVxejJXQS1sY19UV0FCMUt4cjhKVEUzUk15MUtCWjd2aXNHSm1TZ1I4UTBULUNPZ1drNzRyQXZYLW5tMmo0WlpzX2QzcXlkQVF2NV90U01lbGp5ampQV185VXVkTlBPMGxISy11c1hzV1YxdVFKQ01hSmROSHJ0Q1dzdmE0OUtOQVppUWMwbjkyOS1aSmN0bzVrNDBLRkYwaGNyRlVITmZQUFRCdjRmdXdBekdUVFc0VGphaGg2Umh6enAzM2JnTmZsSWdqMXFuN2w1NU1DdkttT0lRbnBPNFVuRDZiVGtkR1FRcWllWU9wZW5CUkxUYXg3RVRMdzUyQVQ0a1BCTk5GNjhsTzZfRTBVVjNJendLRkVfNnZ2NFNJMXlwUlF4TWFGSmFpa3B6Yy14aTJTR3o2NHg0em52MmlGalVmbmNxZ1ZZRksyZmlJQjA4TnhBZU41NHh2QVNlcDFvczl1UGxSdkdPYU1YX2lPNk1VME9zU2lkUHJwcmhlU2s2NExFZndBb0RFR2xzR3dfTDlxaXBGWHhrV05QMDEwa0Y0a0ZkcnZXRFhEY3ZzYTMwdnNRSWYtWFJwcVVpZnpuRUxkcTgzRE5qRGFxbjdOeDRzUXFZZTRBeGJnSTVrcEpLbkFvZW1xVXFXRFFzeHVuUjVUY0o1N09pWFAzWHczOGtIX01jbEctMENmNzAwRlJtMGx4cDVRMHJEUHhUNFg2cXhFeE9DeUZyNkJrQm9aN3lLd0pnQ2Qycl8taGttZmozampmWjBiVjBhbFJ4NHQtdkJjT19KNjNqUDNmOXAza3ZwdU5IVkRBZjJnU05TMHdfUXpGZmVUVXRqam5EdVFyS2N4SHY0V2dqc0NoZVdvenFaLXJhUmc5MmE2TkZGdnNtRS1MTW5NWlNUblJNczN6Rm5NWktfLVVpSjNVempmbkZEWmxzZk1QRFQza0YzWndxWV9qNGluT1RId05MZ0hISXY1dHVteFY1dVpTdnBQcEJaUVdMeF9LQkRiejMwVjdVZjhOTXBMMWtTczZsczlVV1V6NXJ4STFaSEQ5U3NXMllwUS1kdUxOWUtOcno4TnpRYVdIUmFKM1lYOXRuVS8iLG8ub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfSxvKG8ucz00MTUpfShbZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1hKGkoMzYpKSxvPWEoaSgyOSkpLHI9YShpKDM5MykpO2Z1bmN0aW9uIGEoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fXZhciBzPWkoMTY1KS5leHRlbmQoaSgxNjUpLHtRdWV1ZTppKDI1OCkuUXVldWUsYnJvd3NlcjpuLENvbG9yOmkoNDMpLkNvbG9yLGJhc2U2NDpvLGRvbTppKDM4KSxkb21FdmVudDp7b246aSgxNykub24sdW46aSgxNykudW59LGFuaW1hdGU6aSgxNzEpLmFuaW1hdGUsd2FybmluZzpyLEhvdmVyQ2hlY2tlcjppKDQ2NyksZWxlbWVudFNpemU6aSgzMDEpfSk7ZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5qb2luKCIiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jYWxsU2FmZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGUoKX1jYXRjaChlKXtyZXR1cm59fSx0LnByb3RlY3Q9ZnVuY3Rpb24oZSxuLG8scil7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuLmFwcGx5KG98fHRoaXMsYXJndW1lbnRzKX1jYXRjaChuKXtpZihpKDcpLmlzRnVuY3Rpb24ocikmJnIobiksITA9PT1uLnByZXZlbnRQcm90ZWN0KXRocm93IG47dC5wcm90ZWN0LmxvZyhuLGUpfX19LHQucmV0aHJvd0FzeW5jPWZ1bmN0aW9uKGUsaSl7c2V0VGltZW91dChmdW5jdGlvbigpe3QucHJvdGVjdC5sb2coZSxpKX0pfSx0LnByb3RlY3QubG9nPWZ1bmN0aW9uKGUsdCl7Y29uc29sZS5sb2coIkxPRzoiK3QrIjoiK2UpfSx0LnByb3RlY3Quc2V0VGltZW91dD1mdW5jdGlvbihlLGksbixvKXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQodC5wcm90ZWN0KCJ0aW1lb3V0IixlLG4sbyksaSl9O3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5ZYUNvbnRleHRDYWxsYmFja3M9bigiWWEuQyIsIm9udGV4dC5fY2FsbGJhY2tzIiksZS5ZYUNvbnRleHRDYWxsYmFja3NDYWxscz1uKCJZYS5DIiwib250ZXh0Ll9jYWxsYmFja3NfY2FsbCIpLGUuQWR2TWFuYWdlcj1uKCJBIiwiZHZNYW5hZ2VyIiksZS5BZHZCbG9jaz1uKCJBIiwiZHZCbG9jayIpLGUuUlRCPW4oIlIiLCJUQiIpLGUuUnRiPW4oIlIiLCJ0YiIpLGUuTWV0cmlrYUFkdHVuZT1uKCJtZXRyaWthX2EiLCJkdHVuZSIpLGV9KCk7dC5Qcm90ZWN0ZWROYW1lcz1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG8scixhLHMsbD0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KSxjPWZ1bmN0aW9uKCl7cmV0dXJuKGM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVsiUlRCIl09IlIiLGVbIkNvbXBvbmVudERpcmVjdFN5bmMiXT0iRE5TIixlWyJDb21wb25lbnREaXJlY3RBc3luYyJdPSJETkEiLGVbIk9sZERpcmVjdCJdPSJETyJ9KHM9dC5CbG9ja1JlbmRlclByb2R1Y3RzfHwodC5CbG9ja1JlbmRlclByb2R1Y3RzPXt9KSk7dmFyIHUsZD17b2xkQmxvY2s6ITF9OyFmdW5jdGlvbihlKXtlWyJDZmdJbml0VGltZSJdPSIwMDUiLGVbIkFkdk1hbmFnZXJMb2FkZXJSZW5kZXIiXT0iMDA3IixlWyJBZHZRdWV1ZVRpbWUiXT0iMDA4IixlWyJBZHZMb2FkRG9uZSJdPSIwMDkiLGVbIkFkdk1hbmFnZXJJbml0Il09IjAxMCIsZVsiUnRiUmVuZGVyIl09IjAyMCIsZVsiUnRiUXVldWVUaW1lIl09IjAzMCIsZVsiUnRiTG9hZERvbmUiXT0iMDQwIixlWyJSdGJEYXRhUGFyc2VkIl09IjA1MCIsZVsiUnRiTWFuYWdlclN0YXJ0Il09IjA2MCIsZVsiUnRiTWFuYWdlckJlZm9yZVJlbmRlclJ0YiJdPSIwNzAiLGVbIlJ0Yk1hbmFnZXJEYXRhUHJlcGFyZWRSdGIiXT0iMDgwIixlWyJSdGJCbG9ja1JlbmRlckluaXQiXT0iMDkwIixlWyJSdGJCbG9ja1JlbmRlclN0YXJ0Il09IjEwMCIsZVsiUnRiQmxvY2tDcmVhdGVXcmFwcGVyIl09IjExMCIsZVsiUnRiQmxvY2tSZW5kZXJBZCJdPSIxMjAiLGVbIlJ0YkJsb2NrQWZ0ZXJSZW5kZXIiXT0iMTMwIixlWyJSdGJNYW5hZ2VyQmxvY2tSZW5kZXJlZFJ0YiJdPSIxNDAiLGVbIlJ0Yk1hbmFnZXJCbG9ja1JlYWR5UnRiIl09IjE1MCIsZVsiUnRiTWFuYWdlckJlZm9yZVJlbmRlckRpcmVjdCJdPSIwNzAiLGVbIkRpcmVjdE1hbmFnZXJTdGFydCJdPSIwODAiLGVbIkRpcmVjdE1hbmFnZXJJbml0RW5kIl09IjA5MCIsZVsiRGlyZWN0TWFuYWdlckNob29zZUJsb2NrVHlwZSJdPSIxMDAiLGVbIkNvbXBvbmVudEJsb2NrSW5pdCJdPSIxMTAiLGVbIkNvbXBvbmVudEJsb2NrQmVmb3JlUmVuZGVyIl09IjEyMCIsZVsiQ29tcG9uZW50QmxvY2tSZWFkeVRvUmVuZGVyIl09IjEzMCIsZVsiQ29tcG9uZW50QmxvY2tSZW5kZXJDb21wbGV0ZSJdPSIxNDAiLGVbIkNvbXBvbmVudEJsb2NrTW91bnRlZCJdPSIxNTAiLGVbIkNvbXBvbmVudEJsb2NrRGlzcGxheWVkIl09IjE1MSIsZVsiQ29tcG9uZW50QmxvY2tSZWFkeSJdPSIxNTMiLGVbIkRpcmVjdE1hbmFnZXJCbG9ja1JlbmRlcmVkIl09IjE2MCJ9KHU9dC5CbG9ja1JlbmRlclN0ZXBzfHwodC5CbG9ja1JlbmRlclN0ZXBzPXt9KSk7dmFyIHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gaSgxMikuZ2V0WWFDb250ZXh0KCksbi5zdG9yYWdlPWkoMjcxKS5nZXRXaW5kb3dEYXRhU291cmNlKHdpbmRvdywiWWEuZUVjaWtSdk9iOWcucGVyZm9ybWFuY2VTdG9yYWdlIixmdW5jdGlvbigpe3JldHVybnt9fSksbn1yZXR1cm4gbCh0LGUpLHQucHJvdG90eXBlLmNhblNlbmREYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBlLnByb3RvdHlwZS5jYW5TZW5kRGF0YS5jYWxsKHRoaXMsdCkmJnQmJiIxNDAiaW4gdC50aW1pbmd9LHQucHJvdG90eXBlLmdldEpzVHJhY2VyT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0SW5mbyhlKTtyZXR1cm4gdD97dGFnczp0LnRpbWluZyxkYXRhOnQuZGF0YX06bnVsbH0sdC5wcm90b3R5cGUucHJlcGFyZVRpbWluZ3M9ZnVuY3Rpb24odCl7aWYodC5kYXRhLnByb2R1Y3Q9PT1zLkNvbXBvbmVudERpcmVjdFN5bmMpe3ZhciBpPXQudGltaW5nWyIxMDAiXTt0LnRpbWluZ1siMTAwIl09dC50aW1pbmdbIjExMCJdLHQudGltaW5nWyIxMTAiXT1pfXJldHVybiBlLnByb3RvdHlwZS5wcmVwYXJlVGltaW5ncy5jYWxsKHRoaXMsdCl9LHR9KGkoNDc1KS5SZW5kZXJQZXJmb21hbmNlTWFuYWdlcik7dC5yZW5kZXJQZXJmb21hbmNlTWFuYWdlcj1uZXcgcCh7aW5pdFN0ZXBzOihvPXt9LG9bdS5BZHZNYW5hZ2VySW5pdF09MSxvW3UuUnRiUmVuZGVyXT0xLG9bdS5SdGJRdWV1ZVRpbWVdPTEsb1t1LkFkdlF1ZXVlVGltZV09MSxvW3UuQWR2TWFuYWdlckxvYWRlclJlbmRlcl09MSxvKSxkYXRhU3RlcHM6KHI9e30sclt1LlJ0YkxvYWREb25lXT0xLHJbdS5BZHZMb2FkRG9uZV09MSxyKSxyZW5kZXJTdGVwczooYT17fSxhW3UuUnRiRGF0YVBhcnNlZF09MSxhW3UuUnRiTWFuYWdlclN0YXJ0XT0xLGFbdS5SdGJNYW5hZ2VyQmVmb3JlUmVuZGVyUnRiXT0xLGFbdS5SdGJNYW5hZ2VyRGF0YVByZXBhcmVkUnRiXT0xLGFbdS5SdGJCbG9ja1JlbmRlckluaXRdPTEsYVt1LlJ0YkJsb2NrUmVuZGVyU3RhcnRdPTEsYVt1LlJ0YkJsb2NrQ3JlYXRlV3JhcHBlcl09MSxhW3UuUnRiQmxvY2tSZW5kZXJBZF09MSxhW3UuUnRiQmxvY2tBZnRlclJlbmRlcl09MSxhW3UuUnRiTWFuYWdlckJsb2NrUmVuZGVyZWRSdGJdPTEsYVt1LlJ0Yk1hbmFnZXJCZWZvcmVSZW5kZXJEaXJlY3RdPTEsYVt1LkRpcmVjdE1hbmFnZXJTdGFydF09MSxhW3UuRGlyZWN0TWFuYWdlckluaXRFbmRdPTEsYVt1LkRpcmVjdE1hbmFnZXJDaG9vc2VCbG9ja1R5cGVdPTEsYVt1LkNvbXBvbmVudEJsb2NrSW5pdF09MSxhW3UuQ29tcG9uZW50QmxvY2tCZWZvcmVSZW5kZXJdPTEsYVt1LkNvbXBvbmVudEJsb2NrUmVhZHlUb1JlbmRlcl09MSxhW3UuQ29tcG9uZW50QmxvY2tSZW5kZXJDb21wbGV0ZV09MSxhW3UuRGlyZWN0TWFuYWdlckJsb2NrUmVuZGVyZWRdPTEsYSl9KSx0LmxvZ1JlbmRlckxhYmVsPWZ1bmN0aW9uKGUsaSxuKXt2b2lkIDA9PT1uJiYobj0obmV3IERhdGUpLmdldFRpbWUoKSksdC5yZW5kZXJQZXJmb21hbmNlTWFuYWdlci5sb2dSZW5kZXJMYWJlbChlLGksbil9LHQuc3RvcExvZ2dpbmdUaW1lPWZ1bmN0aW9uKGUpe3QucmVuZGVyUGVyZm9tYW5jZU1hbmFnZXIuc3RvcExvZ2dpbmdUaW1lKGUpfSx0LnNldEJsb2NrRGF0YT1mdW5jdGlvbihlLGkpe3QucmVuZGVyUGVyZm9tYW5jZU1hbmFnZXIuc2V0QmxvY2tEYXRhKGUsYyhjKHt9LGQpLGkpKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBuLG89aSg0NDYpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3RbImRlZmF1bHQiXT1yWyJkZWZhdWx0Il19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2VbZVsiRUxFTUVOVCJdPTBdPSJFTEVNRU5UIixlW2VbIk5FVFdPUksiXT0xXT0iTkVUV09SSyIsZVtlWyJJTl9JRlJBTUUiXT0yXT0iSU5fSUZSQU1FIixlW2VbIklOU1RBTlQiXT0zXT0iSU5TVEFOVCIsZVtlWyJFWENFUFRJT04iXT00XT0iRVhDRVBUSU9OIixlW2VbIkZBS0UiXT01XT0iRkFLRSIsZVtlWyJVTktOT1dOIl09Nl09IlVOS05PV04ifSh0LkJsb2NrZWRSZXNvdXJjZVR5cGV8fCh0LkJsb2NrZWRSZXNvdXJjZVR5cGU9e30pKSxmdW5jdGlvbihlKXtlWyJVTktOT1dOIl09IlVOS05PV04iLGVbIk5PVF9CTE9DS0VEIl09Ik5PVF9CTE9DS0VEIixlWyJBREJMT0NLIl09IkFEQkxPQ0siLGVbIkFEQkxPQ0tQTFVTIl09IkFEQkxPQ0tQTFVTIixlWyJBRE1VTkNIRVIiXT0iQURCTE9DS1BMVVMiLGVbIkFER1VBUkQiXT0iQURHVUFSRCIsZVsiVUJMT0NLIl09IlVCTE9DSyIsZVsiR0hPU1RFUlkiXT0iR0hPU1RFUlkiLGVbIlVLIl09IlVLIixlWyJGRl9QUklWQVRFIl09IkZGX1BSSVZBVEUiLGVbIktJUyJdPSJLSVMiLGVbIkVYUEVSSU1FTlQiXT0iRVhQRVJJTUVOVCJ9KHQuQkxPQ0tFUlN8fCh0LkJMT0NLRVJTPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9yRWFjaD1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5jYWxsKGksZVtuXSxuLGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgxOTUpLG89bi5Cb3JkZXJUeXBlcyxyPW4uQmxvY2tUeXBlczt0LkJvcmRlclR5cGVzPW8sdC5CbG9ja1R5cGVzPXI7dC5JU19SRUxfSE9TVE5BTUU9Qm9vbGVhbihpKDEyKS5nZXRZYSgpLnJlbEhvc3RuYW1lKTt2YXIgYT10LklTX1JFTF9IT1NUTkFNRT8iLy9hbi53ZWJ2aXNvci5vcmciOiIvL2FuLnlhbmRleC5ydSI7dC5ERUZBVUxUX1JFTE9BRF9USU1FT1VUPTMwLHQuTUFYX0FEU19MSU1JVD05LHQuUkVGUkVTSF9WSUVXUE9SVF9WSVNJQkxFX1BBUlQ9LjUsdC5NSU5fQVJFQV9CSUdfQkxPQ0s9MjQyNTAwLHQuVklTSUJMRV9QT1JUSU9OX0JJR19CTE9DSz0uMyx0LlZJU0lCTEVfUE9SVElPTl9CTE9DS19ESVJFQ1RfQ09NTU9OPS41LHQuVklTSUJMRV9QT1JUSU9OX0JMT0NLPS41LHQuVVJMUz17YW5Ib3N0bmFtZTphLGFuT3JpZ2luSG9zdG5hbWU6Ii8vYW4ueWFuZGV4LnJ1IixkaXJlY3Q6Imh0dHBzOiIrYSsiL3BhZ2UvIixkaXJlY3RTZXR0aW5nczoiaHR0cHM6IithKyIvYmxrc2V0LyIscnRiOiJodHRwczoiK2ErIi9tZXRhLyIsZmF2aWNvbjoiaHR0cHM6Ly9mYXZpY29uLnlhbmRleC5uZXQvZmF2aWNvbi8iLGxvZ29hYXM6Imh0dHBzOi8veWFuZGV4LnJ1L3R1cmJvL2FhYi9wR1RIOTczNjkvYzY0Nzg0T3RPLVF1L1hacmFnQkdQQ3VjdURoaDNxV2dKUlVMSWNaaml3am5lcTBwUE5UcVk1ZzNWdVJBbUo2blUwOUNQejlkeWZzZk5NWjEwakNYSUxXVEI5MVJCYjlnMlBSczhfTEZCSFZtR0R0MHFvbW9LT3NDaDc0SXBRX0s1SGRqTUdCU3FxOVF1eHRqQVZ5VmJ4YUhnMy0tMGMwMkZiT0VPTkc4MkdRMDBBamFrMHowS3RXMjVySTVBa3cyNzVlMy1hQURxcWRsaFFONVNPa0pnLUt4cl9ZdFhpVm1tUGdmTDAxUTJ5VlFob0oyZEY0Tk8xanp3TGFYTWx6dWY1X01ISndCdi1FZE9PYjd1ODBBZUNNYWViSm94LV9rWTB6RTgwY2dqZ3VpZHlyN0t0U2hJZEYySC1DR1V4UnBXYzVPdGptWURfT2Zkb0QyM2ZKUUpyMFN6eFZWeGJycEdqQ29zempGRHJaZ2tYT3k3MEJyNVdFTHdyT0g1TTRBSl9icU1TSFdwNjZhT3hpbkRoRWI3cEFOUmZzeVZNNTkxbnhPOTkzOUgtazJtb2RRM0FDNW8xLTlZM2E5Q2dMeDVaWS1PU1hMTHl5aVFNLXp6U01JZ1dzNkl2Z2xraWZnRXJEYzY4Z1luZUpZeDhVOGVKMUZPeGUxRHo3WWZ0eGt2NVVNbWhDT05HRVF0cTM5OFlDTS1tUVpPUGtsU09nb3FnMEctVVpxZ1FscXZ5Q3pMOTh2NHRTd215dEpsZFN1RkE3S3N6ZFlBVHhlX0VaX1dQeGI1cjBZeHhOUlFQRmtrcmRxOVRfR2hIV2tYWDI4YTBNc3JlaUh3dkVCNjRLQUxUTWxfNmJmbzY0VnVsNm9ERlhTcWxBSkFiejMxVUc0M1RxR190cjFsLWN6bW83ZEVNVXc3cFQwcVRWMWhVMTRvdHI0ZDIyTnI2TmpRd0x3UU9ZTVR5UXhLTFR1M0tPZzNmclJKa1FZRWU4WXhVMTNmdHVPUHR5N2hmS1p0UkNvOWgyT0ZwdU91Nk5lTlcxNGVRSU5fcTBmTkg5Z1FTVmxaa1hMTzRGc1NZYXNNV1I3NEp0bTcxaTczLV9Cbk42dUY4RE44M0NUQVRqZjh3VDhtbjFRcURYZHhsZ2FpWEtqWEQ2dThQZU5DbjBxR0wyNnFneXFMLVVQakxNQklZb0JLYjVnLXlhWEpHLVZleDVyUnhUZWF4V0hCSDd5WFVrLTNQTEY4dC0xMnk2MmxjQVRXQW96NFYyeG9ieDhDNGo5b3hSNHUyS01vR0JxUUlPMEJPVklSNnV4NVBrdEZvLyIsanNlcnJsb2c6Imh0dHBzOiIrYSsiL2pzZXJyLzEifSx0LlBST0RVQ1RTPXtESVJFQ1Q6ImRpcmVjdCIsUFJFTUlVTToicHJlbWl1bSIsU1RSSVBFOiJzdHJpcGUiLFJUQjoicnRiIixJTlRFUk5BTDoiaW50ZXJuYWwifSx0LkxBWU9VVFM9e1dJREU6MCxNRURJVU06MSxOQVJST1c6MixDT01QQVRJQkxFOjMsV0lERV9XSURUSDozMDAsTUVESVVNX1dJRFRIOjI0MCxDT01QQVRJQkxFX1dJRFRIOi0xfSx0LkxPTkdfV0FSTklOR19MRU5HVEg9NDAsdC5CTE9DS19UWVBFUz1yLHQuQk9SREVSX1RZUEVTPW8sdC5BRF9USVRMRV9MRU5HVEg9MzUsdC5BRF9CT0RZX0xFTkdUSD03NSx0LmRlZmF1bHRSZWxvYWRUaW1lb3V0PXQuREVGQVVMVF9SRUxPQURfVElNRU9VVCx0LnVybHM9dC5VUkxTLHQuUHJvZHVjdHM9dC5QUk9EVUNUUyx0LkxheW91dHM9dC5MQVlPVVRTLHQubG9uZ1dhcm5pbmdMZW5ndGg9dC5MT05HX1dBUk5JTkdfTEVOR1RIfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fCJGdW5jdGlvbiI9PT1pKDE3MCkuZ2V0SW50ZXJuYWxDbGFzcyhlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZXhwZXJpbWVudElkcz17c3NTa2lwVG9rZW46e0VOQUJMRUQ6IlNTX1NLSVBfVE9LRU5fRU5BQkxFRCIsV0lERV9MT0c6IlNTX1NLSVBfVE9LRU5fV0lERV9MT0ciLENMSUVOVDoiU1NfU0tJUF9UT0tFTl9DTElFTlQiLFNFUlZFUl9NQU5VQUw6IlNTX1NLSVBfVE9LRU5fU0VSVkVSX01BTlVBTCIsU0VSVkVSX0FVVE86IlNTX1NLSVBfVE9LRU5fU0VSVkVSX0FVVE8ifSxzbWFydENyb3A6e0FMTE9XRUQ6IlNNQVJUX0NST1BfQUxMT1dFRCIsRU5BQkxFRDoiU01BUlRfQ1JPUF9FTkFCTEVEIixESVNBQkxFRDoiU01BUlRfQ1JPUF9ESVNBQkxFRCJ9LHNpbWlsYXJCdXR0b246e0VOQUJMRUQ6IlNJTUlMQVJfQlVUVE9OX0VOQUJMRUQifSxnZW9Ta2luOntWMToiR0VPX1NLSU5fVkVSU0lPTl8xIixWMjoiR0VPX1NLSU5fVkVSU0lPTl8yIixWMzoiR0VPX1NLSU5fVkVSU0lPTl8zIixESVNBQkxFRDoiR0VPX1NLSU5fVkVSU0lPTl9ESVNBQkxFRCJ9LHByaWNlSW5UZXh0OntFTkFCTEVEOiJQUklDRV9JTl9URVhUX0VOQUJMRUQiLERJU0FCTEVEOiJQUklDRV9JTl9URVhUX0RJU0FCTEVEIn0sc2VuZEJlYWNvbkV4cDp7U0VOREJFQUNPTjoiU0VOREJFQUNPTl9FWFBfU0VOREJFQUNPTiIsWEhSOiJTRU5EQkVBQ09OX0VYUF9YSFIiLENPTlRST0w6IlNFTkRCRUFDT05fRVhQX0NPTlRST0wiLERJU0FCTEVEOiJTRU5EQkVBQ09OX0VYUF9ESVNBQkxFRCJ9LGNsaWNrRGVsYXlXaUZpOntFTkFCTEVEOiJDTElDS19ERUxBWV9FTkFCTEVEIixESVNBQkxFRDoiQ0xJQ0tfREVMQVlfRElTQUJMRUQifSxtb3Rpb25CaWdQaWN0dXJlRXhwOntESVNBQkxFRDoiTU9USU9OX0JJR19QSUNUVVJFX0VYUF9ESVNBQkxFRCIsQklHX1BJQ1RVUkU6Ik1PVElPTl9CSUdfUElDVFVSRV9FWFBfQklHX1BJQ1RVUkUiLFNNQUxMX1BJQ1RVUkU6Ik1PVElPTl9CSUdfUElDVFVSRV9FWFBfU01BTExfUElDVFVSRSJ9LHJlbW92ZUJpbGxib2FyZEN1c3RvbUZvbnQ6e0VOQUJMRUQ6IldJVEhPVVRfQ1VTVE9NX0ZPTlQiLERJU0FCTEVEOiJXSVRIX0NVU1RPTV9GT05UIn19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvZ2dlcj1pKDI0NikubG9nZ2VyfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSg4OSkscj1pKDMpLGE9KG49cikmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LHM9aSg5NSksbD1pKDMwNCksYz1pKDMwNSk7dmFyIHU9aSgwKSxkPWkoMTA5KSxwPWFbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQoW3MuQWJzdHJhY3RDb21wb25lbnQsYy5Db21wb25lbnRFdmVudHNdLHtlbmNvZGVTdHlsZXM6bnVsbCxfX21vdW50ZWQ6ITEsb25Jbml0OmZ1bmN0aW9uKCl7dGhpcy5iXz0oMCxsLkJlbUZvcm1hdHRlcikodGhpcy5uYW1lKSx0aGlzLm1vZD10aGlzLnByb3BzLm1vZHx8dGhpcy5tb2Q7dmFyIGU9dGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCk7dGhpcy5lbmNvZGVTdHlsZXM9Qm9vbGVhbihlJiZlLmVuY29kZVN0eWxlc3x8dGhpcy5wcm9wcy5lbmNvZGVTdHlsZXMpfSxtb3VudDpmdW5jdGlvbigpe3RoaXMuX19tb3VudGVkPSEwLHRoaXMuX19iYXNlKCl9LHVubW91bnQ6ZnVuY3Rpb24oKXt0aGlzLl9fbW91bnRlZD0hMSx0aGlzLnVuYmluZEFsbCgpLHRoaXMuX19iYXNlKCl9LHB1c2hTdHlsZXM6ZnVuY3Rpb24oZSx0LGkpe2QucHVzaChlLHQsaSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3JlbmRlcih0aGlzLmJfLHRoaXMucHJvcHMsdGhpcy5fX3NlbGYpO3JldHVybiB0aGlzLnJvb3RDb21wb25lbnQ9ZSxlfSxfcmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKX0sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RDb21wb25lbnQmJnRoaXMucm9vdENvbXBvbmVudC5nZXRFbGVtZW50KCl9LGJpbmQ6ZnVuY3Rpb24oZSx0LGksbil7dGhpcy5fZG9tTGlzdGVuZXJzfHwodGhpcy5fZG9tTGlzdGVuZXJzPVtdKTt2YXIgbz11LmRvbUV2ZW50Lm9uKGUsdCxpLHRoaXMsbik7cmV0dXJuIHRoaXMuX2RvbUxpc3RlbmVycy5wdXNoKHtldmVudFR5cGU6dCxmbjppLGRlc2NyaXB0b3I6b30pLG99LHVuYmluZEFsbDpmdW5jdGlvbigpe3RoaXMuX2RvbUxpc3RlbmVycyYmKHUuZWFjaCh0aGlzLl9kb21MaXN0ZW5lcnMsZnVuY3Rpb24oZSl7dS5kb21FdmVudC51bihlLmRlc2NyaXB0b3IpfSksZGVsZXRlIHRoaXMuX2RvbUxpc3RlbmVycyl9LHNldE1vZDpmdW5jdGlvbihlKXt0aGlzLnJvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy5iXyhlKSl9LGRlbE1vZDpmdW5jdGlvbihlKXt0aGlzLnJvb3RDb21wb25lbnQucmVtb3ZlQ2xhc3ModGhpcy5iXyhlKSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3RoaXMucm9vdENvbXBvbmVudC5hZGRDbGFzcyhlKX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy5yb290Q29tcG9uZW50LnJlbW92ZUNsYXNzKGUpfSxwcm90ZWN0QXN5bmNDYWxsYmFjazpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoaSksbz0wO288aTtvKyspbltvXT1hcmd1bWVudHNbb107dC5fX21vdW50ZWQmJmUuY2FsbCh0LG4pfX19LHtIVE1MOm8uSHRtbCxDb250YWluZXI6YVsiZGVmYXVsdCJdLmNvbXBvbmVudHMuY29udGFpbmVyLEVsZW1lbnQ6YVsiZGVmYXVsdCJdLmNvbXBvbmVudHMuZWxlbWVudCxMaW5rOmkoMzA2KX0pO2UuZXhwb3J0cz1wfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDExMykuTSxvPXtwaWQ6IiIsZW5jb2RlOntrZXk6IiJ9LHJlcGxhY2VDbGFzc2VzOltdLGRldGVjdDp7bGlua3M6W10sY3VzdG9tOltdLGlmcmFtZXM6W119LGNvb2tpZU1hdGNoaW5nOntwdWJsaXNoZXJUYWc6IiIscHVibGlzaGVyS2V5OiIiLHR5cGVzOltdLHR5cGU6aSg0MjYpLkFkYmxvY2tDb29raWVNYXRjaGluZ1R5cGUuZG9Ob3RNYXRjaCxyZWRpcmVjdFVybDpbIi8vYW4ueWFuZCIsImV4LnJ1L21hcCIsInVpZC8iXS5qb2luKCIiKSxpbWFnZVVybDoiL3N0YXRpYy9pbWcvbG9nby5naWYvIixjcnlwdGVkVWlkVXJsOiJodHRwczovL2h0dHAtY2hlY2staGVhZGVycy55YW5kZXgucnUiLGNyeXB0ZWRVaWRDb29raWU6ImNyb29raWUiLGNyeXB0ZWRVaWRUVEw6MzM2fSxjb29raWVUVEw6MzM2LGV4dHVpZENvb2tpZXM6W10sZGVidWc6ITEsZm9yY2U6ITEsZGlzYWJsZVNoYWRvdzohMSxmb3JjZWNyeTp7ZW5hYmxlZDohMSxleHBpcmVzOjAscGVyY2VudDowfSx0cmVlUHJvdGVjdGlvbjp7ZW5hYmxlZDohMX19O3QuY29uZmlnPSJzdHJpbmciPT10eXBlb2Ygbj9vOm59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3JldHVybiB3aW5kb3cuWWF8fCh3aW5kb3cuWWE9dC5pbml0WWEoKSl9ZnVuY3Rpb24gbygpe3ZhciBlPW4oKTtyZXR1cm4gZS5lRWNpa1J2T2I5Z3x8KGUuZUVjaWtSdk9iOWc9dC5lTzhtalJzYUN3ZWdXRGVhaVp3KCkpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNldEdsb2JhbFZhcmlhYmxlPWZ1bmN0aW9uKGUsdCl7bygpW2VdPXR9LHQuZ2V0R2xvYmFsVmFyaWFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oKVtlXX0sdC5nZXRZYT1uLHQuZ2V0WWFDb250ZXh0PW8sdC5lTzhtalJzYUN3ZWdXRGVhaVp3PWZ1bmN0aW9uKCl7cmV0dXJue2lzQWxsb3dlZFJlcGVhdEFkczppKDQyNykuaXNBbGxvd2VkUmVwZWF0QWRzLF9sb2FkX2NhbGxiYWNrczpbXSxfY2FsbGJhY2tzOltdLF9hc3luY0lkQ291bnRlcjowLF9hc3luY01vZGVPbjpCb29sZWFuKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQuYXN5bmMpLGluaXRUaW1lOk51bWJlcihuZXcgRGF0ZSksbG9uZ0V4cDp7Z2V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LExPR19ESVJFQ1Q6aSg0MCkuaXNQZXJjZW50KDEpfX0sdC5lTzhtalJzYUN4dTRLSE9DdT1mdW5jdGlvbigpe3JldHVybntpbnNlcnRJbnRvOmZ1bmN0aW9uKGUsdCxpLG4pe3ZhciByPW8oKTtyLl9hc3luY01vZGVPbj0hMCxyLkFkdk1hbmFnZXIucmVuZGVyRGlyZWN0KGUsdCxpLG4pfX19LHQuaW5pdFlhPWZ1bmN0aW9uKCl7cmV0dXJue0RpcmVjdDp0LmVPOG1qUnNhQ3h1NEtIT0N1KCksZUVjaWtSdk9iOWc6dC5lTzhtalJzYUN3ZWdXRGVhaVp3KCl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5ub29wPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5tYXA9ZnVuY3Rpb24oZSx0LGkpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZS5sZW5ndGgpLG89MDtvPGUubGVuZ3RoO28rKyluW29dPXQuY2FsbChpLGVbb10sbyxlKTtyZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX07ZnVuY3Rpb24gbyhlKXt2YXIgdD0oMCxpKDk5KS5wYXJzZUJsb2NrSWQpKGUuYmxvY2tJZCksbz1uKHt9LGUpO3JldHVybiBvLnByZXBhcmVkP286KG8ub25SZW5kZXI9KDAsaSgzMikuaXNvbGF0ZSkoZS5vblJlbmRlciksby5vbkhpZGU9KDAsaSgzMikuaXNvbGF0ZSkoZS5vbkhpZGUpLG8ucGFnZUlkPXQucGFnZUlkLG8uYmxvY2tJbXBJZD10LmltcElkLG8uc3RhdElkPW8uYmxvY2tJbXBJZCxvLnBhcnRuZXJTdGF0SWQ9ZS5zdGF0SWQsby5nZW89aSgxMDApLmdldFZhbGlkR2VvKG8uZ2VvKSxvLmRpc2FibGVIaWdobGlnaHQ9ITA9PT1vLmRpc2FibGVIaWdobGlnaHQsby5wcmVwYXJlZD0hMCxjKG8pKX12YXIgcj0oMCxpKDEyKS5nZXRZYUNvbnRleHQpKCkuaXNBbGxvd2VkUmVwZWF0QWRzLGE9dm9pZCAwPT09cj9mdW5jdGlvbihlLHQpe3JldHVybiB0fTpyLHM9KDAsaSgyMSkuaXNIb3N0SW5MaXN0KSh3aW5kb3csWyJ5YW5kZXhUdiJdKSxsPSgwLGkoMjEpLmlzSG9zdEluTGlzdCkod2luZG93LFsiYXZpdG8iLCJhdml0b01vYmlsZSJdKTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUuYWxsb3dSZXBlYXRBZHM7cmV0dXJuIHQ9dD8oMCxpKDM1MCkucGFyc2VBbGxvd1JlcGVhdEFkcykodCk6YShlLnBhZ2VJZCwhMSk/e21heFNraXBTaXplOjAsY3VzdG9tOiEwfTpzP3ttYXhTa2lwU2l6ZTo5LGN1c3RvbTohMH06bD97bWF4U2tpcFNpemU6MjAsY3VzdG9tOiEwfTp7c2NyZWVuOmkoMTA3KS5pc01vYmlsZT8zOjJ9LGUuYWxsb3dSZXBlYXRBZHM9dCxlfWUuZXhwb3J0cz17Z2V0UmVuZGVySWQ6ZnVuY3Rpb24oZSl7cmV0dXJuKGUuYmxvY2tJZHx8ZS5yZW5kZXJUbykrIiMiKyhlLnBhZ2VOdW1iZXJ8fCIiKX0scGFyc2VCbG9ja0lkOmkoOTkpLnBhcnNlQmxvY2tJZCxwcmVwYXJlRGlyZWN0Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0LG49KDAsaSg5OSkucGFyc2VCbG9ja0lkKShlLmJsb2NrSWQpLHI9byhlKTtyZXR1cm4gci5wcm9kdWN0PSh0PW4ucHJvZHVjdCx7RDppKDYpLlBST0RVQ1RTLkRJUkVDVCxQOmkoNikuUFJPRFVDVFMuUFJFTUlVTSxTOmkoNikuUFJPRFVDVFMuU1RSSVBFfVt0XSkscn0scHJlcGFyZUZ1bGxzY3JlZW5Db25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaSg5OSkucGFyc2VCbG9ja0lkKShlLmJsb2NrSWQpLG89bih7fSxlKTtyZXR1cm57cGFnZUlkOnQucGFnZUlkLGJsb2NrSW1wSWQ6dC5pbXBJZCxvblZpZGVvU3RhcnQ6KDAsaSg3KS5pc0Z1bmN0aW9uKShvLm9uVmlkZW9TdGFydCk/KDAsaSgzMikuaXNvbGF0ZSkoby5vblZpZGVvU3RhcnQpOnZvaWQgMCxvblZpZGVvRW5kOigwLGkoNykuaXNGdW5jdGlvbikoby5vblZpZGVvRW5kKT8oMCxpKDMyKS5pc29sYXRlKShvLm9uVmlkZW9FbmQpOnZvaWQgMCxnZW86aSgxMDApLmdldFZhbGlkR2VvKG8uZ2VvKSx1c2VyQ29uZmlnOm99fSxwcmVwYXJlSW5wYWdlQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLGkoOTkpLnBhcnNlQmxvY2tJZCkoZS5ibG9ja0lkKSxvPW4oe30sZSk7cmV0dXJue3BhcmFtczp7cGFydG5lcklkOnQucGFnZUlkLGNhdGVnb3J5OnQuaW1wSWQscmVuZGVyVG86by5yZW5kZXJUb30saW5wYWdlOm8uaW5wYWdlfHx7fX19LHByZXBhcmVJbnRlcm5hbENvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD0oMCxpKDk5KS5wYXJzZUJsb2NrSWQpKGUuYmxvY2tJZCksbz1uKHt9LGUpO3JldHVybiBvLm9uUmVuZGVyPSgwLGkoMzIpLmlzb2xhdGUpKG8ub25SZW5kZXIpLG8ub25IaWRlPSgwLGkoMzIpLmlzb2xhdGUpKG8ub25IaWRlKSxvLnBhZ2VJZD10LnBhZ2VJZCxvLmludGVybmFsVHlwZT10LmltcElkLnRvTG93ZXJDYXNlKCksby5wcm9kdWN0PWkoNikuUFJPRFVDVFMuSU5URVJOQUwsb30scHJlcGFyZU9sZERpcmVjdENvbmZpZzpmdW5jdGlvbihlLHQsbil7dmFyIG89dm9pZCAwO24uYWRfZm9ybWF0PT09aSg2KS5QUk9EVUNUUy5ESVJFQ1QmJihvPW4uZ2VvX2xhdHx8bi5nZW9fbG9uZz97bGF0Om4uZ2VvX2xhdCxsb25nOm4uZ2VvX2xvbmd9Om4uZ2VvKTt2YXIgcj17cGFnZUlkOmUscmVuZGVyVG86dCxkYXRhOm4uZGF0YSxncmFiOm4uZ3JhYixzZWFyY2hUZXh0Om4uc2VhcmNoX3RleHQsc2VhcmNoUGFnZU51bWJlcjpuLnNlYXJjaF9wYWdlX251bWJlcixsYW5nOm4ubGFuZyxvblJlbmRlcjooMCxpKDMyKS5pc29sYXRlKShuLm9uX3JlbmRlciksb25IaWRlOigwLGkoMzIpLmlzb2xhdGUpKG4ub25faGlkZSkscHJvZHVjdDpuLmFkX2Zvcm1hdCxhZGFwdGl2ZVR5cGU6bi5hZGFwdGl2ZV90eXBlLGdlbzppKDEwMCkuZ2V0VmFsaWRHZW8obyksZGlzYWJsZUhpZ2hsaWdodDohMD09PW4uZGlzYWJsZV9oaWdobGlnaHQsYWxsb3dSZXBlYXRBZHM6bi5hbGxvd1JlcGVhdEFkcyxjc3BOb25jZTpuLmNzcF9ub25jZSxhZGRpdGlvbmFsQmFubmVyczpuLmFkZGl0aW9uYWxfYmFubmVycyxwYWdlTnVtYmVyOm4ucGFnZV9udW1iZXIsZXh0UGFyYW1zOm4uZXh0X3BhcmFtcyxidW5kbGU6bi5idW5kbGUsYWRmb3hleHA6bi5hZGZveGV4cH07bi50eXBlPT09aSg2KS5QUk9EVUNUUy5TVFJJUEUmJihyLnByb2R1Y3Q9aSg2KS5QUk9EVUNUUy5TVFJJUEUpO3ZhciBhPXBhcnNlSW50KG4uc3RhdF9pZCwxMCk7cmV0dXJuIGlzTmFOKGEpfHwoci5zdGF0SWQ9YSVNYXRoLnBvdygyLDI0KStNYXRoLnBvdygyLDMwKSxyLnBhcnRuZXJTdGF0SWQ9YSksYyhyKX0scHJlcGFyZVJ0YkNvbmZpZzpvLHByZXBhcmVEaXN0cmlidXRpb25Db25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9bih7fSxlKTtyZXR1cm4gdC5vblJlbmRlcj0oMCxpKDMyKS5pc29sYXRlKSh0Lm9uUmVuZGVyKSx0Lm9uSGlkZT0oMCxpKDMyKS5pc29sYXRlKSh0Lm9uSGlkZSksdC5vblJlc2l6ZT0oMCxpKDMyKS5pc29sYXRlKSh0Lm9uUmVzaXplKSx0fSxwcm9kdWN0czppKDczNykucHJvZHVjdHN9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlWyJTU1AiXT0ic3NwIixlWyJtb2JpbGVTZGsiXT0ibXNkayJ9KG49dC5idW5kbGVUeXBlc3x8KHQuYnVuZGxlVHlwZXM9e30pKTt2YXIgbz0iYnVuZGxlVHlwZSI7dC5zYXZlQnVuZGxlVHlwZT1mdW5jdGlvbihlKXt2YXIgdDtpKDEyKS5nZXRHbG9iYWxWYXJpYWJsZShvKXx8KGkoMjcpLmlzT2JqZWN0KGUpPyhyPWUsdD1yJiZyLmNvbW1vbiYmci5jb21tb24uc3NwSWQmJkJvb2xlYW4oTnVtYmVyKHIuY29tbW9uLnNzcElkKSk/bi5TU1A6ciYmci5jb21tb24mJjE9PT1OdW1iZXIoci5jb21tb24uaXNNb2JpbGVTZGspP24ubW9iaWxlU2RrOnZvaWQgMCk6aSgxOSkuaXNTdHJpbmcoZSkmJih0PWZ1bmN0aW9uKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlInNzcCI6dD1uLlNTUDticmVhaztjYXNlIm1vYnNkayI6dD1uLm1vYmlsZVNkazticmVhaztkZWZhdWx0OnQ9dm9pZCAwfXJldHVybiB0fShlKSksdCYmaSgxMikuc2V0R2xvYmFsVmFyaWFibGUobyx0KSk7dmFyIHJ9LHQuY2hlY2tCdW5kbGVUeXBlPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIG4uU1NQOnJldHVybiBpKDQzNykuaXNTc3BQYWdlKHdpbmRvdyl8fGkoMTIpLmdldEdsb2JhbFZhcmlhYmxlKG8pPT09ZTtkZWZhdWx0OnJldHVybiBpKDEyKS5nZXRHbG9iYWxWYXJpYWJsZShvKT09PWV9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe2UmJmUudW4oKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5vbj1mdW5jdGlvbihlLHQsbyxyLGEpe2lmKCFlfHwhbylyZXR1cm4gbnVsbDt2YXIgcyxsPWkoMSkucHJvdGVjdCgiaGFuZGxlcjoiK3QsbyxyKSxjPWkoNDE2KS5maXhFdmVudChsKSx1PXt1bjpmdW5jdGlvbigpe2koMTMxKS5yZW1vdmVFdmVudExpc3RlbmVyRnVuY3Rpb24oZSx0LGMpfX07cmV0dXJuIGEmJmEub25jZSYmIWkoMjM5KS5pc1N1cHBvcnRzT25jZU9wdGlvbiYmKHM9YyxjPWZ1bmN0aW9uKGUpe3MuY2FsbCh0aGlzLGUpLG4odSl9KSxpKDIzOSkuaXNTdXBwb3J0c1Bhc3NpdmVPcHRpb24/aSgxMzEpLmFkZEV2ZW50TGlzdGVuZXJGdW5jdGlvbihlLHQsYyxhKTppKDEzMSkuYWRkRXZlbnRMaXN0ZW5lckZ1bmN0aW9uKGUsdCxjLGEmJmEuY2FwdHVyZSksdX0sdC51bj1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUhvc3RBc3NlcnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFJlZ0V4cChbIig/OlxcL3wlMkZ8XikiLCIoPzpbXFx3LV9cXC5dKz9cXC4pPyIsIig/OiIrZSsiKSIsIig/OlxcL3wlMkZ8JCkiXS5qb2luKCIiKSwiaSIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2VbIlJFRCJdPTBdPSJSRUQiLGVbZVsiR1JFRU4iXT0xXT0iR1JFRU4iLGVbZVsiQkxVRSJdPTJdPSJCTFVFIixlW2VbIkFMUEhBIl09M109IkFMUEhBIn0odC5SR0JBX01PREVMfHwodC5SR0JBX01PREVMPXt9KSksZnVuY3Rpb24oZSl7ZVtlWyJIVUUiXT0wXT0iSFVFIixlW2VbIlNBVFVSQVRJT04iXT0xXT0iU0FUVVJBVElPTiIsZVtlWyJMSUdIVE5FU1MiXT0yXT0iTElHSFRORVNTIn0odC5IU0xfTU9ERUx8fCh0LkhTTF9NT0RFTD17fSkpLGZ1bmN0aW9uKGUpe2VbZVsiSFVFIl09MF09IkhVRSIsZVtlWyJTQVRVUkFUSU9OIl09MV09IlNBVFVSQVRJT04iLGVbZVsiVkFMVUUiXT0yXT0iVkFMVUUifSh0LkhTVl9NT0RFTHx8KHQuSFNWX01PREVMPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QudG9wUGFydG5lcnM9WyJhdml0byIsImF2aXRvSyIsImdpc21ldGVvIiwibWFpbFJ1Iiwib2siLCJzcG9ydHNNYWlsIiwidmsiLCJ5YW5kZXhOZXdzIiwieWFuZGV4UG9nb2RhIiwieWFuZGV4VHYiXSx0LmV4Y2x1ZGVIb3N0cz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj10LnRvcFBhcnRuZXJzKSxvPW4scj1lLGkoMjIpLmZpbHRlcihvLGZ1bmN0aW9uKGUpe3JldHVybiFpKDEzMykuaW5jbHVkZXMocixlKX0pO3ZhciBvLHJ9LHQuaXNIb3N0SW5MaXN0PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09ZSYmKGU9d2luZG93KSx2b2lkIDA9PT1uJiYobj10LnRvcFBhcnRuZXJzKTt2YXIgbz1pKDkwKS5nZXRIb3N0V2l0aFBhdGgoZSk7aWYoaSgxNDcpLmlzVHVyYm9QYWdlKGUpKXJldHVybiExO2Zvcih2YXIgcj1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sbD1pKDUwNylbc107cj1yLmNvbmNhdChsKX1mb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKylpZihyW2NdLnRlc3QobykpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZpbHRlcj1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHI9ZVtvXTt0LmNhbGwoaSxyLG8sZSkmJm4ucHVzaChyKX1yZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaW5kZXhPZj1mdW5jdGlvbihlLHQsaSxvKXt2b2lkIDA9PT1pJiYoaT0wKSx2b2lkIDA9PT1vJiYobz1uKTtmb3IodmFyIHI9aTtyPGUubGVuZ3RoO3IrKylpZihvKGVbcl0sdCkpcmV0dXJuIHI7cmV0dXJuLTF9O3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaG9zdD1lLmhvc3R8fCIiLHRoaXMucGF0aD1lLnBhdGh8fCIiLHRoaXMucGFyYW1zPSIiLGUucGFyYW1zJiZ0aGlzLmFwcGVuZFBhcmFtcyhlLnBhcmFtcyl9cmV0dXJuIGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHtob3N0OnRoaXMuaG9zdCxwYXRoOnRoaXMucGF0aCxwYXJhbXM6dGhpcy5wYXJhbXN9KX0sZS5wcm90b3R5cGUuZ2V0Q3VycmVudExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJhd1VybCgpLmxlbmd0aH0sZS5wcm90b3R5cGUuYXBwZW5kUGFyYW1zPWZ1bmN0aW9uKGUpe3JldHVybiBpKDI3KS5pc09iamVjdChlKSYmaSg0MjQpLmlzRW1wdHkoZSk/dGhpczooIiIhPT10aGlzLnBhcmFtcyYmKHRoaXMucGFyYW1zPWkoMTkxKS5hZGREZWxpbWl0ZXIodGhpcy5wYXJhbXMsIiIsIiYiKSksaSgxOSkuaXNTdHJpbmcoZSk/dGhpcy5wYXJhbXMrPWkoMTkyKS5yZW1vdmVEZWxpbWl0ZXIoaSgxOTIpLnJlbW92ZURlbGltaXRlcihlLCI/IiwiIiksIiYiLCIiKTppKDI3KS5pc09iamVjdChlKSYmKHRoaXMucGFyYW1zKz1pKDQyNSkudG9RdWVyeVBhcmFtcyhlKSksdGhpcyl9LGUucHJvdG90eXBlLmdldFVybD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UmF3VXJsKCksdD1pKDE5MykuZW5jb2RlO3JldHVybiBlP3QoZSk6ZX0sZS5wcm90b3R5cGUuZ2V0UmF3VXJsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ob3N0O2lmKHRoaXMucGF0aCYmKGU9aSgxOTEpLmFkZERlbGltaXRlcihlLCIiLCIvIiksZSs9aSgxOTIpLnJlbW92ZURlbGltaXRlcihTdHJpbmcodGhpcy5wYXRoKSwiLyIpKSwiIiE9PXRoaXMucGFyYW1zKXt2YXIgdD0tMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiI7ZSs9aSgxOTEpLmFkZERlbGltaXRlcih0aGlzLnBhcmFtcyx0LCIiKX1yZXR1cm4gZX0sZX0oKTt0LlVybD1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlWyJBZHZNYW5hZ2VyTG9hZGVyIl09IkFkdk1hbmFnZXJMb2FkZXIiLGVbIkFkdk1hbmFnZXJSZW5kZXIiXT0iQWR2TWFuYWdlclJlbmRlciIsZVsiUmVhZHlGb3JSZW5kZXJpbmciXT0iUmVhZHlGb3JSZW5kZXJpbmciLGVbIlN0YXJ0RG9tUmVuZGVyaW5nIl09IlN0YXJ0RG9tUmVuZGVyaW5nIixlWyJNb3VudGVkIl09Ik1vdW50ZWQiLGVbIkxheW91dCJdPSJMYXlvdXQiLGVbIkRpc3BsYXllZCJdPSJEaXNwbGF5ZWQiLGVbIlBvc3RSZW5kZXJpbmciXT0iUG9zdFJlbmRlcmluZyIsZVsiUmVhZHkiXT0iUmVhZHkifSh0LlJlbmRlck1hcmtzfHwodC5SZW5kZXJNYXJrcz17fSkpLHQuc2V0TWFyaz1mdW5jdGlvbihlLHQpe3RyeXt2YXIgaT1lKyJfIit0O3BlcmZvcm1hbmNlLm1hcmsoaSl9Y2F0Y2goZSl7fX0sdC5jbGVhck1hcmtzPWZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKCJtYXJrIik7aSg1KS5mb3JFYWNoKHQsZnVuY3Rpb24odCl7MD09PXQubmFtZS5pbmRleE9mKGUpJiZwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHQubmFtZSl9KX1jYXRjaChlKXt9fSx0LmdldE1hcmtzQnlOYW1lPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShlLCJtYXJrIil9Y2F0Y2goZSl7cmV0dXJuW119fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49Il9fbG9uZ0V4cGVyaW1lbnQiLG89bG9jYXRpb24uaG9zdCxyPWkoMjIpLmZpbHRlcihpKDQ5MikuaWdub3JlSG9zdHMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVzdChvKX0pLmxlbmd0aD4wLGE9aSg0NSkuc29tZShbL15cdys6XC9cL1teP1wvXSphdml0by8sL15cdys6XC9cL1teP1wvXSpicm96ZW5bLVx3XSpcLnlhbmRleFwucnUvLC9eXHcrOlwvXC9bXj9cL10qeWFuZGV4Wy5cd10rXC8ocG9nb2RhfHdlYXRoZXJ8aGF2YSkvLC9eXHcrOlwvXC9bXj9cL10qbmV0YnluZXRcLndpLWZpXC5ydS9dLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRlc3QobG9jYXRpb24uaHJlZil9KSxzPVtbe2lkOmkoOCkuZXhwZXJpbWVudElkcy5zc1NraXBUb2tlbi5FTkFCTEVELHBlcmNlbnQ6YT85NjowfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnNzU2tpcFRva2VuLldJREVfTE9HLHBlcmNlbnQ6MX0se2lkOmkoOCkuZXhwZXJpbWVudElkcy5zc1NraXBUb2tlbi5DTElFTlQscGVyY2VudDoxfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnNzU2tpcFRva2VuLlNFUlZFUl9NQU5VQUwscGVyY2VudDoxfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnNzU2tpcFRva2VuLlNFUlZFUl9BVVRPLHBlcmNlbnQ6MX1dLFt7aWQ6aSg4KS5leHBlcmltZW50SWRzLnByaWNlSW5UZXh0LkVOQUJMRUQscGVyY2VudDo1MH0se2lkOmkoOCkuZXhwZXJpbWVudElkcy5wcmljZUluVGV4dC5ESVNBQkxFRCxwZXJjZW50OjUwfV0sW3tpZDppKDgpLmV4cGVyaW1lbnRJZHMuZ2VvU2tpbi5WMSxwZXJjZW50OjMzfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLmdlb1NraW4uVjIscGVyY2VudDozM30se2lkOmkoOCkuZXhwZXJpbWVudElkcy5nZW9Ta2luLlYzLHBlcmNlbnQ6MzN9LHtpZDppKDgpLmV4cGVyaW1lbnRJZHMuZ2VvU2tpbi5ESVNBQkxFRCxwZXJjZW50OjF9XSxbe2lkOmkoOCkuZXhwZXJpbWVudElkcy5zbWFydENyb3AuQUxMT1dFRCxwZXJjZW50Ojk2fSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnNtYXJ0Q3JvcC5ESVNBQkxFRCxwZXJjZW50OjJ9LHtpZDppKDgpLmV4cGVyaW1lbnRJZHMuc21hcnRDcm9wLkVOQUJMRUQscGVyY2VudDoyfV0sW3tpZDppKDgpLmV4cGVyaW1lbnRJZHMuc2ltaWxhckJ1dHRvbi5FTkFCTEVELHBlcmNlbnQ6MTAwfV0sW3tpZDppKDgpLmV4cGVyaW1lbnRJZHMuc2VuZEJlYWNvbkV4cC5YSFIscGVyY2VudDowfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnNlbmRCZWFjb25FeHAuU0VOREJFQUNPTixwZXJjZW50OjB9LHtpZDppKDgpLmV4cGVyaW1lbnRJZHMuc2VuZEJlYWNvbkV4cC5DT05UUk9MLHBlcmNlbnQ6MH0se2lkOmkoOCkuZXhwZXJpbWVudElkcy5zZW5kQmVhY29uRXhwLkRJU0FCTEVELHBlcmNlbnQ6MTAwfV0sW3tpZDppKDgpLmV4cGVyaW1lbnRJZHMuY2xpY2tEZWxheVdpRmkuRU5BQkxFRCxwZXJjZW50OjUwfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLmNsaWNrRGVsYXlXaUZpLkRJU0FCTEVELHBlcmNlbnQ6NTB9XSxbe2lkOmkoOCkuZXhwZXJpbWVudElkcy5tb3Rpb25CaWdQaWN0dXJlRXhwLkRJU0FCTEVELHBlcmNlbnQ6OTB9LHtpZDppKDgpLmV4cGVyaW1lbnRJZHMubW90aW9uQmlnUGljdHVyZUV4cC5CSUdfUElDVFVSRSxwZXJjZW50OjV9LHtpZDppKDgpLmV4cGVyaW1lbnRJZHMubW90aW9uQmlnUGljdHVyZUV4cC5TTUFMTF9QSUNUVVJFLHBlcmNlbnQ6NX1dLFt7aWQ6aSg4KS5leHBlcmltZW50SWRzLnJlbW92ZUJpbGxib2FyZEN1c3RvbUZvbnQuRU5BQkxFRCxwZXJjZW50OjUwfSx7aWQ6aSg4KS5leHBlcmltZW50SWRzLnJlbW92ZUJpbGxib2FyZEN1c3RvbUZvbnQuRElTQUJMRUQscGVyY2VudDo1MH1dXTt0LmluaXRMb25nRXhwZXJpbWVudD1mdW5jdGlvbigpe3ZhciBlPW5ldyhpKDQ5MykuTG9uZ0V4cGVyaW1lbnQpKHMpO2koMTIpLnNldEdsb2JhbFZhcmlhYmxlKG4sZSl9LHQuaXNMb25nRXhwZXJpbWVudD1mdW5jdGlvbihlKXtpZihyKXJldHVybiExO3ZhciB0PWkoMTIpLmdldEdsb2JhbFZhcmlhYmxlKG4pO3JldHVybiEhdCYmdC5pc0N1cnJlbnRWZXJzaW9uKGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNPYmplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwPT09ZT8idW5kZWZpbmVkIjpuKGUpO3JldHVybiBCb29sZWFuKGUpJiYoIm9iamVjdCI9PT10fHwiZnVuY3Rpb24iPT09dCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPTk3LG89L3lhdGFnL2dpLHI9Lyg/OiJ8XHMpKyg/OmlkfGNsYXNzKT1bIiddKC4qPylbIiddL2csYT0vPFwvP1thLXpdW1xzXFNdKj4vaTt2YXIgcz0iNDlIVFJJVlFOdCIsbD0hMSxjPSExLHU9e307ZnVuY3Rpb24gZChlKXtpZighZSlyZXR1cm4iIjt2YXIgdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT01MzgxLG89ZS5sZW5ndGgrdC5sZW5ndGgscj0iIit0K2U7bzspaT0zMyppXnIuY2hhckNvZGVBdCgtLW8pO3JldHVybiBpPj4+PTAsIiIrU3RyaW5nLmZyb21DaGFyQ29kZShpJTI1K24pK2kudG9TdHJpbmcoMTYpfShlLHMpO3JldHVybiBjJiYodD10KyItLSIrZSksbCYmKHQ9ZSksdH1mdW5jdGlvbiBwKGUpe3JldHVybiBlLnJlcGxhY2UobywiZGl2Iil9ZnVuY3Rpb24gZihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmIWFyZ3VtZW50c1syXT9lOihlPWUucmVwbGFjZSgvKD86Xnx9KSguKj8pey9nLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1sjLl1bYS16XGRcLV9dK1teOiwuXHN7XS9naSxmdW5jdGlvbihlKXtyZXR1cm4iIitlWzBdK2goZS5zbGljZSgxKSl9KX0pLHQmJihlPXAoZSkpLGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIHUuaGFzT3duUHJvcGVydHkoZSk/dVtlXTp1W2VdPWQoZSl9bCYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuZW5jb2RlU3R5bGU9Zix3aW5kb3cuZ2V0QWxpYXM9aCksZS5leHBvcnRzPXtlbmNvZGVUZW1wbGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gYS50ZXN0KGUpP3AoZT1lLnJlcGxhY2UocixmdW5jdGlvbihlLHQpe2Zvcih2YXIgaT10LnNwbGl0KCIgIiksbj0wO248aS5sZW5ndGg7bisrKWU9ZS5yZXBsYWNlKG5ldyBSZWdFeHAoaVtuXSsiKD8hWy1cXHddKSIsImciKSxoKGlbbl0pKTtyZXR1cm4gZX0pKTplfSxlbmNvZGVTdHlsZTpmLHJlcGxhY2VZYXRhZzpwLGdldEFsaWFzOmgsZ2VuZXJhdGVBbGlhczpkLGVuY29kZVNlbGVjdG9yczpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bIy5dW2EtelxkXC1fXStbXjosLlxze10vZ2ksZnVuY3Rpb24oZSl7cmV0dXJuL19fKFswLTldKz8pX18vZy50ZXN0KGUpP2U6IiIrZVswXStoKGUuc2xpY2UoMSkpfSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89IjtmdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD0iIixpPTA7aTxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckNvZGVBdChpKyspLHI9ZS5jaGFyQ29kZUF0KGkrKyksYT1lLmNoYXJDb2RlQXQoaSsrKSxzPW8+PjIsbD0oMyZvKTw8NHxyPj40LGM9KDE1JnIpPDwyfGE+PjYsdT02MyZhO2lzTmFOKHIpP2M9dT02NDppc05hTihhKSYmKHU9NjQpLHQ9dCtuLmNoYXJBdChzKStuLmNoYXJBdChsKStuLmNoYXJBdChjKStuLmNoYXJBdCh1KX1yZXR1cm4gdH1mdW5jdGlvbiByKGUpe3ZhciB0PVtdLGk9MDtmb3IoZT1lLnJlcGxhY2UoL1teQS1aYS16MC05XC1fPV0vZywiIik7aTxlLmxlbmd0aDspe3ZhciBvPW4uaW5kZXhPZihlLmNoYXJBdChpKyspKSxyPW4uaW5kZXhPZihlLmNoYXJBdChpKyspKSxhPW4uaW5kZXhPZihlLmNoYXJBdChpKyspKSxzPW4uaW5kZXhPZihlLmNoYXJBdChpKyspKSxsPW88PDJ8cj4+NCxjPSgxNSZyKTw8NHxhPj4yLHU9KDMmYSk8PDZ8czt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShsKSksNjQhPT1hJiZ0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjKSksNjQhPT1zJiZ0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1KSl9cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9W10saT0wO2k8ZS5sZW5ndGg7KXt2YXIgbj1lLmNoYXJDb2RlQXQoaSk7aWYobjwxMjgpdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobikpLGkrKztlbHNlIGlmKG4+MTkxJiZuPDIyNCl7dmFyIG89ZS5jaGFyQ29kZUF0KGkrMSk7dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJm4pPDw2fDYzJm8pKSxpKz0yfWVsc2V7bz1lLmNoYXJDb2RlQXQoaSsxKTt2YXIgcj1lLmNoYXJDb2RlQXQoaSsyKTt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmbik8PDEyfCg2MyZvKTw8Nnw2MyZyKSksaSs9M319cmV0dXJuIHQuam9pbigiIil9dC5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MWU2KSxvKGZ1bmN0aW9uKGUsdCl7ZT1lLnJlcGxhY2UoL1xyXG4vZywiXG4iKTtmb3IodmFyIGk9IiIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lLmNoYXJDb2RlQXQobikscj12b2lkIDA7aWYobzwxMjg/cj1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pOm8+MTI3JiZvPDIwNDg/KHI9U3RyaW5nLmZyb21DaGFyQ29kZShvPj42fDE5Mikscis9U3RyaW5nLmZyb21DaGFyQ29kZSg2MyZvfDEyOCkpOihyPVN0cmluZy5mcm9tQ2hhckNvZGUobz4+MTJ8MjI0KSxyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8+PjYmNjN8MTI4KSxyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDYzJm98MTI4KSksaS5sZW5ndGgrci5sZW5ndGg+dClicmVhaztpKz1yfXJldHVybiBpfShlLDMqdC80fDApKX0sdC5lbmNvZGVVSW50OFN0cmluZz1vLHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBhKHIoZSkpfSx0LmRlY29kZVVJbnQ4U3RyaW5nPXIsdC51dGY4RGVjb2RlPWEsdC5jcm9wRXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLz0rJC8sIiIpfSx0LmFkZEVxdWFscz1mdW5jdGlvbihlKXtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaTE4bj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGkoNDczKS5nZXRTdHJpbmcoaSg0NzQpLmxhYmVscyxlLHQsbil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm9uY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXt0PWZ1bmN0aW9uKCl7cmV0dXJuIGl9O3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpfTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaSgxKS5wcm90ZWN0LmxvZz1pKDkpLmxvZ2dlci53YXJuLHQuaXNvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaSgxKS5wcm90ZWN0KCJpc29sYXRlIixlfHxpKDEzKS5ub29wLHRoaXMsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50UHJvdGVjdD0hMH0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10LmxlZnQsbj10LnJpZ2h0LG89dC50b3Ascj10LmJvdHRvbTtyZXR1cm57bGVmdDppLHJpZ2h0Om4sdG9wOm8sYm90dG9tOnIsd2lkdGg6bi1pLGhlaWdodDpyLW99fWNhdGNoKGUpe3JldHVybntsZWZ0OjAsd2lkdGg6MCx0b3A6MCxoZWlnaHQ6MCxyaWdodDowLGJvdHRvbTowfX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDIyKTt0LmdldExpbmVhckZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBvPSh0LW4pLyhlLWkpLHI9dC1vKmU7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKmUrcn19LHQuZ2V0TGltaXRGdW5jdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihpLHQpKX19LHQuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uPWZ1bmN0aW9uKGUsaSxuLG8pe3ZhciByPXQuZ2V0TGluZWFyRnVuY3Rpb24oZSxpLG4sbyksYT10LmdldExpbWl0RnVuY3Rpb24oaSxvKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtyZXR1cm4gYSh0KX19LHQuZ2V0SXRlbVdpdGhNYXhXZWlnaHQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGksbj0tMS8wLG89MCxyPWU7bzxyLmxlbmd0aDtvKyspe3ZhciBhPXJbb10scz10KGEpO3M+PW4mJihuPXMsaT1hKX1yZXR1cm4gaX0sdC5nZXRCZXN0Q292ZXJFbGVtZW50PWZ1bmN0aW9uKGUsaSl7dmFyIG89bi5maWx0ZXIoaSxmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQ+PWUuaGVpZ2h0JiZ0LndpZHRoPj1lLndpZHRofSkscj1lLndpZHRoL2UuaGVpZ2h0LGE9dC5nZXRJdGVtV2l0aE1heFdlaWdodChvLGZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgqZS5oZWlnaHQsaT1lLndpZHRoL2UuaGVpZ2h0O3JldHVybi10Kk1hdGgubWF4KHIvaSxpL3IpfSk7cmV0dXJuIGF8fChhfHx0LmdldEl0ZW1XaXRoTWF4V2VpZ2h0KGksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHQud2lkdGgsZS53aWR0aCkqTWF0aC5taW4odC5oZWlnaHQsZS5oZWlnaHQpfSkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pLHI9ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1pKDMpLHM9aSg2NiksbD1pKDEwKSxjPWkoMTgxKSx1PShpKDI0KSxpKDc0KSxpKDQ5OCkpLGQ9ITE7ZD1pKDExKS5jb25maWcuaGlkZUxpbmtzO3ZhciBwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuaW5pdFByb3BzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRhcmdldFVybD1lLmhyZWYsdGhpcy5jdXN0b21zU3R5bGU9ZS5zdHlsZSxlfSx0LnByb3RvdHlwZS5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnByb3BzPXRoaXMuY3JlYXRlUHJvcHMoKSxlLnByb3RvdHlwZS5iZWZvcmVSZW5kZXIuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXI9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5hZnRlclJlbmRlci5jYWxsKHRoaXMpLHRoaXMucHVzaFN0eWxlcyh1KX0sdC5wcm90b3R5cGUuY3JlYXRlUHJvcHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzO2UudHlwZT1lLnR5cGV8fCJzZWNvbmRhcnkiO3ZhciB0PXMuY2xhc3NOYW1lc0ZhY3RvcnkoZS5jbGFzc05hbWVzKSxpPVN0cmluZyhlLnRhcmdldCl8fCJfYmxhbmsiLG49ZS50eXBlPyJ5YXAtbGlua19fIitlLnR5cGU6IiI7cmV0dXJuIGRlbGV0ZSBlLmNsYXNzTmFtZSxyKHIoe30sZSkse2NsYXNzOnQoZVsiY2xhc3MiXSxuKSx0YXJnZXQ6aX0pfSx0LnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWRkQ2xpY2tDb29yZHMoKTtlLmhyZWY9dCx0aGlzLmZpcmVFdmVudCgiY2xpY2s6bGluayIsZSx0aGlzLnByb3BzLnR5cGUpLGUuZGVmYXVsdFByZXZlbnRlZHx8dGhpcy5vcGVuTGluayhlKX0sdC5wcm90b3R5cGUub3Blbkxpbms9ZnVuY3Rpb24oZSl7ZD9jLm9wZW4odGhpcy50YXJnZXRVcmwuZ2V0UmVkaXJlY3QoKSk6Yy5vcGVuKGUpfSx0LnByb3RvdHlwZS5vbk1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRFbGVtZW50KCk7ZSYmdGhpcy5iaW5kKGUsImNsaWNrIix0aGlzLm9uQ2xpY2spfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFdyYXBwZXIoKTt0JiZ0LnNldFN0eWxlKGUpfSx0LnByb3RvdHlwZS5nZXRXcmFwcGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJsaW5rLXdyYXBwZXIiKX0sdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbihlLHQpe3ZhciBpPXtjbGFzczplKHRbImNsYXNzIl0sZSgpKSxzdHlsZTp0aGlzLmN1c3RvbXNTdHlsZSxyZXNvdXJjZUlkOiJsaW5rLXdyYXBwZXIifTtyZXR1cm4gZD9hWyJkZWZhdWx0Il0uY3JlYXRlKCJkaXYiLHIoe30saSksdGhpcy5nZXRDaGlsZHJlbigpKTphWyJkZWZhdWx0Il0uY3JlYXRlKCJhIixyKHt9LGkse2hyZWY6dGhpcy50YXJnZXRVcmwuZ2V0UmVkaXJlY3QoKSx0YXJnZXQ6Il9ibGFuayJ9KSx0aGlzLmdldENoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5pc0xvZ29MaW5rPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50YXJnZXRVcmwuZ2V0UmVkaXJlY3QoKTtyZXR1cm4hIWUmJmUuaW5kZXhPZigiZGlyZWN0LnlhbmRleC5ydSIpPjB9LHQucHJvdG90eXBlLmFkZENsaWNrQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRVcmxXaXRoQ29vcmRzKCk7cmV0dXJuIHRoaXMuc2V0SHJlZlRvV3JhcHBlcihlKSxlfSx0LnByb3RvdHlwZS5zZXRIcmVmVG9XcmFwcGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0V3JhcHBlcigpLGk9dCYmdC5nZXRFbGVtZW50KCk7aSYmaS5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpfSx0LnByb3RvdHlwZS5nZXRVcmxXaXRoQ29vcmRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50YXJnZXRVcmwuZ2V0UmVkaXJlY3QoKTtyZXR1cm4gdGhpcy5pc0xvZ29MaW5rKCksZX0sdH0obCk7dC5OZXdMaW5rPXB9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdzt0LmlzUXVpcmtzPWkoMjg3KS5nZXRJc1F1aXJrcyhuKSx0LmlzT3BlcmE9aSg0NTMpLmlzT3BlcmEobiksdC5pc09wZXJhTWluaT1pKDIwMCkuaXNPcGVyYU1pbmkobiksdC5pZVZlcnNpb249aSgxMTIpLmdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKG4pLHQuaXNJRTEwPTEwPT09dC5pZVZlcnNpb24sdC5pc0lFMTE9MTE9PT10LmllVmVyc2lvbix0LmlzSUU9dC5pZVZlcnNpb24+MCx0LmlzSUVRdWlya3M9aSgyODcpLmdldElzSUVRdWlya3MobiksdC5pc0VkZ2U9dC5pZVZlcnNpb24mJnQuaWVWZXJzaW9uPjExfHwhMSx0LmlzU2FmYXJpPWkoMjAxKS5nZXRJc1NhZmFyaShuKSx0LnNhZmFyaVZlcnNpb249aSg0NTUpLmdldFNhZmFyaVZlcnNpb24obiksdC5pc0ZpcmVmb3g9aSgyODkpLmlzRmlyZWZveChuKSx0LmlzQ2hyb21lPWkoMjkwKS5nZXRJc0Nocm9tZShuKSx0LmlzWWFCcm93c2VyPWkoMjAyKS5nZXRJc1lhQnJvd3NlcihuKSx0LmlzVUNCcm93c2VyPWkoMjkxKS5pc1VDQnJvd3NlcihuKSx0LmlzSU9TPWkoMTA4KS5nZXRJc0lPUyhuKSx0LmlPU1ZlcnNpb249aSg0NTYpLmdldElPU1ZlcnNpb24obiksdC5pc0FuZHJvaWQ9aSgyNDgpLmdldElmSXNBbmRyb2lkKG4pLHQuYW5kcm9pZFZlcnNpb249aSg0NTcpLmdldEFuZHJvaWRWZXJzaW9uKG4pLHQuaXNXaW5kb3dzUGhvbmU9aSgyOTIpLmlzV2luZG93c1Bob25lKG4pLHQuaXNNb2JpbGU9aSgyOTMpLmlzTW9iaWxlKG4pLHQuaXNQaG9uZT1pKDQ1OCkuaXNQaG9uZShuKSx0LmlzSERQSVNjcmVlbj1pKDI5NCkuaXNIRFBJU2NyZWVuKG4pLHQuZmxhc2hWZXI9WzAsMCwwXSx0LnRlc3RQcm9wZXJ0eT1pKDg4KS50ZXN0UHJvcGVydHksdC5nZXRCcm93c2VyTmFtZT1pKDI5NSkuZ2V0QnJvd3Nlck5hbWUsdC5nZXREZXZpY2VOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuKHQuaXNQaG9uZT8icGhvbmUiOnQuaXNNb2JpbGUmJiJ0YWJsZXQiKXx8ImRlc2t0b3AifSx0LnN1cHBvcnQ9e2Nzc0ZsZXg6aSgxNDMpLmlzQ3NzRmxleFN1cHBvcnRlZCxjc3NUcmFuc2Zvcm06aSgxNDMpLmlzQ3NzVHJhbnNmb3JtU3VwcG9ydGVkLGNzc1RyYW5zaXRpb246aSgxNDMpLmlzQ3NzVHJhbnNpdGlvblN1cHBvcnRlZCxjc3NGaWx0ZXJCbHVyOmkoMTQzKS5pc0Nzc0ZpbHRlckJsdXJTdXBwb3J0ZWQsdG91Y2g6aSgyNTYpLmlzVG91Y2hEZXZpY2UobikscG9zdE1lc3NhZ2U6aSg0NjApLmdldElzUG9zdE1lc3NhZ2VTdXBwb3J0ZWQobiksbG9uZ1VybHM6aSgyOTYpLmdldElzTG9uZ1VybFN1cHBvcnRlZChuKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2hlY2tOYXRpdmVDb2RlPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS50b1N0cmluZylyZXR1cm4hMTt2YXIgdD1lLnRvU3RyaW5nKCk7cmV0dXJuL1xbbmF0aXZlIGNvZGVcXS8udGVzdCh0KXx8L1wvXCogc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZSBcKlwvLy50ZXN0KHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LHI9KG49aSgxMDIpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07ZnVuY3Rpb24gYSgpe30oYT1vKHt9LGEsclsiZGVmYXVsdCJdKSkucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgbj1lLnNsaWNlKDAsMSksbz1lLnNsaWNlKDEpO3N3aXRjaChuKXtjYXNlIiMiOnJldHVybigwLGkoMTQ0KS5nZXRFbGVtZW50QnlJZCkobyk7Y2FzZSIuIjpyZXR1cm4gYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG8sdCk7ZGVmYXVsdDpyZXR1cm4oMCxpKDE0KS5tYXApKCh0fHxkb2N1bWVudCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSksZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX19LGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8ZG9jdW1lbnQsKDAsaSgzNykuY2hlY2tOYXRpdmVDb2RlKSh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoMCxpKDI5OSkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkoZSx0KSk7dmFyIG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpO3JldHVybigwLGkoMjIpLmZpbHRlcikobixmdW5jdGlvbih0KXtyZXR1cm4gYS5oYXNDbGFzcyh0LGUpfSl9O3ZhciBzPXJbImRlZmF1bHQiXS5zZXRTdHlsZTthLnNldEltcG9ydGFudENzc1Byb3BlcnR5PXJbImRlZmF1bHQiXS5zZXRTdHlsZT1mdW5jdGlvbihlLHQsbil7KDAsaSgyNykuaXNPYmplY3QpKHQpP3MoZSx0LCExKTpzKGUsdCxuLCExKX0sYS5nZXRXaW5kb3dTaXplPWkoMTQ1KS5nZXRXaW5kb3dTaXplLGEucmVtb3ZlPWkoNjMpLnJlbW92ZU5vZGVGcm9tUGFyZW50LGEuYXBwZW5kU3R5bGU9aSgxOTkpLmFwcGVuZFN0eWxlLGEuaXNPdmVybGFpZD1mdW5jdGlvbihlKXt2YXIgdD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdChlKTtpZighdHx8IWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnR8fGkoMzYpLmlzT3BlcmFNaW5pfHwhZS5jb250YWlucylyZXR1cm4hMTt2YXIgbj1lLmNsaWVudFdpZHRoLzIsbz1lLmNsaWVudEhlaWdodC8yLHI9dC5sZWZ0K24scz10LnRvcCtvLGw9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChyLHMpO3JldHVybiEhbCYmKGUhPWwmJiFlLmNvbnRhaW5zKGwpKX0sYS5oYXNQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtlLnBhcmVudE5vZGU7cmV0dXJuIHQ9dC50b1VwcGVyQ2FzZSgpLEJvb2xlYW4oYS5maW5kUGFyZW50KGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnTmFtZT09PXR9KSl9LGEuZmluZFBhcmVudD1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPWk/ZTplLnBhcmVudE5vZGU7biYmMT09PW4ubm9kZVR5cGU7KXtpZih0KG4pKXJldHVybiBuO249bi5wYXJlbnROb2RlfXJldHVybiBudWxsfSxhLmlzSW5WaWV3cG9ydD1mdW5jdGlvbihlLHQpe3ZhciBuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpO2lmKCFufHxpKDM2KS5pc09wZXJhTWluaSlyZXR1cm4gZS5vZmZzZXRXaWR0aD4wJiZlLm9mZnNldEhlaWdodD4wO3ZhciBvPW4ucmlnaHQtbi5sZWZ0LHI9bi5ib3R0b20tbi50b3Ascz0wO2lmKG8+MCYmcj4wKXt2YXIgbD1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHQsaSktTWF0aC5tYXgoZSwwKSwwKX0sYz1hLmdldFdpbmRvd1NpemUoKTtzPWwobi5sZWZ0LG4ucmlnaHQsYy53aWR0aCkqbChuLnRvcCxuLmJvdHRvbSxjLmhlaWdodCkvKG8qcil9cmV0dXJuIHM+PSh0fHxOdW1iZXIuTUlOX1ZBTFVFKX0sYS5zZXRJZnJhbWVIVE1MPWZ1bmN0aW9uKGUsdCl7ZS5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKHQpfSxhLmdldFdpbmRvd1Njcm9sbD1mdW5jdGlvbigpe3JldHVybntsZWZ0OnZvaWQgMD09PXdpbmRvdy5wYWdlWE9mZnNldD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDp3aW5kb3cucGFnZVhPZmZzZXQsdG9wOnZvaWQgMD09PXdpbmRvdy5wYWdlWU9mZnNldD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOndpbmRvdy5wYWdlWU9mZnNldH19LGEuZ2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpLG49YS5nZXRXaW5kb3dTY3JvbGwoKTtyZXR1cm57dG9wOmk/aS50b3Arbi50b3AtKHQuY2xpZW50VG9wfHwwKTowLGxlZnQ6aT9pLmxlZnQrbi5sZWZ0LSh0LmNsaWVudExlZnR8fDApOjB9fSxhLmdldENvbXB1dGVkRm9udFNpemU9aSgzMDApLmdldENvbXB1dGVkRm9udFNpemUsYS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6dC5sZWZ0LHJpZ2h0OnQucmlnaHQsdG9wOnQudG9wLGJvdHRvbTp0LmJvdHRvbX19Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSxlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QQVJTRV9MSU5LX0VMRU1FTlQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0yO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIHIoZS8xMDApfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIE51bWJlcihlLnRvRml4ZWQobikpfXQucHJlcGFyZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsaT1bXSxuPTAsYT0wO2E8ZS5sZW5ndGg7YSsrKW49dD1yKG8oZVthXS5wZXJjZW50KStuKSxpLnB1c2goe2lkOmVbYV0uaWQsZXh0cmE6ZVthXS5leHRyYSx0aHJlc2hvbGQ6dH0pO3JldHVybiBpfSx0LnRvRnJhY3Rpb249byx0LmZpeFByZWNpc2lvbj1yLHQuZmluZERlZmF1bHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW51bGwsaT0wO2k8ZS5sZW5ndGg7aSsrKSghdHx8dC5wZXJjZW50PGVbaV0ucGVyY2VudCkmJih0PWVbaV0pO3JldHVybiB0fSx0LmlzUGVyY2VudD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yYW5kb20oKTxvKGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVsiZXZlbnQiXT0iZXZlbnQiLGVbImVycm9yIl09ImVycm9yIixlWyJmYXRhbCJdPSJmYXRhbCIsZVsiZGVwcmVjYXRlZCJdPSJkZXByZWNhdGVkIixlWyJ3YXJuaW5nIl09Indhcm5pbmciLGVbInZhbHVlIl09InZhbHVlIixlWyJ2YWx1ZXMiXT0idmFsdWVzIn0odC5TdGF0c0V2ZW50VHlwZXx8KHQuU3RhdHNFdmVudFR5cGU9e30pKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPSIvLyIscj0yO3QucGFyc2VVcmxVc2luZ0NhY2hlPWkoMTc2KS5tZW1vaXplKGZ1bmN0aW9uKGUpe3ZhciB0PXMoZSk7cmV0dXJuIG4oe30sdCl9KTt2YXIgYT0vXihhbmRyb2lkLWFwcDp8Y2hyb21lLWV4dGVuc2lvbjopLztmdW5jdGlvbiBzKGUpe2koMzkpLlBBUlNFX0xJTktfRUxFTUVOVC5ocmVmPWU7dmFyIHQ9aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULnBhdGhuYW1lfHwiIjsiLyIhPT10LmNoYXJBdCgwKSYmKHQ9Ii8iK3QpO3ZhciBvPShpKDM5KS5QQVJTRV9MSU5LX0VMRU1FTlQuc2VhcmNofHwiIikrKGkoMzkpLlBBUlNFX0xJTktfRUxFTUVOVC5oYXNofHwiIikscj1lLmxhc3RJbmRleE9mKG8pLGw9LTE9PT1yP2U6ZS5zbGljZSgwLHIpO2lmKGEudGVzdChlKSl7dmFyIGM9cyhlLnJlcGxhY2UoYSwiaHR0cHM6IikpO3JldHVybiBpKDM5KS5QQVJTRV9MSU5LX0VMRU1FTlQuaHJlZj1lLG4obih7fSxjKSx7b3JpZ2luYWxQYXRoOmwscHJvdG9jb2w6ZS5zbGljZSgwLGUuaW5kZXhPZigiOiIpKzEpLGhyZWY6aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULmhyZWZ9KX12YXIgdT1pKDM5KS5QQVJTRV9MSU5LX0VMRU1FTlQucHJvdG9jb2wmJi9eW2EtelwtXSs6L2kudGVzdChpKDM5KS5QQVJTRV9MSU5LX0VMRU1FTlQucHJvdG9jb2wpP2koMzkpLlBBUlNFX0xJTktfRUxFTUVOVC5wcm90b2NvbDoiIjtyZXR1cm57b3JpZ2luYWxQYXRoOmwsaHJlZjppKDM5KS5QQVJTRV9MSU5LX0VMRU1FTlQuaHJlZixwcm90b2NvbDp1LGhvc3Q6aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULmhvc3QsaG9zdG5hbWU6aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULmhvc3RuYW1lLHBvcnQ6aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULnBvcnQscGF0aG5hbWU6dCxzZWFyY2g6aSgzOSkuUEFSU0VfTElOS19FTEVNRU5ULnNlYXJjaCxoYXNoOmkoMzkpLlBBUlNFX0xJTktfRUxFTUVOVC5oYXNofX1mdW5jdGlvbiBsKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITEpLHQpe3ZhciBpPWUub3JpZ2luYWxQYXRoLG49Ii8iPT09ZS5wYXRobmFtZSYmIi8iIT09aVtpLmxlbmd0aC0xXTtyZXR1cm4gZS5vcmlnaW5hbFBhdGgrKG4/Ii8iOiIiKStlLnNlYXJjaCtlLmhhc2h9dmFyIG89IjQ0MyI9PT1lLnBvcnR8fCI4MCI9PT1lLnBvcnQ/ZS5ob3N0bmFtZTplLmhvc3Q7cmV0dXJuIGUucHJvdG9jb2wrIi8vIitvK2UucGF0aG5hbWUrZS5zZWFyY2grZS5oYXNofXQucGFyc2VVcmw9cyx0LnVybEZyb21VcmxPYmplY3Q9bDt2YXIgYz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtyZXR1cm4gZX19O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PXt9LGk9ZS5yZXBsYWNlKC9eWz8jXSsvLCIiKS5yZXBsYWNlKC8jLiokLywiIikuc3BsaXQoIiYiKSxuPTA7bjxpLmxlbmd0aDtuKyspe3ZhciBvPWlbbl0uaW5kZXhPZigiPSIpLHI9dm9pZCAwLGE9dm9pZCAwO2lmKC0xPT09bz8ocj1jKGlbbl0pLGE9IiIpOihyPWMoaVtuXS5zbGljZSgwLG8pKSxhPWlbbl0uc2xpY2UobysxKSkscil7dmFyIHM9Qm9vbGVhbigvKFxbXF0pJC8uZXhlYyhyKSk7cj1yLnJlcGxhY2UoL1xbXF0kLywiIikscz92b2lkIDA9PT10W3JdP3Rbcl09W2MoYSldOnRbcl09W10uY29uY2F0KHRbcl0sYyhhKSk6dFtyXT1jKGEpfX1yZXR1cm4gdH10LnBhcnNlUXVlcnlTdHJpbmc9dSx0LmdldFBhcmFtc0Zyb21Vcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHUocyhlKS5zZWFyY2gpfTt2YXIgZD1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZSsiW109IitlbmNvZGVVUklDb21wb25lbnQodCl9KS5qb2luKCImIil9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTtpKDYwKS5pc0FycmF5KG8pP3QucHVzaChkKG4sbykpOnZvaWQgMCE9PW8mJnQucHVzaChuKyI9IitlbmNvZGVVUklDb21wb25lbnQobykpfXJldHVybiI/Iit0LmpvaW4oIiYiKX1mdW5jdGlvbiBmKGUpe3JldHVybiBzKGUpLnBhdGhuYW1lLnNwbGl0KCIvIikucG9wKCl8fCIifXQuZm9ybWF0UXVlcnlTdHJpbmc9cCx0LmFkZFBhcmFtVG9Vcmw9ZnVuY3Rpb24oZSx0LGkpe2lmKHZvaWQgMD09PWkpcmV0dXJuIGU7dmFyIG89cyhlKSxyPXUoby5zZWFyY2gpO3JldHVybiByW3RdPWksbChuKG4oe30sbykse3NlYXJjaDpwKHIpfSkpfSx0LmFkZFBhcmFtc1RvVXJsPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj12b2lkIDA9PT1vP3t9Om8sYT1yLm92ZXJyaWRlLGM9dm9pZCAwPT09YXx8YSxkPXIuc2F2ZU9yaWdpbmFsUGF0aCxmPXZvaWQgMCE9PWQmJmQsaD1zKGUpLGc9dShoLnNlYXJjaCk7aSg0NykuZm9yT3duKHQsZnVuY3Rpb24oZSx0KXsodm9pZCAwPT09Z1t0XXx8YykmJihnW3RdPWUpfSk7dmFyIF89cChnKTtyZXR1cm4gbChuKG4oe30saCkse3NlYXJjaDpffSksZil9LHQuZ2V0UG9zdFByb3RvY29sSW5kZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKG8pO3JldHVybi0xIT09dD90K3I6MH0sdC5nZXRGaWxlTmFtZT1mLHQuZ2V0RmlsZUV4dD1mdW5jdGlvbihlKXt2YXIgdD1mKGUpLnNwbGl0KCIuIik7cmV0dXJuIHQubGVuZ3RoPjE/dC5wb3AoKToiIn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsaT1hcmd1bWVudHMubGVuZ3RoO3Q8aTt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgbj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PGk7dCsrKWZvcih2YXIgcj1hcmd1bWVudHNbdF0sYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyxvKyspbltvXT1yW2FdO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVDb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG8oZSl9O3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnJnYmE9WzAsMCwwLDFdLHRoaXMuc2V0KGUpfXJldHVybiBlLmlzQ29sb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHx0JiZ2b2lkIDAhPT10LnJnYmF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gdGhpcztpKDE5KS5pc1N0cmluZyh0KT90PWZ1bmN0aW9uKGUpe3ZhciB0PWkoMTgwKS5ub3JtYWxpemVDb2xvckhhc2goZSk7aWYoIXQpcmV0dXJuIG51bGw7cmV0dXJuW3BhcnNlSW50KHQuc3Vic3RyKDEsMiksMTYpLHBhcnNlSW50KHQuc3Vic3RyKDMsMiksMTYpLHBhcnNlSW50KHQuc3Vic3RyKDUsMiksMTYpLHBhcnNlSW50KHQuc3Vic3RyKDcsMiksMTYpLzI1NV19KHQpOmUuaXNDb2xvcih0KSYmKHQ9dC50b1JnYmFBcnJheSgpKTt2YXIgbj10O2lmKGZ1bmN0aW9uKGUpe2lmKCFlfHwhaSg2MCkuaXNBcnJheShlKSlyZXR1cm4hMTtpZighaSgxMzIpLmlzSW5SYW5nZShlLmxlbmd0aCwzLDQpKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCFyKHQsZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9KG4pKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXRoaXMuc2V0Q2hhbm5lbChvLG5bb10pO3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zZXRDaGFubmVsPWZ1bmN0aW9uKGUsdCl7cihlLHQpJiYoZT09PWkoMjApLlJHQkFfTU9ERUwuQUxQSEE/dGhpcy5yZ2JhW2VdPU51bWJlcih0LnRvUHJlY2lzaW9uKDIpKTp0aGlzLnJnYmFbZV09dD4+MCl9LGUucHJvdG90eXBlLnNldEFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldENoYW5uZWwoaSgyMCkuUkdCQV9NT0RFTC5BTFBIQSxlKSx0aGlzfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiAxIT09dGhpcy5yZ2JhW2koMjApLlJHQkFfTU9ERUwuQUxQSEFdP3RoaXMudG9SZ2JhU3RyaW5nKCk6dGhpcy50b0hleFN0cmluZygpfSxlLnByb3RvdHlwZS50b0hleFN0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIit0aGlzLnRvSGV4QXJyYXkoKS5qb2luKCIiKX0sZS5wcm90b3R5cGUudG9SZ2JTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrdGhpcy50b1JnYkFycmF5KCkuam9pbigiLCIpKyIpIn0sZS5wcm90b3R5cGUudG9SZ2JhU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInJnYmEoIit0aGlzLnJnYmEuam9pbigiLCIpKyIpIn0sZS5wcm90b3R5cGUudG9IZXhBcnJheT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmdiYTtyZXR1cm5baSg2NykuZGVjMmhleChlW2koMjApLlJHQkFfTU9ERUwuUkVEXSksaSg2NykuZGVjMmhleChlW2koMjApLlJHQkFfTU9ERUwuR1JFRU5dKSxpKDY3KS5kZWMyaGV4KGVbaSgyMCkuUkdCQV9NT0RFTC5CTFVFXSldfSxlLnByb3RvdHlwZS50b1JnYkFycmF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZ2JhO3JldHVybltlW2koMjApLlJHQkFfTU9ERUwuUkVEXSxlW2koMjApLlJHQkFfTU9ERUwuR1JFRU5dLGVbaSgyMCkuUkdCQV9NT0RFTC5CTFVFXV19LGUucHJvdG90eXBlLnRvUmdiYUFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZ2JhKX0sZS5wcm90b3R5cGUuZ2V0THVtaW5vc2l0eT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJnYmEsdD1bXSxpPTA7aTwzO2krKyl7dmFyIG49ZVtpXS8yNTU7dFtpXT1uPD0uMDM5Mjg/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfXJldHVybi4yMTI2KnRbMF0rLjcxNTIqdFsxXSsuMDcyMip0WzJdfSxlLnByb3RvdHlwZS5nZXRDb250cmFzdD1mdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldEx1bWlub3NpdHkoKSxuPW5ldyBlKHQpLmdldEx1bWlub3NpdHkoKTtyZXR1cm4gaT5uPyhpKy4wNSkvKG4rLjA1KToobisuMDUpLyhpKy4wNSl9LGUucHJvdG90eXBlLmdldEJyaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gaSg2NykuZ2V0UmdiQnJpZ2h0bmVzcyh0aGlzLnJnYmEpfSxlLnByb3RvdHlwZS5pc0xpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBpKDY3KS5pc1JnYkxpZ2h0KHRoaXMucmdiYSxlKX0sZS5wcm90b3R5cGUudG9SZWFkYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodGhpcy5pc0xpZ2h0KHQpPyIjMDAwIjoiI2ZmZiIpfSxlLnByb3RvdHlwZS5taXg9ZnVuY3Rpb24odCxuKXt2b2lkIDA9PT1uJiYobj0uNSksbj0xLW47dmFyIG89bmV3IGUodCkscj10aGlzLnJnYmEsYT1vLnRvUmdiYUFycmF5KCkscz1yW2koMjApLlJHQkFfTU9ERUwuQUxQSEFdLGw9YVtpKDIwKS5SR0JBX01PREVMLkFMUEhBXSxjPTIqbi0xLHU9cy1sLGQ9KChjKnU9PS0xP2M6KGMrdSkvKDErYyp1KSkrMSkvMixwPTEtZDtyZXR1cm4gbmV3IGUoW2QqcltpKDIwKS5SR0JBX01PREVMLlJFRF0rcCphW2koMjApLlJHQkFfTU9ERUwuUkVEXSxkKnJbaSgyMCkuUkdCQV9NT0RFTC5HUkVFTl0rcCphW2koMjApLlJHQkFfTU9ERUwuR1JFRU5dLGQqcltpKDIwKS5SR0JBX01PREVMLkJMVUVdK3AqYVtpKDIwKS5SR0JBX01PREVMLkJMVUVdLHMqbitsKigxLW4pXSl9LGUucHJvdG90eXBlLnRvR3JleXNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZ2JhLG49LjMqdFtpKDIwKS5SR0JBX01PREVMLlJFRF0rLjU5KnRbaSgyMCkuUkdCQV9NT0RFTC5HUkVFTl0rLjExKnRbaSgyMCkuUkdCQV9NT0RFTC5CTFVFXTtyZXR1cm4gbmV3IGUoW24sbixuLHRbaSgyMCkuUkdCQV9NT0RFTC5BTFBIQV1dKX0sZS5wcm90b3R5cGUubGlnaHRlbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEhTTCgpO3JldHVybiB0WzJdKz0xMDAqZSx0aGlzLmNsb25lKCkuc2V0SFNMKHQpfSxlLnByb3RvdHlwZS5kYXJrZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRIU0woKTtyZXR1cm4gdFsyXS09MTAwKmUsdGhpcy5jbG9uZSgpLnNldEhTTCh0KX0sZS5wcm90b3R5cGUuc2F0dXJhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRIU0woKTtyZXR1cm4gdFsxXSs9dFsxXSplLHRoaXMuY2xvbmUoKS5zZXRIU0wodCl9LGUucHJvdG90eXBlLmRlc2F0dXJhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRIU0woKTtyZXR1cm4gdFsxXS09dFsxXSplLHRoaXMuY2xvbmUoKS5zZXRIU0wodCl9LGUucHJvdG90eXBlLmdldEhTTD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmdiYSx0PWVbMF0sbj1lWzFdLG89ZVsyXTtyZXR1cm4gaSg2NykucmdiVG9Ic2wodCxuLG8pfSxlLnByb3RvdHlwZS5zZXRIU0w9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxuPWVbMV0sbz1lWzJdO3JldHVybiB0aGlzLnNldChpKDIwMykuaHNsVG9SZ2IodCxuLG8pKX0sZS5wcm90b3R5cGUuZ2V0SFNWPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZ2JhLHQ9ZVswXSxuPWVbMV0sbz1lWzJdO3JldHVybiBpKDY3KS5yZ2JUb0hzdih0LG4sbyl9LGUucHJvdG90eXBlLnNldEhTVj1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXSxvPWVbMl07cmV0dXJuIHRoaXMuc2V0KGkoMzgyKS5oc3ZUb1JnYih0LG4sbykpfSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLnJnYmEpfSxlLnByb3RvdHlwZS5nZXRBdmVyYWdlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmdiYVtpKDIwKS5SR0JBX01PREVMLlJFRF0rdGhpcy5yZ2JhW2koMjApLlJHQkFfTU9ERUwuR1JFRU5dK3RoaXMucmdiYVtpKDIwKS5SR0JBX01PREVMLkJMVUVdKS8zfSxlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJnYmE7cmV0dXJuIG5ldyBlKFsyNTUtdFswXSwyNTUtdFsxXSwyNTUtdFsyXV0pfSxlfSgpO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZT09PWkoMjApLlJHQkFfTU9ERUwuQUxQSEE/aSgxMzIpLmlzSW5SYW5nZSh0LDAsMSk6aSgxMzIpLmlzSW5SYW5nZSh0LDAsMjU1KX10LkNvbG9yPW99LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMzQpLG89aSg1NSkscj1pKDEwNik7dC5NSU5fSU1BR0VfUkFUSU89MSx0Lk1BWF9JTUFHRV9SQVRJTz0xNi85LHQuY29lcmNlSW1hZ2VSYXRpbz1uLmdldExpbWl0RnVuY3Rpb24odC5NSU5fSU1BR0VfUkFUSU8sdC5NQVhfSU1BR0VfUkFUSU8pLHQuY3JlYXRlU2l6ZUNvZXJjZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpPXQud2lkdGgsbz10LmhlaWdodDtyZXR1cm4gaT1uLmdldExpbWl0RnVuY3Rpb24oZS53aWR0aC5taW4sZS53aWR0aC5tYXgpKGkpLG89bi5nZXRMaW1pdEZ1bmN0aW9uKGkvZS5yYXRpby5tYXgsaS9lLnJhdGlvLm1pbikobykse3dpZHRoOmksaGVpZ2h0Om89bi5nZXRMaW1pdEZ1bmN0aW9uKGUuaGVpZ2h0Lm1pbixlLmhlaWdodC5tYXgpKG8pfX19LHQuY2FsY0FzcGVjdFJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBlLndpZHRoL2UuaGVpZ2h0fSx0LmNhbGNSYXRpbz1mdW5jdGlvbihlLHQpe3ZhciBpPWUvdDtyZXR1cm4gaTwxPzEvaTppfSx0LnNlbGVjdE1vc3RGaXQ9ZnVuY3Rpb24oZSxpKXt2YXIgYT1uLmdldExpbWl0RnVuY3Rpb24oMSwxLzApO2U9e3dpZHRoOmEoZS53aWR0aCksaGVpZ2h0OmEoZS5oZWlnaHQpfTt2YXIgcz10LmNhbGNBc3BlY3RSYXRpbyhlKSxsPW8ucmVkdWNlKGksZnVuY3Rpb24oaSxuKXt2YXIgbz1uLmNvZXJjZVNpemUoZSksYT10LmNhbGNBc3BlY3RSYXRpbyhvKSxsPXQuY2FsY1JhdGlvKGEscyksYz17aXRlbTpuLHZhbHVlOltNYXRoLmFicyhlLndpZHRoLW8ud2lkdGgpLGxdfTtyZXR1cm4gci5jb21wYXJlQXJyYXlzKGMudmFsdWUsaS52YWx1ZSk8MD9jOml9LHtpdGVtOnZvaWQgMCx2YWx1ZTpbMS8wXX0pO3JldHVybiBsJiZsLml0ZW19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNvbWU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylpZih0KGVbaV0saSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0T2JqZWN0S2V5cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWkoMTM5KS5oYXNPd25Qcm9wZXJ0eShlLG4pJiZ0LnB1c2gobik7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmZvck93bj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIGUpaSgxMzkpLmhhc093blByb3BlcnR5KGUsbykmJnQuY2FsbChuLGVbb10sbyxlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0UmFuZG9tSW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZStpKDExNCkucmFuZG9tKCkqKHQrMS1lKTtyZXR1cm4gbj1NYXRoLmZsb29yKG4pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVsiVFJZX1RPX1JFTkRFUiJdPSJ0cnlfdG9fcmVuZGVyIixlWyJUUllfVE9fTE9BRCJdPSJ0cnlfdG9fbG9hZCIsZVsiQ09ORklSTV9CTE9DSyJdPSJjb25maXJtX2Jsb2NrIixlWyJPTERfQkxPQ0tfQ09ORklSTUFUSU9OIl09Im9sZF9ibG9ja19jb25maXJtYXRpb24iLGVbIkJMT0NLX0NPTkZJUk1BVElPTiJdPSJibG9ja19jb25maXJtYXRpb24ifSh0LkVWRU5UU3x8KHQuRVZFTlRTPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUubGlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJue2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LGUucHJvdG90eXBlLmhlYXZ5PWZ1bmN0aW9uKGUsdCl7ZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfSl9LGUucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7fSxlfSgpO3QuVGVzdEJhc2U9bn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgyMDQpLmdldFJvb3ROb2RlLG89aSg1MDMpLnByb3RlY3Qscj1pKDMxMCkuY3JlYXRlU2hhZG93Um9vdCxhPWkoNTA2KS5yZW1vdmVBdHRyaWJ1dGVJZCxzPWkoMjg1KS5pc1NoYWRvd0VuYWJsZWQsbD1pKDI4KS5nZXRBbGlhcyxjPWkoMTk5KS5nZXRTdHlsZXNDb250YWluZXIsdT17fTtmdW5jdGlvbiBkKGUpe3ZhciB0PW4oZSk7cmV0dXJuIHQmJnQuaG9zdD90Lmhvc3Q6ZX10LmdldENvbnRhaW5lcj1mdW5jdGlvbihlLHQpe2lmKHMoKSl7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImlkIik7aWYodCl7dmFyIGk9dVt0XTtyZXR1cm4oaSYmaS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUuaG9zdCkhPT1lJiYoaT12b2lkIDApLGl9fShlKTtyZXR1cm4gbnx8KG49ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvPWwoaSgxNDYpLmlkZW50aWZ5KCkpO24uY2xhc3NMaXN0LmFkZChvKTt2YXIgYT1yKGUpO2EuYXBwZW5kQ2hpbGQobiksYyh0LGEpLmlubmVySFRNTCs9IiAuIitvKyIgeyIrWyJkaXNwbGF5OmJsb2NrIiwid2lkdGg6aW5oZXJpdCIsIm1pbi13aWR0aDppbmhlcml0IiwibWF4LXdpZHRoOmluaGVyaXQiLCJoZWlnaHQ6aW5oZXJpdCIsIm1pbi1oZWlnaHQ6aW5oZXJpdCIsIm1heC1oZWlnaHQ6aW5oZXJpdCJdLmpvaW4oIjsiKSsiO30iO3ZhciBzPWUuZ2V0QXR0cmlidXRlKCJpZCIpO3JldHVybiBzJiZmdW5jdGlvbihlLHQpe3VbZV09dH0ocyxuKSxufShlLHQpLG8oZSxuKSxhKGUpKSxpKDIxKS5pc0hvc3RJbkxpc3Qod2luZG93LFsieWFuZGV4WmVuIl0pJiYobi5zdHlsZS5kaXNwbGF5PSJmbGV4IixuLnN0eWxlLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiLG4uc3R5bGUuYWxpZ25JdGVtcz0iY2VudGVyIiksbn1yZXR1cm4gbyhlKSxhKGUpLGV9LHQuY2xlYXJTaGFkb3c9ZnVuY3Rpb24oZSl7aWYocygpKXt2YXIgdD1kKGUpO2k9dC5nZXRBdHRyaWJ1dGUoImlkIiksZGVsZXRlIHVbaV19dmFyIGl9LHQuZ2V0VmlzaWJpbGl0eUNvbnRhaW5lcj1mdW5jdGlvbihlKXtyZXR1cm4gcygpJiZCb29sZWFuKGUpP2QoZSk6ZX0sdC5nZXRTaGFkb3dSb290Q29udGFpbmVyPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSk7cmV0dXJuIHQmJnQuaG9zdD90OnZvaWQgMH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbz1uKHt9LHQse3V0aWw6aSgwKSx1dGlsczppKDApLENvbnN0OmkoNil9KTtyZXR1cm4gZShvKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcGFyc2VJbnQoaSgxMikuZ2V0WWEoKS5jb2RlVmVyLDEwKXx8MH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRDb2RlVmVyc2lvbj1uLHQuZ2V0UmV2aXNpb25Obz1mdW5jdGlvbigpe3JldHVybiBuKCklMTAyNH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMTc2KS5tZW1vaXplKGZ1bmN0aW9uKGUpe3JldHVybntzZWFyY2g6aSg0MikucGFyc2VRdWVyeVN0cmluZyhlLnNlYXJjaCksaGFzaDppKDQyKS5wYXJzZVF1ZXJ5U3RyaW5nKGUuaGFzaCl9fSksbz01MTI7dC5nZXRVcmxQYXJhbWV0ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJhbU5hbWUsaT1lLmxvY2F0aW9uLG89dm9pZCAwPT09aT93aW5kb3cubG9jYXRpb246aSxyPWUudmFsdWVUcmFuc2Zvcm0sYT12b2lkIDA9PT1yP2Z1bmN0aW9uKGUpe3JldHVybiBlfTpyLHM9bihvKSxsPXMuc2VhcmNoLGM9cy5oYXNoO3JldHVybiBhKHQgaW4gbD9sW3RdOnQgaW4gYz9jW3RdOiIiKX07dmFyIHI9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdC5nZXRVcmxQYXJhbWV0ZXIoe3BhcmFtTmFtZTplLGxvY2F0aW9uOmksdmFsdWVUcmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHx2b2lkIDB9fSl9O2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHBhcnNlSW50KHdpbmRvd1tlXSwxMCl8fHZvaWQgMH10LmdldEFkZGl0aW9uYWxCYW5uZXJzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdy5sb2NhdGlvbik7dmFyIGk9dC5nZXRVcmxQYXJhbWV0ZXIoe3BhcmFtTmFtZToiYWRkaXRpb25hbC1iYW5uZXJzIixsb2NhdGlvbjplfSk7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpKX0sdC5nZXRVcmxEZWJ1Z1BhcmFtZXRlcnM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93LmxvY2F0aW9uKTt0cnl7dmFyIG49aSg3MikuZ2V0TmF0aXZlSlNPTigpLHI9ZGVjb2RlVVJJQ29tcG9uZW50KHQuZ2V0VXJsUGFyYW1ldGVyKHtwYXJhbU5hbWU6InlhLWRlYnVnLXBhcmFtcyIsbG9jYXRpb246ZX0pKTtpZighcilyZXR1cm57fTt2YXIgYT1uLnBhcnNlKHIpO3JldHVybiBpKDU1KS5yZWR1Y2UoaSg0NikuZ2V0T2JqZWN0S2V5cyhhKSxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiEhKGkoMTkpLmlzU3RyaW5nKGUpJiZpKDE5KS5pc1N0cmluZyh0KSYmZS5sZW5ndGgrdC5sZW5ndGg8byl9KHQsYVt0XSkmJihlW3RdPWFbdF0pLGV9LHt9KX1jYXRjaChlKXtyZXR1cm57fX19LHQuZGVidWdQYXJhbWV0ZXJzPXQuZ2V0VXJsRGVidWdQYXJhbWV0ZXJzKCksdC5nZXRVcmxDb2RlVmVyc2lvbnM9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93LmxvY2F0aW9uKTtyZXR1cm57cGNvZGU6cigicGNvZGV2ZXIiLGUpfHxhKCJwY29kZXZlciIpLG1lZGlhOnIoIm1jb2RldmVyIixlKXx8YSgibWNvZGV2ZXIiKX19LHQudXJsQ29kZVZlcnNpb25zPXQuZ2V0VXJsQ29kZVZlcnNpb25zKCksdC5nZXRQY29kZURlYnVnRmxhZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93LmxvY2F0aW9uKSx0LmdldFVybFBhcmFtZXRlcih7cGFyYW1OYW1lOiJwY29kZURlYnVnIixsb2NhdGlvbjplLHZhbHVlVHJhbnNmb3JtOkJvb2xlYW59KX0sdC5wY29kZURlYnVnRmxhZz10LmdldFBjb2RlRGVidWdGbGFnKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVkdWNlPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj0wO2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTEsaT1lWzBdKTtuPGUubGVuZ3RoO24rKylpPXQoaSxlW25dLG4sZSk7cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1udWxsO2Z1bmN0aW9uIG8oKXtpZihudWxsPT09bil7dmFyIGU9aSgyOSkuYWRkRXF1YWxzKGkoMTEpLmNvbmZpZy5lbmNvZGUua2V5KTtuPWkoMjkpLmRlY29kZVVJbnQ4U3RyaW5nKGUpfXJldHVybiBufWZ1bmN0aW9uIHIoZSx0KXtmb3IodmFyIGk9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobilebygpLmNoYXJDb2RlQXQobiV0Lmxlbmd0aCk7aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocikpfXJldHVybiBpLmpvaW4oIiIpfXQuZ2V0S2V5PW8sdC5lbmNvZGU9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIG49dD9pKDI5KS5lbmNvZGU6aSgyOSkuZW5jb2RlVUludDhTdHJpbmcsYT1yKGUsbygpKTtyZXR1cm4gaSgyOSkuY3JvcEVxdWFscyhuKGEpKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHIoKHQ/aSgyOSkuZW5jb2RlOmkoMjkpLmRlY29kZVVJbnQ4U3RyaW5nKShpKDI5KS5hZGRFcXVhbHMoZSkpLG8oKSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0KXt2YXIgaT1lLmdldFByb3BlcnR5VmFsdWUodCl8fCIwIjtyZXR1cm4gcGFyc2VJbnQoaSwxMCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RWxlbWVudElubmVyU2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1pKDYwOCkuZ2V0U3R5bGUoZSksbz1uKHQsInBhZGRpbmctdG9wIikrbih0LCJwYWRkaW5nLWJvdHRvbSIpLHI9bih0LCJwYWRkaW5nLWxlZnQiKStuKHQsInBhZGRpbmctcmlnaHQiKSxhPSJoaWRkZW4iPT09dC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLHM9ZS5jbGllbnRXaWR0aCxsPWUuY2xpZW50SGVpZ2h0O2lmKGEmJjA9PT1sKXt2YXIgYz1uKHQsImJvcmRlci10b3Atd2lkdGgiKStuKHQsImJvcmRlci1ib3R0b20td2lkdGgiKSx1PW4odCwiYm9yZGVyLWxlZnQtd2lkdGgiKStuKHQsImJvcmRlci1yaWdodC13aWR0aCIpO3JldHVybnt3aWR0aDpNYXRoLm1heCgwLGUub2Zmc2V0V2lkdGgtdS1yKSxoZWlnaHQ6TWF0aC5tYXgoMCxlLm9mZnNldEhlaWdodC1jLW8pfX1yZXR1cm57d2lkdGg6TWF0aC5tYXgoMCxzLXIpLGhlaWdodDpNYXRoLm1heCgwLGwtbyl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7Zm9yKHZhciBpIGluIGUpdC5oYXNPd25Qcm9wZXJ0eShpKXx8KHRbaV09ZVtpXSl9KGkoNDk3KSksdC5NcmFpZEhlbHBlcnM9aSgzMDcpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG8scj0iXHhhMCIsYT1uZXcgUmVnRXhwKCcoXnxcXHMpIihbLlxcLVxcc1xcZGEtekEtWlx1MDQzMC1cdTA0NGZcdTA0MTAtXHUwNDJmXHUwNDUxXHUwNDAxXXszLH0pIicsImciKSxzPW5ldyBSZWdFeHAoJyhefFxcKHxcXHMpKFtcdTA0MTBcdTA0MzBdfFtcdTA0MTFcdTA0MzFdXHUwNDM1XHUwNDM3fFtcdTA0MTJcdTA0MzJdKD86fFx1MDQ0YnxcdTA0MzBcdTA0NDF8XHUwNDMwXHUwNDNjfFx1MDQ0MVx1MDQzNXxcdTA0NDFcdTA0NTEpfFtcdTA0MTNcdTA0MzNdXHUwNDM0XHUwNDM1fFtcdTA0MTRcdTA0MzRdKD86XHUwNDNlfFx1MDQzYlx1MDQ0Zil8W1x1MDQxN1x1MDQzN11cdTA0MzB8W1x1MDQxOFx1MDQzOF0oPzp8XHUwNDM3KXxbXHUwNDFhXHUwNDNhXSg/OnxcdTA0M2V8XHUwNDMwXHUwNDNhKXxbXHUwNDFjXHUwNDNjXVx1MDQ0YnxbXHUwNDFkXHUwNDNkXSg/Olx1MDQzMHxcdTA0MzBcdTA0M2N8XHUwNDMwXHUwNDQxfFx1MDQzNXxcdTA0Mzh8XHUwNDNlKXxbXHUwNDFlXHUwNDNlXSg/OnxcdTA0MzF8XHUwNDQyKXxbXHUwNDFmXHUwNDNmXSg/Olx1MDQzZXxcdTA0NDBcdTA0M2UpfFtcdTA0MjFcdTA0NDFdKD86fFx1MDQzZSl8W1x1MDQyMlx1MDQ0Ml0oPzpcdTA0M2V8XHUwNDQzXHUwNDQyfFx1MDQ0Yil8W1x1MDQyM1x1MDQ0M118W1x1MDQyN1x1MDQ0N11cdTA0NDJcdTA0M2V8W1x1MDQyZFx1MDQ0ZF1cdTA0NDJcdTA0M2UpXFxzKFtceGFiIiRcXGRhLXpBLVpcdTA0MzAtXHUwNDRmXHUwNDEwLVx1MDQyZlx1MDQ1MVx1MDQwMV0rKScsImciKSxsPS8iL2csYz0vW1x1MDQwNFx1MDQwNlx1MDQwN1x1MDQ1NFx1MDQ1Nlx1MDQ1N1x1MDQ5MFx1MDQ5MV0vLHU9L15bXC1cc118W1wtXHNdJHxeW1wtXHNcZF0rJC8sZD0vKFsuLCE/OjspK10rfFtePF1cL3w9KD8hIikpKFteIC1dKSg/ISR8Wy4sIT86OykrPVwvIF0pL2cscD0vKFswLTldKykgKD89WzAtOV17M30pL2csZj0vKFswLTlcdTAwQTBdKykgKFx1MDQ0MHxcdTA0NDBcdTA0NDNcdTA0MzF8XHUyMGJkfFwkfFx1MjBhY3xcdTIwYjh8XHUyMGI0fFx1MjBiYXxCcnxcdTA0NDJcdTA0NGJcdTA0NDF8XHUwNDNjXHUwNDNiXHUwNDNkfFx1MDQzYVx1MDQzY3xcdTA0M2N8XHUwNDQxXHUwNDNjfFx1MDQzY1x1MDQzYykoPz1bLiw/ITo7XHNdfCQpL2csaD0vKCg/Olx1MDQ0Mlx1MDQ0Ylx1MDQ0MXxcdTA0M2NcdTA0M2JcdTA0M2QpXC4/KSAoXHUwNDQwfFx1MDQ0MFx1MDQ0M1x1MDQzMXxcdTIwYmR8XCR8XHUyMGFjfFx1MjBiOHxcdTIwYjR8XHUyMGJhfEJyfFx1MDQzYVx1MDQzY3xcdTA0M2N8XHUwNDQxXHUwNDNjfFx1MDQzY1x1MDQzYykoPz1bLiw/ITo7XHNdfCQpL2csZz0vIFwtKFxkXGQ/KSUvZyxfPS8gIS87ZnVuY3Rpb24geShlLHQsaSxuKXtyZXR1cm4oaStuKS5sZW5ndGgrMTw9by5tYXhHbHVlZExlbmd0aD90K2krcituOmV9ZnVuY3Rpb24gbShlLHQsaSl7cmV0dXJuIGUubGVuZ3RoPD1vLm1heEdsdWVkTGVuZ3RoP3QrcitpOmV9ZnVuY3Rpb24gYihlLHQsaSl7cmV0dXJuIHUudGVzdChpKT9lOnQrIlx4YWIiK2krIlx4YmIifXQucHJldHRpZnk9ZnVuY3Rpb24oZSx0KXtpZihvPW4oe2dsdWVQcmVwb3NpdGlvbnM6ITAsbWF4R2x1ZWRMZW5ndGg6MS8wLHNvZnRCcmVha1B1bmN0OiExfSx0KSxjLnRlc3QoZSkpcmV0dXJuIGU7dmFyIHU9KGU9aSg0NzYpLmh0bWxUb1V0ZihlKSkubWF0Y2gobCksdj1lLm1hdGNoKGEpO3JldHVybiB1JiZ2JiZ1Lmxlbmd0aCUyPT0wJiZ1Lmxlbmd0aC8yPT09di5sZW5ndGgmJihlPWUucmVwbGFjZShhLGIpKSxvLmdsdWVQcmVwb3NpdGlvbnMmJihlPWUucmVwbGFjZShzLHkpKSxvLnNvZnRCcmVha1B1bmN0JiYoZT1lLnJlcGxhY2UoZCwiJDE8d2JyIC8+JDIiKSksZT1lLnJlcGxhY2UocCwiJDEiK3IpLnJlcGxhY2UoZixtKS5yZXBsYWNlKGgsbSkucmVwbGFjZShnLCIgXHUyMjEyJDElIikucmVwbGFjZShfLHIrIiEiKSxlPWkoNDc3KS5maXhDdXJyZW5jeShlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMTExKS5nZXROYXRpdmVNZXRob2QoQXJyYXksImlzQXJyYXkiKTt0LmlzQXJyYXk9Qm9vbGVhbihuKT9mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKEFycmF5LGUpfTpmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT09aSgxNzApLmdldEludGVybmFsQ2xhc3MoZSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSkscj1mdW5jdGlvbigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxpPWFyZ3VtZW50cy5sZW5ndGg7dDxpO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBuPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8aTt0KyspZm9yKHZhciByPWFyZ3VtZW50c1t0XSxhPTAscz1yLmxlbmd0aDthPHM7YSsrLG8rKyluW29dPXJbYV07cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1pKDMpLGw9aSgzMyksYz1pKDE1NSksdT1pKDM3MiksZD1pKDM1KSxwPWkoMzc5KSxmPWkoMzM4KSxoPWkoMzM5KSxnPWkoMjM3KSxfPWkoNjQ5KSx5PWkoODYpLG09aSg0MDYpLGI9aSgzMCksdj1pKDIyNyksdz1pKDE2NCkseD1pKDIzNiksaz1pKDM4OSksQz1pKDM4NCksUz1pKDY1NSksTz1pKDY1NiksST1pKDE2MiksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmdldENvbnRlbnRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5nZXRSb290Q29tcG9uZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdENvbXBvbmVudH0sdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe2UucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpO3ZhciB0PXRoaXMucHJvcHMuZ2V0U2l6ZSxpPXRoaXMuY29lcmNlU2l6ZSh0KCkpLG49aS53aWR0aCxvPWkuaGVpZ2h0O3RoaXMubWluSGVpZ2h0PW8sdGhpcy53aWR0aD1uLHRoaXMucHJlcGFyZURhdGEoKX0sdC5wcm90b3R5cGUucHJlcGFyZURhdGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5hZHYsaT1lLmNvbnRleHQsbj10aGlzLndpZHRoLG89dGhpcy5taW5IZWlnaHQ7aWYoaS5zZXRQYXJhbXMoe2ZvbnRTaXplOnRoaXMuY2FsY0ZvbnRTaXplKHt3aWR0aDpuLGhlaWdodDpvfSksZm9udE1pblNpemU6dGhpcy5jYWxjRm9udFNpemUoe3dpZHRoOjAsaGVpZ2h0OjB9KX0pLHQud2FybmluZyl7dmFyIHI9eC5oYXNJbXBvcnRhbnRGbGFnKHQuYmFubmVyRmxhZ3MpO3RoaXMud2FybmluZz17dGV4dDp0Lndhcm5pbmcsaW1wb3J0YW50OnJ9fXRoaXMud2FybmluZ1dpZHRoPW47dmFyIGE9dGhpcy5wcm9wcy5hZHYucHJpY2VMYWJlbDt0aGlzLnByaWNlTGFiZWxFbmFibGVkPUJvb2xlYW4oYSl9LHQucHJvdG90eXBlLmJlZm9yZVJlbmRlcj1mdW5jdGlvbih0KXtlLnByb3RvdHlwZS5iZWZvcmVSZW5kZXIuY2FsbCh0aGlzLHQpO3ZhciBpPXRoaXMucHJvcHMsbj1pLmFkdixvPWkuY29udGV4dC5nZXRUaGVtZSgpLHI9bi5pc0FwcEFkLGE9bi5hZGRJbmZvfHx7fSxzPXRoaXMuZ2V0RGF0YVNvdXJjZSgpLGw9cy5nZXRMYW5ndWFnZSgpO2lmKHRoaXMuZm9udFNpemU9by5mb250U2l6ZSx0aGlzLmFjdGlvbj17dXJsOmEuY2FsbFRvQWN0aW9uVXJsfHxuLnVybCx0aXRsZTpyP2EuY2FsbFRvQWN0aW9ufHxiLmkxOG4oIklOU1RBTEwiLGwpOmIuaTE4bigiTEVBUk5fTU9SRSIsbCl9LHIpe3ZhciBjPTUuNSp0aGlzLmZvbnRTaXplLHU9bi5pY29uJiZuLmljb24uZ2V0Rml0dGluZyhjLGMpLGQ9dSYmdS5zcmMscD1OdW1iZXIoYS5yYXRpbmcpfHwwO3RoaXMuYXBwPXtyYXRpbmc6cD49My41P3A6MCxwcmljZTphLnByaWNlLGljb246ZD97c3JjOmQsc2l6ZTpjfTp2b2lkIDB9fWlmKG8uaGFzTG9nbyl7dmFyIGY9cy5nZXRUaXRsZSgpfHx7fTtmLnRpdGxlPUJvb2xlYW4oby5oZWFkZXJUZXh0KT9vLmhlYWRlclRleHQ6Zi50aXRsZSx0aGlzLmxvZ289Zn12YXIgaD10aGlzLmxvZ28mJnRoaXMubG9nby50aXRsZTt0aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGU9dy5pc0N1cnJlbmN5VGl0bGUoaCksdGhpcy5wcm9wcy5hZHYuaW1hZ2UmJih0aGlzLmltYWdlU2l6ZT1vLmdldEltYWdlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSl9LHQucHJvdG90eXBlLmdldFdhcm5pbmdNaW5IZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndhcm5pbmc7aWYoIWUpcmV0dXJuIDA7dmFyIHQ9ZS5pbXBvcnRhbnQ/LjE6MCxpPXRoaXMubWluSGVpZ2h0KnRoaXMud2lkdGg7cmV0dXJuIE1hdGgubWF4KDE1LGkqdC90aGlzLndhcm5pbmdXaWR0aCl9LHQucHJvdG90eXBlLnB1c2hDc3M9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5wdXNoQ3NzLmNhbGwodGhpcyksdGhpcy5wdXNoQ3NzU2tpbigpfSx0LnByb3RvdHlwZS5wdXNoQ3NzU2tpbj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5oZWFkZXJGb250U2l6ZSx0PXRoaXMubG9nbyYmdGhpcy5sb2dvLnRpdGxlLGk9cihyKHIoe30sdGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkpLHRoaXMuZ2V0Q3NzVmFyaWFibGVzKCkpLHtoZWFkZXJGb250U2l6ZToxMD09PWUmJncuaXNDdXJyZW5jeVRpdGxlKHQpPzExOmV9KSxuPTAsbz1hKFtTXSx0aGlzLmdldFN0eWxlcygpLFtPXSk7bjxvLmxlbmd0aDtuKyspe3ZhciBzPW9bbl07dGhpcy5wdXNoU3R5bGVzKHMsaSl9fSx0LnByb3RvdHlwZS5nZXRDc3NWYXJpYWJsZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRleHQ7cmV0dXJue21pbldhcm5pbmdIZWlnaHQ6TWF0aC5tYXgoZS5nZXRUaGVtZSgpLndhcm5pbmdIZWlnaHQsdGhpcy5nZXRXYXJuaW5nTWluSGVpZ2h0KCkpfX0sdC5wcm90b3R5cGUuYWZ0ZXJFeGNsdXNpb249ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yb290Q29tcG9uZW50PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJyb290IiksZS5wcm90b3R5cGUuYWZ0ZXJSZW5kZXIuY2FsbCh0aGlzKSx0aGlzLmJlZm9yZU1vdW50KCl9LHQucHJvdG90eXBlLmJlZm9yZU1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuY29udGV4dCxpPXRoaXMucHJvcHMuZ2V0U2l6ZSgpLG49dGhpcy5wcm9wcy5za2luTmFtZTtCb29sZWFuKHRoaXMuaW1hZ2VTaXplKXx8KG4rPSJfbm9JbWFnZSIpO3ZhciBvPWZ1bmN0aW9uKHQpe3JldHVybiBlLmdldFJlc291cmNlSGVpZ2h0KHQpfTt0LmRvT25SZWFkeShjLlJlYWR5U3RhZ2UuUmVhZCxmdW5jdGlvbigpe3ZhciByPWUuY3JlYXRlUmVzb3VyY2VUcmVlKCksYT12LmNyZWF0ZUNvbXBvc2l0aW9uc0J5VHJlZShyKSxzPXYuY2FsY3VsYXRlRWxlbWVudHNTaXplc0J5VHJlZShyLG8pLGw9ZS5wb3N0UHJvY2Vzc1NpemVzKHMpLHU9ZS5nZXRJZ25vcmVSZXNvdXJjZXNJZHMoKSxkPXYuc3VtRWxlbWVudHNTaXplcyh1LG8pLHA9bygiY29udGVudCIpfHwwLGY9bygid3JhcHBlciIpfHwwLGg9TWF0aC5tYXgoMCxwLSh2LnN1bVNpemVzKHMpK2QpKSxnPWUuZ2V0Q29udGVudEhlaWdodCgpfHxmLF89TWF0aC5jZWlsKChnfHxlLm1pbkhlaWdodCktaCkseT1NYXRoLm1heChfLChnfHxNYXRoLmNlaWwoZS5jb2VyY2VTaXplKGkpLmhlaWdodCkpLWgpLG09di5jb21wb3NlU2V0cyhhLGwpO209di5mZWV0VG9SYW5nZShtLF8seSksdC5pbnRlcnNlY3RpbmdNYW5hZ2VyLnB1c2gobixtKTt2YXIgYj1lLmdldElnbm9yZUludGVyc2VjdGluZ05hbWUobSk7dC5kb09uUmVhZHkoYy5SZWFkeVN0YWdlLkNhbGMsZnVuY3Rpb24oKXt2YXIgaT10LmludGVyc2VjdGluZ01hbmFnZXIuY2FsYyhuKTtpZihpLmxlbmd0aCl7dmFyIG89KGJ8fGlbMF18fG1bMF0ubmFtZSkuc3BsaXQoIiAiKSxyPXYuZ2V0RXhjbHVkZWRFbGVtZW50cyhvLGwpO3QuZG9PblJlYWR5KGMuUmVhZHlTdGFnZS5DaGFuZ2UsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxpPXI7dDxpLmxlbmd0aDt0Kyspe3ZhciBuPWlbdF0sbz1lLmdldFJlc291cmNlQnlJZChuKTtvJiZvLmRlc3Ryb3koKX1lLmFmdGVyRXhjbHVzaW9uKCl9KX19KX0pfSx0LnByb3RvdHlwZS5nZXRSZXNvdXJjZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoZSk7aWYodCl7dmFyIGk9dC5nZXRFbGVtZW50KCk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZ2V0UmVzb3VyY2VIZWlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUVsZW1lbnQoZSk7cmV0dXJuIHQ/bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QodCkuaGVpZ2h0Om51bGx9LHQucHJvdG90eXBlLmdldFJlc291cmNlV2lkdGg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoZSk7aWYodCl7dmFyIGk9dC5nZXRFbGVtZW50KCk7aWYoaSlyZXR1cm4gbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoaSkud2lkdGh9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnBvc3RQcm9jZXNzU2l6ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9cih7fSxlKSxpPXRoaXMuZm9udFNpemU7cmV0dXJuIGVbImJ1dHRvbi1tZWRpdW0iXT4zLjQqaSsyKzEmJih0WyJidXR0b24tbWVkaXVtIl09bnVsbCksZVsiYnV0dG9uLW1lZGl1bS1wcmljZSJdPjMuNCppKzIrMSYmKHRbImJ1dHRvbi1tZWRpdW0tcHJpY2UiXT1udWxsKSxlWyJnZW9pbmZvLXNtYWxsIl0+NDMmJih0WyJnZW9pbmZvLXNtYWxsIl09bnVsbCksZVsiYnV0dG9uLWdlbyJdPjMzJiYodFsiYnV0dG9uLWdlbyJdPW51bGwpLHR9LHQucHJvdG90eXBlLmdldElnbm9yZVJlc291cmNlc0lkcz1mdW5jdGlvbigpe3JldHVybltdfSx0LnByb3RvdHlwZS5nZXRBZHR1bmVPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJue319LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfLHQ9dGhpcy53aWR0aCxpPXRoaXMubWluSGVpZ2h0LG49dGhpcy5mb250U2l6ZSxvPXRoaXMubW9kLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlJiYiXyIrZX0pLHI9ZS5hcHBseSh2b2lkIDAsYShbZSgpLCJfIisodGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkucGFkZGluZ3NEaXNhYmxlZD8ibm8iOiJoYXMiKSsiLXBhZGRpbmdzIl0sbyx0aGlzLmdldENzc01vZHMoKSkpLGw9dGhpcy5wcm9wcy5hZHYsYz1sLmFkSWQsdT1sLnVybCxwPXQqaTx0aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5tYXhTbWFsbEFkdlNxdWFyZSxmPXRoaXMuZ2V0RGF0YVNvdXJjZSgpLGg9Zi5nZXRTaW1pbGFyRXhwZXJpbWVudCgpO3JldHVybiBmLmlzRnVsbENsaWNrYWJsZT1wLHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoicm9vdCIsImRhdGEtaWQiOmMsY2xhc3M6cixzdHlsZTp7d2lkdGg6dCxoZWlnaHQ6aX19LHA/c1siZGVmYXVsdCJdLmNyZWF0ZShkLk5ld0xpbmsse2hyZWY6dSx0eXBlOiJvdmVybGF5In0pOm51bGwsc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2Fkdi1jb250YWluZXIiKSxzdHlsZTp7Im1pbi1oZWlnaHQiOmkrInB4IiwiZm9udC1zaXplIjpuKyJweCJ9fSx0aGlzLnJlbmRlckNvbnRlbnQoImNvbnRlbnQiKSksdGhpcy5yZW5kZXJDbGlja0NvbmZpcm1hdGlvbigpLHRoaXMucmVuZGVyRmVlZGJhY2soe30pLHRoaXMucmVuZGVyQWR0dW5lKHRoaXMuZ2V0QWR0dW5lT3B0aW9ucygpKSxoLnRhcmdldCYmaC5zbGljZT9zWyJkZWZhdWx0Il0uY3JlYXRlKG0uU2ltaWxhckJ1dHRvbix7YWR2OnRoaXMucHJvcHMuYWR2LHNldHRpbmdzOnRoaXMucHJvcHMuc2V0dGluZ3MsZGF0YVNvdXJjZTpmfSk6bnVsbCl9LHQucHJvdG90eXBlLmdldENzc01vZHM9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5sb2dvJiYiX2xvZ29fIisodGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlPyJjdXJyZW5jeSI6Im5vcm1hbCIpXX0sdC5wcm90b3R5cGUucmVuZGVyVGl0bGU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PXRoaXMuYl8saT10aGlzLnByb3BzLmFkdixuPWkub3JpZ2luYWxUaXRsZSxvPWkudXJsLHI9dGhpcy5wcm9wcy5hZHYudGl0bGU7aWYoIXIpcmV0dXJuIG51bGw7cj10aGlzLnByaWNlTGFiZWxFbmFibGVkP246cjt2YXIgYT1lLmh5cGhlbmF0ZXMsbD12b2lkIDA9PT1hfHxhLGM9ZS5yZXNvdXJjZUlkLHU9dm9pZCAwPT09Yz8idGl0bGUiOmM7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDp1LGNsYXNzOmVbImNsYXNzIl18fHQoIl9fdGl0bGUiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZShkLk5ld0xpbmsse2hyZWY6byxjbGFzczp0KCJfX2xpbmsiLCJfX2xpbmtfdGl0bGUiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSh5LlRleHQse2h5cGhlbmF0ZXM6bCx0ZXh0OnJ9KSkpfSx0LnByb3RvdHlwZS5yZW5kZXJUaXRsZVNpemU9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiB0aGlzLnJlbmRlclRpdGxlKHIoe3Jlc291cmNlSWQ6InRpdGxlLXNpemUtIitlLGNsYXNzOnRoaXMuYl8oIl9fdGl0bGUiLCJfX3RpdGxlX3NpemVfIitlLGk/Il9fdGl0bGVfIitpOiIiKX0sdCkpfSx0LnByb3RvdHlwZS5yZW5kZXJUaXRsZUFsbFNpemVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLnRpdGxlRm9udFJhbmdlLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdC5yZW5kZXJUaXRsZVNpemUoaSx7fSxlKX0pfSx0LnByb3RvdHlwZS5yZW5kZXJCb2R5PWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD10aGlzLmJfLGk9dGhpcy5wcm9wcy5hZHYsbj1pLm9yaWdpbmFsQm9keSxvPWkudXJsLHI9dGhpcy5wcm9wcy5hZHYuYm9keTtpZighcnx8dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkubm9Cb2R5VGV4dClyZXR1cm4gbnVsbDtyPXRoaXMucHJpY2VMYWJlbEVuYWJsZWQ/bjpyO3ZhciBhPWUuaHlwaGVuYXRlcyxsPXZvaWQgMD09PWF8fGEsYz1lLnJlc291cmNlSWQsdT12b2lkIDA9PT1jPyJib2R5IjpjO3JldHVybiBzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6dSxjbGFzczplWyJjbGFzcyJdfHx0KCJfX2JvZHkiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZShkLk5ld0xpbmsse2hyZWY6byxjbGFzczp0KCJfX2xpbmsiLCJfX2xpbmtfYm9keSIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7aHlwaGVuYXRlczpsLGhpZ2hsaWdodDohMCx0ZXh0OnJ9KSkpfSx0LnByb3RvdHlwZS5yZW5kZXJTaXRlTGlua3M9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PXRoaXMuYl8saT1lLnJlc291cmNlSWQsbj12b2lkIDA9PT1pPyJzaXRlLWxpbmtzIjppLG89ZS5tb2Qscj0odGhpcy5wcm9wcy5hZHYuc2l0ZWxpbmtzfHxbXSkuc2xpY2UoMCw0KTtpZighci5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGE9ci5tYXAoZnVuY3Rpb24oZSxpKXt2YXIgbz1lLnVybCxyPWUudGl0bGU7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19zaXRlLWxpbmtzLWl0ZW0iKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOm4rIl8iK2ksY2xhc3M6dCgiX19zaXRlbGluay13cmFwcGVyIil9LHNbImRlZmF1bHQiXS5jcmVhdGUoZC5OZXdMaW5rLHtocmVmOm8sY2xhc3M6dCgiX19saW5rIiwiX19saW5rX3NpdGUtbGluayIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7dGV4dDpyfSkpKSl9KTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOm4sY2xhc3M6dCgiX19zaXRlLWxpbmtzIixvKX0sYSl9LHQucHJvdG90eXBlLnJlbmRlckNhbGxvdXRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMuYWR2LmNhbGxvdXRzfHxbXTtpZighdC5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19jYWxsb3V0cy1pdGVtIil9LHNbImRlZmF1bHQiXS5jcmVhdGUoeS5UZXh0LHt0ZXh0OnR9KSl9KTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJjYWxsb3V0cyIsY2xhc3M6ZSgiX19jYWxsb3V0cyIpfSxpKX0sdC5wcm90b3R5cGUuaXNDb21wYWN0V2FybmluZz1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmlzV2FybmluZ0NvbXBhY3QmJnRoaXMuaW1hZ2VTaXplKX0sdC5wcm90b3R5cGUucmVzb2x2ZU1vZHM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5pc0NvbXBhY3RXYXJuaW5nKCkmJmUucHVzaCgiX19jb21wYWN0LXdhcm5pbmciKSxlfSx0LnByb3RvdHlwZS5yZW5kZXJCdXR0b25CaWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJCdXR0b25CaWdJbXBsKCJiaWciKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uQmlnUHJpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJCdXR0b25CaWdJbXBsUHJpY2UoImJpZyIpfSx0LnByb3RvdHlwZS5yZW5kZXJCdXR0b25NZWRpdW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJCdXR0b25CaWdJbXBsKCJtZWRpdW0iKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uTWVkaXVtUHJpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJCdXR0b25CaWdJbXBsUHJpY2UoIm1lZGl1bSIpfSx0LnByb3RvdHlwZS5yZW5kZXJCdXR0b25HZW89ZnVuY3Rpb24oKXtpZighdGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuaXNCdXR0b25WaXNpYmxlKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYl8sdD10aGlzLmFjdGlvbixpPXRoaXMucHJvcHMuYWR2LG49aS5hZGRyZXNzLG89aS51cmwscj1zWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjpvLGNsYXNzOmUoIl9fZXh0cmEiLCJfX2xpbmtfYnV0dG9uLWdlbyIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKGYuR2VvTG9nbyx7YmVtOmUsdHlwZToiZ2VvbWFyayJ9KSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZGVzYyIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fYWRkcmVzcyIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7aHlwaGVuYXRlczohMCx0ZXh0Om58fCIifSkpKSk7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiYnV0dG9uLWdlbyIsY2xhc3M6ZSgiX19idXR0b24iLCJfX2J1dHRvbl9tZWRpdW0iKX0sc1siZGVmYXVsdCJdLmNyZWF0ZShkLk5ld0xpbmsse2hyZWY6dC51cmwsY2xhc3M6ZSgiX19saW5rIiwiX19saW5rX2J1dHRvbi1hY3Rpb24iLCJfX2J1dHRvbi1hY3Rpb24iKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2J1dHRvbi1jb250ZW50Iil9LHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19idXR0b24tdGV4dCIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7dGV4dDp0LnRpdGxlfSkpKSkscil9LHQucHJvdG90eXBlLnJlbmRlckJ1dHRvblNtYWxsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCksdD1lLmlzQnV0dG9uVmlzaWJsZSxpPWUuZmF2aWNvbjtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLmJfLG89dGhpcy5hY3Rpb24scj10aGlzLnByb3BzLmFkdixhPXIuZG9tYWluLGw9ci5mYXZpY29uO3JldHVybiBzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJ1dHRvbi1zbWFsbCIsY2xhc3M6bigiX19idXR0b24iLCJfX2J1dHRvbl9zbWFsbCIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjpvLnVybCxjbGFzczpuKCJfX2xpbmsiLCJfX2xpbmtfYnV0dG9uLWFjdGlvbiIsIl9fYnV0dG9uLWFjdGlvbiIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOm4oIl9fYnV0dG9uLWNvbnRlbnQiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpuKCJfX2J1dHRvbi10ZXh0Iil9LGwmJmk/c1siZGVmYXVsdCJdLmNyZWF0ZShJLHtzcmM6bCxjbGFzczpuKCJfX2Zhdmljb24iKSxtb2Q6Il90cmFuc3BhcmVudF9ub25lIn0pOm51bGwsc1siZGVmYXVsdCJdLmNyZWF0ZSh5LlRleHQse3RleHQ6YXx8by50aXRsZX0pKSksYT9zWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOm4oIl9fYnV0dG9uLXRleHQiKX0sIlx4YTAiLHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6bigiX19idXR0b24tY2hldnJvbiIpfSkpOm51bGwpKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uU21hbGxQcmljZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmlzQnV0dG9uVmlzaWJsZSx0PXRoaXMucHJvcHMuYWR2LnByaWNlTGFiZWw7aWYoIWV8fCF0fHwhdC5wcmljZSlyZXR1cm4gbnVsbDt2YXIgaT10aGlzLmJfLG49dGhpcy5hY3Rpb24sbz10LnByaWNlO3JldHVybiBzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJ1dHRvbi1zbWFsbC1wcmljZSIsY2xhc3M6aSgiX19idXR0b24iLCJfX2J1dHRvbl9zbWFsbCIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjpuLnVybCxjbGFzczppKCJfX2xpbmsiLCJfX2xpbmtfYnV0dG9uLWFjdGlvbiIsIl9fYnV0dG9uLWFjdGlvbiIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmkoIl9fYnV0dG9uLWNvbnRlbnQiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczppKCJfX2J1dHRvbi10ZXh0IiwiX19idXR0b24tdGV4dF9wcmljZSIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7dGV4dDpvfSksIlx4YTAiKSkpKX0sdC5wcm90b3R5cGUucmVuZGVyV2FybmluZz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJfLGk9dGhpcy53YXJuaW5nLG49dGhpcy5wcm9wcy5jb250ZXh0LG89TWF0aC5tYXgobi5nZXRUaGVtZSgpLndhcm5pbmdIZWlnaHQsdGhpcy5nZXRXYXJuaW5nTWluSGVpZ2h0KCkpLHI9eyJtaW4taGVpZ2h0IjpvfTtpZighaSlyZXR1cm4gbz9zWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6Indhcm5pbmciLGNsYXNzOnQoIl9fd2FybmluZy1zdHViIil9KTpudWxsO3ZhciBhPVsiX193YXJuaW5nIiwiX193YXJuaW5nXyIrKGkuaW1wb3J0YW50PyJpbXBvcnRhbnQiOiJub3JtYWwiKV07cmV0dXJuIGUmJmEucHVzaCgiX193YXJuaW5nXyIrZSksc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJ3YXJuaW5nIixjbGFzczp0LmFwcGx5KHZvaWQgMCxhKSxzdHlsZTpyLG9uQ2xpY2s6aS5pbXBvcnRhbnQ/dm9pZCAwOmZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCl9fSxzWyJkZWZhdWx0Il0uY3JlYXRlKGcuU2Nyb2xsLG51bGwsc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX3dhcm5pbmctdGV4dCIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7dGV4dDppLnRleHR9KSkpKX0sdC5wcm90b3R5cGUucmVuZGVyTG9nbz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iik7dmFyIGk9dGhpcy5iXyxuPXRoaXMubG9nbztpZighbnx8IW4udGl0bGUpcmV0dXJuIG51bGw7dmFyIG89ZS5zcGxpdCgiICIpLHI9ay5jb25jYXRNb2RzKCJfX2xvZ28iLG8pLGw9c1siZGVmYXVsdCJdLmNyZWF0ZShDLkxvZ28se2RpcmVjdFRpdGxlOm4sY2xhc3NOYW1lOmkuYXBwbHkodm9pZCAwLGEoWyJfX2xpbmsiLCJfX2xvZ28iXSxyKSl9KTtyZXR1cm4gdCYmdGhpcy5pbWFnZVNpemUmJihsPXNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6aSgiX19sb2dvLXNoYWRvdy1iZyIpfSxsKSksbH0sdC5wcm90b3R5cGUucmVuZGVyQ3VycmVuY3lMb2dvPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PXQmJih0PXt9KTt2YXIgaT10aGlzLmJfLG49dGhpcy5sb2dvLG89dGhpcy5wcm9wcy5hZHYubGFuZ3VhZ2UsbD1rLmNvbmNhdE1vZHMoIl9fY3VycmVuY3ktbG9nbyIsZSk7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUocC5DdXJyZW5jeUxvZ28scih7bG9nbzpuLGxhbmd1YWdlOm8sY2xhc3NOYW1lOmkuYXBwbHkodm9pZCAwLGEoWyJfX2N1cnJlbmN5LWxvZ28iXSxsKSl9LHQpKX0sdC5wcm90b3R5cGUucmVuZGVyTG9nb1N0dWI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfO3JldHVybiB0aGlzLmxvZ28/c1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJsb2dvLXN0dWIiLGNsYXNzOmUoIl9fbG9nby1zdHViIil9KTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJBZ2U9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKTt2YXIgdD10aGlzLmJfLGk9dGhpcy5wcm9wcy5hZHYuYWdlO3JldHVybiBpP3NbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19hZ2UiLCJfX2FnZV8iK2UpfSxpKTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJBcHBJY29uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuYXBwO2lmKCF0fHwhdC5pY29uKXJldHVybiBudWxsO3ZhciBpPXQuaWNvbixuPWkuc3JjLG89aS5zaXplLHI9e3dpZHRoOm8saGVpZ2h0Om8sImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoIituKyIpIn07cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19hcHAtaWNvbiIpLHN0eWxlOnJ9KX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uQmlnSW1wbD1mdW5jdGlvbihlKXtpZighdGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuaXNCdXR0b25WaXNpYmxlKXJldHVybiBudWxsO3ZhciB0PXRoaXMuYl8saT10aGlzLmFjdGlvbixuPXRoaXMuYXBwLG89dGhpcy5wcm9wcy5hZHYuZG9tYWluLHI9bnVsbDtyZXR1cm4gbiYmbi5yYXRpbmc/cj1zWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fYnV0dG9uLWV4dHJhIil9LHNbImRlZmF1bHQiXS5jcmVhdGUoXy5TdGFycyx7dmFsdWU6bi5yYXRpbmd9KSk6byYmKHI9dGhpcy5yZW5kZXJFeHRyYURvbWFpbigpKSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJ1dHRvbi0iK2UsY2xhc3M6dCgiX19idXR0b24iLCJfX2J1dHRvbl8iK2UpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjppLnVybCxjbGFzczp0KCJfX2xpbmsiLCJfX2xpbmtfYnV0dG9uLWFjdGlvbiIsIl9fYnV0dG9uLWFjdGlvbiIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fYnV0dG9uLWNvbnRlbnQiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2J1dHRvbi10ZXh0Iil9LHNbImRlZmF1bHQiXS5jcmVhdGUoeS5UZXh0LHt0ZXh0OmkudGl0bGV9KSksbiYmbi5wcmljZT9zWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fYnV0dG9uLXRleHQiKX0sIlx4YTBcdTIwMTQgIituLnByaWNlLCIgIixzWyJkZWZhdWx0Il0uY3JlYXRlKGguUnVibGUsbnVsbCkpOm51bGwpKSxyKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuZmF2aWNvbix0PXRoaXMuYl8saT10aGlzLmFjdGlvbixuPXRoaXMucHJvcHMuYWR2LG89bi5kb21haW4scj1uLmZhdmljb247cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiYnV0dG9uLWRvbWFpbiIsY2xhc3M6dCgiX19idXR0b24iLCJfX2J1dHRvbl9kb21haW4iKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2J1dHRvbi1jb250ZW50Iil9LHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19idXR0b24tdGV4dCIpfSxyJiZlP3NbImRlZmF1bHQiXS5jcmVhdGUoSSx7c3JjOnIsY2xhc3M6dCgiX19mYXZpY29uIil9KTpudWxsLHNbImRlZmF1bHQiXS5jcmVhdGUoZC5OZXdMaW5rLHtocmVmOmkudXJsLGNsYXNzOnQoIl9fbGluayIsIl9fbGlua19idXR0b24tZXh0cmEiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSh5LlRleHQse3RleHQ6b30pKSkpKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9uQmlnSW1wbFByaWNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmlzQnV0dG9uVmlzaWJsZSxpPXRoaXMucHJvcHMuYWR2LG49aS5wcmljZUxhYmVsLG89aS5kb21haW47aWYoIXR8fCFufHwhbi5wcmljZSlyZXR1cm4gbnVsbDt2YXIgcj10aGlzLmJfLGE9dGhpcy5hY3Rpb24sbD1uLnByaWNlLGM9bi5vbGRQcmljZSx1PW51bGw7cmV0dXJuIGM/dT1zWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnIoIl9fYnV0dG9uLWV4dHJhIiwiX19idXR0b24tZXh0cmFfcHJpY2UiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpyKCJfX2J1dHRvbi1jb250ZW50Iil9LHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6cigiX19idXR0b24tdGV4dCIsIl9fYnV0dG9uLXRleHRfcHJpY2UiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZShkLk5ld0xpbmsse2hyZWY6YS51cmwsY2xhc3M6cigiX19saW5rIiwiX19saW5rX2J1dHRvbi1leHRyYSIsIl9fbGlua19vbGQtcHJpY2UiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSh5LlRleHQse3RleHQ6Y30pLCJceGEwIikpKSk6byYmKHU9dGhpcy5yZW5kZXJFeHRyYURvbWFpbigpKSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJ1dHRvbi0iK2UrIi1wcmljZSIsY2xhc3M6cigiX19idXR0b24iLCJfX2J1dHRvbl8iK2UpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjphLnVybCxjbGFzczpyKCJfX2xpbmsiLCJfX2xpbmtfYnV0dG9uLWFjdGlvbiIsIl9fYnV0dG9uLWFjdGlvbiIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnIoIl9fYnV0dG9uLWNvbnRlbnQiKX0sc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpyKCJfX2J1dHRvbi10ZXh0IiwiX19idXR0b24tdGV4dF9wcmljZSIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKHkuVGV4dCx7dGV4dDpsfSksIlx4YTAiKSkpLHUpfSx0LnByb3RvdHlwZS5yZW5kZXJFeHRyYURvbWFpbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmZhdmljb24sdD10aGlzLnByb3BzLmFkdixpPXQuZG9tYWluLG49dC5mYXZpY29uLG89dGhpcy5iXyxyPXRoaXMuYWN0aW9uO3JldHVybiBzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOm8oIl9fYnV0dG9uLWV4dHJhIiwiX19idXR0b24tZXh0cmFfZG9tYWluIil9LHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6bygiX19idXR0b24tY29udGVudCIpfSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOm8oIl9fYnV0dG9uLXRleHQiKX0sbiYmZT9zWyJkZWZhdWx0Il0uY3JlYXRlKEkse3NyYzpuLGNsYXNzOm8oIl9fZmF2aWNvbiIpLG1vZDoiX3RyYW5zcGFyZW50X25vbmUifSk6bnVsbCxzWyJkZWZhdWx0Il0uY3JlYXRlKGQuTmV3TGluayx7aHJlZjpyLnVybCxjbGFzczpvKCJfX2xpbmsiLCJfX2xpbmtfYnV0dG9uLWV4dHJhIil9LHNbImRlZmF1bHQiXS5jcmVhdGUoeS5UZXh0LHt0ZXh0Oml9KSkpKSl9LHQucHJvdG90eXBlLmdldElnbm9yZUludGVyc2VjdGluZ05hbWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PS8oXnxccykocHJpY2V8YnV0dG9uLW1lZGl1bS1wcmljZXxidXR0b24tc21hbGwtcHJpY2UpKCR8XHMpLyxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBuPWVbaV0ubmFtZTtpZih0LnRlc3QobikpcmV0dXJuIG59cmV0dXJuIG51bGx9LHR9KHUpO3QuQWR2QWRhcHRpdmVCYXNlPUF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG47bj1pKDM1MSksZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVtb3ZlTm9kZUZyb21QYXJlbnQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5wYXJlbnRFbGVtZW50O3QmJnQucmVtb3ZlQ2hpbGQoZSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSgxOSkuaXNTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImdldE5hdGl2ZU1ldGhvZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoMjc5KS5nZXROYXRpdmVNZXRob2R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImNoZWNrTmF0aXZlQ29kZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoMzcpLmNoZWNrTmF0aXZlQ29kZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZWFjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoNSkuZm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiZm9yT3duIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSg0NykuZm9yT3dufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJmaWx0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDIyKS5maWx0ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm1hcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoMTQpLm1hcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwia2V5cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoNDYpLmdldE9iamVjdEtleXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImluZGV4T2YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDIzKS5pbmRleE9mfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJnZW5SbmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDM5NikuZ2VuUm5kfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjYW1lbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoMjgwKS5jYW1lbGl6ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNJblJhbmdlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSgxMzIpLmlzSW5SYW5nZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidGhyb3R0bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDI0NykudGhyb3R0bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImJpbmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDM5NykuYmluZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNGdW5jdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoNykuaXNGdW5jdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNPYmplY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDI3KS5pc09iamVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaXNBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjApLmlzQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4dGVuZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoMjU3KS5leHRlbmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImF1Z21lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpKDE3NykuYXVnbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwib2JqZWN0Q3JlYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSgyODEpLm9iamVjdENyZWF0ZX19KX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz17Q1VTVE9NX0JMT0NLOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1NzApfSxuYW1lOiJDVVNUT01fQkxPQ0siLGlkOjQyfSxPTERfNDgweDMyMDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTc0KX0sbmFtZToiT0xEXzQ4MHgzMjAiLGlkOjQ3fSxPTERfNDAweDI0MDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTc1KX0sbmFtZToiT0xEXzQwMHgyNDAiLGlkOjQ4fSxPTERfMzAweDI1MDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTc2KX0sbmFtZToiT0xEXzMwMHgyNTAiLGlkOjQ5fSxPTERfMzM2eDI4MDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTc3KX0sbmFtZToiT0xEXzMzNngyODAiLGlkOjUwfSxPTERfVks6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU3OCl9LG5hbWU6Ik9MRF9WSyIsaWQ6NTF9LE9MRF9ORVdWSzp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTc5KX0sbmFtZToiT0xEX05FV1ZLIixpZDo1Mn0sT0xEXzk3MHgyNTA6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU4MCl9LG5hbWU6Ik9MRF85NzB4MjUwIixpZDo1M30sT0xEXzk3MHg5MDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTgxKX0sbmFtZToiT0xEXzk3MHg5MCIsaWQ6NTR9LE9MRF8zMjB4MTAwOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1ODIpfSxuYW1lOiJPTERfMzIweDEwMCIsaWQ6NTV9LE9MRF8zMjB4NTA6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU4Myl9LG5hbWU6Ik9MRF8zMjB4NTAiLGlkOjU2fSxPTERfTUFJTFJVX1ZFUlRJQ0FMOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1ODQpfSxuYW1lOiJPTERfTUFJTFJVX1ZFUlRJQ0FMIixpZDo1N30sT0xEX01BSUxSVV9IT1JJWk9OVEFMOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1ODUpfSxuYW1lOiJPTERfTUFJTFJVX0hPUklaT05UQUwiLGlkOjU4fSxPTERfQURBUFRJVkU6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU4Nil9LG5hbWU6Ik9MRF9BREFQVElWRSIsaWQ6NTl9LE9MRF9IT1JJWk9OVEFMOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1ODgpfSxuYW1lOiJPTERfSE9SSVpPTlRBTCIsaWQ6NjB9LE9MRF9WRVJUSUNBTDp7aXNPbGQ6ITAsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNTg5KX0sbmFtZToiT0xEX1ZFUlRJQ0FMIixpZDo2MX0sT0xEX0dSSUQ6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU5MCl9LG5hbWU6Ik9MRF9HUklEIixpZDo2Mn0sT0xEXzE2MHg2MDA6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU5MSl9LG5hbWU6Ik9MRF8xNjB4NjAwIixpZDo2M30sT0xEXzIwMHgzMDA6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU5Mil9LG5hbWU6Ik9MRF8yMDB4MzAwIixpZDo2NH0sT0xEXzI1MHgyNTA6e2lzT2xkOiEwLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU5Myl9LG5hbWU6Ik9MRF8yNTB4MjUwIixpZDo2NX0sT0xEXzEwMDB4MTIwOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1OTQpfSxuYW1lOiJPTERfMTAwMHgxMjAiLGlkOjY2fSxPTERfT0xEX1ZFUlRJQ0FMOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1OTUpfSxuYW1lOiJPTERfT0xEX1ZFUlRJQ0FMIixpZDo2N30sT0xEX09MRF9IT1JJWk9OVEFMOntpc09sZDohMCxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg1OTYpfSxuYW1lOiJPTERfT0xEX0hPUklaT05UQUwiLGlkOjY4fSxCTE9DS18zMjB4Njc6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDU5Nyl9LG5hbWU6IkJMT0NLXzMyMHg2NyIsaWQ6MH0sQkxPQ0tfUkVTUE9OU0lWRV9NT0JJTEU6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYxMyl9LG5hbWU6IkJMT0NLX1JFU1BPTlNJVkVfTU9CSUxFIixpZDoxfSxTSU5HTEVfVkVSVElDQUw6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYxNSl9LG5hbWU6IlNJTkdMRV9WRVJUSUNBTCIsaWQ6Mn0sU0lOR0xFX1ZFUlRJQ0FMX0JJRzp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjE2KX0sbmFtZToiU0lOR0xFX1ZFUlRJQ0FMX0JJRyIsaWQ6M30sU0lOR0xFX0hPUklaT05UQUw6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYxNyl9LG5hbWU6IlNJTkdMRV9IT1JJWk9OVEFMIixpZDo0fSxTSU5HTEVfSE9SSVpPTlRBTF9ZQU5FV1M6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYxOCl9LG5hbWU6IlNJTkdMRV9IT1JJWk9OVEFMX1lBTkVXUyIsaWQ6Nn0sQURBUFRJVkU6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYxOSl9LG5hbWU6IkFEQVBUSVZFIixpZDo3fSxFTEFTVElDOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjApfSxuYW1lOiJFTEFTVElDIixpZDo4fSxFTEFTVElDX1ZFUlRJQ0FMOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjEpfSxuYW1lOiJFTEFTVElDX1ZFUlRJQ0FMIixpZDo5fSxFTEFTVElDX0ZJWEVEOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjUpfSxuYW1lOiJFTEFTVElDX0ZJWEVEIixpZDoxMH0sRUxBU1RJQ19GSVhFRF9ZQTp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjI2KX0sbmFtZToiRUxBU1RJQ19GSVhFRF9ZQSIsaWQ6MTF9LEVMQVNUSUNfRklYRURfUE9HT0RBOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjcpfSxuYW1lOiJFTEFTVElDX0ZJWEVEX1BPR09EQSIsaWQ6MTJ9LFBPR09EQV9HUklEOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjgpfSxuYW1lOiJQT0dPREFfR1JJRCIsaWQ6MTN9LEVMQVNUSUNfRklYRURfU0VMRUNUOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MjkpfSxuYW1lOiJFTEFTVElDX0ZJWEVEX1NFTEVDVCIsaWQ6MTR9LFBPU1RFUl9WRVJUSUNBTDp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjMwKX0sbmFtZToiUE9TVEVSX1ZFUlRJQ0FMIixpZDoxNn0sUE9TVEVSX1ZFUlRJQ0FMX1lBTkVXUzp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjMzKX0sbmFtZToiUE9TVEVSX1ZFUlRJQ0FMX1lBTkVXUyIsaWQ6MTd9LFBPU1RFUl9IT1JJWk9OVEFMOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MzQpfSxuYW1lOiJQT1NURVJfSE9SSVpPTlRBTCIsaWQ6MTh9LEVYVEVOU0lCTEVfTU9CSUxFOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MzUpfSxuYW1lOiJFWFRFTlNJQkxFX01PQklMRSIsaWQ6MTl9LE1BSUxSVV9WRVJUSUNBTDp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjM2KX0sbmFtZToiTUFJTFJVX1ZFUlRJQ0FMIixpZDoyMn0sTU9SREE6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDYzNyl9LG5hbWU6Ik1PUkRBIixpZDoyM30sTVVMVElfSU5URVJTVElUSUFMOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2MzgpfSxuYW1lOiJNVUxUSV9JTlRFUlNUSVRJQUwiLGlkOjI0fSxSTVBfVklERU86e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY0MCl9LG5hbWU6IlJNUF9WSURFTyIsaWQ6Mjd9LE1BSUxSVV9QTFVHSU46e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY0MSl9LG5hbWU6Ik1BSUxSVV9QTFVHSU4iLGlkOjI4fSxBTklNQVRFRF9TQ1JPTExBQkxFX01PQklMRTp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjQyKX0sbmFtZToiQU5JTUFURURfU0NST0xMQUJMRV9NT0JJTEUiLGlkOjI5fSxQSUNUVVJFX1NFQVJDSDp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjQzKX0sbmFtZToiUElDVFVSRV9TRUFSQ0giLGlkOjMxfSxQSUNUVVJFX1NFQVJDSF8zOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2NDQpfSxuYW1lOiJQSUNUVVJFX1NFQVJDSF8zIixpZDozMn0sUElDVFVSRV9TRUFSQ0hfRklYRUQ6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY0NSl9LG5hbWU6IlBJQ1RVUkVfU0VBUkNIX0ZJWEVEIixpZDozM30sWkVOOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2NDYpfSxuYW1lOiJaRU4iLGlkOjM0fSxST1c6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY3MSl9LG5hbWU6IlJPVyIsaWQ6Mzd9LENPTVBBQ1Q6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY3Mil9LG5hbWU6IkNPTVBBQ1QiLGlkOjM4fSxNT1RJT046e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY3Myl9LG5hbWU6Ik1PVElPTiIsaWQ6Mzl9LEFEQVBUSVZFXzA0MTg6e2lzT2xkOiExLGFzeW5jOiExLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDQwOCl9LG5hbWU6IkFEQVBUSVZFXzA0MTgiLGlkOjQwfSxQT1NURVJfVjM6e2lzT2xkOiExLGFzeW5jOiExLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY4OSl9LG5hbWU6IlBPU1RFUl9WMyIsaWQ6NDF9LEJMT0NLXzI0MHg0MDBfTUVESUE6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY5NCl9LG5hbWU6IkJMT0NLXzI0MHg0MDBfTUVESUEiLGlkOjQzfSxCTE9DS18zMjB4NDgwX01FRElBOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg2OTUpfSxuYW1lOiJCTE9DS18zMjB4NDgwX01FRElBIixpZDo0NH0sQkxPQ0tfMzAweDUwMF9NRURJQTp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjk2KX0sbmFtZToiQkxPQ0tfMzAweDUwMF9NRURJQSIsaWQ6NDV9LEJMT0NLXzMwMHg2MDBfTUVESUE6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY5Nyl9LG5hbWU6IkJMT0NLXzMwMHg2MDBfTUVESUEiLGlkOjQ2fSxQT1NURVJfVjJfSE9SSVpPTlRBTDp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNjk4KX0sbmFtZToiUE9TVEVSX1YyX0hPUklaT05UQUwiLGlkOjY5fSxQT1NURVJfVjJfVkVSVElDQUw6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDY5OSl9LG5hbWU6IlBPU1RFUl9WMl9WRVJUSUNBTCIsaWQ6NzB9LE1BSUxSVV9IT1JJWk9OVEFMOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg3MDApfSxuYW1lOiJNQUlMUlVfSE9SSVpPTlRBTCIsaWQ6NzF9LFNJTVBMRTp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNzAxKX0sbmFtZToiU0lNUExFIixpZDo3Mn0sQklMTEJPQVJEOntpc09sZDohMSxhc3luYzohMCxtb2R1bGU6ZnVuY3Rpb24oKXtyZXR1cm4gaSg3MDIpfSxuYW1lOiJCSUxMQk9BUkQiLGlkOjczfSxBREFQVElWRV9WMzp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNzAzKX0sbmFtZToiQURBUFRJVkVfVjMiLGlkOjc0fSxaRU5fQ0FST1VTRUw6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDcwNCl9LG5hbWU6IlpFTl9DQVJPVVNFTCIsaWQ6NzV9LFBPU1RFUl9DQVJPVVNFTDp7aXNPbGQ6ITEsYXN5bmM6ITAsbW9kdWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNzA1KX0sbmFtZToiUE9TVEVSX0NBUk9VU0VMIixpZDo3Nn0sQURBUFRJVkVfQ0FST1VTRUw6e2lzT2xkOiExLGFzeW5jOiEwLG1vZHVsZTpmdW5jdGlvbigpe3JldHVybiBpKDcwNil9LG5hbWU6IkFEQVBUSVZFX0NBUk9VU0VMIixpZDo3N319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iOiI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXRbb109YXJndW1lbnRzW29dO3ZhciByPVtdO3JldHVybiBpKDUpLmZvckVhY2godCxmdW5jdGlvbih0KXtpKDE5KS5pc1N0cmluZyh0KSYmIiIhPT10JiZpKDUpLmZvckVhY2goKCIiK3QpLnNwbGl0KCIgIiksZnVuY3Rpb24odCl7aWYodCl7dmFyIGk9ZVt0XTsoaXx8MCE9PXQuaW5kZXhPZihuKSkmJnIucHVzaChpfHx0KX19KX0pLHIuam9pbigiICIpfX10LmNsYXNzTmFtZXNGYWN0b3J5PW8sdC5iZW1DbGFzc05hbWVzRmFjdG9yeT1mdW5jdGlvbihlLHQpe3ZhciBuPWkoMzA0KS5CZW1Gb3JtYXR0ZXIoZSk7aWYoaSg3KS5pc0Z1bmN0aW9uKHQpKXJldHVybiBuO3ZhciByPW8odCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIHIoZSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxpKXtlLz0yNTUsdC89MjU1LGkvPTI1NTt2YXIgbj1NYXRoLm1heChlLHQsaSksbz1NYXRoLm1pbihlLHQsaSkscj1uLW8sYT0wO249PT1vP2E9MDplPT09bj9hPSh0LWkpL3I6dD09PW4/YT0yKyhpLWUpL3I6aT09PW4mJihhPTQrKGUtdCkvciksKGE9TWF0aC5taW4oNjAqYSwzNjApKTwwJiYoYSs9MzYwKTt2YXIgcz0obytuKS8yO3JldHVyblthLDEwMCoobj09PW8/MDpzPD0uNT9yLyhuK28pOnIvKDItbi1vKSksMTAwKnNdfWZ1bmN0aW9uIG8oZSx0LGkpe2UvPTI1NSx0Lz0yNTUsaS89MjU1O3ZhciBuPU1hdGgubWF4KGUsdCxpKSxvPU1hdGgubWluKGUsdCxpKSxyPW4tbyxhPTAscz0wPT09bj8wOnIvbixsPW47aWYobiE9PW8pe3N3aXRjaChuKXtjYXNlIGU6YT0odC1pKS9yKyh0PGk/NjowKTticmVhaztjYXNlIHQ6YT0oaS1lKS9yKzI7YnJlYWs7Y2FzZSBpOmE9KGUtdCkvcis0fWEvPTZ9cmV0dXJuW2EscyxsXX1mdW5jdGlvbiByKGUpe3JldHVybigyOTkqZVswXSs1ODcqZVsxXSsxMTQqZVsyXSkvMWUzfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGkoMjk4KS5IRVhfU1lNQk9MUy5jaGFyQXQoZS8xNjw8MCkraSgyOTgpLkhFWF9TWU1CT0xTLmNoYXJBdChlJTE2KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5yZ2JUb0hzbD1uLHQucmdiVG9Vbk5vcm1hbGl6ZWRIc3Y9byx0LnJnYlRvSHN2PWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1vKGUsdCxpKSxyPW5bMF0sYT1uWzFdLHM9blsyXTtyZXR1cm5bTWF0aC5tYXgoMCxNYXRoLm1pbigzNjAsTWF0aC5yb3VuZCgzNjAqcikpKSxNYXRoLm1heCgwLE1hdGgubWluKDEwMCxNYXRoLnJvdW5kKDEwMCphKSkpLE1hdGgubWF4KDAsTWF0aC5taW4oMTAwLE1hdGgucm91bmQoMTAwKnMpKSldfSx0LnNldFJnYkJyaWdodG5lc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uKGVbMF0sZVsxXSxlWzJdKSxyPW9bMF0sYT1vWzFdO3JldHVybiBpKDIwMykuaHNsVG9SZ2IocixhLHQpfSx0LmNoYW5nZVJnYkJyaWdodG5lc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbz1uKGVbMF0sZVsxXSxlWzJdKSxyPW9bMF0sYT1vWzFdLHM9b1syXTtyZXR1cm4gaSgyMDMpLmhzbFRvUmdiKHIsYSxpKDQ2MSkuY2xhbXAocyt0LDAsMTAwKSl9LHQuZ2V0UmdiQnJpZ2h0bmVzcz1yLHQuaXNSZ2JMaWdodD1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0xMjcpLHIoZSk+dH0sdC5yZ2JGcm9tSGV4U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlLnN1YnN0cigxLDIpLDE2KSxwYXJzZUludChlLnN1YnN0cigzLDIpLDE2KSxwYXJzZUludChlLnN1YnN0cig1LDIpLDE2KV19LHQucmdiVG9IZXhTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxpPWVbMV0sbj1lWzJdO3JldHVybiIjIithKHQpK2EoaSkrYShuKX0sdC5kZWMyaGV4PWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzNCksYT1pKDU3KSxzPWkoMTUzKSxsPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxpKXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcyxvPWkud2lkdGgscj1pLm1pbldpZHRoLGE9aS5tYXhXaWR0aCxsPWkuaGVpZ2h0LGM9aS5taW5IZWlnaHQsdT1pLm1heEhlaWdodDtyZXR1cm4gbi53aWR0aD17bWluOnMubm9ybWFsaXplVmFsdWUobyl8fHMubm9ybWFsaXplVmFsdWUociksbWF4OnMubm9ybWFsaXplVmFsdWUobyl8fHMubm9ybWFsaXplVmFsdWUoYSl8fDEvMH0sbi5oZWlnaHQ9e21pbjpzLm5vcm1hbGl6ZVZhbHVlKGwpfHxzLm5vcm1hbGl6ZVZhbHVlKGMpLG1heDpzLm5vcm1hbGl6ZVZhbHVlKGwpfHxzLm5vcm1hbGl6ZVZhbHVlKHUpfHwxLzB9LG59cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5pc0ZpeGVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCx0PXRoaXMuaGVpZ2h0O3JldHVybiBlLm1pbj09PWUubWF4JiZ0Lm1pbj09PXQubWF4fSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCx0PXRoaXMuaGVpZ2h0O2lmKHRoaXMuaXNGaXhlZCgpKXJldHVybnt3aWR0aDplLm1pbixoZWlnaHQ6dC5taW59O3ZhciBpPXIuZ2V0TGltaXRGdW5jdGlvbihlLm1pbixlLm1heCksbj1yLmdldExpbWl0RnVuY3Rpb24odC5taW4sdC5tYXgpLG89YS5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCk7cmV0dXJue3dpZHRoOmkoby53aWR0aCksaGVpZ2h0Om4oby5oZWlnaHQpfX0sdH0ocy5TaXplTWV0ZXJCYXNlKTt0LlNpemVNZWFzdXJlcj1sfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LkNvbnRhaW5lcj12b2lkIDA7dmFyIG49ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSksbz1pKDk1KTt0LkNvbnRhaW5lcj1uLmF1Z21lbnQoby5BYnN0cmFjdENvbXBvbmVudCx7Y29uc3RydWN0b3I6ZnVuY3Rpb24oKXtvLkFic3RyYWN0Q29tcG9uZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZUhleFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IiIsbj0wO248ZTtuKyspdCs9KDE2KmkoMTE0KS5yYW5kb20oKXwwKS50b1N0cmluZygxNik7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLG89dC5zcGxpdCgiLiIpO248by5sZW5ndGg7bisrKXt2YXIgcj1vW25dO2lmKCFpKDI3KS5pc09iamVjdChlKSl7ZT12b2lkIDA7YnJlYWt9ZT1lW3JdfXJldHVybiBlfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5leHRyYWN0SlNPTkZyb21JZnJhbWU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ZG9jdW1lbnQuYm9keSk7dmFyIHQ9aSg0MzkpLmNyZWF0ZUhpZGRlbkZyaWVuZGx5SUZyYW1lKGUpO3JldHVybntKU09OOnQuY29udGVudFdpbmRvdy5KU09OLGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGkoNDQxKS5yZW1vdmVJZnJhbWUodCl9fX0sdC5nZXROYXRpdmVKU09OPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLHZvaWQgMD09PW4mJihuPXIoZSk/ZS5KU09OOntzdHJpbmdpZnk6bygic3RyaW5naWZ5IikscGFyc2U6bygicGFyc2UiKX0pLG59O3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbj10LmV4dHJhY3RKU09ORnJvbUlmcmFtZSgpLG89bi5KU09OLHI9bi5jbGVhbjt0cnl7cmV0dXJuIG9bZV0oaSl9ZmluYWxseXtyKCl9fX07ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxlLkpTT04mJmkoMzcpLmNoZWNrTmF0aXZlQ29kZShlLkpTT04uc3RyaW5naWZ5KSYmaSgzNykuY2hlY2tOYXRpdmVDb2RlKGUuSlNPTi5wYXJzZSl9dC5jaGVja05hdGl2ZUpTT049cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9aSgxNzEpLHM9aSgxKSxsPWkoMTE5KSxjPWkoMjA4KSx1PWkoMjA5KSxkPWkoMTQ5KSxwPWkoMTU1KSxmPWkoMTApLGg9aSgzNDMpLGc9aSgyMzgpLF89aSg2NTcpLHk9bmV3IGguQW5pbWF0aW9uUXVldWUoe2RlbGF5OjFlM30pLG09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9ImltYWdlLWFkYXB0aXZlIixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuZmFkZSxpPXRoaXMuYl8sbj10aGlzLnByb3BzLmltYWdlcztyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJjb250YWluZXIiLGNsYXNzOmkoaSgpLHRoaXMucHJvcHMuY2xhc3NOYW1lKX0sclsiZGVmYXVsdCJdLmNyZWF0ZShnLkltYWdlLHtyZXNvdXJjZUlkOiJpbWFnZSIsaW1hZ2VzOm4sc21hcnRDZW50ZXI6dGhpcy5wcm9wcy5zbWFydENlbnRlcixzaXplOiJjb3ZlciIsZGlzYWJsZUZpdE9uTW91bnQ6ITAsb25Mb2FkOmZ1bmN0aW9uKHQpe3JldHVybiBlLm9uTG9hZEltYWdlKHQpfSxjbGFzc05hbWVzOnsiOjpob3N0IjppKCJfX3BpY3R1cmUiLHQ/Il9mYWRlIjoiIiksIjo6aW1nIjppKCJfX3BpY3R1cmUtaW1nIil9fSkpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb250YWluZXI9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImNvbnRhaW5lciIpLHRoaXMuaW1hZ2U9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImltYWdlIiksdGhpcy5wdXNoU3R5bGVzKF8se2FuaW1hdGlvbkR1cmF0aW9uOjhlM30pLHRoaXMucHJvcHMuY29udGV4dC5kb09uUmVhZHkocC5SZWFkeVN0YWdlLlR1bmUsZnVuY3Rpb24oKXtlLmRlc3Ryb3llZHx8KGUuaW1hZ2UuZml0SW1hZ2UoKSxlLmluaXRBbmltYXRpb24oKSl9KX0sdC5wcm90b3R5cGUub25Vbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5zdG9wVmlzaWJpbGl0eU9ic2VydmVyJiZ0aGlzLnN0b3BWaXNpYmlsaXR5T2JzZXJ2ZXIoKX0sdC5wcm90b3R5cGUub25Mb2FkSW1hZ2U9ZnVuY3Rpb24oZSl7dGhpcy5pc0xhbmRzY2FwZU9yaWVudGF0aW9uPWUud2lkdGg+ZS5jb250YWluZXJXaWR0aCx0aGlzLmN1cnJlbnRJbWFnZT1lfSx0LnByb3RvdHlwZS5pbml0QW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLnByb3BzLmFuaW1hdGlvbil7dmFyIHQsaT10aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCksbj10aGlzLnByb3BzLmFuaW1hdGlvbkNvdW50LG89dm9pZCAwPT09bj8xLzA6bixyPSExLGE9MCxwPXtvblN0YXJ0OmZ1bmN0aW9uKGkpe2ErKyx0PWUucnVuQW5pbWF0aW9uKGZ1bmN0aW9uKCl7cC5vblN0b3AoaSl9KX0sb25TdG9wOmZ1bmN0aW9uKGUpe3Quc3RvcCgpLHImJmE8bz95LnB1c2gocCk6YT0wLGUoKX19LGY9bC52aXNpYmlsaXR5T2JzZXJ2ZXIoZC5PbmVPZlN0cmF0ZWd5LmZyb20odS5JbnRlcnNlY3Rpb25TdHJhdGVneS5mYWN0b3J5LGMuRHVtbXlTdHJhdGVneS5mYWN0b3J5KSk7dGhpcy5zdG9wVmlzaWJpbGl0eU9ic2VydmVyPWYoaSxzLnByb3RlY3QoIm9uQ2hhbmdlVmlzaWJpbGl0eUltYWdlQWRhcHRpdmUiLGZ1bmN0aW9uKGUpe3I9ZSxlP3kucHVzaChwKTooeS5yZW1vdmUocCksYT0wKX0pKX19LHQucHJvdG90eXBlLnJ1bkFuaW1hdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5pbWFnZSxuPWkucG9zWCxvPWkucG9zWSxyPXRoaXMuY3VycmVudEltYWdlLHM9bixsPW8sYz0xLHU9KHRoaXMuaXNMYW5kc2NhcGVPcmllbnRhdGlvbj9NYXRoLmFjb3MoMipuLTEpL01hdGguUEk6LU1hdGguYXNpbigyKm8tMSkvTWF0aC5QSSkqTWF0aC5QSSxkPTA7cmV0dXJuIHIuYXJlYS8oci5jb250YWluZXJXaWR0aCpyLmNvbnRhaW5lckhlaWdodCk8MS4zJiYoZD0uMiksYS5hbmltYXRlKHtkdXJhdGlvbjo4ZTMsc3RhcnQ6MCxlbmQ6MSxvbkZyYW1lOmZ1bmN0aW9uKGUpe3ZhciBpPTE7ZTwuMz9pPWUvLjM6ZT4uNyYmKGk9KDEtZSkvLjMpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8LjU/MiplKmU6KDQtMiplKSplLTF9KGkpLGM9aSpkKzE7dmFyIG49MSplKk1hdGguUEkqMit1O3QuaXNMYW5kc2NhcGVPcmllbnRhdGlvbj9zPSgxK01hdGguY29zKG4pKS8yOmw9KDErTWF0aC5zaW4oLW4pKS8yLHQuaW1hZ2Uuc2Nyb2xsVG8ocyxsLGMpfSxvbkVuZDpmdW5jdGlvbigpe3QuaW1hZ2Uuc2Nyb2xsVG8obixvKSxlKCl9fSl9LHR9KGYpO3QuSW1hZ2VBZGFwdGl2ZT1tfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldENsaWNrSW5mb0ZvclVybD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBuJiYoZT17Y2xpY2tYOm4uY2xpY2tYLGNsaWNrWTpuLmNsaWNrWSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodH0pLGV9LHQuY3JlYXRlQ2xpY2tJbmZvPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcj1pKDMzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoZS5jdXJyZW50VGFyZ2V0KSxhPXIubGVmdCxzPXIudG9wLGw9ci53aWR0aCxjPXIuaGVpZ2h0LHU9TWF0aC5yb3VuZChlLmNsaWVudFgtYSksZD1NYXRoLnJvdW5kKGUuY2xpZW50WS1zKTtyZXR1cm4gbj17Y2xpY2tYOnUsY2xpY2tZOmQsd2lkdGg6TWF0aC5yb3VuZChsKSxoZWlnaHQ6TWF0aC5yb3VuZChjKSx0eXBlOnQsdGltZVNwZW50Om99fSx0LnNlbmRDbGlja0luZm9Mb2c9ZnVuY3Rpb24oZSl7aSg5KS5sb2dnZXIubG9nKGUsIkNMSUNLX0lORk8iKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9FUlJPUj17bWVzc2FnZToiREVGQVVMVF9FUlJPUl9NRVNTQUdFIixjb2RlOjAsZGV0YWlsczoiIixzdGFjazoiPzo/Oj8iLGlzRmF0YWw6ITB9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEVtcHR5UmVzcG9uc2U9ZnVuY3Rpb24oKXtyZXR1cm57Y29tbW9uOnt9fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoNDY1KS5nZXRBbmltYXRpb25GcmFtZUZ1bmN0aW9ucyh3aW5kb3cpO3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lLHQuY2FuY2VsQW5pbWF0aW9uRnJhbWU9bi5jYW5jZWxBbmltYXRpb25GcmFtZX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zZW5kUGl4ZWw9ZnVuY3Rpb24oZSx0LG4pe2koMzAzKS5sb2FkSW1hZ2Uoe3NyYzplLG9uTG9hZDp0LGN0eDpufSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG87T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoOCkuZXhwZXJpbWVudElkcy5zc1NraXBUb2tlbixhPXIuRU5BQkxFRCxzPXIuV0lERV9MT0csbD1yLkNMSUVOVCxjPXIuU0VSVkVSX01BTlVBTCx1PXIuU0VSVkVSX0FVVE8sZD0oKG49e30pW3NdPTU0MTUsbltsXT01NDU2LG5bY109NTQ1NyxuW3VdPTU0NTgsbikscD1pKDU1KS5yZWR1Y2UoaSg0NikuZ2V0T2JqZWN0S2V5cyhkKSxmdW5jdGlvbihlLHQpe3JldHVybiBlW2RbdF1dPXQsZX0se30pO3QuZ2V0TmFtZT1mdW5jdGlvbihlLHQpe3ZhciBuPWkoNTUpLnJlZHVjZShpKDQ2KS5nZXRPYmplY3RLZXlzKHIpLGZ1bmN0aW9uKHQsaSl7dmFyIG49cltpXTtyZXR1cm4gZShuKT9uOnR9LHZvaWQgMCk7cmV0dXJuIHBbU3RyaW5nKHQpXXx8bn0sdC5pbml0PWZ1bmN0aW9uKGUpe3JldHVybntzc1NraXBUb2tlbkV4cElkOmRbU3RyaW5nKGUpXSxpc1NzU2tpcFRva2VuOmkoNDUpLnNvbWUoW2EscyxjLHVdLGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pLGlzU3NTa2lwVG9rZW5TZXJ2ZXJBdXRvOmU9PT11fX0sdC5zc1NraXBUb2tlbkV4cElkPShvPXQuaW5pdCh0LmdldE5hbWUoaSgyNikuaXNMb25nRXhwZXJpbWVudCxpKDE4OSkuZ2V0RXhwZXJpbWVudElkKCkpKSkuc3NTa2lwVG9rZW5FeHBJZCx0LmlzU3NTa2lwVG9rZW49by5pc1NzU2tpcFRva2VuLHQuaXNTc1NraXBUb2tlblNlcnZlckF1dG89by5pc1NzU2tpcFRva2VuU2VydmVyQXV0b30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRIZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnQsaT10LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07cmV0dXJuIGl8fChpPXQuY3JlYXRlRWxlbWVudCgiaGVhZCIpLHQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGkpKSxpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRVc2VyQWdlbnQ9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93KTt0cnl7cmV0dXJuKGUubmF2aWdhdG9yfHx7fSkudXNlckFnZW50fHwiIn1jYXRjaChlKXtyZXR1cm4iIn19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFJhbmRvbVN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZTtuKyspdC5wdXNoKGkoNTA0KS5nZXRSYW5kb21DaGFyKCkpO3JldHVybiB0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0luSWZyYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvcCE9PWUuc2VsZn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz0hMDt0LnNlbmRMYWJlbD1mdW5jdGlvbihlKXt2YXIgdD1pKDIpLnJlbmRlclBlcmZvbWFuY2VNYW5hZ2VyLmdldEpzVHJhY2VyT2JqZWN0KGUpO3QmJihvJiYobz0hMSx0LnRhZ3M9bihuKHt9LHQudGFncykse2NzZXQ6aSgxMikuZ2V0R2xvYmFsVmFyaWFibGUoImNvbnRleHRFeGVjdXRpb25UaW1lIil9KSx0LmRhdGE9bihuKHt9LHQuZGF0YSkse2ZpcnN0UmVuZGVyOiEwfSkpLGkoMTUwKS5zZW5kVG9Tb2xvbW9uKG4oe2V2ZW50TmFtZToiYmxvY2tfcmVuZGVyIn0sdCkpKX0sdC5zZW5kUmVzb3VyY2VJbmZvPWZ1bmN0aW9uKCl7dmFyIGU9aSg1MjYpLm5ldHdvcmtQZXJmb21hY2VNYW5hZ2VyLmdldEpzVHJhY2VyT2JqZWN0KCk7ZSYmaSgxNTApLnNlbmRUb1NvbG9tb24obih7ZXZlbnROYW1lOiJwZXJmb3JtYW5jZSJ9LGUpKX0sdC5zZXRDb250ZXh0RXhlY3V0aW9uVGltZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PU51bWJlcihuZXcgRGF0ZSkpLG8mJihpKDEyKS5zZXRHbG9iYWxWYXJpYWJsZSgiY29udGV4dEV4ZWN1dGlvblRpbWUiLHQtZSksbz0hMSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1bInBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyIsInRvcDogLTEwMHB4OyIsImxlZnQ6IC0xMDBweDsiLCJoZWlnaHQ6IDc1cHg7Iiwid2lkdGg6IDc1cHg7Iiwib3ZlcmZsb3c6IGhpZGRlbjsiXS5qb2luKCIgIik7ZnVuY3Rpb24gbyhlKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX10LmNyZWF0ZURpdldpdGhDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmlubmVySFRNTD1lLHQuc3R5bGUuY3NzVGV4dD1uLGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHQsbnVsbCksdH0sdC5jcmVhdGVUZXN0SWZyYW1lPWZ1bmN0aW9uKGUsdCxpKXt2b2lkIDA9PT1pJiYoaT0iIik7dmFyIG49WyJkaXNwbGF5OiBibG9jazsiLCJwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsiLCJ0b3A6IC0xMDBweDsiLCJsZWZ0OiAtMTAwMHB4OyIsIm92ZXJmbG93OiBoaWRkZW47Il0uam9pbigiICIpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJ3aWR0aCIsZS50b1N0cmluZygxMCkrInB4Iiksby5zZXRBdHRyaWJ1dGUoImhlaWdodCIsdC50b1N0cmluZygxMCkrInB4IiksaSYmby5zZXRBdHRyaWJ1dGUoInNyYyIsaSksby5zdHlsZS5jc3NUZXh0PW4sZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUobyxudWxsKSxvfSx0LnJlbW92ZUVsZW1lbnQ9byx0LnJlbW92ZUVsZW1lbnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKW8oZVt0XSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDU5KSxzPWkoMTApLGw9aSg4OSksYz1pKDYxMSksdT1pKDMzNSkuVGV4dE9iZnVzY2F0b3IsZD0vPFwvP2I+L2cscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubmFtZT0icHVibGlzaGVycy10ZXh0IixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMsaT10LnRleHQsbj10LmNsYXNzTmFtZSxvPVtlKCksbl07dC5oeXBoZW5hdGVzJiZvLnB1c2goZSgiX2h5cGhlbnMiKSksdC5oaWdobGlnaHR8fChpPWkucmVwbGFjZShkLCIiKSk7dmFyIHM9dC5wcmV0dGlmeSxjPXZvaWQgMD09PXN8fHMscD10LnByZXR0aWZ5T3B0aW9ucztyZXR1cm4gYyYmKGk9YS5wcmV0dGlmeShpLHApKSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOm8uam9pbigiICIpLHJlc291cmNlSWQ6InB1Ymxpc2hlcnMtdGV4dCJ9LHUmJnQub2JmdXNjYXRlP3JbImRlZmF1bHQiXS5jcmVhdGUodSx7dGV4dDppfSk6clsiZGVmYXVsdCJdLmNyZWF0ZShsLkh0bWwse3RleHQ6aX0pKX0sdC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMoYyl9LHR9KHMpO3QuVGV4dD1wfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5vbkNoYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5jaGVjayhlKX07dmFyIG89e3BvcnRpb246dm9pZCAwIT09ZS5wb3J0aW9uP2UucG9ydGlvbjppKDMxMikuZ2V0UG9ydGlvbihpKDk3KS5WSVNJQklMSVRZX0NSSVRFUklBLllBLGUuZWxlbWVudCksaW50ZXJ2YWw6dm9pZCAwIT09ZS5pbnRlcnZhbD9lLmludGVydmFsOmkoMTE5KS5ERUZBVUxUX0lOVEVSVkFMLG92ZXJsYXBwZWRQb2ludHM6dm9pZCAwIT09ZS5vdmVybGFwcGVkUG9pbnRzP2Uub3ZlcmxhcHBlZFBvaW50czpbWzAsMF1dfSxyPShlLnN0cmF0ZWd5P2Uuc3RyYXRlZ3k6aSgxMjApLkdlbmVyYWxTdHJhdGVneS5mYWN0b3J5KSh7cG9ydGlvbjpNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLG8ucG9ydGlvbiksaW50ZXJ2YWw6by5pbnRlcnZhbCxvdmVybGFwcGVkUG9pbnRzOm8ub3ZlcmxhcHBlZFBvaW50cyxlbGVtZW50OmUuZWxlbWVudCxjYWxsYmFjazppKDEpLnByb3RlY3QoInZpc2liaWxpdHlPYnNlcnZlciIsdGhpcy5vbkNoYW5nZSl9KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlZpc2liaWxpdHlDb25maXJtZXI6IG5vIHN0cmF0ZWd5Iik7dGhpcy5zdHJhdGVneT1yLHRoaXMuY29uZmlybWF0aW9uRW50cmllcz1pKDE0KS5tYXAoZS5jb25maXJtYXRpb25zfHxbXSxmdW5jdGlvbihlKXtyZXR1cm4gbihuKHtjb25maXJtT25Ib3ZlcjohMCxkZWxheTppKDIxMCkuZ2V0RGVsYXkoaSg5NykuVklTSUJJTElUWV9DUklURVJJQS5ZQSl9LGUpLHtjb25maXJtVGltZW91dElkOm51bGwsaXNDb25maXJtZWQ6ITF9KX0pLHRoaXMucHJldmVudFN0b3A9ZS5wcmV2ZW50U3RvcCx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1lLm9uVmlzaWJpbGl0eUNoYW5nZTt2YXIgYT1pKDE3KS5vbihlLmVsZW1lbnQsIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkhvdmVyKCl9KTt0aGlzLnN0b3BNb3VzZW92ZXJUcmFja2luZz1mdW5jdGlvbigpe3JldHVybiBpKDE3KS51bihhKX0sITEhPT1lLmF1dG9zdGFydCYmdGhpcy5zdGFydCgpfXJldHVybiBlLmZhY3Rvcnk9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGUoe3BvcnRpb246aS5mYWN0b3J5T3B0aW9ucy5wb3J0aW9uLG92ZXJsYXBwZWRQb2ludHM6aS5mYWN0b3J5T3B0aW9ucy5vdmVybGFwcGVkUG9pbnRzLGludGVydmFsOmkuZmFjdG9yeU9wdGlvbnMuaW50ZXJ2YWwsZWxlbWVudDp0LHN0cmF0ZWd5OmkuZmFjdG9yeSxwcmV2ZW50U3RvcDppLnByZXZlbnRTdG9wLG9uVmlzaWJpbGl0eUNoYW5nZTppLm9uVmlzaWJpbGl0eUNoYW5nZSxjb25maXJtYXRpb25zOlt7ZGVsYXk6aS5kZWxheSxvbkNvbmZpcm06aS5vbkNvbmZpcm0sY29uZmlybU9uSG92ZXI6ITF9XX0pfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3RoaXMuc3RyYXRlZ3kuc3RhcnQoKX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5jYW5jZWxDb25maXJtU2NoZWR1bGUoKSx0aGlzLnByZXZlbnRTdG9wJiYhZXx8KHRoaXMuc3RyYXRlZ3kuc3RvcCgpLHRoaXMuc3RvcE1vdXNlb3ZlclRyYWNraW5nKCkpfSxlLnByb3RvdHlwZS5jb25maXJtPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpKDUpLmZvckVhY2godGhpcy5jb25maXJtYXRpb25FbnRyaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBlLmNvbmZpcm1FbnRyeSh0LC0xKX0pfSxlLnByb3RvdHlwZS5nZXRJc1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJhdGVneS5nZXRJc1Zpc2libGUoKX0sZS5wcm90b3R5cGUub25Ib3Zlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zdG9wTW91c2VvdmVyVHJhY2tpbmcoKSxpKDUpLmZvckVhY2godGhpcy5jb25maXJtYXRpb25FbnRyaWVzLGZ1bmN0aW9uKHQpeyF0LmlzQ29uZmlybWVkJiZ0LmNvbmZpcm1PbkhvdmVyJiZlLmNvbmZpcm1FbnRyeSh0LC0xKX0pfSxlLnByb3RvdHlwZS5jb25maXJtRW50cnk9ZnVuY3Rpb24oZSx0KXtlLmlzQ29uZmlybWVkfHwoZS5pc0NvbmZpcm1lZD0hMCxudWxsIT09ZS5jb25maXJtVGltZW91dElkJiYoY2xlYXJUaW1lb3V0KGUuY29uZmlybVRpbWVvdXRJZCksZS5jb25maXJtVGltZW91dElkPW51bGwpLGUub25Db25maXJtKHQ8MD90Ok51bWJlcihuZXcgRGF0ZSktdCx0aGlzLnN0cmF0ZWd5LmlzRGV0ZXJtaW5lZCksdGhpcy5jb25maXJtYXRpb25FbnRyaWVzLnNwbGljZShpKDIzKS5pbmRleE9mKHRoaXMuY29uZmlybWF0aW9uRW50cmllcyxlKSwxKSwwPT09dGhpcy5jb25maXJtYXRpb25FbnRyaWVzLmxlbmd0aCYmdGhpcy5zdG9wKCkpfSxlLnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlKXt0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSYmdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UoZSksZT90aGlzLnNjaGVkdWxlQ29uZmlybSgpOnRoaXMuY2FuY2VsQ29uZmlybVNjaGVkdWxlKCl9LGUucHJvdG90eXBlLnNjaGVkdWxlQ29uZmlybT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1EYXRlLm5vdygpO2koNSkuZm9yRWFjaCh0aGlzLmNvbmZpcm1hdGlvbkVudHJpZXMsZnVuY3Rpb24oaSl7aS5kZWxheT9udWxsPT09aS5jb25maXJtVGltZW91dElkJiYoaS5jb25maXJtVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb25maXJtRW50cnkoaSx0KX0saS5kZWxheSkpOmUuY29uZmlybUVudHJ5KGksdCl9KX0sZS5wcm90b3R5cGUuY2FuY2VsQ29uZmlybVNjaGVkdWxlPWZ1bmN0aW9uKCl7aSg1KS5mb3JFYWNoKHRoaXMuY29uZmlybWF0aW9uRW50cmllcyxmdW5jdGlvbihlKXtudWxsIT09ZS5jb25maXJtVGltZW91dElkJiYoY2xlYXJUaW1lb3V0KGUuY29uZmlybVRpbWVvdXRJZCksZS5jb25maXJtVGltZW91dElkPW51bGwpfSl9LGV9KCk7dC5WaXNpYmlsaXR5Q29uZmlybWVyPW99LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudGVzdFByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9aSgxOTApLmNzc1ByZWZpeGVzKSwhZSlyZXR1cm4hMTt2YXIgbj1lLnNwbGl0KCI6Iiksbz1uWzBdLHI9blsxXTtpZihyfHwocj0ibm9uZSIpLHdpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHdpbmRvdy5DU1Muc3VwcG9ydHModFthXStvLHIpKXJldHVybiEwO3JldHVybiExfXZhciBzPW5ldyBJbWFnZTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHMuc3R5bGUuY3NzVGV4dD10W2FdK28rIjoiK3Iscy5zdHlsZS5sZW5ndGgpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuYmVmb3JlUmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMudGV4dDtpKDQ5MCkuaXNIVE1MU3RyaW5nKHQpPyh0aGlzLmdldENvbnRleHRDb21wb25lbnQoKS5lbmNvZGVTdHlsZXMmJih0PWkoMjgpLmVuY29kZVRlbXBsYXRlKHQpKSxlLndyaXRlSHRtbCh0KSk6ZS53cml0ZVRleHQodCl9LHR9KGkoMylbImRlZmF1bHQiXS5BYnN0cmFjdENvbXBvbmVudCk7dC5IdG1sPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0U291cmNlVXJsPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dHJ5e3JldHVybiBlLmxvY2F0aW9uLmhvc3RuYW1lfWNhdGNoKGUpe31yZXR1cm4iIn0sdC5nZXRUYXJnZXRSZWY9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93KTt0cnl7cmV0dXJuIGUudG9wLmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZS5kb2N1bWVudC5yZWZlcnJlcnx8ZS5sb2NhdGlvbi5ocmVmfWNhdGNoKGUpe31yZXR1cm4iIn0sdC5nZXRQYWdlUmVmPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dHJ5e3JldHVybiBlLnRvcC5kb2N1bWVudC5yZWZlcnJlcn1jYXRjaChlKXt9cmV0dXJuIiJ9LHQuZ2V0SG9zdD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3RyeXtyZXR1cm4gZS5sb2NhdGlvbi5ob3N0fWNhdGNoKGUpe31yZXR1cm4iIn0sdC5nZXRIcmVmPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dHJ5e3JldHVybiBlLmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZSl7fXJldHVybiIifSx0LmdldEhvc3RXaXRoUGF0aD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3RyeXtyZXR1cm4iIitlLmxvY2F0aW9uLmhvc3RuYW1lK2UubG9jYXRpb24ucGF0aG5hbWV9Y2F0Y2goZSl7fXJldHVybiIifX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRTZXNzaW9uSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnx8KG49aSg0MjgpLmdldFNlc3Npb24oaSg0MjkpLmdlbmVyYXRlU2Vzc2lvbklkLGkoMjcwKS5nZXRXaW5kb3dTdG9yYWdlKCJjb21tb24iKSxpKDI3MykuZ2V0Q3Jvc3NGcmFtZVN0b3JhZ2UoImNvbW1vbiIpLGkoMjc1KS5jb25maWd1cmVNZXRyaWthKSksbn0sdC5zZXRTZXNzaW9uSWQ9ZnVuY3Rpb24oZSl7biE9PWUmJihpKDQzNSkuc2V0U2Vzc2lvbihlLGkoMjcwKS5nZXRXaW5kb3dTdG9yYWdlKCJjb21tb24iKSxpKDI3MykuZ2V0Q3Jvc3NGcmFtZVN0b3JhZ2UoImNvbW1vbiIpLGkoMjc1KS5jb25maWd1cmVNZXRyaWthKSxuPWUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvLHI9aSg1KSxhPWkoMjMpOyFmdW5jdGlvbihlKXtlW2VbIkluaXRlZCJdPTBdPSJJbml0ZWQiLGVbZVsiTW91bnRpbmciXT0xXT0iTW91bnRpbmciLGVbZVsiRGlzcGxheWVkIl09Ml09IkRpc3BsYXllZCIsZVtlWyJSZWFkeSJdPTNdPSJSZWFkeSJ9KG89dC5CbG9ja1N0YXR1c3x8KHQuQmxvY2tTdGF0dXM9e30pKTt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYWxsYmFja3M9W10sdGhpcy5zdGF0ZT1uKHtzdGF0dXM6by5Jbml0ZWR9LGUpfXJldHVybiBlLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPW4obih7fSxpKSxlKSxyLmZvckVhY2godGhpcy5jYWxsYmFja3MuY29uY2F0KCksZnVuY3Rpb24oZSl7ZSh0LnN0YXRlLGkpfSl9LGUucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGV9LGUucHJvdG90eXBlLm9uQ2hhbmdlU3RhdGU9ZnVuY3Rpb24oZSl7ZSh0aGlzLnN0YXRlLG51bGwpLHRoaXMuY2FsbGJhY2tzLnB1c2goZSl9LGUucHJvdG90eXBlLnVuQ2hhbmdlU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5pbmRleE9mKHRoaXMuY2FsbGJhY2tzLGUpO3Q+LTEmJnRoaXMuY2FsbGJhY2tzLnNwbGljZSh0LDEpfSxlfSgpO3QuQmxvY2tTdGF0ZT1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89MjAwLHI9NDt0LnJlcXVlc3Q9ZnVuY3Rpb24gZSh0KXt2YXIgYSxzPXQubWV0aG9kLGw9dC51cmwsYz10LmFzeW5jLHU9dm9pZCAwPT09Y3x8YyxkPXQuZGF0YSxwPXQucmVzcG9uc2VUeXBlLGY9dm9pZCAwPT09cD8idGV4dCI6cCxoPXQub25CZWZvcmVTZW5kLGc9dm9pZCAwPT09aD9pKDEzKS5ub29wOmgsXz10Lm9uRXJyb3IseT12b2lkIDA9PT1fP2koMTMpLm5vb3A6XyxtPXQub25TdWNjZXNzLGI9dm9pZCAwPT09bT9pKDEzKS5ub29wOm0sdj10Lm9uUmV0cnksdz12b2lkIDA9PT12P2koMTMpLm5vb3A6dix4PXQuY2hlY2tTdGF0dXMsaz12b2lkIDA9PT14P2Z1bmN0aW9uKGUpe3JldHVybiBvPT09ZX06eCxDPXQuaGVhZGVycyxTPXZvaWQgMD09PUM/e306QyxPPXQueGhyQ29uc3RydWN0b3IsST12b2lkIDA9PT1PP1hNTEh0dHBSZXF1ZXN0Ok8sQT10LnJldHJpZXMsVD12b2lkIDA9PT1BPzA6QSxFPXQudGltZW91dCxSPXZvaWQgMD09PUU/MDpFLE09dC53aXRoQ3JlZGVudGlhbHMsUD10Lm9uQWJvcnQsTD10Lm9uU2V0dXAsQj0hMSxOPTAsRD1mdW5jdGlvbihlKXtCPSEwLEQ9aSgxMykubm9vcCxhPWUsaihuZXcgRXJyb3IoIkFib3J0IHJlcXVlc3QiKSksImZ1bmN0aW9uIj09dHlwZW9mIFAmJlAoZSl9LGo9ZnVuY3Rpb24obyl7aWYoei5vbmVycm9yPW51bGwsei5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxOJiZjbGVhclRpbWVvdXQoTiksTiYmei5yZWFkeVN0YXRlIT09cnx8Qil0cnl7ei5hYm9ydCgpfWNhdGNoKG8pe31pZighQilpZihUPjApe3ZhciBzPXcobyx6KTtpZigiYm9vbGVhbiIhPXR5cGVvZiBzfHxzfHxEKCksQilyZXR1cm47ZShuKG4oe30sdCkse29uU2V0dXA6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hYm9ydDtEPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSxCJiZ0KGEpfSxyZXRyaWVzOlQtMX0pKX1lbHNlIEQ9aSgxMykubm9vcCx5KG8seil9LHo9bmV3IEk7dHJ5e3oub3BlbihzLGwsdSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgaihlKX1pZih6LnJlc3BvbnNlVHlwZT1mLHoud2l0aENyZWRlbnRpYWxzPUJvb2xlYW4oTSksaSg0NykuZm9yT3duKFMsZnVuY3Rpb24oZSx0KXt0cnl7ei5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9Y2F0Y2goZSl7fX0pLFI+MCYmaXNGaW5pdGUoUikmJihOPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aihuZXcgRXJyb3IoIlJlcXVlc3QgdGltZW91dCwgIitsKSl9LFIpKSx6Lm9uZXJyb3I9aix6Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKHoucmVhZHlTdGF0ZT09PXIpe3ZhciBlPXouc3RhdHVzO2soZSk/KEQ9aSgxMykubm9vcCxjbGVhclRpbWVvdXQoTiksYih6KSk6aihuZXcgRXJyb3IoIkludmFsaWQgcmVxdWVzdCBzdGF0dXMgIitlKyIsICIrbCkpfX0sISgiZnVuY3Rpb24iPT10eXBlb2YgTCYmKEwoe2Fib3J0OmZ1bmN0aW9uKGUpe3JldHVybiBEKGUpfX0pLEIpfHwoZyh6LHQpLEIpKSl0cnl7ei5zZW5kKGQpfWNhdGNoKGUpe2ooZSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TRVNTSU9OX0tFWT0ic2Vzc2lvbklkIn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5BYnN0cmFjdENvbXBvbmVudD12b2lkIDA7dmFyIG49aSgxNDIpLG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSkscj1pKDEzKSxhPWkoMTkpLHM9aSg3KSxsPWkoNDQ4KSxjPWkoMjgyKTt0LkFic3RyYWN0Q29tcG9uZW50PW8uYXVnbWVudChjLlJlbmRlcmFibGUse19fZW1iZWRkZWRSZXNvdXJjZXM6bnVsbCxfX2NoaWxkcmVuOm51bGwsX19vd25lckNvbXBvbmVudDpudWxsLF9fcGFyZW50Q29tcG9uZW50Om51bGwsX19yZXNvdXJjZUlkOm51bGwsX19zdGF0ZTpudWxsLHByb3BzOm51bGwsY29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LGkpe3RoaXMuX19zdGF0ZT1sLkNPTVBPTkVOVF9TVEFURVMuSU5JVElBTCxlPWV8fHt9LHRoaXMuX19jaGlsZHJlbj1vLmlzQXJyYXkodCk/dDpbXSx0aGlzLl9fb3duZXJDb21wb25lbnQ9aSxlLmhhc093blByb3BlcnR5KCJyZXNvdXJjZUlkIikmJih0aGlzLl9fcmVzb3VyY2VJZD1lLnJlc291cmNlSWQsZGVsZXRlIGUucmVzb3VyY2VJZCksdGhpcy5wcm9wcz10aGlzLmluaXRQcm9wcyhlKSx0aGlzLm9uSW5pdCgpfSxpbml0UHJvcHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG1vdW50OmZ1bmN0aW9uKCl7dGhpcy5vbk1vdW50KCksdGhpcy5fX3N0YXRlPWwuQ09NUE9ORU5UX1NUQVRFUy5NT1VOVEVEfSx1bm1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX3RyZWUmJihuLk1hcmt1cFdyaXRlci51bm1vdW50Q29tcG9uZW50KHRoaXMuX190cmVlKSxkZWxldGUgdGhpcy5fX3RyZWUpLHRoaXMuX19yZXNvdXJjZUlkJiZ0aGlzLl9fb3duZXJDb21wb25lbnQmJnRoaXMuX19vd25lckNvbXBvbmVudC5yZW1vdmVGcm9tRW1iZWRkZWRSZXNvdXJjZXModGhpcyksdGhpcy5vblVubW91bnQoKSx0aGlzLl9fc3RhdGU9bC5DT01QT05FTlRfU1RBVEVTLlVOTU9VTlRFRH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMudW5tb3VudCgpLHRoaXMub25EZXN0cm95KCksdGhpcy5fX3N0YXRlPWwuQ09NUE9ORU5UX1NUQVRFUy5ERVNUUk9ZRUR9LG9uSW5pdDpyLm5vb3Asb25Nb3VudDpyLm5vb3Asb25Vbm1vdW50OnIubm9vcCxvbkRlc3Ryb3k6ci5ub29wLGdldFBhcmVudENvbXBvbmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcGFyZW50Q29tcG9uZW50fSxnZXRDb250ZXh0Q29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19vd25lckNvbXBvbmVudH0sc2hvdWxkUmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENoaWxkcmVuKCl9LHVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiBuLk1hcmt1cFdyaXRlci51cGRhdGVDb21wb25lbnRJbk5vZGUodGhpcy5fX2xhc3RFbGVtZW50LHRoaXMpfSxnZXRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY2hpbGRyZW59LGFkZFRvRW1iZWRkZWRSZXNvdXJjZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fX3Jlc291cmNlSWQsaT10aGlzLl9fZW1iZWRkZWRSZXNvdXJjZXM7bnVsbD09PWk/KGk9dGhpcy5fX2VtYmVkZGVkUmVzb3VyY2VzPXt9KVt0XT1lOmkuaGFzT3duUHJvcGVydHkodCl8fChpW3RdPWUpfSxyZW1vdmVGcm9tRW1iZWRkZWRSZXNvdXJjZXM6ZnVuY3Rpb24oZSl7aWYobnVsbCE9PXRoaXMuX19lbWJlZGRlZFJlc291cmNlcyl7dmFyIHQ9ZS5fX3Jlc291cmNlSWQsaT10aGlzLl9fZW1iZWRkZWRSZXNvdXJjZXM7aS5oYXNPd25Qcm9wZXJ0eSh0KSYmZGVsZXRlIGlbdF19fSxnZXRSZXNvdXJjZUJ5SWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2VtYmVkZGVkUmVzb3VyY2VzO3JldHVybiBudWxsPT09dD9udWxsOnQuaGFzT3duUHJvcGVydHkoZSk/dFtlXTpudWxsfSxmaW5kRW1iZWRkZWRSZXNvdXJjZXM6ZnVuY3Rpb24oZSl7aWYoKDAsYS5pc1N0cmluZykoZSkpe3ZhciB0PWU7ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Jlc291cmNlSWQ9PT10fX1yZXR1cm4oMCxzLmlzRnVuY3Rpb24pKGUpP24uTWFya3VwV3JpdGVyLmZpbmRFbWJlZGRlZFJlc291cmNlcyh0aGlzLGUpOltdfX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzUnRiSW5EaXJlY3RFeHBlcmltZW50PWZ1bmN0aW9uKGUpe2UucGFnZUlkO3ZhciB0PWUucHJvZHVjdDtyZXR1cm4hZS5oYXNTZWFyY2hUZXh0JiZpKDUwOCkuaXNEaXJlY3QodCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlWyJNUkMiXT0ibXJjIixlWyJZQSJdPSJ5YSJ9KHQuVklTSUJJTElUWV9DUklURVJJQXx8KHQuVklTSUJJTElUWV9DUklURVJJQT17fSkpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LG89ZnVuY3Rpb24oKXtyZXR1cm4obz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17IjE2MHg2MDAiOntsaW1pdDoyLHdpZHRoOjE2MCxoZWlnaHQ6NjAwfSwiMjAweDMwMCI6e2xpbWl0OjEsd2lkdGg6MjAwLGhlaWdodDozMDB9LCIyNTB4MjUwIjp7bGltaXQ6MSx3aWR0aDoyNTAsaGVpZ2h0OjI1MH0sIjEwMDB4MTIwIjp7bGltaXQ6Myx3aWR0aDoxZTMsaGVpZ2h0OjEyMH0sIjMyMHgxMDAiOntsaW1pdDoxLHdpZHRoOjMyMCxoZWlnaHQ6MTAwfSwiMzM2eDI4MCI6e2xpbWl0OjEsd2lkdGg6MzM2LGhlaWdodDoyODB9LCI0MDB4MjQwIjp7bGltaXQ6Mix3aWR0aDo0MDAsaGVpZ2h0OjI0MH0sIjQ4MHgzMjAiOntsaW1pdDoyLHdpZHRoOjQ4MCxoZWlnaHQ6MzIwfSxhZGFwdGl2ZTp7bWVhc3VyZXI6ImFkYXB0aXZlIn0sIjk3MHg5MCI6e2xpbWl0OjIsd2lkdGg6OTcwLGhlaWdodDo5MH0sIjk3MHgyNTAiOntsaW1pdDo0LHdpZHRoOjk3MCxoZWlnaHQ6MjUwfX07dC5hZGFwdGl2ZTA0MThCbG9ja3M9aSgxMDMpLmlzSG9zdEluVG9wUGFydG5lckxpc3Qod2luZG93KT9yOm8oeyIyNDB4NDAwIjp7bGltaXQ6Mix3aWR0aDoyNDAsaGVpZ2h0OjQwMH0sIjMwMHgyNTAiOntsaW1pdDoxLHdpZHRoOjMwMCxoZWlnaHQ6MjUwfSwiMzAweDMwMCI6e2xpbWl0OjIsd2lkdGg6MzAwLGhlaWdodDozMDB9LCIzMDB4NTAwIjp7bGltaXQ6Mix3aWR0aDozMDAsaGVpZ2h0OjUwMH0sIjMwMHg2MDAiOntsaW1pdDoyLHdpZHRoOjMwMCxoZWlnaHQ6NjAwfSwiNzI4eDkwIjp7bGltaXQ6MSx3aWR0aDo3MjgsaGVpZ2h0OjkwfSxtb2Rlcm5BZGFwdGl2ZTp7bWVhc3VyZXI6Im1vZGVybkFkYXB0aXZlIixsaW1pdDoxfSxncmlkOnttZWFzdXJlcjoiZ3JpZCIsbGF5b3V0OiJncmlkIn0saG9yaXpvbnRhbDp7bWVhc3VyZXI6Imhvcml6b250YWwiLGFkdk1pblNxdWFyZTo1NWUzfX0sciksaSgyMSkuaXNIb3N0SW5MaXN0KHdpbmRvdyxbImF2aXRvIl0pJiZuKHQuYWRhcHRpdmUwNDE4QmxvY2tzLHsiMTAwMHgxMjAiOntsaW1pdDozLHdpZHRoOjFlMyxoZWlnaHQ6MTIwfX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnBhcnNlQmxvY2tJZD1mdW5jdGlvbihlKXt2YXIgdD0vXihcd3sxLDJ9KS0oPzpcdystKT8oXGQrKS0oXGQrfFx3KykkLy5leGVjKGUpO3JldHVybntwcm9kdWN0OnQ/dFsxXTpudWxsLHBhZ2VJZDp0P3RbMl06bnVsbCxpbXBJZDp0P3RbM106bnVsbH19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXtnZXRWYWxpZEdlbzpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD17fTtyZXR1cm4gZS5sYXQ9cGFyc2VGbG9hdChlLmxhdCksZS5sb25nPXBhcnNlRmxvYXQoZS5sb25nKSxpc05hTihlLmxhdCl8fCh0LmxhdD1lLmxhdC50b0ZpeGVkKHRoaXMuX0dFT19GTE9BVF9QUkVDSVNJT04pKSxpc05hTihlLmxvbmcpfHwodC5sb25nPWUubG9uZy50b0ZpeGVkKHRoaXMuX0dFT19GTE9BVF9QUkVDSVNJT04pKSx0fX0sX0dFT19GTE9BVF9QUkVDSVNJT046NixJTlZBTElEX05VTUJFUjotMS8wLGdldFZhbGlkTnVtYmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUsMTApO3JldHVybihpc05hTih0KXx8IWlzRmluaXRlKHQpKSYmKHQ9dGhpcy5JTlZBTElEX05VTUJFUiksdH19O2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJBTk5FUl9URVNUX1RBR19LRVk9WyJiYW4iLCJuZXItdGUiLCJzdC10YWdzIl0uam9pbigiIiksdC5jcmVhdGVMaW5rVGFpbFVybD1mdW5jdGlvbihlLHQpe3ZhciBuPSIiO3JldHVybiBpKDUpLmZvckVhY2godCxmdW5jdGlvbihlKXtuKz1lLmxpbmtUYWlsfSksZStufSx0LmJ1aWxkQmFubmVyVGVzdHRhZ3M9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIG49e307cmV0dXJuIGkoNSkuZm9yRWFjaChlLGZ1bmN0aW9uKGUpe3ZhciBvPWUuYmFubmVyVGVzdHRhZz9lLmJhbm5lclRlc3R0YWcuY2xvbmUoKTpuZXcoaSgxNjEpLkJhbm5lclRlc3R0YWcpO28uc2V0UHJvcHModCksbltlLmFkSWRdPW8udG9TdHJpbmcoKX0pLGkoMjkpLmVuY29kZShpKDcyKS5nZXROYXRpdmVKU09OKHdpbmRvdykuc3RyaW5naWZ5KG4pKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHRbImRlZmF1bHQiXT17aGFzQ2xhc3M6aSgxMTcpLmhhc0NsYXNzLGFkZENsYXNzOmkoMTE3KS5hZGRDbGFzcyxjbGVhckNsYXNzZXM6aSgxMTcpLmNsZWFyQ2xhc3NlcyxyZW1vdmVDbGFzczppKDExNykucmVtb3ZlQ2xhc3MsdG9nZ2xlQ2xhc3M6aSgxMTcpLnRvZ2dsZUNsYXNzLHNldFN0eWxlOmkoMTc5KS5zZXRTdHlsZSxpbm5lckhUTUw6aSg0NDkpLmlubmVySHRtbH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNIb3N0SW5Ub3BQYXJ0bmVyTGlzdD1mdW5jdGlvbihlKXtyZXR1cm4gaSgyMSkuaXNIb3N0SW5MaXN0KHdpbmRvdyxpKDIxKS50b3BQYXJ0bmVycyl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj00Mjk0OTY3Mjk1LG89InlhU2FmZUZyYW1lQXN5bmNDYWxsYmFja3MiLHI9Imhvc3QuanMiLGE9Imhvc3RfYWRiLmpzIixzPXdpbmRvdztzLnlhU2FmZUZyYW1lQ2FsbGJhY2tzU3RvcmFnZT1zLnlhU2FmZUZyYW1lQ2FsbGJhY2tzU3RvcmFnZXx8e307dmFyIGw9aSgxOTMpLmlzRW5jb2RlZCgiaHR0cHM6Ly95YW5kZXgucnUvdHVyYm8vYWFiL3BHVEg5NzM2OS9jNjQ3ODRPdE8tUXUvWFpyYWdCR1BDdWN1RGhoM3FXZ0pSVUxza1RoQzAtbmVhaXBPSTJ6T1Fnb1NxREptWlBqR1lvRXR6dGRpak9XdG9ELWxqVmVvRFdWRFpZYXpyb3ZIN0Jwc2JkTVNqRWlsN1k1SXdDdXBhWklSUGFMYWNIUGJfYmtQNm5mSkNmVzhSWW1pVlZiYjFRTlJYTXdsY183Vl9ZQmNwTDRWQ2QzMkE0YVZZbzdiQkMzcV9qOEJrZHpxTlo5X210REp5b3F4VTU4aWVaUFNPc3hwSE92bGlMaEdqZGJLZ2Fja3l4UVFRbF9mdC1KLWxiX3lfMVM5UmxuTTFaSWxORUFjQ1BVY2FTMXQ4MlBfYWlmX3pFbkRldW41STZHdU15bFNZRXN1NnU2S0I1aUo1ODZYS0NDMjlxaVVJN0NmTEdUZ0xLYVA0WTdVRDNlNG5NV0FsVGR5TEt1MTNodGNiTEZpUFhtMTN3NUtjT29MTzZPQVQ5SXBFdkdLdnRyZm1nVjU2WmY4RmVpaEZTUjcxZkpTajYtRkVseGtYS045NUd6bC1pOUZ3SmJrZ2M1SnA4OTVMU3hqODE0TFJMNTlpV0VMU3VqQmN1MERHMklqU2Y3SWJtdWxLdHFsemxUNWdRYUdXU1RoWXczT0JpQnV4RzF4ejRhOVZZaF9ONEgyRkdLc0NrVTl5ZzZQRTJDYy1PWnRYeXJqNnlrcGNYTE44dHBnTUR1c2Fyd0p4eXE3NVZ5V2FzTUdOOWsxRVVOdW5GVXpYSWVPb2o3WHZJZmFMV2ZoMXJXQ0xLazMzNXA5UGxJQUhJa2tYczZvd0JzNE9DQWhUd1A3TUpLS3JudGNTU1Y3V09RUHRDcmdGUWViaEhHU0hwM1VJbDExVFZJZGg1Mm5LNTFIZ1ZUR2drOEpwYXdLSEU0d2dZeDUxRXhlV29OYW1kbFM0UHlqT0pKanVxNHJIeXFXdVJoblhXWXFJQmExaTZlU0FBM3RCWEJ1Wm4td1hqUjhKMHZkaEpHRTUxRy1hR1dlNk02czRfTThDTWNQZjRxaTJXaXFVT09QZ1lrVElnamMyMzI3NU5zWWRHNmx1OUZGVk52a0lHRnMzdFV6cndaZXM4d1h2YWVaX2NjUmR2ZFJqcGgzalVpUFhxUHp2dmdsTE54TFFqaXBTQ0dSSE9KYnNfQ1pQdnR1eXdVNmU3Vk9sRGpCNVdlcjFFRkF6dDdrY3o3MFBkTl9oYnduV1kyRWdBVFZzQzVLZGgtWUw0N3pjOTA3OWc0OTYtSWE2bmxoNHp6Z3lGQWpXdjg2SF91VWsvIik7ZnVuY3Rpb24gYygpe3ZhciBlPWw/YTpyLHQ9IiIrWyJodHRwczovL3lhc3RhdGljIiwiLm5ldC9zYWZlZnJhbWUtYnVuZGxlcy8wLjY5LyJdLmpvaW4oIiIpK2U7cmV0dXJuIGw/aSgxOTMpLmVuY29kZSh0KTp0fWZ1bmN0aW9uIHUoZSl7ZS5pc0xvYWRpbmdTYWZlZnJhbWVTdGFydGVkfHwoZS5pc0xvYWRpbmdTYWZlZnJhbWVTdGFydGVkPSEwLGkoNDAwKS5sb2FkQ3VzdG9tU2NyaXB0KGUsYygpLGkoMTMpLm5vb3AsIWwpKX1mdW5jdGlvbiBkKGUpe3ZhciB0PWVbb118fFtdO3JldHVybiBlW29dPXQsdH1mdW5jdGlvbiBwKGUsdCl7ZGVsZXRlIGUueWFTYWZlRnJhbWVDYWxsYmFja3NTdG9yYWdlW3RdfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIEJvb2xlYW4oZS4kc2YmJmUuJHNmLmV4dCl9dC5nZXRTYWZlZnJhbWVMb2FkZXJVUkw9Yyx0LmxvYWRTYWZlZnJhbWU9dSx0LmluaXRTYWZlZnJhbWU9ZnVuY3Rpb24oZSx0LG8scixhLHMpe3ZvaWQgMD09PXImJihyPWkoMTMpLm5vb3ApLHZvaWQgMD09PWEmJihhPWkoMTMpLm5vb3ApLHZvaWQgMD09PXMmJihzPWkoMTMpLm5vb3ApLHUoZSk7dmFyIGM9ZChlKSxmPW8uaWQgaW5zdGFuY2VvZiBFbGVtZW50PyIiOm8uaWQsaD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxlLmlkfHwic2YtIisoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKzEpfSh0LGYpO2MucHVzaChmdW5jdGlvbigpe2UueWFTYWZlRnJhbWVDYWxsYmFja3NTdG9yYWdlPWUueWFTYWZlRnJhbWVDYWxsYmFja3NTdG9yYWdlfHx7fSxlLnlhU2FmZUZyYW1lQ2FsbGJhY2tzU3RvcmFnZVtoXT17b25FcnJvcjpyLG9uUmVuZGVyOmEsb25BY3Rpb246c30sZnVuY3Rpb24oZSl7ZS55YVNhZmVGcmFtZUNhbGxiYWNrc1N0b3JhZ2U9ZS55YVNhZmVGcmFtZUNhbGxiYWNrc1N0b3JhZ2V8fHt9O3ZhciB0PWUueWFTYWZlRnJhbWVDYWxsYmFja3NTdG9yYWdlO25ldyBlLiRzZi5ob3N0LkNvbmZpZyh7YXV0bzohMSxvbkZhaWx1cmU6ZnVuY3Rpb24oZSxpLG4pe3RbZV0mJnRbZV0ub25FcnJvcihlLG4pfSxvbkVuZFBvc1JlbmRlcjpmdW5jdGlvbihlLGksbil7dFtlXSYmdFtlXS5vblJlbmRlcihlLG4pfSxvblBvc01zZzpmdW5jdGlvbihpLG4sbyl7dFtpXSYmdFtpXS5vbkFjdGlvbihuLG8pLCJudWtlIj09PW4mJnAoZSxpKX19KX0oZSksZnVuY3Rpb24oZSx0LGksbil7dC5pZD1uO3ZhciBvPWkuaHRtbCxyPWkud2lkdGgsYT1pLmhlaWdodCxzPWkuYmFzZVBhdGgsYz17aWQ6bixodG1sOm8sY29uZjp7bm9uY2U6aS5ub25jZSx3OnIsaDphLGRlc3Q6bD90Om4scHJvdGVjdGVkOmlbInByb3RlY3RlZCJdLHNhbmRib3g6aS5zYW5kYm94LGJhc2VQYXRoOnN9fTtpLnN1cHBvcnRzJiYoYy5jb25mLnN1cHBvcnRzPWkuc3VwcG9ydHMpLGUuJHNmLmhvc3QucmVuZGVyKGMpfShlLHQsbyxoKX0pfSx0Lm51a2VTYWZlZnJhbWU9ZnVuY3Rpb24oZSx0KXt1KGUpLGQoZSkucHVzaChmdW5jdGlvbigpe3AoZSx0KSxlLiRzZi5ob3N0Lm51a2UodCl9KX0sdC5pc0luU2FmZWZyYW1lPWYsdC51cGRhdGVTYWZlZnJhbWVTaXplPWZ1bmN0aW9uKGUsdCl7aWYoZihlKSl7dmFyIGk9ZS4kc2YuZXh0Lmdlb20oKSxuPWkuc2VsZi53K2kuZXhwLnIsbz1pLnNlbGYuaCtpLmV4cC5iLHI9bj50LndpZHRoP3Qud2lkdGgtaS5zZWxmLnc6aS5leHAucixhPW8+dC5oZWlnaHQ/dC5oZWlnaHQtaS5zZWxmLmg6aS5leHAuYjtlLiRzZi5leHQuZXhwYW5kKHt0OjAsbDowLHI6cixiOmF9KX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFZpc2liaWxpdHlSYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGkoMzE4KS5nZXRSYXRpb0luVmlld3BvcnQoZSkudG9GaXhlZCgyKSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDU1KSxvPWkoMTc5KTt0LmNvbXBhcmVBcnJheXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9ZS5sZW5ndGgsbj10Lmxlbmd0aCxvPU1hdGgubWluKGksbikscj0wO3I8bztyKyspe2lmKGVbcl08dFtyXSlyZXR1cm4tMTtpZihlW3JdPnRbcl0pcmV0dXJuIDF9cmV0dXJuIGktbn0sdC5hc2NDb21wYXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTowfSx0Lm5vcm1hbGl6ZU51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5hc2NDb21wYXJhdG9yKGUsMCl9LHQuYmluYXJ5U2VhcmNoPWZ1bmN0aW9uKGUsaSxuKXt2b2lkIDA9PT1uJiYobj10LmFzY0NvbXBhcmF0b3IpO2Zvcih2YXIgbz0wLHI9ZS5sZW5ndGg7bzxyOyl7dmFyIGE9TWF0aC5mbG9vcigobytyKS8yKTtuKGVbYV0saSk8PTA/bz1hKzE6cj1hfXJldHVybiBvfSx0LmZsdXNoUXVldWU9ZnVuY3Rpb24oZSx0KXtmb3IoO2UubGVuZ3RoOyl0KGUuc2hpZnQoKSl9LHQuZ2V0U2VjdGlvbkxpbWl0PWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIG49MCxvPTEvMCxyPTAsYT0wLHM9ZTthPHMubGVuZ3RoO2ErKyl7dmFyIGw9c1thXTtpZihuKz1sLHQqKG89TWF0aC5taW4obyxsKSkvbjxpKXJldHVybiByO3IrK31yZXR1cm4gcn0sdC5jcmVhdGVFeHBhbmRlcj1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uc2V0U3R5bGUoZSx7ZGlzcGxheToidGFibGUiLCJ0YWJsZS1sYXlvdXQiOiJmaXhlZCIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Quc3R5bGUuZGlzcGxheT0idGFibGUtcm93Ijt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gaS5zdHlsZS5kaXNwbGF5PSJ0YWJsZS1jZWxsIix0LmFwcGVuZENoaWxkKGkpLGUuYXBwZW5kQ2hpbGQodCksZX0sdC5jYWxjQXZnPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBuLnJlZHVjZShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pL2UubGVuZ3RofX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc01vYmlsZT1pKDI5MykuaXNNb2JpbGUoKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc0lPUz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWUubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO3JldHVybi9pcGFkfGlwaG9uZXxpcG9kLy50ZXN0KHQpJiYhZS5NU1N0cmVhbSYmIWkoMjkxKS5pc1VDQnJvd3NlcihlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49W107ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaSgwKS5pbkFycmF5KG4sZSxmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdPT09dH0pPi0xfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGkoMCkubWFwKG4sZnVuY3Rpb24odCl7dmFyIG49aSgwKS5leHRlbmQoe30sZSx0WzFdKTtyZXR1cm4gbiYmbi5pZCx0WzBdLmNhbGwodFsyXSxuKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEoKXtuPVtdfXZhciBzPXtpbnNlcnRDU1M6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXIoZSk7cmV0dXJuIGEoKSxpKDApLmRvbS5hcHBlbmRTdHlsZShvLHQsbil9LGNvbnRhaW46byxjbGVhcjphLHB1c2g6ZnVuY3Rpb24oZSx0LHIpe2koMCkuaXNGdW5jdGlvbihlKSYmIW8oZSkmJm4ucHVzaChbZSx0LHJdKX0sZ2V0Q1NTOnJ9O2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDE2OCkuUFJFVkVOVFNfQlJPV1NJTkcsbz1uWzBdKyItIituWzFdO3Quc2xpZGVVcD1mdW5jdGlvbihlLHQpe2koMzgpLnNldEltcG9ydGFudENzc1Byb3BlcnR5KGUsIm92ZXJmbG93IiwiaGlkZGVuIik7dmFyIG49ZnVuY3Rpb24odCl7dmFyIG49TWF0aC5yb3VuZCgxMDAqdCkvMTAwO2koMzgpLnNldEltcG9ydGFudENzc1Byb3BlcnR5KGUsImhlaWdodCIsbisicHgiKX07c2V0VGltZW91dChmdW5jdGlvbigpe2koMTcxKS5hbmltYXRlKHtkdXJhdGlvbjo1MDAsc3RhcnQ6ZS5vZmZzZXRIZWlnaHQsZW5kOjAsb25GcmFtZTpuLG9uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9aSg1OCkuTXJhaWRIZWxwZXJzLmdldE1yYWlkKCk7ZSYmZS51bmxvYWQmJmUudW5sb2FkKCksdCgpfX0pfSwxZTMpfSx0LnNob3VsZFNsaWRlVXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj13aW5kb3cudG9wIT09d2luZG93LnNlbGYscj1lLnBhZ2VJZDtyZXR1cm4hKG4mJiFpKDUyMikuaXNUZXN0aW5nUGFnZShyKSkmJnQ9PT1vfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXROYXRpdmVNZXRob2Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lW3RdO2lmKCFpKDM3KS5jaGVja05hdGl2ZUNvZGUobikpe3ZhciBvPW47dHJ5e2RlbGV0ZSBlW3RdO3ZhciByPWVbdF07ImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIpLGVbdF09b31jYXRjaChlKXt9fXJldHVybiBufX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWkoNDE5KShlKTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0Py0xOnR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk09eyJkZXRlY3QiOiB7ImlmcmFtZXMiOiBbXSwgImxpbmtzIjogW3sic3JjIjogImh0dHBzOi8vYW4ueWFuZGV4LnJ1L3N5c3RlbS9jb250ZXh0LmpzIiwgInR5cGUiOiAiZ2V0In1dLCAidHJ1c3RlZCI6IFtdLCAiY3VzdG9tIjogWyI8ZGl2IGNsYXNzPVwiYWRiYW5uZXJcIiBpZD1cIkFkRm94X2Jhbm5lclwiPjwvZGl2PiIsICI8ZGl2IGNsYXNzPVwiYWR2YmxvY2tcIiBpZD1cInlhbmRleF9hZFwiPjwvZGl2PiIsICI8ZGl2IGNsYXNzPVwiYi1hZHZcIiBpZD1cInlhbmRleF9ydGJcIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cImItYmFubmVyXCI+PC9kaXY+IiwgIjxkaXYgY2xhc3M9XCJiYW5uZXJhZFwiPjwvZGl2PiIsICI8ZGl2IGNsYXNzPVwicGFnZWFkXCI+PC9kaXY+IiwgIjxkaXYgY2xhc3M9XCJwdWJfMzAweDI1MG1cIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cInB1Yl83Mjh4OTBcIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cInJla2xhbWFcIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cInNpZGVhZHNcIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cInNtYXJ0LWluZm8td3JhcHBlclwiPjwvZGl2PiIsICI8ZGl2IGNsYXNzPVwic3BvbnNvcmVkbGlua3NcIj48L2Rpdj4iLCAiPGRpdiBjbGFzcz1cInRleHQtYWRcIj48L2Rpdj4iXX0sICJsb2ciOiB7InBlcmNlbnQiOiAwfSwgInJlbW92ZUF0dHJpYnV0ZUlkIjogdHJ1ZSwgImRlcHJlY2F0ZWRDb29raWVzIjogWyJTY1N2Q0lsQkMiLCAia05BY1ZHWUZXaHgiLCAianNPbXFQR2giLCAiSE9oZE9SU3giLCAiUEl3c2ZaZXUiLCAiRnh1R1FxTk5vIiwgInNNTElJZVFRZUZuWXQiLCAicENsbktDU0JYY0hVcCIsICJMQkNCTnJaU3UiLCAiem1GUWVYdEkiLCAiaGN4V256YlV6ZnoiLCAiTkJnZkRWRmlyIiwgIlRid2djUHpSTWd6Vm8iLCAiT3FZc3BJRmNVcExZIiwgIlZUb3VobXdSIiwgInRDVG1rZkZvWG4iLCAiRU1Dem5pR2FRIl0sICJoaWRlTGlua3MiOiBmYWxzZSwgInBpZCI6ICJ0dXJiby55YW5kZXgucnUiLCAiY29va2llTmFtZSI6ICJsaVBrYnRGZElrWXFjIiwgInRyZWVQcm90ZWN0aW9uIjogeyJlbmFibGVkIjogZmFsc2V9LCAiY29va2llRG9tYWluIjogeyJ0eXBlIjogMCwgImxpc3QiOiBbXX0sICJjb29raWVUVEwiOiAzMzYsICJkaXNhYmxlU2hhZG93IjogZmFsc2UsICJpbnZlcnRlZENvb2tpZUVuYWJsZWQiOiBmYWxzZSwgImVuY29kZSI6IHsidHJhaWxpbmdTbGFzaCI6IGZhbHNlLCAic2VlZCI6ICJjNjQ3ODQiLCAia2V5IjogIlVxZktNcGJqZ29kNGVZUGFFNVNJNUZUNDVlQjdYYWgxNFV0TV9JdkhpOU1iX2NrUWpnckxjaUVfM3pkeVlwLW9ORktCTUxsV3VTMjROdXFaT2xNaUFRPT0iLCAidXJsUHJlZml4IjogImh0dHBzOi8veWFuZGV4LnJ1L3R1cmJvL2FhYi8ifSwgImV4dHVpZENvb2tpZXMiOiBbImFkZHJ1aWQiXSwgImNvb2tpZU1hdGNoaW5nIjogeyJwdWJsaXNoZXJLZXkiOiAiZXlKaGJHY2lPaSIsICJwdWJsaXNoZXJUYWciOiAiIiwgImltYWdlVXJsIjogImh0dHBzOi8vc3RhdGNoZWNrZXIueWFuZGV4LnJ1L21hcHVpZC8iLCAiY3J5cHRlZFVpZFRUTCI6IDMzNiwgInJlZGlyZWN0VXJsIjogIi8vYW4ueWFuZGV4LnJ1L21hcHVpZC8iLCAiY3J5cHRlZFVpZENvb2tpZSI6ICJjcm9va2llIiwgInR5cGVzIjogW10sICJjcnlwdGVkVWlkVXJsIjogImh0dHBzOi8vaHR0cC1jaGVjay1oZWFkZXJzLnlhbmRleC5ydSJ9LCAiaGlkZU1ldGFBcmdzVXJsTWF4U2l6ZSI6IDEwMDAsICJydGJSZXF1ZXN0VmlhU2NyaXB0IjogZmFsc2UsImZuIjp7ImVuY29kZUNTUyI6ZnVuY3Rpb24oY2xhc3NOYW1lKXt2YXIgYmFzZTY0YWxwaGFiZXQ9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89JztmdW5jdGlvbiBkZWNvZGVVSW50OFN0cmluZyhpbnB1dCl7dmFyIG91dHB1dD1bXTt2YXIgaT0wO3doaWxlKGk8aW5wdXQubGVuZ3RoKXt2YXIgZW5jMT1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jMj1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jMz1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jND1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgY2hyMT0oZW5jMTw8Mil8KGVuYzIgPj4gNCk7dmFyIGNocjI9KChlbmMyJjE1KTw8NCl8KGVuYzMgPj4gMik7dmFyIGNocjM9KChlbmMzJjMpPDw2KXxlbmM0O291dHB1dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSkpO2lmKGVuYzMhPT02NCl7b3V0cHV0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKSk7fWlmKGVuYzQhPT02NCl7b3V0cHV0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKSk7fX1yZXR1cm4gb3V0cHV0LmpvaW4oJycpO31mdW5jdGlvbiBlbmNvZGVVSW50OFN0cmluZyhpbnB1dCl7dmFyIG91dHB1dD0nJzt2YXIgaT0wO3doaWxlKGk8aW5wdXQubGVuZ3RoKXt2YXIgY2hyMT1pbnB1dC5jaGFyQ29kZUF0KGkrKyk7dmFyIGNocjI9aW5wdXQuY2hhckNvZGVBdChpKyspO3ZhciBjaHIzPWlucHV0LmNoYXJDb2RlQXQoaSsrKTt2YXIgZW5jMT1jaHIxID4+IDI7dmFyIGVuYzI9KChjaHIxJjMpPDw0KXwoY2hyMiA+PiA0KTt2YXIgZW5jMz0oKGNocjImMTUpPDwyKXwoY2hyMyA+PiA2KTt2YXIgZW5jND1jaHIzJjYzO2lmKGlzTmFOKGNocjIpKXtlbmMzPWVuYzQ9NjQ7fSBlbHNlIGlmKGlzTmFOKGNocjMpKXtlbmM0PTY0O31vdXRwdXQ9b3V0cHV0K2Jhc2U2NGFscGhhYmV0LmNoYXJBdChlbmMxKStiYXNlNjRhbHBoYWJldC5jaGFyQXQoZW5jMikrYmFzZTY0YWxwaGFiZXQuY2hhckF0KGVuYzMpK2Jhc2U2NGFscGhhYmV0LmNoYXJBdChlbmM0KTt9cmV0dXJuIG91dHB1dDt9ZnVuY3Rpb24gZ2V0S2V5KCl7cmV0dXJuIGRlY29kZVVJbnQ4U3RyaW5nKCJVcWZLTXBiamdvZDRlWVBhRTVTSTVGVDQ1ZUI3WGFoMTRVdE1fSXZIaTlNYl9ja1FqZ3JMY2lFXzN6ZHlZcC1vTkZLQk1MbFd1UzI0TnVxWk9sTWlBUT09Iik7fWZ1bmN0aW9uIHhvcihkYXRhLGtleSl7dmFyIHJlc3VsdD1bXTtmb3IodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKXt2YXIgeG9yZWQ9ZGF0YS5jaGFyQ29kZUF0KGkpXmtleS5jaGFyQ29kZUF0KGkla2V5Lmxlbmd0aCk7cmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4b3JlZCkpO31yZXR1cm4gcmVzdWx0LmpvaW4oJycpO31mdW5jdGlvbiBjcm9wRXF1YWxzKGJhc2U2NCl7cmV0dXJuIGJhc2U2NC5yZXBsYWNlKC89KyQvLCcnKTt9ZnVuY3Rpb24gZW5jb2RlKHVybCl7dmFyIHhvcmVkVXJsPXhvcih1cmwsZ2V0S2V5KCkpO3JldHVybiBjcm9wRXF1YWxzKGVuY29kZVVJbnQ4U3RyaW5nKHhvcmVkVXJsKSk7fXZhciBlbmNvZGVkPWVuY29kZShjbGFzc05hbWUpO3ZhciBDSEFSX0NPREVfQT0nYScuY2hhckNvZGVBdCgwKTt2YXIgZmlyc3RDaGFyPVN0cmluZy5mcm9tQ2hhckNvZGUoZ2V0S2V5KCkuY2hhckNvZGVBdCgwKSUyNitDSEFSX0NPREVfQSk7cmV0dXJuKGZpcnN0Q2hhcitlbmNvZGVkKS5yZXBsYWNlKC8tL2csJ2EnKTt9LCJlbmNvZGVVcmwiOmZ1bmN0aW9uKHVybCl7dmFyIHNlZWQ9ImM2NDc4NCI7dmFyIGJhc2U2NGFscGhhYmV0PSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fPSc7ZnVuY3Rpb24gZGVjb2RlVUludDhTdHJpbmcoaW5wdXQpe3ZhciBvdXRwdXQ9W107dmFyIGk9MDt3aGlsZShpPGlucHV0Lmxlbmd0aCl7dmFyIGVuYzE9YmFzZTY0YWxwaGFiZXQuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7dmFyIGVuYzI9YmFzZTY0YWxwaGFiZXQuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7dmFyIGVuYzM9YmFzZTY0YWxwaGFiZXQuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7dmFyIGVuYzQ9YmFzZTY0YWxwaGFiZXQuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7dmFyIGNocjE9KGVuYzE8PDIpfChlbmMyID4+IDQpO3ZhciBjaHIyPSgoZW5jMiYxNSk8PDQpfChlbmMzID4+IDIpO3ZhciBjaHIzPSgoZW5jMyYzKTw8Nil8ZW5jNDtvdXRwdXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpKTtpZihlbmMzIT09NjQpe291dHB1dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMikpO31pZihlbmM0IT09NjQpe291dHB1dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMykpO319cmV0dXJuIG91dHB1dC5qb2luKCcnKTt9ZnVuY3Rpb24gZW5jb2RlVUludDhTdHJpbmcoaW5wdXQpe3ZhciBvdXRwdXQ9Jyc7dmFyIGk9MDt3aGlsZShpPGlucHV0Lmxlbmd0aCl7dmFyIGNocjE9aW5wdXQuY2hhckNvZGVBdChpKyspO3ZhciBjaHIyPWlucHV0LmNoYXJDb2RlQXQoaSsrKTt2YXIgY2hyMz1pbnB1dC5jaGFyQ29kZUF0KGkrKyk7dmFyIGVuYzE9Y2hyMSA+PiAyO3ZhciBlbmMyPSgoY2hyMSYzKTw8NCl8KGNocjIgPj4gNCk7dmFyIGVuYzM9KChjaHIyJjE1KTw8Mil8KGNocjMgPj4gNik7dmFyIGVuYzQ9Y2hyMyY2MztpZihpc05hTihjaHIyKSl7ZW5jMz1lbmM0PTY0O30gZWxzZSBpZihpc05hTihjaHIzKSl7ZW5jND02NDt9b3V0cHV0PW91dHB1dCtiYXNlNjRhbHBoYWJldC5jaGFyQXQoZW5jMSkrYmFzZTY0YWxwaGFiZXQuY2hhckF0KGVuYzIpK2Jhc2U2NGFscGhhYmV0LmNoYXJBdChlbmMzKStiYXNlNjRhbHBoYWJldC5jaGFyQXQoZW5jNCk7fXJldHVybiBvdXRwdXQ7fWZ1bmN0aW9uIHJlcGVhdChzdHIsY291bnQpe3ZhciByZXN1bHQ9W107Zm9yKHZhciBpPTA7IGk8Y291bnQ7IGkrKyl7cmVzdWx0LnB1c2goc3RyKTt9cmV0dXJuIHJlc3VsdC5qb2luKCcnKTt9ZnVuY3Rpb24gZ2V0S2V5KCl7cmV0dXJuIGRlY29kZVVJbnQ4U3RyaW5nKCJVcWZLTXBiamdvZDRlWVBhRTVTSTVGVDQ1ZUI3WGFoMTRVdE1fSXZIaTlNYl9ja1FqZ3JMY2lFXzN6ZHlZcC1vTkZLQk1MbFd1UzI0TnVxWk9sTWlBUT09Iik7fWZ1bmN0aW9uIHhvcihkYXRhLGtleSl7dmFyIHJlc3VsdD1bXTtmb3IodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKXt2YXIgeG9yZWQ9ZGF0YS5jaGFyQ29kZUF0KGkpXmtleS5jaGFyQ29kZUF0KGkla2V5Lmxlbmd0aCk7cmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4b3JlZCkpO31yZXR1cm4gcmVzdWx0LmpvaW4oIiIpO31mdW5jdGlvbiBjcm9wRXF1YWxzKGJhc2U2NCl7cmV0dXJuIGJhc2U2NC5yZXBsYWNlKC89KyQvLCIiKTt9ZnVuY3Rpb24gZW5jb2RlKHVybCl7dmFyIHhvcmVkVXJsPXhvcih1cmwsZ2V0S2V5KCkpO3JldHVybiBjcm9wRXF1YWxzKGVuY29kZVVJbnQ4U3RyaW5nKHhvcmVkVXJsKSk7fXZhciBzZHI9NjMzNjM0MzczODM0O2Z1bmN0aW9uIGdldFJhbmRvbUludChtaW4sbWF4KXtzZHI9KHNkcio3MyklOTk0OTt2YXIgcmFuZD1taW4rKHNkci85OTUwKSoobWF4KzEtbWluKTtyYW5kPU1hdGguZmxvb3IocmFuZCk7cmV0dXJuIHJhbmQ7fWZ1bmN0aW9uIGdldFJhbmRvbUNoYXIoZnJvbSx0byl7ZnJvbT1mcm9tfHwiYSI7dG89dG98fCJ6Ijt2YXIgY2hhckNvZGU9Z2V0UmFuZG9tSW50KGZyb20uY2hhckNvZGVBdCgwKSx0by5jaGFyQ29kZUF0KDApKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7fWZ1bmN0aW9uIG1peFdpdGhTbGFzaGVzKGVuY29kZWRVcmwpe3ZhciBDSFVOS19MRU5HVEg9Nzt2YXIgdXJsUGFydHM9ZW5jb2RlZFVybC5tYXRjaCgvLnsxLDd9L2cpO2lmKHVybFBhcnRzPT09bnVsbCl7cmV0dXJuIGVuY29kZWRVcmw7fXZhciB1cmxUZW1wbGF0ZT1bWyIvIiwgMV1dO3ZhciBzeW1ib2xzVG9JbnNlcnQ9Jyc7dmFyIHN5bWJvbHNUb0luc2VydFNldD0nJztmb3IodmFyIGk9MDsgaTx1cmxUZW1wbGF0ZS5sZW5ndGg7IGkrKyl7c3ltYm9sc1RvSW5zZXJ0Kz1yZXBlYXQodXJsVGVtcGxhdGVbaV1bMF0sdXJsVGVtcGxhdGVbaV1bMV0pO3N5bWJvbHNUb0luc2VydFNldCs9dXJsVGVtcGxhdGVbaV1bMF07fWZvcih2YXIgaT0wOyBpPHVybFBhcnRzLmxlbmd0aC0xJiZpPHN5bWJvbHNUb0luc2VydC5sZW5ndGg7IGkrKyl7dmFyIHBvc2l0aW9uVG9JbnNlcnQ9Z2V0UmFuZG9tSW50KDEsQ0hVTktfTEVOR1RILTEpO3ZhciBwYXJ0PXVybFBhcnRzW2ldLnNwbGl0KCIiKTtwYXJ0LnNwbGljZShwb3NpdGlvblRvSW5zZXJ0LDAsc3ltYm9sc1RvSW5zZXJ0W2ldKTt1cmxQYXJ0c1tpXT1wYXJ0LmpvaW4oIiIpO312YXIgdXJsPXVybFBhcnRzLmpvaW4oIiIpO2lmKHN5bWJvbHNUb0luc2VydFNldC5pbmRleE9mKCcmJykhPT0tMSl7cmV0dXJuIHVybC5yZXBsYWNlKC8mKGx0fGd0KS9pZywnJDEnKTt9ZWxzZXtyZXR1cm4gdXJsfX1mdW5jdGlvbiBjcnlwdE51bWJlcihudW0sbWluRW5jcnlwdGVkTGVuZ3RoKXt2YXIgaz1zZWVkLmNoYXJDb2RlQXQoMCk7dmFyIGI9c2VlZC5jaGFyQ29kZUF0KDUpO3ZhciByZXN1bHQ9KG51bSprK2IpLnRvU3RyaW5nKCkuc3BsaXQoIiIpO3doaWxlKHJlc3VsdC5sZW5ndGg8bWluRW5jcnlwdGVkTGVuZ3RoKXt2YXIgcG9zaXRpb25Ub0luc2VydD1nZXRSYW5kb21JbnQoMCxyZXN1bHQubGVuZ3RoKTt2YXIgY2hhclRvSW5zZXJ0PWdldFJhbmRvbUNoYXIoKTtyZXN1bHQuc3BsaWNlKHBvc2l0aW9uVG9JbnNlcnQsMCxjaGFyVG9JbnNlcnQpO31yZXN1bHQucHVzaCgiLyIpO3JldHVybiByZXN1bHQuam9pbigiIik7fWZ1bmN0aW9uIGV4cGFuZFVybCh1cmwsbWluTGVuZ3RoRGVjb2RlZCl7aWYobWluTGVuZ3RoRGVjb2RlZCA+IHVybC5sZW5ndGgpe3ZhciBzeW1ib2xzVG9HZW5lcmF0ZT1NYXRoLm1heChtaW5MZW5ndGhEZWNvZGVkLXVybC5sZW5ndGgtMSwwKTsgdmFyIHJhbmRvbVN5bWJvbHM9IiI7Zm9yKHZhciBpPTA7IGk8c3ltYm9sc1RvR2VuZXJhdGU7IGkrKyl7cmFuZG9tU3ltYm9scys9Z2V0UmFuZG9tQ2hhcigpO31yZXR1cm4gdXJsKyIgIityYW5kb21TeW1ib2xzO31yZXR1cm4gdXJsO31mdW5jdGlvbiBpc0VuY29kZWRVcmwodXJsKXtpZih1cmwuaW5kZXhPZigiYzY0Nzg0Iik9PT0tMSl7cmV0dXJuIGZhbHNlO311cmw9dXJsLnJlcGxhY2UoL15odHRwcz86LywnJyk7dmFyIHByZWZpeGVzPVsnaHR0cHM6Ly95YW5kZXgucnUvJywgJ2h0dHBzOi8veWFuZGV4LnJ1L3R1cmJvLyddO3ByZWZpeGVzLnB1c2goImh0dHBzOi8veWFuZGV4LnJ1L3R1cmJvL2FhYi8iKTtwcmVmaXhlcy5wdXNoKCIvL3R1cmJvLXlhbmRleC1ydS5uYXlkZXgubmV0LyIpO2Zvcih2YXIgaT0wOyBpPHByZWZpeGVzLmxlbmd0aDsgaSsrKXt2YXIgcHJlZml4PXByZWZpeGVzW2ldLnJlcGxhY2UoL15odHRwcz86LywnJyk7aWYodXJsLmluZGV4T2YocHJlZml4KT09PTApe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO31pZihpc0VuY29kZWRVcmwodXJsKSl7cmV0dXJuIHVybDt9dmFyIGV4cGFuZGVkVXJsPXVybDt2YXIgdXJsX2lzX3N1YmRvY3VtZW50PWZhbHNlO2lmKC9eKD86aHR0cHM/Oik/XC9cL3lhc3RhdCg/OmljKT9cLm5ldFwvc2FmZWZyYW1lLWJ1bmRsZXNcL1tcZC5cLVwvXSpcLyg/OnByb3RlY3RlZFwvKT9yZW5kZXJfYWRiXC5odG1sJC8udGVzdCh1cmwpKXtleHBhbmRlZFVybD1leHBhbmRVcmwodXJsLDczNyk7IHVybF9pc19zdWJkb2N1bWVudD10cnVlO30gZWxzZSBpZighL14oPzpodHRwcz86KT9cL1wvY3J5cHJveFwueWFuZGV4XC5uZXRcL2JhbWJvb3psZWQvLnRlc3QodXJsKSl7ZXhwYW5kZWRVcmw9ZXhwYW5kVXJsKHVybCw3MzcpOyB9dmFyIGVuY29kZWQ9ZW5jb2RlKGV4cGFuZGVkVXJsKTt2YXIgZW5jb2RlZExpbms9bWl4V2l0aFNsYXNoZXMoZW5jb2RlZCk7dmFyIGxpbmtMZW5ndGg9ZW5jb2RlZC5sZW5ndGg7dmFyIHVybF9wcmVmaXg9Imh0dHBzOi8veWFuZGV4LnJ1L3R1cmJvL2FhYi8iO2lmKCEvXig/Omh0dHBzPzopP1wvXC9bXHcuLV0qKHlhbmRleHxhZGZveClcLlx3K1wvLnwoPzpob3N0fHdpZGdldClfYWRiXC5qcyQvLnRlc3QodXJsKSl7dXJsX3ByZWZpeD0iLy90dXJiby15YW5kZXgtcnUubmF5ZGV4Lm5ldC8iOyB9aWYodXJsLmluZGV4T2YoJy8vJyk9PT0wKXt1cmxfcHJlZml4PXVybF9wcmVmaXgucmVwbGFjZSgvXmh0dHBzPzovLCcnKTt9dmFyIHByZWZpeD11cmxfcHJlZml4K2NyeXB0TnVtYmVyKGxpbmtMZW5ndGgsOSkrc2VlZDt2YXIgbGFzdFNsYXNoPWZhbHNlPyIvIjoiIjt2YXIgcmVzdWx0PXByZWZpeCtlbmNvZGVkTGluaytsYXN0U2xhc2g7aWYoZmFsc2UmJnVybF9pc19zdWJkb2N1bWVudCl7cmV0dXJuIHJlc3VsdC5yZXBsYWNlKC9eaHR0cHM/Oi8sJycpLnJlcGxhY2UoLyheXC9cLykvLCcnKS5yZXBsYWNlKC8oLio/XC8pLywnLycpO30gZWxzZXtyZXR1cm4gcmVzdWx0O319LCJkZWNvZGVVcmwiOmZ1bmN0aW9uKHVybCl7dmFyIGJhc2U2NGFscGhhYmV0PSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fPSc7ZnVuY3Rpb24gZGVjb2RlVUludDhTdHJpbmcoaW5wdXQpe3ZhciBvdXRwdXQ9W107dmFyIGk9MDtpbnB1dD1pbnB1dC5yZXBsYWNlKC9bXkEtWmEtejAtOVwtXz1dL2csJycpO3doaWxlKGk8aW5wdXQubGVuZ3RoKXt2YXIgZW5jMT1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jMj1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jMz1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgZW5jND1iYXNlNjRhbHBoYWJldC5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTt2YXIgY2hyMT0oZW5jMTw8Mil8KGVuYzIgPj4gNCk7dmFyIGNocjI9KChlbmMyJjE1KTw8NCl8KGVuYzMgPj4gMik7dmFyIGNocjM9KChlbmMzJjMpPDw2KXxlbmM0O291dHB1dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSkpO2lmKGVuYzMhPT02NCl7b3V0cHV0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKSk7fWlmKGVuYzQhPT02NCl7b3V0cHV0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKSk7fX1yZXR1cm4gb3V0cHV0LmpvaW4oJycpO31mdW5jdGlvbiBhZGRFcXVhbHMoYmFzZTY0KXt3aGlsZShiYXNlNjQubGVuZ3RoJTQhPT0wKXtiYXNlNjQrPSc9Jzt9cmV0dXJuIGJhc2U2NDt9ZnVuY3Rpb24gZ2V0S2V5KCl7cmV0dXJuIGRlY29kZVVJbnQ4U3RyaW5nKCJVcWZLTXBiamdvZDRlWVBhRTVTSTVGVDQ1ZUI3WGFoMTRVdE1fSXZIaTlNYl9ja1FqZ3JMY2lFXzN6ZHlZcC1vTkZLQk1MbFd1UzI0TnVxWk9sTWlBUT09Iik7fWZ1bmN0aW9uIHhvcihkYXRhLGtleSl7dmFyIHJlc3VsdD1bXTtmb3IodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKXt2YXIgeG9yZWQ9ZGF0YS5jaGFyQ29kZUF0KGkpXmtleS5jaGFyQ29kZUF0KGkla2V5Lmxlbmd0aCk7cmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4b3JlZCkpO31yZXR1cm4gcmVzdWx0LmpvaW4oJycpO31mdW5jdGlvbiBkZWNvZGUoZW5jb2RlZFVybCl7dmFyIGZ1bGxVcmw9YWRkRXF1YWxzKGVuY29kZWRVcmwpO3JldHVybiB4b3IoZGVjb2RlVUludDhTdHJpbmcoZnVsbFVybCksZ2V0S2V5KCkpO312YXIgbGFzdFN5bWJvbEluVXJsPXVybC5zbGljZSgtMSk7dmFyIGVuY29kZWRVcmw9dXJsO2lmKGZhbHNlJiZsYXN0U3ltYm9sSW5Vcmw9PT0iLyIpe2VuY29kZWRVcmw9ZW5jb2RlZFVybC5zbGljZSgwLC0xKTt9ZW5jb2RlZFVybD1lbmNvZGVkVXJsLnNwbGl0KCJjNjQ3ODQiKVsxXTtlbmNvZGVkVXJsPWFkZEVxdWFscyhlbmNvZGVkVXJsLnJlcGxhY2UoL1tcLz8uPSYhJCgpfCp+XFtcXV48PlxcXS9nLCIiKSk7cmV0dXJuIGRlY29kZShlbmNvZGVkVXJsKS5yZXBsYWNlKC9ce2M2NDc4ND1bYS16QS1aXSpcfSR8XHNbYS16QS1aXSokLywiIik7fSwiaXNFbmNvZGVkVXJsIjpmdW5jdGlvbih1cmwpe2lmKHVybC5pbmRleE9mKCJjNjQ3ODQiKT09PS0xKXtyZXR1cm4gZmFsc2U7fXVybD11cmwucmVwbGFjZSgvXmh0dHBzPzovLCcnKTt2YXIgcHJlZml4ZXM9WydodHRwczovL3lhbmRleC5ydS8nLCAnaHR0cHM6Ly95YW5kZXgucnUvdHVyYm8vJ107cHJlZml4ZXMucHVzaCgiaHR0cHM6Ly95YW5kZXgucnUvdHVyYm8vYWFiLyIpO3ByZWZpeGVzLnB1c2goIi8vdHVyYm8teWFuZGV4LXJ1Lm5heWRleC5uZXQvIik7Zm9yKHZhciBpPTA7IGk8cHJlZml4ZXMubGVuZ3RoOyBpKyspe3ZhciBwcmVmaXg9cHJlZml4ZXNbaV0ucmVwbGFjZSgvXmh0dHBzPzovLCcnKTtpZih1cmwuaW5kZXhPZihwcmVmaXgpPT09MCl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJhbmRvbT1pKDQzMCkuSVNfQlJPS0VOX01BVEhfUkFORE9NP2koNDMxKS5wc2V1ZG9SYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubGlzdFRvQXJyYXk9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107Zm9yKHZhciB0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0LnB1c2goZVtpXSk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDQ3KTt0Lk5TPXt4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn0sdC5BdHRyaWJ1dGVOYW1lcz17eGxpbmtBY3R1YXRlOiJ4bGluazphY3R1YXRlIix4bGlua0FyY3JvbGU6InhsaW5rOmFyY3JvbGUiLHhsaW5rSHJlZjoieGxpbms6aHJlZiIseGxpbmtSb2xlOiJ4bGluazpyb2xlIix4bGlua1Nob3c6InhsaW5rOnNob3ciLHhsaW5rVGl0bGU6InhsaW5rOnRpdGxlIix4bGlua1R5cGU6InhsaW5rOnR5cGUifSx0LkF0dHJpYnV0ZU5hbWVzcGFjZT17fSxuLmZvck93bih0LkF0dHJpYnV0ZU5hbWVzLGZ1bmN0aW9uKGUsaSl7dmFyIG49ZS5zcGxpdCgiOiIpLG89dC5OU1tuWzBdXTtvJiYodC5BdHRyaWJ1dGVOYW1lc3BhY2VbaV09byl9KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG4sbz0iY2xhc3NMaXN0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPWkoMTk4KS5tZW1vaXplU2luZ2xlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdCYmZS5jbGFzc0xpc3QuYWRkfSxpKDM3KS5jaGVja05hdGl2ZUNvZGUpLGE9aSgxOTgpLm1lbW9pemVTaW5nbGUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0JiZlLmNsYXNzTGlzdC5yZW1vdmV9LGkoMzcpLmNoZWNrTmF0aXZlQ29kZSkscz1pKDE5OCkubWVtb2l6ZVNpbmdsZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc0xpc3QmJmUuY2xhc3NMaXN0LnRvZ2dsZX0saSgzNykuY2hlY2tOYXRpdmVDb2RlKSxsPShuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSwhIW8mJihuLmNsYXNzTGlzdC5hZGQoImMxIiwiYzIiKSwhIW4uY2xhc3NMaXN0LmNvbnRhaW5zKCJjMiIpJiYobi5jbGFzc0xpc3QudG9nZ2xlKCJjMyIsITEpLCFuLmNsYXNzTGlzdC5jb250YWlucygiYzMiKSkpKSxjPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3JldHVybiEhbyYmKGUuY2xhc3NMaXN0LnRvZ2dsZSgiYSIsITEpLCFlLmNsYXNzTGlzdC5jb250YWlucygiYSIpKX0oKSx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnNwbGl0KCIgIikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUpfSl9O2Z1bmN0aW9uIGQoZSl7cmV0dXJuIGkoMTkpLmlzU3RyaW5nKGUuY2xhc3NOYW1lKT9lLmNsYXNzTmFtZTplLm5hbWVzcGFjZVVSST09PWkoMTE2KS5OUy5zdmcmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBwKGUsdCl7aSgxOSkuaXNTdHJpbmcoZS5jbGFzc05hbWUpP2UuY2xhc3NOYW1lPXQ6ZS5uYW1lc3BhY2VVUkk9PT1pKDExNikuTlMuc3ZnJiZlLnNldEF0dHJpYnV0ZU5TKCIiLCJjbGFzcyIsdCl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgaT11KHQpLG49MDtuPGkubGVuZ3RoO24rKylpZighZS5jbGFzc0xpc3QuY29udGFpbnMoaVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgaT0iICIrZChlKSsiICIsbj10LnNwbGl0KCIgIiksbz0wO288bi5sZW5ndGg7bysrKWlmKG5bb10mJi0xPT09aS5pbmRleE9mKCIgIituW29dKyIgIikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZyhlLHQpe3ZvaWQgMD09PXQmJih0PSIiKSwwIT09ZS5jbGFzc05hbWUubGVuZ3RoP3IoZSk/XyhlLHQpOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZChlKS5zcGxpdCgiICIpLmNvbmNhdCh0LnNwbGl0KCIgIikpO249aSgyODQpLnVuaXF1ZShpKDIyKS5maWx0ZXIobixmdW5jdGlvbihlKXtyZXR1cm4iIiE9PWV9KSkscChlLG4uam9pbigiICIpKX0oZSx0KTplLmNsYXNzTmFtZT10fXQuY2xlYXJDbGFzc2VzPWZ1bmN0aW9uKGUpe2koMTkpLmlzU3RyaW5nKGUuY2xhc3NOYW1lKT9lLmNsYXNzTmFtZT0iIjplLm5hbWVzcGFjZVVSST09PWkoMTE2KS5OUy5zdmcmJmUuc2V0QXR0cmlidXRlTlMoIiIsImNsYXNzIiwiIil9LHQuaGFzQ2xhc3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLGUuY2xhc3NMaXN0P2YoZSx0KTpoKGUsdCl9LHQuX2hhc0NsYXNzPWYsdC5fZmFsbGJhY2tIYXNDbGFzcz1oLHQuYWRkQ2xhc3M9Zzt2YXIgXz1sP2Z1bmN0aW9uKGUsdCl7dmFyIGksbj11KHQpOyhpPWUuY2xhc3NMaXN0KS5hZGQuYXBwbHkoaSxuKX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9dSh0KSxuPTA7bjxpLmxlbmd0aDtuKyspZS5jbGFzc0xpc3QuYWRkKGlbbl0pfTt0LnJlbW92ZUNsYXNzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSxhKGUpP3koZSx0KTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1kKGUpLnNwbGl0KCIgIiksbz10LnNwbGl0KCIgIikscj1bXSxhPTA7YTxuLmxlbmd0aDthKyspblthXSYmLTE9PT1pKDIzKS5pbmRleE9mKG8sblthXSkmJnIucHVzaChuW2FdKTtwKGUsci5qb2luKCIgIikpfShlLHQpfTt2YXIgeT1sP2Z1bmN0aW9uKGUsdCl7dmFyIGksbj11KHQpOyhpPWUuY2xhc3NMaXN0KS5yZW1vdmUuYXBwbHkoaSxuKX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9dSh0KSxuPTA7bjxpLmxlbmd0aDtuKyspZS5jbGFzc0xpc3QucmVtb3ZlKGlbbl0pfTt2YXIgbT1mdW5jdGlvbihlLGksbil7dm9pZCAwPT09aSYmKGk9IiIpLHZvaWQgMD09PW4mJihuPSF0Lmhhc0NsYXNzKGUsaSkpLG4/ZyhlLGkpOnQucmVtb3ZlQ2xhc3MoZSxpKX07dC50b2dnbGVDbGFzcz1jP2Z1bmN0aW9uKGUsdCxpKXtpZih2b2lkIDA9PT10JiYodD0iIikscyhlKSlmb3IodmFyIG49dSh0KSxvPTA7bzxuLmxlbmd0aDtvKyspdm9pZCAwPT09aT9lLmNsYXNzTGlzdC50b2dnbGUobltvXSk6ZS5jbGFzc0xpc3QudG9nZ2xlKG5bb10saSk7ZWxzZSBtKGUsdCxpKX06bX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPTUscj0zLGE9e2FkZENsYXNzOiEwfTtmdW5jdGlvbiBzKGUpe3ZvaWQgMD09PWUmJihlPWEpO2Zvcih2YXIgdD1lLm1heFdyYXBEZXB0aHx8byxyPWkoNDgpLmdldFJhbmRvbUludCgxLHQpLHM9W10sYz0wO2M8cjtjKyspe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2lmKGUuYWRkSWQmJmkoNDApLmlzUGVyY2VudCg1MCkmJih1LmlkPWkoODIpLmdldFJhbmRvbVN0cmluZyhpKDQ4KS5nZXRSYW5kb21JbnQoNSwxNSkpKSxlLmFkZENsYXNzJiZpKDQwKS5pc1BlcmNlbnQoNTApJiYodS5jbGFzc05hbWU9aSg4MikuZ2V0UmFuZG9tU3RyaW5nKGkoNDgpLmdldFJhbmRvbUludCg1LDE1KSkpLHMubGVuZ3RoKXt2YXIgZD1zW3MubGVuZ3RoLTFdLHA9bihuKHt9LGUpLHttYXhXcmFwRGVwdGg6TWF0aC5mbG9vcih0LzMpfSk7ZC5hcHBlbmRDaGlsZCh1KSxsKHUscCl9cy5wdXNoKHUpfXJldHVybiBzfWZ1bmN0aW9uIGwoZSx0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIG49ZS5wYXJlbnRFbGVtZW50O2lmKG4pZm9yKHZhciBvPWkoNDgpLmdldFJhbmRvbUludCgwLHIpLGE9aSg0OCkuZ2V0UmFuZG9tSW50KDAsbyksbD0wO2w8bztsKyspe3ZhciBjPXModClbMF07bDxhP24uaW5zZXJ0QmVmb3JlKGMsZSk6bi5hcHBlbmRDaGlsZChjKX19dC5jcmVhdGVSYW5kb21FbGVtZW50VHJlZT1zLHQuYXBwZW5kUmFuZG9tU2libGluZ3M9bH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgzMSksbz1pKDEpO3QuREVGQVVMVF9JTlRFUlZBTD0zMDAsdC52aXNpYmlsaXR5T2JzZXJ2ZXI9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLGZ1bmN0aW9uKHIsYSl7dmFyIHMsbD17cG9ydGlvbjp2b2lkIDAhPT1pLnBvcnRpb24/aS5wb3J0aW9uOjAsaW50ZXJ2YWw6dm9pZCAwIT09aS5pbnRlcnZhbD9pLmludGVydmFsOnQuREVGQVVMVF9JTlRFUlZBTCxvdmVybGFwcGVkUG9pbnRzOnZvaWQgMCE9PWkub3ZlcmxhcHBlZFBvaW50cz9pLm92ZXJsYXBwZWRQb2ludHM6W1swLDBdXX0sYz1lKHtwb3J0aW9uOk1hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsbC5wb3J0aW9uKSxpbnRlcnZhbDpsLmludGVydmFsLG92ZXJsYXBwZWRQb2ludHM6bC5vdmVybGFwcGVkUG9pbnRzLGVsZW1lbnQ6cixjYWxsYmFjazpvLnByb3RlY3QoInZpc2liaWxpdHlPYnNlcnZlciIsZnVuY3Rpb24oZSl7cyE9PWUmJihzPWUsYShlKSl9KX0pO2lmKCFjKXRocm93IG5ldyBFcnJvcigidmlzaWJpbGl0eU9ic2VydmVyOiBubyBzdHJhdGVneSIpO3JldHVybiBjLnN0YXJ0KCksbi5vbmNlKGZ1bmN0aW9uKCl7cmV0dXJuIGMuc3RvcCgpfSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgzMTMpLG89aSg1MDkpLHI9aSg1MTIpLGE9aSgyMDgpLHM9aSgyMDkpLGw9aSgzMTkpLGM9aSgxNDkpLHU9aSgzMTQpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmZhY3Rvcnk9Yy5PbmVPZlN0cmF0ZWd5LmZyb20obC5NcmFpZFN0cmF0ZWd5LmZhY3Rvcnksbi5BbGxPZlN0cmF0ZWd5LmZyb20oci5Eb2N1bWVudFN0cmF0ZWd5LmZhY3Rvcnkscy5JbnRlcnNlY3Rpb25TdHJhdGVneS5mYWN0b3J5LHUuT3ZlcmxheVN0cmF0ZWd5LmZhY3RvcnkpLG4uQWxsT2ZTdHJhdGVneS5mcm9tKHIuRG9jdW1lbnRTdHJhdGVneS5mYWN0b3J5LG8uRGlzcGxheVN0cmF0ZWd5LmZhY3RvcnkpLGEuRHVtbXlTdHJhdGVneS5mYWN0b3J5KSxlfSgpO3QuR2VuZXJhbFN0cmF0ZWd5PWR9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scj0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe3ZvaWQgMD09PXImJihyPXt9KTt2YXIgYT10aGlzLHM9Im9iamVjdCI9PT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjpvKG4pKT9uOnttZXNzYWdlOlN0cmluZyhufHxpKDc1KS5ERUZBVUxUX0VSUk9SLm1lc3NhZ2UpfTthPWUuY2FsbCh0aGlzKXx8dGhpcyxpKDUzMikoYSx0LnByb3RvdHlwZSksYS5tZXNzYWdlPXIubWVzc2FnZXx8cy5tZXNzYWdlfHxpKDc1KS5ERUZBVUxUX0VSUk9SLm1lc3NhZ2UsYS5jb2RlPXIuY29kZXx8cy5jb2RlfHxzLmlkfHxpKDc1KS5ERUZBVUxUX0VSUk9SLmNvZGUsYS5pc0ZhdGFsPUJvb2xlYW4oaSg1MzMpLmdldEZpcnN0RGVmaW5lZChbci5pc0ZhdGFsLHMuaXNGYXRhbCxpKDc1KS5ERUZBVUxUX0VSUk9SLmlzRmF0YWxdKSksYS5kZXRhaWxzPXIuZGV0YWlsc3x8cy5kZXRhaWxzfHxpKDc1KS5ERUZBVUxUX0VSUk9SLmRldGFpbHM7dmFyIGw9ci5zdGFja3x8cy5zdGFja3x8ZnVuY3Rpb24oZSl7dmFyIHQ9ZS51cmwsaT1lLmxpbmUsbj1lLmNvbCxvPWUuZmlsZU5hbWUscj1lLmNvbHVtbk51bWJlcixhPWUubGluZU51bWJlcjtyZXR1cm4odHx8b3x8Ij8iKSsiOiIrKGl8fGF8fCI/IikrIjoiKyhufHxyfHwiPyIpfShzKSxjPWw9PT1pKDc1KS5ERUZBVUxUX0VSUk9SLnN0YWNrP2Euc3RhY2s6bDtpZihjJiZjIT09aSg3NSkuREVGQVVMVF9FUlJPUi5zdGFjaylhLnN0YWNrPWM7ZWxzZSBpZighYS5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKGEubWVzc2FnZSl9Y2F0Y2goZSl7YS5zdGFjaz1jPWUuc3RhY2t8fGkoNzUpLkRFRkFVTFRfRVJST1Iuc3RhY2t9cmV0dXJuIGEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaSgzMjIpLmpzb25TdHJpbmdpZnlDaXJjdWxhcihhLnRvSlNPTigpKX0sYS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTphLm1lc3NhZ2UsY29kZTphLmNvZGUsaXNGYXRhbDphLmlzRmF0YWwsZGV0YWlsczphLmRldGFpbHMsc3RhY2s6Y319LGF9cmV0dXJuIHIodCxlKSx0fShFcnJvcik7dC5DdXN0b21FcnJvcj1hfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE9iamVjdEVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5lbnRyaWVzP09iamVjdC5lbnRyaWVzKGUpOmkoNDYpLmdldE9iamVjdEtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0LGVbdF1dfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDIxOSkucGFyZW50RnJpZW5kbHlJRnJhbWVzLmxlbmd0aDt0LlRPUF9GUklFTkRMWV9XSU5ET1c9bj4wP2koMjE5KS5wYXJlbnRGcmllbmRseUlGcmFtZXNbbi0xXS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OndpbmRvd30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgyMTUpLG89aSgxOSkscj1pKDI0KSxhPW4uaXNOYXRpdmVTZW5kQmVhY29uU3VwcG9ydGVkKHdpbmRvdykscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgaT10aGlzO3RoaXMucmVkaXJlY3RVcmw9ZSx0aGlzLnRhcmdldFVybD10LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRSZWRpcmVjdCgpfX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0UmVkaXJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIuVXJsKHtob3N0OnRoaXMucmVkaXJlY3RVcmx9KS5nZXRVcmwoKX0sZS5wcm90b3R5cGUuaGFzVGFyZ2V0VXJsPWZ1bmN0aW9uKCl7cmV0dXJuIGEmJm8uaXNTdHJpbmcodGhpcy50YXJnZXRVcmwpfSxlLnByb3RvdHlwZS5nZXRCZWFjb25XaXRoUXVlcnlBcmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIuVXJsKHtob3N0OnRoaXMuZ2V0UmVkaXJlY3QoKSxwYXJhbXM6e2JlYWNvbjoxfX0pLmdldFVybCgpfSxlLnByb3RvdHlwZS5nZXRUYXJnZXRVcmw9ZnVuY3Rpb24oKXtyZXR1cm4iIisodGhpcy5oYXNUYXJnZXRVcmwoKT90aGlzLnRhcmdldFVybDp0aGlzLnJlZGlyZWN0VXJsKX0sZX0oKTt0LlRhcmdldFVybExpbms9c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRGdWxsc2NyZWVuU2V0dGluZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mdWxsc2NyZWVuRHVyYXRpb247cmV0dXJue2R1cmF0aW9uOnZvaWQgMD09PXQ/MTA6dCxjbG9zZUJ1dHRvblZpc2liaWxpdHlUaW1lb3V0OmUuZnVsbHNjcmVlbkNsb3NlQnV0dG9uVmlzaWJpbGl0eVRpbWVvdXR9fSx0LmlzRnVsbHNjcmVlbj1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlLmZ1bGxzY3JlZW4pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgaT1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksbikmJihlW25dPWlbbl0pfXJldHVybiBlfSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdFsiZGVmYXVsdCJdPWUsdH0oaSgxNDgpKTt2YXIgcj1pKDczOSksYT1pKDc2Nykscz1pKDc2OCksbD1mdW5jdGlvbihlKXtyZXR1cm4gZShpKDc3MSkpfTtmdW5jdGlvbiBjKCl7dGhpcy5xdWV1ZT1uZXcoaSgwKS5RdWV1ZSksdGhpcy5faXNTZWNvbmRCdW5kbGVMb2FkaW5nPSExLHRoaXMuX3J0Yj1uZXcoaSg3NzkpKSh0aGlzKSx0aGlzLl9zZXR0aW5nc1N0b3JhZ2U9e30sdGhpcy5fbGFzdFRpbWVPZlJlZnJlc2g9MCx0aGlzLl9yZWZyZXNoVGltZT0wLHRoaXMuX2hpZGRlblRpbWU9MWU0LHRoaXMuX3JlZnJlc2hJZD1udWxsLHRoaXMuX3JlZnJlc2hGbGFnPSExLHRoaXMuX2luaXRBZFJlZnJlc2htZW50KCl9Yy5wcm90b3R5cGU9e3JlbmRlcjpmdW5jdGlvbihlLHQpe2UudW5pcXVlSWR8fCgoZT1uKHt9LGUpKS51bmlxdWVJZD0oMCxpKDcwKS5nZW5lcmF0ZUhleFN0cmluZykoMTApLGUuc2xvdEluZGV4PSgwLGkoMzY1KS5pbmNyZWFzZUNvdW50ZXIpKCkpLCgwLGkoMjUpLnNldE1hcmspKGUudW5pcXVlSWQsaSgyNSkuUmVuZGVyTWFya3MuQWR2TWFuYWdlclJlbmRlciksZS5hZFNlc3Npb25JZCYmKDAsaSg5MSkuc2V0U2Vzc2lvbklkKShlLmFkU2Vzc2lvbklkKSwoMCxpKDE2KS5zYXZlQnVuZGxlVHlwZSkoZS5idW5kbGUpLCgwLGkoMTYpLnNhdmVCdW5kbGVUeXBlKShlLmRhdGEpLGUuaW5pdFRpbWUmJigwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkNmZ0luaXRUaW1lLGUuaW5pdFRpbWUpLCgwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkFkdk1hbmFnZXJJbml0KTt2YXIgbz1pKDE1KS5wYXJzZUJsb2NrSWQoZS5ibG9ja0lkKTtpKDkpLmxvZ2dlci5jb25maWd1cmUoe2xhYmVsczp7cGFnZUlkOigwLGkoMzYzKS5nZXRTZXJ2aWNlTmFtZSkoKX0sZGF0YTp7cGFnZUlkOm8ucGFnZUlkfX0pO3ZhciByPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK2UucmVuZGVyVG8pO2lmKHIpeygwLGkoMTcpLm9uKShyLCJlcnJvciIsdGhpcy5fc2VuZEV4dGVybmFsUmVzb3VyY2VFcnJvcix0aGlzLHtjYXB0dXJlOiEwfSksdD0oMCxpKDMyKS5pc29sYXRlKSh0KTt2YXIgYT10aGlzLl9zaG91bGRSZWxvYWRBZHMoKSxzPW8ucHJvZHVjdDtzd2l0Y2godGhpcy5zYXZlKGkoMTUpLmdldFJlbmRlcklkKGUpLFtlLHRdLDAsYSkscyl7Y2FzZSJJIjp0aGlzLl9yZW5kZXJJbnRlcm5hbChlLHQpO2JyZWFrO2Nhc2UiVkkiOnRoaXMuX3JlbmRlcklucGFnZShlLHQpO2JyZWFrO2Nhc2UiVkYiOnRoaXMuX3JlbmRlckZ1bGxzY3JlZW4oZSx0KTticmVhaztjYXNlIlIiOnRoaXMuX3Jlc2V0QmlkKCksdGhpcy5fcmVuZGVyUnRiKGUsdCk7YnJlYWs7Y2FzZSJEIjppZigoMCxpKDk2KS5pc1J0YkluRGlyZWN0RXhwZXJpbWVudCkoe3BhZ2VJZDpvLnBhZ2VJZCxwcm9kdWN0OnMsaGFzU2VhcmNoVGV4dDpCb29sZWFuKGUuc2VhcmNoVGV4dCl9KSl7dGhpcy5fcmVuZGVyUnRiKGUsdCk7YnJlYWt9Y2FzZSJQIjp0aGlzLl9yZXNldEJpZCgpO2Nhc2UiUyI6KDAsaSgyKS5zdG9wTG9nZ2luZ1RpbWUpKGUudW5pcXVlSWQpLHRoaXMuX3JlbmRlckRpcmVjdChlLHQpO2JyZWFrO2Nhc2UiWSI6dGhpcy5fcmVuZGVyRGlzdHJpYnV0aW9uKGUsdCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9sb2dVbmtub3duKGUuYmxvY2tJZCl9dGhpcy5fbG9hZFNlY29uZEJ1bmRsZSgpfWVsc2UgdGhpcy5fc2VuZE5vRWxlbWVudE1lc3NhZ2UoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZNYW5hZ2VyKyIucmVuZGVyIixvLnBhZ2VJZCxlLmJsb2NrSWQsZS5yZW5kZXJUbyl9LF9zaG91bGRSZWxvYWRBZHM6ZnVuY3Rpb24oKXtyZXR1cm4hKDAsaSgxNikuY2hlY2tCdW5kbGVUeXBlKShpKDE2KS5idW5kbGVUeXBlcy5TU1ApJiYhKDAsaSgxNikuY2hlY2tCdW5kbGVUeXBlKShpKDE2KS5idW5kbGVUeXBlcy5tb2JpbGVTZGspfSxnZXRCaWQ6ZnVuY3Rpb24oZSx0LG8pe2UudW5pcXVlSWR8fCgoZT1uKHt9LGUpKS51bmlxdWVJZD0oMCxpKDcwKS5nZW5lcmF0ZUhleFN0cmluZykoMTApLGUuc2xvdEluZGV4PSgwLGkoMzY1KS5pbmNyZWFzZUNvdW50ZXIpKCkpLCgwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkFkdk1hbmFnZXJJbml0KSwoMCxpKDE2KS5zYXZlQnVuZGxlVHlwZSkoZS5idW5kbGUpLGUuaW5pdFRpbWUmJigwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkNmZ0luaXRUaW1lLGUuaW5pdFRpbWUpO3ZhciByPWkoMTUpLnBhcnNlQmxvY2tJZChlLmJsb2NrSWQpLGE9aSgwKS5kb20ucXVlcnlTZWxlY3RvcigiIyIrZS5yZW5kZXJUbyk7aWYoYSl7KDAsaSgxNykub24pKGEsImVycm9yIix0aGlzLl9zZW5kRXh0ZXJuYWxSZXNvdXJjZUVycm9yLHRoaXMse2NhcHR1cmU6ITB9KSx0aGlzLnNhdmUoaSgxNSkuZ2V0UmVuZGVySWQoZSksW2Usb10sMCwhMSksRGF0ZS5ub3coKS10aGlzLl9sYXN0VGltZU9mUmVmcmVzaDwzZTQmJnRoaXMuX3J0Yi5jbGVhckJsb2NrVGltZW91dChpKDE1KS5wcmVwYXJlUnRiQ29uZmlnKGUpKTt2YXIgcz1yLnByb2R1Y3Q7aWYobz0oMCxpKDMyKS5pc29sYXRlKShvKSx0PSgwLGkoMzIpLmlzb2xhdGUpKHQpLHRoaXMuX2JpZFBlbmRpbmd8fHRoaXMuX2JpZFJlbmRlclBhcmFtcylvKG5ldyBFcnJvcihpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi5nZXRCaWQ6IHJlbGVhc2UgcHJldmlvdXMgYmlkIHdpdGggcmVsZWFzZUJpZCBtZXRob2QgZmlyc3QiKSk7ZWxzZXt2YXIgbD10aGlzLl9nZXRCaWRDYWxsYmFjayh0LG8pLGM9KDAsaSgxKS5wcm90ZWN0KShpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi5nZXRCaWQ6IHJlbG9hZCBlcnJvciIsZnVuY3Rpb24oKXt0aGlzLl9yZXNldEJpZCgpLG8obmV3IEVycm9yKGkoMSkuUHJvdGVjdGVkTmFtZXMuQWR2TWFuYWdlcisiLmdldEJpZDogZGF0YSBjYW5ub3QgcmVsb2FkIHlldCwgd2FpdCB1bnRpbCByZWxvYWRUaW1lb3V0IGNvdW50cyBkb3duIikpfSx0aGlzKTtzd2l0Y2godGhpcy5fYmlkUGVuZGluZz0hMCxzKXtjYXNlIlIiOnZhciB1PWkoMTUpLnByZXBhcmVSdGJDb25maWcoZSk7dGhpcy5fcnRiLmdldEJpZCh1LGwsbyxjKTticmVhaztkZWZhdWx0OnRoaXMuX3Jlc2V0QmlkKCksbyhuZXcgRXJyb3IoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZNYW5hZ2VyKyIuZ2V0QmlkOiB1bmtub3duIGJsb2NrLCB1c2Ugd2l0aCBSVEIgYmxvY2tzIG9ubHkiKSl9dGhpcy5fbG9hZFNlY29uZEJ1bmRsZSgpfX1lbHNlIHRoaXMuX3NlbmROb0VsZW1lbnRNZXNzYWdlKGkoMSkuUHJvdGVjdGVkTmFtZXMuQWR2TWFuYWdlcisiLmdldEJpZCIsci5wYWdlSWQsZS5ibG9ja0lkLGUucmVuZGVyVG8pfSxfbG9hZFNlY29uZEJ1bmRsZTpmdW5jdGlvbigpe3RoaXMuX2lzU2Vjb25kQnVuZGxlTG9hZGluZ30sX2dldEJpZENhbGxiYWNrOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsaSgxKS5wcm90ZWN0KShpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi5iaWRDYWxsYmFjayIsZnVuY3Rpb24oaSl7aWYodGhpcy5fYmlkUGVuZGluZz0hMSx0aGlzLl9iaWRSZW5kZXJQYXJhbXM9aSxpLmRhdGFGcm9tUGFyYW1zKXJldHVybiB0aGlzLl9yZXNldEJpZCgpLHZvaWQgdChuZXcgRXJyb3IoIkNhbm5vdCB1c2UgZGF0YSBmcm9tIHBhcmFtZXRlcnMgd2l0aCBnZXRCaWQiKSk7aWYoaS5kYXRhLnJ0Ynx8aS5kYXRhLmRpcmVjdCl7aWYoIWkuZGF0YS5ydGJBdWN0aW9uSW5mb3x8IWkuZGF0YS5ydGJBdWN0aW9uSW5mby53aW5QcmljZSlyZXR1cm4gdGhpcy5fcmVzZXRCaWQoKSx2b2lkIHQobmV3IEVycm9yKCJObyBiaWQgcHJpY2UgaW4gdGhlIGhvc3QncyBhbnN3ZXIiKSk7dmFyIG49TnVtYmVyKGkuZGF0YS5ydGJBdWN0aW9uSW5mby53aW5QcmljZSk7ZSh7YmlkOm59KX1lbHNlIHRoaXMuX3Jlc2V0QmlkKCksdChuZXcgRXJyb3IoIk5vIGRhdGEgaW4gdGhlIGhvc3QncyBhbnN3ZXIiKSl9LHRoaXMpfSxfc2VuZE5vRWxlbWVudE1lc3NhZ2U6ZnVuY3Rpb24oZSx0LG4sbyl7aSg5KS5sb2dnZXIud2FybihuZXcgRXJyb3IoIk5vIGVsZW1lbnQgd2l0aCBpZCAjIitvKyIgKCIrdCsiKSgiK24rIikiKSxlKX0sX3NlbmRFeHRlcm5hbFJlc291cmNlRXJyb3I6ZnVuY3Rpb24oZSl7aSg5KS5sb2dnZXIuZXJyb3IobmV3IEVycm9yKGUuc3JjRWxlbWVudC50YWdOYW1lKyI6ICIrZS50YXJnZXQuc3JjKSwiRXh0ZXJuYWxSZXNvdXJjZUVycm9yIil9LHJlbGVhc2VCaWQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQ9KDAsaSgzMikuaXNvbGF0ZSkodCksbj0oMCxpKDMyKS5pc29sYXRlKShuKSx0aGlzLl9iaWRSZW5kZXJQYXJhbXMpaWYodGhpcy5fYmlkUGVuZGluZyluKG5ldyBFcnJvcihpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi5yZWxlYXNlQmlkOiBwcmV2aW91cyBiaWQgaXMgcGVuZGluZywgd2FpdCBmb3IgdGhlIGNhbGxiYWNrIikpO2Vsc2V7aWYoZS5yZW5kZXIpe3ZhciBvPXRoaXMuX2JpZFJlbmRlclBhcmFtcy5jZmcuYmxvY2tJZCxyPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuX2JpZFJlbmRlclBhcmFtcy5jZmcucmVuZGVyVG8pO2lmKCFyKXt2YXIgYT1pKDE1KS5wYXJzZUJsb2NrSWQobyk7cmV0dXJuIHZvaWQgdGhpcy5fc2VuZE5vRWxlbWVudE1lc3NhZ2UoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZNYW5hZ2VyKyIucmVsZWFzZUJpZCIsYS5wYWdlSWQsbyx0aGlzLl9iaWRSZW5kZXJQYXJhbXMuY2ZnLnJlbmRlclRvKX0oMCxpKDE3KS5vbikociwiZXJyb3IiLHRoaXMuX3NlbmRFeHRlcm5hbFJlc291cmNlRXJyb3IsdGhpcyx7Y2FwdHVyZTohMH0pLHRoaXMuX3dyYXBPblJlbmRlckluU3RvcmFnZSh0aGlzLl9iaWRSZW5kZXJQYXJhbXMuY2ZnLHQpLHRoaXMuX3dyYXBPblJlbmRlck1ldGhvZCh0aGlzLl9iaWRSZW5kZXJQYXJhbXMuY2ZnLHQpLHRoaXMuX3J0Yi5yZW5kZXJCeURhdGEodGhpcy5fYmlkUmVuZGVyUGFyYW1zLHtjb25maXJtQXRPbmNlOiEwLGNvbmZpcm1CeUhhbmRsZXI6Im1hbnVhbCI9PT1lLmNoZWNrVmlzaWJpbGl0eX0se30pfXRoaXMuX3Jlc2V0QmlkKCksdGhpcy5fbG9hZFNlY29uZEJ1bmRsZSgpfWVsc2UgbihuZXcgRXJyb3IoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZNYW5hZ2VyKyIucmVsZWFzZUJpZDogbm8gYmlkIHRvIHJlbGVhc2UsIGNhbGwgYWR2bWFuYWdlci5nZXRCaWQgZmlyc3QiKSl9LF9nZXREaXJlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztsKGZ1bmN0aW9uKGkpe3QuX2RpcmVjdHx8KHQuX2RpcmVjdD1uZXcgaSh0KSksZSh0Ll9kaXJlY3QpfSxmdW5jdGlvbihlKXtyZXR1cm4gaSg5KS5sb2dnZXIuZXJyb3IoZSwiRGlyZWN0IGJ1bmRsZSBsb2FkaW5nIGVycm9yIil9KX0sX3dyYXBPblJlbmRlckluU3RvcmFnZTpmdW5jdGlvbihlLHQpe3RoaXMuX3NldHRpbmdzU3RvcmFnZVtpKDE1KS5nZXRSZW5kZXJJZChlKV0uYXJnc1swXS5vblJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7ZVswXSYmKGVbMF0uY29uZmlybVZpc2liaWxpdHk9ZnVuY3Rpb24oKXt9LGVbMF0ucmVmcmVzaD0hMCksdC5hcHBseShudWxsLGUpfX0sX3dyYXBPblJlbmRlck1ldGhvZDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZS5vblJlbmRlcj1mdW5jdGlvbigpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYob1swXSYmb1swXS5jb25maXJtVmlzaWJpbGl0eSl7dmFyIHI9b1swXS5jb25maXJtVmlzaWJpbGl0eTtvWzBdLmNvbmZpcm1WaXNpYmlsaXR5PWZ1bmN0aW9uKCl7bi5fY2hhbmdlU2F2ZWQoaSgxNSkuZ2V0UmVuZGVySWQoZSksImNhblJlcmVuZGVyIiwhMCkscigpfX10LmFwcGx5KG51bGwsbyl9fSxfcmVzZXRCaWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaWRQZW5kaW5nPSExLHRoaXMuX2JpZFJlbmRlclBhcmFtcz1udWxsfSxfcmVuZGVySW50ZXJuYWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89aSgxNSkucHJlcGFyZUludGVybmFsQ29uZmlnKGUpO3IoZnVuY3Rpb24oZSl7bi5faW50ZXJuYWx8fChuLl9pbnRlcm5hbD1uZXcgZShuLnF1ZXVlKSksbi5faW50ZXJuYWwucmVuZGVyKG8sdCl9LGZ1bmN0aW9uKGUpe3JldHVybiBpKDkpLmxvZ2dlci5lcnJvcihlLCJJbnRlcm5hbCBidW5kbGUgbG9hZGluZyBlcnJvciIpfSl9LF9yZW5kZXJJbnBhZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89aSgxNSkucHJlcGFyZUlucGFnZUNvbmZpZyhlKTsoMCxpKDE2KS5zYXZlQnVuZGxlVHlwZSkoby5idW5kbGUpLGEoZnVuY3Rpb24ocil7bi5faW5wYWdlfHwobi5faW5wYWdlPW5ldyByKSxuLl9pbnBhZ2UucmVuZGVyKG8ucGFyYW1zLG8uaW5wYWdlLGZ1bmN0aW9uKG4pe24gaW5zdGFuY2VvZiBFcnJvcj90KG4pOigwLGkoMzIpLmlzb2xhdGUpKGUub25SZW5kZXIpKG4pfSl9LGZ1bmN0aW9uKGUpe3JldHVybiBpKDkpLmxvZ2dlci5lcnJvcihlLCJJblBhZ2UgYnVuZGxlIGxvYWRpbmcgZXJyb3IiKX0pfSxfcmVuZGVyRnVsbHNjcmVlbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsbz1pKDE1KS5wcmVwYXJlRnVsbHNjcmVlbkNvbmZpZyhlKTtzKGZ1bmN0aW9uKGkpe24uX2Z1bGxzY3JlZW58fChuLl9mdWxsc2NyZWVuPW5ldyBpKSxuLl9mdWxsc2NyZWVuLnJlbmRlcihvLGUsdCl9LGZ1bmN0aW9uKGUpe3JldHVybiBpKDkpLmxvZ2dlci5lcnJvcihlLCJGdWxsc2NyZWVuIGJ1bmRsZSBsb2FkaW5nIGVycm9yIil9KX0sX3JlbmRlclJ0YjpmdW5jdGlvbihlLHQpe3ZhciBuPWkoMTUpLnByZXBhcmVSdGJDb25maWcoZSk7ZS5vbGREaXJlY3RTZXR0aW5ncyYmKG4ub2xkRGlyZWN0U2V0dGluZ3M9ZS5vbGREaXJlY3RTZXR0aW5ncyksdGhpcy5fcnRiLnJlbmRlcihuLHQsdGhpcy5fcmVmcmVzaEZsYWcpfSxnZXRSdGI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcnRifSxfcmVuZGVyRGlyZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxvPWkoMTUpLnByZXBhcmVEaXJlY3RDb25maWcoZSk7dGhpcy5fZ2V0RGlyZWN0KGZ1bmN0aW9uKGUpe2UucmVuZGVyKG8sbnVsbCx0LG4uX3JlZnJlc2hGbGFnKX0pfSxfcmVuZGVyRGlzdHJpYnV0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0aGlzLl9kaXN0cmlidXRpb258fGkoNzg2KShmdW5jdGlvbihvKXtuLl9kaXN0cmlidXRpb249bmV3IG8sbi5fZGlzdHJpYnV0aW9uLnJlbmRlcihpKDE1KS5wcmVwYXJlRGlzdHJpYnV0aW9uQ29uZmlnKGUpLHQpfSxmdW5jdGlvbihlKXtyZXR1cm4gaSg5KS5sb2dnZXIuZXJyb3IoZSwiRGlzdHJpYnV0aW9uIGJ1bmRsZSBsb2FkaW5nIGVycm9yIil9KX0sX2xvZ1Vua25vd246ZnVuY3Rpb24oZSl7aSg5KS5sb2dnZXIud2FybihuZXcgRXJyb3IoIlVua25vd24gYmxvY2sgdHlwZS4gYmxvY2tJZDogIitlKSxpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi5Vbmtub3duQmxvY2tUeXBlIil9LHJlbmRlck92ZXJsYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuX292ZXJsYXk/dGhpcy5fb3ZlcmxheS5yZW5kZXIoZSx0KTppKDc4NykoZnVuY3Rpb24oaSl7dmFyIG89aS5PdmVybGF5TWFuYWdlcjtuLl9vdmVybGF5PW5ldyBvKG4pLG4uX292ZXJsYXkucmVuZGVyKGUsdCl9KX0sc2F2ZTpmdW5jdGlvbihlLHQsaSxuKXt0aGlzLmFkZFRvU2F2ZWQoZSx7YXJnczp0LG1ldGhvZDppLGNhblJlcmVuZGVyOm59KX0sYWRkVG9TYXZlZDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX3NldHRpbmdzU3RvcmFnZVtlXXx8e307dGhpcy5fc2V0dGluZ3NTdG9yYWdlW2VdPW4oe30saSx0KX0sZ2V0U2F2ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oe30sdGhpcy5fc2V0dGluZ3NTdG9yYWdlW2VdKX0sX2NoYW5nZVNhdmVkOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLl9zZXR0aW5nc1N0b3JhZ2VbZV1bdF09aX0sX2lzTW9iaWxlU2RrOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGEmJmUuZGF0YS5jb21tb24mJjE9PT1OdW1iZXIoZS5kYXRhLmNvbW1vbi5pc01vYmlsZVNkayl9LF9wcmVwYXJlQXJnczpmdW5jdGlvbihlLHQpe3ZhciBuPVtdLmNvbmNhdChlKSxvPW5bdF07cmV0dXJuIHRoaXMuX3Nob3VsZFJlbG9hZEFkcygpJiYoMCxpKDI3KS5pc09iamVjdCkobykmJm8uaXNEYXRhUmVmcmVzaGVkJiZkZWxldGUgby5kYXRhLG8ucmVmcmVzaD0hMCxufSxfcmVuZGVyQWdhaW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzOygwLGkoMTYpLmNoZWNrQnVuZGxlVHlwZSkoaSgxNikuYnVuZGxlVHlwZXMuU1NQKXx8KFlhLmVFY2lrUnZPYjlnLl9hc3luY01vZGVPbj0hMCx0aGlzLl9nZXRCbG9ja3NUb1JlcmVuZGVyKGZ1bmN0aW9uKHQpe2UuX2xhc3RUaW1lT2ZSZWZyZXNoPU51bWJlcihuZXcgRGF0ZSksZS5fcmVmcmVzaEZsYWc9ITA7dmFyIG49KDAsaSgxMikuZ2V0WWFDb250ZXh0KSgpO2koMCkuZWFjaCh0LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2F2ZWQoZSk7aWYodC5jYW5SZXJlbmRlcilzd2l0Y2godC5tZXRob2Qpe2Nhc2UgMDpuLkFkdk1hbmFnZXIucmVuZGVyLmFwcGx5KHRoaXMsdGhpcy5fcHJlcGFyZUFyZ3ModC5hcmdzLDApKTticmVhaztjYXNlIGkoNDE0KS5NRVRIT0RfUkVOREVSX09WRVJMQVk6dGhpcy5fb3ZlcmxheS5yZVJlbmRlci5hcHBseSh0aGlzLl9vdmVybGF5LHRoaXMuX3ByZXBhcmVBcmdzKHQuYXJncywwKSk7YnJlYWs7ZGVmYXVsdDpuLkFkdk1hbmFnZXIucmVuZGVyRGlyZWN0LmFwcGx5KHRoaXMsdGhpcy5fcHJlcGFyZUFyZ3ModC5hcmdzLDIpKX19LGUpLGUuX3JlZnJlc2hGbGFnPSExfSkpfSxfaW5pdEFkUmVmcmVzaG1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9RGF0ZS5ub3coKTsoMCxpKDE3KS5vbikoZG9jdW1lbnQsby5jaGFuZ2VFdmVudE5hbWUsZnVuY3Rpb24oKXtvLmlzSGlkZGVuKCk/KHQ9RGF0ZS5ub3coKSxlLl9yZWZyZXNoVGltZSYmY2xlYXJUaW1lb3V0KGUuX3JlZnJlc2hJZCkpOihEYXRlLm5vdygpLXQ+ZS5faGlkZGVuVGltZSYmZS5fcmVuZGVyQWdhaW4oKSxlLl9hdXRvUmVyZW5kZXIoKSl9KSx0aGlzLl9hdXRvUmVyZW5kZXIoKX0sX2F1dG9SZXJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hUaW1lJiYodGhpcy5fcmVmcmVzaElkPWkoMSkucHJvdGVjdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyQWdhaW4oKSx0aGlzLl9hdXRvUmVyZW5kZXIoKX0sdGhpcy5fcmVmcmVzaFRpbWUsdGhpcykpfSxfZ2V0QmxvY2tzVG9SZXJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX2dldERpcmVjdChmdW5jdGlvbihpKXt2YXIgbj1pLmdldEJsb2Nrc1RvUmVyZW5kZXIoKTtlKG4uY29uY2F0KHQuX3J0Yi5nZXRCbG9ja3NUb1JlcmVuZGVyKCkpKX0pfSxnZXRTa2lwVG9rZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3J0Yi5nZXRTa2lwVG9rZW4oZSl9LGdldENhcHR1cmVkQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcnRiLmdldENhcHR1cmVkQ291bnQoKX0sZ2V0U2tpcEJhbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcnRiLmdldFNraXBCYW5uZXIoZSl9LGdldEFkU2Vzc2lvbklkOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaSg5MSkuZ2V0U2Vzc2lvbklkKSgpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0oMCxpKDc4OCkuZ2V0T2JqZWN0VmFsdWVzKSh0aGlzLl9zZXR0aW5nc1N0b3JhZ2UpLG89ZT8oMCxpKDIyKS5maWx0ZXIpKG4sZnVuY3Rpb24oaSl7cmV0dXJuIHQuX2Rlc3Ryb3lTZXR0aW5nc0NvbXBhcmVyKGksZSl9KTpuOygwLGkoNSkuZm9yRWFjaCkobyxmdW5jdGlvbihlKXt0Ll9kZXN0cm95QnlDZmcoZS5hcmdzWzBdKX0pfSxfZGVzdHJveVNldHRpbmdzQ29tcGFyZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmFyZ3NbMF07cmV0dXJuISh0LnJlbmRlclRvJiZpLnJlbmRlclRvIT09dC5yZW5kZXJUb3x8dC5ibG9ja0lkJiZpLmJsb2NrSWQhPT10LmJsb2NrSWQpfSxfZGVzdHJveUJ5Q2ZnOmZ1bmN0aW9uKGUpe3ZhciB0PWkoMTUpLnBhcnNlQmxvY2tJZChlLmJsb2NrSWQpLG49dC5wcm9kdWN0O3N3aXRjaChuKXtjYXNlIkkiOnRoaXMuX2Rlc3Ryb3lCbG9ja0Zyb21NYW5hZ2VyKHRoaXMuX2ludGVybmFsLGUpO2JyZWFrO2Nhc2UiVkkiOmJyZWFrO2Nhc2UiVkYiOnRoaXMuX2Rlc3Ryb3lCbG9ja0Zyb21NYW5hZ2VyKHRoaXMuX2Z1bGxzY3JlZW4sZSk7YnJlYWs7Y2FzZSJSIjp0aGlzLl9kZXN0cm95QmxvY2tGcm9tTWFuYWdlcih0aGlzLl9ydGIsZSk7YnJlYWs7Y2FzZSJEIjppZigoMCxpKDk2KS5pc1J0YkluRGlyZWN0RXhwZXJpbWVudCkoe3BhZ2VJZDp0LnBhZ2VJZCxwcm9kdWN0Om4saGFzU2VhcmNoVGV4dDpCb29sZWFuKGUuc2VhcmNoVGV4dCl9KSl7dGhpcy5fZGVzdHJveUJsb2NrRnJvbU1hbmFnZXIodGhpcy5fcnRiLGUpO2JyZWFrfWNhc2UiUCI6Y2FzZSJTIjp0aGlzLl9kZXN0cm95QmxvY2tGcm9tTWFuYWdlcih0aGlzLl9kaXJlY3QsZSk7YnJlYWs7Y2FzZSJZIjp0aGlzLl9kZXN0cm95QmxvY2tGcm9tTWFuYWdlcih0aGlzLl9kaXN0cmlidXRpb24sZSl9fSxfZGVzdHJveUJsb2NrRnJvbU1hbmFnZXI6ZnVuY3Rpb24oZSx0KXtlJiZlLmRlc3Ryb3kodCl9fSxlLmV4cG9ydHM9Y30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49W10sbz1pKDEyOCkuZ2V0U2NyaXB0Q29uZmlnRmFjdG9yeSh7YXBwbGllZERhdGFMaXN0Om4saXNHb29kQnJvd3NlcjohaSgzNikuaXNPcGVyYU1pbmksZ2V0UnRiQ29uZmlnOmkoMTI4KS5nZXRSdGJDb25maWd9KTt0LnN0YXJ0Q29va2llTWF0Y2hpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aSgxKS5wcm90ZWN0KCJjb29raWUtbWF0Y2hpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWkoMTI4KS5wYXJzZUNvb2tpZU1hdGNoaW5nRGF0YShlKSxyPW8odCk7ciYmKG4ucHVzaCh0KSxpKDEyOCkuaW5qZWN0U2NyaXB0KHIsdCkpfShlKX0pO3NldFRpbWVvdXQodCwwKX0sdC5DT09LSUVfTUFUQ0hJTkdfRk9SPWkoMTI4KS5DT09LSUVfTUFUQ0hJTkdfRk9SfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBvKGUpe3JldHVybiBCb29sZWFuKGUmJiIxIj09PWUpfWZ1bmN0aW9uIHIoZSl7dmFyIHQ9aSg3MikuZ2V0TmF0aXZlSlNPTih3aW5kb3cpO3JldHVybiBlLmluaXRSc3lhVGFnVXNlcj1pKDM2MSkuY2FuTG9hZFJzeWFUYWdVc2VyKHdpbmRvdyksWyI8c2NyIiwiaXB0PiIsInZhciBjb25maWc9Iit0LnN0cmluZ2lmeShlKSwiPC9zY3IiLCJpcHQ+IiwiPHNjciIsImlwdD4iLGkoNzc1KSwiPC9zY3IiLCJpcHQ+Il0uam9pbigiIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ09PS0lFX01BVENISU5HX0ZPUj17UlRCX0RTUDoicnRiLWRzcCIsRElSRUNUOiJkaXItZGlyZWN0IixESVJFQ1RfSU5fUlRCOiJydGItZGlyZWN0In0sdC5wYXJzZUNvb2tpZU1hdGNoaW5nRGF0YT1mdW5jdGlvbihlKXt2YXIgdD1lLmJ1bmRsZSxpPWUuc2VydmljZU5hbWUsbj1lLmNvbW1vbkRhdGEscj12b2lkIDA9PT1uP3t9Om4sYT1lLm1hdGNoVXJscyxzPXZvaWQgMD09PWE/W106YSxsPWUubm9uY2U7cmV0dXJue25vbmNlOnZvaWQgMD09PWw/IiI6bCxidW5kbGU6dCxzZXJ2aWNlTmFtZTppLG1hdGNoVXJsczpzLGlzTW9iaWxlU2RrOm8oci5pc01vYmlsZVNkayksaXNZYW5kZXhQYWdlOm8oci5pc1lhbmRleFBhZ2UpfX0sdC5nZXRSdGJDb25maWc9ZnVuY3Rpb24oZSl7dmFyIG49ZS53aW5kb3csbz1lLmFwcGxpZWREYXRhTGlzdCxyPWUuc2VydmljZU5hbWUsYT1lLmJ1bmRsZSxzPWUubWF0Y2hVcmxzO2lmKCJhZGJsb2NrIiE9PWEmJnIhPT10LkNPT0tJRV9NQVRDSElOR19GT1IuRElSRUNUJiYhaSg3NzQpLmlzQ29va2llSG9zdElnbm9yZWQobikmJiFpKDQ1KS5zb21lKG8sZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VydmljZU5hbWUhPT10LkNPT0tJRV9NQVRDSElOR19GT1IuRElSRUNUfSkpcmV0dXJue21hdGNoVXJsczpzfX0sdC5nZXRPcGVuZWRGb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXJ2aWNlTmFtZTtyZXR1cm4gZS5pc1lhbmRleFBhZ2U/Im9vLSIrdDoibmV0LSIrdH0sdC5nZXRTY3JpcHRDb25maWdGYWN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbz1uKG4oe30sZSksdCkscj1vLmlzR29vZEJyb3dzZXIsYT1vLmdldFJ0YkNvbmZpZyxzPW8uc2VydmljZU5hbWUsbD1vLmlzTW9iaWxlU2RrLGM9by5idW5kbGU7aWYocyYmciYmIWwmJiJtYWlscnUtcGx1Z2luIiE9PWMmJiJzc3AiIT09Yyl7dmFyIHU9e3J0YjphKG8pLGluaXRSc3lhVGFnVXNlcjppKDM2MSkuY2FuTG9hZFJzeWFUYWdVc2VyKHdpbmRvdyl9O2Zvcih2YXIgZCBpbiB1KWlmKHVbZF0pcmV0dXJuIHV9fX0sdC5nZXRTY3JpcHRIdG1sPXIsdC5pbmplY3RTY3JpcHQ9ZnVuY3Rpb24oZSx0KXtpKDM2MCkuY2FsbEluU2FmZWZyYW1lKHtodG1sOnIoZSksb25BY3Rpb246ZnVuY3Rpb24oZSx0KXsiZXJyb3IiPT09ZSYmaSgxOSkuaXNTdHJpbmcodC50eXBlKSYmLTE9PT10LnR5cGUuaW5kZXhPZigiU2FmZWZyYW1lUmVzb3VyY2VFcnJvciIpJiZpKDkpLmxvZ2dlci5lcnJvcih7bmFtZTplLG1lc3NhZ2U6dH0sIm1hdGNoLnRwbC50cyIpfSxub25jZTp0Lm5vbmNlLHdhaXQ6NWUzfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEVsZW1lbnRSZWN0U2l6ZT1mdW5jdGlvbihlKXtyZXR1cm57d2lkdGg6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6ZS5jbGllbnRIZWlnaHR9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG4sbz0xO2Z1bmN0aW9uIHIoZSx0LGkpe3N3aXRjaChpKXtjYXNlIG4uWDpyZXR1cm4gZTtjYXNlIG4uWTpyZXR1cm4gdH1yZXR1cm4gZXx8dH0hZnVuY3Rpb24oZSl7ZVtlWyJYIl09MF09IlgiLGVbZVsiWSJdPTFdPSJZIn0obj10LkFYSVN8fCh0LkFYSVM9e30pKSx0Lmhhc1Njcm9sbEluRWxlbWVudD1mdW5jdGlvbihlLHQpe3JldHVybiByKGUuc2Nyb2xsV2lkdGgtZS5jbGllbnRXaWR0aD5vLGUuc2Nyb2xsSGVpZ2h0LWUuY2xpZW50SGVpZ2h0Pm8sdCl9LHQuaGFzU2Nyb2xsSW5QYXJlbnRFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5wYXJlbnROb2RlO3JldHVybiEhaSYmcihlLmNsaWVudFdpZHRoLWkuY2xpZW50V2lkdGg+byxlLmNsaWVudEhlaWdodC1pLmNsaWVudEhlaWdodD5vLHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5hZGRFdmVudExpc3RlbmVyRnVuY3Rpb249ZnVuY3Rpb24oZSx0LGkpe2UuYXR0YWNoRXZlbnQoIm9uIit0LGkpfSx0LnJlbW92ZUV2ZW50TGlzdGVuZXJGdW5jdGlvbj1mdW5jdGlvbihlLHQsaSl7ZS5kZXRhY2hFdmVudCgib24iK3QsaSl9LGkoMTExKS5nZXROYXRpdmVNZXRob2QoZG9jdW1lbnQsImFkZEV2ZW50TGlzdGVuZXIiKSYmaSgxMTEpLmdldE5hdGl2ZU1ldGhvZChkb2N1bWVudCwicmVtb3ZlRXZlbnRMaXN0ZW5lciIpJiYodC5hZGRFdmVudExpc3RlbmVyRnVuY3Rpb249ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHI9ZSYmaSgxMTEpLmdldE5hdGl2ZU1ldGhvZChlLCJhZGRFdmVudExpc3RlbmVyIik7ciYmci5jYWxsKGUsdCxuLG8pfSx0LnJlbW92ZUV2ZW50TGlzdGVuZXJGdW5jdGlvbj1mdW5jdGlvbihlLHQsbixvKXt2YXIgcj1lJiZpKDExMSkuZ2V0TmF0aXZlTWV0aG9kKGUsInJlbW92ZUV2ZW50TGlzdGVuZXIiKTtyJiZyLmNhbGwoZSx0LG4sbyl9KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0luUmFuZ2U9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBlPj10JiZlPD1pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pbmNsdWRlcz1mdW5jdGlvbihlLHQpe3JldHVybi0xIT09aSgyMykuaW5kZXhPZihlLHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPXt1cmw6IiIsbWV0aG9kOiJnZXQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxyZXRyaWVzOjMsd2l0aENyZWRlbnRpYWxzOiEwfTt0LnJlcXVlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoOTMpLnJlcXVlc3QobihuKG4oe30sbyksZSkse2hlYWRlcnM6bihuKHt9LG8uaGVhZGVycyksZS5oZWFkZXJzKX0pKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRUZW1wbGF0ZT1mdW5jdGlvbigpe3JldHVybltbNCwibWFya2VyIl0sWzEsImlzU2ltaWxhck9mZmVycyJdLFszLCJzaW1pbGFyVGhlbWUiXSxbMSwiaXNUdXJibyJdLFsxLCJhZHZhbmNlZEZvcm1hdCJdLFs2LCJmb3JtYXQiXSxbMSwiaXNJZnJhbWUiXSxbMSwiaXNIb3ZlciJdLFsxLCJpc1JlZnJlc2hlZCJdLFsxLCJpc1NTUCJdLFsyLCJsYXlvdXQiXSxbNywidXNlckdyb3VwIl0sWzEsImlzQXBwIl0sWzEsImhhc01yYWlkIl0sWzEsImlzRnVsbHNjcmVlbiJdLFs0LG51bGxdLFsxLCJob25leXBvdCJdLFsxLG51bGxdLFsxLCJhbXAiXSxbMTAsImNvZGVWZXIiXSxbMSwiYWRibG9jayJdLFszLCJhZGZveGV4cCJdXX0sdC5wcm90b3R5cGUuZGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57bWFya2VyOmkoMzQwKS5nZXRNYXJrZXJJc1ZhbGlkU3RhdChpKDEzOCkuUFJPRFVDVF9NQVJLRVJTLkRJUkVDVCksY29kZVZlcjppKDUzKS5nZXRSZXZpc2lvbk5vKCksYWRibG9jazohMCxhbXA6ITEsaXNJZnJhbWU6aSg4MykuaXNJbklmcmFtZSh3aW5kb3cpLGhhc01yYWlkOmkoMzQxKS5oYXNNcmFpZCgpLGlzVHVyYm86aSgxNDcpLmlzVHVyYm9QYWdlKCksaXNTU1A6aSgxNikuY2hlY2tCdW5kbGVUeXBlKGkoMTYpLmJ1bmRsZVR5cGVzLlNTUCl9fSx0fShpKDE4NikuQWJzdHJhY3RUZXN0dGFnKTt0LkRpcmVjdFRlc3R0YWc9cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49IWkoMTYpLmNoZWNrQnVuZGxlVHlwZShpKDE2KS5idW5kbGVUeXBlcy5TU1ApJiYhaSgxNikuY2hlY2tCdW5kbGVUeXBlKGkoMTYpLmJ1bmRsZVR5cGVzLm1vYmlsZVNkaykmJiEwLG89aSg0MzgpLk1ldHJpa2FNYW5hZ2VyLmdldEluc3RhbmNlKGZ1bmN0aW9uKCl7cmV0dXJuIGkoMTIpLmdldFlhKCl9LG4pO3QucmVxdWVzdENvdW50ZXI9ZnVuY3Rpb24oZSx0KXtvLnJlcXVlc3RDb3VudGVyKGUsdCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvYWRDdXN0b21TY3JpcHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aW4uZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cmV0dXJuIHQuYXN5bmM9ITAsZS5ub25jZSYmKHQubm9uY2U9ZS5ub25jZSksaSg3KS5pc0Z1bmN0aW9uKGUub25Mb2FkKSYmKHQub25sb2FkPWZ1bmN0aW9uKCl7dC5vbmxvYWQ9ZnVuY3Rpb24oKXt9LGkoNykuaXNGdW5jdGlvbihlLm9uTG9hZCkmJmUub25Mb2FkKCl9KSxlLmhhc0NvcnM9ImJvb2xlYW4iIT10eXBlb2YgZS5oYXNDb3JzfHxlLmhhc0NvcnMsZS5oYXNDb3JzJiZ0LnNldEF0dHJpYnV0ZSgiY3Jvc3NvcmlnaW4iLCJhbm9ueW1vdXMiKSx0LnNyYz1lLnNyYyxlLmNvbnRhaW5lcj9lLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0KTppKDgwKS5nZXRIZWFkKGUud2luKS5hcHBlbmRDaGlsZCh0KSx0fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QUk9EVUNUX01BUktFUlM9e0RJUkVDVDoxLFJUQjoyLFBFUkZPUk1BTkNFOjMsRElTVFJJQlVUSU9OOjQsQURGT1g6NSxXSURHRVQ6MTMsT0xEX0JVSUxEOjE0LExPTkdfU0VTU0lPTjoxNX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaGFzT3duUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBDT0RFX0xPR1NfVVJMPSJodHRwczovL2FuLnlhbmRleC5ydS9qc3RyYWNlciIsdC5QQ09ERV9MT0dTX1VSTF9BTElBUz0iaHR0cHM6Ly9qc3RyYWNlci55YW5kZXgucnUvanN0cmFjZXIiLHQuU1RSTV9MT0dTX1VSTD0iaHR0cHM6Ly9zdHJtLnlhbmRleC5ydS9sb2cifSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vYmo9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0SXRlbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vYmpbZV19LGUucHJvdG90eXBlLnNldEl0ZW09ZnVuY3Rpb24oZSx0KXt0aGlzLm9ialtlXT10fSxlfSgpO3QuT2JqZWN0U3RvcmFnZT1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0Lk1hcmt1cFdyaXRlcj12b2lkIDA7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89KGkoMjgyKSxpKDExNikpLHI9aSgxNzgpLGE9aSg3KSxzPWkoNjApLGw9KDAsYS5pc0Z1bmN0aW9uKShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMpLGM9by5OUy54aHRtbCx1PSExLGQ9dm9pZCAwLHA9dm9pZCAwLGY9dC5NYXJrdXBXcml0ZXI9e3dyaXRlOmZ1bmN0aW9uKGUsdCl7dD10fHxkLm5hbWVzcGFjZVVSSXx8Yzt2YXIgaT1sJiZ0IT09Yz9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlModCxlKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBkLmluc2VydEJlZm9yZShpLG51bGwpLGQ9aSxpfSxlbmQ6ZnVuY3Rpb24oKXtkPWQucGFyZW50Tm9kZX0sd3JpdGVUZXh0OmZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPjApe3ZhciB0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpO2QuaW5zZXJ0QmVmb3JlKHQsbnVsbCl9fSx3cml0ZUh0bWw6ZnVuY3Rpb24oZSl7ZC5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsZSl9LGdldEN1cnJlbnRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGdldEN1cnJlbnRDb250ZXh0Q29tcG9uZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LGdldEN1cnJlbnRDb21wb25lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH0scmVuZGVyQ29tcG9uZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gbShlLHQpLGYubW91bnRDb21wb25lbnQoZSksdH0scmVuZGVyQ29tcG9uZW50VG9Ob2RlOmZ1bmN0aW9uKGUsdCl7KDAsci5jbGVhckhUTUwpKGUpO3ZhciBpPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gbSh0LGkpLGUuaW5zZXJ0QmVmb3JlKGksbnVsbCksZi5tb3VudENvbXBvbmVudCh0KSxlfSx1cGRhdGVDb21wb25lbnRJbk5vZGU6ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLnBhcmVudE5vZGU7aWYoIWkpcmV0dXJuIGYucmVuZGVyQ29tcG9uZW50VG9Ob2RlKGUsdCk7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5pbnNlcnRCZWZvcmUobixlLm5leHRTaWJsaW5nKSx0LnVubW91bnQoKTt2YXIgbz1tKHQpO3JldHVybiBpLmluc2VydEJlZm9yZShvLG4pLGkucmVtb3ZlQ2hpbGQobiksZi5tb3VudENvbXBvbmVudCh0KSxvfSxtb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtoKGUsZyxfKX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXt1fHwodT0hMCxoKGUsZyx5KSx1PSExKX0sZmluZEVtYmVkZGVkUmVzb3VyY2VzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9W107ZS5fX3RyZWUmJmgoZS5fX3RyZWUsZnVuY3Rpb24obil7aWYodyhuKSlyZXR1cm4gbi5nZXRDb250ZXh0Q29tcG9uZW50KCk9PT1lJiZ0KG4pJiZpLnB1c2gobiksbi5fX3RyZWV9KTtyZXR1cm4gaX19O2Z1bmN0aW9uIGgoZSx0LGkpe3ZhciBuPVtdO2lmKCgwLHMuaXNBcnJheSkoZSkpZm9yKHZhciBvPTA7bzxlLmxlbmd0aDspbi5wdXNoKFtlW28rK10sITFdKTtlbHNlIG4ucHVzaChbZSwhMV0pO2Zvcig7bi5sZW5ndGg7KXt2YXIgcj1uLmxlbmd0aC0xLGE9bltyXSxsPWFbMF07aWYoYVsxXSlpJiZpKGwpLG4ucG9wKCk7ZWxzZXtuW3JdWzFdPSEwO3ZhciBjPXQobCk7aWYoYylmb3IodmFyIHU9Yy5sZW5ndGgtMTt1Pj0wOyl7dmFyIGQ9Y1t1LS1dO24ucHVzaChbZCwhMV0pfX19fWZ1bmN0aW9uIGcoZSl7aWYodyhlKSlyZXR1cm4gZS5fX3RyZWV9ZnVuY3Rpb24gXyhlKXtlLl9faW5SZW5kZXJpbmcmJmUubW91bnQoKX1mdW5jdGlvbiB5KGUpe3coZSkmJmUuZGVzdHJveSgpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYodT0hMCxudWxsPT09dCYmKHQ9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSxkPXQsaChlLGIsdiksdCE9PWQpdGhyb3cgbmV3IEVycm9yKCJlbGVtZW50IF9fIitkKyJfXyBpcyBub3QgY2xvc2VkIik7cmV0dXJuIHU9ITEsZH1mdW5jdGlvbiBiKGUpe2lmKHcoZSkpe2lmKHA9ZSxlLl9faW5SZW5kZXJpbmc9ZS5zaG91bGRSZW5kZXIoKSxlLl9faW5SZW5kZXJpbmcpe2UuYmVmb3JlUmVuZGVyKGYpO3ZhciB0PWUucmVuZGVyKGYpO2lmKG51bGwhPT10KXsoMCxzLmlzQXJyYXkpKHQpfHwodD1bdF0pLGUuX190cmVlPXQ7Zm9yKHZhciBpPXQubGVuZ3RoLTE7aT49MDspe3ZhciBuPXRbaS0tXTt3KG4pJiYobi5fX3BhcmVudENvbXBvbmVudD1lKX1yZXR1cm4gdH19fWVsc2UgbnVsbCE9PWUmJmYud3JpdGVUZXh0KGUudG9TdHJpbmcoKSl9ZnVuY3Rpb24gdihlKXtpZih3KGUpKXtlLl9faW5SZW5kZXJpbmcmJmUuYWZ0ZXJSZW5kZXIoZik7dmFyIHQ9ZS5nZXRDb250ZXh0Q29tcG9uZW50KCk7cD10LGUuX19yZXNvdXJjZUlkJiZ0JiZ0LmFkZFRvRW1iZWRkZWRSZXNvdXJjZXMoZSksZS5fX2xhc3RFbGVtZW50PWQubGFzdENoaWxkfX1mdW5jdGlvbiB3KGUpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6bihlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNob3VsZFJlbmRlcn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNDc3NGbGV4U3VwcG9ydGVkPWkoODgpLnRlc3RQcm9wZXJ0eSgiZmxleCIpLHQuaXNDc3NUcmFuc2Zvcm1TdXBwb3J0ZWQ9aSg4OCkudGVzdFByb3BlcnR5KCJ0cmFuc2Zvcm0iKSx0LmlzQ3NzVHJhbnNpdGlvblN1cHBvcnRlZD1pKDg4KS50ZXN0UHJvcGVydHkoInRyYW5zaXRpb24iKSx0LmlzQ3NzQW5pbWF0aW9uU3VwcG9ydGVkPWkoODgpLnRlc3RQcm9wZXJ0eSgiYW5pbWF0aW9uIiksdC5pc0Nzc0ZpbHRlckJsdXJTdXBwb3J0ZWQ9aSg4OCkudGVzdFByb3BlcnR5KCJmaWx0ZXI6Ymx1cigycHgpIil9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMjgpO3QuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuLmdldEFsaWFzKGUpKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0V2luZG93U2l6ZT1mdW5jdGlvbigpe3ZhciBlPXdpbmRvdyx0PWUuaW5uZXJXaWR0aCxpPWUuaW5uZXJIZWlnaHQ7aWYoIXQpe3ZhciBuPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Q9bi5jbGllbnRXaWR0aCxpPW4uY2xpZW50SGVpZ2h0fXJldHVybnt3aWR0aDp0LGhlaWdodDppfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPTAsbz0iX18iK051bWJlcihuZXcgRGF0ZSkscj1mdW5jdGlvbihlKXtyZXR1cm4iIitlKyArK259O3QuaWRlbnRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwPT09ZT97fTplLGk9dC5vYmosbj10Lm9ubHlHZXQsYT12b2lkIDAhPT1uJiZuLHM9dC5wcmVmaXgsbD12b2lkIDA9PT1zPyJ1bmlxIjpzO2lmKCFpKXJldHVybiByKGwpO3ZhciBjPSJ1bmlxdWVJRCJpbiBpPyJ1bmlxdWVJRCI6bztyZXR1cm4gYXx8YyBpbiBpP2lbY106aVtjXT1yKGwpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1R1cmJvUGFnZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxCb29sZWFuKGUuWUFfVFVSQk9fUEFHRVMpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ImhpZGRlbiI7aWYodC5jaGFuZ2VFdmVudE5hbWU9InZpc2liaWxpdHljaGFuZ2UiLCEobiBpbiBkb2N1bWVudCkpZm9yKHZhciBvPTAscj1bIndlYmtpdCIsIm1veiIsIm1zIiwibyJdO288ci5sZW5ndGg7bysrKXt2YXIgYT1yW29dLHM9YSsiSGlkZGVuIjtpZihzIGluIGRvY3VtZW50KXtuPXMsdC5jaGFuZ2VFdmVudE5hbWU9YSsidmlzaWJpbGl0eWNoYW5nZSI7YnJlYWt9fXZhciBsPW5ldyhpKDUxMykuWWFCcm93c2VyVmlzaWJpbGl0eUFwaVdyYXBwZXIpO3QuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYW5Vc2VZYUJyb0FwaSgpP2wuaXNQYWdlSGlkZGVuWWFCcm9BcGkoKTpCb29sZWFuKGRvY3VtZW50W25dKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5mcm9tPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGk9MCxuPWU7aTxuLmxlbmd0aDtpKyspe3ZhciBvPSgwLG5baV0pKHQpO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9fSxlfSgpO3QuT25lT2ZTdHJhdGVneT1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89bmV3KGkoMjY1KS5KU1RyYWNlckxvZ2dlclNsaW0pKCJwY29kZV9jb250ZXh0IixTdHJpbmcoaSg1MykuZ2V0Q29kZVZlcnNpb24oKSksaSg5MSkuZ2V0U2Vzc2lvbklkKCkpLHI9aSg0MCkuaXNQZXJjZW50KDEpLGE9aSgyNDEpLmlzVG91Y2hEZXZpY2U/Im1vYmlsZSI6ImRlc2t0b3AiLHM9aSgyOTUpLmdldEJyb3dzZXJOYW1lKCk7dC5zZW5kVG9Tb2xvbW9uPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3RyeXsocnx8dCkmJm8ubG9nUGxhaW4oe2V2ZW50TmFtZTplLmV2ZW50TmFtZXx8InBlcmZvcm1hbmNlIixldmVudFR5cGU6aSg0MSkuU3RhdHNFdmVudFR5cGUudmFsdWVzLHRhZ3M6ZS50YWdzfHx7fSxsYWJlbHM6bih7YnVuZGxlOiJhZGJsb2NrIixkZXZpY2U6YSxicm93c2VyOnN9LGUubGFiZWxzKSxkYXRhOmUuZGF0YX0pfWNhdGNoKGUpe319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgzNikuZ2V0QnJvd3Nlck5hbWUoKSxyPVN0cmluZyhpKDUzKS5nZXRDb2RlVmVyc2lvbigpKSxhPW5ldyhpKDUzMSkuU3RhdHMpKHtzZXJ2aWNlOiJhYl9jb250ZXh0Iix2ZXJzaW9uOnIsc2lkOmkoOTEpLmdldFNlc3Npb25JZCgpLG9uQmVmb3JlU2VuZDppKDI2OCkub25CZWZvcmVTZW5kfSk7dmFyIHM9aSgzMSkub25jZShmdW5jdGlvbihlLHQpe3ZhciBuPTA7cmV0dXJuIGkoMTEpLmNvbmZpZy5sb2cmJihpKDExKS5jb25maWcubG9nLmhhc093blByb3BlcnR5KCJwZXJjZW50IikmJihuPWkoMTEpLmNvbmZpZy5sb2cucGVyY2VudCksaSgxMSkuY29uZmlnLmxvZy5icm93c2VycyYmaSgxMSkuY29uZmlnLmxvZy5icm93c2Vycy5oYXNPd25Qcm9wZXJ0eShlKSYmKG49aSgxMSkuY29uZmlnLmxvZy5icm93c2Vyc1tlXSksaSgxMSkuY29uZmlnLmxvZy5ibG9ja2VycyYmaSgxMSkuY29uZmlnLmxvZy5ibG9ja2Vycy5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49aSgxMSkuY29uZmlnLmxvZy5ibG9ja2Vyc1t0XSkpLGkoNDApLmlzUGVyY2VudChuKX0pLGw9aSgzMSkub25jZShmdW5jdGlvbihlLHQpe2EuZXZlbnQoe25hbWU6ImRldGVjdF8iK3QsbGFiZWxzOnticm93c2VyOmV9fSl9KTt0WyJkZWZhdWx0Il09ZnVuY3Rpb24oZSl7dmFyIHQsYz1uZXcoaSgyNCkuVXJsKSh7aG9zdDoiaHR0cDovL2NyeXByb3gueWFuZGV4Lm5ldC9iYW1ib296bGVkIn0pLmdldFVybCgpO3Q9ZnVuY3Rpb24odCl7dmFyIHI9bihuKHt9LHQpLGUpO2koMTM0KS5yZXF1ZXN0KHt1cmw6YyxtZXRob2Q6InBvc3QiLHJldHJpZXM6MCxoZWFkZXJzOnsieC1hYWItaHR0cC1jaGVjayI6Yy5sZW5ndGh9LGRhdGE6SlNPTi5zdHJpbmdpZnkociksd2l0aENyZWRlbnRpYWxzOiEwfSk7dmFyIHU9ci5hYjtzKG8sdSkmJihsKG8sdSksYS5ldmVudCh7bmFtZTplLmRhdGEuYWN0aW9uLGxhYmVsczp7YnJvd3NlcjpvLGJsb2NrZXI6dSxibG9ja0lkOmUuZGF0YS5ibG9ja0lkfX0pKX0saSg1NTEpLmRldGVjdChmdW5jdGlvbihlKXt0KHtkYXRhOiJjb250ZXh0Iixob3N0OmxvY2F0aW9uLmhvc3QsYWI6ZS5ibG9ja2VyLHY6cn0pfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0ve1xzKmRpc3BsYXlccyo6XHMqbm9uZVxzKiFpbXBvcnRhbnQ7KFxzKmNvbG9yOlxzKiM/W1x3XChcKSxcc10rIWltcG9ydGFudDtccypiYWNrZ3JvdW5kLWNvbG9yOlxzKiM/W1x3XChcKSxcc10rIWltcG9ydGFudDspPyhccypiYWNrZ3JvdW5kOlxzKiM/W1x3XChcKSxcc10rOyk/XHMqfS9naTtmdW5jdGlvbiBvKGUpe3ZhciB0PVtdO3RyeXt0PWUuc2hlZXQuY3NzUnVsZXN9Y2F0Y2goZSl7fXJldHVybiB0fWZ1bmN0aW9uIHIoZSl7cmV0dXJuLTE9PT1lLnJlcGxhY2UobiwiIikuaW5kZXhPZigieyIpfWZ1bmN0aW9uIGEoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuITE7dmFyIGk9ZVswXS5zZWxlY3RvclRleHQ7cmV0dXJuISFpJiZpLnNwbGl0KCIsIikubGVuZ3RoPT09dH10LmNoZWNrSWZTdHlsZUJsb2NrZXI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG49ZVtpXS5pbm5lckhUTUw7aWYocihuKSYmIiIhPT1uKXtpZigwPT09dClyZXR1cm4hMDtpZihhKG8oZVtpXSksdCkpcmV0dXJuITB9fXJldHVybiExfSx0Lm9ubHlEaXNwbGF5Tm9uZUluU3R5bGVzPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMzEpLG89aSg2Mykscj1pKDEwNik7dC5ub3JtYWxpemVWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUpPjA/TnVtYmVyKGUpOjB9O3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmdldEV4cGFuZGVyPW4ub25jZShyLmNyZWF0ZUV4cGFuZGVyKX1yZXR1cm4gZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0RXhwYW5kZXIoKSl9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe28ucmVtb3ZlTm9kZUZyb21QYXJlbnQodGhpcy5nZXRFeHBhbmRlcigpKX0sZX0oKTt0LlNpemVNZXRlckJhc2U9YX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zY2FsZT1mdW5jdGlvbihlLHQsaSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITApLG4/dD1lL2k6ZT10Kmkse3dpZHRoOmUsaGVpZ2h0OnR9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlWyJSZWFkIl09MV09IlJlYWQiLGVbZVsiQ2FsYyJdPTJdPSJDYWxjIixlW2VbIkNoYW5nZSJdPTNdPSJDaGFuZ2UiLGVbZVsiVHVuZSJdPTRdPSJUdW5lIn0odC5SZWFkeVN0YWdlfHwodC5SZWFkeVN0YWdlPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuLG89d2luZG93O3QubG9hZEZ1bGxzY3JlZW5Db250cm9sbGVyPWZ1bmN0aW9uKGUpe3JldHVybiBufHwobj1uZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpKDcxNCkoZnVuY3Rpb24oKXtyZXR1cm4gZShvLllhLmZ1bGxzY3JlZW4pfSl9KSksZSYmbi50aGVuKGZ1bmN0aW9uKHQpe2UodCl9KSxufX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49WyJjbGljayIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiXTt0LmFkZEZ1bGxzY3JlZW5MaXN0ZW5lcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbz1EYXRlLm5vdygpLHI9W107cmV0dXJuIGZ1bmN0aW9uKGUsdCxvKXtmb3IodmFyIHI9MCxhPW47cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl0sbD1pKDE3KS5vbihlLHMsZnVuY3Rpb24oZSl7dmFyIGk9RGF0ZS5ub3coKS10O2k8MWUzJiYoZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfSx2b2lkIDAse2NhcHR1cmU6ITB9KTtvLnB1c2gobCl9fShlLG8sciksZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHI9aSgxNykub24oZSwiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciBvPURhdGUubm93KCktdCxyPWkoNzQpLmNyZWF0ZUNsaWNrSW5mbyhlLG4sbyk7aSg3NCkuc2VuZENsaWNrSW5mb0xvZyhyKX0sdm9pZCAwLHtjYXB0dXJlOiEwfSk7by5wdXNoKHIpfShlLG8sdCxyKSxmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9cjtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpKDE3KS51bihuKX19fSx0LnNlbmRUb0Z1bGxzY3JlZW5Mb2c9ZnVuY3Rpb24oZSl7aSg5KS5sb2dnZXIubG9nKGUsIkZ1bGxzY3JlZW5TbG90IiwxKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNOYW5wdUludGVyc3RpdGlhbD1mdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlLm5hbnB1U2V0dGluZ3MmJiJpbnRlcnN0aXRpYWwiPT09ZS5uYW5wdVNldHRpbmdzLmFkVHlwZSl9LHQuaW5pdE1yYWlkQ2xvc2VCdXR0b249aSgzMSkub25jZShmdW5jdGlvbihlKXt2YXIgdD1pKDIyNCkuZ2V0TXJhaWQoKSxuPWkoMTI1KS5nZXRGdWxsc2NyZWVuU2V0dGluZ3MoZSkuY2xvc2VCdXR0b25WaXNpYmlsaXR5VGltZW91dDt0JiZuJiZuPjAmJmkoMjI0KS5vbigicmVhZHkiLGZ1bmN0aW9uKCl7dC51c2VDdXN0b21DbG9zZSghMCksaSgxMTkpLnZpc2liaWxpdHlPYnNlcnZlcihpKDE0OSkuT25lT2ZTdHJhdGVneS5mcm9tKGkoMzE5KS5NcmFpZFN0cmF0ZWd5LmZhY3RvcnksaSg3MTcpLkRlZmF1bHRTdHJhdGVneS5mYWN0b3J5KSkoZG9jdW1lbnQuYm9keSxmdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC51c2VDdXN0b21DbG9zZSghMSl9LG4pfSl9KX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0ibWVhc3VyZV9ibG9jayI7dC5XUk9OR19WRVJJRklFUl9OQU1FPSJXUk9OR19WRVJJRklFUl9OQU1FIix0LkVNUFRZX0FNQ19QQVJBTUVURVI9IkVNUFRZX0FNQ19QQVJBTUVURVIiLHQubG9nRXJyb3I9ZnVuY3Rpb24oZSx0KXtpKDkpLmxvZ2dlci5lcnJvcih7bmFtZTplLG1lc3NhZ2U6U3RyaW5nKHQpfSxuKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNTa2lwVG9rZW5UZXN0RW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiAxMDQ5OT09PWkoNTMpLmdldENvZGVWZXJzaW9uKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2VbZVsiVFJBTlNJVElPTiJdPTFdPSJUUkFOU0lUSU9OIixlW2VbIlJFVFVSTiJdPTJdPSJSRVRVUk4ifSh0LkNsaWNrUGl4ZWx8fCh0LkNsaWNrUGl4ZWw9e30pKTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKCl7cmV0dXJuW1s0LCJiYW5uZXJJbmRleCJdLFs3LG51bGxdLFsyLCJjbGlja1BpeGVsIl0sWzEsImlzR2VvIl0sWzEsImlzR2VvUmVndWxhciJdLFsxLCJoYXNJbWFnZSJdLFsxLCJoYXNDYWxsb3V0cyJdLFsxLCJoYXNQaG9uZSJdLFsxLCJpc1JtcCJdLFsyLCJzZW5kQmVhY29uRXhwIl0sWzEsInNtYXJ0Q3JvcFNsaWNlIl0sWzEsInNtYXJ0Q3JvcENvaW4iXSxbMSwiaXNTaW1pbGFyRXhwZXJpbWVudFRhcmdldCJdLFsxLCJpc1NpbWlsYXJFeHBlcmltZW50U2xpY2UiXSxbMiwiZ2VvU2tpbkV4cFZlciJdLFsyLG51bGxdLFsyLCJjbGlja0RlbGF5RXhwIl0sWzEsImhhc1Rnb1ByaWNlIl0sWzIsInByaWNlSW5UZXh0RXhwIl0sWzIsInJlbW92ZUJpbGxib2FyZEN1c3RvbUZvbnRFeHAiXSxbMiwibW90aW9uQmlnUGljdHVyZUV4cCJdLFsxNCxudWxsXSxbMSwibGFzdEJpdCJdXX0sdC5wcm90b3R5cGUuZGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sdH0oaSgxODYpLkFic3RyYWN0VGVzdHRhZyk7dC5CYW5uZXJUZXN0dGFnPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1pKDMpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciBhPWkoMTApLHM9aSgwKSxsPWkoNjEyKSxjPXJbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQoYSx7bmFtZToieWFwLWZhdmljb24iLHNob3VsZFJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLnNyY30sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMobCksdGhpcy5jaGVja0Jyb2tlbkZhdmljb24oKX0sY2hlY2tCcm9rZW5GYXZpY29uOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IEltYWdlO3MuZG9tRXZlbnQub24oZSwiZXJyb3IiLGZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95KCl9LHRoaXMpLHMuZG9tRXZlbnQub24oZSwibG9hZCIsZnVuY3Rpb24oKXsxNiE9PWUud2lkdGgmJjMyIT09ZS53aWR0aCYmdGhpcy5kZXN0cm95KCl9LHRoaXMpLGUuc3JjPXRoaXMucHJvcHMuc3JjfSxfcmVuZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoImltZyIse2NsYXNzOmUodFsiY2xhc3MiXSxlKCksdGhpcy5tb2QpLHNyYzp0LnNyYyxhbHQ6IiJ9KX19KTtlLmV4cG9ydHM9Y30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgaT1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksbikmJihlW25dPWlbbl0pfXJldHVybiBlfSxvPWEoaSgzKSkscj1hKGkoMzgpKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgcz1bL1wvKChbYS16MC05LV0rXC4pPykrbWFpbFwucnVcLy9pLC9cLygoW2EtejAtOS1dK1wuKT8pK2Rldm1haWxcLnJ1XC8vaV07ZS5leHBvcnRzPWkoMCkuYXVnbWVudChPYmplY3Qse0xheW91dHM6WyJ3aWRlIiwibWVkaXVtIiwibmFycm93IiwiY29tcGF0aWJsZSJdLF9pbWFnZVNpemVzOlt7d2lkdGg6OTAsaGVpZ2h0OjEyMH0se3dpZHRoOjgwLGhlaWdodDoxMDd9LHt3aWR0aDoxLzAsaGVpZ2h0OjExMH0se3dpZHRoOjkwLGhlaWdodDoxMjB9XSxpY29uU2l6ZTp7d2lkdGg6NTAsaGVpZ2h0OjUwfSx0ZW1wbGF0ZTppKDQ3MikubGF5b3V0LGl0ZW1TZWxlY3RvcjoiLnlhcC1sYXlvdXRfX2l0ZW0iLF92aXNpYmlsaXR5Q29uZmlybWVkOiExLGNsaWNrTGlzdGVuZXJzRGVzY3JpcHRvcnM6W10sY29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4sbyxyLGEscyl7dGhpcy5ibG9ja0lkPW8sdGhpcy5yZW5kZXJUbz1uLHRoaXMuX21haW5Db250SWQ9InlhcC0iK3RoaXMuYmxvY2tJZCsoYT8iLSIrYToiIiksdGhpcy5fYWJ1c2VNZXNzYWdlcz1bXSx0aGlzLmRhdGFTb3VyY2U9ZSx0aGlzLnNldHRpbmdzPXQsdGhpcy5hZHZzPVtdLHRoaXMuX2lubmVyQ29tcG9uZW50cz1bXSx0aGlzLl9ub25jZT1yLHMmJih0aGlzLl9jb25maXJtQXRPbmNlPXMuY29uZmlybUF0T25jZSx0aGlzLl9jb25maXJtQnlIYW5kbGVyPXMuY29uZmlybUJ5SGFuZGxlcix0aGlzLnNldHRpbmdzLmhvcml6b250YWxBbGlnbj10aGlzLnNldHRpbmdzLmhvcml6b250YWxBbGlnbnx8cy5ob3Jpem9udGFsQWxpZ24pLCgwLGkoMikuc2V0QmxvY2tEYXRhKSh0aGlzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSx7b2xkQmxvY2s6ITB9KX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuX2NsZWFyVmlldygpLHRoaXMuYWR2cy5sZW5ndGgmJigwLGkoNSkuZm9yRWFjaCkodGhpcy5hZHZzLGZ1bmN0aW9uKGUpe3RoaXMuZGF0YVNvdXJjZS5yZWxlYXNlQWQoZS5hZElkKX0sdGhpcyksKDAsaSg1KS5mb3JFYWNoKSh0aGlzLmNsaWNrTGlzdGVuZXJzRGVzY3JpcHRvcnMsZnVuY3Rpb24oZSl7cmV0dXJuKDAsaSgxNykudW4pKGUpfSl9LF9jbGVhclZpZXc6ZnVuY3Rpb24oKXt0aGlzLl9jbGVhcklubmVyQ29tcG9uZW50cygpLHRoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNsZWFySFRNTCgpLHRoaXMuX3N0eWxlRWxlbWVudCYmKGkoMCkuZG9tLnJlbW92ZSh0aGlzLl9zdHlsZUVsZW1lbnQpLHRoaXMuX3N0eWxlRWxlbWVudD1udWxsKX0sZ2V0VXNlZEFkdnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZHZzfSxfY2xlYXJJbm5lckNvbXBvbmVudHM6ZnVuY3Rpb24oKXsoMCxpKDUpLmZvckVhY2gpKHRoaXMuX2lubmVyQ29tcG9uZW50cyxmdW5jdGlvbihlKXtlLmRlc3RydWN0b3I/ZS5kZXN0cnVjdG9yKCk6ZS5kZXN0cm95JiZlLmRlc3Ryb3koKX0pLHRoaXMuX2lubmVyQ29tcG9uZW50cz1bXX0sY2xlYXJIVE1MOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRNYWluQ29udCgpO2UmJmkoMCkuZG9tLnJlbW92ZShlKSx0aGlzLmNsZWFyU3R5bGVzKCl9LGNsZWFyU3R5bGVzOmZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVFbGVtZW50JiYoaSgwKS5kb20ucmVtb3ZlKHRoaXMuX3N0eWxlRWxlbWVudCksdGhpcy5fc3R5bGVFbGVtZW50PW51bGwpfSxjbGVhckV2ZW50czpmdW5jdGlvbigpe3RoaXMuX3Zpc2liaWxpdHlDb25maXJtZXImJnRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXIuc3RvcCgpLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0YiYmdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLnN0b3AoKX0sZ2V0TWFpbkNvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFpbkNvbnR9LF9ncmFiQ2xhc3NlczpmdW5jdGlvbigpe3ZhciBlPSh0aGlzLl9ncmFiUHJvdG90eXBlQ2hhaW4oImNsYXNzZXMiKS5qb2luKCIgIikrIiAiKyh0aGlzLmNsYXNzZXN8fCIiKSkuc3BsaXQoIiAiKSx0PXt9O3JldHVybigwLGkoNSkuZm9yRWFjaCkoZSxmdW5jdGlvbihlKXt0W2VdPTF9KSxpKDApLmtleXModCkucmV2ZXJzZSgpLmpvaW4oIiAiKX0sX2dldEh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVwYXJlSW1hZ2VzKHRoaXMudGVtcGxEYXRhKSx0aGlzLnNvcnRCeUltYWdlcyh0aGlzLnRlbXBsRGF0YSksdGhpcy5wcmVwYXJlRGF0YSh0aGlzLnRlbXBsRGF0YSksdGhpcy5jb21waWxlZEh0bWw9dGhpcy50ZW1wbGF0ZSh0aGlzLnRlbXBsRGF0YSksdGhpcy5jb21waWxlZEh0bWx9LHNvcnRCeUltYWdlczpmdW5jdGlvbihlKXt0aGlzLmRhdGFTb3VyY2UuZG9Tb3J0QnlJbWFnZXMoKSYmZS5hZHMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiFlLmltYWdlLSF0LmltYWdlfSl9LHByZXBhcmVEYXRhOmZ1bmN0aW9uKGUpeygwLGkoNSkuZm9yRWFjaCkoZS5hZHMsZnVuY3Rpb24oZSl7ZS50aXRsZT0oMCxpKDU5KS5wcmV0dGlmeSkoZS50aXRsZSksZS5ib2R5PSgwLGkoNTkpLnByZXR0aWZ5KShlLmJvZHkse2dsdWVQcmVwb3NpdGlvbnM6IWUuaW1hZ2VzfSksZS5zaXRlbGlua3MmJigwLGkoNSkuZm9yRWFjaCkoZS5zaXRlbGlua3MsZnVuY3Rpb24oZSl7ZS50aXRsZT0oMCxpKDU5KS5wcmV0dGlmeSkoZS50aXRsZSl9KX0sdGhpcyl9LGdldEltYWdlU2l6ZTpmdW5jdGlvbigpe3ZhciBlPWkoMCkuZXh0ZW5kKHt9LHRoaXMuX2ltYWdlU2l6ZXNbdGhpcy5sYXlvdXRdKTtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1pKDYpLkxheW91dHMuTkFSUk9XP2UuaGVpZ2h0PU1hdGgubWF4KGUuaGVpZ2h0KnRoaXMuX2dldEZvbnRSYXRpbygpLGUuaGVpZ2h0KTp0aGlzLl9nZXRTaG91bGRFbmxhcmdlSW1hZ2UoKSYmdGhpcy5fdHJ5VG9FbmxhcmdlKGUpLGV9LF9nZXRTaG91bGRFbmxhcmdlSW1hZ2U6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5zZXR0aW5ncy5mb3JtYXQubmFtZT09PWkoNikuQmxvY2tUeXBlcy5WRVJUSUNBTHx8ImZsYXQiPT09dGhpcy5zZXR0aW5ncy5mb3JtYXQubmFtZSkmJnRoaXMubGF5b3V0PT09aSg2KS5MYXlvdXRzLldJREV9LF90cnlUb0VubGFyZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5taW4oMTEyLDE1MCxlLndpZHRoKnRoaXMuX2dldEZvbnRSYXRpbygpLE1hdGguZmxvb3IodGhpcy5nZXRXaWR0aCgpLzMpKTt0PmUud2lkdGgmJihlLmhlaWdodCo9dC9lLndpZHRoLGUud2lkdGg9dCl9LHByZXBhcmVBZHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1pKDApLm1hcChlLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UucHJlcGFyZUFkKGUsdCl9LHRoaXMpLGkoMCkuZmlsdGVyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIEJvb2xlYW4oZSl9KX0sX2dldEZvbnRSYXRpbzpmdW5jdGlvbigpe3ZhciBlPWkoMCkuZG9tLmdldENvbXB1dGVkRm9udFNpemUoaSgwKS5kb20ucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5yZW5kZXJUbykpO3JldHVybiBlP2UqdGhpcy5fZ2V0Rm9udFNpemUoKS8xMzoxfSxwcmVwYXJlSW1hZ2VzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0SW1hZ2VTaXplKCk7KDAsaSg1KS5mb3JFYWNoKShlLmFkcyxmdW5jdGlvbihlKXtlLmltYWdlJiYoZS5waWN0dXJlPWUuaW1hZ2UuZ2V0Rml0dGluZyh0LndpZHRoLHQuaGVpZ2h0LHQud2lkZVdpZHRoTG9zcyksZS5waWN0dXJlLnBsYWNlaG9sZGVyPXt3aWR0aDp0LndpZHRoPT09MS8wPyIxMDAlIjpNYXRoLm1pbih0LndpZHRoLGUucGljdHVyZS53aWR0aCkrInB4IixoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsZS5waWN0dXJlLmhlaWdodCkrInB4In0pLHRoaXMucHJlcGFyZUFwcEljb24oZSl9LHRoaXMpfSxwcmVwYXJlQXBwSWNvbjpmdW5jdGlvbihlKXtlLmljb24mJihlLmljb25QaWN0dXJlPWUuaWNvbi5nZXRGaXR0aW5nKHRoaXMuaWNvblNpemUud2lkdGgsdGhpcy5pY29uU2l6ZS5oZWlnaHQpKX0sX2dldENzczpmdW5jdGlvbigpe3ZhciBlPVsicmVzZXQiLCJkaXJlY3QiLCJhZHR1bmUiLCJ3YXJuaW5nIiwidG9vbHRpcCJdO3RoaXMuX2hhc0ludGVydmlldyYmKGU9ZS5jb25jYXQoWyJzd2l0Y2giLCJpbnRlcnZpZXciXSkpLHRoaXMuc2V0dGluZ3MuZm9ybWF0LnVzZUVsYXN0aWNQaWN0dXJlJiYoZT1lLmNvbmNhdChbInBpY3R1cmUiLCJwaWN0dXJlU3R1YiIsImJnIl0pKTt2YXIgdD10aGlzLmRhdGFTb3VyY2UuZ2V0SG9uZXlwb3QoKSE9PWkoMjA1KS5Ib25leXBvdC5OT05FP3t2aXNpYmlsaXR5OiJoaWRkZW4iLG9wYWNpdHk6MH06e3Zpc2liaWxpdHk6InZpc2libGUiLG9wYWNpdHk6MX0sbz10aGlzLmRhdGFTb3VyY2UuZ2V0SG9uZXlwb3QoKT09PWkoMjA1KS5Ib25leXBvdC5PTkVfUElYRUw/e2hvbmV5SGVpZ2h0OiIxcHgiLGhvbmV5V2lkdGg6IjFweCJ9Ontob25leUhlaWdodDoiYXV0byIsaG9uZXlXaWR0aDoiYXV0byJ9LHI9IiI7cmV0dXJuKDAsaSg1KS5mb3JFYWNoKShlLGZ1bmN0aW9uKGUpe3IrPWkoNDc5KVtlXShuKHtibG9jazp0aGlzLGlkOnRoaXMuX21haW5Db250SWQsaXNZYW5kZXhQYWdlOnRoaXMuZGF0YVNvdXJjZS5pc1lhbmRleFBhZ2UoKSxzZXR0aW5nczp0aGlzLnNldHRpbmdzLHV0aWw6aSgwKSxDb25zdDppKDYpfSx0LG8se2JsdXJTaXplOjEwfSkpfSx0aGlzKSxyfSxhcHBlbmRCbG9jazpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldENzcygpLHQ9dGhpcy5fZ2V0SHRtbCgpOygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5Pbk1vdW50KSx0aGlzLmluc2VydENTUyhlKSx0aGlzLmluc2VydEh0bWwodCksdGhpcy5faGFzSW50ZXJ2aWV3JiZ0aGlzLmluc2VydEludGVydmlldygpfSxoYXNJbnRlcnZpZXc6ZnVuY3Rpb24oKXt2YXIgZT0hMSx0PXRoaXMuYWR2cztyZXR1cm4oMCxpKDUpLmZvckVhY2gpKHQsZnVuY3Rpb24odCl7dmFyIGk9dC5pbnRlcnZpZXdEYXRhO3JldHVybiBlPWV8fGkuaXNJbnRlcnZpZXd9KSxlfSxpbnNlcnRJbnRlcnZpZXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5hZHZzOygwLGkoNSkuZm9yRWFjaCkodCxmdW5jdGlvbih0LG4pe3ZhciByPXQuaW50ZXJ2aWV3RGF0YSxhPXQuYWRJZDtpZihyLmlzSW50ZXJ2aWV3KXt2YXIgcz1uKzEsbD1udWxsOygwLGkoNSkuZm9yRWFjaCkoWyIueWFwLWxheW91dF9faXRlbV9udGhfIitzLCIueWFwLWxheW91dCJdLGZ1bmN0aW9uKHQpe3JldHVybiBsPWx8fGkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IodCxlLl9tYWluQ29udClbMF19KSxsJiZvWyJkZWZhdWx0Il0ucmVuZGVyVG9Ob2RlKGwsbmV3KGkoMzgxKSkoe2RhdGE6cixhZElkOmF9KSl9fSl9LGluc2VydENTUzpmdW5jdGlvbihlKXt2YXIgdD1pKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIjIit0aGlzLnJlbmRlclRvKSxuPSgwLGkoNTEpLmdldENvbnRhaW5lcikodCx0aGlzLl9ub25jZSk7dGhpcy5fc3R5bGVFbGVtZW50PWkoMCkuZG9tLmFwcGVuZFN0eWxlKGUsdGhpcy5fbm9uY2Usbil9LGlzSW5WaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybiEoIWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMucmVuZGVyVG8pfHwhdGhpcy5nZXRNYWluQ29udCgpKSYmaSgwKS5kb20uaXNJblZpZXdwb3J0KHRoaXMuZ2V0TWFpbkNvbnQoKSxpKDYpLlJFRlJFU0hfVklFV1BPUlRfVklTSUJMRV9QQVJUKX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVySW5SdGImJnRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0Yi5nZXRJc1Zpc2libGUoKX0saW5zZXJ0SHRtbDpmdW5jdGlvbihlKXt2YXIgdD1pKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIjIit0aGlzLnJlbmRlclRvKTt0JiYodD0oMCxpKDUxKS5nZXRDb250YWluZXIpKHQsdGhpcy5fbm9uY2UpLCgwLGkoMTgyKS5wcmV2ZW50TWlzc0NsaWNrcykodCksclsiZGVmYXVsdCJdLmlubmVySFRNTCh0LGUpLHRoaXMuX21haW5Db250PWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi4iK3RoaXMuX21haW5Db250SWQsdClbMF0pfSxfZ3JhYlByb3RvdHlwZUNoYWluOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPXRoaXMuY29uc3RydWN0b3IucHJvdG90eXBlLmhhc093blByb3BlcnR5KGUpP1t0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZVtlXV06W10sbj10aGlzLmNvbnN0cnVjdG9yLl9fc3VwZXI7bjspbi5oYXNPd25Qcm9wZXJ0eShlKSYmKGkucHVzaChuW2VdKSx0JiZkZWxldGUgbltlXSksbj1uLmNvbnN0cnVjdG9yLl9fc3VwZXI7cmV0dXJuIHQmJmRlbGV0ZSB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZVtlXSxpfSxjcmVhdGVIb3Zlckxpc3RlbmVyOmZ1bmN0aW9uKCl7bmV3KGkoMCkuSG92ZXJDaGVja2VyKSgzMDApLm9uQ29uZmlybWVkKCgwLGkoMSkucHJvdGVjdCkoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZCbG9jaysiOiBvbkhvdmVyIix0aGlzLl9vbkhvdmVyLHRoaXMpKS5saXN0ZW4oclsiZGVmYXVsdCJdLnF1ZXJ5U2VsZWN0b3IodGhpcy5pdGVtU2VsZWN0b3IsdGhpcy5nZXRNYWluQ29udCgpKSl9LGNyZWF0ZUNsaWNrTGlzdGVuZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9RGF0ZS5ub3coKSxuPSgwLGkoMSkucHJvdGVjdCkoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZCbG9jaysiOiBvbkNsaWNrIix0aGlzLl9vbkNsaWNrKSxvPXJbImRlZmF1bHQiXS5xdWVyeVNlbGVjdG9yKHRoaXMuaXRlbVNlbGVjdG9yLHRoaXMuZ2V0TWFpbkNvbnQoKSk7KDAsaSg1KS5mb3JFYWNoKShvLGZ1bmN0aW9uKG8pe3ZhciByPSgwLGkoMTcpLm9uKShvLCJjbGljayIsZnVuY3Rpb24oaSl7dmFyIG89RGF0ZS5ub3coKS10O24oaSwiZGlyZWN0IixvLGUuZ2V0TWFpbkNvbnQoKSl9LGUse2NhcHR1cmU6ITB9KTtlLmNsaWNrTGlzdGVuZXJzRGVzY3JpcHRvcnMucHVzaChyKX0pfSxjcmVhdGVWaXNpYmlsaXR5Q29uZmlybWVyOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLGkoNTEpLmdldFZpc2liaWxpdHlDb250YWluZXIpKHRoaXMuZ2V0TWFpbkNvbnQoKSksbj10aGlzLmdldERhdGFTb3VyY2UoKSxvPSgwLGkoMSkucHJvdGVjdCkoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZCbG9jaysiOiBvbkNvbmZpcm1lZCIsdGhpcy5fb25Db25maXJtVmlzaWJpbGl0eSx0aGlzKSxyPSgwLGkoOTYpLmlzUnRiSW5EaXJlY3RFeHBlcmltZW50KSh7cGFnZUlkOm4uZ2V0UGFnZUlkKCkscHJvZHVjdDpuLmdldFByb2R1Y3QoKSxoYXNTZWFyY2hUZXh0Om4uaGFzU2VhcmNoVGV4dCgpfSk7IW4uaXNPbGREaXJlY3QoKSYmciYmKHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0Yj0oMCxpKDE4MykuY3JlYXRlQmxvY2tWaXNpYmlsaXR5Q29uZmlybWVyKSh7ZWxlbWVudDp0LGF1dG9zdGFydDohZSxkYXRhU291cmNlOm4sb25WaXNpYmxlOigwLGkoMSkucHJvdGVjdCkoaSgxKS5Qcm90ZWN0ZWROYW1lcy5BZHZCbG9jaysiOiBvbkRpcmVjdEluUnRiQ29uZmlybWVkIix0aGlzLmNvbmZpcm1WaXNpYmlsaXR5SW5SdGIsdGhpcyl9KSx0aGlzLl9jb25maXJtQXRPbmNlJiYhZSYmKHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITAsdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLmNvbmZpcm0oKSkpLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXI9bmV3KGkoODcpLlZpc2liaWxpdHlDb25maXJtZXIpKHtlbGVtZW50OnQsYXV0b3N0YXJ0OiFlLHBvcnRpb246MCxjb25maXJtYXRpb25zOlt7ZGVsYXk6bi5nZXRWaXNpYmlsaXR5VGltZSgpLG9uQ29uZmlybTpvfV19KSx0aGlzLl9jb25maXJtQXRPbmNlJiYhZSYmKHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITAsdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lci5jb25maXJtKCkpfSxjb25maXJtVmlzaWJpbGl0eTpmdW5jdGlvbigpe3RoaXMuX3Zpc2liaWxpdHlDb25maXJtZWR8fCh0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkPSEwLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0YiYmdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLmNvbmZpcm0oKSx0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVyJiZ0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVyLmNvbmZpcm0oKSl9LGNvbmZpcm1WaXNpYmlsaXR5SW5SdGI6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaSg1MSkuZ2V0VmlzaWJpbGl0eUNvbnRhaW5lcikodGhpcy5nZXRNYWluQ29udCgpKTt0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkPSEwLHRoaXMuZGF0YVNvdXJjZS5jb25maXJtVmlzaWJpbGl0eUluUnRiKHtyZW5kZXJTaXplOnRoaXMuZ2V0QmxvY2tTaXplKCksZXh0UGFyYW1zOntjb25maXJtVGltZTplLGNvbmZpcm1SYXRpbzooMCxpKDEwNSkuZ2V0VmlzaWJpbGl0eVJhdGlvKSh0KX19KX0sX29uQ29uZmlybVZpc2liaWxpdHk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRVc2VkQWR2cygpLG49KDAsaSg1MSkuZ2V0VmlzaWJpbGl0eUNvbnRhaW5lcikodGhpcy5nZXRNYWluQ29udCgpKSxvPXRoaXMuZGF0YVNvdXJjZS5nZXRVbmNvbmZpcm1lZEFkcyh0KTt0aGlzLmRhdGFTb3VyY2Uuc2VuZFZpc2liaWxpdHlDb25maXJtYXRpb24obyx7cmVuZGVyU2l6ZTp0aGlzLmdldEJsb2NrU2l6ZSgpLGV4dFBhcmFtczp7Y29uZmlybVRpbWU6ZSxjb25maXJtUmF0aW86KDAsaSgxMDUpLmdldFZpc2liaWxpdHlSYXRpbykobil9fSksdGhpcy5kYXRhU291cmNlLnJlbWVtYmVyQ29uZmlybWVkQWRzKG8pLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITB9LGlzVmlzaWJpbGl0eUNvbmZpcm1lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkfSxfaGlkZUFidXNlZEFkOmZ1bmN0aW9uKGUpeygwLGkoNSkuZm9yRWFjaCkoaSgwKS5kb20ucXVlcnlTZWxlY3Rvcih0aGlzLml0ZW1TZWxlY3Rvcix0aGlzLmdldE1haW5Db250KCkpLGZ1bmN0aW9uKHQpe2lmKGU9PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWlkIikpe3ZhciBuPWkoMCkuZmlsdGVyKHRoaXMuYWR2cyxmdW5jdGlvbih0KXtyZXR1cm4gdC5hZElkPT1lfSlbMF07aWYodGhpcy5kYXRhU291cmNlLnNldEFidXNlZChuKSx0aGlzLnNldHRpbmdzLmZvcm1hdC50eXBlPT1pKDYpLkJsb2NrVHlwZXMuSE9SSVpPTlRBTHx8dGhpcy5zZXR0aW5ncy5mb3JtYXQudHlwZT09aSg2KS5CbG9ja1R5cGVzLkdSSUQpe3ZhciBvPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtYWR0dW5lLW1lc3NhZ2UiLHQpWzBdO2koMCkuZG9tLnNldEltcG9ydGFudENzc1Byb3BlcnR5KG8sIm1pbi1oZWlnaHQiLHQuY2xpZW50SGVpZ2h0KyJweCIpfXJbImRlZmF1bHQiXS5hZGRDbGFzcyh0LCJ5YXAtbGF5b3V0X19pdGVtX2FidXNlZCIpfX0sdGhpcyl9LGNyZWF0ZVRlbXBsT2JqOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGF0YVNvdXJjZS5nZXRUaXRsZSgpLG49dGhpcy5kYXRhU291cmNlLmdldExhbmd1YWdlKCksbz0oMCxpKDI1MCkuZ2V0TGFuZ0NvZGUpKG4pLHI9KDAsaSgxNjQpLmlzQ3VycmVuY3lUaXRsZSkodC50aXRsZSk7cmV0dXJuIHImJih0LnRpdGxlPSgwLGkoNTkpLnByZXR0aWZ5KSh0LnRpdGxlKSkse2FkczppKDApLmRlZXBDb3B5KGUpLGJsb2NrOnRoaXMsY2xhc3Nlczp0aGlzLl9ncmFiQ2xhc3NlcygpLGlkOnRoaXMuX21haW5Db250SWQseWFVcmw6dC51cmwseWFUaXRsZTp0LnRpdGxlLHNldHRpbmdzOnRoaXMuc2V0dGluZ3MsZm9ybWF0OnRoaXMuc2V0dGluZ3MuZm9ybWF0LGxheW91dDp0aGlzLkxheW91dHNbdGhpcy5sYXlvdXRdLGxhbmd1YWdlOm4sbGFuZzpvLGlzTmVlZEh5cGhlbmF0ZTp0aGlzLmlzTmVlZEh5cGhlbmF0ZSgpLGFwcEJ1dHRvblN0eWxlOmkoMCkuYnJvd3Nlci5pc0lPUz8iaW9zIjppKDApLmJyb3dzZXIuaXNBbmRyb2lkPyJhbmRyb2lkIjoiIix3YXJuaW5nVHlwZTp0aGlzLmdldFdhcm5pbmdUeXBlKCksaXNDdXJyZW5jeVlhVGl0bGU6cixsb2dvVG9vbHRpcFRpdGxlOigwLGkoMzApLmkxOG4pKCJZQU5ERVhfRElSRUNUIixufHwxKX19LGdldENvbHVtbnM6ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZ2V0Rm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuZm9ybWF0Lm5hbWV9LGdldFdhcm5pbmdUeXBlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hZHZzWzBdLndhcm5pbmc7cmV0dXJuIGUmJmUubGVuZ3RoPmkoNikubG9uZ1dhcm5pbmdMZW5ndGg/ImxvbmciOiEhZSYmIm1lZGljYWwifSxnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiBpKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIjIit0aGlzLnJlbmRlclRvKS5jbGllbnRXaWR0aHx8aSg2KS5MYXlvdXRzLkNPTVBBVElCTEVfV0lEVEh9LGdldEJsb2NrU2l6ZTpmdW5jdGlvbigpe3ZhciBlPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMucmVuZGVyVG8pO3JldHVybigwLGkoMTI5KS5nZXRFbGVtZW50UmVjdFNpemUpKGUpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFdpZHRoKCk7aWYoZT09aSg2KS5MYXlvdXRzLkNPTVBBVElCTEVfV0lEVEgpcmV0dXJuIGkoNikuTGF5b3V0cy5DT01QQVRJQkxFO3ZhciB0PWUvdGhpcy5nZXRDb2x1bW5zKCkvdGhpcy5fZ2V0Rm9udFNpemUoKTtyZXR1cm4gdDxpKDYpLkxheW91dHMuTUVESVVNX1dJRFRIP2koNikuTGF5b3V0cy5OQVJST1c6dDxpKDYpLkxheW91dHMuV0lERV9XSURUSD9pKDYpLkxheW91dHMuTUVESVVNOmkoNikuTGF5b3V0cy5XSURFfSxfZ2V0Rm9udFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5mb250U2l6ZXx8MX0sZ2V0QWRzQnlMaW1pdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgwLHRoaXMuc2V0dGluZ3MubGltaXQpfSxfcHJlcGFyZURhdGE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzOygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5CZWZvcmVSZW5kZXIpO3ZhciB0PXRoaXMuZGF0YVNvdXJjZS5nZXRGcmVlQWRzKCk7cmV0dXJuIHRoaXMuX2lzU2tpcFdhcm5pbmdzKCkmJih0PWkoMCkuZmlsdGVyKHQsdGhpcy5kYXRhU291cmNlLm5vdENvbnRhaW5XYXJuaW5ncykpLCEoIXQubGVuZ3RofHwhaSgwKS5kb20ucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5yZW5kZXJUbykpJiYodGhpcy5hZHZzPXRoaXMuZ2V0QWRzQnlMaW1pdCh0KSx0aGlzLl9oYXNJbnRlcnZpZXc9dGhpcy5oYXNJbnRlcnZpZXcoKSx0aGlzLmxheW91dD10aGlzLmdldExheW91dCgpLHRoaXMuZGF0YVNvdXJjZS5zZXRUZXN0dGFnUHJvcHMoe2xheW91dDp0aGlzLmxheW91dH0pLHRoaXMuYWR2cz10aGlzLnByZXBhcmVBZHModGhpcy5hZHZzLHt9KSwhIXRoaXMuYWR2cy5sZW5ndGgmJih0aGlzLnRlbXBsRGF0YT10aGlzLmNyZWF0ZVRlbXBsT2JqKHRoaXMuYWR2cyksKDAsaSg1KS5mb3JFYWNoKSh0aGlzLmFkdnMsZnVuY3Rpb24odCxpKXt0LmJhbm5lclRlc3R0YWcuc2V0UHJvcHMoe2Jhbm5lckluZGV4OmkrMX0pLGUuZGF0YVNvdXJjZS5jYXB0dXJlQWQodC5hZElkKX0pLCEwKSl9LHJlbmRlcjpmdW5jdGlvbihlKXt0aGlzLl9wcmVwYXJlRGF0YSgpJiYoaSgxMDkpLmNsZWFyKCksdGhpcy5fcmVuZGVyKCksdGhpcy5hZnRlclJlbmRlcigpLHRoaXMuc2V0QWR0dW5lVmlzaWJsaXR5KCkpLCgwLGkoNykuaXNGdW5jdGlvbikoZSkmJmUoKX0sX3JlbmRlcjpmdW5jdGlvbigpeygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SZW5kZXIpLHRoaXMuYXBwZW5kQmxvY2soKSx0aGlzLmNyZWF0ZVZpc2liaWxpdHlDb25maXJtZXIodGhpcy5fY29uZmlybUJ5SGFuZGxlciksdGhpcy5jcmVhdGVIb3Zlckxpc3RlbmVyKCksdGhpcy5jcmVhdGVDbGlja0xpc3RlbmVyKCl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7KDAsaSgyKS5sb2dSZW5kZXJMYWJlbCkodGhpcy5kYXRhU291cmNlLmdldFVuaXF1ZUlkKCksaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkFmdGVyUmVuZGVyKSx0aGlzLmluaXRCYW5uZXJDb21wb25lbnRzKCksdGhpcy5fcmVtb3ZlQnJva2VuRmF2aWNvbnMoKSx0aGlzLmNsZWFyU3R5bGVzKCk7dmFyIGU9dGhpcy5fZ2V0Q3NzKCksdD1pKDEwOSkuZ2V0Q1NTKGkoMCkuZXh0ZW5kKHtpZDp0aGlzLl9tYWluQ29udElkLGJsb2NrOnRoaXMsc2V0dGluZ3M6e30sdXRpbHM6aSgwKSxDb25zdDppKDYpfSkpO2koMTA5KS5jbGVhcigpLHRoaXMuaW5zZXJ0Q1NTKGUrdCl9LGluaXRCYW5uZXJDb21wb25lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJJbm5lckNvbXBvbmVudHMoKTt2YXIgZT10aGlzLmdldE1haW5Db250KCksdD1pKDApLmRvbS5xdWVyeVNlbGVjdG9yKHRoaXMuaXRlbVNlbGVjdG9yLGUpLG49e3dpZHRoOjEvMCxoZWlnaHQ6dGhpcy5faW1hZ2VTaXplc1t0aGlzLmxheW91dF0uaGVpZ2h0fTsoMCxpKDUpLmZvckVhY2gpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtdW5pcS1pZCIpLGk9dGhpcy5nZXRBZEJ5VW5pcUlkKHQpO3RoaXMuc2V0dGluZ3MuZm9ybWF0LnVzZUVsYXN0aWNQaWN0dXJlJiZpLnBpY3R1cmUmJmkucGljdHVyZS5pc1dpZGUmJnRoaXMuX2luaXRQaWN0dXJlQ29tcG9uZW50KGUsaSxuKTt2YXIgbz10aGlzLmdldEJhbm5lckFkQ2xhc3MoaSk7dGhpcy5faW5uZXJDb21wb25lbnRzLnB1c2gobmV3IG8oZSxpLHRoaXMpKX0sdGhpcyl9LF9nZXRBZENvbnRhaW5lcjpmdW5jdGlvbihlKXt2YXIgdD1pKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIueWFwLWxheW91dF9faW5uZXIiLGUpWzBdO3JldHVybiB0fHwodD1lKSx0fSxnZXRBZHR1bmVDb250YWluZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtbGF5b3V0X19hZHR1bmUiLGUpfSxnZXRBZHR1bmVDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm57fX0sZ2V0QmFubmVyQWRDbGFzczpmdW5jdGlvbigpe3JldHVybiBpKDUxNSl9LF9yZW1vdmVCcm9rZW5GYXZpY29uczpmdW5jdGlvbigpe3ZhciBlPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtZmF2aWNvbiIsdGhpcy5nZXRNYWluQ29udCgpKTsoMCxpKDUpLmZvckVhY2gpKGUsZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEltYWdlO2koMCkuZG9tRXZlbnQub24odCwiZXJyb3IiLGZ1bmN0aW9uKCl7aSgwKS5kb20ucmVtb3ZlKGUpfSksaSgwKS5kb21FdmVudC5vbih0LCJsb2FkIixmdW5jdGlvbigpezE2IT09dC53aWR0aCYmMzIhPT10LndpZHRoJiZpKDApLmRvbS5yZW1vdmUoZSl9KSx0LnNyYz1lLnNyY30pfSxvblJlY2VpdmVkRmVlZGJhY2s6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhU291cmNlLmFidXNlQWQoZSl9LGluaXRWaXNpYmlsaXR5Q2hlY2tlcjpmdW5jdGlvbihlKXt0aGlzLmNyZWF0ZVZpc2liaWxpdHlDb25maXJtZXIoZSl9LHNldEFkdHVuZVZpc2libGl0eTpmdW5jdGlvbigpe3ZhciBlPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtbGF5b3V0Iix0aGlzLmdldE1haW5Db250KCkpWzBdO2UmJihpKDApLmJyb3dzZXIuc3VwcG9ydC50b3VjaHx8aSgwKS5icm93c2VyLmlzSUVRdWlya3N8fCEodGhpcy5hZHZzLmxlbmd0aD4xJiZyWyJkZWZhdWx0Il0uaGFzQ2xhc3MoZSwieWFwLWxheW91dF9ibG9ja192ZXJ0aWNhbCIpKSkmJmkoMCkuZG9tLmFkZENsYXNzKGUsInlhcC1sYXlvdXRfYWR0dW5lLWFsd2F5cy12aXNpYmxlIil9LF9vbkhvdmVyOmZ1bmN0aW9uKGUpe3ZhciB0PWkoMCkuZmlsdGVyKHRoaXMuYWR2cyxmdW5jdGlvbih0KXtyZXR1cm4gdC5hZElkPT1lfSlbMF07aWYodCl7dmFyIG49W3RdLG89KDAsaSg1MSkuZ2V0VmlzaWJpbGl0eUNvbnRhaW5lcikodGhpcy5nZXRNYWluQ29udCgpKTt0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkPSEwLHRoaXMuZGF0YVNvdXJjZS5zZW5kVmlzaWJpbGl0eUNvbmZpcm1hdGlvbihuLHt0ZXN0dGFnUHJvcHM6e2lzSG92ZXI6ITB9LHJlbmRlclNpemU6dGhpcy5nZXRCbG9ja1NpemUoKSxleHRQYXJhbXM6e2NvbmZpcm1UaW1lOi0xLGNvbmZpcm1SYXRpbzooMCxpKDEwNSkuZ2V0VmlzaWJpbGl0eVJhdGlvKShvKX19KX19LF9vbkNsaWNrOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciByPSgwLGkoNzQpLmNyZWF0ZUNsaWNrSW5mbykoZSx0LG4pOygwLGkoNzQpLnNlbmRDbGlja0luZm9Mb2cpKHIpO2Zvcih2YXIgYT1udWxsLHM9ZS50YXJnZXQ7czspe2lmKCJBIj09PXMubm9kZU5hbWUpe2E9czticmVha31pZihzPT09bylicmVhaztzPXMucGFyZW50RWxlbWVudH1pZihudWxsIT09YSl7dmFyIGw9bmV3KGkoMjQpLlVybCkoe2hvc3Q6YS5ocmVmLHBhcmFtczooMCxpKDc0KS5nZXRDbGlja0luZm9Gb3JVcmwpKCl9KS5nZXRVcmwoKTthLmhyZWY9bH19LGlzTmVlZEh5cGhlbmF0ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9uZWVkSHlwaGVuYXRlJiYodGhpcy5fbmVlZEh5cGhlbmF0ZT10aGlzLmdldFdpZHRoKCkvdGhpcy5nZXRDb2x1bW5zKCk8PTIwMCksdGhpcy5fbmVlZEh5cGhlbmF0ZX0sZ2V0QWRCeVVuaXFJZDpmdW5jdGlvbihlKXtyZXR1cm4gaSgwKS5maWx0ZXIodGhpcy5hZHZzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXFJZD09ZX0pWzBdfSxmaXJlSW5uZXJDb21wb25lbnRzOmZ1bmN0aW9uKGUpe3ZhciB0PWkoMCkuY2FtZWxpemUoIm9uLSIrZSksbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7KDAsaSg1KS5mb3JFYWNoKSh0aGlzLl9pbm5lckNvbXBvbmVudHMsZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGVbdF0mJmVbdF0uYXBwbHkoZSxuKX0pfSxfaXNTa2lwV2FybmluZ3M6ZnVuY3Rpb24oKXtpZig4IT09aSgwKS5icm93c2VyLmllVmVyc2lvbiYmInJvdyI9PT10aGlzLnNldHRpbmdzLmZvcm1hdC5uYW1lKXt2YXIgZT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLHQ9KDAsaSgyMikuZmlsdGVyKShzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRlc3QoZSl9KS5sZW5ndGg+MDtpZigyNzIxOT09PXRoaXMuZGF0YVNvdXJjZS5fcGFnZUlkKXJldHVybiExO2lmKHQpcmV0dXJuITB9cmV0dXJuIHRoaXMuc2V0dGluZ3MuZm9ybWF0LnNraXBXYXJuaW5nc30sZ2V0VGVzdHRhZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0VGVzdHRhZygpfSxnZXREYXRhU291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZX0sc2xpZGVVcDpmdW5jdGlvbihlKXsoMCxpKDExMCkuc2xpZGVVcCkodGhpcy5nZXRNYWluQ29udCgpLGUpfSxfaW5pdFBpY3R1cmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtbGF5b3V0X19waWN0dXJlLXBsYWNlaG9sZGVyIixlKVswXSxhPW5ldyhpKDM3NSkpKHthZHY6dCxpbWFnZVNpemU6bixjbGFzczoieWFwLWxheW91dF9fZWxhc3RpYy1waWN0dXJlLWNvbnRhaW5lciIsZGlzYWJsZVZlcnRpY2FsU3BhY2luZzohMCxlbmFibGVBbmltYXRpb246dGhpcy5kYXRhU291cmNlLmlzRW5hYmxlQW5pbWF0aW9uKCl9KTtvWyJkZWZhdWx0Il0ucmVuZGVyVG9Ob2RlKHIsYSksdGhpcy5faW5uZXJDb21wb25lbnRzLnB1c2goYSl9fSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNDdXJyZW5jeVRpdGxlPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUmJmkoMjMpLmluZGV4T2YoaSg1MTQpLmN1cnJlbmN5VGl0bGVzLGUpPi0xKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSk7dmFyIHI9by5leHRlbmQoe30sbyk7ci5kb209aSgzOCksci5pbkFycmF5PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwIT09dCYmbnVsbCE9PXR8fCh0PSIiKSwoMCxpKDIzKS5pbmRleE9mKShlLHQsMCxuKX0sci5kZWVwQ29weT1mdW5jdGlvbihlLHQpe2lmKHQmJiJvYmplY3QiPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpuKHQpKSlmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoIm9iamVjdCIhPW4odFtpXSl8fHIuaXNBcnJheSh0W2ldKT9lW2ldPXRbaV06KCJvYmplY3QiIT1uKGVbaV0pJiYoZVtpXT17fSksci5kZWVwQ29weShlW2ldLHRbaV0pKSk7cmV0dXJuIGV9LHIuZm9ybWF0PWkoNDYyKS5mb3JtYXQsci5kb3duc2NhbGU9ZnVuY3Rpb24oZSx0KXt2YXIgaT1NYXRoLm1pbih0LndpZHRoL2Uud2lkdGgsdC5oZWlnaHQvZS5oZWlnaHQsMSk7cmV0dXJue3dpZHRoOk1hdGgucm91bmQoZS53aWR0aCo9aSksaGVpZ2h0Ok1hdGgucm91bmQoZS5oZWlnaHQqPWkpfX0sci5jYXBpdGFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEsZS5sZW5ndGgpfSxyLnRvUXVlcnlQYXJhbXM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHIuZWFjaChyLmtleXMoZSksZnVuY3Rpb24oaSl7dm9pZCAwIT1lW2ldJiYiIiE9PWVbaV0mJnQucHVzaChpKyI9IitlbmNvZGVVUklDb21wb25lbnQoZVtpXSkpfSksdC5qb2luKCImIil9LHIuYWRkUXVlcnlQYXJhbXM9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoInV0aWwuYWRkUXVlcnlQYXJhbXM6IFx1MDQzZlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2ZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0M2VcdTA0MzkgdXJsIik7dmFyIGk9LTEhPT0oZT1lLnNwbGl0KCIjIikpWzBdLmluZGV4T2YoIj8iKT8iJiI6Ij8iO3JldHVybltlWzBdLGksci50b1F1ZXJ5UGFyYW1zKHQpLGVbMV0/IiMiK2VbMV06IiJdLmpvaW4oIiIpfSxyLmNhbWVsaXplS2V5cz1pKDQ2MykuY2FtZWxpemVLZXlzLHIuYWRkUHJvdG9jb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PWUuaW5kZXhPZigiLy8iKSYmKGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sK2UpLGV9LHIuYmVtRm9ybWF0dGVyPWZ1bmN0aW9uKGUpe3ZhciB0PS9eKFtfLV1cdyspLztyZXR1cm4gZnVuY3Rpb24oKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZTt2YXIgaT1bXTtyZXR1cm4gci5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihuKXt2YXIgbz1uLnNwbGl0KC9ccysvKTtpLnB1c2goci5tYXAobyxmdW5jdGlvbihpKXtyZXR1cm4gaS5yZXBsYWNlKHQsZnVuY3Rpb24oKXtyZXR1cm4gZSthcmd1bWVudHNbMV19KX0pLmpvaW4oIiAiKSl9KSxpLmpvaW4oIiAiKX19LHIubWl4aW49ZnVuY3Rpb24oZSx0KXtvLmZvck93bih0LGZ1bmN0aW9uKHQsaSl7dmFyIG4scixhPWVbaV07ZVtpXT1vLmlzRnVuY3Rpb24oYSk/KG49YSxyPXQsZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fYmFzZTt0aGlzLl9fYmFzZT1uO3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzLl9fYmFzZT1lLHR9KTp0fSl9LHIudW5pcXVlPWkoNDY0KSxyLmxvb3A9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPVtdO2k9aXx8dGhpcztmb3IodmFyIG89MDtvPGU7bysrKXt2YXIgcj10LmNhbGwoaSxvKTtpZighcilicmVhaztuLnB1c2gocil9cmV0dXJuIG59LGUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDEwKSxzPWkoMzgpLGw9cy5yZW1vdmUsYz0ocy5hcHBlbmRTdHlsZSxpKDE0KSksdT1pKDI4KSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyksdGhpcy52YXJpYWJsZXM9dGhpcy5wcm9wcy52YXJpYWJsZXMsdGhpcy52YXJpYWJsZXMuaWR9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJzdHlsZSIse25vbmNlOnRoaXMucHJvcHMubm9uY2V8fCIifSx0aGlzLmdldENzcygpKX0sdC5wcm90b3R5cGUuZ2V0Q3NzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWMubWFwKHRoaXMucHJvcHMuc3R5bGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGwobnVsbCxlLnZhcmlhYmxlcyl9KS5qb2luKCIiKTtyZXR1cm4gdS5lbmNvZGVTdHlsZSh0LCExLHRoaXMucHJvcHMuZm9yY2VFbmNvZGUpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlRWxlbWVudCYmbCh0aGlzLnN0eWxlRWxlbWVudCl9LHQucHJvdG90eXBlLnNldFZhcmlhYmxlcz1mdW5jdGlvbihlKXt0aGlzLnZhcmlhYmxlcz1lLHRoaXMuc3R5bGVFbGVtZW50LmlubmVySFRNTD10aGlzLmdldENzcygpfSx0fShhKTt0LlN0eWxlPWR9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIntvcGFjaXR5OiIsZS5vcGFjaXR5LCI7d2hpdGUtc3BhY2U6bm9ybWFsO3Zpc2liaWxpdHk6dmlzaWJsZX0uIixlLmlkLCIsLiIsZS5pZCwiIHlhdGFne2Rpc3BsYXk6YmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdH0uIixlLmlkLCIsLiIsZS5pZCwiLC4iLGUuaWQsIiBhLC4iLGUuaWQsIiBiLC4iLGUuaWQsIiBlbSwuIixlLmlkLCIgaWZyYW1lLC4iLGUuaWQsIiBpbWcsLiIsZS5pZCwiIHRhYmxlLC4iLGUuaWQsIiB0Ym9keSwuIixlLmlkLCIgdGQsLiIsZS5pZCwiIHRyLC4iLGUuaWQsIiB5YXRhZ3tib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDstd2Via2l0LWh5cGhlbnM6bWFudWFsOy1tcy1oeXBoZW5zOm1hbnVhbDtoeXBoZW5zOm1hbnVhbH0uIixlLmlkLCIsLiIsZS5pZCwiIGEsLiIsZS5pZCwiIGIsLiIsZS5pZCwiIGVtLC4iLGUuaWQsIiBpZnJhbWUsLiIsZS5pZCwiIGltZywuIixlLmlkLCIgdGFibGUsLiIsZS5pZCwiIHRib2R5LC4iLGUuaWQsIiB0ZCwuIixlLmlkLCIgdHJ7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3BhY2luZzowO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtjbGVhcjpub25lO2Zsb2F0Om5vbmU7Zm9udC12YXJpYW50Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowO21heC1oZWlnaHQ6bm9uZTttYXgtd2lkdGg6bm9uZTttaW4taGVpZ2h0OjA7bWluLXdpZHRoOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjpzdGF0aWM7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtaW5kZW50OjA7dGV4dC10cmFuc2Zvcm06bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt2aXNpYmlsaXR5OmluaGVyaXQ7d29yZC1zcGFjaW5nOm5vcm1hbH0uIixlLmlkLCIsLiIsZS5pZCwiIGEsLiIsZS5pZCwiIGIsLiIsZS5pZCwiIGVtLC4iLGUuaWQsIiBpbWcsLiIsZS5pZCwiIHRhYmxlLC4iLGUuaWQsIiB0Ym9keSwuIixlLmlkLCIgdGQsLiIsZS5pZCwiIHRye2hlaWdodDphdXRvfS4iLGUuaWQsIiB0YWJsZXtkaXNwbGF5OnRhYmxlO2VtcHR5LWNlbGxzOmhpZGU7dGFibGUtbGF5b3V0OmZpeGVkfS4iLGUuaWQsIiB0YWJsZSwuIixlLmlkLCIgdGR7Zm9udC1zaXplOjEwMCV9LiIsZS5pZCwiIHRke2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LiIsZS5pZCwie3dpZHRoOiIsZS5ob25leVdpZHRoLCI7aGVpZ2h0OiIsZS5ob25leUhlaWdodCwiO292ZXJmbG93OiIsZS52aXNpYmlsaXR5LCJ9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49aSgzMCksbz1pKDE0KSxyPWkoNSksYT1pKDQ5Nikscz17U01BTEw6InNtYWxsIixNSURETEU6Im1pZGRsZSIsTEFSR0U6ImxhcmdlIn0sbD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSIxIjpjYXNlIjMiOmNhc2UiNiI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4iMSJ9fSxjPXt0eXBlczpzLHRpdGxlczpmdW5jdGlvbihlKXtyZXR1cm57c21hbGw6KDAsbi5pMThuKSgiQURUVU5FX1RJVExFX1NNQUxMIixlKSxsYXJnZTooMCxuLmkxOG4pKCJBRFRVTkVfVElUTEVfTEFSR0UiLGUpfX0sb3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD17fSxpPWwoZSk7cmV0dXJuKDAsci5mb3JFYWNoKShbInNtYWxsIiwibGFyZ2UiXSxmdW5jdGlvbihlKXt0W2VdPSgwLG8ubWFwKShhLGZ1bmN0aW9uKHQpe3JldHVybntpZDp0WyJyZWFzb24taWQiXSsiLSIrdFsiYWN0aW9uLWlkIl0sdGV4dDp0LmRlc2NyaXB0aW9uW2VdW2ldfX0pfSksdH0sZG93bmdyYWRlOlt7Y2xhc3NOYW1lOiJ5YXAtYWJ1c2UtY29tcGxhaW50X21heC1zaXplIix0eXBlOnMuTEFSR0V9LHtjbGFzc05hbWU6InlhcC1hYnVzZS1jb21wbGFpbnRfbGFyZ2Utc2l6ZSIsdHlwZTpzLkxBUkdFfSx7Y2xhc3NOYW1lOiJ5YXAtYWJ1c2UtY29tcGxhaW50X21pZGRsZS1zaXplIix0eXBlOnMuTEFSR0V9LHtjbGFzc05hbWU6InlhcC1hYnVzZS1jb21wbGFpbnRfc21hbGwtc2l6ZSIsdHlwZTpzLlNNQUxMfV19O2EuZm9yRWFjaChmdW5jdGlvbihlKXtjW2VbInRhbmtlci1rZXkiXV09W2VbInJlYXNvbi1pZCJdLGVbImFjdGlvbi1pZCJdXX0pLGNbIlBSRVZFTlRTX0JST1dTSU5HX09QVElPTl9JRCJdPWMuUFJFVkVOVFNfQlJPV1NJTkdbMF0rIi0iK2MuUFJFVkVOVFNfQlJPV1NJTkdbMV0sZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoOTIpLG89aSgzNzgpO3QuQmxvY2tDb250ZXh0PW8uY3JlYXRlQ29udGV4dCh7YmxvY2tTdGF0ZTpuZXcgbi5CbG9ja1N0YXRlKHtzdGF0dXM6bi5CbG9ja1N0YXR1cy5SZWFkeX0pfSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXt9LnRvU3RyaW5nLG89L1xbb2JqZWN0IChcdyspXF0vO3QuZ2V0SW50ZXJuYWxDbGFzcz1mdW5jdGlvbihlKXt2YXIgdD1uLmNhbGwoZSk7aWYoIXQpcmV0dXJuIG51bGw7dmFyIGk9dC5tYXRjaChvKTtpZighaSlyZXR1cm4gbnVsbDt2YXIgcj1pWzFdO3JldHVybiByfHxudWxsfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49e2xpbmVhcjpmdW5jdGlvbihlLHQsaSxuKXtyZXR1cm4gaSplL24rdH19O3QuYW5pbWF0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmVhc2luZyxvPWUuc3RhcnQscj12b2lkIDA9PT1vPzA6byxhPWUuZW5kLHM9dm9pZCAwPT09YT8wOmEsbD1lLmR1cmF0aW9uLGM9ZS5vbkZyYW1lLHU9ITA7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49RGF0ZS5ub3coKTtpKDc3KS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gbygpe2UoRGF0ZS5ub3coKS1uKT9pKDc3KS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobyk6dCYmdCgpfSl9KGZ1bmN0aW9uKGUpe3ZhciBpPSgwLG5bdHx8ImxpbmVhciJdKShlLHIscy1yLGwpLG89ZTxsO3JldHVybiBjKG8/aTpzKSxvJiZ1fSxlLm9uRW5kKSx7c3RvcDpmdW5jdGlvbigpe3U9ITF9fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNldENvb2tpZT1mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz17fSksaSg1NTQpLmlzRGF0ZShvLmV4cGlyZXMpJiYoby5leHBpcmVzPW8uZXhwaXJlcy50b1VUQ1N0cmluZygpKSx2b2lkIDA9PT1vLnBhdGgmJihvLnBhdGg9Ii8iKTt2YXIgcj0iIjtmb3IodmFyIGEgaW4gbylvW2FdJiYocis9IjsgIithLCEwIT09b1thXSYmKHIrPSI9IitvW2FdKSk7dHJ5e3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodCkpKyI9IitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKG4pKTtyZXR1cm4gZS5jb29raWU9cytyfWNhdGNoKGUpe3JldHVybn19LHQuZ2V0Q29va2llPWZ1bmN0aW9uKGUsdCl7dmFyIGk9W107dHJ5e2k9ZS5jb29raWU/ZS5jb29raWUuc3BsaXQoIjsgIik6W119Y2F0Y2goZSl7fWZvcih2YXIgbixvPS8oJVswLTlBLVpdezJ9KSsvZyxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBhPWlbcl0uc3BsaXQoIj0iKSxzPWEuc2xpY2UoMSkuam9pbigiPSIpO3RyeXt2YXIgbD1hWzBdLnJlcGxhY2UobyxkZWNvZGVVUklDb21wb25lbnQpO2lmKHMucmVwbGFjZShvLGRlY29kZVVSSUNvbXBvbmVudCksdD09PWwpe249ZGVjb2RlVVJJQ29tcG9uZW50KHMpO2JyZWFrfX1jYXRjaChlKXtyZXR1cm59fXJldHVybiBufSx0LmRlbGV0ZUNvb2tpZT1mdW5jdGlvbihlLGksbyl7dC5zZXRDb29raWUoZSxpLCIiLG4obih7fSxvKSx7ZXhwaXJlczpuZXcgRGF0ZSgwKX0pKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHRbImRlZmF1bHQiXT1mdW5jdGlvbihlLHQpe3ZhciBpPWUrTWF0aC5yYW5kb20oKSoodCsxLWUpO3JldHVybiBpPU1hdGguZmxvb3IoaSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZHR1bmV7Y3Vyc29yOnBvaW50ZXI7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1hZHR1bmUsLiIsZS5pZCwiIC55YXAtYWR0dW5lX3RvdWNoX3RydWV7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwnIC55YXAtYWR0dW5lX3RvdWNoX3RydWU6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi01cHg7Ym90dG9tOi01cHg7cmlnaHQ6MH0uJyxlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYTphZnRlcntsZWZ0OjA7Ym90dG9tOjB9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudXt6LWluZGV4Oi0xO3RyYW5zaXRpb246ei1pbmRleCAwcyBsaW5lYXIgLjRzO2N1cnNvcjpkZWZhdWx0O2xpbmUtaGVpZ2h0OjEuMjU7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1mZWVkYmFjay1tZW51LC4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfX3NsaWRle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1mZWVkYmFjay1tZW51X19zbGlkZXttYXJnaW4tbGVmdDoxMDAlO3RyYW5zaXRpb246bWFyZ2luLWxlZnQgLjRzIGVhc2Utb3V0fS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfX2Zvcm17cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC45OCk7dHJhbnNpdGlvbjptYXJnaW4tbGVmdCAuNHMgZWFzZS1vdXR9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudV92aXNpYmxle3otaW5kZXg6MTA7dHJhbnNpdGlvbjp6LWluZGV4IDBzfS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfdmlzaWJsZSAueWFwLWZlZWRiYWNrLW1lbnVfX3NsaWRle21hcmdpbi1sZWZ0OjB9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb257cGFkZGluZzowIDAgNHB4IDRweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9fdG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7bWFyZ2luLXRvcDotOXB4O21hcmdpbi1yaWdodDo4cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjRweDtib3JkZXItcmFkaXVzOjAgMCAwIDIwJX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2Ugc3Zne2Rpc3BsYXk6YmxvY2s7bWF4LWhlaWdodDpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX19pbWFnZSBwb2x5Z29ue2ZpbGw6IixlLnNldHRpbmdzLnRleHRDb2xvcnx8IiMwMDAiLCJ9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fX2ltYWdlLWZhbGxiYWNre21hcmdpbjotM3B4O3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjFlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweH0uIixlLmlkLCcgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2UtYWRibG9ja3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0l4TURBbElpQm9aV2xuYUhROUlqRXdNQ1VpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJK1BIQnZiSGxuYjI0Z2NHOXBiblJ6UFNJeE5Dd3dMamNnTVRNdU15d3dJRGNzTmk0eU9Ua2dNQzQzTERBZ01Dd3dMamNnTmk0ekxEY2dNQ3d4TXk0eU9Ua2dNQzQzTERFMElEY3NOeTQzSURFekxqTXNNVFFnTVRRc01UTXVNams1SURjdU55dzNJajQ4TDNCdmJIbG5iMjQrUEM5emRtYysiKX0uJyxlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbjpob3ZlciAueWFwLWFkdHVuZS1pY29uX190b29sdGlwe3Zpc2liaWxpdHk6dmlzaWJsZX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9vcGVuOmhvdmVyIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3RvdWNoX3RydWV7dmlzaWJpbGl0eTp2aXNpYmxlfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3RvdWNoX3RydWUgLnlhcC1hZHR1bmUtaWNvbl9fdG9vbHRpcHtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fb2xkaWVfdHJ1ZSAueWFwLWFkdHVuZS1pY29uX190b29sdGlwe2hlaWdodDoxOXB4O2xpbmUtaGVpZ2h0OjE5cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fb2xkaWVfdHJ1ZSAueWFwLWFkdHVuZS1pY29uX190b29sdGlwLWFycm93e3RvcDoycHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fc2l6ZV9sIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntwYWRkaW5nOjVweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9zaXplX2wgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2UtZmFsbGJhY2t7bWFyZ2luOi01cHg7Zm9udC1zaXplOjI1cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fc2l6ZV9sIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7bWFyZ2luLXJpZ2h0OjlweDttYXJnaW4tdG9wOi0xMnB4O21heC13aWR0aDoxNjBweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4O2ZvbnQtc2l6ZToxM3B4fS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3NpemVfbCAueWFwLWFkdHVuZS1pY29uX190b29sdGlwLWFycm93e3JpZ2h0Oi03cHg7dG9wOjRweDtib3JkZXItd2lkdGg6N3B4IDAgN3B4IDdweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9zaGFycCAueWFwLWFkdHVuZS1pY29uX19jb250YWluZXJ7Ym9yZGVyLXJhZGl1czowfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uLnlhcC1hZHR1bmUtaWNvbl9vcGVuIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX2JsYWNrLXdoaXRlIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI1KX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9ibGFjay13aGl0ZSAueWFwLWFkdHVuZS1pY29uX19pbWFnZSBwb2x5Z29ue2ZpbGw6I2ZmZn0uIixlLmlkLCcgLnlhcC1hZHR1bmUtaWNvbl9ibGFjay13aGl0ZSAueWFwLWFkdHVuZS1pY29uX19pbWFnZS55YXAtYWR0dW5lLWljb25fX2ltYWdlLWFkYmxvY2t7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE1EQWxJaUJvWldsbmFIUTlJakV3TUNVaUlITjBlV3hsUFNKbWFXeHNPaUFqWm1abUlpQjJhV1YzUW05NFBTSXdJREFnTVRRZ01UUWlQanh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNVFFzTUM0M0lERXpMak1zTUNBM0xEWXVNams1SURBdU55d3dJREFzTUM0M0lEWXVNeXczSURBc01UTXVNams1SURBdU55d3hOQ0EzTERjdU55QXhNeTR6TERFMElERTBMREV6TGpJNU9TQTNMamNzTnlJK1BDOXdiMng1WjI5dVBqd3ZjM1puUGc9PSIpfS4nLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3JvdywuIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYSAueWFwLWFkdHVuZS1pY29ue3BhZGRpbmc6MH0uIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYS55YXAtYWR0dW5lX2JsYWNrLXdoaXRlLnlhcC1hZHZfX2FkdHVuZXt0b3A6M3B4O3JpZ2h0OjNweH0uIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYS55YXAtYWR0dW5lX2JsYWNrLXdoaXRlLnlhcC1hZHZfX2FkdHVuZSAueWFwLWFkdHVuZS1pY29uX19jb250YWluZXJ7Ym9yZGVyLXJhZGl1czoyMCV9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjojMDAwO2ZvbnQtc2l6ZToxM3B4O3otaW5kZXg6LTE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2UsLiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2VfX2NvbnRhaW5lcntkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1tZXNzYWdlX190ZXh0e21hcmdpbi1sZWZ0OjEwcHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2VfX2ljb24gc3Zne2ZpbGw6IzAwMH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtbWVzc2FnZV9iaWd7Zm9udC1zaXplOjE1cHh9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudV9yZWNlaXZlZCAueWFwLWFkdHVuZS1tZXNzYWdle29wYWNpdHk6MTt6LWluZGV4OjEwfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2V7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMCU7Zm9udC1zaXplOjEzcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZSwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnt3aWR0aDoxMDAlOy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MTBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6bm9uZTtmb250LXdlaWdodDo3MDB9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVyLC4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ29fc21hbGx7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludCwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1mbGV4LXNocmluazowOy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50ey13ZWJraXQtYWxpZ24tY29udGVudDpjZW50ZXI7LW1zLWZsZXgtbGluZS1wYWNrOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re3dpZHRoOjEwMCU7bWF4LXdpZHRoOjI1MHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTgwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTpibG9jaztwYWRkaW5nOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYzhjOGM4O2JvcmRlci1yYWRpdXM6NHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLGNvbG9yO3RyYW5zaXRpb24tZHVyYXRpb246LjJzO2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGluazpob3Zlcntjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojMzMzfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbToxNXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludCwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbTo1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte21hcmdpbjoycHggMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7cGFkZGluZzozcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVye3BhZGRpbmctYm90dG9tOjE1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LC4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbF9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpzdHJldGNoOy1tcy1mbGV4LWFsaWduOnN0cmV0Y2g7YWxpZ24taXRlbXM6c3RyZXRjaH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9zbWFsbHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbTo1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte21hcmdpbjoycHggMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX2xhcmdle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7cGFkZGluZzozcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4MiAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbToxMHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbC0yeDIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC13cmFwOndyYXA7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO21heC13aWR0aDo1NDBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17d2lkdGg6NTAlO21hcmdpbjowO3BhZGRpbmc6NXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbC0yeDJfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MTBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtd3JhcDp3cmFwOy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDttYXgtd2lkdGg6MzQwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte3dpZHRoOjUwJTttYXJnaW46MDtwYWRkaW5nOjVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX2xhcmdle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3cgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LXNocmluazoxOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MTtwYWRkaW5nLWxlZnQ6MjBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17LXdlYmtpdC1mbGV4LWdyb3c6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxO21hcmdpbjowIDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdzstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtc2hyaW5rOjE7LW1zLWZsZXgtbmVnYXRpdmU6MTtmbGV4LXNocmluazoxO3BhZGRpbmctbGVmdDoxNXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17LXdlYmtpdC1mbGV4LWdyb3c6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxO21hcmdpbjowIDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fbGFyZ2V7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nb19zbWFsbHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjE7cGFkZGluZy1sZWZ0OjE1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MCA1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55e2ZvbnQtc2l6ZToxMXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdzstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjRweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3RpbnkgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3RpbnkgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtc2hyaW5rOjE7LW1zLWZsZXgtbmVnYXRpdmU6MTtmbGV4LXNocmluazoxO3BhZGRpbmctbGVmdDoxMHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MCAxcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fbGFyZ2V7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGV7Zm9udC1zaXplOjExcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3c7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nb3tkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjE7cGFkZGluZy1sZWZ0OjEwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXstd2Via2l0LWZsZXgtZ3JvdzoxOy1tcy1mbGV4LXBvc2l0aXZlOjE7ZmxleC1ncm93OjE7bWFyZ2luOjAgMnB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGlua3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWx7Zm9udC1zaXplOjEycHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve3BhZGRpbmc6MnB4IDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtbWluaW1hbCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ29fc21hbGx7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1taW5pbWFsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LXdyYXA6d3JhcDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LXdlYmtpdC1mbGV4LXNocmluazoxOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtbWluaW1hbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1taW5pbWFsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGlua3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MnB4fS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfcmVjZWl2ZWQgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXtvcGFjaXR5OjB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSExLG89aSgxMSk7ZnVuY3Rpb24gcihlKXt2YXIgdD0oaSg3NTEpLmlzSUV8fGkoNzUyKS5pc0VkZ2UpJiYvW15cd1wuLV0vaS50ZXN0KGxvY2F0aW9uLmhvc3QpO3JldHVybiBufHx0fW49Qm9vbGVhbihpKDcxKS5nZXQobywiY29uZmlnLnJ0YlJlcXVlc3RWaWFTY3JpcHQiKSksdC5zaG91bGRVc2VKU09OUD1yLHQubG9hZEFkPWZ1bmN0aW9uKGUpe3IoZS5wYWdlSWQpP2koNzUzKShlLnVybCxlLnBhZ2VJZCxlLmNhbGxiYWNrKTpuZXcoaSg3NTQpLkFkTG9hZGVyKShlKS5sb2FkKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYWNoZT1lfXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FjaGVbZV19LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLmNhY2hlfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNhY2hlW2VdPXR9LGV9KCk7dC5PYmplY3RDYWNoZT1uLHQubWVtb2l6ZT1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWZ1bmN0aW9uKGUpe3JldHVybiBlfSksdm9pZCAwPT09aSYmKGk9bmV3IG4oe30pKSxmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGkuaGFzKG4pKXJldHVybiBpLmdldChuKTt2YXIgbz1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaS5zZXQobixvKSxvfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuYXVnbWVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuY29uc3RydWN0b3I7dC5oYXNPd25Qcm9wZXJ0eSgiY29uc3RydWN0b3IiKXx8KG49ZnVuY3Rpb24oKXtuLl9fcGFyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3ZhciBvPSgwLGkoMjgxKS5vYmplY3RDcmVhdGUpKGUucHJvdG90eXBlKTtyZXR1cm4gby5jb25zdHJ1Y3Rvcj1uLG4uX19zdXBlcj1lLnByb3RvdHlwZSxuLl9fcGFyZW50PWUsby5fX3NlbGY9bixuLnByb3RvdHlwZT0oMCxpKDI1NykuZXh0ZW5kKShvLHQpLG59fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNsZWFySFRNTD1mdW5jdGlvbihlKXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49bmV3IFJlZ0V4cChbImJveC1mbGV4IiwiYm94LWZsZXgtZ3JvdXAiLCJjb2x1bW4tY291bnQiLCJmaWxsLW9wYWNpdHkiLCJmbGV4IiwiZmxleC1ncm93IiwiZmxleC1wb3NpdGl2ZSIsImZsZXgtc2hyaW5rIiwiZmxleC1uZWdhdGl2ZSIsImZvbnQtd2VpZ2h0IiwibGluZS1oZWlnaHQiLCJvcGFjaXR5Iiwib3JkZXIiLCJ6LWluZGV4Iiwiem9vbSJdLmpvaW4oInwiKSwiaSIpO2Z1bmN0aW9uIG8oZSx0LGksbyl7dm9pZCAwIT09aSYmdm9pZCAwIT09dCYmKGkrPSFuLnRlc3QodCkmJmk+Pj4wPyJweCI6IiIsZS5zdHlsZS5zZXRQcm9wZXJ0eT9lLnN0eWxlLnNldFByb3BlcnR5KHQsaSxvPyJpbXBvcnRhbnQiOiIiKTplLnN0eWxlLmNzc1RleHQrPSI7Iit0KyI6ICIraSsobz8iIWltcG9ydGFudCI6IiIpKX10LnNldFN0eWxlPWZ1bmN0aW9uKGUsdCxuLHIpe2koMjcpLmlzT2JqZWN0KHQpPyhyPUJvb2xlYW4obiksaSg0NykuZm9yT3duKHQsZnVuY3Rpb24odCxpKXtvKGUsaSx0LHIpfSkpOm8oZSx0LG4scil9LHQuc3R5bGVUb1N0cmluZz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbz10PyIhaW1wb3J0YW50IjoiIixyPSIiO3JldHVybiBpKDQ3KS5mb3JPd24oZSxmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PWUmJnZvaWQgMCE9PXQpe3ZhciBpPXQucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO2UrPSFuLnRlc3QoaSkmJmU+Pj4wPyJweCI6IiIscis9aSsiOiAiK2UrbysiOyJ9fSkscn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPS9eIz8vLG89L14jWzAtOUEtRl17OH0kLyxyPS9eI1swLTlBLUZdezZ9JC8sYT0vXiMoWzAtOUEtRl0pKFswLTlBLUZdKShbMC05QS1GXSkkLyxzPS9eIyhbMC05QS1GXSkoWzAtOUEtRl0pKFswLTlBLUZdKShbMC05QS1GXSkkLzt0Lm5vcm1hbGl6ZUNvbG9ySGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZT0oZSsiIikudG9VcHBlckNhc2UoKS5yZXBsYWNlKG4sIiMiKSxvLnRlc3QoZSk/ZTpyLnRlc3QoZSk/ZSsiRkYiOmEudGVzdChlKT9lLnJlcGxhY2UoYSwiIyQxJDEkMiQyJDMkM0ZGIik6cy50ZXN0KGUpP2UucmVwbGFjZShzLCIjJDEkMSQyJDIkMyQzJDQkNCIpOm51bGx9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDM4KS5maW5kUGFyZW50O3Qub3Blbj1pKDEpLnByb3RlY3QoIm9wZW4iLGZ1bmN0aW9uKGUpe3ZhciB0PWkoNTgpLk1yYWlkSGVscGVycy5pc0F2YWlsYWJsZSgpO2lmKCJzdHJpbmciPT10eXBlb2YgZSl0P2koNTgpLk1yYWlkSGVscGVycy5vcGVuKHdpbmRvdyxlKTp3aW5kb3cub3BlbihlLCJfYmxhbmsiKTtlbHNlIGlmKCFlLmRlZmF1bHRQcmV2ZW50ZWQmJnQpe3ZhciBvPW4oZS50YXJnZXQsZnVuY3Rpb24oZSl7cmV0dXJuImEiPT09ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9LCEwKTtvJiYoaSg1OCkuTXJhaWRIZWxwZXJzLm9wZW4od2luZG93LG8uaHJlZiksZS5wcmV2ZW50RGVmYXVsdCgpKX19KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG4sbz0xMDA7dC5nZXRQcmV2ZW50TWlzc0NsaWNrc1NjcmlwdD1mdW5jdGlvbigpe3JldHVybiBufHwobj1bIjxzY3IiLCdpcHQ+InVzZSBzdHJpY3QiOygnLGkoMzExKS5wcmV2ZW50Q2xpY2tzLCIpKGRvY3VtZW50LCIsbywiKTwvc2NyIiwiaXB0PiJdLmpvaW4oIiIpKX0sdC5wcmV2ZW50TWlzc0NsaWNrcz1mdW5jdGlvbihlLHQpe2UmJmkoMzExKS5wcmV2ZW50Q2xpY2tzKGUsdHx8byl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFkZERldGVybWluYXRpb25GbGFnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9LHQuY3JlYXRlQmxvY2tWaXNpYmlsaXR5Q29uZmlybWVyPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZWxlbWVudCxvPWUuYXV0b3N0YXJ0LHI9dm9pZCAwPT09b3x8byxhPWUuY29uZmlybU9uSG92ZXIscz12b2lkIDA9PT1hfHxhLGw9ZS5vblZpc2libGUsYz1lLmRhdGFTb3VyY2UsdT1lLnN0cmF0ZWd5LGQ9W3tkZWxheTpCb29sZWFuKGMpP2MuZ2V0VmlzaWJpbGl0eVRpbWUoKTp2b2lkIDAsb25Db25maXJtOmwsY29uZmlybU9uSG92ZXI6c31dO2lmKEJvb2xlYW4oYykpe3ZhciBwPWMuZ2V0U2V0dGluZ3MoKTtCb29sZWFuKHAubXJjSW1wcmVzc2lvbikmJmQucHVzaCh7ZGVsYXk6MWUzLG9uQ29uZmlybTpmdW5jdGlvbihlLG4pe2koNzgpLnNlbmRQaXhlbCh0LmFkZERldGVybWluYXRpb25GbGFnKHAubXJjSW1wcmVzc2lvbixuKSl9LGNvbmZpcm1PbkhvdmVyOnN9KSxpKDYwKS5pc0FycmF5KHAubXJjSW1wcmVzc2lvbnMpJiZpKDUpLmZvckVhY2gocC5tcmNJbXByZXNzaW9ucyxmdW5jdGlvbihlKXtkLnB1c2goe2RlbGF5OjFlMyxvbkNvbmZpcm06ZnVuY3Rpb24obixvKXtpKDc4KS5zZW5kUGl4ZWwodC5hZGREZXRlcm1pbmF0aW9uRmxhZyhlLG8pKX19KX0pfXJldHVybiBuZXcoaSg4NykuVmlzaWJpbGl0eUNvbmZpcm1lcikoe2VsZW1lbnQ6bixhdXRvc3RhcnQ6cixzdHJhdGVneTp1fHxpKDEyMCkuR2VuZXJhbFN0cmF0ZWd5LmZhY3RvcnksaW50ZXJ2YWw6MTAwLGNvbmZpcm1hdGlvbnM6ZH0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zaG91bGRTaG93QWR0dW5lPWZ1bmN0aW9uKGUpe2lmKGUuaXNJbk92ZXJsYXkmJmUuaXNJbk92ZXJsYXkoKSlyZXR1cm4hMTt2YXIgdD1pKDU4KS5NcmFpZEhlbHBlcnMuZ2V0TXJhaWQoKTtyZXR1cm4hKGUuaXNTU1AmJmUuaXNTU1AoKSYmKHQmJiIzLjAiPT09dC5nZXRWZXJzaW9uKCl8fGUuZ2V0U2V0dGluZ3MmJmUuZ2V0U2V0dGluZ3MoKS5oaWRlQWR0dW5lSW5Tc3ApKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0sbz1pKDE2NSkuZG93bnNjYWxlLHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS90Pj0xLjZ9O2Z1bmN0aW9uIGEoZSx0KXtpZih0aGlzLl9kb3duc2NhbGVSYXRpbz10PzI6MSwhKDAsaSg2MCkuaXNBcnJheSkoZSkpdGhyb3cgbmV3IEVycm9yKCJQaWN0dXJlOiBcdTA0M2ZcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDM1IFx1MDQzY1x1MDQzMFx1MDQ0MVx1MDQ0MVx1MDQzOFx1MDQzMiIpO2lmKCFlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlBpY3R1cmU6IFx1MDQzZlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2ZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0M2VcdTA0MzkgXHUwNDNjXHUwNDMwXHUwNDQxXHUwNDQxXHUwNDM4XHUwNDMyIik7dGhpcy5faW1hZ2VzPSgwLGkoMTQpLm1hcCkoZSx0aGlzLl9jcmVhdGVEb3duc2NhbGVkLHRoaXMpfWEucHJvdG90eXBlPXtnZXRGaXR0aW5nOmZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBhPXRoaXMscz12b2lkIDAsbD0oMCxpKDIyNikuZ2V0RG93bmxpbmspKCk7cmV0dXJuIG89b3x8MCwhciYmLTEhPT1sJiZsPC40JiYocj0xLjUpLCgwLGkoNSkuZm9yRWFjaCkodGhpcy5faW1hZ2VzLGZ1bmN0aW9uKGkpe3ZhciBsPW4oe30saSksYz1lO3ImJihsLndpZHRoKj1yLGwuaGVpZ2h0Kj1yKSxsLndpZHRoL2wuaGVpZ2h0Pj0xLjYmJihjPWUrZSpvKSxsPWEuX2Rvd25zY2FsZShsLGMsdCxlKSxzJiYhYS5faXNGaXR0aW5nQmV0dGVyKGwscyl8fChzPWwpfSx0aGlzKSwyPT09dGhpcy5fZG93bnNjYWxlUmF0aW8mJnRoaXMuX3Vwc2NhbGUocyxlLHQsdGhpcy5fZG93bnNjYWxlUmF0aW8pLGRlbGV0ZSBzLmFyZWEsc30sZ2V0QWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ltYWdlc30sX2NyZWF0ZURvd25zY2FsZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9TnVtYmVyKGVbMV0pLGk9TnVtYmVyKGVbMl0pLG49KGVbM118fHt9KVsic21hcnQtY2VudGVyIl18fHt4OnQvMix5OmkvMix3OjAsaDowfTtyZXR1cm57c3JjOmVbMF0sd2lkdGg6TWF0aC5mbG9vcih0L3RoaXMuX2Rvd25zY2FsZVJhdGlvKSxoZWlnaHQ6TWF0aC5mbG9vcihpL3RoaXMuX2Rvd25zY2FsZVJhdGlvKSxpc1dpZGU6cih0LGkpLHNtYXJ0Q2VudGVyOnt4Om4ueC90LHk6bi55L2ksd2lkdGg6bi53L3QsaGVpZ2h0Om4uaC9pfX19LF9pc0ZpdHRpbmdCZXR0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hcmVhLnZpc2libGU+dC5hcmVhLnZpc2libGV8fGUuYXJlYS52aXNpYmxlPT09dC5hcmVhLnZpc2libGUmJmUuYXJlYS5vcmlnaW5hbDx0LmFyZWEub3JpZ2luYWx9LF9kb3duc2NhbGU6ZnVuY3Rpb24oZSx0LGkscil7ZT1uKHthcmVhOntvcmlnaW5hbDplLndpZHRoKmUuaGVpZ2h0fX0sZSksdD10fHxlLndpZHRoLGk9aXx8ZS5oZWlnaHQ7dmFyIGE9byhlLHt3aWR0aDp0LGhlaWdodDppfSk7cmV0dXJuKGU9bih7fSxlLGEpKS5hcmVhLnZpc2libGU9TWF0aC5taW4ocixlLndpZHRoKSpNYXRoLm1pbihpLGUuaGVpZ2h0KSxlfSxfdXBzY2FsZTpmdW5jdGlvbihlLHQsaSxuKXt2YXIgbz1NYXRoLm1pbih0L2Uud2lkdGgsaS9lLmhlaWdodCxuKTtvPjEmJihlLndpZHRoPU1hdGgucm91bmQoZS53aWR0aCpvKSxlLmhlaWdodD1NYXRoLnJvdW5kKGUuaGVpZ2h0Km8pKX19LGEuaXNXaWRlPXIsZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucHJvcHM9e30sdGhpcy5zZXRQcm9wcyhuKG4oe30sdGhpcy5kZWZhdWx0cygpKSxlKSl9cmV0dXJuIGUuc2xpY2VCaXRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaSgzNDIpLnNsaWNlQml0cyhlLHQsbil9LGUucHJvdG90eXBlLmRlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJue319LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplKCkudG9TdHJpbmcoKX0sZS5wcm90b3R5cGUuc2V0UHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gaSgyNykuaXNPYmplY3QoZSkmJmkoNSkuZm9yRWFjaCh0aGlzLmdldFRlbXBsYXRlKCksZnVuY3Rpb24oaSl7dmFyIG49aVsxXTtuJiZlLmhhc093blByb3BlcnR5KG4pJiYodC5wcm9wc1tuXT1lW25dKX0sdGhpcyksdGhpc30sZS5wcm90b3R5cGUuZ2V0UHJvcHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSx0aGlzLnByb3BzKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3KDAsdGhpcy5jb25zdHJ1Y3RvcikodGhpcy5wcm9wcyl9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj0oZT10aGlzLmdldFRlbXBsYXRlKCksdD10aGlzLnByb3BzLGkoMTQpLm1hcChlLGZ1bmN0aW9uKGUpe3ZhciBpPWVbMF0sbj1lWzFdO3JldHVybltpLG4mJnRbbl18fG51bGxdfSkpO3JldHVybiBpKDM0Mikuam9pbkJpdHMobil9LGUucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUuc2xpY2VCaXRzKHRoaXMuc2VyaWFsaXplKCksdCxpKX0sZX0oKTt0LkFic3RyYWN0VGVzdHRhZz1vfSwsZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKCl7cmV0dXJuW1s0LCJtYXJrZXIiXSxbNixudWxsXSxbMSwiaXNJZnJhbWUiXSxbMSwiaXNBcHAiXSxbMSwiaXNTU1AiXSxbMSxudWxsXSxbMSwiaXNGdWxsc2NyZWVuIl0sWzEsImhhc01yYWlkIl0sWzE1LG51bGxdLFsyLG51bGxdLFszLG51bGxdLFsxLCJob25leXBvdCJdLFsxLG51bGxdLFsxLCJhbXAiXSxbMTAsImNvZGVWZXIiXSxbMSwiYWRibG9jayJdLFszLCJhZGZveGV4cCJdXX0sdC5wcm90b3R5cGUuZGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57bWFya2VyOmkoMzQwKS5nZXRNYXJrZXJJc1ZhbGlkU3RhdChpKDEzOCkuUFJPRFVDVF9NQVJLRVJTLlJUQiksY29kZVZlcjppKDUzKS5nZXRSZXZpc2lvbk5vKCksYWRibG9jazohMCxhbXA6ITEsaXNJZnJhbWU6aSg4MykuaXNJbklmcmFtZSh3aW5kb3cpLGhhc01yYWlkOmkoMzQxKS5oYXNNcmFpZCgpLGlzU1NQOmkoMTYpLmNoZWNrQnVuZGxlVHlwZShpKDE2KS5idW5kbGVUeXBlcy5TU1ApfX0sdH0oaSgxODYpLkFic3RyYWN0VGVzdHRhZyk7dC5SdGJUZXN0dGFnPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPW5ldyBSZWdFeHAoImV4cGVyaW1lbnQtaWQ9KFxcZCspIik7dC5nZXRFeHBlcmltZW50SWQ9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93LmxvY2F0aW9uKTtmb3IodmFyIHQ9W2Uuc2VhcmNoLGUuaGFzaF0saT0iIixvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb10ubWF0Y2gobik7aWYociYmclsxXSl7aT1yWzFdO2JyZWFrfX1yZXR1cm4gTnVtYmVyKGkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcmVmaXhlcz1bIiIsIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdLHQuY3NzUHJlZml4ZXM9WyIiLCItd2Via2l0LSIsIi1tcy0iLCItbW96LSIsIi1vLSJdfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFkZERlbGltaXRlcj1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIHQmJjAhPT1lLmluZGV4T2YodCkmJihlPXQrZSksaSYmZS5zbGljZSgtaS5sZW5ndGgpIT09aSYmKGUrPWkpLGV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJlbW92ZURlbGltaXRlcj1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIHQmJjA9PT1lLmluZGV4T2YodCkmJihlPWUucmVwbGFjZSh0LCIiKSksaSYmZS5zbGljZSgtaS5sZW5ndGgpPT09aSYmKGU9ZS5zbGljZSgwLC1pLmxlbmd0aCkpLGV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gaSgxOTQpLnNlcnZlckVuY29kZUVuYWJsZWQoaSgxMSkuY29uZmlnLmZuKT9pKDExKS5jb25maWcuZm4uZGVjb2RlVXJsKGUpOmV9LHQuaXNFbmNvZGVkPWZ1bmN0aW9uKGUpe3JldHVybiEhaSgxOTQpLnNlcnZlckVuY29kZUVuYWJsZWQoaSgxMSkuY29uZmlnLmZuKSYmaSgxMSkuY29uZmlnLmZuLmlzRW5jb2RlZFVybChlKX0sdC5lbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMTk0KS5zZXJ2ZXJFbmNvZGVFbmFibGVkKGkoMTEpLmNvbmZpZy5mbik/aSgxMSkuY29uZmlnLmZuLmVuY29kZVVybChlKTplfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5zZXJ2ZXJFbmNvZGVFbmFibGVkPWZ1bmN0aW9uKGUpe3JldHVybiEhQm9vbGVhbihlKSYmaSg3KS5pc0Z1bmN0aW9uKGUuZW5jb2RlQ1NTKSYmaSg3KS5pc0Z1bmN0aW9uKGUuZW5jb2RlVXJsKSYmaSg3KS5pc0Z1bmN0aW9uKGUuZGVjb2RlVXJsKSYmaSg3KS5pc0Z1bmN0aW9uKGUuaXNFbmNvZGVkVXJsKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCbG9ja1R5cGVzOntWRVJUSUNBTDoidmVydGljYWwiLEhPUklaT05UQUw6Imhvcml6b250YWwiLEdSSUQ6ImdyaWQiLFZLOiJ2ayIsUk9XOiJyb3ciLENPTVBBQ1Q6ImNvbXBhY3QiLElOVEVSTkFMOiJpbnRlcm5hbCJ9LEJvcmRlclR5cGVzOntOT05FOiJub25lIixCTE9DSzoiYmxvY2siLEFEOiJhZCIsQ09MTEFQU0U6ImNvbGxhcHNlIn19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnNldD1mdW5jdGlvbihlLHQsbil7aWYoIWkoMjcpLmlzT2JqZWN0KGUpKXJldHVybiBlO2Zvcih2YXIgbz1lLHI9dC5zcGxpdCgiLiIpLGE9ci5wb3AoKSxzPTAsbD1yO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdLHU9ZVtjXTtlPWkoMjcpLmlzT2JqZWN0KHUpP3U6ZVtjXT17fX1yZXR1cm4gZVthXT1uLG99fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJldGhyb3dFcnJvcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0sMCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wLGk9YXJndW1lbnRzLmxlbmd0aDt0PGk7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIG49QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxpO3QrKylmb3IodmFyIHI9YXJndW1lbnRzW3RdLGE9MCxzPXIubGVuZ3RoO2E8czthKyssbysrKW5bb109clthXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWVtb2l6ZVNpbmdsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgaSxvPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSksaT10LnBvcCgpO2lmKCFpfHwwPT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJtZW1vaXplU2luZ2xlIG5lZWQgYXQgbGVhc3QgMiBmdW5jdGlvbnMgYXMgYXJnIik7cmV0dXJue3ByZXBhcmVyczp0LHJlc29sdmVyOml9fShlKSxyPW8ucmVzb2x2ZXIsYT1vLnByZXBhcmVycyxzPW51bGwsbD1udWxsO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtpZihzJiZzLmV2ZXJ5KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGVbaV09PT10fSkpcmV0dXJuIGk7dmFyIG49YS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGUpfSk7aWYobCYmbC5ldmVyeShmdW5jdGlvbihlLHQpe3JldHVybiBuW3RdPT09ZX0pKXJldHVybiBzPWUsaTt2YXIgbz1yLmFwcGx5KHZvaWQgMCxuKTtyZXR1cm4gcz1lLGw9bixpPW8sb319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDI4NSkuaXNTaGFkb3dFbmFibGVkLG89aSgyOCk7ZnVuY3Rpb24gcihlLHQpe3QmJm4oKXx8KHQ9aSg4MCkuZ2V0SGVhZCh3aW5kb3cpKTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBvLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksZSYmby5zZXRBdHRyaWJ1dGUoIm5vbmNlIixlKSx0LmFwcGVuZENoaWxkKG8pLG99dmFyIGE9W107dC5nZXRTdHlsZXNDb250YWluZXI9ZnVuY3Rpb24oZSx0KXt0JiZuKCl8fCh0PWkoODApLmdldEhlYWQod2luZG93KSk7Zm9yKHZhciBvPW51bGwscz0wO3M8YS5sZW5ndGg7cysrKWlmKGFbc10ucGFyZW50PT09dCl7bz1hW3NdLmNvbnRhaW5lcjticmVha31yZXR1cm4gb3x8KG89cihlLHQpKSxhLnB1c2goe3BhcmVudDp0LGNvbnRhaW5lcjpvfSksb30sdC5hcHBlbmRTdHlsZT1mdW5jdGlvbihlLHQsaSl7ZT1vLmVuY29kZVN0eWxlKGUpO3ZhciBuPXIodCxpKTtyZXR1cm4gbi5pbm5lckhUTUwrPSIgIitlLG59fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzT3BlcmFNaW5pPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dmFyIHQ9ZS5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xIT09dC5pbmRleE9mKCJPcGVyYSBNaW5pIil8fCgtMSE9PXQuaW5kZXhPZigiOyB3dikiKSYmLTEhPT10LmluZGV4T2YoIiBPUFIvIil8fC0xIT09dC5pbmRleE9mKCIgT1BpT1MvIikpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc1NhZmFyaT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWkoODEpLmdldFVzZXJBZ2VudChlKS50b0xvd2VyQ2FzZSgpO3JldHVybi0xIT09dC5pbmRleE9mKCJzYWZhcmkiKSYmLTE9PT10LmluZGV4T2YoImNocm9tZSIpJiYtMT09PXQuaW5kZXhPZigiYW5kcm9pZCIpJiYtMT09PXQuaW5kZXhPZigicGhhbnRvbWpzIikmJiFpKDQ1NCkuZ2V0SXNUaXplbihlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0SXNZYUJyb3dzZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksL1lhQnJvd3Nlci8udGVzdChpKDgxKS5nZXRVc2VyQWdlbnQoZSkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5oc2xUb1JnYj1mdW5jdGlvbihlLHQsaSl7dmFyIG4sbztpZihlLz0zNjAsaS89MTAwLDA9PSh0Lz0xMDApKXJldHVybltuPTI1NSppLG4sbl07Zm9yKHZhciByLGE9MippLShvPWk8LjU/aSooMSt0KTppK3QtaSp0KSxzPVswLDAsMF0sbD0wO2w8MztsKyspKHI9ZSsxLzMqLShsLTEpKTwwJiZyKysscj4xJiZyLS0sbj02KnI8MT9hKzYqKG8tYSkqcjoyKnI8MT9vOjMqcjwyP2ErKG8tYSkqKDIvMy1yKSo2OmEsc1tsXT0yNTUqbjtyZXR1cm4gc319LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0Um9vdE5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRSb290Tm9kZTtpZihpKDcpLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbChlKTtmb3IodmFyIG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO3JldHVybiBufX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlWyJOT05FIl09MF09Ik5PTkUiLGVbZVsiSU5WSVNJQkxFIl09MV09IklOVklTSUJMRSIsZVtlWyJPTkVfUElYRUwiXT0yXT0iT05FX1BJWEVMIn0odC5Ib25leXBvdHx8KHQuSG9uZXlwb3Q9e30pKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG4sbyxyLGEscz0xMDshZnVuY3Rpb24oZSl7ZVsiRElTUExBWSJdPSJkaXNwbGF5IixlWyJWSVNJQklMSVRZIl09InZpc2liaWxpdHkifShufHwobj17fSkpLGZ1bmN0aW9uKGUpe2VbIk5PTkUiXT0ibm9uZSIsZVsiQkxPQ0siXT0iYmxvY2sifShvfHwobz17fSkpLGZ1bmN0aW9uKGUpe2VbIkhJRERFTiJdPSJoaWRkZW4ifShyfHwocj17fSkpLGZ1bmN0aW9uKGUpe2VbIklNUE9SVEFOVCJdPSJpbXBvcnRhbnQifShhfHwoYT17fSkpLHQuaXNDb21wdXRlZERpc3BsYXlOb25lPWZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKVtuLkRJU1BMQVldPT09by5OT05FfSx0LmlzU3R5bGVEaXNwbGF5Tm9uZT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobi5ESVNQTEFZKT09PW8uTk9ORSxpPWUuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuLkRJU1BMQVkpPT09YS5JTVBPUlRBTlQ7cmV0dXJuIHQmJml9LHQuY2hlY2tTdHlsZUFwcGx5aW5nPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24odCxpKXt2YXIgbD1lLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobi5ESVNQTEFZKSxjPWUuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuLkRJU1BMQVkpLHU9ZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG4uVklTSUJJTElUWSk7aWYobCE9PW8uQkxPQ0spe3ZhciBkPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuLkRJU1BMQVkpPT09by5CTE9DSyYmZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG4uRElTUExBWSk9PT1hLklNUE9SVEFOVCYmd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSlbbi5ESVNQTEFZXT09PW8uQkxPQ0t9O2Uuc3R5bGUuc2V0UHJvcGVydHkobi5ESVNQTEFZLG8uQkxPQ0ssYS5JTVBPUlRBTlQpLGQoKT8oZS5zdHlsZS5zZXRQcm9wZXJ0eShuLlZJU0lCSUxJVFksci5ISURERU4pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlJiZkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGUpKXt2YXIgbz1kKCk7ZS5zdHlsZS5zZXRQcm9wZXJ0eShuLkRJU1BMQVksbCxjKSxlLnN0eWxlLnNldFByb3BlcnR5KG4uVklTSUJJTElUWSx1KSx0KG8pfWVsc2UgaSgpfSxzKSk6dCghMSl9ZWxzZSBpKCl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0V2luZG93TG9jYXRpb249ZnVuY3Rpb24oZSl7aWYoZSYmZS5sb2NhdGlvbil7dmFyIHQ9ZS5sb2NhdGlvbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC50b1N0cmluZz90LnRvU3RyaW5nKCk6dC5ocmVmfHwiIn1yZXR1cm4iIn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuaXNEZXRlcm1pbmVkPSExfXJldHVybiBlLmZhY3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGV9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5nZXRJc1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZX0oKTt0LkR1bW15U3RyYXRlZ3k9bn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgzOTkpLG89TWF0aC5wb3coMiwtMTQ5KSxyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuYXJncz1lLHRoaXMuaXNEZXRlcm1pbmVkPSEwLHRoaXMuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7dmFyIGk9ZVswXS5pbnRlcnNlY3Rpb25SYXRpbz49dC5vYnNlcnZlci50aHJlc2hvbGRzWzBdO3QuYXJncy5jYWxsYmFjayhpKX0sdGhpcy50aHJlc2hvbGQ9TWF0aC5tYXgobyx0aGlzLmFyZ3MucG9ydGlvbiksdGhpcy5vYnNlcnZlcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodGhpcy5jYWxsYmFjayx7dGhyZXNob2xkOnRoaXMudGhyZXNob2xkfSl9cmV0dXJuIGUuZmFjdG9yeT1mdW5jdGlvbih0KXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyP251bGw6InRocmVzaG9sZHMiaW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIucHJvdG90eXBlJiZ0LmVsZW1lbnQ/bmV3IGUodCk6bnVsbH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5hcmdzLmVsZW1lbnQpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCl9LGUucHJvdG90eXBlLmdldElzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiBuLmlzSW5WaWV3cG9ydCh0aGlzLmFyZ3MuZWxlbWVudCx0aGlzLnRocmVzaG9sZCl9LGV9KCk7dC5JbnRlcnNlY3Rpb25TdHJhdGVneT1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz0oKG49e30pW2koOTcpLlZJU0lCSUxJVFlfQ1JJVEVSSUEuWUFdPTIxMDAsbltpKDk3KS5WSVNJQklMSVRZX0NSSVRFUklBLk1SQ109MWUzLG4pO3QuZ2V0RGVsYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDM2KSxzPWkoMjQyKSxsPWkoNTE5KSxjPWkoMTApLHU9aSgzMCksZD1hLnN1cHBvcnQudG91Y2gscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQuZ2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3JldHVybiJfdG91Y2hfIitkfSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1hZHR1bmUiLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5vbk1vdW50PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5zaG91bGRSZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcm9wcy5oaWRlfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9ImF1dGgud2ktZmkucnUiPT09bG9jYXRpb24uaG9zdD8iX2Rpc2FibGUtY2xpY2stYXJlYSI6IiIsaT10aGlzLmJfKHRoaXMucHJvcHNbImNsYXNzIl0sdGhpcy5iXygpLHRoaXMucHJvcHMubW9kLHQuZ2V0Q2xhc3NlcygpLGUpO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmksb25DbGljazp0aGlzLm9uQ2xpY2t9LHRoaXMucmVuZGVyQnV0dG9uKCkpfSx0LnByb3RvdHlwZS5lbmFibGVUb29sdGlwPWZ1bmN0aW9uKCl7dGhpcy5yb290Q29tcG9uZW50LnJlbW92ZUNsYXNzKHRoaXMuYl8oIl9vcGVuIikpfSx0LnByb3RvdHlwZS5kaXNhYmxlVG9vbHRpcD1mdW5jdGlvbigpe3RoaXMucm9vdENvbXBvbmVudC5hZGRDbGFzcyh0aGlzLmJfKCJfb3BlbiIpKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZUFkdHVuZSgiY2xpY2s6YWR0dW5lIikscy5vbkFkdHVuZUNsaWNrKCl9LHQucHJvdG90eXBlLnRvZ2dsZUFkdHVuZT1mdW5jdGlvbihlKXt2YXIgdD17YWR2SWQ6dGhpcy5wcm9wcy5hZElkfTt0aGlzLmZpcmVFdmVudChlLHQpLHRoaXMucHJvcHMub25DbGljayYmdGhpcy5wcm9wcy5vbkNsaWNrKHQpfSx0LnByb3RvdHlwZS5yZW5kZXJCdXR0b249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5pc0xhYmVsP3JbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dGhpcy5iXygiX19sYWJlbCIpLG9uQ2xpY2s6dGhpcy5vbkNsaWNrfSx1LmkxOG4oIkhJREUiLHRoaXMucHJvcHMubGFuZ3VhZ2UpKTpyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJ1dHRvbiIsY2xhc3M6dGhpcy5iXygiX19idXR0b24iKX0sclsiZGVmYXVsdCJdLmNyZWF0ZShsLkFkdHVuZUljb24se2lzVG91Y2g6ZCxsYW5ndWFnZTp0aGlzLnByb3BzLmxhbmd1YWdlLG1vZDp0aGlzLnByb3BzLm1vZCxzaXplOnRoaXMucHJvcHMuc2l6ZX0pKX0sdH0oYyk7dC5BZHR1bmU9cH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtdG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjAgNHB4O21heC13aWR0aDoxMjBweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuOCk7Ym9yZGVyLXJhZGl1czoxcHg7dmlzaWJpbGl0eTpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS4iLGUuaWQsIiAueWFwLXRvb2x0aXBfX2Fycm93e3Bvc2l0aW9uOmFic29sdXRlO3RvcDozcHg7cmlnaHQ6LTZweDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NnB4IDAgNnB4IDZweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzMzMztib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgcmdiYSgwLDAsMCwuOCl9LiIsZS5pZCwiIC55YXAtdG9vbHRpcF9fdGV4dHtwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojZmZmO2xldHRlci1zcGFjaW5nOi4wNGVtO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOm5vbmV9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWkoMTApLHM9aSg3KSxsPWkoNTIwKSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5jYXRjaEV2ZW50PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1mZWVkYmFjay1tZW51Iix0aGlzLmlzRmVlZGJhY2tWaXNpYmxlPUJvb2xlYW4odGhpcy5wcm9wcy5pc1Zpc2libGUpLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3RoaXMuZmVlZGJhY2tDb21wb25lbnQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImZlZWRiYWNrIil9LHQucHJvdG90eXBlLm9uTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnNldFZpc2liaWxpdHkodGhpcy5pc0ZlZWRiYWNrVmlzaWJsZSl9LHQucHJvdG90eXBlLm9uUmVjZWl2ZWRGZWVkYmFjaz1mdW5jdGlvbihlKXt0aGlzLnJvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy5iXygiX3JlY2VpdmVkIikpLHMuaXNGdW5jdGlvbih0aGlzLnByb3BzLm9uUmVjZWl2ZWRGZWVkYmFjaykmJnRoaXMucHJvcHMub25SZWNlaXZlZEZlZWRiYWNrKGUpfSx0LnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5zZXRWaXNpYmlsaXR5KCEwKX0sdC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuc2V0VmlzaWJpbGl0eSghMSl9LHQucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRmVlZGJhY2tWaXNpYmxlfSx0LnByb3RvdHlwZS5maXRTaXplPWZ1bmN0aW9uKCl7dGhpcy5mZWVkYmFja0NvbXBvbmVudC51cGRhdGVGb3JTaXplKHRoaXMuaXNGZWVkYmFja1Zpc2libGUpfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyxpPXRoaXMucHJvcHM7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZShlKCksaVsiY2xhc3MiXSx0aGlzLm1vZCksb25DbGljazp0LmNhdGNoRXZlbnQsb25Nb3VzZUVudGVyOnQuY2F0Y2hFdmVudH0sclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX3NsaWRlIil9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19mb3JtIil9LHJbImRlZmF1bHQiXS5jcmVhdGUobC5BYnVzZU1lc3NhZ2Use3Jlc291cmNlSWQ6ImZlZWRiYWNrIixhYnVzZVVybDppLmFidXNlVXJsLGRpcmVjdFVybDppLmRpcmVjdFVybCxsYW5ndWFnZTppLmxhbmd1YWdlfSkpKSl9LHQucHJvdG90eXBlLnNldFZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5iXygiX3Zpc2libGUiKSxpPXRoaXMucm9vdENvbXBvbmVudDt0aGlzLmlzRmVlZGJhY2tWaXNpYmxlPWUsZT9pLmFkZENsYXNzKHQpOmkucmVtb3ZlQ2xhc3ModCl9LHR9KGEpO3QuRmVlZGJhY2tNZW51PWN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1pKDE1MSkpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTt2YXIgcj13aW5kb3cuWWE9d2luZG93LllhfHx7fTtyLmhhc093blByb3BlcnR5KCJfX2lzU2VudCIpfHwoci5fX2lzU2VudD0hMSk7dmFyIGE9W107ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCxuKXt2YXIgcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGEubGVuZ3RoO3QrKylpZihhW3RdLmNvbnRhaW5lcj09PWUpcmV0dXJuIGFbdF07dmFyIGk9e2NvbnRhaW5lcjplLHRpbWVTdGFydDpEYXRlLm5vdygpfTtyZXR1cm4gYS5wdXNoKGkpLGl9KHQpLGw9RGF0ZS5ub3coKS1zLnRpbWVTdGFydDwxNmUzPzFlMzo1ZTM7aSgzOCkuaXNPdmVybGFpZCh0KT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSh0LG4pfSxsKTooZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0KyspaWYoYVt0XT09PWUpe2Euc3BsaWNlKHQsMSk7YnJlYWt9fShzKSxmdW5jdGlvbihlKXtyLl9faXNTZW50fHwoci5fX2lzU2VudD0hMCksKDAsb1siZGVmYXVsdCJdKShlKX0obikpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc05hdGl2ZVNlbmRCZWFjb25TdXBwb3J0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMzcpLmNoZWNrTmF0aXZlQ29kZShlLm5hdmlnYXRvci5zZW5kQmVhY29uKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSJfJCIuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiJfJGludmFsaWRfIitlK259O3QuUkVDT1ZFUl9QQVJBTVM9e3NlbnNvck5hbWU6bygic2Vuc29yX25hbWUiKSxsYWJlbEtleTpvKCJsYWJlbF9rZXkiKSxsYWJlbFZhbHVlOm8oImxhYmVsX3ZhbHVlIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRvcExvY2F0aW9uRGF0YT1mdW5jdGlvbihlKXt2YXIgdD0iIixuPSIiO3JldHVybiBlJiZpKDUzNikuZ2V0UGFyZW50TG9jYXRpb25zRGF0YShlKS5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgaT1lLmxvY2F0aW9uLG89ZS5yZWZlcnJlcjt0PXR8fGksbj1ufHxvfSkse2xvY2F0aW9uOnQscmVmZXJyZXI6bn19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzSW5TZWN1cmVJRnJhbWU9aSg1NDApLmlzSW5TZWN1cmVJRnJhbWUoKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYXJlbnRGcmllbmRseUlGcmFtZXM9aSgzMjcpLmdldFBhcmVudEZyaWVuZGx5SUZyYW1lcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNoYWRvd1Jvb3RUZXh0PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUsInNoYWRvd1Jvb3QiKTtpZihlJiZlLmdldCl7dmFyIHQ9ZS5nZXQudG9TdHJpbmcoKTtpZigtMT09PXQuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpKXJldHVybiB0fXJldHVybiIifX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5ldmVyeT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKCF0KGVbaV0saSxlKSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNJbmplY3RJbkZyYW1lcz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXdpbmRvdyk7Zm9yKHZhciBuPVt0LkhUTUxGcmFtZUVsZW1lbnQsdC5IVE1MSUZyYW1lRWxlbWVudCx0LkhUTUxPYmplY3RFbGVtZW50XSxvPTA7bzxuLmxlbmd0aDtvKyspaWYobltvXSYmbltvXS5wcm90b3R5cGUpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobltvXS5wcm90b3R5cGUsImNvbnRlbnRXaW5kb3ciKTtpZihyJiZyLmdldCYmIWkoMzcpLmNoZWNrTmF0aXZlQ29kZShyLmdldCkmJmUmJi0xIT09ci5nZXQudG9TdHJpbmcoKS5pbmRleE9mKGUpKXJldHVybiEwfXJldHVybiExfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWkoMykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTtmdW5jdGlvbiByKGUsdCl7dmFyIGk9e307Zm9yKHZhciBuIGluIGUpdC5pbmRleE9mKG4pPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKGlbbl09ZVtuXSk7cmV0dXJuIGl9dmFyIGE9aSg1NjkpLmdldEJsb2NrLHM9KDAsaSg0NikuZ2V0T2JqZWN0S2V5cykoaSg5OCkuYWRhcHRpdmUwNDE4QmxvY2tzKSxsPUFycmF5LmlzQXJyYXkocyksYz0wO2ZvcihzPWw/czpzW1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgdTtpZihsKXtpZihjPj1zLmxlbmd0aClicmVhazt1PXNbYysrXX1lbHNle2lmKChjPXMubmV4dCgpKS5kb25lKWJyZWFrO3U9Yy52YWx1ZX12YXIgZD11LHA9aSg5OCkuYWRhcHRpdmUwNDE4QmxvY2tzW2RdLGY9KHAubGltaXQscihwLFsibGltaXQiXSkpO2koMjI5KS5BU1NPQ0lBVEVEX0JMT0NLU1tkXT1baSg2NSkuQURBUFRJVkVfMDQxOCxmXX12YXIgaD1pKDApLmF1Z21lbnQoT2JqZWN0LHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixvLHIscyl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOnt9LGM9dC5mb3JtYXQubmFtZSx1PWkoMjI5KS5BU1NPQ0lBVEVEX0JMT0NLU1tjXVsxXTt0aGlzLmRhdGFTb3VyY2U9ZSx0aGlzLl9yZW5kZXJUb05vZGU9KDAsaSg1MSkuZ2V0Q29udGFpbmVyKShpKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIjIituKSxyKSx0aGlzLnJlbmRlclRvPW47dmFyIGQ9e2Jsb2NrSWQ6byxibG9ja05hbWU6YyxibG9ja1NldHRpbmdzOnUsaXNUdXJibzp3aW5kb3cuWUFfVFVSQk9fUEFHRVN9LHA9KDAsaSg3MDgpLnN3aXRjaEZvcm1hdCkoZCxlLHQpLGY9cC5zZWxlY3RlZEJsb2NrO3U9cC5uZXdCbG9ja1NldHRpbmdzLHRoaXMuZGF0YVNvdXJjZS5zZXRBY3R1YWxGb3JtYXQoaSg2NSlbZi5uYW1lXS5pZCk7dmFyIGg9YShmKSxnPWguYXN5bmMsXz1oLm1vZHVsZSx5PWguaXNPbGQ7Z3x8KDAsaSgyKS5zZXRCbG9ja0RhdGEpKGUuZ2V0VW5pcXVlSWQoKSx7cHJvZHVjdDppKDIpLkJsb2NrUmVuZGVyUHJvZHVjdHMuQ29tcG9uZW50RGlyZWN0U3luY30pO3ZhciBtPVtdO2cmJm0ucHVzaChfKSxlLmlzRnVsbHNjcmVlbigpJiYoZ3x8bS5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKF8pfSksbS5wdXNoKGkoMTU2KS5sb2FkRnVsbHNjcmVlbkNvbnRyb2xsZXIpKSxlLmlzSW50ZXJzY3JvbGxlcigpJiYoZ3x8bS5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKF8pfSksbS5wdXNoKGkoMjMwKS5sb2FkSW50ZXJzY3JvbGxlckNvbnRyb2xsZXIpKTt2YXIgYj1tLmxlbmd0aD9pKDcxNikuQXN5bmNCbG9jazpfO3RoaXMuX2lzQXN5bmM9Qm9vbGVhbihtLmxlbmd0aCksdGhpcy5pc09sZEJsb2NrPXksdGhpcy5ibG9jaz10aGlzLmlzT2xkQmxvY2smJiFnP25ldyBiKGUsdCxuLG8scixzLGwpOm5ldyBiKHtkZXBlbmRlbmNpZXM6bSxpc09sZDp5LGJsb2NrSWQ6byxibG9ja05hbWU6YyxyZW5kZXJUb05vZGU6dGhpcy5fcmVuZGVyVG9Ob2RlLHJlbmRlclRvOm4sZGF0YVNvdXJjZTplLHNldHRpbmdzOmkoMCkuZXh0ZW5kKHQsdSksbm9uY2U6cixwYWdlTnVtYmVyOnMscmVuZGVyUGFyYW1zOmwsZW5jb2RlU3R5bGVzOiEwfSl9LGdldFJlYWxCbG9jazpmdW5jdGlvbihlKXt0aGlzLl9pc0FzeW5jP3RoaXMuYmxvY2suZ2V0UmVhbEJsb2NrKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSk6ZSh0aGlzLmJsb2NrKX0sY29uZmlybVZpc2liaWxpdHk6ZnVuY3Rpb24oKXt0aGlzLmJsb2NrLmNvbmZpcm1WaXNpYmlsaXR5KCl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLmJsb2NrLmRlc3Ryb3k/dGhpcy5ibG9jay5kZXN0cm95KCk6dGhpcy5ibG9jay5kZXN0cnVjdG9yKCksKDAsaSgyNSkuY2xlYXJNYXJrcykodGhpcy5kYXRhU291cmNlLmdldFVuaXF1ZUlkKCkpfSxyZW5kZXI6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhU291cmNlLmlzSW50ZXJzdGl0aWFsJiYoMCxpKDE1OCkuaW5pdE1yYWlkQ2xvc2VCdXR0b24pKHRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSx0aGlzLl9pc0FzeW5jP3RoaXMuYmxvY2sucmVuZGVyVG8odGhpcy5fcmVuZGVyVG9Ob2RlLGUpOih0aGlzLmlzT2xkQmxvY2s/dGhpcy5ibG9jay5yZW5kZXIoKTp0aGlzLl9yZW5kZXJUb05vZGUmJm9bImRlZmF1bHQiXS5yZW5kZXJUb05vZGUodGhpcy5fcmVuZGVyVG9Ob2RlLHRoaXMuYmxvY2spLGUoKSl9LGdldE1haW5Db250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlclRvTm9kZX0sZ2V0RGF0YVNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFTb3VyY2V9LGdldFVzZWRBZHZzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmxvY2suZ2V0VXNlZEFkdnMoKX0saXNJblZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmxvY2suaXNJblZpZXdwb3J0KCl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJsb2NrLmlzVmlzaWJsZSgpfSxpc1Zpc2liaWxpdHlDb25maXJtZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ibG9jay5pc1Zpc2liaWxpdHlDb25maXJtZWQoKX0sc2xpZGVVcDpmdW5jdGlvbigpe3ZhciBlO3JldHVybihlPXRoaXMuYmxvY2spLnNsaWRlVXAuYXBwbHkoZSxhcmd1bWVudHMpfSxnZXRUZXN0dGFnOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRUZXN0dGFnKCl9fSk7ZS5leHBvcnRzPWh9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMzEpLm9uY2UoZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWkoNTgpLk1yYWlkSGVscGVycy5nZXRNcmFpZChlKTtpZighdClyZXR1cm47cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGUsdCl7aSg5KS5sb2dnZXIuZXJyb3IobmV3IEVycm9yKGUpLCJNUkFJRF9lcnJvcl8iK3QpfSksdH1jYXRjaChlKXtyZXR1cm59fSk7dC5nZXRNcmFpZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxuKGUpfSx0Lm9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49aSgxKS5wcm90ZWN0KCJNUkFJRF9MaXN0ZW5lcl8iK2UsdCk7cmV0dXJuIGkoNTgpLk1yYWlkSGVscGVycy5vbih3aW5kb3csZSxuKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWkoMTY5KSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQub25DaGFuZ2VCbG9ja1N0YXRlPWZ1bmN0aW9uKGUsaSl7bnVsbCE9PWkmJmkuc3RhdHVzPT09ZS5zdGF0dXN8fHQucHJvcHMuY2FsbGJhY2soZS5zdGF0dXMpJiZ0LmNvbnRleHQudW5DaGFuZ2VTdGF0ZSh0Lm9uQ2hhbmdlQmxvY2tTdGF0ZSl9LHR9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKGEuQmxvY2tDb250ZXh0LkNvbnN1bWVyLG51bGwsZnVuY3Rpb24odCl7cmV0dXJuIGUuY29udGV4dD10LmJsb2NrU3RhdGUsbnVsbH0pfSx0LnByb3RvdHlwZS5vbk1vdW50PWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0Lm9uQ2hhbmdlU3RhdGUodGhpcy5vbkNoYW5nZUJsb2NrU3RhdGUpfSx0LnByb3RvdHlwZS5vblVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQudW5DaGFuZ2VTdGF0ZSh0aGlzLm9uQ2hhbmdlQmxvY2tTdGF0ZSl9LHR9KHJbImRlZmF1bHQiXS5BYnN0cmFjdENvbXBvbmVudCk7dC5PbkNoYW5nZUJsb2NrU3RhdHVzPXN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbztPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVtlWyJVTktOT1dOIl09MF09IlVOS05PV04iLGVbZVsiRVRIRVJORVQiXT0xXT0iRVRIRVJORVQiLGVbZVsiV0lGSSJdPTJdPSJXSUZJIixlW2VbIkNFTExfMkciXT0zXT0iQ0VMTF8yRyIsZVtlWyJDRUxMXzNHIl09NF09IkNFTExfM0cifShufHwobj17fSkpLGZ1bmN0aW9uKGUpe2VbIkJMVUVUT09USCJdPSJibHVldG9vdGgiLGVbIkNFTExVTEFSIl09ImNlbGx1bGFyIixlWyJFVEhFUk5FVCJdPSJldGhlcm5ldCIsZVsiTUlYRUQiXT0ibWl4ZWQiLGVbIk5PTkUiXT0ibm9uZSIsZVsiT1RIRVIiXT0ib3RoZXIiLGVbIlVOS05PV04iXT0idW5rbm93biIsZVsiV0lGSSJdPSJ3aWZpIixlWyJXSU1BWCJdPSJ3aW1heCJ9KG98fChvPXt9KSksdC5nZXREb3dubGluaz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWUubmF2aWdhdG9yLmNvbm5lY3Rpb24saT12b2lkIDA9PT10P3t9OnQ7aWYoIm51bWJlciI9PXR5cGVvZiBpLmRvd25saW5rKXJldHVybiBpLmRvd25saW5rO2lmKCJudW1iZXIiPT10eXBlb2YgaS5kb3dubGlua01heClyZXR1cm4gaS5kb3dubGlua01heDtpZigic3RyaW5nIj09dHlwZW9mIGkudHlwZXx8Im51bWJlciI9PXR5cGVvZiBpLnR5cGUpc3dpdGNoKGkudHlwZSl7Y2FzZSBvLkJMVUVUT09USDpyZXR1cm4gMztjYXNlIG4uQ0VMTF8yRzpyZXR1cm4uMzg0O2Nhc2Ugbi5DRUxMXzNHOmNhc2Ugby5DRUxMVUxBUjpyZXR1cm4gMjtjYXNlIG8uV0lNQVg6cmV0dXJuIDM3O2Nhc2Ugby5OT05FOnJldHVybiAwO2Nhc2Ugbi5FVEhFUk5FVDpjYXNlIG8uRVRIRVJORVQ6Y2FzZSBuLldJRkk6Y2FzZSBvLldJRkk6Y2FzZSBvLk1JWEVEOnJldHVybiAxMDtjYXNlIG4uVU5LTk9XTjpjYXNlIG8uVU5LTk9XTjpjYXNlIG8uT1RIRVI6fXJldHVybi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVDb21wb3NpdGlvbnNCeVRyZWU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIGUubGVuZ3RoJiZmdW5jdGlvbiBlKGksbil7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciByPWlbb107aWYobnVsbD09PXIpYnJlYWs7dmFyIGE9clswXSxzPXJbMV0sbD1yWzJdLGM9bi5jb25jYXQoW2Esc10pO3QucHVzaChjKSxsJiZlKGwsYyl9fShlLFtdKSx0fSx0LmNhbGN1bGF0ZUVsZW1lbnRzU2l6ZXNCeVRyZWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gaSgyNzQpLnRyYXZlcnNlQnJlYWR0aChlLGZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lKXJldHVybltdO3ZhciBpPWVbMF0sbz1lWzJdLHI9ZVszXTtpZih2b2lkIDA9PT1uW2ldKXt2YXIgYT10KGkpO25baV09YSx2b2lkIDAhPT1yJiZudWxsIT09YSYmKG5baV09cil9cmV0dXJuIG98fFtdfSksbn0sdC5jb21wb3NlU2V0cz1mdW5jdGlvbihlLHQsaSl7dm9pZCAwPT09aSYmKGk9MS8wKTtmb3IodmFyIG49W10scj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1vKGVbcl0sdCk7bnVsbCE9PWEmJmEudG90YWxTaXplPD1pJiZuLnB1c2goYSl9cmV0dXJuIG4uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvdGFsV2VpZ2h0LWUudG90YWxXZWlnaHR9KX07dmFyIG49MWU1O2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIGk9MCxvPTAscj1bXSxhPTA7YTxlLmxlbmd0aDthKz0yKXt2YXIgcz1lW2FdLGw9TnVtYmVyKGVbYSsxXSksYz10W3NdO2lmKG51bGw9PT1jKXJldHVybiBudWxsO3IucHVzaChzKSxvKz1jLGkrPWMrbCpufXJldHVybntuYW1lOnIuam9pbigiICIpLGVsZW1lbnRzOnIsdG90YWxXZWlnaHQ6aSx0b3RhbFNpemU6b319ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgbj1lW2ldLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHI9bltvXS5uYW1lO2lmKC0xPT09dC5pbmRleE9mKHIpKXtmb3IodmFyIHM9ITAsbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG51bGw9PT1hKGVbbF0scikpe3M9ITE7YnJlYWt9cyYmdC5wdXNoKHIpfX1yZXR1cm4gdH1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5uYW1lPT09dClyZXR1cm4gZVtpXTtyZXR1cm4gbnVsbH10LmZlZXRUb1JhbmdlPWZ1bmN0aW9uKGUsdCxpKXtlPWUuc29ydChmdW5jdGlvbihlLG8pe3ZhciByPU1hdGguY2VpbChlLnRvdGFsV2VpZ2h0L24pLGE9TWF0aC5jZWlsKG8udG90YWxXZWlnaHQvbiktcjtyZXR1cm4gby50b3RhbFNpemU+aSYmZS50b3RhbFNpemU+aT9lLnRvdGFsV2VpZ2h0LW8udG90YWxXZWlnaHQ6by50b3RhbFNpemU+aT8tMTplLnRvdGFsU2l6ZT5pPzE6by50b3RhbFNpemU8dCYmZS50b3RhbFNpemU8dD9hfHxvLnRvdGFsV2VpZ2h0LWUudG90YWxXZWlnaHQ6by50b3RhbFNpemU8dD8tMTplLnRvdGFsU2l6ZTx0PzE6YXx8ZS50b3RhbFdlaWdodC1vLnRvdGFsV2VpZ2h0fSk7Zm9yKHZhciBvPVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTthLnRvdGFsU2l6ZTw9aSYmby5wdXNoKGEpfXJldHVybiBlLmxlbmd0aD9vLmxlbmd0aD9vOltlWzBdXTplfSx0LmdldE5hbWVzT2ZJbnRlcnNlY3RpbmdTZXRzPXIsdC5maW5kQ29tcG9zaXRpb25CeU5hbWU9YSx0LmdldEV4Y2x1ZGVkRWxlbWVudHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gaSg0NykuZm9yT3duKHQsZnVuY3Rpb24odCxvKXtpKDEzMykuaW5jbHVkZXMoZSxvKXx8bi5wdXNoKG8pfSksbn0sdC5zdW1TaXplcz1mdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBpKDQ3KS5mb3JPd24oZSxmdW5jdGlvbihlLGkpe251bGwhPT1lJiYodCs9ZSl9KSx0fSx0LnN1bUVsZW1lbnRzU2l6ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wO3JldHVybiBpKDUpLmZvckVhY2goZSxmdW5jdGlvbihlKXt2YXIgaT10KGUpO251bGwhPT1pJiYobis9aSl9KSxufTt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN0b3JhZ2U9e30sdGhpcy5yZXN1bHRzPXt9fXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7KHRoaXMuc3RvcmFnZVtlXXx8KHRoaXMuc3RvcmFnZVtlXT1bXSkpLnB1c2godCl9LGUucHJvdG90eXBlLmNhbGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVzdWx0c1tlXXx8KHRoaXMucmVzdWx0c1tlXT1yKHRoaXMuc3RvcmFnZVtlXXx8W10pKSx0aGlzLnJlc3VsdHNbZV19LGV9KCk7dC5JbnRlcnNlY3RpbmdNYW5hZ2VyPXN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KSxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wLGk9YXJndW1lbnRzLmxlbmd0aDt0PGk7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIG49QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxpO3QrKylmb3IodmFyIHI9YXJndW1lbnRzW3RdLGE9MCxzPXIubGVuZ3RoO2E8czthKyssbysrKW5bb109clthXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPWkoMzQpLHM9aSgzKSxsPWkoNjkpLGM9aSg2MSksdT1pKDQ0KSxkPWkoNzMpLHA9aSgzNSksZj1pKDM0NiksaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnNldENvZXJjZXI9ZnVuY3Rpb24oKXt0aGlzLmNvZXJjZVNpemV8fCh0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplKX0sdC5wcm90b3R5cGUuc2V0QWR2TW9kPWZ1bmN0aW9uKCl7dGhpcy5tb2Q9InRvd2VyIn0sdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5zZXRBZHZNb2QoKSx0aGlzLnNldENvZXJjZXIoKSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKSx0aGlzLmluaXRJbWFnZSgpLHRoaXMucHJvcHMuY29udGV4dC5zZXRQYXJhbXMoe3dhcm5pbmdIZWlnaHQ6dGhpcy5nZXRXYXJuaW5nTWluSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuW2ZdfSx0LnByb3RvdHlwZS5nZXRBZHR1bmVPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJue21vZDpbdGhpcy5pbWFnZVNpemU/Il9ibGFjay13aGl0ZSI6IiIsdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlPyJfc2hhcnAiOiIiXS5qb2luKCIgIil9fSx0LnByb3RvdHlwZS5pbml0SW1hZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpZHRoLHQ9dGhpcy5taW5IZWlnaHQ7dGhpcy5nZXRJbWFnZVNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6ZSxoZWlnaHQ6ZS91Lk1JTl9JTUFHRV9SQVRJT319O3ZhciBpPXRoaXMuZ2V0UGljdHVyZSgpO2lmKGkpe3ZhciBuPWkud2lkdGgsbz1pLmhlaWdodCxyPXUuY29lcmNlSW1hZ2VSYXRpbyhNYXRoLm1heChuL28sMiplL3QsNC8zKSk7dGhpcy5wcm9wcy5jb250ZXh0LnNldFBhcmFtcyh7aW1hZ2VNaW5IZWlnaHQ6ZS9yLGltYWdlTWF4SGVpZ2h0OmUvdS5NSU5fSU1BR0VfUkFUSU99KX19LHQucHJvdG90eXBlLmNhbGNGb250U2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJuIGEuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDJlNCwxMSwyNGU0LDE4KSh0KmkpfSx0LnByb3RvdHlwZS5jcmVhdGVSZXNvdXJjZVRyZWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS50aXRsZUZvbnRSYW5nZTtmdW5jdGlvbiB0KHQsaSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVyblsidGl0bGUtc2l6ZS0iK2UsdCxpXX0pfXZhciBpPVtbInNpdGUtbGlua3MiLDEsW1siY2FsbG91dHMiLDFdXV1dLG49W1siYm9keSIsMSxpXV07cmV0dXJuIHIoW1siaW1hZ2UiLDAscih0KDcsW1siYnV0dG9uLW1lZGl1bSIsNCxuXSxbImJ1dHRvbi1zbWFsbCIsMyxuXSxbImJ1dHRvbi1tZWRpdW0tcHJpY2UiLDYsbl0sWyJidXR0b24tc21hbGwtcHJpY2UiLDUsbl0sWyJib2R5IiwxLGldXSksW3RoaXMuaXNDb21wYWN0V2FybmluZygpP251bGw6WyJ0aXRsZS1mbG9hdCIsNixbWyJidXR0b24tbWVkaXVtIiwzLG5dLFsiYnV0dG9uLXNtYWxsIiwyLG5dLFsiYnV0dG9uLW1lZGl1bS1wcmljZSIsNCxuXSxbImJ1dHRvbi1zbWFsbC1wcmljZSIsMyxuXSxbImJvZHkiLDEsaV1dLDBdXSldXSx0KDEsW1siYnV0dG9uLW1lZGl1bSIsMyxuXSxbImJ1dHRvbi1zbWFsbCIsMixuXSxbImJ1dHRvbi1tZWRpdW0tcHJpY2UiLDUsbl0sWyJidXR0b24tc21hbGwtcHJpY2UiLDQsbl0sWyJib2R5IiwxLGldXSkpfSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYl8saT10aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGUsbj10aGlzLnJlc29sdmVNb2RzKCksbz0hdGhpcy5pbWFnZVNpemUmJmk7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDplLGNsYXNzOnQuYXBwbHkodm9pZCAwLHIoWyJfX2NvbnRlbnQiXSxuKSl9LGk/dGhpcy5yZW5kZXJDdXJyZW5jeUxvZ28oKTp0aGlzLnJlbmRlckxvZ28oInN1YnRsZSIsITApLHRoaXMuaW1hZ2VTaXplfHxpP251bGw6dGhpcy5yZW5kZXJMb2dvU3R1YigpLHRoaXMucmVuZGVySW1hZ2UoKSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fZGV0YWlscyIpfSx0aGlzLnJlbmRlclRpdGxlQWxsU2l6ZXMobz8iY2xpcHBlZCI6IiIpLHRoaXMuaW1hZ2VTaXplP3RoaXMucmVuZGVyVGl0bGUoe2NsYXNzOnQoIl9fdGl0bGUiLCJfX3RpdGxlX2Zsb2F0IikscmVzb3VyY2VJZDoidGl0bGUtZmxvYXQifSk6bnVsbCx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlclNpdGVMaW5rcygpLHRoaXMucmVuZGVyQ2FsbG91dHMoKSx0aGlzLnJlbmRlckJ1dHRvbnMoKSx0aGlzLndhcm5pbmc/dGhpcy5yZW5kZXJBZ2UoKTpudWxsKSx0aGlzLmlzQ29tcGFjdFdhcm5pbmcoKT9udWxsOnRoaXMucmVuZGVyV2FybmluZygpLHRoaXMud2FybmluZz9udWxsOnRoaXMucmVuZGVyQWdlKCkpfSx0LnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ289ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5wcm9wcy5hZHYuYWJ1c2VVcmw/IiI6Im5vLW9mZnNldCJdLGk9e2hhc0JnOkJvb2xlYW4odGhpcy5pbWFnZVNpemUpfTtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyQ3VycmVuY3lMb2dvLmNhbGwodGhpcyx0LGkpfSx0LnByb3RvdHlwZS5yZW5kZXJJbWFnZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLmltYWdlU2l6ZSxpPXRoaXMucHJvcHMuYWR2LG49aS5pbWFnZXMsbz1pLmFkZEluZm87aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCksYT1yLmFuaW1hdGVkLGw9ci5hbmltYXRpb25Db3VudCxjPXsibWluLWhlaWdodCI6dC5taW5IZWlnaHQsIm1heC1oZWlnaHQiOnQubWF4SGVpZ2h0fTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZShwLk5ld0xpbmsse3Jlc291cmNlSWQ6ImltYWdlIixocmVmOnRoaXMucHJvcHMuYWR2LnVybCxjbGFzczplKCJfX2xpbmsiLCJfX2ltYWdlIiksc3R5bGU6Y30sc1siZGVmYXVsdCJdLmNyZWF0ZShkLkltYWdlQWRhcHRpdmUse2ltYWdlczpufHxvLmljb24sY29udGV4dDp0aGlzLnByb3BzLmNvbnRleHQsc21hcnRDZW50ZXI6ITAsYW5pbWF0aW9uOmEsYW5pbWF0aW9uQ291bnQ6bH0pLHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19pbWFnZS1pdGVtcyIpLHJlc291cmNlSWQ6ImltYWdlLWl0ZW1zIn0sdGhpcy5pc0NvbXBhY3RXYXJuaW5nKCk/dGhpcy5yZW5kZXJXYXJuaW5nKCJzdWJ0bGUiKTpudWxsKSx0aGlzLnJlbmRlckFwcEljb24oKSl9LHQucHJvdG90eXBlLnJlbmRlckJ1dHRvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5pc0J1dHRvblZpc2libGU7cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUobC5Db250YWluZXIsbnVsbCx0aGlzLnJlbmRlckJ1dHRvbk1lZGl1bSgpLHRoaXMucmVuZGVyQnV0dG9uTWVkaXVtUHJpY2UoKSxlP3RoaXMucmVuZGVyQnV0dG9uU21hbGwoKTp0aGlzLnJlbmRlckJ1dHRvbkRvbWFpbigpLHRoaXMucmVuZGVyQnV0dG9uU21hbGxQcmljZSgpKX0sdC5jb2VyY2VTaXplPXUuY3JlYXRlU2l6ZUNvZXJjZXIoe3dpZHRoOnttaW46MTU4LG1heDoxLzB9LGhlaWdodDp7bWluOjE1OCxtYXg6MS8wfSxyYXRpbzp7bWluOi4yNSxtYXg6dS5NQVhfSU1BR0VfUkFUSU99fSksdH0oYy5BZHZBZGFwdGl2ZUJhc2UpO3QuQWR2VG93ZXI9aH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWkoNjUpLHI9by5TSU5HTEVfVkVSVElDQUwsYT1vLlNJTkdMRV9IT1JJWk9OVEFMLHM9by5TSU5HTEVfSE9SSVpPTlRBTF9ZQU5FV1MsbD1vLkFEQVBUSVZFLGM9by5FTEFTVElDLHU9by5FTEFTVElDX1ZFUlRJQ0FMLGQ9by5QT0dPREFfR1JJRCxwPW8uRUxBU1RJQ19GSVhFRCxmPW8uRUxBU1RJQ19GSVhFRF9ZQSxoPW8uRUxBU1RJQ19GSVhFRF9QT0dPREEsZz1vLkVMQVNUSUNfRklYRURfU0VMRUNULF89by5QT1NURVJfVkVSVElDQUwseT1vLlBPU1RFUl9WRVJUSUNBTF9ZQU5FV1MsbT1vLlBPU1RFUl9IT1JJWk9OVEFMLGI9by5FWFRFTlNJQkxFX01PQklMRSx2PW8uTU9SREEsdz1vLk1VTFRJX0lOVEVSU1RJVElBTCx4PW8uUk1QX1ZJREVPLGs9by5PTERfTUFJTFJVX1ZFUlRJQ0FMLEM9by5NQUlMUlVfUExVR0lOLFM9by5NQUlMUlVfVkVSVElDQUwsTz1vLk1BSUxSVV9IT1JJWk9OVEFMLEk9by5PTERfTUFJTFJVX0hPUklaT05UQUwsQT1vLkFOSU1BVEVEX1NDUk9MTEFCTEVfTU9CSUxFLFQ9by5QSUNUVVJFX1NFQVJDSCxFPW8uUElDVFVSRV9TRUFSQ0hfMyxSPW8uUElDVFVSRV9TRUFSQ0hfRklYRUQsTT1vLkNVU1RPTV9CTE9DSyxQPW8uQkxPQ0tfMjQweDQwMF9NRURJQSxMPW8uQkxPQ0tfMzIweDQ4MF9NRURJQSxCPW8uQkxPQ0tfMzAweDUwMF9NRURJQSxOPW8uQkxPQ0tfMzAweDYwMF9NRURJQSxEPW8uWkVOLGo9by5ST1csej1vLkNPTVBBQ1QsRj1vLkJMT0NLX1JFU1BPTlNJVkVfTU9CSUxFLEg9by5CTE9DS18zMjB4NjcsVT1vLkFEQVBUSVZFXzA0MTgsVj1vLk1PVElPTixXPW8uT0xEX1ZLLEs9by5PTERfTkVXVkssRz1vLk9MRF9WRVJUSUNBTCxZPW8uUE9TVEVSX1YyX1ZFUlRJQ0FMLHE9by5QT1NURVJfVjJfSE9SSVpPTlRBTCxYPW8uUE9TVEVSX1YzLFo9by5TSU1QTEUsUT1vLkJJTExCT0FSRCwkPW8uQURBUFRJVkVfVjMsSj1vLlpFTl9DQVJPVVNFTCxlZT1vLlBPU1RFUl9DQVJPVVNFTCx0ZT1vLkFEQVBUSVZFX0NBUk9VU0VMLGllPXtyZXNpemVPYnNlcnZlcjohMSxza2luOiJwb3N0ZXIiLG1lYXN1cmVyOiJwb3N0ZXIiLGFkdk1pbldpZHRoOjE4NixhZHZNaW5IZWlnaHQ6MTkwLGNsaWNrYWJsZUJhY2tncm91bmQ6ITB9LG5lPVtYLG4obih7fSxpZSkse2xheW91dDoiaG9yaXpvbnRhbCJ9KV0sb2U9W1gsbihuKHt9LGllKSx7bGF5b3V0OiJ2ZXJ0aWNhbCJ9KV07ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIm1vdGlvbiI9PT1lP1tWLHtsaW1pdDoxfV06W2Ise2xpbmtzVW5kZXJsaW5lOiExfV19dmFyIGFlPXttZWFzdXJlcjoidmVydGljYWwiLGxheW91dDoidmVydGljYWwiLGFkdk1pblNxdWFyZToxMjY0MCxhZHZNaW5IZWlnaHQ6ODAsYm9yZGVyVHlwZTppKDYpLkJPUkRFUl9UWVBFUy5BRH07dC5BU1NPQ0lBVEVEX0JMT0NLUz17cG9zdGVyVmVydGljYWwyOltZLHtncmlkOlsxLDldLHNob3dQaG9uZUJ1dHRvbjohMH1dLHBvc3Rlckhvcml6b250YWwyOltxLHtncmlkOls0LDFdLHNob3dQaG9uZUJ1dHRvbjohMH1dLG1vYmlsZTpbRyx7bGltaXQ6MX1dLHBvc3RlclZlcnRpY2FsOm9lLHBvc3Rlckhvcml6b250YWw6bmUsbmV3UG9zdGVyVmVydGljYWw6b2UsbmV3UG9zdGVySG9yaXpvbnRhbDpuZSxwb3N0ZXJWZXJ0aWNhbFlhbmV3czpbeSx7Z3JpZDpbMSw5XX1dLG9sZFBvc3Rlckhvcml6b250YWw6W20se2dyaWQ6WzQsMV0sc2hvd1Bob25lQnV0dG9uOiEwfV0sb2xkUG9zdGVyVmVydGljYWw6W18se2dyaWQ6WzEsOV0sc2hvd1Bob25lQnV0dG9uOiEwfV0sdmVydGljYWw6WyQsYWVdLHZlcnRpY2FsMDMxODpbJCxhZV0semVuOltELHt9XSxmbGF0Olt1LHtncmlkOlsxLDRdfV0saG9yaXpvbnRhbDpbYyx7Z3JpZDpbNiwxXX1dLGhvcml6b250YWwwMzE4OltVLHttZWFzdXJlcjoiaG9yaXpvbnRhbCIsYWR2TWluU3F1YXJlOjU1ZTMsYWR2VGl0bGVTaXplOiJzbWFsbCJ9XSxuZXdWZXJ0aWNhbDpbdSx7Z3JpZDpbMSw5XX1dLG5ld0hvcml6b250YWw6W2Mse2dyaWQ6WzYsMV19XSxuZXdHcmlkOltjLHtncmlkOlsyLDJdLGxpbWl0OjR9XSxvbGRWZXJ0aWNhbDpbRyx7Z3JpZDpbMSw5XX1dLG9sZEhvcml6b250YWw6W1Use21lYXN1cmVyOiJob3Jpem9udGFsIixhZHZNaW5TcXVhcmU6NTVlM31dLHlhVmVydGljYWw6W2Yse2dyaWQ6WzEsOV0sdGl0bGVGb250U2l6ZToyLGMxMW46e2ltYWdlT25SaWdodDohMH19XSx5YVBvZ29kYUhvcml6b250YWwzOltoLHtncmlkOlszLDFdLGxpbWl0OjMsd2lkdGg6NjY0LGhlaWdodDoyODB9XSx5YVBvZ29kYUhvcml6b250YWw0OltoLHtncmlkOls0LDFdLGxpbWl0OjQsd2lkdGg6NjY0LGhlaWdodDoyODB9XSx5YVBvZ29kYUdyaWQ6W2Qse2dyaWQ6WzIsMl0sbGltaXQ6NCx3aWR0aDo2MjAsaGVpZ2h0OjI4MCxjMTFuOntyZXZlcnNlRG9tYWluOiEwfX1dLG5ld0FkYXB0aXZlOltwLHt9XSxtZWRpYTpbUCx7fV0sIjMwMHgzMDAiOltnLHtncmlkOlsxLDRdLGxpbWl0OjQsd2lkdGg6MzAwLGhlaWdodDozMDB9XSwiMjQweDQwMCI6W2koNzA3KS5NRURJQV8yNDB4NDAwX0lTX05FV18yNDB4NDAwP1A6cix7d2lkdGg6MjQwLGhlaWdodDo0MDAsc2hvd1Bob25lQnV0dG9uOiEwfV0sIjMyMHg0ODAiOltMLHt3aWR0aDozMjAsaGVpZ2h0OjQ4MCxoaWRlQWR0dW5lSW5Tc3A6ITB9XSwiMzAweDUwMCI6W0Ise3dpZHRoOjMwMCxoZWlnaHQ6NTAwfV0sIjMyMHgxMDAiOltVLHt3aWR0aDozMDAsaGVpZ2h0OjUwMH1dLCIzMDB4NjAwIjpbTix7d2lkdGg6MzAwLGhlaWdodDo2MDB9XSwiNzI4eDkwIjpbYSx7d2lkdGg6NzI4LGhlaWdodDo5MH1dLCI3Mjh4OTAtZGVzaWduIjpbYSx7d2lkdGg6NzI4LGhlaWdodDo5MH1dLCIweDkwIjpbYSx7d2lkdGg6MCxoZWlnaHQ6OTB9XSwiMHg5MC15YW5ld3MiOltzLHt3aWR0aDowLGhlaWdodDo5MH1dLGFuaW1hdGVkU2Nyb2xsYWJsZU1vYmlsZTpbQSx7d2lkdGg6MCxoZWlnaHQ6MH1dLGV4dGVuc2libGVNb2JpbGU6cmUoImV4dGVuc2libGVNb2JpbGUiKSxvbGRNb3Rpb246cmUoIm9sZE1vdGlvbiIpLG1vdGlvbjpyZSgibW90aW9uIiksbWFpbHJ1VmVydGljYWwyOltTLHtsaW5rc1VuZGVybGluZTohMX1dLG1haWxydVZlcnRpY2FsOltrLHtsaW5rc1VuZGVybGluZTohMX1dLG1haWxydUhvcml6b250YWw6W0kse2xpbmtzVW5kZXJsaW5lOiExfV0sbWFpbHJ1SG9yaXpvbnRhbDI6W08se2xpbmtzVW5kZXJsaW5lOiExfV0sbW9kZXJuQWRhcHRpdmU6W2wse31dLG1vcmRhQXBwOlt2LHtsaW5rc1VuZGVybGluZTohMSxiZ0NvbG9yOiIjZmZmIix0aXRsZUNvbG9yOiIjMDAwIix0ZXh0Q29sb3I6IiMwMDAiLHVybENvbG9yOiIjMDAwIixob3ZlckNvbG9yOiIjMDAwIn1dLHJtcFZpZGVvOlt4LHtsaW1pdDoxfV0sbWFpbHJ1UGx1Z2luOltDLHt3aWR0aDowLGhlaWdodDowLGxpbmtzVW5kZXJsaW5lOiExfV0sIjMwMHgyNTAiOltSLHt3aWR0aDozMDAsaGVpZ2h0OjI1MCxsaW1pdDoxfV0scGljdHVyZVNlYXJjaDpbVCx7bGltaXQ6MX1dLHBpY3R1cmVTZWFyY2gzOltFLHtsaW1pdDoxfV0sIjMyMHg2NyI6W0gse2xpbWl0Ojd9XSwiMzIweDUwIjpbRix7bGltaXQ6MX1dLGN1c3RvbUJsb2NrOltNLHt9XSxyZXNwb25zaXZlTW9iaWxlOltGLHtsaW1pdDo3fV0scm93OltqLHtsaW1pdDoxfV0sbmV3Um93OltqLHtsaW1pdDoxLHRoZW1lOiJ5YW5kZXgifV0scm93TWFpbFJ1OltqLHtsaW1pdDoxLHRoZW1lOiJtYWlsIn1dLHJvd01haWxSdU9jdGF2aXVzOltqLHtsaW1pdDoxLHRoZW1lOiJtYWlsLXJ1LW9jdGF2aXVzIn1dLGNvbXBhY3Q6W3ose2xpbWl0OjF9XSwiMHg1MCI6W3ose2xpbWl0OjEsaGVpZ2h0OjUwfV0sYWRhcHRpdmUwNDE4OltVLHt9XSx2azpbVyx7fV0sbmV3Vms6W0sse31dLG11bHRpSW50ZXJzdGl0aWFsOlt3LHt9XSxhZGFwdGl2ZTpbVSx7bWVhc3VyZXI6ImFkYXB0aXZlIn1dLGdyaWQ6W1Use21lYXN1cmVyOiJncmlkIixsYXlvdXQ6ImdyaWQifV0sc2ltcGxlOltaLHtsaW1pdDoxfV0sYmlsbGJvYXJkOltRLHtsaW1pdDoxLG1lYXN1cmVyOiJiaWxsYm9hcmQifV0semVuQ2Fyb3VzZWw6W0ose2hlYWRlclBvc2l0aW9uOiJlYWNoIn1dLHBvc3RlckNhcm91c2VsOltlZSx7ZW5hYmxlQW5pbWF0aW9uOiExLGhlYWRlclBvc2l0aW9uOiJlYWNoIixjbGlja2FibGVCYWNrZ3JvdW5kOiEwfV0sYWRhcHRpdmVDYXJvdXNlbDpbdGUse2hlYWRlclBvc2l0aW9uOiJlYWNoIn1dfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sb2FkSW50ZXJzY3JvbGxlckNvbnRyb2xsZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG58fChuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2koNzE1KShmdW5jdGlvbih0KXtlKHQuaW50ZXJzY3JvbGxlckNvbnRyb2xsZXIpfSl9KSksZSYmbi50aGVuKGZ1bmN0aW9uKHQpe2UodCl9KSxufX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWkoMykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTtmdW5jdGlvbiByKGUpe3RoaXMuX2RhdGE9ZS5kYXRhfHx7fSx0aGlzLl9pc0FsdGVybmF0aXZlQ29kZT1Cb29sZWFuKHRoaXMuX2RhdGEmJnRoaXMuX2RhdGEucnRiJiZ0aGlzLl9kYXRhLnJ0Yi5kZWJ1ZyksdGhpcy5kYXRhU291cmNlPWUuZGF0YVNvdXJjZSx0aGlzLmJsb2NrSWQ9ZS5ibG9ja0lkLHRoaXMuX3Zpc2liaWxpdHlNYW5hZ2VyPWUudmlzaWJpbGl0eU1hbmFnZXIsdGhpcy5fbm9uY2U9ZS5ub25jZSx0aGlzLl9tYWluQ29udElkPSJ5YV9wYXJ0bmVyXyIrdGhpcy5ibG9ja0lkKyhlLnBhZ2VOdW1iZXI/Ii0iK2UucGFnZU51bWJlcjoiIik7dmFyIHQ9aSgyOCk7dGhpcy5fbWFpbkNvbnRJZD10LmdldEFsaWFzKHRoaXMuX21haW5Db250SWQpLHRoaXMuX2FkVXNhZ2VTdG9yYWdlPWUuYWRVc2FnZVN0b3JhZ2UsdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMSx0aGlzLl9wcm90ZWN0ZWQ9dGhpcy5kYXRhU291cmNlLmlzSFRNTDUoKSx0aGlzLl9iYXNlUGF0aD10aGlzLl9kYXRhLnJ0Yi5iYXNlUGF0aCx0aGlzLl9pc0Z1bGxzY3JlZW49dGhpcy5kYXRhU291cmNlLmlzRnVsbHNjcmVlbigpLHRoaXMuX2lzSW50ZXJzY3JvbGxlcj10aGlzLmRhdGFTb3VyY2UuaXNJbnRlcnNjcm9sbGVyKCksdGhpcy5faW5uZXJDb21wb25lbnRzPVtdLHRoaXMuX3N0b3BJZnJhbWVXaW5kb3dDaGVja2luZz1udWxsLGUucmVuZGVyUGFyYW1zJiYodGhpcy5fY29uZmlybUF0T25jZT1lLnJlbmRlclBhcmFtcy5jb25maXJtQXRPbmNlLHRoaXMuX2NvbmZpcm1CeUhhbmRsZXI9ZS5yZW5kZXJQYXJhbXMuY29uZmlybUJ5SGFuZGxlcix0aGlzLl9ob3Jpem9udGFsQWxpZ249ZS5yZW5kZXJQYXJhbXMuaG9yaXpvbnRhbEFsaWduKSx0aGlzLl90ZXN0dGFnPW5ldyhpKDE4OCkuUnRiVGVzdHRhZykoe2lzQXBwOnRoaXMuZGF0YVNvdXJjZS5pc0FwcCgpLGhvbmV5cG90OkJvb2xlYW4odGhpcy5kYXRhU291cmNlLmdldEhvbmV5cG90KCkpfSl9ci5wcm90b3R5cGU9e3JlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzOygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJCbG9ja1JlbmRlckluaXQpO3ZhciBuPXRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpO3RoaXMuX2hvcml6b250YWxBbGlnbj10aGlzLl9ob3Jpem9udGFsQWxpZ258fG4uaG9yaXpvbnRhbEFsaWduLHRoaXMuX2NvbnRhaW5lcj0oMCxpKDUxKS5nZXRDb250YWluZXIpKGUsdGhpcy5fbm9uY2UpLCJtb2Rlcm5BZGFwdGl2ZSI9PT1uLm5hbWUmJih0aGlzLl9ob3Jpem9udGFsQWxpZ249ITApLHRoaXMuZGF0YVNvdXJjZS5pc0ludGVyc3RpdGlhbCYmKDAsaSgxNTgpLmluaXRNcmFpZENsb3NlQnV0dG9uKSh0aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSk7dmFyIG89W107IW4uZGlzcGxheURlbGF5ZWR8fHRoaXMuX2lzRnVsbHNjcmVlbnx8dGhpcy5faXNJbnRlcnNjcm9sbGVyfHxvLnB1c2godGhpcy5fcmVuZGVyT25WaXNpYmxlKCkpLHRoaXMuX2lzRnVsbHNjcmVlbiYmby5wdXNoKGkoMTU2KS5sb2FkRnVsbHNjcmVlbkNvbnRyb2xsZXIpLHRoaXMuX2lzSW50ZXJzY3JvbGxlciYmby5wdXNoKGkoMjMwKS5sb2FkSW50ZXJzY3JvbGxlckNvbnRyb2xsZXIpLHRoaXMuZGF0YVNvdXJjZS5uZWVkTG9hZGluZ1NTUCgpJiZvLnB1c2godGhpcy5kYXRhU291cmNlLmxvYWRIdG1sKCkpO3ZhciByPURhdGUubm93KCksYT1mdW5jdGlvbigpe0RhdGUubm93KCktcj4yMDAmJigwLGkoMikuc3RvcExvZ2dpbmdUaW1lKSh0LmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSksdC5fcmVuZGVyKCl9O3JldHVybiBvLmxlbmd0aD9Qcm9taXNlLmFsbChvKS50aGVuKGEpOnZvaWQgYSgpfSxfcmVuZGVyT25WaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49KDAsaSgxKS5wcm90ZWN0KShpKDEpLlByb3RlY3RlZE5hbWVzLlJUQisiIGNvbnRhaW5lciB2aXNpYmxlIixmdW5jdGlvbigpe3QoKX0pO2UuX2NvbnRhaW5lclZpc2liaWxpdHlDb25maXJtZXI9bmV3KGkoODcpLlZpc2liaWxpdHlDb25maXJtZXIpKHtlbGVtZW50OmUuX2NvbnRhaW5lcixwb3J0aW9uOjAsY29uZmlybWF0aW9uczpbe2RlbGF5OjAsb25Db25maXJtOm59XX0pfSl9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZ1bGxzY3JlZW5TbG90O2UmJihkZWxldGUgZS5vbkNsb3NlLGUuY2xvc2UoKSk7dmFyIHQ9dGhpcy5pbnRlcnNjcm9sbGVyU2xvdDt0JiZ0LmRlc3Ryb3koKSx0aGlzLl9jbGVhckNvbXBvbmVudHMoKSx0aGlzLl9jb250YWluZXJWaXNpYmlsaXR5Q29uZmlybWVyJiZ0aGlzLl9jb250YWluZXJWaXNpYmlsaXR5Q29uZmlybWVyLnN0b3AoKSx0aGlzLl9jb250ZW50VmlzaWJpbGl0eUNoZWNrZXImJnRoaXMuX2NvbnRlbnRWaXNpYmlsaXR5Q2hlY2tlci5zdG9wKCksdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lciYmdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lci5zdG9wKCksdGhpcy5fc3RvcElmcmFtZVdpbmRvd0NoZWNraW5nJiYodGhpcy5fc3RvcElmcmFtZVdpbmRvd0NoZWNraW5nKCksdGhpcy5fc3RvcElmcmFtZVdpbmRvd0NoZWNraW5nPW51bGwpfSxfY2xlYXJDb21wb25lbnRzOmZ1bmN0aW9uKCl7aSgwKS5lYWNoKHRoaXMuX2lubmVyQ29tcG9uZW50cyxmdW5jdGlvbihlKXtlLmRlc3RydWN0b3I/ZS5kZXN0cnVjdG9yKCk6ZS5kZXN0cm95JiZlLmRlc3Ryb3koKX0pLHRoaXMuX2lubmVyQ29tcG9uZW50cz1bXX0sX3JlbmRlcjpmdW5jdGlvbigpeygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJCbG9ja1JlbmRlclN0YXJ0KSx0aGlzLl9pc0luUGFnZSgpP3RoaXMucmVuZGVySW5QYWdlKHRoaXMuX2NvbnRhaW5lcik6dGhpcy5kYXRhU291cmNlLmlzSW5saW5lU1NQKCk/dGhpcy5yZW5kZXJJbmxpbmUoKTp0aGlzLnJlbmRlckJsb2NrKCl9LHJlbmRlckJsb2NrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpO3RoaXMuX2lzRnVsbHNjcmVlbj8oMCxpKDE1NikubG9hZEZ1bGxzY3JlZW5Db250cm9sbGVyKShmdW5jdGlvbihuKXt2YXIgbz0oMCxpKDEyNSkuZ2V0RnVsbHNjcmVlblNldHRpbmdzKSh0KSxyPW4uY3JlYXRlU2xvdCh7Y2xvc2VCdXR0b25WaXNpYmlsaXR5VGltZW91dDpvLmNsb3NlQnV0dG9uVmlzaWJpbGl0eVRpbWVvdXR9KSxhPWkoMTMpLm5vb3A7ci5vblNob3c9ZnVuY3Rpb24oKXthPSgwLGkoMTU3KS5hZGRGdWxsc2NyZWVuTGlzdGVuZXJzKShyLm5vZGUsInJ0YiIpLHIuc3RhcnRDb3VudGRvd24oby5kdXJhdGlvbixmdW5jdGlvbigpe3IuY2xvc2UoKX0pLCgwLGkoMTU3KS5zZW5kVG9GdWxsc2NyZWVuTG9nKSh7ZXZlbnQ6InNob3ciLHR5cGU6InJ0YiJ9KX0sci5vbkNsb3NlPWZ1bmN0aW9uKCl7YSgpLGUuX29uQ2xvc2UoKX0sci5vbkNsaWNrQ2xvc2U9ZnVuY3Rpb24oKXsoMCxpKDE1Nykuc2VuZFRvRnVsbHNjcmVlbkxvZykoe2V2ZW50OiJjbGljay1jbG9zZSIsdHlwZToicnRiIn0pfSxlLl9jb250YWluZXI9ci5ub2RlLGUuZnVsbHNjcmVlblNsb3Q9cixlLnJlbmRlckJhbm5lcigpfSk6dGhpcy5faXNJbnRlcnNjcm9sbGVyPygwLGkoMjMwKS5sb2FkSW50ZXJzY3JvbGxlckNvbnRyb2xsZXIpKGZ1bmN0aW9uKGkpe3ZhciBuPXQuaW50ZXJzY3JvbGxlckFuaW1hdGlvbixvPXZvaWQgMD09PW58fG47ZS5pbnRlcnNjcm9sbGVyU2xvdD1pLmNyZWF0ZVNsb3Qoe25vZGU6ZS5fY29udGFpbmVyLG1lZGlhU2l6ZTplLmRhdGFTb3VyY2UuZ2V0U2l6ZSgpLGJnQ29sb3I6dC5pbnRlcnNjcm9sbGVyQmdDb2xvcixhbmltYXRlZDpvfSksZS5fY29udGFpbmVyPWUuaW50ZXJzY3JvbGxlclNsb3Qubm9kZSxlLnJlbmRlckJhbm5lcigpfSk6dGhpcy5yZW5kZXJCYW5uZXIoKX0scmVuZGVySW5QYWdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuX2RhdGEucnRiLG49dC52YXN0QmFzZTY0LHI9dC52YXN0LGE9dGhpcy5kYXRhU291cmNlLmdldFNpemUoKSxzPWFbMF0sbD1hWzFdLGM9dGhpcy5kYXRhU291cmNlLmdldFNldHRpbmdzKCkuYWRzZGtQbGF5ZXIsdT1baSg3MjApXTt0aGlzLl9pc0Z1bGxzY3JlZW4mJnUucHVzaChpKDE1NikubG9hZEZ1bGxzY3JlZW5Db250cm9sbGVyKSwoMCxpKDM0OCkubG9hZERlcGVuZGVuY2llcykodSkudGhlbihmdW5jdGlvbih0KXt2YXIgYT10WzBdLHU9dFsxXSxkPXZvaWQgMDtpZihlLl9pc0Z1bGxzY3JlZW4pe2Q9dS5jcmVhdGVTbG90KCksZS5mdWxsc2NyZWVuU2xvdD1kLGUuX2NvbnRhaW5lcj1kLm5vZGU7dmFyIHA9KDAsaSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KShlLl9jb250YWluZXIpO3M9cC53aWR0aCxsPXAuaGVpZ2h0LGQub25DbG9zZT1mdW5jdGlvbigpe3JldHVybiBlLl9vbkNsb3NlKCl9fWUuX3J0YkluUGFnZT1uZXcgYSh7dmFzdEJhc2U2NDpuLHZhc3Q6cix3aWR0aDpzLGhlaWdodDpsLGJsb2NrSWQ6ZS5ibG9ja0lkLHJlbmRlclRvTm9kZTplLl9jb250YWluZXIsbm9uY2U6ZS5fbm9uY2UsYmFja2dyb3VuZFNjYWxlOlsxLC0xXSxlbmNvZGVTdHlsZXM6ITAsc2V0dGluZ3M6ZS5kYXRhU291cmNlLmdldFNldHRpbmdzKCksZnVsbHNjcmVlblNsb3Q6ZCxvbkFkSW5pdDpmdW5jdGlvbigpe3JldHVybiBlLl9vblJlbmRlcigpfSxwbGF5ZXJDb25maWc6Y30pLG9bImRlZmF1bHQiXS5yZW5kZXJUb05vZGUoZS5fY29udGFpbmVyLGUuX3J0YkluUGFnZSksZS5fY3JlYXRlVmlzaWJpbGl0eUNvbmZpcm1hdGlvbihlLl9jb250YWluZXIsZS5fY29uZmlybUJ5SGFuZGxlcil9KVsiY2F0Y2giXShmdW5jdGlvbihlKXtyZXR1cm4gaSg5KS5sb2dnZXIuZXJyb3IoZSwiSW5QYWdlIGJ1bmRsZSBsb2FkaW5nIGVycm9yIil9KX0scmVuZGVySW5saW5lOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZGF0YVNvdXJjZS5nZXRIdG1sKCksbj10aGlzLmdldEJhc2VQYXRoKCkscj10aGlzLmRhdGFTb3VyY2UuZ2V0U2l6ZSgpLGE9bmV3KGkoNzIxKS5SdGJJbmxpbmUpKHtodG1sOnQsYmFzZVBhdGg6bixpZDp0aGlzLl9tYWluQ29udElkLGRhdGFTb3VyY2U6dGhpcy5kYXRhU291cmNlLG5vbmNlOnRoaXMuX25vbmNlLHdpZHRoOnJbMF0saGVpZ2h0OnJbMV0sZW5jb2RlU3R5bGVzOiEwLG9uRXJyb3I6ZnVuY3Rpb24odCl7dC5zdGFjaz1lLmRhdGFTb3VyY2UuZ2V0VXJsKCkrIiA6OiAiK3Quc3RhY2ssaSg5KS5sb2dnZXIuZXJyb3IodCwiU1NQSW5saW5lRXJyb3IiKSxlLl9jb250ZW50VmlzaWJpbGl0eUNoZWNrZXImJmUuX2NvbnRlbnRWaXNpYmlsaXR5Q2hlY2tlci5zdG9wKCl9fSk7b1siZGVmYXVsdCJdLnJlbmRlclRvTm9kZSh0aGlzLl9jb250YWluZXIsYSksdGhpcy5hZnRlclJlbmRlcihkb2N1bWVudC5ib2R5KSx0aGlzLl9vblJlbmRlcigpfSxyZW5kZXJCYW5uZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5kYXRhU291cmNlLmdldEh0bWwoKSxuPXRoaXMuZ2V0VXJsKCkscj10aGlzLmdldEJhc2VQYXRoKCksYT1uZXcoaSg3MjQpLlJ0YkJhbm5lcikoe2VuY29kZVN0eWxlczohMCxpZDp0aGlzLl9tYWluQ29udElkLHJlbmRlclRvTm9kZTp0aGlzLl9jb250YWluZXIsbm9uY2U6dGhpcy5fbm9uY2UsdXJsOm4saHRtbDp0LGJhc2VQYXRoOnIscHJvdGVjdDp0aGlzLl9wcm90ZWN0ZWQsZGF0YVNvdXJjZTp0aGlzLmRhdGFTb3VyY2UsdGVzdHRhZzp0aGlzLl90ZXN0dGFnLGFsdGVybmF0aXZlQ29kZTp0aGlzLl9pc0FsdGVybmF0aXZlQ29kZSxob3Jpem9udGFsQWxpZ246dGhpcy5faG9yaXpvbnRhbEFsaWduLG9uUmVhZHk6ZnVuY3Rpb24oKXtlLmFmdGVyUmVuZGVyKGUuX2NvbnRhaW5lcil9LG9uUmVuZGVyOmZ1bmN0aW9uKCl7ZS5fb25SZW5kZXIoKX0sb25FcnJvcjpmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU/dC5uYW1lOiJVbmtub3duUnRiQmxvY2tFcnJvciI7aSg5KS5sb2dnZXIuZXJyb3IodCxuKSxlLl9jb250ZW50VmlzaWJpbGl0eUNoZWNrZXImJmUuX2NvbnRlbnRWaXNpYmlsaXR5Q2hlY2tlci5zdG9wKCksZS5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMH19KTt0aGlzLl9pbm5lckNvbXBvbmVudHMucHVzaChhKSxvWyJkZWZhdWx0Il0ucmVuZGVyVG9Ob2RlKHRoaXMuX2NvbnRhaW5lcixhKX0saW5pdE1vdmVtZW50Q2hlY2tpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLmNvbnRlbnRXaW5kb3csbj1mdW5jdGlvbigpe3JldHVybiBjbGVhckludGVydmFsKG8pfSxvPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aSYmZS5jb250ZW50V2luZG93JiZpIT09ZS5jb250ZW50V2luZG93JiYobigpLHQoKSl9LDE1MCk7cmV0dXJuIG59LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKGUpeygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJNYW5hZ2VyQmxvY2tSZWFkeVJ0YiksKDAsaSg4NCkuc2VuZExhYmVsKSh0aGlzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSksdGhpcy5fY3JlYXRlVmlzaWJpbGl0eUNvbmZpcm1hdGlvbihlLHRoaXMuX2NvbmZpcm1CeUhhbmRsZXIpLHRoaXMuX2NyZWF0ZVZpc2liaWxpdHlDaGVja2VyKGUpLHRoaXMuX3Zpc2liaWxpdHlNYW5hZ2VyLnNlbmRXaW5Ob3RpY2UoKX0sZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhU291cmNlLmdldFVybCgpO2lmKGUpe3ZhciB0PXt9O3JldHVybiBpKDU0KS51cmxDb2RlVmVyc2lvbnMubWVkaWEmJih0Lm1jb2RldmVyPWkoNTQpLnVybENvZGVWZXJzaW9ucy5tZWRpYSksbmV3KGkoMjQpLlVybCkoe2hvc3Q6aSgwKS5hZGRQcm90b2NvbChlKSxwYXJhbXM6aSgwKS5leHRlbmQoe2NsaWNrX21hY3JvOnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpLmNsaWNrTWFjcm99LHQpfSkuZ2V0VXJsKCl9fSxnZXRCYXNlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXtjbGlja19tYWNybzp0aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKS5jbGlja01hY3JvLHNzcF9pZDp0aGlzLmRhdGFTb3VyY2UuZ2V0U1NQSWQoKX07aSg1NCkudXJsQ29kZVZlcnNpb25zLm1lZGlhJiYoZS5tY29kZXZlcj1pKDU0KS51cmxDb2RlVmVyc2lvbnMubWVkaWEpO3ZhciB0PXdpbmRvdy5sb2NhdGlvbi5ob3N0O3JldHVybiBuZXcoaSgyNCkuVXJsKSh7aG9zdDp0aGlzLl9wcm90ZWN0ZWQmJnRoaXMuX2Jhc2VQYXRoP3RoaXMuX2Jhc2VQYXRoOiJodHRwczovLyIrdCxwYXJhbXM6ZX0pLmdldFVybCgpfSxfY3JlYXRlVmlzaWJpbGl0eUNvbmZpcm1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPSgwLGkoNTEpLmdldFZpc2liaWxpdHlDb250YWluZXIpKGUpLG89KDAsaSgxKS5wcm90ZWN0KSgidmlzaWJpbGl0eSBjb25maXJtZXI6IHJ0YiIsdGhpcy5jb25maXJtVmlzaWJpbGl0eS5iaW5kKHRoaXMsbikpLHI9dGhpcy5kYXRhU291cmNlLmdldFNldHRpbmdzKCkucmVhY2g7dGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lcj0oMCxpKDE4MykuY3JlYXRlQmxvY2tWaXNpYmlsaXR5Q29uZmlybWVyKSh7ZWxlbWVudDpuLGF1dG9zdGFydDohdCxkYXRhU291cmNlOnRoaXMuZGF0YVNvdXJjZSxvblZpc2libGU6byxjb25maXJtT25Ib3Zlcjohcn0pLHRoaXMuX2NvbmZpcm1BdE9uY2UmJiF0JiYodGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMCx0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVyLmNvbmZpcm0oKSl9LF9jcmVhdGVWaXNpYmlsaXR5Q2hlY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0oMCxpKDcyKS5nZXROYXRpdmVKU09OKSgpLG49dGhpcy5kYXRhU291cmNlLmlzSW5saW5lU1NQKCk7dGhpcy5fY29udGVudFZpc2liaWxpdHlDaGVja2VyPW5ldyhpKDg3KS5WaXNpYmlsaXR5Q29uZmlybWVyKSh7cG9ydGlvbjowLGVsZW1lbnQ6ZSxvblZpc2liaWxpdHlDaGFuZ2U6ZnVuY3Rpb24obyl7dHJ5e3ZhciByPXQuc3RyaW5naWZ5KHthY3Rpb246InBjb2RlOiIrKG8/InZpc2libGUiOiJpbnZpc2libGUiKX0pO2lmKG4pd2luZG93LnBvc3RNZXNzYWdlKHIsIioiKTtlbHNle3ZhciBhPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoImlmcmFtZSIsZSk7YSYmYVswXSYmYVswXS5jb250ZW50V2luZG93JiZhWzBdLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UociwiKiIpfX1jYXRjaChlKXt9fX0pfSxjb25maXJtVmlzaWJpbGl0eTpmdW5jdGlvbihlLHQsbil7dGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMCx0aGlzLl92aXNpYmlsaXR5TWFuYWdlci5jb25maXJtKHt0ZXN0dGFnUHJvcHM6dGhpcy5fdGVzdHRhZy5nZXRQcm9wcygpLHJlbmRlclNpemU6dGhpcy5nZXRCbG9ja1NpemUoKSxleHRQYXJhbXM6e2NvbmZpcm1UaW1lOnQsY29uZmlybVJhdGlvOigwLGkoMTA1KS5nZXRWaXNpYmlsaXR5UmF0aW8pKGUpfX0sbil9LGlzVmlzaWJpbGl0eUNvbmZpcm1lZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkfSxpc0luVmlld3BvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuX21haW5Db250SWQpJiZpKDApLmRvbS5pc0luVmlld3BvcnQodGhpcy5fY29udGFpbmVyLGkoNikuUkVGUkVTSF9WSUVXUE9SVF9WSVNJQkxFX1BBUlQpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXImJnRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXIuZ2V0SXNWaXNpYmxlKCl9LF9pc0luUGFnZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEucnRiLHQ9KGU9dm9pZCAwPT09ZT97fTplKS52YXN0QmFzZTY0LGk9ZS52YXN0O3JldHVybiBCb29sZWFuKHR8fGkpfSxnZXRSdGJEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGEucnRifSxzbGlkZVVwOmZ1bmN0aW9uKGUpeygwLGkoMTEwKS5zbGlkZVVwKSh0aGlzLl9jb250YWluZXIsZSl9LGdldEJsb2NrU2l6ZTpmdW5jdGlvbigpe3JldHVybigwLGkoMTI5KS5nZXRFbGVtZW50UmVjdFNpemUpKHRoaXMuX2NvbnRhaW5lcil9LGdldFRlc3R0YWc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGVzdHRhZy50b1N0cmluZygpfSxfb25SZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2luaXRNZWFzdXJlcnMoKTt2YXIgdD10aGlzLmZ1bGxzY3JlZW5TbG90O3QmJnQuc2hvdygpO3ZhciBuPXRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCJpZnJhbWUiKTtuJiYhdGhpcy5fc3RvcElmcmFtZVdpbmRvd0NoZWNraW5nJiYodGhpcy5fc3RvcElmcmFtZVdpbmRvd0NoZWNraW5nPXRoaXMuaW5pdE1vdmVtZW50Q2hlY2tpbmcobixmdW5jdGlvbigpe2UuX3N0b3BJZnJhbWVXaW5kb3dDaGVja2luZz1udWxsLGUuZGVzdHJ1Y3RvcigpLCgwLGkoMikuc3RvcExvZ2dpbmdUaW1lKShlLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSk7ZS5yZW5kZXIoZS5fY29udGFpbmVyKX0pKX0sX2luaXRNZWFzdXJlcnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKS5tZWFzdXJlcnN8fHt9OygwLGkoNzMwKS5tZWFzdXJlQmxvY2spKHtjb250YWluZXI6dGhpcy5fY29udGFpbmVyLG5vbmNlOnRoaXMuX25vbmNlLGNvbmZpZzplfSl9LF9vbkNsb3NlOmZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuZnVsbHNjcmVlblNsb3QsdGhpcy5kZXN0cnVjdG9yKCl9fSxlLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kaWZmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoMjIpLmZpbHRlcihlLGZ1bmN0aW9uKGUpe3JldHVybiFpKDQ1KS5zb21lKHQsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10fSl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPTFlODt0LmdldENvbW1vblBhcmFtcz1mdW5jdGlvbihlKXt2YXIgdD17InRhcmdldC1yZWYiOmkoOTApLmdldFRhcmdldFJlZigpLnN1YnN0cigwLDUxMiksInBhZ2UtcmVmIjppKDkwKS5nZXRQYWdlUmVmKCkuc3Vic3RyKDAsNTEyKSxjaGFyc2V0OiJ1dGYtOCJ9LG89aSgxNzIpLmdldENvb2tpZShkb2N1bWVudCwiX3ltX3VpZCIpO28mJih0LmR1aWQ9aSgyOSkuZW5jb2RlKG8pKSxlLmV4cGVyaW1lbnRJZCYmKHRbImV4cGVyaW1lbnQtaWQiXT1TdHJpbmcoZS5leHBlcmltZW50SWQpKSxlLmJsb2NrSW1wSWQmJih0WyJpbXAtaWQiXT1lLmJsb2NrSW1wSWQpLGUubGFuZyYmKHQubGFuZz1lLmxhbmcpLGUucmVmcmVzaCYmKHQucmVmcmVzaD0iMSIpLGUuZ2VvJiYodFsicGFydG5lci1nZW8tbGF0Il09ZS5nZW8ubGF0LHRbInBhcnRuZXItZ2VvLWxvbmciXT1lLmdlby5sb25nKSxlLnBhcnRuZXJTdGF0SWQmJih0WyJwYXJ0bmVyLXN0YXQtaWQiXT1TdHJpbmcoZS5wYXJ0bmVyU3RhdElkKSksZS5kaXNhYmxlSGlnaGxpZ2h0fHwodFsiZW5hYmxlLWZsYXQtaGlnaGxpZ2h0Il09IjEiKSxlLmFkZGl0aW9uYWxCYW5uZXJzJiYodFsiYWRkaXRpb25hbC1iYW5uZXJzIl09ZS5hZGRpdGlvbmFsQmFubmVycyksZS50ZXN0dGFnJiYodFsidGVzdC10YWciXT1lLnRlc3R0YWcpO3ZhciByPWUuc3NTa2lwVG9rZW5MZW5ndGg7aWYocil7dmFyIGE9ci52YWx1ZSxzPXIuY3VzdG9tO2E+PTAmJih0WyJzcy1za2lwLXRva2VuLWxlbmd0aCJdPVN0cmluZyhhKSkscyYmKHRbImFsbG93LXJlcGVhdC1hZHMiXT1TdHJpbmcoMCkpfXRbImFkLXNlc3Npb24taWQiXT1pKDkxKS5nZXRTZXNzaW9uSWQoKSx0WyJ0YXJnZXQtaWQiXT1TdHJpbmcoLTI1NyZpKDQ4KS5nZXRSYW5kb21JbnQoMSxuKSk7dmFyIGw9aSg3NDMpLmdldFVhYXNDb25maWcoKTtsLnRlc3RJZHMmJiFpKDEyKS5nZXRZYSgpLnZlcnNpb25Gcm96ZW4mJih0WyJwY29kZS10ZXN0LWlkcyJdPWwudGVzdElkcyksZS51c2VTc3ImJih0WyJ1c2Utc2VydmVyLXNpZGUtcmVuZGVyaW5nIl09IjEiKSx0WyJhZGItYml0cyJdPSIxIjt2YXIgYz1pKDc0NCkuZ2V0Q29va2llSWQoKTtyZXR1cm4gYyYmKHRbImV4dC11bmlxLWlkIl09YyksdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGFyc2U9ZnVuY3Rpb24oZSx0LG8pe3JldHVybiBvJiZpKDApLmV4dGVuZCh0LGZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBpKDQ3KS5mb3JPd24oZSxmdW5jdGlvbihlLG8pe2koNjApLmlzQXJyYXkobikmJih0W29dPWUpfSksdH0obykpLHIodCxlKX07dmFyIG49WyJzaXRlQmdDb2xvciIsImJnQ29sb3IiLCJib3JkZXJDb2xvciIsImhlYWRlckJnQ29sb3IiLCJ0aXRsZUNvbG9yIiwidGV4dENvbG9yIiwidXJsQ29sb3IiLCJ1cmxCYWNrZ3JvdW5kQ29sb3IiLCJzaXRlbGlua3NDb2xvciIsImhvdmVyQ29sb3IiLCJ0aXRsZUhvdmVyQ29sb3IiLCJiYWNrQ29sb3IiLCJoaWdobGlnaHRDb2xvciIsInNtYWxsSW1hZ2UiLCJidXR0b25UZXh0Q29sb3IiLCJidXR0b25CZ0NvbG9yIl07ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWUubGltaXQsbz0iYWRhcHRpdmUiPT09ZS5uYW1lfHxlLm5hbWUgaW4gaSg5OCkuYWRhcHRpdmUwNDE4QmxvY2tzO2lmKGUuZml4ZWQmJiFvKXJldHVybiBuO3ZhciByPXBhcnNlSW50KHQubGltaXQsMTApO3JldHVybiBpKDApLmlzSW5SYW5nZShyLDEsbik/cjpufWZ1bmN0aW9uIHIoZSx0KXt2YXIgbixyPU51bWJlcihlLmRvbWFpbkZvbnRTaXplKXx8MCxhPWUuZG9tYWluQmdPcGFjaXR5LHM9ZS50aXRsZUZvbnRTaXplQWJzLGw9ZS5mb250U2l6ZUFicyxjPWUuYm9keUZvbnRTaXplLHU9KGV8fHt9KS5uYW1lOyJwaWN0dXJlU2VhcmNoIj09PXQubmFtZSYmKG49Qm9vbGVhbihlLmZpeGVkQmdDb2xvcnMpKTt2YXIgZD1pKDc3MikuaXNIb3N0SW5BbmltYXRpb25MaXN0KHdpbmRvdykmJmUuZW5hYmxlQW5pbWF0aW9uLHA9TnVtYmVyKGUuYW5pbWF0aW9uQ291bnQpfHwxLzAsZj1lLmxpbmtUYWlsLGg9Qm9vbGVhbihlLmZhdmljb24pLGc9Qm9vbGVhbih2b2lkIDA9PT1lLmJ1dHRvbnx8ZS5idXR0b24pLF89Qm9vbGVhbihlLndhcm5pbmdDb21wYWN0KSx5PUJvb2xlYW4oZS5ub1NpdGVsaW5rcyksbT1Cb29sZWFuKGUucGFkZGluZ3NEaXNhYmxlZCksYj1Cb29sZWFuKGUubm9Cb2R5VGV4dCksdj1lLmMxMW58fHt9LHc9Qm9vbGVhbihlLmltYWdlc0ZpcnN0KSx4PW8odCxlKSxrPWkoMCkuaW5BcnJheSh0LmJvcmRlcixlLmJvcmRlclR5cGUpPi0xP2UuYm9yZGVyVHlwZTp0LmJvcmRlclswXSxDPUJvb2xlYW4oZS5ib3JkZXJSYWRpdXMpLFM9dm9pZCAwPT09ZS5saW5rc1VuZGVybGluZXx8Qm9vbGVhbihlLmxpbmtzVW5kZXJsaW5lKSxPPWUuYWRhcHRpdmVUeXBlLEk9Qm9vbGVhbihlLmhvcml6b250YWxBbGlnbiksQT1Cb29sZWFuKE51bWJlcihlLmNhbGxvdXRzfHwwKSksVD1Cb29sZWFuKE51bWJlcihlLnNraXBDeWNsaWNBbmltYXRpb258fDApKSxFPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5mb250U2l6ZSxvPWUudGl0bGVGb250U2l6ZSxyPWUuZm9udEZhbWlseTt0LmZpeGVkJiYobj0iMSIsbz0iMyIscj0iQXJpYWwiKTswPT09dC5uYW1lLmluZGV4T2YoInBvc3RlciIpJiYobj0iMSIpO3ZhciBhPSJzaW1wbGUiIT09dC5uYW1lLHM9cGFyc2VGbG9hdChuKTthJiYhaSgwKS5pc0luUmFuZ2UocywuOCwxLjIpJiYocz0xKTt2YXIgbD1wYXJzZUZsb2F0KG8pO2EmJiFpKDApLmlzSW5SYW5nZShsLDEsMykmJihsPTMpO3ZhciBjPSIiO2lmKGEpZm9yKHZhciB1PXsxOltbMCwxMTBdLFsxLDEwN11dLDI6W1swLDEzNV0sWy45LDEzMF0sWzEsMTI2XV0sMzpbWzAsMTQ0XSxbLjksMTQyXSxbMSwxMzNdXX1bbF0sZD0wO3VbZF0mJnVbZF1bMF08cztkKyspYz11W2RdWzFdKyIlIjt2YXIgcD1TdHJpbmcocnx8IiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJue2ZvbnRTaXplOnMsdGl0bGVGb250U2l6ZTpsLHRpdGxlRm9udFNpemVQZXJjZW50OmMsZm9udEZhbWlseTpwfX0oZSx0KTstMSE9PXQubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInBvc3RlciIpJiYoZS5oZWFkZXJCZ0NvbG9yPW51bGwsdz0hMCk7ZnVuY3Rpb24gUih0KXtpZihlW3RdKXt2YXIgbj1pKDE4MCkubm9ybWFsaXplQ29sb3JIYXNoKGVbdF0pO3JldHVybiBudWxsIT09bj9pKDQzKS5jcmVhdGVDb2xvcihuKS50b1N0cmluZygpOnZvaWQgMH19ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaSgxMDApLmdldFZhbGlkTnVtYmVyKGVbdF0pfTA9PT10Lm5hbWUuaW5kZXhPZigiMzIweDUwIikmJihTPSExKTt2YXIgUD1Cb29sZWFuKGUuc21hbGxQaWN0dXJlcyksTD1lLmFsbG93UmVwZWF0QWRzJiZpKDM1MCkucGFyc2VBbGxvd1JlcGVhdEFkcyhlLmFsbG93UmVwZWF0QWRzKSxCPWUuYWR2U3BhY2luZyxOPWUuYWR2TWluU3F1YXJlLEQ9ZS5hZHZNaW5IZWlnaHQsaj1lLmFkdk1pbldpZHRoLHo9ZS50aGVtZSxGPWUubGF5b3V0LEg9ZS5za2luLFU9ZS5oZWFkZXJQb3NpdGlvbixWPWUuaW1hZ2VQb3NpdGlvbixXPWUuaW1hZ2VXaWR0aCxLPWUuaW1hZ2VIZWlnaHQsRz1lLmltYWdlUGFkZGluZ0xlZnQsWT1lLmNsaWNrYWJsZUJhY2tncm91bmQscT1OdW1iZXIoZS5oZWFkZXJGb250U2l6ZSksWD1OdW1iZXIoZS5pbWFnZVJhZGl1cyl8fDAsWj1lLmhlYWRlclRleHQ/U3RyaW5nKGUuaGVhZGVyVGV4dCk6dm9pZCAwLFE9InJpZ2h0Ij09PWUucGljdHVyZUZsb2F0PyJyaWdodCI6dm9pZCAwLCQ9Qm9vbGVhbihlLmZ1bGxDbGlja2FibGUpLEo9Qm9vbGVhbihlLmV4dGVuZGVkVGl0bGVGb250UmFuZ2UpLGVlPUJvb2xlYW4oZS5mZWVkYmFja0JnQ29sb3IpLHRlPUJvb2xlYW4oZS5mdWxsc2NyZWVuKSxpZT1OdW1iZXIoZS5mdWxsc2NyZWVuRHVyYXRpb24pfHwxMCxuZT1OdW1iZXIoZS5mdWxsc2NyZWVuQ2xvc2VCdXR0b25WaXNpYmlsaXR5VGltZW91dCl8fHZvaWQgMCxvZT1Cb29sZWFuKGUuaW50ZXJzY3JvbGxlcikscmU9ZS5pbnRlcnNjcm9sbGVyQW5pbWF0aW9uLGFlPXZvaWQgMD09PXJlfHxyZSxzZT1OdW1iZXIoZS5maXJzdEFkR3Jvdyl8fDEsbGU9TnVtYmVyKGUuc3BhY2VBcm91bmRDYXJvdXNlbCksY2U9TnVtYmVyKGUuYWR2TGVzc1dpZHRoQ2Fyb3VzZWwpLHVlPWUuYXJyb3dzQ2Fyb3VzZWw7cmV0dXJue2JnQ29sb3I6UigiYmdDb2xvciIpLGJvcmRlckNvbG9yOlIoImJvcmRlckNvbG9yIiksc2l0ZUJnQ29sb3I6Uigic2l0ZUJnQ29sb3IiKSx0aXRsZUNvbG9yOlIoInRpdGxlQ29sb3IiKSx0ZXh0Q29sb3I6UigidGV4dENvbG9yIiksdXJsQ29sb3I6UigidXJsQ29sb3IiKSx1cmxCYWNrZ3JvdW5kQ29sb3I6UigidXJsQmFja2dyb3VuZENvbG9yIiksc2l0ZWxpbmtzQ29sb3I6Uigic2l0ZWxpbmtzQ29sb3IiKSxob3ZlckNvbG9yOlIoImhvdmVyQ29sb3IiKSx0aXRsZUhvdmVyQ29sb3I6UigidGl0bGVIb3ZlckNvbG9yIiksYmFja0NvbG9yOlIoImJhY2tDb2xvciIpLGhpZ2hsaWdodENvbG9yOlIoImhpZ2hsaWdodENvbG9yIiksc21hbGxJbWFnZTpSKCJzbWFsbEltYWdlIiksYnV0dG9uVGV4dENvbG9yOlIoImJ1dHRvblRleHRDb2xvciIpLGJ1dHRvbkJnQ29sb3I6UigiYnV0dG9uQmdDb2xvciIpLGhlYWRlckJnQ29sb3I6UigiaGVhZGVyQmdDb2xvciIpLGhlYWRlckZvbnRDb2xvcjpSKCJoZWFkZXJGb250Q29sb3IiKSx3aWR0aDpNKCJ3aWR0aCIpLG1pbldpZHRoOk0oIm1pbldpZHRoIiksbWF4V2lkdGg6TSgibWF4V2lkdGgiKSxoZWlnaHQ6TSgiaGVpZ2h0IiksbWluSGVpZ2h0Ok0oIm1pbkhlaWdodCIpLG1heEhlaWdodDpNKCJtYXhIZWlnaHQiKSxmb250U2l6ZTpFLmZvbnRTaXplLHRpdGxlRm9udFNpemU6RS50aXRsZUZvbnRTaXplLHRpdGxlRm9udFNpemVQZXJjZW50OkUudGl0bGVGb250U2l6ZVBlcmNlbnQsZm9udEZhbWlseTpFLmZvbnRGYW1pbHksaW50ZXJzY3JvbGxlckJnQ29sb3I6UigiaW50ZXJzY3JvbGxlckJnQ29sb3IiKSxuYW1lOnUsZm9ybWF0OnQsc21hbGxQaWN0dXJlczpQLGFsbG93UmVwZWF0QWRzOkwsaW1hZ2VXaWR0aDpXLGltYWdlSGVpZ2h0OkssZW5hYmxlQW5pbWF0aW9uOmQsYW5pbWF0aW9uQ291bnQ6cCxpbWFnZVBhZGRpbmdMZWZ0OkcsZG9tYWluRm9udFNpemU6cixkb21haW5CZ09wYWNpdHk6YSx0aXRsZUZvbnRTaXplQWJzOnMsYm9keUZvbnRTaXplOmMsbGlua1RhaWw6ZixmYXZpY29uOmgsZml4ZWRCZ0NvbG9yczpuLGJ1dHRvbjpnLGhpZGVBZHR1bmVJblNzcDohMSxub1NpdGVsaW5rczp5LGMxMW46dixpbWFnZXNGaXJzdDp3LGxpbWl0OngsYm9yZGVyVHlwZTprLGJvcmRlclJhZGl1czpDLGxpbmtzVW5kZXJsaW5lOlMsYWRhcHRpdmVUeXBlOk8saG9yaXpvbnRhbEFsaWduOkksY2FsbG91dHM6QSxza2lwQ3ljbGljQW5pbWF0aW9uOlQsYWR2U3BhY2luZzpCLGFkdk1pblNxdWFyZTpOLGFkdk1pbldpZHRoOmosYWR2TWluSGVpZ2h0OkQsbGF5b3V0OkYsc2tpbjpILHRoZW1lOnosY2xpY2thYmxlQmFja2dyb3VuZDpZLHBhZGRpbmdzRGlzYWJsZWQ6bSxub0JvZHlUZXh0OmIsZnVsbENsaWNrYWJsZTokLGlzV2FybmluZ0NvbXBhY3Q6XyxpbWFnZVBvc2l0aW9uOlYsaGVhZGVyVGV4dDpaLHBpY3R1cmVGbG9hdDpRLGhlYWRlclBvc2l0aW9uOlUsaGVhZGVyRm9udFNpemU6cSxpbWFnZVJhZGl1czpYLGZvbnRTaXplQWJzOmwsZXh0ZW5kZWRUaXRsZUZvbnRSYW5nZTpKLGZlZWRiYWNrQmdDb2xvcjplZSxmdWxsc2NyZWVuOnRlLGZ1bGxzY3JlZW5EdXJhdGlvbjppZSxmdWxsc2NyZWVuQ2xvc2VCdXR0b25WaXNpYmlsaXR5VGltZW91dDpuZSxpbnRlcnNjcm9sbGVyOm9lLGludGVyc2Nyb2xsZXJBbmltYXRpb246YWUsZmlyc3RBZEdyb3c6c2UsYXJyb3dzQ2Fyb3VzZWw6dWUsc3BhY2VBcm91bmRDYXJvdXNlbDpsZSxhZHZMZXNzV2lkdGhDYXJvdXNlbDpjZSxwaVNldHRpbmdzOmUucGlTZXR0aW5nc319dC5nZXRMaW1pdD1vLHQucGFyc2VTZXR0aW5ncz1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWkoMTY5KSxvPWkoOTIpO2UuZXhwb3J0cz17b25Jbml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm9uQ2hhbmdlQmxvY2tTdGF0ZT1mdW5jdGlvbih0LGkpeyhudWxsPT09aXx8aS5zdGF0dXMhPT10LnN0YXR1cykmJnQuc3RhdHVzPj1vLkJsb2NrU3RhdHVzLkRpc3BsYXllZCYmKGUub25EaXNwbGF5ZWQoKSxlLmNvbnRleHQudW5DaGFuZ2VTdGF0ZShlLm9uQ2hhbmdlQmxvY2tTdGF0ZSkpfSx0aGlzLl9fYmFzZSgpfSxvbk1vdW50OmZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0PW4uQmxvY2tDb250ZXh0LmdldENsb3Nlc3RQcm92aWRlcih0aGlzKS5ibG9ja1N0YXRlLHRoaXMuY29udGV4dC5vbkNoYW5nZVN0YXRlKHRoaXMub25DaGFuZ2VCbG9ja1N0YXRlKSx0aGlzLl9fYmFzZSgpfSxvbkRpc3BsYXllZDpmdW5jdGlvbigpe319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1bIm1lZGljaW5lIiwiZGlldGFyeXN1cHBsIl07dC5oYXNJbXBvcnRhbnRGbGFnPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG89KGV8fCIiKS5zcGxpdCgiLCIpO3Q8by5sZW5ndGg7dCsrKXt2YXIgcj1vW3RdLnRyaW0oKTtpZigtMSE9PWkoMjMpLmluZGV4T2YobixyKSlyZXR1cm4hMH1yZXR1cm4hMX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWkoMzYpLHM9aSg2NiksbD1pKDI0OSksYz1pKDMzKSx1PWkoMjQzKSxkPWkoMTApLHA9aSg5MiksZj1pKDIyNSksaD1pKDYyNCksZz0uMDU3LF89YS5pc01vYmlsZT8wOjIwMCx5PXMuYmVtQ2xhc3NOYW1lc0ZhY3RvcnkoInNjcm9sbCIsaCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnNjcm9sbEFuaW1hdGU9bC5yYWZEZWJvdW5jZShmdW5jdGlvbigpe3ZhciBlLGk9dC5lbmRQb3NYLXQucG9zWDtNYXRoLmFicyhpKT4xPyhlPXQucG9zWCtpKmcsdC5zY3JvbGxBbmltYXRlKCkpOmU9dC5lbmRQb3NYLHQucG9zWD1lLHQuY29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0PWV9KSx0fXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5wb3NYPTAsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxpPXQuY2xhc3NOYW1lLG49dC5jbGFzc05hbWVzLG89cy5jbGFzc05hbWVzRmFjdG9yeShuKTtyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpvKCI6Omhvc3QiLGkseSgpKX0sclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJjb250YWluZXIiLG9uTW91c2VNb3ZlOnRoaXMub25Nb3VzZU1vdmUsb25Nb3VzZUxlYXZlOnRoaXMub25Nb3VzZUxlYXZlLG9uU2Nyb2xsOnRoaXMub25TY3JvbGwsY2xhc3M6eSgiX19jb250YWluZXIiKX0sdGhpcy5nZXRDaGlsZHJlbigpKSxyWyJkZWZhdWx0Il0uY3JlYXRlKGYuT25DaGFuZ2VCbG9ja1N0YXR1cyx7Y2FsbGJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGUub25DaGFuZ2VCbG9ja1N0YXR1cyh0KX19KSl9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wdXNoU3R5bGVzKGgpLHRoaXMuY29udGFpbmVyQ29tcG9uZW50PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJjb250YWluZXIiKSx0aGlzLmNvbnRhaW5lckVsZW1lbnQ9dGhpcy5jb250YWluZXJDb21wb25lbnQuZ2V0RWxlbWVudCgpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxTdGFydFRpbWVyKSx0aGlzLnNjcm9sbEFuaW1hdGUuY2FuY2VsKCksZS5wcm90b3R5cGUub25EZXN0cm95LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLm9uQ2hhbmdlQmxvY2tTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXAuQmxvY2tTdGF0dXMuUmVhZHkmJih0aGlzLmNhbGN1bGF0ZVNjcm9sbCgpLCEwKX0sdC5wcm90b3R5cGUuY2FsY3VsYXRlU2Nyb2xsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMuY2FsY3VsYXRlU2Nyb2xsOyh2b2lkIDA9PT10P2Z1bmN0aW9uKGUpe3JldHVybiBlKCl9OnQpKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsY3VsYXRlU2Nyb2xsSW1wbCgpfSl9LHQucHJvdG90eXBlLm9uU2Nyb2xsPWZ1bmN0aW9uKCl7dGhpcy51cGRhdGVQb3NYKCksdGhpcy51cGRhdGVQb3NpdGlvbigpfSx0LnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5zY3JvbGxXaWR0aCxuPXRoaXMud2lkdGgsbz10aGlzLnJhbmdlU2l6ZSxyPXRoaXMuYnVsbGV0U2l6ZSxhPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnQscz1hLmRvY3VtZW50RWxlbWVudCxsPWEuYm9keSx1PWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMuY29udGFpbmVyRWxlbWVudCksZD1zLnNjcm9sbExlZnR8fGwuc2Nyb2xsTGVmdHx8MCxwPWUucGFnZVgtdS5sZWZ0LWQtci8yLGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsMTAwKnAvbykpO3RoaXMuZW5kUG9zWD1mKihpLW4pLzEwMCx0aGlzLmNhblNjcm9sbD90aGlzLnNjcm9sbEFuaW1hdGUoKTppc05hTih0aGlzLnNjcm9sbFN0YXJ0VGltZXIpJiYodGhpcy5zY3JvbGxTdGFydFRpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5jYW5TY3JvbGw9ITAsdC5zY3JvbGxBbmltYXRlKCksdC5zY3JvbGxTdGFydFRpbWVyPU5hTn0sXykpfSx0LnByb3RvdHlwZS5vbk1vdXNlTGVhdmU9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxTdGFydFRpbWVyKSx0aGlzLnNjcm9sbFN0YXJ0VGltZXI9TmFOLHRoaXMuY2FuU2Nyb2xsPSExfSx0LnByb3RvdHlwZS5jYWxjdWxhdGVTY3JvbGxJbXBsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuY29udGFpbmVyRWxlbWVudDt1LnZzeW5jLnJ1bih7bWVhc3VyZTp0aGlzLnByb3RlY3RBc3luY0NhbGxiYWNrKGZ1bmN0aW9uKCl7ZS53aWR0aD10LmNsaWVudFdpZHRoLGUuc2Nyb2xsV2lkdGg9dC5zY3JvbGxXaWR0aCxlLmJ1bGxldFNpemU9TWF0aC5tYXgoNjQsZS53aWR0aCplLndpZHRoL2Uuc2Nyb2xsV2lkdGgpLGUucmFuZ2VTaXplPWUud2lkdGgtZS5idWxsZXRTaXplLGUudXBkYXRlUG9zWCgpfSksbXV0YXRlOnRoaXMucHJvdGVjdEFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKXtlLnVwZGF0ZVBvc2l0aW9uKCl9KX0pfSx0LnByb3RvdHlwZS51cGRhdGVQb3NYPWZ1bmN0aW9uKCl7dGhpcy5wb3NYPXRoaXMuY29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0fSx0LnByb3RvdHlwZS51cGRhdGVQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMud2lkdGgsdD10aGlzLnNjcm9sbFdpZHRoLGk9eSgiX2ZvZy1sZWZ0Iiksbj15KCJfZm9nLXJpZ2h0Iiksbz10aGlzLnBvc1g7bz4wP3RoaXMuc2V0TW9kKGkpOnRoaXMuZGVsTW9kKGkpLG88dC1lP3RoaXMuc2V0TW9kKG4pOnRoaXMuZGVsTW9kKG4pfSx0fShkKTt0LlNjcm9sbD1tfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT0oaSg1KSxpKDY2KSkscz1pKDEyOSksbD1pKDcpLGM9aSgzODgpLHU9aSgyNDMpLGQ9aSgxMCkscD1pKDMzNyksZj1pKDM4NSksaD1pKDMwMyksZz1pKDI0NCksXz1pKDg0KSx5PWkoOSksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMucG9zWD0uNSx0aGlzLnBvc1k9LjUsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxpPWUuY2xhc3NOYW1lcyxuPWUuaW1hZ2VzLG89ZS5hbHQscz12b2lkIDA9PT1vPyIiOm8sbD1lLnVzZUJhY2tncm91bmRNZXRob2Q7dGhpcy5oYXNJbWFnZT1Cb29sZWFuKG4mJm4ubGVuZ3RoKTt2YXIgYz10aGlzLnByb3BzLndpZHRoLHU9dGhpcy5wcm9wcy5oZWlnaHQ7aWYodGhpcy5oYXNJbWFnZSl7dmFyIGQ9Zy5maXRJbWFnZShuLHt3aWR0aDpjLGhlaWdodDp1fSk7ZCYmZC53aWR0aD4xJiZkLmhlaWdodD4xJiYoYz0iYXV0byI9PT1jP2Qud2lkdGg6ZC5jb250YWluZXJXaWR0aCx1PSJhdXRvIj09PXU/ZC5oZWlnaHQ6ZC5jb250YWluZXJIZWlnaHQpfXZhciBwPWEuY2xhc3NOYW1lc0ZhY3RvcnkoaSk7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiY29udGFpbmVyIixjbGFzczpwKCI6Omhvc3QiLHQpLHN0eWxlOnt3aWR0aDpjLGhlaWdodDp1fX0sdGhpcy5oYXNJbWFnZT9sP251bGw6clsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJpbWFnZS1jb250YWluZXIiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUifSxjbGFzczpwKCI6OmNvbnRhaW5lciIpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJpbWciLHtyZXNvdXJjZUlkOiJpbWFnZSIsYWx0OiIiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MCx0b3A6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sY2xhc3M6cCgiOjppbWciKX0pLG51bGwpOnJbImRlZmF1bHQiXS5jcmVhdGUoZi5JbWFnZVN0dWIse3RleHQ6c30pKX0sdC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lcj10aGlzLmdldFJlc291cmNlQnlJZCgiY29udGFpbmVyIiksdGhpcy5pbWFnZT10aGlzLmdldFJlc291cmNlQnlJZCgiaW1hZ2UiKSx0aGlzLmltYWdlQ29udGFpbmVyPXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJpbWFnZS1jb250YWluZXIiKX0sdC5wcm90b3R5cGUub25Nb3VudD1mdW5jdGlvbigpe3RoaXMucHJvcHMuZGlzYWJsZUZpdE9uTW91bnR8fHRoaXMuZml0SW1hZ2UoKX0sdC5wcm90b3R5cGUub25Vbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5pc1VubW91bnRlZD0hMH0sdC5wcm90b3R5cGUuZml0SW1hZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuaGFzSW1hZ2Upe3ZhciB0LGk9dGhpcy5jb250YWluZXIuZ2V0RWxlbWVudCgpLG49dGhpcy5wcm9wcyxvPW4uaW1hZ2VzLHI9bi5zaXplO3UudnN5bmMucnVuKHttZWFzdXJlOnRoaXMucHJvdGVjdEFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKXt2YXIgZT1zLmdldEVsZW1lbnRSZWN0U2l6ZShpKTt0PWcuZml0SW1hZ2Uobyx7d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsaXNDb3ZlcjoiY292ZXIiPT09cn0pfSksbXV0YXRlOnRoaXMucHJvdGVjdEFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKXtlLnNldEltYWdlKHQpfSl9KX19LHQucHJvdG90eXBlLnNldEltYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYobnVsbCE9PWUpe3RoaXMuY3VycmVudEltYWdlPWUsdGhpcy5zbWFydENlbnRlcj1lP3AuZ2V0U21hcnRDZW50ZXIoZSk6bnVsbCx0aGlzLnByb3BzLnVzZUJhY2tncm91bmRNZXRob2Q/dGhpcy5zZXRJbWFnZUJ5QmFja2dyb3VuZChlKTp0aGlzLnNldEltYWdlQnlFbGVtZW50KGUpLHRoaXMuc2Nyb2xsVG9TbWFydENlbnRlcigpLHRoaXMubGFzdEltYWdlPWU7dmFyIGk9cGVyZm9ybWFuY2Uubm93KCk7aC5sb2FkSW1hZ2Uoe3NyYzplLnNyYyxvbkxvYWQ6ZnVuY3Rpb24oKXtpZighdC5pc1VubW91bnRlZCl7dmFyIG49cGVyZm9ybWFuY2Uubm93KCktaTt0Lm9uTG9hZEltYWdlKCksXy5zZW5kUmVzb3VyY2VJbmZvKCkseS5sb2dnZXIubG9nKHtsb2FkaW5nVGltZTpuLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSwiSW1hZ2VMb2FkaW5nIil9fX0pfX0sdC5wcm90b3R5cGUuc2Nyb2xsVG89ZnVuY3Rpb24oZSx0LGkpe3ZvaWQgMD09PWkmJihpPTEpO3ZhciBuPXRoaXMuY3VycmVudEltYWdlO2lmKG4paWYodGhpcy5wb3NYPWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSx0aGlzLnBvc1k9dD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHRoaXMucHJvcHMudXNlQmFja2dyb3VuZE1ldGhvZCl0aGlzLmNvbnRhaW5lci5zZXRTdHlsZSh7ImJhY2tncm91bmQtcG9zaXRpb24iOjEwMCplKyIlICIrMTAwKnQrIiUifSk7ZWxzZXt2YXIgbz1uLndpZHRoLW4uY29udGFpbmVyV2lkdGgscj1uLmhlaWdodC1uLmNvbnRhaW5lckhlaWdodCxhPS1vL24ud2lkdGgqZSoxMDAscz0tci9uLmhlaWdodCp0KjEwMDt0aGlzLmltYWdlQ29udGFpbmVyLnNldFN0eWxlKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK2ErIiUsICIrcysiJSkgc2NhbGUoIitpKyIpIiwidHJhbnNmb3JtLW9yaWdpbiI6MTAwKmUrIiUgIisxMDAqdCsiJSJ9KX19LHQucHJvdG90eXBlLnNldEltYWdlQnlCYWNrZ3JvdW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuc2l6ZTt0aGlzLmNvbnRhaW5lci5zZXRTdHlsZSh7ImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoIitlLnNyYysiKSIsImJhY2tncm91bmQtc2l6ZSI6dHx8ImNvbnRhaW4iLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCJ9KX0sdC5wcm90b3R5cGUuc2V0SW1hZ2VCeUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbWFnZSxpPXRoaXMuaW1hZ2VDb250YWluZXIsbj1lLndpZHRoL2UuY29udGFpbmVyV2lkdGgqMTAwO2kuc2V0U3R5bGUoe3dpZHRoOm4rIiUiLCJwYWRkaW5nLXRvcCI6bi9lLnJhdGlvKyIlIn0pLHRoaXMubGFzdEltYWdlJiZ0aGlzLmxhc3RJbWFnZS5zcmM9PT1lLnNyY3x8dC5zZXRBdHRyKCJzcmMiLGUuc3JjKSx0aGlzLmRyYXdEZWJ1Z1NtYXJ0Q2VudGVyKCl9LHQucHJvdG90eXBlLnNjcm9sbFRvU21hcnRDZW50ZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRJbWFnZSx0PXRoaXMuc21hcnRDZW50ZXI7aWYoZSYmdCYmImNvdmVyIj09PXRoaXMucHJvcHMuc2l6ZSl7dmFyIGk9e3c6ZS5vcmlnaW5XaWR0aCxoOmUub3JpZ2luSGVpZ2h0fSxuPXt3OmUuY29udGFpbmVyV2lkdGgsaDplLmNvbnRhaW5lckhlaWdodH0sbz1jLmdldENlbnRlclBvc2l0aW9uKGksbix0KTt0aGlzLnNjcm9sbFRvKG8ueCxvLnkpfWVsc2UgdGhpcy5zY3JvbGxUbyh0aGlzLnBvc1gsdGhpcy5wb3NZKX0sdC5wcm90b3R5cGUub25Mb2FkSW1hZ2U9ZnVuY3Rpb24oKXtsLmlzRnVuY3Rpb24odGhpcy5wcm9wcy5vbkxvYWQpJiZ0aGlzLnByb3BzLm9uTG9hZCh0aGlzLmN1cnJlbnRJbWFnZSl9LHQucHJvdG90eXBlLmRyYXdEZWJ1Z1NtYXJ0Q2VudGVyPWZ1bmN0aW9uKCl7fSx0fShkKTt0LkltYWdlPW19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNTdXBwb3J0c09uY2VPcHRpb249ITEsdC5pc1N1cHBvcnRzUGFzc2l2ZU9wdGlvbj0hMSx0LmlzU3VwcG9ydHNDYXB0dXJlT3B0aW9uPSExO3RyeXtpZihpKDQxNykuZ2V0SGFzT2JqZWN0RGVmaW5lUHJvcGVydHkoKSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkobywib25jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0LmlzU3VwcG9ydHNPbmNlT3B0aW9uPSEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaXNTdXBwb3J0c1Bhc3NpdmVPcHRpb249ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImNhcHR1cmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pc1N1cHBvcnRzQ2FwdHVyZU9wdGlvbj0hMH19KSxpKDEzMSkuYWRkRXZlbnRMaXN0ZW5lckZ1bmN0aW9uKG4sImNsaWNrIixpKDEzKS5ub29wLG8pfX1jYXRjaChlKXt9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDUpLG89aSg1NSkscj1pKDQ0KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBpPXRoaXM7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuZGVmYXVsdEFkdlJlbmRlcmVyPWUsdGhpcy5yZW5kZXJlcnNTZXQ9e30sbi5mb3JFYWNoKHQsZnVuY3Rpb24oZSl7aS5yZWdpc3RlcihlKX0pfXJldHVybiBlLnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyc1NldFtlLm5hbWVdPWV9LGUucHJvdG90eXBlLmdldEFkdlJlbmRlcmVyPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzLnJlbmRlcmVyc1NldCxhPW8ucmVkdWNlKGUsZnVuY3Rpb24oZSx0KXt2YXIgbz1uW3RdO3JldHVybiBvJiYoby52YWxpZGF0ZSYmIW8udmFsaWRhdGUoaSl8fGUucHVzaChvKSksZX0sW10pO3JldHVybiBhLnB1c2godGhpcy5kZWZhdWx0QWR2UmVuZGVyZXIpLHIuc2VsZWN0TW9zdEZpdCh0LGEpfHx0aGlzLmRlZmF1bHRBZHZSZW5kZXJlcn0sZX0oKTt0LkFkdlJlbmRlcmVyc1NldD1hfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzVG91Y2hEZXZpY2U9aSgyNTYpLmlzVG91Y2hEZXZpY2UoKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSg1KSxvPWkoNykscj1pKDUzKSxhPWkoMjIpLHM9aSgzNiksbD1pKDEpLGM9aSg1MTgpLHU9aSgyNCksZD1pKDEzNikscD1yLmdldENvZGVWZXJzaW9uKCksZj1zLnN1cHBvcnQudG91Y2gsaD1pKDc4KTt0LmNob29zZU9wdGlvbj1mdW5jdGlvbihlLHQsaSxyLHMpe3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIi0iKTtyZXR1cm57InJlYXNvbi1pZCI6dFswXSwiYWN0aW9uLWlkIjp0WzFdfX0oZSk7aC5zZW5kUGl4ZWwoZnVuY3Rpb24oZSx0KXt2YXIgaT17fTtyZXR1cm4gbi5mb3JFYWNoKFsicmVhc29uLWlkIiwiYWN0aW9uLWlkIl0sZnVuY3Rpb24oZSl7aVtlXT10W2VdfSksbmV3IHUuVXJsKHtob3N0OmUscGFyYW1zOml9KS5nZXRVcmwoKX0odCxnKSksZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWwucHJvdGVjdChsLlByb3RlY3RlZE5hbWVzLk1ldHJpa2FBZHR1bmUsZnVuY3Rpb24obil7dmFyIG89e3R5cGU6ImlubGluZSIsYmxvY2tUeXBlOmksb3B0aW9uSWQ6ZSx2ZXJzaW9uOnAsaXNUb3VjaDpmfTtvLm9wdGlvblRleHQ9YS5maWx0ZXIodCgpLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkPT09ZX0pWzBdLnRleHQsbi5yZWFjaEdvYWwoInNlbmQiLG8pfSk7ZC5yZXF1ZXN0Q291bnRlcih7aWQ6Yy5NRVRSSUtBX0NPVU5URVJ9LG4pfShlLHIsaSksby5pc0Z1bmN0aW9uKHMpJiZzKCl9O3ZhciBnPWZ1bmN0aW9uKGUpe2UuaGl0KHdpbmRvdy5sb2NhdGlvbi5ocmVmLHtwYXJhbXM6e3R5cGU6ImlubGluZSIsdmVyc2lvbjpwLGlzVG91Y2g6Zn19KX07dC5vbkFkdHVuZUNsaWNrPWZ1bmN0aW9uKCl7dmFyIGU9bC5wcm90ZWN0KGwuUHJvdGVjdGVkTmFtZXMuTWV0cmlrYUFkdHVuZSxnKTtkLnJlcXVlc3RDb3VudGVyKHtpZDpjLk1FVFJJS0FfQ09VTlRFUn0sZSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzO3RoaXMuYm91bmRSdW5TY2hlZHVsZWRUYXNrcz1mdW5jdGlvbigpe3JldHVybiBlLnJ1blNjaGVkdWxlZFRhc2tzXygpfSx0aGlzLnJhZj1pKDYyMikuZ2V0UkFGKHdpbmRvdyksdGhpcy50YXNrcz1bXSx0aGlzLm5leHRUYXNrcz1bXSx0aGlzLnN0YXRlcz1bXSx0aGlzLm5leHRTdGF0ZXM9W10sdGhpcy5zY2hlZHVsZWQ9ITEsdGhpcy5uZXh0RnJhbWVSZXNvbHZlcj1udWxsLHRoaXMubmV4dEZyYW1lUHJvbWlzZT1udWxsfXJldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKGUpe3RoaXMucnVuKHttZWFzdXJlOmUsbXV0YXRlOnZvaWQgMH0pfSxlLnByb3RvdHlwZS5tZWFzdXJlUHJvbWlzZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0Lm1lYXN1cmUoZnVuY3Rpb24oKXtpKGUoKSl9KX0pfSxlLnByb3RvdHlwZS5tdXRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5ydW4oe21lYXN1cmU6dm9pZCAwLG11dGF0ZTplfSl9LGUucHJvdG90eXBlLm11dGF0ZVByb21pc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucnVuUHJvbWlzZSh7bWVhc3VyZTp2b2lkIDAsbXV0YXRlOmV9KX0sZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKGUsdCl7dGhpcy50YXNrcy5wdXNoKGUpLHRoaXMuc3RhdGVzLnB1c2godHx8dm9pZCAwKSx0aGlzLnNjaGVkdWxlKCl9LGUucHJvdG90eXBlLnJ1blByb21pc2U9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnJ1bihlLHQpLHRoaXMubmV4dEZyYW1lUHJvbWlzZSlyZXR1cm4gdGhpcy5uZXh0RnJhbWVQcm9taXNlO3ZhciBuPW5ldyhpKDYyMykuRGVmZXJyZWQpO3JldHVybiB0aGlzLm5leHRGcmFtZVJlc29sdmVyPW4ucmVzb2x2ZSx0aGlzLm5leHRGcmFtZVByb21pc2U9bi5wcm9taXNlfSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbigpe3RoaXMuc2NoZWR1bGVkfHwodGhpcy5zY2hlZHVsZWQ9ITAsdGhpcy5mb3JjZVNjaGVkdWxlKCkpfSxlLnByb3RvdHlwZS5mb3JjZVNjaGVkdWxlPWZ1bmN0aW9uKCl7dGhpcy5yYWYodGhpcy5ib3VuZFJ1blNjaGVkdWxlZFRhc2tzKX0sZS5wcm90b3R5cGUucnVuU2NoZWR1bGVkVGFza3NfPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZWQ9ITE7dmFyIGU9dGhpcy50YXNrcyx0PXRoaXMuc3RhdGVzLGk9dGhpcy5uZXh0RnJhbWVSZXNvbHZlcjt0aGlzLm5leHRGcmFtZVJlc29sdmVyPW51bGwsdGhpcy5uZXh0RnJhbWVQcm9taXNlPW51bGwsdGhpcy50YXNrcz10aGlzLm5leHRUYXNrcyx0aGlzLnN0YXRlcz10aGlzLm5leHRTdGF0ZXM7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0ubWVhc3VyZTtyJiYobyhyLHRbbl0pfHwoZVtuXS5tdXRhdGU9dm9pZCAwKSl9Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXS5tdXRhdGU7YSYmbyhhLHRbbl0pfXRoaXMubmV4dFRhc2tzPWUsdGhpcy5uZXh0U3RhdGVzPXQsdGhpcy5uZXh0VGFza3MubGVuZ3RoPTAsdGhpcy5uZXh0U3RhdGVzLmxlbmd0aD0wLGkmJmkoKX0sZX0oKTtmdW5jdGlvbiBvKGUsdCl7dHJ5e2UodCl9Y2F0Y2goZSl7cmV0dXJuIGkoMSkucmV0aHJvd0FzeW5jKGUsIlZzeW5jIiksITF9cmV0dXJuITB9dC5Wc3luYz1uLHQudnN5bmM9bmV3IG59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPS40O2Z1bmN0aW9uIG8oZSx0LGkpe3ZvaWQgMD09PWkmJihpPTEpO3ZhciBuLG89dC5pc0NvdmVyLGE9ImF1dG8iPT09dC53aWR0aCxzPSJhdXRvIj09PXQuaGVpZ2h0LGw9dC53aWR0aCppLGM9dC5oZWlnaHQqaSx1PWVbMF0sZD1lWzFdLHA9ZVsyXSxmPWVbM10saD1OdW1iZXIoKGQvcCkudG9GaXhlZCgyKSk7aWYoYSYmcyluPXIoZCxwLGgsITApO2Vsc2UgaWYocyYmIWEpbj1yKGwsYyxoLCEwKTtlbHNlIGlmKGEmJiFzKW49cihsLGMsaCwhMSk7ZWxzZXtuPXIobCxjLGgsbz09PWg8PWwvYyl9dmFyIGc9bi53aWR0aCxfPW4uaGVpZ2h0O3JldHVybntzcmM6dSxvcmlnaW5XaWR0aDpkLG9yaWdpbkhlaWdodDpwLHJhdGlvOmgsY29udGFpbmVyV2lkdGg6bCxjb250YWluZXJIZWlnaHQ6Yyx3aWR0aDpnLGhlaWdodDpfLGFyZWE6TWF0aC5taW4oZyxkKSpNYXRoLm1pbihfLHApLG9yaWdpbkFyZWE6ZCpwLG9wdGlvbnM6Zn19ZnVuY3Rpb24gcihlLHQsaSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITApLG4/dD1lL2k6ZT10Kmkse3dpZHRoOmUsaGVpZ2h0OnR9fXQuZml0SW1hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1pKDIyNikuZ2V0RG93bmxpbmsoKSxhPS0xIT09ciYmcjxuPy42NjoxO2koMzM2KS5pc0hEUElTY3JlZW4mJihhKj0yKTtmb3IodmFyIHMsbCxjPW51bGwsdT1udWxsLGQ9MCxwPWU7ZDxwLmxlbmd0aDtkKyspe3ZhciBmPXBbZF0saD1mWzBdLGc9ZlsxXSxfPWZbMl07aWYoZyYmXyYmaCl7dmFyIHk9byhmLHQsYSk7KG51bGw9PT1jfHwobD1jLChzPXkpLmFyZWE+bC5hcmVhfHxzLmFyZWE9PT1sLmFyZWEmJnMub3JpZ2luQXJlYTxsLm9yaWdpbkFyZWEpKSYmKGM9eSx1PWYpfX1yZXR1cm4gdSYmbyh1LHQpfSx0LnNjYWxlPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2VbZVsiTk9fUExBQ0UiXT0wXT0iTk9fUExBQ0UiLGVbZVsiVElUTEUiXT0xXT0iVElUTEUiLGVbZVsiQk9EWSJdPTJdPSJCT0RZIn0obnx8KG49e30pKTt2YXIgbz0iJiM4MjI2OyI7ZnVuY3Rpb24gcihlLHQpe2lmKCF0KXJldHVybiBuLk5PX1BMQUNFO3ZhciBvPWgodCkrMSxyPWgoZS50aXRsZSksYT1oKGUuYm9keSk7cmV0dXJuIHIrbzw9aSg2KS5BRF9USVRMRV9MRU5HVEg/bi5USVRMRTphK288PWkoNikuQURfQk9EWV9MRU5HVEg/bi5CT0RZOm4uTk9fUExBQ0V9ZnVuY3Rpb24gYShlLHQsaSl7aT09PW4uVElUTEUmJihlLnRpdGxlPWMoZS50aXRsZSkrIiAiK3QpLGk9PT1uLkJPRFkmJihlLmJvZHk9YyhlLmJvZHkpKyIgIit0KX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLnJlcGxhY2UoLyg8KFtePl0rKT4pL2dpLCIiKS5yZXBsYWNlKC8oJlx3ezEsNH07KS9naSwiICIpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIS8uKlshfD9dJC9naW0udGVzdChlKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlKyhsKHMoZSkpPyIgIitvOiIiKX1mdW5jdGlvbiB1KGUpe3JldHVybiBCb29sZWFuKGUmJmUucHJpY2VfaW5mbyYmZS5wcmljZV9pbmZvLnByaWNlKX1mdW5jdGlvbiBkKGUsdCxuLG8pe2lmKHZvaWQgMD09PW4mJihuPSEwKSx2b2lkIDA9PT1vJiYobz0hMCksIXUoZSkpcmV0dXJuIiI7dmFyIHIsYSxzPWUucHJpY2VfaW5mbyxsPVsocj1zLnByaWNlLGE9TnVtYmVyKHBhcnNlRmxvYXQocikudG9GaXhlZCgyKSksU3RyaW5nKGEpLnJlcGxhY2UoLyhcRCkvZywiLCIpLnJlcGxhY2UoLyhcZCkoPz0oXGR7M30pKyg/IVxkKSkvZywiJDEgIikpLHAocy5jdXJyZW5jeSx0KV0sYz1pKDIyKS5maWx0ZXIobCxmdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlKX0pLmpvaW4oIiAiKTtyZXR1cm4gbj9mKGMscy5wcmVmaXgsdCxvKTpjfWZ1bmN0aW9uIHAoZSx0KXtzd2l0Y2goZSl7Y2FzZSJSVVIiOmNhc2UiUlVCIjpyZXR1cm4iXHUyMGJkIjtjYXNlIkJZTiI6Y2FzZSJCWVIiOnJldHVybiBpKDMwKS5pMThuKCJCWVIiLHQpO2Nhc2UiS1pUIjpyZXR1cm4iXHUyMGI4IjtjYXNlIlVBSCI6cmV0dXJuIlx1MjBiNCI7Y2FzZSJUUlkiOnJldHVybiJcdTIwYmEiO2Nhc2UiVVNEIjpyZXR1cm4iJCI7Y2FzZSJFVVIiOnJldHVybiJcdTIwYWMiO2Nhc2UiVVpTIjpyZXR1cm4gaSgzMCkuaTE4bigiVVpTIix0KTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBmKGUsdCxuLG8pe3N3aXRjaChwYXJzZUludCh0LDEwKSl7Y2FzZSAxOnZhciByPWkoMzApLmkxOG4oIlBSSUNFX0ZST00iLG4se3ByaWNlOmV9KTtyZXR1cm4gbz9yOnIudG9Mb3dlckNhc2UoKTtjYXNlIDI6dmFyIGE9aSgzMCkuaTE4bigiUFJJQ0VfVE8iLG4se3ByaWNlOmV9KTtyZXR1cm4gbz9hOmEudG9Mb3dlckNhc2UoKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBoKGUpe3ZhciB0PXMoZSksaT1sKHQpPzI6MDtyZXR1cm4gdC5sZW5ndGgraX10LmFwcGVuZFByaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZChlLHQpO2lmKCFvKXJldHVybiExO3ZhciBzPXIoZSxvKTtyZXR1cm4gaSgyNikuaXNMb25nRXhwZXJpbWVudChpKDgpLmV4cGVyaW1lbnRJZHMucHJpY2VJblRleHQuRU5BQkxFRCkmJmEoZSxvLHMpLHMhPT1uLk5PX1BMQUNFfSx0LmdldFBsYWNlVG9BcHBlbmRQcmljZT1yLHQuYXBwZW5kVG9UaXRsZU9yQm9keT1hLHQuYWRIYXNQcmljZT11LHQucHJlcGFyZVByaWNlU3RyaW5nPWQsdC5nZXRDdXJyZW5jeVN5bWJvbD1wLHQuYWRkUHJpY2VQcmVmaXg9Zix0LmNhbGN1bGF0ZUxlbmd0aD1ofSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXt2YXIgdD1uZXcoaSgyNjUpLkpTVHJhY2VyTG9nZ2VyU2xpbSkoInBjb2RlX2Vycm9ycyIsU3RyaW5nKGkoNTMpLmdldENvZGVWZXJzaW9uKCkpLGkoOTEpLmdldFNlc3Npb25JZCgpKSxuPW5ldyhpKDQzNikuTWV0cmlrYUxvZ2dlcik7ZnVuY3Rpb24gbyh0KXtlLmRlYnVnKCJSRU1PVEVfTE9HOiIsdCl9ZnVuY3Rpb24gcihlLHQpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBhPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPSJyZW1vdGVMb2dTdHJpbmciLHQ9e21lc3NhZ2U6dH0pLHtuYW1lc3BhY2U6bix2ZXJzaW9uOmkoNTMpLmdldENvZGVWZXJzaW9uKCksdHlwZTplLGVycm9yOntuYW1lOnQubmFtZSxtZXNzYWdlOnQubWVzc2FnZSxzdGFjazp0LnN0YWNrfX19KGUsbixyKTtpKDU0KS5wY29kZURlYnVnRmxhZz8obyhhKSxpKDE5NykucmV0aHJvd0Vycm9yKG5ldyBFcnJvcihuKSkpOmkoNSkuZm9yRWFjaCh0LGZ1bmN0aW9uKGUpe3JldHVybiBlLmxvZyhhKX0pfX1mdW5jdGlvbiBhKGUpe3JldHVybiBmdW5jdGlvbihuLHIsYSl7aSg1NCkucGNvZGVEZWJ1Z0ZsYWc/byhuKTooInN0cmluZyI9PXR5cGVvZiBuJiYobj17bXNnOm59KSx0LmxvZ0RhdGEoe3R5cGU6ZSxkYXRhOm4sbmFtZTpyLHZlcnNpb246U3RyaW5nKGkoNTMpLmdldENvZGVWZXJzaW9uKCkpfSxhKSl9fWUuZXJyb3I9cigiRVJST1IiLFt0LG5dKSxlLndhcm49cigiV0FSTklORyIsW3Qsbl0pLGUubG9nPWEoIklNUE9SVEFOVCIpLGUuaW5mbz1hKCJJTkZPIiksZS5kZWJ1Zz1pKDU0KS5wY29kZURlYnVnRmxhZz9mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsZSl9OmkoMTMpLm5vb3AsZS5jb25maWd1cmU9ZnVuY3Rpb24oZSl7dC5jb25maWcoZSl9fSh0LmxvZ2dlcnx8KHQubG9nZ2VyPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsaT1hcmd1bWVudHMubGVuZ3RoO3Q8aTt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgbj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PGk7dCsrKWZvcih2YXIgcj1hcmd1bWVudHNbdF0sYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyxvKyspbltvXT1yW2FdO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC50aHJvdHRsZT1mdW5jdGlvbihlLHQsaSl7dmFyIG8scj0wLGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspdFtvXT1hcmd1bWVudHNbb107ZS5jYWxsLmFwcGx5KGUsbihbaV0sdCkpfTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspZVtpXT1hcmd1bWVudHNbaV07dmFyIHM9RGF0ZS5ub3coKSxsPXMtcjtjbGVhclRpbWVvdXQobyksbDx0P289d2luZG93LnNldFRpbWVvdXQuYXBwbHkod2luZG93LG4oW2EsdC1sXSxlKSk6KHI9cyxhLmFwcGx5KHZvaWQgMCxlKSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJZklzQW5kcm9pZD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWUubmF2aWdhdG9yLnVzZXJBZ2VudCxuPXZvaWQgMD09PXQ/IiI6dCxvPS9BbmRyb2lkLy50ZXN0KG4pLHI9aSgyOTIpLmlzV2luZG93c1Bob25lKGUpLGE9L2NvbVwueWFuZGV4XC5tb2JpbGVcLm1ldHJpY2FcLmFkc1wuc2RrLio/QW5kcm9pZC8udGVzdChuKTtyZXR1cm4gbyYmIXJ8fGF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wLGk9YXJndW1lbnRzLmxlbmd0aDt0PGk7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIG49QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxpO3QrKylmb3IodmFyIHI9YXJndW1lbnRzW3RdLGE9MCxzPXIubGVuZ3RoO2E8czthKyssbysrKW5bb109clthXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmFmRGVib3VuY2VGYWN0b3J5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvLHIsYT1mdW5jdGlvbigpe2Uocikscj1OYU59LHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyxzPVtdLGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXNbbF09YXJndW1lbnRzW2xdO3JldHVybiBhKCkscj10KGZ1bmN0aW9uKHQpe3I9TmFOLG89aS5jYWxsLmFwcGx5KGksbihbZSx0XSxzKSl9KSxvfTtyZXR1cm4gcy5jYW5jZWw9YSxzfX0sdC5yYWZEZWJvdW5jZT10LnJhZkRlYm91bmNlRmFjdG9yeShpKDc3KS5jYW5jZWxBbmltYXRpb25GcmFtZSxpKDc3KS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj17MToicnUiLDI6InVrIiwzOiJlbiIsNDoiYnkiLDU6Imt6Iiw2OiJ0ciIsNzoidHQifTt0LmdldExhbmdDb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1pKDIxMSk7ZS5leHBvcnRzPW4uQWR0dW5lfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LG89e307KDAsaSg1KS5mb3JFYWNoKShpKDU4NyksZnVuY3Rpb24oZSl7ZS5pbmRleD1lLmlkLGUuY2xhc3NOYW1lPSJhZGFwdGVyQ29tcG9uZW50QmxvY2siLGUubGltaXQ9ZS5saW1pdHx8aSg2KS5NQVhfQURTX0xJTUlULG9bZS5uYW1lXT1lfSksZS5leHBvcnRzPXtnZXRGb3JtYXRCeU5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9b1tlXTtyZXR1cm4gdD9uKHt9LHQpOm51bGx9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9aSg2Nikscz1pKDU5OCksbD1pKDMzNCksYz1pKDE2NiksdT1pKDU5OSkuRGlzcGxheU9ic2VydmVyLGQ9aSg2MDApLHA9YS5iZW1DbGFzc05hbWVzRmFjdG9yeSgiZGlzcGxheS1kZXRlY3RvciIsZCksZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT0iZGlzX2RldF8iK3MuZ2V0VW5pcXVlSW50KCk7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7aWQ6ZX0sclsiZGVmYXVsdCJdLmNyZWF0ZShjLlN0eWxlLHtzdHlsZXM6W2RdLHZhcmlhYmxlczp7aWQ6ZX0sbm9uY2U6dGhpcy5wcm9wcy5ub25jZX0pLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiZHVtbXkiLGNsYXNzOnAoKX0pKX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldFJlc291cmNlQnlJZCgiZHVtbXkiKS5nZXRFbGVtZW50KCk7dGhpcy5kaXNwbGF5T2JzZXJ2ZXI9bmV3IHUoZnVuY3Rpb24odCl7dCYmKGUuZGlzcGxheU9ic2VydmVyLmRpc2Nvbm5lY3QoKSxlLnJlYWR5KCkpfSksdGhpcy5kaXNwbGF5T2JzZXJ2ZXIub2JzZXJ2ZSh0KX0sdC5wcm90b3R5cGUub25Vbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5kaXNwbGF5T2JzZXJ2ZXImJnRoaXMuZGlzcGxheU9ic2VydmVyLmRpc2Nvbm5lY3QoKX0sdH0obC5EZXRlY3Rvcik7dC5EaXNwbGF5RGV0ZWN0b3I9Zn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uTW91bnQ9ZnVuY3Rpb24oKXshMSE9PXRoaXMucHJvcHMuc3RhcnRPbk1vdW50JiZ0aGlzLnN0YXJ0KCl9LHR9KGkoMzM0KS5EZXRlY3Rvcik7dC5Db21wb3NpdGVEZXRlY3Rvcj1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSkscj1mdW5jdGlvbigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPWkoMykscz1pKDUpLGw9aSgxNCksYz1pKDQzKSx1PWkoMjQ5KSxkPWkoMjYwKSxwPWkoMzY5KSxmPWkoMzkwKSxoPWkoMTA2KSxnPWkoNjU5KSxfPWkoMTU1KSx5PWkoNjYwKSxtPWkoMTk1KS5Cb3JkZXJUeXBlcyxiPTFlMyx2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQudXNlZEFkdnM9W10sdC5wcmV2aW91c1NpemVzPVtdLHQuaGFzUmVzaXplT2JzZXJ2ZXI9ITAsdC5vblJlc2l6ZT11LnJhZkRlYm91bmNlKGZ1bmN0aW9uKGUsaSl7dmFyIG49dC5nZXRSb290KCk7bi5zZXRTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLHQuc2l6ZU1ldGVyLmF0dGFjaCgpO3ZhciBvPXQuc2l6ZU1ldGVyLmdldFNpemUoKSxyPURhdGUubm93KCk7aWYodC5zaXplTWV0ZXIuZGV0YWNoKCksdC5oYXNSZXNpemVPYnNlcnZlcil7cy5mb3JFYWNoKHQucHJldmlvdXNTaXplcyxmdW5jdGlvbihlKXt2YXIgaT1lLnRpbWUsbj1lLnNpemUsYT1uLmhlaWdodCxzPW4ud2lkdGg7YT09PW8uaGVpZ2h0JiZzPT09by53aWR0aCYmci1pPGImJih0Lmhhc1Jlc2l6ZU9ic2VydmVyPSExKX0pO3ZhciBhPXtzaXplOm8sdGltZTpyfTt0LnByZXZpb3VzU2l6ZXMubGVuZ3RoPj0yJiZ0LnByZXZpb3VzU2l6ZXMuc2hpZnQoKSx0LnByZXZpb3VzU2l6ZXMucHVzaChhKX1pZihpLndpZHRoIT09by53aWR0aHx8aS5oZWlnaHQhPT1vLmhlaWdodClyZXR1cm4gdC53YXNEaXNwbGF5ZWQ9ITEsdC5pc1JlYWR5PSExLHZvaWQgdC51cGRhdGUoKTtuLnNldFN0eWxlKCJwb3NpdGlvbiIsIiIpfSksdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmRvT25SZWFkeT1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMucmVhZHlFdmVudEFjdGlvbnM7dC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBuPWguYmluYXJ5U2VhcmNoKGksdCk7aS5zcGxpY2UobiwwLHQpfSx0LnByb3RvdHlwZS5kb09uVW5tb3VudD1mdW5jdGlvbihlKXt0aGlzLnVubW91bnRFdmVudEFjdGlvbnMucHVzaChlKX0sdC5wcm90b3R5cGUuZ2V0VGhlbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNldHRpbmdzO3JldHVybnttYXJnaW46ZS5ob3Jpem9udGFsQWxpZ24/ImF1dG8iOiIwIixib3JkZXJXaWR0aDoiMXB4Iixib3JkZXJDb2xvcjpuZXcgYy5Db2xvcihlLmJvcmRlckNvbG9yfHwiI2ViZWJlYiIpLGJvcmRlclJhZGl1czplLmJvcmRlclJhZGl1cz8iNHB4IjoiMCIsYmdDb2xvcjplLmJnQ29sb3J8fCJ0cmFuc3BhcmVudCJ9fSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1hZGFwdGl2ZSIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyk7dmFyIHQ9dGhpcy5zZXR0aW5ncy5ib3JkZXJUeXBlfHxtLkFELGk9dD09PW0uTk9ORT8wOjE7dGhpcy5ib3JkZXJUeXBlPXQsdGhpcy5ib3JkZXJXaWR0aD1pLHRoaXMuYWR2U3BhY2luZz10aGlzLmdldEFkdlNwYWNpbmcodCxpKSx0aGlzLmFkdk1pblNxdWFyZT1OdW1iZXIodGhpcy5zZXR0aW5ncy5hZHZNaW5TcXVhcmUpfHwzNWUzLHRoaXMuYWR2TWluV2lkdGg9TnVtYmVyKHRoaXMuc2V0dGluZ3MuYWR2TWluV2lkdGgpfHwxNjAsdGhpcy5hZHZNaW5IZWlnaHQ9TnVtYmVyKHRoaXMuc2V0dGluZ3MuYWR2TWluSGVpZ2h0KXx8NTAsdGhpcy5hZHZSZW5kZXJlcnNTZXQ9dGhpcy5nZXRBZHZSZW5kZXJlcnNTZXQoKX0sdC5wcm90b3R5cGUuaW5pdExheW91dD1mdW5jdGlvbigpe3ZhciB0PWQuaXNTaW1pbGFyQWRzRXhwZXJpbWVudCh0aGlzLnByb3BzLnJlbmRlclRvTm9kZSx0aGlzLnJhd0Fkdkxpc3QsdGhpcy5wcm9wcy5zZXR0aW5ncyk7dGhpcy5kYXRhU291cmNlLnNldFNpbWlsYXJFeHBlcmltZW50KHQpLGUucHJvdG90eXBlLmluaXRMYXlvdXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuZ2V0VGVzdHRhZ1Byb3BzPWZ1bmN0aW9uKCl7cmV0dXJue3NpbWlsYXJUaGVtZTp0aGlzLmRhdGFTb3VyY2UuZ2V0U2ltaWxhckV4cGVyaW1lbnQoKS50aGVtZX19LHQucHJvdG90eXBlLmJlZm9yZVJlbmRlcj1mdW5jdGlvbih0KXt2YXIgaT10aGlzO2UucHJvdG90eXBlLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsdCksdGhpcy5zaXplTWV0ZXImJnRoaXMuc2l6ZU1ldGVyLmRldGFjaCgpLHRoaXMuc2l6ZU1ldGVyPXkuY3JlYXRlU2l6ZU1ldGVyKHRoaXMucHJvcHMucmVuZGVyVG9Ob2RlLHIocih7fSx0aGlzLnNldHRpbmdzKSx7bGltaXQ6dGhpcy5hZHZMaXN0Lmxlbmd0aCxhZHZTcGFjaW5nOnRoaXMuYWR2U3BhY2luZ30pLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuY3V0QmxvY2soaS5hZHZMaXN0LGUsdCl9KSx0aGlzLnNpemVNZXRlci5hdHRhY2goKSx0aGlzLnVwZGF0ZUFmdGVyUmVhZHk9ITEsdGhpcy5yZWFkeUV2ZW50QWN0aW9ucz1bXSx0aGlzLnVubW91bnRFdmVudEFjdGlvbnM9W119LHQucHJvdG90eXBlLmdldEJvZHk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5zaXplTWV0ZXIuZ2V0U2l6ZSgpO3RoaXMucHJldmlvdXNTaXplcy5wdXNoKHtzaXplOnQsdGltZTpEYXRlLm5vdygpfSksdGhpcy5zaXplTWV0ZXIuZGV0YWNoKCk7dmFyIGk9dC53aWR0aCxuPXQuaGVpZ2h0O2lmKCF0aGlzLmlzUmVhZHkmJjA9PT1pKXJldHVybiB0aGlzLnJlbmRlckR1bW15KCk7dGhpcy5kb09uUmVhZHkoXy5SZWFkeVN0YWdlLlR1bmUsZnVuY3Rpb24oKXt2YXIgaT1lLmdldFJlc291cmNlQnlJZCgiYm9keSIpO2kmJmkucmVtb3ZlQ2xhc3MoZS5iXygiX19ib2R5X3JlbmRlcmluZyIpKTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBlLm9uUmVzaXplKHQpfTtlLmJpbmQod2luZG93LCJyZXNpemUiLGZ1bmN0aW9uKCl7dmFyIHQ9ZS5ib2R5V2lkdGg7ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCE9PXQmJm4oKX0pLGUuZG9PblVubW91bnQoZnVuY3Rpb24oKXtyZXR1cm4gZS5vblJlc2l6ZS5jYW5jZWwoKX0pLGUuZG9PblVubW91bnQoZS5zcHlPcmllbnRhdGlvbkNoYW5nZShuKSk7dmFyIG89ZS5zZXR0aW5ncy5yZXNpemVPYnNlcnZlcixyPXZvaWQgMD09PW98fG87aWYoZS5oYXNSZXNpemVPYnNlcnZlciYmciYmInVuZGVmaW5lZCIhPXR5cGVvZiBSZXNpemVPYnNlcnZlcil7dmFyIGE9bmV3IFJlc2l6ZU9ic2VydmVyKG4pO2Eub2JzZXJ2ZShlLnByb3BzLnJlbmRlclRvTm9kZSksZS5kb09uVW5tb3VudChmdW5jdGlvbigpe3JldHVybiBhLmRpc2Nvbm5lY3QoKX0pfX0pO3ZhciBvLHI9dGhpcy5hZHZMaXN0LHM9dGhpcy5zZXR0aW5ncyxjPVsxLzBdLHU9ZnVuY3Rpb24oaSl7dmFyIG49KHQuaGVpZ2h0K2UuYWR2U3BhY2luZykvaS1lLmFkdlNwYWNpbmc7cmV0dXJue3dpZHRoOnQud2lkdGgsaGVpZ2h0Om59fTtzd2l0Y2gocy5sYXlvdXQpe2Nhc2UiaG9yaXpvbnRhbCI6bz0hMDticmVhaztjYXNlInZlcnRpY2FsIjpvPSExO2JyZWFrO2Nhc2UiZ3JpZCI6bz0hMCxjPWcuY2FsY0dyaWQoci5sZW5ndGgsdGhpcy5jdXRCbG9jayhyLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHUoMSl9KS5sZW5ndGgpO2JyZWFrO2RlZmF1bHQ6bz1pPm59Zm9yKHZhciBkPVtdLHA9MCxoPWM7cDxoLmxlbmd0aDtwKyspe3ZhciB5PWhbcF0sbT1kLmxlbmd0aCxiPXIuc2xpY2UobSxtK3kpO2QucHVzaC5hcHBseShkLHRoaXMuY3V0QmxvY2soYixvLGZ1bmN0aW9uKCl7cmV0dXJuIHUoYy5sZW5ndGgpfSkpfXRoaXMudXNlZEFkdnM9bC5tYXAoZCxmdW5jdGlvbihlKXtyZXR1cm4gZS5hZHZ9KTt2YXIgdj1uZXcgZi5BZHZDb250ZXh0UHJvdmlkZXIoe2Jsb2NrOnRoaXMsaXNIb3Jpem9udGFsOm8sc2V0dGluZ3M6cyxkYXRhU291cmNlOnRoaXMuZ2V0RGF0YVNvdXJjZSgpLHVzZUZpcnN0QWRHcm93OnRoaXMudXNlRmlyc3RBZEdyb3d9KSx3PXRoaXMuYl8seD0xPT09ZC5sZW5ndGgsaz10aGlzLmdldEFsdGVybmF0aXZlU2tpbnNTZXQoKSxDPWwubWFwKGQsZnVuY3Rpb24odCl7dmFyIGk9dC5hZHYsbj0oMCx0LmdldEFkdlNpemUpKCkscj1uLndpZHRoLGw9bi5oZWlnaHQsYz17d2lkdGg6ci0yKmUuYm9yZGVyV2lkdGgsaGVpZ2h0OmwtMiplLmJvcmRlcldpZHRofSx1PWUuYWR2UmVuZGVyZXJzU2V0LmdldEFkdlJlbmRlcmVyKGssYyxpKSxkPXUucmVuZGVyLHA9di5jcmVhdGVBZHZDb250ZXh0KCksZj0oci9sKS50b0ZpeGVkKDIpLGg9dS5uYW1lKyJfciIrZjtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp3KCJfX25vZGUiLCJhZHYtIitpLnVuaXFJZCksc3R5bGU6e3dpZHRoOnIsIm1pbi1oZWlnaHQiOmx9fSxkKHthZHY6aSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LHNldHRpbmdzOnMsY29udGV4dDpwLHNraW5OYW1lOmgsaXNIb3Jpem9udGFsOm8saXNTaW5nbGU6eH0pKX0pLFM9cy5ob3Jpem9udGFsQWxpZ24sTz17Im1pbi1oZWlnaHQiOm4sIm1pbi13aWR0aCI6aSwibWF4LXdpZHRoIjppfTtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJib2R5IixjbGFzczp3KCJfX2JvZHkiLCJfX2JvZHlfcmVuZGVyaW5nIiwiX19ib2R5XyIrKG8/InJvdyI6ImNvbHVtbiIpLCJfX2JvZHlfYm9yZGVyLSIrdGhpcy5ib3JkZXJUeXBlLCJfX2Fkcy1jb3VudF8iK2QubGVuZ3RoLFMmJiJfaG9yaXpvbnRhbC1hbGlnbiIpLHN0eWxlOk99LEMpfSx0LnByb3RvdHlwZS5yZW5kZXJEdW1teT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldERhdGFTb3VyY2UoKSxpPXRoaXMuYWR2TGlzdDtyZXR1cm4gcy5mb3JFYWNoKGksZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FwdHVyZUFkKGUuYWRJZCl9KSx0aGlzLmRvT25SZWFkeShfLlJlYWR5U3RhZ2UuUmVhZCxmdW5jdGlvbigpe3MuZm9yRWFjaChpLGZ1bmN0aW9uKGUpe3JldHVybiB0LnJlbGVhc2VBZChlLmFkSWQpfSksZS51cGRhdGVBZnRlclJlYWR5PSEwfSksbnVsbH0sdC5wcm90b3R5cGUucmVuZGVyTG9nbz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRBbHRlcm5hdGl2ZVNraW5zU2V0PWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLm9uUmVhZHk9ZnVuY3Rpb24oKXtoLmZsdXNoUXVldWUodGhpcy5yZWFkeUV2ZW50QWN0aW9ucyxmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSksdGhpcy51cGRhdGVBZnRlclJlYWR5P3RoaXMudXBkYXRlKCk6ZS5wcm90b3R5cGUub25SZWFkeS5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5vblVubW91bnQ9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5vblVubW91bnQuY2FsbCh0aGlzKSxoLmZsdXNoUXVldWUodGhpcy51bm1vdW50RXZlbnRBY3Rpb25zLGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX0sdC5wcm90b3R5cGUuY3JlYXRlQWR2TGlzdD1mdW5jdGlvbigpe3ZhciB0PWUucHJvdG90eXBlLmNyZWF0ZUFkdkxpc3QuY2FsbCh0aGlzLHtzbWFydENyb3BTdXBwb3J0ZWQ6ITB9KTtyZXR1cm4gdGhpcy5nZXREYXRhU291cmNlKCkuZG9Tb3J0QnlJbWFnZXMoKSYmdC5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE51bWJlcighZS5pbWFnZSktTnVtYmVyKCF0LmltYWdlKX0pLHR9LHQucHJvdG90eXBlLmdldFVzZWRBZHZzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXNlZEFkdnN9LHQucHJvdG90eXBlLmdldEFkdlNwYWNpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT09PW0uQ09MTEFQU0U/LTE6dGhpcy5zZXR0aW5ncy5hZHZTcGFjaW5nfHw1KS0yKihlPT09bS5CTE9DSz90OjApfSx0LnByb3RvdHlwZS5nZXRHcm93cz1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5zZXR0aW5ncy5tZWFzdXJlcixvPSJwb3N0ZXIiPT09bnx8InZlcnRpY2FsIj09PW58fCJob3Jpem9udGFsIj09PW58fCJpbnRlcnNjcm9sbGVyIj09PW4scj1bXTtyZXR1cm4gcy5mb3JFYWNoKGUsZnVuY3Rpb24oZSx0KXt2YXIgaT0zO298fGUuaW1hZ2V8fChpPTIpLHIucHVzaChpKX0pLHJ9LHQucHJvdG90eXBlLmN1dEJsb2NrPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzLmdldEdyb3dzKGUsaSx0KTtyZXR1cm4gZy5jdXRCbG9jayh7YWR2TGlzdDplLGdldEJsb2NrU2l6ZTppLGlzSG9yaXpvbnRhbDp0LGFkdk1pblNxdWFyZTp0aGlzLmFkdk1pblNxdWFyZSxhZHZNaW5XaWR0aDp0aGlzLmFkdk1pbldpZHRoLGFkdk1pbkhlaWdodDp0aGlzLmFkdk1pbkhlaWdodCxhZHZTcGFjaW5nOnRoaXMuYWR2U3BhY2luZyxncm93czpufSl9LHQucHJvdG90eXBlLnNweU9yaWVudGF0aW9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0LGk9NSxuPXt3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fSxvPWZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0KX07cmV0dXJuIHRoaXMuYmluZCh3aW5kb3csIm9yaWVudGF0aW9uY2hhbmdlIixmdW5jdGlvbigpe28oKTshZnVuY3Rpb24gbygpezAhPShpLT0xKSYmKHdpbmRvdy5pbm5lcldpZHRoIT09bi53aWR0aCYmd2luZG93LmlubmVySGVpZ2h0IT09bi5oZWlnaHQ/KG49e3dpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHR9LGUoKSk6dD13aW5kb3cuc2V0VGltZW91dChvLDIwMCkpfSgpfSksb30sdH0ocCk7dC5CbG9ja0FkYXB0aXZlQmFzZT12fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzVG91Y2hEZXZpY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksaSg0MTgpLmhhc1RvdWNoUG9pbnRzKGUpfHxpKDQyMCkuaXNNYXRjaGluZ0FueVBvaW50ZXJDb2Fyc2UoZSl8fGkoNDIxKS5pc01hdGNoaW5nVG91Y2hFbmFibGVkKGUpfHxpKDQyMikuaGFzRG9jdW1lbnRUb3VjaChlKXx8aSg0MjMpLmhhc1RvdWNoRXZlbnRzKGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5leHRlbmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylpZih0PWFyZ3VtZW50c1tpXSlmb3IodmFyIG8gaW4gdCl0Lmhhc093blByb3BlcnR5KG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5jYWxsUHJvdGVjdGVkPWZ1bmN0aW9uKHQpe2koMSkucHJvdGVjdCgicXVldWUiLHQsdm9pZCAwLGUuZmluaXNoKSgpfSxlLmZpbmlzaD1mdW5jdGlvbigpe2Uub3JkZXIubGVuZ3RoP2UuY2FsbFByb3RlY3RlZChmdW5jdGlvbigpe3ZhciB0PWUub3JkZXIuc2hpZnQoKTt0JiZ0KGUuZmluaXNoKX0pOmUuZXhlY3V0ZWQ9ITF9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtlLmV4ZWN1dGVkP2Uub3JkZXIucHVzaCh0KTooZS5leGVjdXRlZD0hMCxlLmNhbGxQcm90ZWN0ZWQoZnVuY3Rpb24oKXt0KGUuZmluaXNoKX0pKX0sZS5vcmRlcj1bXSxlLmV4ZWN1dGVkPSExLGV9KCk7dC5RdWV1ZT1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDIxMyk7ZS5leHBvcnRzPW4uRmVlZGJhY2tNZW51fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wLGk9YXJndW1lbnRzLmxlbmd0aDt0PGk7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIG49QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxpO3QrKylmb3IodmFyIHI9YXJndW1lbnRzW3RdLGE9MCxzPXIubGVuZ3RoO2E8czthKyssbysrKW5bb109clthXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvLHI9aSgxMDcpLGE9aSg2OCkscz1pKDQwKSxsPWkoMjEpLGM9aSgxNzMpOyFmdW5jdGlvbihlKXtlWyJUQUIiXT0idGFiIixlWyJCQVNFIl09ImJhc2UiLGVbIkJBU0VfVEFCIl09ImJhc2UtdGFiIn0obz10LlNpbWlsYXJCdXR0b25UaGVtZXx8KHQuU2ltaWxhckJ1dHRvblRoZW1lPXt9KSksdC5TaW1pbGFyQnV0dG9uVGhlbWVCaXRzPVtvLlRBQixvLkJBU0Usby5CQVNFX1RBQl07dmFyIHU9bihbInlhbmRleE1haWwiLCJ5YW5kZXhOZXdzIiwieW91bGEiXSxsLmV4Y2x1ZGVIb3N0cyhsLnRvcFBhcnRuZXJzKSksZD1jWyJkZWZhdWx0Il0oMSx0LlNpbWlsYXJCdXR0b25UaGVtZUJpdHMubGVuZ3RoKSxwPXIuaXNNb2JpbGUsZj1sLmlzSG9zdEluTGlzdCh3aW5kb3csdSk7dC5pc1NpbWlsYXJBZHNFeHBlcmltZW50PWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1uZXcgYS5TaXplTWVhc3VyZXIoZSxpKS5nZXRTaXplKCkuaGVpZ2h0LG89dFswXSxyPTAhPT1uLGw9aS5saW1pdCxjPSExLHU9ITEsaD0wO3JldHVybiBvJiZvLnNpbWlsYXJVcmwmJiFmJiZwJiYxPT09bCYmIXImJihjPSEwLHU9dXx8cy5pc1BlcmNlbnQoNTApLGg9ZCkse3RhcmdldDpjLHNsaWNlOnUsdGhlbWU6aH19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZGFwdGl2ZXtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpyb3cgbm93cmFwOy1tcy1mbGV4LWZsb3c6cm93IG5vd3JhcDtmbGV4LWZsb3c6cm93IG5vd3JhcDttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ub2Rle3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6aW5oZXJpdDtib3JkZXItd2lkdGg6MH0uIixlLmlkLCIgLnlhcC1hZGFwdGl2ZV9ob3Jpem9udGFsLWFsaWduIC55YXAtYWR2e21hcmdpbjphdXRvfS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjstd2Via2l0LWp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWFsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjstbXMtZmxleC1saW5lLXBhY2s6anVzdGlmeTthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW47LXdlYmtpdC1mbGV4LXdyYXA6d3JhcDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7bWFyZ2luOiIsZS5tYXJnaW4sIjtib3JkZXI6c29saWQgIixlLmJvcmRlckNvbG9yLCI7Ym9yZGVyLXdpZHRoOiIsZS5ib3JkZXJXaWR0aCwiO2JvcmRlci1yYWRpdXM6IixlLmJvcmRlclJhZGl1cywiO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1hZGFwdGl2ZV9fYm9keV9yZW5kZXJpbmd7LXdlYmtpdC1hbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy1tcy1mbGV4LWFsaWduOnN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7dmlzaWJpbGl0eTpoaWRkZW59LiIsZS5pZCwiIC55YXAtYWRhcHRpdmVfX2JvZHlfcm93ey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93fS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2NvbHVtbnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hZGFwdGl2ZV9fYm9keV9ib3JkZXItbm9uZXtib3JkZXItd2lkdGg6MH0uIixlLmlkLCIgLnlhcC1hZGFwdGl2ZV9fYm9keV9ib3JkZXItYWR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci13aWR0aDowfS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2JvcmRlci1hZCAueWFwLWFkdntib3JkZXItcmFkaXVzOiIsZS5ib3JkZXJSYWRpdXMsIjtib3JkZXItd2lkdGg6IixlLmJvcmRlcldpZHRoLCJ9LiIsZS5pZCwiIC55YXAtYWRhcHRpdmVfX2JvZHlfYm9yZGVyLWJsb2NrIC55YXAtYWR2e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjB9LiIsZS5pZCwiIC55YXAtYWRhcHRpdmVfX2JvZHlfYm9yZGVyLWJsb2NrIC55YXAtYWR2LC4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2JvcmRlci1jb2xsYXBzZSAueWFwLWFkdntib3JkZXItd2lkdGg6IixlLmJvcmRlcldpZHRoLCI7Ym9yZGVyLXJhZGl1czowfS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2JvcmRlci1ibG9jayAueWFwLWFkYXB0aXZlX19ub2RlLC4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2JvcmRlci1jb2xsYXBzZSAueWFwLWFkYXB0aXZlX19ub2Rle21hcmdpbjotIixlLmJvcmRlcldpZHRoLCJ9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49e30sbz0hMTtlLmV4cG9ydHM9e2hpdE9uY2U6ZnVuY3Rpb24oZSx0KXtpZighbltlXSl7dmFyIHI9KDAsaSgxKS5wcm90ZWN0KSgibWV0cmlrYV95YW4iLGZ1bmN0aW9uKGUpe2UuaGl0KHdpbmRvdy5sb2NhdGlvbi5ocmVmLHtyZWZlcmVyOmRvY3VtZW50LnJlZmVycmVyfSl9KTtpKDEzNikucmVxdWVzdENvdW50ZXIoe2lkOmUsaXNZQU46ITAsZW5hYmxlQ29va2llczpvfSxyKSxuW2VdPSEwfX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGNWaXNpYmlsaXR5VGltZT1mdW5jdGlvbihlKXtpZihlJiYiZXhwb3N1cmVUaW1lb3V0ImluIGUpe3ZhciB0PXBhcnNlSW50KGUuZXhwb3N1cmVUaW1lb3V0LDEwKTtpZighaXNOYU4odCkpcmV0dXJuIHR9cmV0dXJuIGkoMjEwKS5nZXREZWxheShpKDk3KS5WSVNJQklMSVRZX0NSSVRFUklBLllBKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoNzY5KS5nZXRWZXJzaW9uKCk7dC5sb2FkUnRiPWZ1bmN0aW9uKGUsdCl7dmFyIG89ZnVuY3Rpb24oZSx0KXtlWyJwY29kZS12ZXJzaW9uIl09aSg1MykuZ2V0Q29kZVZlcnNpb24oKS50b1N0cmluZygpLGVbImZsYXNoLXZlciJdPSIwIjt2YXIgbj10LmF2YWlsYWJsZVdpZHRofHwwO24+PTEmJm48PTFlNCYmKGVbImF2YWlsYWJsZS13aWR0aCJdPW4udG9TdHJpbmcoKSk7dmFyIG89dC5hdmFpbGFibGVIZWlnaHR8fDA7cmV0dXJuIG8+PTEmJm88PTFlNCYmKGVbImF2YWlsYWJsZS1oZWlnaHQiXT1vLnRvU3RyaW5nKCkpLHQuc2tpcFRva2VuJiYoZVsic2tpcC10b2tlbiJdPXQuc2tpcFRva2VuKSx0LmV4dFBhcmFtJiYoZVsiZXh0LXBhcmFtIl09dC5leHRQYXJhbSksdC5zdGF0SWQmJihlWyJzdGF0LWlkIl09dC5zdGF0SWQpLHQuY2FjaGVJZCYmIXQucmVmcmVzaCYmKGVbImNhY2hlLWlkIl09dC5jYWNoZUlkKSxpKDk2KS5pc1J0YkluRGlyZWN0RXhwZXJpbWVudCh7cGFnZUlkOnQucGFnZUlkLHByb2R1Y3Q6dC5wcm9kdWN0LGhhc1NlYXJjaFRleHQ6Qm9vbGVhbih0LnNlYXJjaFRleHQpfSkmJihpKDc3MCkubmVlZFJ0YlNoYWRvdyh0LnBhZ2VJZCkmJihlLnJ0YnNoYWRvdz0iMSIpLHQuYmxvY2tJbXBJZCYmKGVbInBhcnRuZXItc3RhdC1pZCJdPXQuYmxvY2tJbXBJZCkpLGV9KGkoMjMzKS5nZXRDb21tb25QYXJhbXMoZSksZSkscj1mdW5jdGlvbihvKXtpKDEwNykuaXNNb2JpbGUmJiFpKDE0NykuaXNUdXJib1BhZ2Uod2luZG93KSYmKG89ZnVuY3Rpb24oZSx0KXt2YXIgbz1lJiZlLnNldHRpbmdzLHI9ZSYmZS5kaXJlY3QmJmUuZGlyZWN0LmFkcyYmZS5kaXJlY3QuYWRzLmxlbmd0aCxhPUJvb2xlYW4ocikscz04NTIzPT09bixsPTg1MjQ9PT1uLGM9ODUyNT09PW4sdT1zfHxsfHxjLGQ9dC5hdmFpbGFibGVIZWlnaHR8fDA7aWYoIShvJiZhJiYoZD4yMDB8fDA9PT1kKSYmdSkpcmV0dXJuIGU7Zm9yKHZhciBwIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShwKSYmb1twXSl7dmFyIGY9b1twXS5uYW1lOzE9PT1yJiZzJiZpKDIzKS5pbmRleE9mKFsiYWRhcHRpdmUwNDE4IiwiYWRhcHRpdmUiXSxmKT4tMT9vW3BdLm5hbWU9InBvc3Rlckhvcml6b250YWwiOjE9PT1yJiZsJiZpKDIzKS5pbmRleE9mKFsibW90aW9uIiwiZXh0ZW5zaWJsZU1vYmlsZSJdLGYpPi0xP29bcF0ubmFtZT0icG9zdGVySG9yaXpvbnRhbCI6YyYmInZlcnRpY2FsIj09PWYmJihvW3BdLm5hbWU9InBvc3RlclZlcnRpY2FsIil9cmV0dXJuIGV9KG8sZSkpLHQobyl9O2koMzUzKS5jcmVhdGVVcmwoaSg2KS5VUkxTLnJ0YixvLGUsZnVuY3Rpb24odCxuKXtpKDE3NSkubG9hZEFkKHt1cmw6dCxoZWFkZXJzOm4scGFnZUlkOmUucGFnZUlkLGlzUmVmcmVzaDplLnJlZnJlc2gsY2FsbGJhY2s6cixub25jZTplLm5vbmNlfSl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG8scil7dGhpcy5zZXJ2aWNlPWUsdGhpcy52ZXJzaW9uPXQsdGhpcy5zaWQ9byx0aGlzLmxhYmVscz1uKHtkZXZpY2U6aSgyNDEpLmlzVG91Y2hEZXZpY2U/Im1vYmlsZSI6ImRlc2t0b3AiLHZlcnNpb246dH0sciksdGhpcy5kYXRhPXt9fXJldHVybiBlLnByb3RvdHlwZS5jb25maWc9ZnVuY3Rpb24oZSl7dGhpcy5sYWJlbHM9bihuKHt9LHRoaXMubGFiZWxzKSxlLmxhYmVscyksdGhpcy5kYXRhPW4obih7fSx0aGlzLmRhdGEpLGUuZGF0YSl9LGUucHJvdG90eXBlLmxvZz1mdW5jdGlvbihlLHQpe3ZhciBvO2lmKHZvaWQgMD09PXQmJih0PTI1KSxpKDQwKS5pc1BlcmNlbnQodCkpe3ZhciByPVtdO2UudHlwZSYmci5wdXNoKGUudHlwZSksZS5uYW1lc3BhY2UmJnIucHVzaChlLm5hbWVzcGFjZSksZS5lcnJvciYmZS5lcnJvci5uYW1lJiZyLnB1c2goZS5lcnJvci5uYW1lKTt2YXIgYT1yLmpvaW4oIl8iKTtpKDkzKS5yZXF1ZXN0KHRoaXMuZ2V0UmVxdWVzdE9iamVjdCh7ZXZlbnRUeXBlOmkoNDEpLlN0YXRzRXZlbnRUeXBlLmVycm9yLGV2ZW50TmFtZTphLGRhdGE6bihuKG4oe30sdGhpcy5kYXRhKSxlLmVycm9yKSx7YnVuZGxlOiJhZGJsb2NrIixjb2RlOmUubmFtZXNwYWNlLHR5cGU6ZS50eXBlLGhyZWY6d2luZG93LmxvY2F0aW9uLmhyZWZ9KSx0YWdzOihvPXt9LG9baSg0MSkuU3RhdHNFdmVudFR5cGUuZXJyb3IrIl8iK2FdPTEsbyl9KSl9fSxlLnByb3RvdHlwZS5sb2dEYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIG87aWYodm9pZCAwPT09dCYmKHQ9MSksaSg0MCkuaXNQZXJjZW50KHQpKXt2YXIgcj1bXTtlLnR5cGUmJnIucHVzaChlLnR5cGUpLGUubmFtZSYmci5wdXNoKGUubmFtZSksZS5kYXRhJiZlLmRhdGEubmFtZSYmci5wdXNoKGUuZGF0YS5uYW1lKTt2YXIgYT1yLmpvaW4oIl8iKTtpKDkzKS5yZXF1ZXN0KHRoaXMuZ2V0UmVxdWVzdE9iamVjdCh7ZXZlbnRUeXBlOmkoNDEpLlN0YXRzRXZlbnRUeXBlLmV2ZW50LGV2ZW50TmFtZTphLGRhdGE6bihuKHt9LHRoaXMuZGF0YSksZS5kYXRhKSx0YWdzOihvPXt9LG9baSg0MSkuU3RhdHNFdmVudFR5cGUuZXZlbnQrIl8iK2FdPTEsbyl9KSl9fSxlLnByb3RvdHlwZS5sb2dQbGFpbj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTEwMCksaSg0MCkuaXNQZXJjZW50KHQpJiZpKDkzKS5yZXF1ZXN0KHRoaXMuZ2V0UmVxdWVzdE9iamVjdChlKSl9LGUucHJvdG90eXBlLmdldERlZmF1bHRGaWVsZHM9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmljZTp0aGlzLnNlcnZpY2UsdmVyc2lvbjp0aGlzLnZlcnNpb24sc2lkOnRoaXMuc2lkLGxhYmVsczp0aGlzLmxhYmVscyxkYXRhOnRoaXMuZGF0YSx0aW1lc3RhbXA6TnVtYmVyKG5ldyBEYXRlKSx1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxyZWZlcnJlcjpkb2N1bWVudC5yZWZlcnJlcixsb2NhdGlvbjppKDkwKS5nZXRIcmVmKCl9fSxlLnByb3RvdHlwZS5nZXRSZXF1ZXN0T2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVybnttZXRob2Q6IlBPU1QiLHVybDppKDE0MCkuUENPREVfTE9HU19VUkwsZGF0YTpKU09OLnN0cmluZ2lmeShuKG4oe30sdGhpcy5nZXREZWZhdWx0RmllbGRzKCkpLGUpKSxvbkJlZm9yZVNlbmQ6aSgyNjgpLm9uQmVmb3JlU2VuZH19LGV9KCk7dC5KU1RyYWNlckxvZ2dlclNsaW09b30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc0VkZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksaSgxMTIpLmdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKGUpPjExfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc01hdGNoaW5nTWVkaWFRdWVyeT1mdW5jdGlvbihlLHQpe2lmKCFpKDcpLmlzRnVuY3Rpb24oZS5tYXRjaE1lZGlhKSlyZXR1cm4hMTt2YXIgbj1lLm1hdGNoTWVkaWEodCk7cmV0dXJuIGkoMjcpLmlzT2JqZWN0KG4pJiZCb29sZWFuKG4ubWF0Y2hlcyl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm9uQmVmb3JlU2VuZD1mdW5jdGlvbihlLHQpe3ZhciBuPXQubWV0aG9kLG89dC51cmwscj10LmFzeW5jLGE9dm9pZCAwPT09cnx8cixzPW5ldyhpKDI0KS5VcmwpKHtob3N0Om99KS5nZXRVcmwoKTtlLm9wZW4obixzLGEpLGUuc2V0UmVxdWVzdEhlYWRlcigieC1hYWItanN0cmFjZXIiLHQudXJsLmxlbmd0aC50b1N0cmluZygpKSxlLnNldFJlcXVlc3RIZWFkZXIoIngtYWFiLWh0dHAtY2hlY2siLCIxIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1EYXRlJiZpKDcpLmlzRnVuY3Rpb24oRGF0ZS5ub3cpO3QuZGF0ZU5vdz1uP2Z1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDMxKS5vbmNlKGZ1bmN0aW9uKCl7cmV0dXJuIGkoMjcxKS5nZXRXaW5kb3dEYXRhU291cmNlKHNlbGYsIllhLnBjb2RlV2luZG93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3KGkoMTQxKS5PYmplY3RTdG9yYWdlKSh7fSl9KX0pO3QuZ2V0V2luZG93U3RvcmFnZT1mdW5jdGlvbihlKXtyZXR1cm4gaSgyNzIpLmdldE9yQ3JlYXRlSXRlbShuKCksZSxmdW5jdGlvbigpe3JldHVybiBuZXcoaSgxNDEpLk9iamVjdFN0b3JhZ2UpKHt9KX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRXaW5kb3dEYXRhU291cmNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1pKDcxKS5nZXQoZSx0KTtyZXR1cm4gb3x8KG89bigpLGkoMTk2KS5zZXQoZSx0LG8pKSxvfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRPckNyZWF0ZUl0ZW09ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPWUuZ2V0SXRlbSh0KTtyZXR1cm4gbnx8KG49aSh0KSxlLnNldEl0ZW0odCxuKSksbn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMzEpLm9uY2UoZnVuY3Rpb24oKXtyZXR1cm4gaSg0MzMpLmdldENyb3NzRnJhbWVEYXRhU291cmNlKHNlbGYsIllhLnBjb2RlQ3Jvc3NGcmFtZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyhpKDE0MSkuT2JqZWN0U3RvcmFnZSkoe30pfSl9KTt0LmdldENyb3NzRnJhbWVTdG9yYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBpKDI3MikuZ2V0T3JDcmVhdGVJdGVtKG4oKSxlLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyhpKDE0MSkuT2JqZWN0U3RvcmFnZSkoe30pfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnRyYXZlcnNlQnJlYWR0aD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT1lLnNsaWNlKCk7aS5sZW5ndGg7KXt2YXIgbj10KGkuc2hpZnQoKSk7aWYoIW4pcmV0dXJuO2kucHVzaC5hcHBseShpLG4pfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWV0cmlrYUFkU2Vzc2lvbkxhYmVsPSJhZFNlc3Npb25JRCIsdC5jb25maWd1cmVNZXRyaWthPWkoMSkucHJvdGVjdCgic2Vzc2lvbklkOjpjb25maWd1cmVNZXRyaWthIixmdW5jdGlvbihlLG4pe3ZhciBvO2koNDM0KS5wdXNoTWV0cmlrYUV2ZW50KGUsKChvPXt9KVt0Lm1ldHJpa2FBZFNlc3Npb25MYWJlbF09bixvKSl9KX0sZnVuY3Rpb24oZSx0LGkpeyhmdW5jdGlvbihlKXt2YXIgbj12b2lkIDAhPT1lJiZlfHwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fHdpbmRvdyxvPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtmdW5jdGlvbiByKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9dC5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKG8uY2FsbChzZXRUaW1lb3V0LG4sYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSx0LnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKG8uY2FsbChzZXRJbnRlcnZhbCxuLGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHQuY2xlYXJUaW1lb3V0PXQuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbihlKXtlJiZlLmNsb3NlKCl9LHIucHJvdG90eXBlLnVucmVmPXIucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sci5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwobix0aGlzLl9pZCl9LHQuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LHQudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSx0Ll91bnJlZkFjdGl2ZT10LmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7dD49MCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX29uVGltZW91dCYmZS5fb25UaW1lb3V0KCl9LHQpKX0saSg0NDMpLHQuc2V0SW1tZWRpYXRlPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5zZXRJbW1lZGlhdGV8fHZvaWQgMCE9PWUmJmUuc2V0SW1tZWRpYXRlfHx0aGlzJiZ0aGlzLnNldEltbWVkaWF0ZSx0LmNsZWFySW1tZWRpYXRlPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5jbGVhckltbWVkaWF0ZXx8dm9pZCAwIT09ZSYmZS5jbGVhckltbWVkaWF0ZXx8dGhpcyYmdGhpcy5jbGVhckltbWVkaWF0ZX0pLmNhbGwodCxpKDI3NykpfSxmdW5jdGlvbihlLHQpe3ZhciBpO2k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7aT1pfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfHwoMCxldmFsKSgidGhpcyIpfWNhdGNoKGUpeyJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoaT13aW5kb3cpfWUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDY5KSxvPWkoMjgzKSxyPWkoMzkyKTt0LmNvbXBvbmVudHM9e2VsZW1lbnQ6by5Db21wb25lbnRFbGVtZW50LGNvbnRhaW5lcjpuLkNvbnRhaW5lcixodG1sOnIuSHRtbH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0TmF0aXZlTWV0aG9kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtpZighaSgzNykuY2hlY2tOYXRpdmVDb2RlKG4pKXt2YXIgbz1uO3RyeXtkZWxldGUgZVt0XSxuPWVbdF0sZVt0XT1vfWNhdGNoKGUpe319cmV0dXJuIG59fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbWVsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1stfF9cOl0oW2Etel0pL2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm9iamVjdENyZWF0ZT1pKDI3OSkuZ2V0TmF0aXZlTWV0aG9kKE9iamVjdCwiY3JlYXRlIik/T2JqZWN0LmNyZWF0ZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt9aWYobi5wcm90b3R5cGU9ZSxpKDI3KS5pc09iamVjdCh0KSlmb3IodmFyIG8gaW4gdCl0Lmhhc093blByb3BlcnR5KG8pJiYobltvXT10W29dKTtyZXR1cm4gbmV3IG59fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LlJlbmRlcmFibGU9dm9pZCAwO3ZhciBuPWkoMTMpO2Z1bmN0aW9uIG8oKXt9by5wcm90b3R5cGU9e3Nob3VsZFJlbmRlcjpuLm5vb3AsYmVmb3JlUmVuZGVyOm4ubm9vcCxyZW5kZXI6bi5ub29wLGFmdGVyUmVuZGVyOm4ubm9vcCxtb3VudDpuLm5vb3AsdW5tb3VudDpuLm5vb3B9LHQuUmVuZGVyYWJsZT1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LkNvbXBvbmVudEVsZW1lbnQ9dm9pZCAwO3ZhciBuLG89aSgxOSkscj1kKGkoNjQpKSxhPWkoMTAyKSxzPShuPWEpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxsPWkoOTUpLGM9ZChpKDE3KSksdT1kKGkoMTE2KSk7ZnVuY3Rpb24gZChlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHRbImRlZmF1bHQiXT1lLHR9dmFyIHA9dS5OUyxmPXUuQXR0cmlidXRlTmFtZXMsaD11LkF0dHJpYnV0ZU5hbWVzcGFjZTt0LkNvbXBvbmVudEVsZW1lbnQ9ci5hdWdtZW50KGwuQWJzdHJhY3RDb21wb25lbnQse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7bC5BYnN0cmFjdENvbXBvbmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHVubW91bnQ6ZnVuY3Rpb24oKXt0aGlzLnVuYmluZEFsbCgpO3ZhciBlPXRoaXMuX2VsZW1lbnQ7ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksbC5BYnN0cmFjdENvbXBvbmVudC5wcm90b3R5cGUudW5tb3VudC5hcHBseSh0aGlzKX0saW5pdFByb3BzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRhZz1lLnRhZ3x8ImRpdiIsZGVsZXRlIGUudGFnLGV9LGJlZm9yZVJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZzt0aGlzLl9lbGVtZW50PWUud3JpdGUodCwic3ZnIj09PXQ/cC5zdmc6bnVsbCksdGhpcy5fbmFtZXNwYWNlVVJJPXRoaXMuX2VsZW1lbnQubmFtZXNwYWNlVVJJLHRoaXMuX2FwcGx5UHJvcHMoKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oZSl7ZS5lbmQoKX0sX2FwcGx5UHJvcHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENvbnRleHRDb21wb25lbnQoKSx0PXRoaXMucHJvcHMsaT12b2lkIDA7Zm9yKGkgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGkpKXt2YXIgbj10W2ldO2lmKCJvIj09PWlbMF0mJiJuIj09PWlbMV0pe3ZhciBvPWkudG9Mb3dlckNhc2UoKS5zdWJzdHJpbmcoMik7dGhpcy5iaW5kKG8sbixlKX1lbHNlIHRoaXMuc2V0QXR0cihpLG4pfX0sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxoYXNDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gc1siZGVmYXVsdCJdLmhhc0NsYXNzKHRoaXMuX2VsZW1lbnQsZSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3NbImRlZmF1bHQiXS5hZGRDbGFzcyh0aGlzLl9lbGVtZW50LGUpfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXtzWyJkZWZhdWx0Il0ucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudCxlKX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXtzWyJkZWZhdWx0Il0udG9nZ2xlQ2xhc3ModGhpcy5fZWxlbWVudCxlLHQpfSxzZXRTdHlsZTpmdW5jdGlvbihlLHQpe3NbImRlZmF1bHQiXS5zZXRTdHlsZSh0aGlzLl9lbGVtZW50LGUsdCl9LHNldEF0dHI6ZnVuY3Rpb24oZSx0KXtpZigiY2xhc3MiPT09ZSlzWyJkZWZhdWx0Il0uY2xlYXJDbGFzc2VzKHRoaXMuX2VsZW1lbnQpLHRoaXMuYWRkQ2xhc3ModCk7ZWxzZXtpZigic3R5bGUiPT09ZSlyZXR1cm4gdm9pZCgoMCxvLmlzU3RyaW5nKSh0KT90aGlzLl9lbGVtZW50LnN0eWxlLmNzc1RleHQ9dDp0aGlzLnNldFN0eWxlKHQpKTtpZih0aGlzLl9uYW1lc3BhY2VVUkk9PT1wLnN2Zyl7dmFyIGk9aFtlXTtpZihpKXJldHVybiB2b2lkIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlTlMoaSxmW2VdfHxlLHQpfXRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKGUsdCl9fSxnZXRBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZShlKX0sYmluZDpmdW5jdGlvbihlLHQsaSxuKXtyZXR1cm4gdGhpcy5fZG9tTGlzdGVuZXJzfHwodGhpcy5fZG9tTGlzdGVuZXJzPVtdKSx0aGlzLl9kb21MaXN0ZW5lcnMucHVzaChjLm9uKHRoaXMuX2VsZW1lbnQsZSx0LGl8fHRoaXMsbikpLHRoaXN9LHVuYmluZEFsbDpmdW5jdGlvbigpe2lmKHRoaXMuX2RvbUxpc3RlbmVycyl7dmFyIGU9dGhpcy5fZG9tTGlzdGVuZXJzLHQ9dm9pZCAwO2Zvcih0IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGk9ZVt0XTtjLnVuKGkpfXRoaXMuX2RvbUxpc3RlbmVycy5sZW5ndGg9MH19fSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudW5pcXVlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspdFtlW25dXT1uO3JldHVybiBpKDQ2KS5nZXRPYmplY3RLZXlzKHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1NoYWRvd0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4haSgxMSkuY29uZmlnLmRpc2FibGVTaGFkb3cmJmkoMjg2KS5oYXNBdHRhY2hTaGFkb3coKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG47ZnVuY3Rpb24gbygpe2lmKHZvaWQgMD09PW4pe3ZhciBlPW51bGw7dHJ5e2U9RWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93fWNhdGNoKGUpe31pZihlJiZpKDM3KS5jaGVja05hdGl2ZUNvZGUoZSkpbj1lO2Vsc2V7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dC5zdHlsZS5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBvPWkoNzEpLmdldCh0LCJjb250ZW50V2luZG93LkVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyIpO249byYmaSgzNykuY2hlY2tOYXRpdmVDb2RlKG8pP286bnVsbCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX1yZXR1cm4gbn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRBdHRhY2hTaGFkb3c9ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiB0JiZ0LmJpbmQoZSl9LHQuaGFzQXR0YWNoU2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1vKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldElzUXVpcmtzPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLCJCYWNrQ29tcGF0Ij09PWUuZG9jdW1lbnQuY29tcGF0TW9kZX0sdC5nZXRJc0lFUXVpcmtzPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dmFyIG49aSgxMTIpLmdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKGUpO3JldHVybiBuPjAmJig1PT09ZS5kb2N1bWVudC5kb2N1bWVudE1vZGV8fDEwIT09biYmdC5nZXRJc1F1aXJrcyhlKSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzU2FmYXJpPWkoMjAxKS5nZXRJc1NhZmFyaSgpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzRmlyZWZveD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSwvZmlyZWZveC8udGVzdChlLm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldElzQ2hyb21lPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLC9DaHJvbWUvLnRlc3QoZS5uYXZpZ2F0b3IudXNlckFnZW50KSYmL0dvb2dsZSBJbmMvLnRlc3QoZS5uYXZpZ2F0b3IudmVuZG9yKSYmIWkoMjAyKS5nZXRJc1lhQnJvd3NlcihlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNVQ0Jyb3dzZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksZS5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlVDQnJvd3NlciIpPi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1dpbmRvd3NQaG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSwvV2luZG93cyBQaG9uZS9pLnRlc3QoZS5uYXZpZ2F0b3IudXNlckFnZW50KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNNb2JpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksL01vYml8QW5kcm9pZC9pLnRlc3QoZS5uYXZpZ2F0b3IudXNlckFnZW50KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNIRFBJU2NyZWVuPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLChlLmRldmljZVBpeGVsUmF0aW98fGUuc2NyZWVuLmRldmljZVhEUEkmJmUuc2NyZWVuLmRldmljZVhEUEkvZS5zY3JlZW4ubG9naWNhbFhEUEl8fDEpPjF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEJyb3dzZXJOYW1lPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dmFyIHQ9aSg4MSkuZ2V0VXNlckFnZW50KGUpLG49dC5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHx1Y2Jyb3dzZXJ8bXNpZXx0cmlkZW50KD89XC8pKVwvP1xzKihcZCspL2kpfHxbXTtpZigvdHJpZGVudC9pLnRlc3QoblsxXSkpcmV0dXJuIk1TSUUiO2lmKCJDaHJvbWUiPT09blsxXSl7dmFyIG89dC5tYXRjaCgvXGIoT1BSfEVkZ2V8WWFCcm93c2VyKVwvKFxkKykvKTtpZihudWxsIT09bylyZXR1cm4gb1sxXS5yZXBsYWNlKCJPUFIiLCJPcGVyYSIpfXJldHVybiBuWzFdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc0xvbmdVcmxTdXBwb3J0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksIWkoMjk3KS5nZXRJc0lFKGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc0lFPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLC0xIT09aSgxMTIpLmdldEludGVybmV0RXhwbG9yZXJWZXJzaW9uKGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5IRVhfU1lNQk9MUz0iMDEyMzQ1Njc4OWFiY2RlZiJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMjgpO3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbihlLHQpe3ZhciBpPXQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShuLmdldEFsaWFzKGUpKTtyZXR1cm4gMD09PWkubGVuZ3RoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTppfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRDb21wdXRlZEZvbnRTaXplPWZ1bmN0aW9uKGUpe3RyeXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpO3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodCkpfWNhdGNoKGUpe3JldHVybiBudWxsfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm57aGVpZ2h0OmUuY2xpZW50SGVpZ2h0LHdpZHRoOmUuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIG8oZSl7cmV0dXJue2hlaWdodDplLnNjcm9sbEhlaWdodHx8ZS5vZmZzZXRIZWlnaHQsd2lkdGg6ZS5zY3JvbGxXaWR0aHx8ZS5vZmZzZXRXaWR0aH19ZS5leHBvcnRzPXtlbGVtZW50Rml0czpmdW5jdGlvbihlLHQpe3ZhciBpPW4oZSkscj1vKHQpLGE9aS53aWR0aC1yLndpZHRoLHM9aS5oZWlnaHQtci5oZWlnaHQ7cmV0dXJuIGE+PS0xJiZzPj0tMX0sZ2V0RWxlbWVudEZ1bGxTaXplOm8sZ2V0RWxlbWVudElubmVyU2l6ZTpufX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXROb3VuRm9ybT1mdW5jdGlvbihlLHQpe3ZhciBpPWUlMTAwLG49ZSUxMDtyZXR1cm4gaT4xMCYmaTwyMD90WzJdOm4+MSYmbjw1P3RbMV06MT09PW4/dFswXTp0WzJdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sb2FkSW1hZ2U9ZnVuY3Rpb24oZSl7aWYoIWUuc3JjKXJldHVybiBpKDkpLmxvZ2dlci53YXJuKCJFbXB0eSBpbWFnZSBzcmMiLCJsb2FkSW1hZ2UiKSx2b2lkKGUub25FcnJvciYmaSgxKS5wcm90ZWN0KCJoYW5kbGVyOmVycm9yIixlLm9uRXJyb3IsZS5jdHgpKCkpO3ZhciB0PW5ldyBJbWFnZTtpKDcpLmlzRnVuY3Rpb24oZS5vbkxvYWQpJiZpKDE3KS5vbih0LCJsb2FkIixlLm9uTG9hZCxlLmN0eCksaSg3KS5pc0Z1bmN0aW9uKGUub25FcnJvcikmJmkoMTcpLm9uKHQsImVycm9yIixlLm9uRXJyb3IsZS5jdHgpLHQuc3JjPWUuc3JjfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5CZW1Gb3JtYXR0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU7dmFyIHQ9W107cmV0dXJuIG4uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oaSl7aWYobi5pc1N0cmluZyhpKSl7dmFyIHI9aS5zcGxpdCgvXHMrLyk7dC5wdXNoKG4ubWFwKHIsZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShvLGZ1bmN0aW9uKCl7cmV0dXJuIGUrYXJndW1lbnRzWzFdfSl9KS5qb2luKCIgIikpfX0pLHQuam9pbigiICIpfX07dmFyIG49ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSk7dmFyIG89L14oW18tXVx3KykvfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LkNvbXBvbmVudEV2ZW50cz12b2lkIDA7dmFyIG49ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSksbz1pKDQ5MSk7dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLGE9dC5Db21wb25lbnRFdmVudHM9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnN0b3BMaXN0ZW5pbmcoKSx0aGlzLl9fYmFzZSgpfSxmaXJlRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQsaT1yLmNhbGwoYXJndW1lbnRzLDEpLG89bi5jYW1lbGl6ZSgib246IitlKSxhPXRoaXM7ZG97dmFyIHM9YVtvXTtuLmlzRnVuY3Rpb24ocykmJih0PXMuYXBwbHkoYSxpKSksYT1hLmdldENvbnRleHRDb21wb25lbnQoKX13aGlsZSghMSE9PXQmJmEpOyExIT09dCYmdGhpcy50cmlnZ2VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O24uZXh0ZW5kKGEsby5FdmVudHMpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0scj1pKDY2KSxhPWkoMykscz0obj1hKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0sbD1pKDMwNSksYz1pKDI2KSx1PWkoOCksZD1pKDEzNCkscD1pKDc0KTt2YXIgZj0hMTtmPWkoMTEpLmNvbmZpZy5oaWRlTGlua3M7dmFyIGg9c1siZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChbc1siZGVmYXVsdCJdLmNvbXBvbmVudHMuZWxlbWVudCxsLkNvbXBvbmVudEV2ZW50c10se2luaXRQcm9wczpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWc9ZS50YWd8fCJhIix0aGlzLmRpc2FibGVkPWUuZGlzYWJsZWR8fCJhIiE9PWUudGFnLHRoaXMuX19iYXNlKGUpfSxiZWZvcmVSZW5kZXI6ZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnRMaW5rPXRoaXMuZmluZFBhcmVudExpbmsoKSx0aGlzLnRhZz10aGlzLmRpc2FibGVkfHx0aGlzLnBhcmVudExpbmt8fGY/ImRpdiI6ImEiLHRoaXMuaW1tdXRhYmxlPXRoaXMucHJvcHMuaW1tdXRhYmxlLHRoaXMub3JpZ2luUHJvcHM9dGhpcy5wcm9wcyx0aGlzLnByb3BzPXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXMoKSx0aGlzLl9fYmFzZShlKX0sZmluZFBhcmVudExpbms6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFBhcmVudENvbXBvbmVudCgpLHQ9bnVsbDtkb3tlIGluc3RhbmNlb2YgaCYmKHQ9ZSksZSYmKGU9ZS5nZXRQYXJlbnRDb21wb25lbnQoKSl9d2hpbGUobnVsbD09PXQmJmUpO3JldHVybiBudWxsIT09dCYmdC5kaXNhYmxlZD9udWxsOnR9LGV4dHJhY3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5Qcm9wcyx0PSgwLHIuY2xhc3NOYW1lc0ZhY3RvcnkpKGUuY2xhc3NOYW1lcyksaT1vKHt9LGUse3RhcmdldDplLnRhcmdldHx8Il9ibGFuayIsY2xhc3M6dChlWyJjbGFzcyJdLHQodGhpcy5kaXNhYmxlZD8iOjpkaXNhYmxlZCI6Ijo6YWN0aXZlIiksZiYmIXRoaXMuZGlzYWJsZWQ/InlhcC1saW5rX19wb2ludGVyIjoiIil9KTtyZXR1cm4gZGVsZXRlIGkudHlwZSxkZWxldGUgaS5kaXNhYmxlZCxkZWxldGUgaS5jbGFzc05hbWVzLGRlbGV0ZSBpLmltbXV0YWJsZSwodGhpcy5kaXNhYmxlZHx8dGhpcy5wYXJlbnRMaW5rfHxmKSYmKGRlbGV0ZSBpLnRhcmdldCxkZWxldGUgaS5ocmVmKSxpfSxvbk1vdW50OmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuYmluZCgiY2xpY2siLHRoaXMub25DbGljayx0aGlzKSx0aGlzLmJpbmQoIm1vdXNlZW50ZXIiLHRoaXMub25Nb3VzZUVudGVyLHRoaXMpLHRoaXMuYmluZCgibW91c2VsZWF2ZSIsdGhpcy5vbk1vdXNlTGVhdmUsdGhpcyksdGhpcy5iaW5kKCJjb250ZXh0bWVudSIsdGhpcy5vbkNvbnRleHRNZW51LHRoaXMpKX0sb25Db250ZXh0TWVudTpmdW5jdGlvbihlKXt0aGlzLnVybCYmKHRoaXMuc2V0SHJlZih0aGlzLnVybC5nZXRSZWRpcmVjdCgpKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe3RoaXMuc2V0SHJlZih0aGlzLmdldExpbmsoKSksdGhpcy5maXJlRXZlbnQoIm1vdXNlLWVudGVyOmxpbmsiLGUsdGhpcy5vcmlnaW5Qcm9wcy50eXBlKX0sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0SHJlZihudWxsKSx0aGlzLmZpcmVFdmVudCgibW91c2UtbGVhdmU6bGluayIsZSx0aGlzLm9yaWdpblByb3BzLnR5cGUpfSxzZXRIcmVmOmZ1bmN0aW9uKGUpe2lmKGUmJih0aGlzLnVybD1lKSwhZilpZih0aGlzLnBhcmVudExpbmspdGhpcy5wYXJlbnRMaW5rLnNldEhyZWYoZXx8dGhpcy5wYXJlbnRMaW5rLnVybCk7ZWxzZSBpZihlKXRoaXMuY2hhbmdlSHJlZihlLmdldFRhcmdldFVybCgpKTtlbHNle3ZhciB0PXRoaXMuZ2V0TGluaygpO3RoaXMuY2hhbmdlSHJlZih0LmdldFJlZGlyZWN0KCkpfX0sY2hhbmdlSHJlZjpmdW5jdGlvbihlKXt0aGlzLmdldEF0dHIoImhyZWYiKSE9PWUmJnRoaXMuc2V0QXR0cigiaHJlZiIsZSl9LG9uQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMaW5rKCk7dGhpcy5wYXJlbnRMaW5rfHx0fHxlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRDb21wb25lbnQ9dGhpcyxlLmhyZWY9dGhpcy51cmwudG9TdHJpbmcoKTt2YXIgaT0oMCxwLmdldENsaWNrSW5mb0ZvclVybCkoKXx8e307aWYoIXRoaXMuaXNTZW5kQmVhY29uRW5hYmxlZCgpJiYhdGhpcy5pbW11dGFibGUmJnRoaXMudXJsJiZ0aGlzLnVybC5nZXRSZWRpcmVjdCl7dmFyIG49dGhpcy51cmwuZ2V0UmVkaXJlY3QoaSk7dGhpcy5zZXRIcmVmKG4pLGUuaHJlZj1ufXRoaXMuZmlyZUV2ZW50KCJjbGljazpsaW5rIixlLHRoaXMub3JpZ2luUHJvcHMudHlwZSksdCYmIWUuZGVmYXVsdFByZXZlbnRlZCYmKHRoaXMuZmlyZUV2ZW50KCJvcGVuOmxpbmsiLGUsdGhpcy5vcmlnaW5Qcm9wcy50eXBlKSxmJiYhZS5kZWZhdWx0UHJldmVudGVkJiZ3aW5kb3cub3Blbih0LHRoaXMuZ2V0VGFyZ2V0KCkpKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VuZEJlYWNvbigpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LGdldExpbms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmlnaW5Qcm9wcy5ocmVmfHwiIn0sZ2V0VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3JpZ2luUHJvcHMudGFyZ2V0fHwiX2JsYW5rIn0saXNTZW5kQmVhY29uRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVybCYmdGhpcy51cmwuaGFzVGFyZ2V0VXJsJiZ0aGlzLnVybC5oYXNUYXJnZXRVcmwoKX0sc2VuZEJlYWNvbjpmdW5jdGlvbigpe2lmKHRoaXMuaXNTZW5kQmVhY29uRW5hYmxlZCgpKXt2YXIgZT0oMCxwLmdldENsaWNrSW5mb0ZvclVybCkoKXx8e30sdD10aGlzLnVybC5nZXRSZWRpcmVjdChvKHtiZWFjb246MX0sZSkpOygwLGMuaXNMb25nRXhwZXJpbWVudCkodS5leHBlcmltZW50SWRzLnNlbmRCZWFjb25FeHAuU0VOREJFQUNPTikmJm5hdmlnYXRvci5zZW5kQmVhY29uKHQpLCgwLGMuaXNMb25nRXhwZXJpbWVudCkodS5leHBlcmltZW50SWRzLnNlbmRCZWFjb25FeHAuWEhSKSYmKDAsZC5yZXF1ZXN0KSh7dXJsOnQsbWV0aG9kOiJwb3N0IixyZXRyaWVzOjB9KX19fSk7ZS5leHBvcnRzPWh9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXdpbmRvdztmdW5jdGlvbiBvKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dHJ5e3ZhciB0PSJvd25lckRvY3VtZW50ImluIGUmJiJkZWZhdWx0VmlldyJpbiBlLm93bmVyRG9jdW1lbnQ/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OmUsaT10Lm1yYWlkfHx0LnRvcC5tcmFpZDtyZXR1cm4gaSYmaS5nZXRTdGF0ZSYmaS5hZGRFdmVudExpc3RlbmVyP2k6dm9pZCAwfWNhdGNoKGUpe3JldHVybn19ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9biksdm9pZCAwIT09byhlKX10LmdldE1yYWlkPW8sdC5pc0F2YWlsYWJsZT1yLHQuaXNSZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bikscihlKSYmImxvYWRpbmciIT09byhlKS5nZXRTdGF0ZSgpfSx0Lm9wZW49ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1lJiYoZT1uKSxyKGUpJiZvKGUpLm9wZW4odCl9LHQub249ZnVuY3Rpb24oZSx0LGEscyl7aWYodm9pZCAwPT09ZSYmKGU9biksIXIoZSkpcmV0dXJuIGkoMTMpLm5vb3A7dmFyIGw9byhlKTtyZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKHQsYSksZnVuY3Rpb24oKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxhKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LndyYXBDaGlsZFNjcmlwdHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmNoaWxkTm9kZXMubGVuZ3RoO3QrKyl7dmFyIG49ZS5jaGlsZE5vZGVzW3RdLG89bi50YWdOYW1lO2lmKG8mJiJTQ1JJUFQiPT09by50b1VwcGVyQ2FzZSgpKXt2YXIgcj1uLmdldEF0dHJpYnV0ZSgidHlwZSIpfHwiIjtpZihuLnNyY3x8IkFQUExJQ0FUSU9OL0pTT04iPT09ci50b1VwcGVyQ2FzZSgpKXt2YXIgYT1pKDExOCkuY3JlYXRlUmFuZG9tRWxlbWVudFRyZWUoKTtlLmluc2VydEJlZm9yZShhWzBdLG4pLGFbYS5sZW5ndGgtMV0uYXBwZW5kQ2hpbGQobil9ZWxzZSBpKDYzKS5yZW1vdmVOb2RlRnJvbVBhcmVudChuKX19fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5yZWNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWUucGFyZW50RWxlbWVudDtpZighbylyZXR1cm4gbnVsbDt2YXIgcj1lLmNsb25lTm9kZSgpO3Iuc3R5bGUucmVtb3ZlUHJvcGVydHkoImRpc3BsYXkiKTtmb3IodmFyIGE9MDthPHIuYXR0cmlidXRlcy5sZW5ndGg7YSsrKXt2YXIgcz1yLmF0dHJpYnV0ZXNbYV0ubmFtZTtyLmdldEF0dHJpYnV0ZShzKXx8ci5yZW1vdmVBdHRyaWJ1dGUocyl9ci5hcHBlbmRDaGlsZCh0WzBdKTtmb3IodmFyIGw9dFt0Lmxlbmd0aC0xXTtlLmZpcnN0Q2hpbGQ7KWwuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtpZihuKWZvcih2YXIgYz1pKDIwNCkuZ2V0Um9vdE5vZGUobiksdT1pKDMxMCkuY3JlYXRlU2hhZG93Um9vdChsKTtjJiZjLmZpcnN0Q2hpbGQ7KXUuYXBwZW5kQ2hpbGQoYy5maXJzdENoaWxkKTtyZXR1cm4gby5pbnNlcnRCZWZvcmUocixlKSxpKDYzKS5yZW1vdmVOb2RlRnJvbVBhcmVudChlKSxyfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKGUpe3ZhciB0LG4sbz1pKDExOCkuY3JlYXRlUmFuZG9tRWxlbWVudFRyZWUoKTtyZXR1cm4gZS5hcHBlbmRDaGlsZChvWzBdKSxvW28ubGVuZ3RoLTFdLnRleHRDb250ZW50PSh0PWRvY3VtZW50LmJvZHksKG49dC5pbm5lclRleHQuc3BsaXQoIlxuIikpW2koNDgpLmdldFJhbmRvbUludCgwLG4ubGVuZ3RoLTEpXSksaSgyODYpLmdldEF0dGFjaFNoYWRvdyhlKSh7bW9kZToiY2xvc2VkIn0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wcmV2ZW50Q2xpY2tzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPVsiY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sbj1EYXRlLm5vdygpLG89ZnVuY3Rpb24oZSl7RGF0ZS5ub3coKS1uPHQmJihlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9LHI9MCxhPWk7cjxhLmxlbmd0aDtyKyspe3ZhciBzPWFbcl07ZS5hZGRFdmVudExpc3RlbmVyKHMsbywhMCl9c2V0VGltZW91dChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLG49aTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIocixvLCEwKX19LHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NSU5fQVJFQV9CSUdfQkxPQ0s9MjQyNTAwLHQuVklTSUJMRV9QT1JUSU9OX0JJR19CTE9DSz0uMyx0LlZJU0lCTEVfUE9SVElPTl9CTE9DS19ESVJFQ1RfQ09NTU9OPS41LHQuZ2V0UG9ydGlvbj1mdW5jdGlvbihlLGkpe3JldHVybiBpJiYoaS5jbGllbnRXaWR0aHx8MCkqKGkuY2xpZW50SGVpZ2h0fHwwKT49dC5NSU5fQVJFQV9CSUdfQkxPQ0s/dC5WSVNJQkxFX1BPUlRJT05fQklHX0JMT0NLOnQuVklTSUJMRV9QT1JUSU9OX0JMT0NLX0RJUkVDVF9DT01NT059fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgxNCkscj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLmFyZ3M9ZSx0aGlzLnJ1bm5pbmdDb3VudD0wLHRoaXMuY2FsbGJhY2s9ZnVuY3Rpb24oZSxpKXt2YXIgbj1lKzE7aT9uPT09dC5zdHJhdGVnaWVzLmxlbmd0aD90LmFyZ3MuY2FsbGJhY2soaSk6bj09PXQucnVubmluZ0NvdW50JiZ0LnN0YXJ0TmV4dCgpOih0LnN0b3BVbnRpbChuKSx0LmFyZ3MuY2FsbGJhY2soaSkpfSx0aGlzLnN0cmF0ZWdpZXM9by5tYXAoZS5zdHJhdGVneUZhY3RvcmllcyxmdW5jdGlvbihlLGkpe3JldHVybiBlKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGxiYWNrKGksZSl9KX0pfXJldHVybiBlLmZyb209ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdFtpXT1hcmd1bWVudHNbaV07cmV0dXJuIGZ1bmN0aW9uKGkpe2Zvcih2YXIgbz1bXSxyPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHI9ZShuKG4oe30saSkse2NhbGxiYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX0pKTtpZighcilyZXR1cm57dmFsdWU6bnVsbH07by5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiB0PWUscn0pfSxhPTAscz10O2E8cy5sZW5ndGg7YSsrKXt2YXIgbD1yKHNbYV0pO2lmKCJvYmplY3QiPT10eXBlb2YgbClyZXR1cm4gbC52YWx1ZX1yZXR1cm4gbmV3IGUoe2NhbGxiYWNrOmkuY2FsbGJhY2ssc3RyYXRlZ3lGYWN0b3JpZXM6b30pfX0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXshdGhpcy5ydW5uaW5nQ291bnQmJnRoaXMuc3RyYXRlZ2llcy5sZW5ndGgmJnRoaXMuc3RhcnROZXh0KCl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnN0b3BVbnRpbCgwKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpc0RldGVybWluZWQiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PXRoaXMuc3RyYXRlZ2llcztlPHQubGVuZ3RoO2UrKyl7aWYoIXRbZV0uaXNEZXRlcm1pbmVkKXJldHVybiExfXJldHVybiEwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldElzVmlzaWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5zdHJhdGVnaWVzLmxlbmd0aDtlKyspaWYoIXRoaXMuc3RyYXRlZ2llc1tlXS5nZXRJc1Zpc2libGUoKSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuc3RhcnROZXh0PWZ1bmN0aW9uKCl7dGhpcy5zdHJhdGVnaWVzW3RoaXMucnVubmluZ0NvdW50KytdLnN0YXJ0KCl9LGUucHJvdG90eXBlLnN0b3BVbnRpbD1mdW5jdGlvbihlKXtmb3IoO3RoaXMucnVubmluZ0NvdW50PmU7KXRoaXMuc3RyYXRlZ2llc1stLXRoaXMucnVubmluZ0NvdW50XS5zdG9wKCl9LGV9KCk7dC5BbGxPZlN0cmF0ZWd5PXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoNTEwKSxhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5mYWN0b3J5PWZ1bmN0aW9uKGUpe3JldHVybiBlLmVsZW1lbnQ/bmV3IHQoZSk6bnVsbH0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIXIuaXNPdmVybGFwcGVkKHRoaXMuYXJncy5lbGVtZW50LHRoaXMuYXJncy5vdmVybGFwcGVkUG9pbnRzKX0sdH0oaSgzMTYpLkludGVydmFsU3RyYXRlZ3kpO3QuT3ZlcmxheVN0cmF0ZWd5PWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNPcGVyYU1pbmk9aSgyMDApLmlzT3BlcmFNaW5pKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5hcmdzPWUsdGhpcy5pc0RldGVybWluZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRpbWVyPXdpbmRvdy5zZXRJbnRlcnZhbChuLnByb3RlY3QoInZpc2liaWxpdHlPYnNlcnZlciIsZnVuY3Rpb24oKXtlLmFyZ3MuY2FsbGJhY2soZS5pc1Zpc2libGUoKSl9KSx0aGlzLmFyZ3MuaW50ZXJ2YWwpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcil9LGUucHJvdG90eXBlLmdldElzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmlzaWJsZSgpfSxlfSgpO3QuSW50ZXJ2YWxTdHJhdGVneT1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEZyaWVuZGx5V2luZG93c0NoYWluPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOyl0cnl7aWYoaSgyMDcpLmdldFdpbmRvd0xvY2F0aW9uKGUpLHQucHVzaChlKSxlLnBhcmVudD09PWUpYnJlYWs7ZT1lLnBhcmVudH1jYXRjaChlKXticmVha31yZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQsaSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHQsaSktTWF0aC5tYXgoZSwwKSwwKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRSYXRpb0luVmlld3BvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9aSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpLG89dC53aWR0aCxyPXQuaGVpZ2h0LGE9MDtpZihvPjAmJnI+MCl7dmFyIHM9aSgxNDUpLmdldFdpbmRvd1NpemUoKTthPW4odC5sZWZ0LHQucmlnaHQscy53aWR0aCkqbih0LnRvcCx0LmJvdHRvbSxzLmhlaWdodCkvKG8qcil9cmV0dXJuIGF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSg1OCkscj1pKDEpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciBpPXRoaXM7dGhpcy5hcmdzPXQsdGhpcy5pc0RldGVybWluZWQ9ITAsdGhpcy5vblZpZXdhYmxlQ2hhbmdlPXIucHJvdGVjdCgiTVJBSUQ6OnZpZXdhYmxlQ2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWkuYXJncy5tcmFpZDtpLmNoZWNrKGUuaXNWaWV3YWJsZSgpKX0sdGhpcyksdGhpcy5vbkV4cG9zdXJlQ2hhbmdlPXIucHJvdGVjdCgiTVJBSUQ6OmV4cG9zdXJlQ2hhbmdlIixmdW5jdGlvbihlKXt2YXIgdD1pLmFyZ3MucG9ydGlvbixuPWUvMTAwO2kuY2hlY2sobj49dCl9LHRoaXMpO3ZhciBuPXQubXJhaWQsbz1uLmdldFZlcnNpb24oKTt0aGlzLm9uVmlld2FibGVDaGFuZ2UudG9TdHJpbmc9ZS5nZXRQcm90ZWN0ZWRUb1N0cmluZ0Z1bmN0aW9uKCksdGhpcy5vbkV4cG9zdXJlQ2hhbmdlLnRvU3RyaW5nPWUuZ2V0UHJvdGVjdGVkVG9TdHJpbmdGdW5jdGlvbigpLChwYXJzZUludChvLDEwKT49M3x8bi5fX1BSSVZfXyYmbi5fX1BSSVZfXy5pc1lhTXJhaWQzRmVhdHVyZVN1cHBvcnRlZCYmbi5fX1BSSVZfXy5pc1lhTXJhaWQzRmVhdHVyZVN1cHBvcnRlZCgiZXhwb3N1cmVDaGFuZ2UiKSkmJih0aGlzLmlzU3VwcG9ydEV4cG9zdXJlQ2hhbmdlPSEwKX1yZXR1cm4gZS5mYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBpPXQuZWxlbWVudDtpZighaSlyZXR1cm4gbnVsbDt2YXIgcj1vLk1yYWlkSGVscGVycy5nZXRNcmFpZChpKTtyZXR1cm4gcj9uZXcgZShuKG4oe30sdCkse21yYWlkOnJ9KSk6bnVsbH0sZS5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFyZ3MubXJhaWQ7dGhpcy5pc1N1cHBvcnRFeHBvc3VyZUNoYW5nZT9lLmFkZEV2ZW50TGlzdGVuZXIoImV4cG9zdXJlQ2hhbmdlIix0aGlzLm9uRXhwb3N1cmVDaGFuZ2UpOihlLmFkZEV2ZW50TGlzdGVuZXIoInZpZXdhYmxlQ2hhbmdlIix0aGlzLm9uVmlld2FibGVDaGFuZ2UpLHNldFRpbWVvdXQodGhpcy5vblZpZXdhYmxlQ2hhbmdlKSl9LGUucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFyZ3MubXJhaWQ7dGhpcy5pc1N1cHBvcnRFeHBvc3VyZUNoYW5nZT9lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImV4cG9zdXJlQ2hhbmdlIix0aGlzLm9uRXhwb3N1cmVDaGFuZ2UpOmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlld2FibGVDaGFuZ2UiLHRoaXMub25WaWV3YWJsZUNoYW5nZSl9LGUucHJvdG90eXBlLmdldElzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlKXsoMCx0aGlzLmFyZ3MuY2FsbGJhY2spKGUpfSxlLmNhbGxiYWNrQ291bnQ9MCxlLmdldFByb3RlY3RlZFRvU3RyaW5nRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgdD1lLmNhbGxiYWNrQ291bnQrKztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4icGNvZGUtcHJvdGVjdGVkLWNhbGxiYWNrLSIrdH19LGV9KCk7dC5NcmFpZFN0cmF0ZWd5PWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMyk7dC5yZW5kZXJBZHR1bmVDcm9zc0ljb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gblsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7d2lkdGg6ZS53aWR0aCsicHgiLGhlaWdodDplLmhlaWdodCsicHgiLHZpZXdCb3g6IjAgMCAxNCAxNCJ9LG5bImRlZmF1bHQiXS5jcmVhdGUoInBvbHlnb24iLHtzdHlsZTp7ZmlsbDp0fSxwb2ludHM6IjguMjg2MTY0MjYgNy4wMjA4MTUyOCAxMy42NjM4OTc0IDEyLjM5ODU0ODQgMTIuMzk4NTQ4NCAxMy42NjM4OTc0IDcuMDIwODE1MjggOC4yODYxNjQyNiAxLjY0MzA4MjEzIDEzLjY2Mzg5NzQgMC4zNzc3MzMxNTIgMTIuMzk4NTQ4NCA1Ljc1NTQ2NjMgNy4wMjA4MTUyOCAwLjM3NzczMzE1MiAxLjY0MzA4MjEzIDEuNjQzMDgyMTMgMC4zNzc3MzMxNTIgNy4wMjA4MTUyOCA1Ljc1NTQ2NjMgMTIuMzk4NTQ4NCAwLjM3NzczMzE1MiAxMy42NjM4OTc0IDEuNjQzMDgyMTMifSkpfSx0LnJlbmRlckRvbmVJY29uPWZ1bmN0aW9uKCl7cmV0dXJuIG5bImRlZmF1bHQiXS5jcmVhdGUoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCJ9LG5bImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNNS40ODUgMTEuMDdMMi40NSA4LjAzNyAxLjAzNiA5LjQ1bDMuMDM1IDMuMDM1LS4wMzQuMDM2IDEuNDE0IDEuNDE1IDguNDg1LTguNDg1LTEuNDE0LTEuNDE0LTcuMDM1IDcuMDM1eiJ9KSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDEwKSxzPWkoODkpLGw9aSgyMTIpLGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC10b29sdGlwIixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuYmVtRm9ybWF0dGVyO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnRoaXMuYl8oKSsiICIrZSgiX190b29sdGlwIil9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dGhpcy5iXygiX19hcnJvdyIpKyIgIitlKCJfX3Rvb2x0aXAtYXJyb3ciKX0pLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dGhpcy5iXygiX190ZXh0IikrIiAiK2UoIl9fdG9vbHRpcC10ZXh0Iil9LHJbImRlZmF1bHQiXS5jcmVhdGUocy5IdG1sLHt0ZXh0OnRoaXMucHJvcHMudGV4dH0pKSl9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wdXNoU3R5bGVzKGwpfSx0fShhKTt0LlRvb2x0aXA9Y30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5qc29uU3RyaW5naWZ5Q2lyY3VsYXI9ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gaSg3MikuZ2V0TmF0aXZlSlNPTigpLnN0cmluZ2lmeShlLCh0PVtdLG49ZnVuY3Rpb24oKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuIG5ldyBXZWFrTWFwO3ZhciBlPVtdO3JldHVybntzZXQ6ZnVuY3Rpb24odCxpKXtlLnB1c2goe3BhdGg6aSx2YWx1ZTp0fSl9LGdldDpmdW5jdGlvbih0KXt2YXIgbj1pKDMyMykuZmluZChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dH0pO3JldHVybiBuP24ucGF0aDp2b2lkIDB9fX0oKSxmdW5jdGlvbihlLG8pe2lmKGkoNykuaXNGdW5jdGlvbihvKSlyZXR1cm4gaSgxOSkuaXNTdHJpbmcoby5uYW1lKT9vLm5hbWU6IltGdW5jdGlvbl0iO2lmKCFpKDI3KS5pc09iamVjdChvKSlyZXR1cm4gbzt2YXIgcj1uLmdldChvKTtpZihyKXJldHVybiJbQ2lyY3VsYXIgIityKyJdIjtmb3IoO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0udmFsdWVbZV0hPT1vOyl0LnBvcCgpO3ZhciBhPXQubGVuZ3RoPjA/dFt0Lmxlbmd0aC0xXS5wYXRoOiIiLHM9YSsoZT8iLyIrZToifiIpO3JldHVybiB0LnB1c2goe3BhdGg6cyx2YWx1ZTpvfSksbi5zZXQobyxzKSxvfSkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49W10uZmluZDt0LmZpbmQ9aSgzNykuY2hlY2tOYXRpdmVDb2RlKG4pP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbj1lW2ldO2lmKHQobixpLGUpKXJldHVybiBufX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9TSURfTEVOR1RIPTY0fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJBTkRPTT1pKDExNCkucmFuZG9tKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZW50cmllc1RvT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9ZVswXSxuPWVbMV07dFtpXT1ufSksdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0UGFyZW50RnJpZW5kbHlJRnJhbWVzPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITApLGkoMjg4KS5pc1NhZmFyaSYmdClyZXR1cm5bXTtmb3IodmFyIG49W10sbz1lOzspdHJ5e2lmKCEobz1vLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50KSlyZXR1cm4gbjtuLnB1c2gobyl9Y2F0Y2goZSl7cmV0dXJuIG59fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSg1MzcpLmdldFRvcEFuY2VzdG9yKCksbz1uLnRvcEFuY2VzdG9yLHI9bi5pc1RydXN0ZWQ7dC5UT1BfQU5DRVNUT1I9byx0LklTX1RPUF9BTkNFU1RPUl9UUlVTVEVEPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QW5jZXN0b3JPcmlnaW5zPWZ1bmN0aW9uKGUpe3JldHVybiBpKDUzOCkuaXNBbmNlc3Rvck9yaWdpbnNTdXBwb3J0ZWQ/aSgxMTUpLmxpc3RUb0FycmF5KGUubG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zKTpbXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMjcpLmlzT2JqZWN0KGkoMTEzKS5NKSYmaSgxMTMpLk0uZm4mJmkoNykuaXNGdW5jdGlvbihpKDExMykuTS5mbi5lbmNvZGVVcmwpP2koMTEzKS5NLmZuLmVuY29kZVVybDp2b2lkIDA7dC5lbmNvZGVVcmw9dm9pZCAwIT09bj9mdW5jdGlvbihlKXtyZXR1cm4gbihlKX06dm9pZCAwfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPS9eW2Etel1bYS16MC05XXs2fSQvLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5saWdodD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRlc3RBYm9ydE9uUHJvcGVydHlSZWFkKCk7cmV0dXJuIHQ/e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5VTktOT1dOLHJlc291cmNlOnt0eXBlOmkoNCkuQmxvY2tlZFJlc291cmNlVHlwZS5JTlNUQU5ULGRhdGE6e21lc3NhZ2U6dH19fToodD10aGlzLnRlc3RTaGFkb3coKSk/e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5VTktOT1dOLHJlc291cmNlOnt0eXBlOmkoNCkuQmxvY2tlZFJlc291cmNlVHlwZS5JTlNUQU5ULGRhdGE6e21lc3NhZ2U6dH19fTp7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfX0sdC5wcm90b3R5cGUudGVzdEFib3J0T25Qcm9wZXJ0eVJlYWQ9ZnVuY3Rpb24oKXt2YXIgZT1bIkVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyJdO3RyeXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylmb3IodmFyIGk9ZVt0XS5zcGxpdCgiLiIpLG49d2luZG93LG89MDtvPGkubGVuZ3RoO28rKyluPW5baVtvXV19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yJiZyLnRlc3QoZS5tZXNzYWdlKSlyZXR1cm4gU3RyaW5nKGUpfXJldHVybiIifSx0LnByb3RvdHlwZS50ZXN0U2hhZG93PWZ1bmN0aW9uKCl7dmFyIGU9aSgyMjApLmdldFNoYWRvd1Jvb3RUZXh0KCk7aWYoLTEhPT1lLmluZGV4T2YoImdldCgpIikpcmV0dXJuIGU7dHJ5e2lmKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyYmLTEhPT1FbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cudG9TdHJpbmcoKS5pbmRleE9mKCJNdXRhdGlvbk9ic2VydmVyIikpcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdy50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiBTdHJpbmcoZSl9cmV0dXJuIiJ9LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RJbnN0YW50PWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gdC5saW5rcz1pKDExKS5jb25maWcuZGV0ZWN0LmxpbmtzLHR9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS50ZWFyZG93bj1mdW5jdGlvbigpe3RoaXMubGlua3M9W119LHQucHJvdG90eXBlLmxpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9fSx0LnByb3RvdHlwZS5oZWF2eT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5saW5rcy5sZW5ndGg/dGhpcy5nZXREb2N1bWVudChmdW5jdGlvbih0KXt0P24ubG9hZE5leHRMaW5rKHQsZSk6ZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfSl9KTplKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KX0sdC5wcm90b3R5cGUuZ2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUoZG9jdW1lbnQpfSx0LnByb3RvdHlwZS50ZXN0TGluaz1mdW5jdGlvbihlLHQsaSxuLG8pe24oKX0sdC5wcm90b3R5cGUubG9hZE5leHRMaW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzO3ZvaWQgMD09PW4mJihuPTApO3ZhciByPXRoaXMubGlua3Nbbl07cj90aGlzLnRlc3RMaW5rKHIsZSwyLGZ1bmN0aW9uKCl7by5sb2FkTmV4dExpbmsoZSx0LG4rMSl9LGZ1bmN0aW9uKGEscyxsKXt2YXIgYz1EYXRlLm5vdygpO2Mtcz4yZTM/by5sb2FkTmV4dExpbmsoZSx0LG4rMSk6dCh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLlVOS05PV04scmVzb3VyY2U6e3R5cGU6aSg0KS5CbG9ja2VkUmVzb3VyY2VUeXBlLk5FVFdPUkssaW5kZXg6aSgyMykuaW5kZXhPZihvLmxpbmtzLHIpLGRhdGE6e3N0YXR1czpsP2wuc3RhdHVzOjAsc3RhdHVzVGV4dDpsP2wuc3RhdHVzVGV4dDoiIixtZXRob2Q6ci50eXBlLHVybDpyLnNyYyx0aW1lOmMtc319fSl9KTp0KHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KX0sdH0oaSg1MCkuVGVzdEJhc2UpO3QuVGVzdE5ldHdvcms9cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N0YXJ0V2F0Y2hpbmc6ZnVuY3Rpb24oKXt9LHN0b3BXYXRjaGluZzpmdW5jdGlvbigpe319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoNSksYT1pKDIzKSxzPWkoNDUpLGw9aSg3KSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5zZWxmUmVhZHk9ITEsdGhpcy5jaGlsZERldGVjdG9ycz1bXSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUub25Vbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnREZXRlY3RvciYmdGhpcy5wYXJlbnREZXRlY3Rvci5yZW1vdmUodGhpcyl9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnREZXRlY3Rvcj10aGlzLmNsb3Nlc3REZXRlY3RvcigpLHRoaXMucGFyZW50RGV0ZWN0b3ImJnRoaXMucGFyZW50RGV0ZWN0b3IuYWRkKHRoaXMpfSx0LnByb3RvdHlwZS5jbG9zZXN0RGV0ZWN0b3I9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFBhcmVudENvbXBvbmVudCgpLGk9bnVsbDtkb3tlIGluc3RhbmNlb2YgdCYmKGk9ZSksZSYmKGU9ZS5nZXRQYXJlbnRDb21wb25lbnQoKSl9d2hpbGUobnVsbD09PWkmJmUpO3JldHVybiBpfSx0LnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3IuZm9yRWFjaCh0aGlzLmNoaWxkRGV0ZWN0b3JzLGZ1bmN0aW9uKGUpe2Uuc3RhcnQoKX0pLHRoaXMub25TdGFydCgpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZWFkeSgpfSx0LnByb3RvdHlwZS5yZWFkeT1mdW5jdGlvbigpe3RoaXMuc2VsZlJlYWR5PSEwLHRoaXMudHJpZ2dlclJlYWR5KCl9LHQucHJvdG90eXBlLmlzQ2hpbGRSZWFkeT1mdW5jdGlvbigpe3JldHVybiFzLnNvbWUodGhpcy5jaGlsZERldGVjdG9ycyxmdW5jdGlvbihlKXtyZXR1cm4hZS5pc1JlYWR5KCl9KX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2hpbGREZXRlY3RvcnMucHVzaChlKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hpbGREZXRlY3RvcnMubGVuZ3RoKXt2YXIgdD1hLmluZGV4T2YodGhpcy5jaGlsZERldGVjdG9ycyxlKTt0aGlzLmNoaWxkRGV0ZWN0b3JzLnNwbGljZSh0LDEpfX0sdC5wcm90b3R5cGUudHJpZ2dlclJlYWR5PWZ1bmN0aW9uKCl7dGhpcy5pc1JlYWR5KCkmJihsLmlzRnVuY3Rpb24odGhpcy5wcm9wcy5vblJlYWR5KSYmdGhpcy5wcm9wcy5vblJlYWR5KCksdGhpcy5wYXJlbnREZXRlY3RvciYmdGhpcy5wYXJlbnREZXRlY3Rvci50cmlnZ2VyUmVhZHkoKSl9LHQucHJvdG90eXBlLmlzUmVhZHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxmUmVhZHkmJigwPT09dGhpcy5jaGlsZERldGVjdG9ycy5sZW5ndGh8fHRoaXMuaXNDaGlsZFJlYWR5KCkpfSx0fShpKDEwKSk7dC5EZXRlY3Rvcj1jfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDEwKSxzPWkoMTczKSxsPWkoNjA1KSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5uYW1lPSJ0ZXh0LW9iZnVzY2F0b3IiLHRoaXMucHVzaFN0eWxlcyhsKSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgaT10LnRleHQsbj1bXTtpLmxlbmd0aDspe3ZhciBvPU1hdGgubWluKHNbImRlZmF1bHQiXSgxLDQpLGkubGVuZ3RoKTtuLnVuc2hpZnQoclsiZGVmYXVsdCJdLmNyZWF0ZSgic3BhbiIsbnVsbCxpLnN1YnN0cigwLG8pKSksaT1pLnN1YnN0cihvKX1yZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgic3BhbiIse2NsYXNzOmUoKX0sbil9LHR9KGEpO3QuVGV4dE9iZnVzY2F0b3I9Y30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0hEUElTY3JlZW49aSgyOTQpLmlzSERQSVNjcmVlbigpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDE0KSxvPWkoMjQ0KSxyPTE2O3QuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUsdCxpLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgbz1uZXcgSW1hZ2U7by5jcm9zc09yaWdpbj1uLmNyb3NzT3JpZ2lufHwiQW5vbnltb3VzIixvLm9ubG9hZD1mdW5jdGlvbigpe3RyeXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPW4uZ2V0Q29udGV4dCgiMmQiKSxzPWUuY29udGFpbmVyV2lkdGgvZS5jb250YWluZXJIZWlnaHQsbD1yLGM9TWF0aC5jZWlsKHIvcyk7bi53aWR0aD1sLG4uaGVpZ2h0PWM7dmFyIHU9ZS5vcmlnaW5XaWR0aC9lLndpZHRoLGQ9TWF0aC5hYnMoKGUud2lkdGgtZS5jb250YWluZXJXaWR0aCkqdC54KnUpLHA9TWF0aC5hYnMoKGUuaGVpZ2h0LWUuY29udGFpbmVySGVpZ2h0KSp0LnkqdSksZj1NYXRoLmNlaWwoZS5jb250YWluZXJXaWR0aCp1KSxoPU1hdGguY2VpbChlLmNvbnRhaW5lckhlaWdodCp1KTthLmRyYXdJbWFnZShvLGQscCxmLGgsMCwwLGwsYyk7dmFyIGc9YS5nZXRJbWFnZURhdGEoMCwwLGwsYyk7aShnKX1jYXRjaChlKXtpKHtkYXRhOm5ldyBVaW50OENsYW1wZWRBcnJheSgwKSx3aWR0aDowLGhlaWdodDowfSl9fSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtpKG51bGwpfSxvLnNyYz1lLnNyY30sdC5nZXRTbWFydENlbnRlcj1mdW5jdGlvbihlKXtpZihlLm9wdGlvbnMpe2lmKGUub3B0aW9uc1sic21hcnQtY2VudGVycyJdKXt2YXIgdD1lLm9wdGlvbnNbInNtYXJ0LWNlbnRlcnMiXSxpPW4ubWFwKHQsZnVuY3Rpb24odCxpKXtyZXR1cm5bZS5zcmMsdC53LHQuaCx7InNtYXJ0LWNlbnRlciI6dH1dfSk7cmV0dXJuIG8uZml0SW1hZ2UoaSx7d2lkdGg6ZS5jb250YWluZXJXaWR0aCxoZWlnaHQ6ZS5jb250YWluZXJIZWlnaHQsaXNDb3ZlcjohMX0pLm9wdGlvbnNbInNtYXJ0LWNlbnRlciJdfWlmKGUub3B0aW9uc1sic21hcnQtY2VudGVyIl0pcmV0dXJuIGUub3B0aW9uc1sic21hcnQtY2VudGVyIl19cmV0dXJuIG51bGx9LHQuZ2V0UGl4ZWw9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPTQqKGkqZS53aWR0aCt0KTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5kYXRhLG4sbis0KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInN2ZyIse2hlaWdodDoiMWVtIix2aWV3Qm94OiIwIDAgMTUgMjMiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsZmlsbDoicmVkIiwiZmlsbC1ydWxlIjoiZXZlbm9kZCJ9LHJbImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNNy4zIDE0LjJoLS4xQzMuMiAxNC4yIDAgMTEgMCA3IDAgMyAzLjIgMCA3LjIgMGE3LjEgNy4xIDAgMCAxIDcgOC42bC0uNCAxLjlhMzIuNiAzMi42IDAgMCAxLTMuOSA3bC0zIDQuMy0uNC42TDggMTQuOWwuMi0uOGgtLjh6bS0uMS00LjZjMS40IDAgMi42LTEuMSAyLjYtMi42IDAtMS40LTEuMi0yLjUtMi42LTIuNUEyLjYgMi42IDAgMCAwIDQuNiA3YzAgMS41IDEuMSAyLjYgMi42IDIuNnoiLGZpbGw6IiNGMzMifSkpfSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuY2hvb3NlTG9nbz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnByb3BzLnR5cGUpe2Nhc2UiZ2VvbWFyayI6cmV0dXJuIGEoKTtjYXNlIndhbGtpbmdodW1hbiI6cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInN2ZyIse2hlaWdodDoiMWVtIix2aWV3Qm94OiIwIDAgMTIgMjEiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZpbGwtcnVsZSI6ImV2ZW5vZGQifSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJwYXRoIix7ZDoiTTYuNSA0Yy0xLS4xLTItMS0yLTJzLjctMiAxLjctMiAyIC41IDIgMmMwIDEuNC0uOCAyLTEuNyAyem00LjQgMTIuNGwxIDMuMWMuMi44IDAgMS41LTEgMS41LS4zIDAtLjctLjMtMS0uOWwtMS0zYy0uMy0uOC0xLjEtMi4yLTEuOC0zTDQuOCAxMmMtLjItLjItLjMtLjYtLjMtLjlWNy4yYzAtLjMtLjMtLjQtLjUtLjJsLS42LjVjLS41LjMtMSAxLTEgMS42bC0uMiAyLjFjLS4xLjYtLjQuOS0uOS45YS44LjggMCAwIDEtLjgtMWwuMi0yYy4xLTEuMiAxLTIuNyAxLjgtMy40IDAgMCAxLjMtMS4zIDIuNi0xLjQgMS4zIDAgMi40LjYgMi40IDEuOXY1bC40LjhMOSAxMy4zYy43LjcgMS41IDIuMSAxLjggM3pNMCAxOS41YzAtLjIgMC0uNi4yLS44bDIuMS0zIDEuNC0yLjIuNC0uOGMuMS0uMy40LS4zLjYtLjFsMSAxYy4yLjMuMi42LjEuOWwtMS40IDIuMi0yLjUgMy4yYTEgMSAwIDAgMS0uOC40Yy0uOCAwLTEtLjMtMS0uOHptOC05LjNWOC41YzAtLjIuMS0uMy40LS4xbDEuOSAxLjhjLjIuMy40LjUuNCAxIDAgLjQtLjUgMS0xIC43bC0xLjMtMWExIDEgMCAwIDEtLjQtLjd6In0pKTtjYXNlInJvdW5kc2lnbiI6cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInN2ZyIse2hlaWdodDoiMWVtIix2aWV3Qm94OiIwIDAgMTYgMTYiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LHJbImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNOCAxNC43QTYuNyA2LjcgMCAxIDAgOCAxLjNhNi43IDYuNyAwIDAgMCAwIDEzLjR6TTggMTZBOCA4IDAgMSAxIDggMGE4IDggMCAwIDEgMCAxNnoifSksclsiZGVmYXVsdCJdLmNyZWF0ZSgicGF0aCIse2Q6Ik04LjYgNi45djMuNGMwIC42LjUuNi41LjZ2LjVIN1YxMXMuNSAwIC41LS42VjhIN3YtLjZzLjUgMCAxLjEtLjVoLjZ6In0pLHJbImRlZmF1bHQiXS5jcmVhdGUoImNpcmNsZSIse2N4OiI3LjYiLGN5OiI1LjMiLHI6IjEifSkpO2Nhc2UidHJpYW5nbGVzaWduIjpyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7d2lkdGg6IjFlbSIsaGVpZ2h0OiIxNnB4Iix2aWV3Qm94OiIwIDAgMTYgMTYiLHZlcnNpb246IjEuMSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn0sclsiZGVmYXVsdCJdLmNyZWF0ZSgicGF0aCIse2Q6Ik0xLjQ2MzI0OTM4LDEzLjUyMDQ5MzMgQzEuMjQxMTMxNzMsMTMuOTMxMzE5IDEuMjIzMDM4NjIsMTMuOTAwODc3IDEuNjg2Njc3NSwxMy45MDA4NzcgTDE0LjMxMzMyMTEsMTMuOTAwODc3IEMxNC43NzcyMDU0LDEzLjkwMDg3NyAxNC43NTkwMDU2LDEzLjkzMTU3NTcgMTQuNTM2NzQ5MiwxMy41MjA0OTMzIEw4LjA5ODYxMzUsMS42MTI2MDY4NyBDOC4wMTI5NTA4NSwxLjQ1NDE2NjQzIDguMDUwMTQ5NTgsMS40NjQ3NjM0MyA4LjAwMDczOTY2LDEuNDY0NzYzNDMgQzcuOTUxMzI5NzMsMS40NjQ3NjM0MyA3LjkzNTc3ODE3LDEuNTQ4OTkzOTMgNy45MDEzODUxMSwxLjYxMjYwNjg3IEwxLjQ2MzI0OTM4LDEzLjUyMDQ5MzMgWiBNOS4yNzI4NjgyLDAuOTc1OTI4MiBMMTUuNzExMDAzOSwxMi44ODM4MTQ2IEMxNi40MTM5OSwxNC4xODQwNDc5IDE1Ljc5MTA0MzgsMTUuMjM4MDk1MiAxNC4zMTMzMjExLDE1LjIzODA5NTIgTDEuNjg2Njc3NSwxNS4yMzgwOTUyIEMwLjIxMTc3MjUyLDE1LjIzODA5NTIgLTAuNDE1MDc3MTY4LDE0LjE4NjA1NjEgMC4yODg5OTQ2ODgsMTIuODgzODE0NiBMNi43MjcxMzA0MSwwLjk3NTkyODIgQzcuNDMwMTE2NDksLTAuMzI0MzA1MDg2IDguNTY4Nzk2MzQsLTAuMzI2MzEzMzI2IDkuMjcyODY4MiwwLjk3NTkyODIgWiIsaWQ6IlNoYXBlIn0pLHJbImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNNy4zMzEwMDA0NywxMC4yNzk4MzEyIEM3LjM0Mjk4ODU5LDEwLjYyMDM3MjcgNy42MzU2MTE1OSwxMC44OTY0MzYxIDcuOTQwMjIyNzIsMTAuODk2NDM2MSBDOC4yNDQ4MzM4NCwxMC44OTY0MzYxIDguNTM3NzE5NDUsMTAuNjEyOTEyOCA4LjU0OTQ0NDk2LDEwLjI3OTgzMTIgTDguNjI1NzQ1OTgsNS45NDk5MzgxNSBDOC42Mzc3MzQxMSw1LjYwOTM5NjcxIDguMzEyMjk3ODYsNS4zMzQ2MDMyOSA3Ljk0MDIyMjcyLDUuMzM0NjAzMjkgQzcuNTY4MTQ3NTgsNS4zMzQ2MDMyOSA3LjI0MzE1MDIsNS42MTY4NTY1OSA3LjI1NDg3NTcxLDUuOTQ5OTM4MTUgTDcuMzMxMDAwNDcsMTAuMjc5ODMxMiBaIE03LjI2NDY3NDM1LDExLjk1OTg1MzMgTDcuMjY0Njc0MzUsMTEuOTg5ODYyOCBDNy4yNjQ2NzQzNSwxMi4zMzUxNzg5IDcuNTA5MDM5OTQsMTIuNjE1MTEyOSA3LjkzMjY5NDI1LDEyLjYxNTExMjkgQzguMzUzNDE1MzcsMTIuNjE1MTEyOSA4LjYwMDcxNDE0LDEyLjMzMDkyNjMgOC42MDA3MTQxNCwxMS45ODk4NjI4IEw4LjYwMDcxNDE0LDExLjk1OTg1MzMgQzguNjAwNzE0MTQsMTEuNjE0NTM3MyA4LjM1NjM0ODU2LDExLjMzNDYwMzMgNy45MzI2OTQyNSwxMS4zMzQ2MDMzIEM3LjUxMTk3MzEzLDExLjMzNDYwMzMgNy4yNjQ2NzQzNSwxMS42MTg3ODk5IDcuMjY0Njc0MzUsMTEuOTU5ODUzMyBaIixpZDoiUmVjdGFuZ2xlLTc0In0pKTtkZWZhdWx0OnJldHVybiBhKCl9fSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5iZW0saT1lLnR5cGU7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19sb2dvIiwiX18iK2kpfSx0aGlzLmNob29zZUxvZ28oKSl9LHR9KGkoMTApKTt0Lkdlb0xvZ289c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9aSgxMCkscz1pKDg5KSxsPWkoNjQ3KSxjPWkoNjQ4KSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5uYW1lPSJwdWJsaXNoZXJzLXJ1YmxlIixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXztyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCl9LHJbImRlZmF1bHQiXS5jcmVhdGUocy5IdG1sLHt0ZXh0OmN9KSl9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wdXNoU3R5bGVzKGwpfSx0fShhKTt0LlJ1YmxlPXV9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPTM2ZTUsbz03Nzc2ZTY7dC5nZXRNYXJrZXJJc1ZhbGlkU3RhdD1mdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKG5ldyBEYXRlKT4xNTg0NjA4NTk3MDY0K28/aSgxMzgpLlBST0RVQ1RfTUFSS0VSUy5PTERfQlVJTEQ6KHQ9aSgxMikuZ2V0WWFDb250ZXh0KCkuaW5pdFRpbWUsTnVtYmVyKG5ldyBEYXRlKS10PG4/ZTppKDEzOCkuUFJPRFVDVF9NQVJLRVJTLkxPTkdfU0VTU0lPTik7dmFyIHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmhhc01yYWlkPWkoMzEpLm9uY2UoZnVuY3Rpb24oKXt2YXIgZT1pKDMwNykuZ2V0TXJhaWQoKTtpZihlKXt2YXIgdD1lLmdldFZlcnNpb24oKTtpKDkpLmxvZ2dlci5pbmZvKHttc2c6Ik1SQUlEX0lTX0VOQUJMRUQiLHZlcnNpb246dH0sIk1SQUlEX0xPRyIpfXJldHVybiBCb29sZWFuKGUpfSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBvKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE51bWJlcihlKSZNYXRoLnBvdygyLHQpLTF9KGUsdCkudG9TdHJpbmcoMiksdCl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBpKDY1MikucGFkTGVmdChlLHQsIjAiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5qb2luQml0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10saT0wLG89ZTtpPG8ubGVuZ3RoO2krKyl7dmFyIHI9b1tpXSxhPXJbMF0scz1uKHJbMV0sYSk7dC5wdXNoKHMpfXJldHVybiBmdW5jdGlvbihlKXtpZihlLmxlbmd0aD41Myl0aHJvdyBuZXcgRXJyb3IoImJpdFV0aWxzLnRvRGVjaW1hbDogXHUwNDMxXHUwNDNlXHUwNDNiXHUwNDRjXHUwNDQ4XHUwNDM1IDUzIFx1MDQzMVx1MDQzOFx1MDQ0MiBcdTA0M2RcdTA0MzUgXHUwNDNmXHUwNDNlXHUwNDM0XHUwNDM0XHUwNDM1XHUwNDQwXHUwNDM2XHUwNDM4XHUwNDMyXHUwNDMwXHUwNDM1XHUwNDQyXHUwNDQxXHUwNDRmIFx1MDQzOFx1MDQzNy1cdTA0MzdcdTA0MzAgXHUwNDNlXHUwNDMzXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDM4XHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDNkXHUwNDNlXHUwNDM5IFx1MDQ0Mlx1MDQzZVx1MDQ0N1x1MDQzZFx1MDQzZVx1MDQ0MVx1MDQ0Mlx1MDQzOCwgXHUwNDNkXHUwNDNlIFx1MDQzZlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M2VcdTA0M2FcdTA0MzAgXHUwNDM0XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDNlXHUwNDM5ICIrZS5sZW5ndGgrIiBcdTA0MzFcdTA0MzhcdTA0NDIuIik7cmV0dXJuIHBhcnNlSW50KGUsMil9KHQucmV2ZXJzZSgpLmpvaW4oIiIpKX0sdC5zbGljZUJpdHM9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXQraSxyPW8oZS50b1N0cmluZygyKSxuKS5zdWJzdHIoLW4saSk7cmV0dXJuIHBhcnNlSW50KHIsMil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDIzKSxvPWkoMzEpLHI9aSgxKSxhPTVlMyxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5xdWV1ZT1bXSx0aGlzLnRpbWVyPW51bGwsdGhpcy5ydW5uaW5nVGFzaz1udWxsO3ZhciB0PWUuZGVsYXksaT12b2lkIDA9PT10P2E6dDt0aGlzLmRlbGF5PWl9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7LTE9PT1uLmluZGV4T2YodGhpcy5xdWV1ZSxlKSYmKHRoaXMucXVldWUucHVzaChlKSx0aGlzLnN0YXJ0KCkpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5pbmRleE9mKHRoaXMucXVldWUsZSk7aWYodD4tMSl0aGlzLnF1ZXVlLnNwbGljZSh0LDEpLDA9PT10aGlzLnF1ZXVlLmxlbmd0aCYmdGhpcy5zdG9wKCk7ZWxzZSBpZih0aGlzLmlzUnVubmluZ1Rhc2soZSkpe3ZhciBpPXRoaXMucnVubmluZ1Rhc2submV4dDt0aGlzLnJ1bm5pbmdUYXNrPW51bGwsZS5vblN0b3AoaSl9fSxlLnByb3RvdHlwZS5pc1J1bm5pbmdUYXNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJ1bm5pbmdUYXNrJiZlPT09dGhpcy5ydW5uaW5nVGFzay50YXNrfSxlLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe251bGw9PT10aGlzLnJ1bm5pbmdUYXNrJiZudWxsPT09dGhpcy50aW1lciYmdGhpcy5zbGVlcCgpfSxlLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMucnVubmluZ1Rhc2s9bnVsbCx0aGlzLnRpbWVyPW51bGx9LGUucHJvdG90eXBlLnNsZWVwPWZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nVGFzaz1udWxsLHRoaXMudGltZXI9ci5wcm90ZWN0LnNldFRpbWVvdXQodGhpcy5ydW4sdGhpcy5kZWxheSx0aGlzKX0sZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRpbWVyPW51bGwsdGhpcy5ydW5uaW5nVGFzaz1udWxsO3ZhciB0PXRoaXMucXVldWUuc2hpZnQoKTt0JiYodGhpcy5ydW5uaW5nVGFzaz17dGFzazp0LG5leHQ6by5vbmNlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xlZXAoKX0pfSx0Lm9uU3RhcnQodGhpcy5ydW5uaW5nVGFzay5uZXh0KSl9LGV9KCk7dC5BbmltYXRpb25RdWV1ZT1zLHQuYW5pbWF0aW9uUXVldWU9bmV3IHN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KSxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD0wLGk9YXJndW1lbnRzLmxlbmd0aDt0PGk7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7dmFyIG49QXJyYXkoZSksbz0wO2Zvcih0PTA7dDxpO3QrKylmb3IodmFyIHI9YXJndW1lbnRzW3RdLGE9MCxzPXIubGVuZ3RoO2E8czthKyssbysrKW5bb109clthXTtyZXR1cm4gbn07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPWkoMzQpLHM9aSgzKSxsPWkoNjkpLGM9aSg0NCksdT1pKDczKSxkPWkoMzUpLHA9aSg2MSksZj1pKDM0NSksaD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnNldENvZXJjZXI9ZnVuY3Rpb24oKXt0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplfSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNldEFkdk1vZCgpLHRoaXMuc2V0Q29lcmNlcigpLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpLHRoaXMuaW5pdEltYWdlKCksdGhpcy53YXJuaW5nV2lkdGg9dGhpcy53aWR0aC8yfSx0LnByb3RvdHlwZS5zZXRBZHZNb2Q9ZnVuY3Rpb24oKXt0aGlzLm1vZD0ibGVhZGVyYm9hcmQifSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bZl19LHQucHJvdG90eXBlLmdldEFkdHVuZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5waWN0dXJlRmxvYXQ7cmV0dXJue21vZDpbdGhpcy5pbWFnZVNpemUmJmU/Il9ibGFjay13aGl0ZSI6IiIsdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlPyJfc2hhcnAiOiIiXS5qb2luKCIgIil9fSx0LnByb3RvdHlwZS5pbml0SW1hZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpZHRoLHQ9dGhpcy5taW5IZWlnaHQ7dGhpcy5nZXRJbWFnZVNpemU9ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6dCpjLk1BWF9JTUFHRV9SQVRJTyxoZWlnaHQ6dH19O3ZhciBpPXRoaXMuZ2V0UGljdHVyZSgpO2lmKGkpe3ZhciBuPWkud2lkdGgsbz1pLmhlaWdodCxyPWMuY29lcmNlSW1hZ2VSYXRpbyhNYXRoLm1pbihuL28sZS8oMi41KnQpKSk7dGhpcy5wcm9wcy5jb250ZXh0LnNldFBhcmFtcyh7aW1hZ2VNaW5XaWR0aDp0KmMuTUlOX0lNQUdFX1JBVElPLGltYWdlTWF4V2lkdGg6dCpyfSl9fSx0LnByb3RvdHlwZS5jYWxjRm9udFNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxpPWUuaGVpZ2h0O3JldHVybiBhLmdldExpbWl0ZWRMaW5lYXJGdW5jdGlvbig0ZTQsMTIsMjRlNCwyMCkodCppKX0sdC5wcm90b3R5cGUuY3JlYXRlUmVzb3VyY2VUcmVlPWZ1bmN0aW9uKCl7dmFyIGU9W1siYm9keSIsMSxbWyJzaXRlLWxpbmtzIiwxLFtbImNhbGxvdXRzIiwxXV1dXV1dO3JldHVybiB0aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS50aXRsZUZvbnRSYW5nZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuWyJ0aXRsZS1zaXplLSIrdCwyLHIoW1siYnV0dG9uLW1lZGl1bSIsMyxlXSxbImJ1dHRvbi1zbWFsbCIsMixlXSxbImJ1dHRvbi1tZWRpdW0tcHJpY2UiLDUsZV0sWyJidXR0b24tc21hbGwtcHJpY2UiLDQsZV1dLGUpXX0pfSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYl8saT10aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGUsbj10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5waWN0dXJlRmxvYXQsbz0hKHRoaXMuaW1hZ2VTaXplJiZuKSYmaTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOmUsY2xhc3M6dCgiX19jb250ZW50Iil9LGk/dGhpcy5yZW5kZXJDdXJyZW5jeUxvZ28oKTp0aGlzLnJlbmRlckxvZ28oInN1YnRsZSIsITApLG4/bnVsbDp0aGlzLnJlbmRlckltYWdlKCksc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2RldGFpbHMiKX0sdGhpcy5pbWFnZVNpemV8fGk/bnVsbDp0aGlzLnJlbmRlckxvZ29TdHViKCksdGhpcy5yZW5kZXJUaXRsZUFsbFNpemVzKG8/ImNsaXBwZWQiOiIiKSx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlclNpdGVMaW5rcygpLHRoaXMucmVuZGVyQ2FsbG91dHMoKSx0aGlzLnJlbmRlckJ1dHRvbnMoKSx0aGlzLnJlbmRlckFnZSgpKSxuP3RoaXMucmVuZGVySW1hZ2UoKTpudWxsKX0sdC5wcm90b3R5cGUucmVuZGVyQ3VycmVuY3lMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcy5hZHYuYWJ1c2VVcmwsaT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5waWN0dXJlRmxvYXQsbj10aGlzLmltYWdlU2l6ZSYmaSxvPVt0PyIiOiJuby1vZmZzZXQiXSxyPXtoYXNCZzpCb29sZWFuKG4pfTtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyQ3VycmVuY3lMb2dvLmNhbGwodGhpcyxvLHIpfSx0LnByb3RvdHlwZS5yZW5kZXJJbWFnZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLmltYWdlU2l6ZSxpPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLG49aS5hbmltYXRlZCxvPWkuYW5pbWF0aW9uQ291bnQscj10aGlzLnByb3BzLmFkdixhPXIuaW1hZ2VzLGw9ci5hZGRJbmZvLGM9eyJtaW4td2lkdGgiOnQubWluV2lkdGgsIm1heC13aWR0aCI6dC5tYXhXaWR0aH07cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUoZC5OZXdMaW5rLHtyZXNvdXJjZUlkOiJpbWFnZSIsaHJlZjp0aGlzLnByb3BzLmFkdi51cmwsY2xhc3M6ZSgiX19saW5rIiwiX19pbWFnZSIpLHN0eWxlOmN9LHNbImRlZmF1bHQiXS5jcmVhdGUodS5JbWFnZUFkYXB0aXZlLHtpbWFnZXM6YXx8bC5pY29uLGNvbnRleHQ6dGhpcy5wcm9wcy5jb250ZXh0LHNtYXJ0Q2VudGVyOiEwLGFuaW1hdGlvbjpuLGFuaW1hdGlvbkNvdW50Om99KSx0aGlzLnJlbmRlckFwcEljb24oKSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9faW1hZ2UtaXRlbXMiKSxyZXNvdXJjZUlkOiJpbWFnZS1pdGVtcyJ9LHRoaXMucmVuZGVyV2FybmluZygic3VidGxlIikpKX0sdC5wcm90b3R5cGUucmVuZGVyQnV0dG9ucz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmlzQnV0dG9uVmlzaWJsZTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZShsLkNvbnRhaW5lcixudWxsLHRoaXMucmVuZGVyQnV0dG9uTWVkaXVtKCksdGhpcy5yZW5kZXJCdXR0b25NZWRpdW1QcmljZSgpLGU/dGhpcy5yZW5kZXJCdXR0b25TbWFsbCgpOnRoaXMucmVuZGVyQnV0dG9uRG9tYWluKCksdGhpcy5yZW5kZXJCdXR0b25TbWFsbFByaWNlKCkpfSx0LmNvZXJjZVNpemU9Yy5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoyMzgsbWF4OjEvMH0saGVpZ2h0OnttaW46NzgsbWF4OjEvMH0scmF0aW86e21pbjpjLk1JTl9JTUFHRV9SQVRJTyxtYXg6MS8wfX0pLHR9KHAuQWR2QWRhcHRpdmVCYXNlKTt0LkFkdkxlYWRlcmJvYXJkPWh9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fY29udGVudHstd2Via2l0LWZsZXg6MSAwIGF1dG87LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0bztkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpyb3cgbm93cmFwOy1tcy1mbGV4LWZsb3c6cm93IG5vd3JhcDtmbGV4LWZsb3c6cm93IG5vd3JhcDttaW4taGVpZ2h0OmluaGVyaXQ7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X19saW5rX29sZC1wcmljZXtvcGFjaXR5Oi41fS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fbGlua19vbGQtcHJpY2U6YWZ0ZXJ7Ym94LXNoYWRvdzowIC0xcHggMXB4ICNmZmZ9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X19sb2dve2xlZnQ6MWVtfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fbG9nb19zdWJ0bGV7bGVmdDouNWVtfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fd2FybmluZ3t3aWR0aDoxMDAlO2NvbG9yOiNmZmZ9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X193YXJuaW5nIC5zY3JvbGxfX2NvbnRhaW5lcntwYWRkaW5nOi41ZW0gMH0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQgLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtwYWRkaW5nOjAgMWVtfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fd2FybmluZ19kZWZhdWx0e2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fd2FybmluZ19zdWJ0bGV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLHRyYW5zcGFyZW50IDAscmdiYSgwLDAsMCwuNikpfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZCAueWFwLWFkdl9fZGV0YWlsc3std2Via2l0LWZsZXg6MSAwOy1tcy1mbGV4OjEgMDtmbGV4OjEgMDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwOy1tcy1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtwYWRkaW5nOi44ZW0gMWVtIDAgIixlLmltYWdlUGFkZGluZ0xlZnQsIjtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X19pbWFnZXstd2Via2l0LWZsZXg6MSAwOy1tcy1mbGV4OjEgMDtmbGV4OjEgMDtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSkgIixlLmltYWdlUG9zaXRpb24sIjtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQgLnlhcC1hZHZfX2J1dHRvbnttYXJnaW4tdG9wOmF1dG99LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X19idXR0b24tZXh0cmF7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzouMjVlbSAuNzVlbTtsaW5lLWhlaWdodDoxLjVlbTttYXJnaW46MH0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQgLnlhcC1hZHZfX2FwcC1pY29ue3RvcDoyZW07bGVmdDoxZW19LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkIC55YXAtYWR2X19pbWFnZS1pdGVtc3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQgLnlhcC1hZHZfX3ByaWNlX3NrZXd7bWFyZ2luLWJvdHRvbTo1cHg7bWFyZ2luLWxlZnQ6LTEwcHg7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC01ZGVnKTt0cmFuc2Zvcm06cm90YXRlKC01ZGVnKX0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQgLnlhcC1hZHZfX3ByaWNlX2ZsYXR7bWFyZ2luLWxlZnQ6NHB4O21hcmdpbi1ib3R0b206M3B4fS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZC55YXAtYWR2X25vLXBhZGRpbmdzIC55YXAtYWR2X19kZXRhaWxze3BhZGRpbmc6MCAxMHB4IDAgIixlLmltYWdlUGFkZGluZ0xlZnQsIn0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyIC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO21pbi1oZWlnaHQ6aW5oZXJpdDtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX2xvZ297bGVmdDo1JX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX3dhcm5pbmd7YmFja2dyb3VuZDoiLGUud2FybmluZ0JnQ29sb3IsIjtjb2xvcjoiLGUud2FybmluZ1RleHRDb2xvciwiO2JvcmRlci10b3A6MXB4IHNvbGlkICIsZS5ib3JkZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl90b3dlciAueWFwLWFkdl9fd2FybmluZy10ZXh0e3BhZGRpbmc6MCA1JX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX2RldGFpbHN7LXdlYmtpdC1mbGV4OjEgMCBhdXRvOy1tcy1mbGV4OjEgMCBhdXRvO2ZsZXg6MSAwIGF1dG87ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDstbXMtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cGFkZGluZzouOGVtIDUlIDA7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyIC55YXAtYWR2X19idXR0b257bWFyZ2luLXRvcDphdXRvfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlciAueWFwLWFkdl9fYnV0dG9uLWFjdGlvbntib3JkZXItcmFkaXVzOi4yNWVtfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlciAueWFwLWFkdl9fbGlua19vbGQtcHJpY2V7b3BhY2l0eTouNX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX2xpbmtfb2xkLXByaWNlOmFmdGVye2JveC1zaGFkb3c6MCAtMXB4IDFweCAjZmZmfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlciAueWFwLWFkdl9faW1hZ2V7LXdlYmtpdC1mbGV4OjMgMCBhdXRvOy1tcy1mbGV4OjMgMCBhdXRvO2ZsZXg6MyAwIGF1dG87ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpICIsZS5pbWFnZVBvc2l0aW9uLCI7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyIC55YXAtYWR2X190aXRsZV9mbG9hdHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpO2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjUpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LHJnYmEoMCwwLDAsLjEpIDIwJSxyZ2JhKDAsMCwwLC4zKSA1MCUscmdiYSgwLDAsMCwuNykpO2xlZnQ6MDtyaWdodDowO3RvcDowO3BhZGRpbmctbGVmdDo1JTtwYWRkaW5nLXJpZ2h0OjUlO3BhZGRpbmctdG9wOi44ZW07cG9pbnRlci1ldmVudHM6bm9uZX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX3RpdGxlX2Zsb2F0OmZpcnN0LWNoaWxke2Rpc3BsYXk6YmxvY2t9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyIC55YXAtYWR2X190aXRsZV9mbG9hdCAueWFwLWFkdl9fbGlua3tjb2xvcjppbmhlcml0fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlciAueWFwLWFkdl9fYXBwLWljb257dG9wOjEuOGVtO2xlZnQ6NSV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyIC55YXAtYWR2X19pbWFnZS1pdGVtc3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIgLnlhcC1hZHZfX2ltYWdlLWl0ZW1zIC55YXAtYWR2X193YXJuaW5nLXN0dWJ7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci55YXAtYWR2X25vLXBhZGRpbmdzIC55YXAtYWR2X19kZXRhaWxze3BhZGRpbmc6LjhlbSAwIDB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVtb3ZlSHRtbEFuZFNwZWNpYWxDaGFycz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oPChbYS16XC9dKyk+KS9naSwiIikucmVwbGFjZSgvJlx3KzsvZywiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvYWREZXBlbmRlbmNpZXM9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO2Zvcih2YXIgdD1bXSxpPWZ1bmN0aW9uKGkpe3ZhciBuPWVbaV0sbz1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe24oZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9LHQpfSk7dC5wdXNoKG8pfSxuPTA7bjxlLmxlbmd0aDtuKyspaShuKTtyZXR1cm4gUHJvbWlzZS5hbGwodCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhblVzZUFkdHVuZT1mdW5jdGlvbihlKXtyZXR1cm4haSgyMSkuaXNIb3N0SW5MaXN0KGUsWyJhdXRod2lmaSJdKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89ZnVuY3Rpb24oKXtyZXR1cm4obz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnBhcnNlQWxsb3dSZXBlYXRBZHM9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpuKGUpKSl7dD1vKHt9LGUpO3ZhciByPWUuc2NyZWVuO3ImJih0LnNjcmVlbj1OdW1iZXIocil8fChpKDEwNykuaXNNb2JpbGU/ci5tb2JpbGU6ci5kZXNrdG9wKSl9ZWxzZSB0PXttYXhTa2lwU2l6ZTowfTtyZXR1cm4gdC5jdXN0b209ITAsdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSJ5YWJzLiIsbz0iYXdhcHMuIixyPSJcbiIsYT1pKDc0MCkuZ2V0QWRVc2FnZVN0b3JhZ2VWYXJzKCkscz1hLmFkcyxsPWEuYWxsQWRzLGM9YS5hZEZpbHRlckRhdGEsdT1pKDkwKS5nZXRIcmVmKCk7dmFyIGQscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5tYXhTa2lwU2l6ZSxuPXZvaWQgMD09PXQ/OTp0LG89ZS5zY3JlZW4scj1lLmN1c3RvbTt0aGlzLmlkPXI/MTowLHRoaXMuc3NTa2lwVG9rZW5MZW5ndGg9aSg3OSkuaXNTc1NraXBUb2tlbj97dmFsdWU6bixjdXN0b206cn06dm9pZCAwLHRoaXMuZ2V0TmVhcmJ5QWRzPW8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSg3NDIpLmdldFN1cnJvdW5kaW5nQWRzKGUsbyx0LGZ1bmN0aW9uKCl7cmV0dXJuITB9KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMTQpLm1hcChlLnNsaWNlKGUubGVuZ3RoLW4pLGZ1bmN0aW9uKGUpe3JldHVybiBlLmFkSWR9KX19cmV0dXJuIGUubGltaXRZYWJzPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5sZW5ndGgtdDtyZXR1cm4gaT4wP2Uuc2xpY2UoaSk6ZX0sZS5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbihlKXtzLmFkZChlKX0sZS5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbihlKXtzLnJlbW92ZShlKX0sZS5wcm90b3R5cGUuZ2V0Q2FwdHVyZWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBzLml0ZW1zKCkubGVuZ3RofSxlLnByb3RvdHlwZS5jYXB0dXJlRGlyZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PWkoMTYwKS5pc1NraXBUb2tlblRlc3RFbmFibGVkKCk/bDpsLml0ZW1zKCksbj1pKDIzMikuZGlmZmVyZW5jZShlLHQpO2koNSkuZm9yRWFjaChuLGZ1bmN0aW9uKGUpe2koMTYwKS5pc1NraXBUb2tlblRlc3RFbmFibGVkKCk/bC5wdXNoKGUpOmwuYWRkKGUpfSl9LGUucHJvdG90eXBlLmdldFVudXNhYmxlQWRzPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pO3ZhciBuPXt9O2koNSkuZm9yRWFjaCh0LGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdPSEwfSk7dmFyIG89aSgyMikuZmlsdGVyKHMuaXRlbXMoKSxmdW5jdGlvbihlKXt2YXIgdD1lLmFkSWQ7cmV0dXJuIW5bdF19KTtyZXR1cm4gdGhpcy5nZXROZWFyYnlBZHMobyxlKX0sZS5wcm90b3R5cGUuc2F2ZUFkRmlsdGVyPWZ1bmN0aW9uKGUsdCl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLnNwbGl0KCI6Iik6W10sYT1jLmdldEVtcHR5QWRGaWx0ZXIoKTtyZXR1cm4gaSg1KS5mb3JFYWNoKHQsZnVuY3Rpb24oZSl7aWYoLTEhPT1lLmluZGV4T2YobykpYS5hd2Fwcz1lLnNwbGl0KCIuIilbMV07ZWxzZSBpZigtMSE9PWUuaW5kZXhPZihuKSl7dmFyIHQ9ZS5zcGxpdCgiLiIpWzFdO3QubGVuZ3RoPjAmJihhLnlhYnM9aSgyOSkuZGVjb2RlKHQpLnNwbGl0KHIpKX19KSxhfShlKTtjLnNldEFkRmlsdGVyRGF0YSgiYXdhcHMiLGEuYXdhcHMpLHQmJmMuc2V0QWRGaWx0ZXJEYXRhKCJ5YWJzIixhLnlhYnMpfSxlLnByb3RvdHlwZS5nZXRTa2lwVG9rZW49ZnVuY3Rpb24odCxhKXt2YXIgcztzPWkoOTApLmdldEhyZWYoKSx1IT09cyYmKGMuc2V0RW1wdHlBZEZpbHRlcigpLHU9cyk7dmFyIGQscCxmPWMuZ2V0QWRGaWx0ZXJEYXRhKCksaD1pKDE2MCkuaXNTa2lwVG9rZW5UZXN0RW5hYmxlZCgpP2w6bC5pdGVtcygpLGc9dGhpcy5nZXRVbnVzYWJsZUFkcyh0LGEpLF89aSgyMzIpLmRpZmZlcmVuY2UoZi55YWJzLGgpLHk9ZS5saW1pdFlhYnMoXy5jb25jYXQoZyksNTApLG09e2F3YXBzOmYuYXdhcHMseWFiczp5fTtyZXR1cm4gcD1bXSwoZD1tKS5hd2FwcyYmcC5wdXNoKG8rZC5hd2FwcyksZC55YWJzLmxlbmd0aCYmcC5wdXNoKG4raSgyOSkuZW5jb2RlKGQueWFicy5qb2luKHIpKSkscC5qb2luKCI6Iil9LGUucHJvdG90eXBlLmdldFNraXBCYW5uZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRVbnVzYWJsZUFkcyhlLHQpLmpvaW4oIlxuIil9LGV9KCk7dC5zZXRBbGxvd1JlcGVhdEFkcz1mdW5jdGlvbihlKXtpKDc5KS5pc1NzU2tpcFRva2VuU2VydmVyQXV0b3x8KGQ9ZSl9LHQuZ2V0QWRVc2FnZVN0b3JhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZHx8ZSYmZS5hbGxvd1JlcGVhdEFkc3x8e307cmV0dXJuIG5ldyBwKHQpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5saXN0PVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7ZSYmKC0xPT09dGhpcy5pbmRleE9mKGUpJiZ0aGlzLmxpc3QucHVzaChlKSl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLmxpc3Quc3BsaWNlKHQsMSl9fSxlLnByb3RvdHlwZS5pdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpc3R9LGUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjMpLmluZGV4T2YodGhpcy5saXN0LGUsMCxmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgZT90PT09ZTohKCF0LmFkSWR8fCFlLmFkSWQpJiYodC5hZElkPT09ZS5hZElkJiZ0LnBhZ2VOdW1iZXI9PT1lLnBhZ2VOdW1iZXImJnQucmVuZGVyVG89PT1lLnJlbmRlclRvKX0pfSxlfSgpO3QuQWRMaXN0PW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDc0NSkuaXNMb25nVXJsc1N1cHBvcnRlZD8zZTM6MjA0MDtvKj0uNzU7dmFyIHI9MjA0ODtmdW5jdGlvbiBhKGUpe3JldHVybiBpKDE5KS5pc1N0cmluZyhlKT9pKDQyKS5wYXJzZVF1ZXJ5U3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChlKSk6ZX10LmNyZWF0ZVVybD1mdW5jdGlvbihlLHQscyxsKXt2YXIgYz1uZXcoaSgyNCkuVXJsKSh7aG9zdDplLHBhdGg6cy5wYWdlSWQscGFyYW1zOm4obih7fSx0KSxhKHMuZXh0UGFyYW1zfHwiIikpfSkuZ2V0Q3VycmVudExlbmd0aCgpLHU9TWF0aC5taW4ocixvLWMtNik7aSg3NDcpKHUscy5ncmFiLGZ1bmN0aW9uKG8pe3ZhciByPW4obihuKHtncmFiOm99LHQpLGEocy5leHRQYXJhbXN8fCIiKSksaSg3NDYpLmdldExheW91dENvbmZpZ1BhcmFtZXRlcihzKSksYz17fTtpKDU0KS5kZWJ1Z1BhcmFtZXRlcnMmJihjPW4obih7fSxpKDU0KS5kZWJ1Z1BhcmFtZXRlcnMpLGMpKSxsKG5ldyhpKDI0KS5VcmwpKHtob3N0OmUscGF0aDpzLnBhZ2VJZCxwYXJhbXM6cn0pLGMpfSxzLnBhZ2VJZCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhblVzZUNsaWNrTWFjcm89ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjEpLmlzSG9zdEluTGlzdChlLFsid2lmaSJdKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGF0Y2hWaXNpYmlsaXR5Q29uZmlybWF0aW9uRm9ybWF0PWZ1bmN0aW9uKGUpe2UmJmUuZXh0UGFyYW1zJiYoZS5leHRQYXJhbXMuY29uZmlybVRpbWUmJi0xIT09ZS5leHRQYXJhbXMuY29uZmlybVRpbWUmJihlLmV4dFBhcmFtcy5jb25maXJtVGltZSo9MWUzKSxlLmV4dFBhcmFtcy5jb25maXJtUmF0aW8mJihlLmV4dFBhcmFtcy5jb25maXJtUmF0aW89TWF0aC5yb3VuZCgxZTYqZS5leHRQYXJhbXMuY29uZmlybVJhdGlvKSkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHRbImRlZmF1bHQiXT1lLHR9KGkoNDA0KSk7dmFyIG89aSgyMzQpLnBhcnNlLHI9dm9pZCAwLGE9dm9pZCAwO3I9aSg0OSkuRVZFTlRTLGE9aSgxNTEpWyJkZWZhdWx0Il07ZnVuY3Rpb24gcyhlLHQpe3RoaXMuX2lzUGxhaW5EaXJlY3Q9ZSx0aGlzLl9ibG9ja3M9e30sdGhpcy5fb25BZEFidXNlZD10Lm9uQWRBYnVzZWR9ZnVuY3Rpb24gbChlKXt2YXIgdD1lLmdldFVzZWRBZHZzKCksbj1bXTtyZXR1cm4gdCYmaSgwKS5lYWNoKHQsZnVuY3Rpb24oZSl7bi5wdXNoKGUuYWRJZCl9KSxufXMucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7dGhpcy5fZGF0YT1lLHRoaXMuX3Zpc2liaWxpdHlNYW5hZ2VyPW5ldyhpKDc3MykuRGlyZWN0VmlzaWJpbGl0eU1hbmFnZXIpLHRoaXMuX3RpbWVzdGFtcD1uZXcgRGF0ZSx0aGlzLl9yZWxvYWRUaW1lb3V0PXRoaXMuX2RhdGEuY29tbW9uJiZ0aGlzLl9kYXRhLmNvbW1vbi5yZWxvYWRUaW1lb3V0P051bWJlcih0aGlzLl9kYXRhLmNvbW1vbi5yZWxvYWRUaW1lb3V0KTppKDYpLmRlZmF1bHRSZWxvYWRUaW1lb3V0fSxzLnByb3RvdHlwZS5kYXRhQ2FuUmVsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3RpbWVzdGFtcHx8bmV3IERhdGUtdGhpcy5fdGltZXN0YW1wPjFlMyp0aGlzLl9yZWxvYWRUaW1lb3V0fSxzLnByb3RvdHlwZS5yZXNldFRpbWVvdXQ9ZnVuY3Rpb24oKXt0aGlzLl90aW1lc3RhbXA9bnVsbH0scy5wcm90b3R5cGUuZ2V0QmxvY2tzVG9SZXJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBpKDApLmZvck93bih0aGlzLl9ibG9ja3MsZnVuY3Rpb24odCxpKXt0JiZ0LmlzVmlzaWJsZSYmdC5pc1Zpc2liaWxpdHlDb25maXJtZWQoKSYmdC5pc1Zpc2libGUoKSYmZS5wdXNoKGkpfSksZX0scy5wcm90b3R5cGUuZ2V0QmxvY2tzPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGkoMCkuZm9yT3duKHRoaXMuX2Jsb2NrcyxmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfSxzLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtpZigoMCxpKDIpLmxvZ1JlbmRlckxhYmVsKShlLnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5EaXJlY3RNYW5hZ2VyU3RhcnQpLG8uaG9yaXpvbnRhbEFsaWdufHwoby5ob3Jpem9udGFsQWxpZ249Qm9vbGVhbihlLmhvcml6b250YWxBbGlnbikpLEJvb2xlYW4oaSgzOCkucXVlcnlTZWxlY3RvcigiIyIrZS5yZW5kZXJUbykpKXsoMCxpKDEyNykuc3RhcnRDb29raWVNYXRjaGluZykoe3NlcnZpY2VOYW1lOmUuaW5SVEI/aSgxMjcpLkNPT0tJRV9NQVRDSElOR19GT1IuRElSRUNUX0lOX1JUQjppKDEyNykuQ09PS0lFX01BVENISU5HX0ZPUi5ESVJFQ1QsY29tbW9uRGF0YTp0aGlzLl9kYXRhLmNvbW1vbixtYXRjaFVybHM6dGhpcy5fZGF0YS5tYXRjaFVybHMsYnVuZGxlOmUuYnVuZGxlLG5vbmNlOmUuY3NwTm9uY2V9KTt2YXIgcz1pKDE1KS5nZXRSZW5kZXJJZChlKTt0aGlzLl9kZXN0cm95QmxvY2socyksdGhpcy5fZGF0YSYmdGhpcy5fZGF0YVtlLnByb2R1Y3RdPyhhKHtldmVudDpyLkJMT0NLX0NPTkZJUk1BVElPTixkYXRhOnthY3Rpb246ci5UUllfVE9fUkVOREVSLHBhZ2VJZDplLnBhZ2VJZCxibG9ja05hbWU6dC5uYW1lLGJsb2NrSWQ6ZS5ibG9ja0lkLHJlbmRlclRvOmUucmVuZGVyVG99fSksdGhpcy5fY3JlYXRlQmxvY2tXcmFwcGVyKGUsdCxuLG8pKTooMCxpKDcpLmlzRnVuY3Rpb24pKG4pJiZuKCl9ZWxzZSBpKDkpLmxvZ2dlci53YXJuKG5ldyBFcnJvcigiUmVuZGVyIHRvIG5vZGUgaXMgbnVsbCAoIitlLnBhZ2VJZCsiKSgiKyhlLmJsb2NrSWQ/ZS5ibG9ja0lkOiIiKSsiKSIpLCJEaXJlY3RNYW5hZ2VyOjpyZW5kZXIiKX0scy5wcm90b3R5cGUuX2NyZWF0ZUJsb2NrV3JhcHBlcj1mdW5jdGlvbihlLHQsbixvKXt2YXIgcj10aGlzLGE9aSgxNSkuZ2V0UmVuZGVySWQoZSk7KDAsaSgyKS5sb2dSZW5kZXJMYWJlbCkoZS51bmlxdWVJZCxpKDIpLkJsb2NrUmVuZGVyU3RlcHMuRGlyZWN0TWFuYWdlckluaXRFbmQpLHRoaXMuX2NyZWF0ZUJsb2NrKHtjZmc6ZSxyYXdTZXR0aW5nczp0LHJlbmRlclBhcmFtczpvLGNhbGxiYWNrOmZ1bmN0aW9uKHMpeygwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkRpcmVjdE1hbmFnZXJDaG9vc2VCbG9ja1R5cGUpLHM/KHIuX2Jsb2Nrc1thXT1zLHMucmVuZGVyKGZ1bmN0aW9uKCl7aWYoKDAsaSgyKS5sb2dSZW5kZXJMYWJlbCkoZS51bmlxdWVJZCxpKDIpLkJsb2NrUmVuZGVyU3RlcHMuRGlyZWN0TWFuYWdlckJsb2NrUmVuZGVyZWQpLCgwLGkoODQpLnNlbmRMYWJlbCkoZS51bmlxdWVJZCksIm1vZGVybkFkYXB0aXZlIiE9PXQubmFtZXx8Im1vZGVybkFkYXB0aXZlImluIGkoOTgpLmFkYXB0aXZlMDQxOEJsb2Nrcz8oci5fcnVuT25SZW5kZXJDYWxsYmFjayhzLGUub25SZW5kZXIsby5jb25maXJtQnlIYW5kbGVyKSxyLl9sb2dUb01ldHJpa2EocyxlLmJ1bmRsZSkpOnIuX3JlbmRlck1vZGVybkFkYXB0aXZlKGUsdCxuLG8pLCgwLGkoMTA0KS5pc0luU2FmZWZyYW1lKSh3aW5kb3cpKXt2YXIgYT0oMCxpKDMzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpKGkoMzgpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UucmVuZGVyVG8pKSxsPWEud2lkdGgsYz1hLmhlaWdodDsoMCxpKDEwNCkudXBkYXRlU2FmZWZyYW1lU2l6ZSkod2luZG93LHt3aWR0aDpsLGhlaWdodDpjfSl9fSkpOigwLGkoNykuaXNGdW5jdGlvbikobikmJm4oKX19KX0scy5wcm90b3R5cGUuX3JlbmRlck1vZGVybkFkYXB0aXZlPWZ1bmN0aW9uKGUsdCxvLHIpe3ZhciBhPXRoaXMscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLnJlbmRlclRvKSxsPXM/cy5jbGllbnRXaWR0aDowLGM9aSgxNSkuZ2V0UmVuZGVySWQoZSksdT12b2lkIDAsZD0hMDtpZighbi5pc1dpZGVCbG9jayhsKSl7dmFyIHA9cy5jbGllbnRIZWlnaHQ7ZD1uLmlzQ29ycmVjdEhlaWdodChsLHAsdC5hZGFwdGl2ZVR5cGUpfWQ/KHU9dGhpcy5fYmxvY2tzW2NdLHRoaXMuX3J1bk9uUmVuZGVyQ2FsbGJhY2sodSxlLm9uUmVuZGVyLHIuY29uZmlybUJ5SGFuZGxlciksdGhpcy5fbG9nVG9NZXRyaWthKHUsZS5idW5kbGUpKToodC53aWR0aD1sLHQuaGVpZ2h0PW4uZ2V0SGVpZ2h0KGwsdC5hZGFwdGl2ZVR5cGUpLHQubmFtZT0iYWRhcHRpdmUiLHRoaXMuX2Rlc3Ryb3lCbG9jayhjKSx0aGlzLl9jcmVhdGVCbG9jayh7Y2ZnOmUscmF3U2V0dGluZ3M6dCxyZW5kZXJQYXJhbXM6cixjYWxsYmFjazpmdW5jdGlvbih0KXt0PyhhLl9ibG9ja3NbY109dCx0LnJlbmRlcihmdW5jdGlvbigpe2EuX3J1bk9uUmVuZGVyQ2FsbGJhY2sodCxlLm9uUmVuZGVyLHIuY29uZmlybUJ5SGFuZGxlciksYS5fbG9nVG9NZXRyaWthKHQsZS5idW5kbGUpfSkpOigwLGkoNykuaXNGdW5jdGlvbikobykmJm8oKX19KSl9LHMucHJvdG90eXBlLl9kZXN0cm95QmxvY2s9ZnVuY3Rpb24oZSl7dGhpcy5fYmxvY2tzW2VdJiYodGhpcy5fYmxvY2tzW2VdLmRlc3RydWN0b3IoKSxkZWxldGUgdGhpcy5fYmxvY2tzW2VdKX0scy5wcm90b3R5cGUuX3J1bk9uUmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0LG4pe2lmKHQpe3ZhciBvPXtsYW5nOmUuZGF0YVNvdXJjZS5nZXRMYW5ndWFnZSgpLHByb2R1Y3Q6aSg2KS5Qcm9kdWN0cy5ESVJFQ1QsY29uZmlybVZpc2liaWxpdHk6ZnVuY3Rpb24oKXtuJiZlLmNvbmZpcm1WaXNpYmlsaXR5KCl9fTtlLmRhdGFTb3VyY2UuaXNBcHAoKSYmKG8udGVzdFRhZz1lLmdldFRlc3R0YWcoKSksdChvKX19LHMucHJvdG90eXBlLl9sb2dUb01ldHJpa2E9ZnVuY3Rpb24oZSl7aWYoWWEuZUVjaWtSdk9iOWcuTE9HX0RJUkVDVCYmdGhpcy5faXNQbGFpbkRpcmVjdCl7dmFyIHQ9e2Vycm9yOiJNYXliZSBub3QgcmVuZGVyZWQifTt0cnl7dmFyIG49ZS5nZXRNYWluQ29udCgpO24mJih0PXtsaW1pdDplLnNldHRpbmdzLmxpbWl0LGJsb2NrOmUuc2V0dGluZ3MuZm9ybWF0Lm5hbWUsd2lkdGg6bi5jbGllbnRXaWR0aHx8LTEsaGVpZ2h0Om4uY2xpZW50SGVpZ2h0fHwtMX0pfWNhdGNoKGUpe3QuZXJyb3I9ZS5tZXNzYWdlfXZhciBvPSgwLGkoMSkucHJvdGVjdCkoIm1ldHJpa2FfZGlyZWN0IixmdW5jdGlvbihlKXtlLmhpdCh3aW5kb3cubG9jYXRpb24uaHJlZix7cGFyYW1zOnR9KX0pO2koMTM2KS5yZXF1ZXN0Q291bnRlcih7aWQ6Mzc4NTAxNzB9LG8pfX0scy5wcm90b3R5cGUuZ2V0VXNlZElkcz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZSYmdGhpcy5fYmxvY2tzW2VdP3Q9dC5jb25jYXQobCh0aGlzLl9ibG9ja3NbZV0pKTppKDApLmZvck93bih0aGlzLl9ibG9ja3MsZnVuY3Rpb24oZSl7ZSYmKHQ9dC5jb25jYXQobChlKSkpfSksdH0scy5wcm90b3R5cGUuX2NyZWF0ZUJsb2NrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT1lLmNmZyxuPWUucmF3U2V0dGluZ3Msbz1lLnJlbmRlclBhcmFtcyxyPWUuY2FsbGJhY2s7dGhpcy5fZ2V0Rm9ybWF0T2JqZWN0KHtyYXdTZXR0aW5nczpuLGNmZzppLGNhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiB0Ll9jcmVhdGVCbG9ja0J5Rm9ybWF0KHtmb3JtYXRPYmplY3Q6ZSxjcmVhdGVCbG9ja0NhbGxiYWNrOnIsY2ZnOmkscmVuZGVyUGFyYW1zOm8scmF3U2V0dGluZ3M6bn0pfX0pfSxzLnByb3RvdHlwZS5fY3JlYXRlQmxvY2tCeUZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5mb3JtYXRPYmplY3Qsbz1lLmNyZWF0ZUJsb2NrQ2FsbGJhY2sscj1lLmNmZyxhPWUucmVuZGVyUGFyYW1zLHM9ZS5yYXdTZXR0aW5ncztpZihudWxsPT09bilyZXR1cm4gaSg5KS5sb2dnZXIuZXJyb3IobmV3IEVycm9yKCJGb3JtYXQgIitzLm5hbWUrIiBub3QgZm91bmQiKSwiRm9ybWF0X05vRm9ybWF0IiksbyhudWxsKTt2YXIgbD10aGlzLl9nZXRTZXR0aW5ncyhuLHMscik7aWYobnVsbD09PWwpcmV0dXJuIGkoOSkubG9nZ2VyLmVycm9yKG5ldyBFcnJvcigiU2V0dGluZ3MgaXMgbnVsbCIpLCJGb3JtYXRfTm9TZXR0aW5ncyIpLG8obnVsbCk7dmFyIGM9bmV3KGkoNDEzKSkoe2RhdGE6dGhpcy5fZGF0YSxzZXR0aW5nczpsLHZpc2liaWxpdHlNYW5hZ2VyOnRoaXMuX3Zpc2liaWxpdHlNYW5hZ2VyLG9uQWRBYnVzZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KGUpLG49MDtuPGU7bisrKWlbbl09YXJndW1lbnRzW25dO3QuX2hhbmRsZUFkQWJ1c2UuYXBwbHkodCxbcl0uY29uY2F0KGkpKX19LHIpO2lmKGMuaXNFbXB0eSgpKXJldHVybigwLGkoMikuc3RvcExvZ2dpbmdUaW1lKShyLnVuaXF1ZUlkKSxpKDkpLmxvZ2dlci5lcnJvcihuZXcgRXJyb3IoIk5vIGFkcyB0byByZW5kZXIiKSwiRm9ybWF0X05vRGF0YSIpLG8obnVsbCk7dmFyIHU9ci5ibG9ja0lkO3V8fCh1PShyLnJlbmRlclRvKyItIitsLmZvcm1hdC5jbGFzc05hbWUpLnJlcGxhY2UoL1teLVx3XS9nLCItIikpLG8obmV3IG4uY29uc3RydWN0b3IoYyxsLHIucmVuZGVyVG8sdSxyLmNzcE5vbmNlLHIucGFnZU51bWJlcixhKSl9LHMucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXtpKDApLmZvck93bih0aGlzLl9ibG9ja3MsZnVuY3Rpb24oZSl7ZS5kZXN0cnVjdG9yKCl9KSx0aGlzLl9ibG9ja3M9e319LHMucHJvdG90eXBlLl9oYW5kbGVBZEFidXNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fb25BZEFidXNlZCYmKDAsaSg3KS5pc0Z1bmN0aW9uKSh0aGlzLl9vbkFkQWJ1c2VkKSl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTt0aGlzLl9vbkFkQWJ1c2VkLmFwcGx5KHRoaXMsW3RoaXNdLmNvbmNhdCh0KSl9fSxzLnByb3RvdHlwZS5zbGlkZVVwPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPXRoaXMuX2Jsb2Nrc1tlXTtuLnNsaWRlVXAmJm4uc2xpZGVVcChmdW5jdGlvbigpe2kuX2Rlc3Ryb3lCbG9jayhlKSx0KCl9KX0scy5wcm90b3R5cGUuX2dldEZvcm1hdE9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD1lLnJhd1NldHRpbmdzLG49ZS5jYWxsYmFjayxvPWUuY2ZnLHI9dC5uYW1lLGE9by5kaXJlY3RTZXR0aW5nc3x8e307aWYoKGxvY2F0aW9uLmhyZWZ8fCIiKS5pbmRleE9mKCJwYXJ0bmVyLXBhZ2UuaHRtbCIpPjAmJmEudHlwZSYmKHI9YS50eXBlKSwiaW50ZXJzdGl0aWFsIj09PXIpe3ZhciBzPWkoMTAwKS5nZXRWYWxpZE51bWJlcih0LndpZHRoKSxsPWkoMTAwKS5nZXRWYWxpZE51bWJlcih0LmhlaWdodCk7cj1pKDc3Nikoe3dpZHRoOnMsaGVpZ2h0Omx9KX1uKHtjb25zdHJ1Y3RvcjppKDIyMyksZm9ybWF0OmkoMjUyKS5nZXRGb3JtYXRCeU5hbWUocil9KX0scy5wcm90b3R5cGUuX2dldFNldHRpbmdzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmZvcm1hdDtyLmJsb2NrSWQ9bi5ibG9ja0lkO3ZhciBhPW8ocix0LG4uZGlyZWN0U2V0dGluZ3MpO3JldHVybiBhPygoMCxpKDM1MSkuc2V0QWxsb3dSZXBlYXRBZHMpKGEuYWxsb3dSZXBlYXRBZHMpLGEpOm51bGx9LGUuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX3ZpZXdOb3RpY2VzPWUudmlld05vdGljZXMsdGhpcy5fd2luTm90aWNlPWUud2luTm90aWNlLHRoaXMuX2xpbmtUYWlsPWUubGlua1RhaWwsdGhpcy5fc2FmZWZyYW1lPWUuc2FmZWZyYW1lLHRoaXMubm9uY2U9ZS5ub25jZXx8IiJ9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpcm09ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fbGlua1RhaWwmJiF0aGlzLl9pc0NvbmZpcm1TZW50KXtpKDM1NSkucGF0Y2hWaXNpYmlsaXR5Q29uZmlybWF0aW9uRm9ybWF0KGUpO3ZhciBuPXRoaXMuZ2V0Q29uZmlybVVybChlKTtpZih0aGlzLl92aWV3Tm90aWNlcyYmdGhpcy5fdmlld05vdGljZXMubGVuZ3RoKXt2YXIgbz1pKDE0KS5tYXAodGhpcy5fdmlld05vdGljZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtpKDM1OCkuY29uZmlybVVybHMobyx0aGlzLm5vbmNlLHRoaXMuX3NhZmVmcmFtZSkudGhlbihmdW5jdGlvbigpe2koNzgpLnNlbmRQaXhlbChuKX0sZnVuY3Rpb24oKXtpKDkpLmxvZ2dlci5lcnJvcihuZXcgRXJyb3IoIlZpZXcgbm90aWNlcyBsb2FkIGVycm9yIiksIlJUQl92aXNpYmlsaXR5X21hbmFnZXJfZXJyb3IiKX0pfWVsc2UgaSg3OCkuc2VuZFBpeGVsKG4pO3RoaXMuX2lzQ29uZmlybVNlbnQ9ITB9fSxlLnByb3RvdHlwZS5zZW5kV2luTm90aWNlPWZ1bmN0aW9uKCl7IXRoaXMuX2lzV2luTm90aWNlU2VudCYmdGhpcy5fd2luTm90aWNlJiYoaSgzNTgpLmNvbmZpcm1VcmxzKFt0aGlzLl93aW5Ob3RpY2VdLHRoaXMubm9uY2UsdGhpcy5fc2FmZWZyYW1lKSx0aGlzLl9pc1dpbk5vdGljZVNlbnQ9ITApfSxlLnByb3RvdHlwZS5nZXRDb25maXJtVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGVzdHRhZ1Byb3BzLG89ZS5yZW5kZXJTaXplLHI9ZS5mb3JtYXRUeXBlLGE9ZS5hY3R1YWxGb3JtYXQscz1lLmV4dFBhcmFtcyxsPW5ldyhpKDE4OCkuUnRiVGVzdHRhZykodCksYz1uKG4oe30scykseyJ0ZXN0LXRhZyI6bC50b1N0cmluZygpLCJmb3JtYXQtdHlwZSI6ciwiYWN0dWFsLWZvcm1hdCI6YSxybmQ6aSg0OCkuZ2V0UmFuZG9tSW50KDFlMTIsMWUxMyl9KTtyZXR1cm4gbyYmKGMucmVuZGVyV2lkdGg9by53aWR0aCxjLnJlbmRlckhlaWdodD1vLmhlaWdodCksY1siYWRiLWJpdHMiXT0iMSIsbmV3KGkoMjQpLlVybCkoe2hvc3Q6dGhpcy5fbGlua1RhaWwscGFyYW1zOmN9KS5nZXRVcmwoKX0sZS5nZXRNYW5hZ2VyPWZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmtUYWlsIGluIGUudmlzaWJpbGl0eU1hbmFnZXJzP2UudmlzaWJpbGl0eU1hbmFnZXJzW3QubGlua1RhaWxdOihlLnZpc2liaWxpdHlNYW5hZ2Vyc1t0LmxpbmtUYWlsXT1uZXcgZSh0KSxlLnZpc2liaWxpdHlNYW5hZ2Vyc1t0LmxpbmtUYWlsXSl9LGUudmlzaWJpbGl0eU1hbmFnZXJzPXt9LGV9KCk7dC5SdGJWaXNpYmlsaXR5TWFuYWdlcj1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbmZpcm1VcmxzPWZ1bmN0aW9uKGUsdCxuKXtpZih2b2lkIDA9PT1uJiYobj0hMCksIW4pcmV0dXJuIGkoMzU5KS5jb25maXJtVmlzaWJpbGl0eShlKSxQcm9taXNlLnJlc29sdmUoKTt2YXIgbz1bIjxzY3IiLCdpcHQ+InVzZSBzdHJpY3QiOygnLGkoMzU5KS5jb25maXJtVmlzaWJpbGl0eSwnKShbIicsZS5qb2luKCciLCInKSwnIl0pPC9zY3InLCJpcHQ+Il0uam9pbigiIik7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7aSgzNjApLmNhbGxJblNhZmVmcmFtZSh7bm9uY2U6dCxvbkFjdGlvbjpmdW5jdGlvbihlLHQpeyJlcnJvciI9PT1lJiZpKDkpLmxvZ2dlci5lcnJvcih7bmFtZTplLG1lc3NhZ2U6dH0sImNvbmZpcm0uaHRtbCIpfSxvbkxvYWQ6ZSxvbkVycm9yOm4saHRtbDpvLHdhaXQ6NWUzfSl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY29uZmlybVZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspKG5ldyBJbWFnZSkuc3JjPWVbdF19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGxJblNhZmVmcmFtZT1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHQuc3R5bGUucG9zaXRpb249ImZpeGVkIix0LnN0eWxlLmxlZnQ9Ii05OXB4Ijt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmFwcGVuZENoaWxkKG4pO3ZhciBvPWkoNzApLmdlbmVyYXRlSGV4U3RyaW5nKDEwKSxyPXtub25jZTplLm5vbmNlLHdpZHRoOjEsaGVpZ2h0OjEsaHRtbDplLmh0bWwsaWQ6b30sYT1pKDMxKS5vbmNlKGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93O2koMTA0KS5udWtlU2FmZWZyYW1lKGUsbyksaSg2MykucmVtb3ZlTm9kZUZyb21QYXJlbnQodCl9KSxzPWZ1bmN0aW9uKCl7c2V0VGltZW91dChhLGUud2FpdCl9LGw9d2luZG93O3JldHVybiBpKDEwNCkuaW5pdFNhZmVmcmFtZShsLG4scixmdW5jdGlvbigpe2koNykuaXNGdW5jdGlvbihlLm9uRXJyb3IpJiZlLm9uRXJyb3IoKSxzKCl9LGZ1bmN0aW9uKCl7aSg3KS5pc0Z1bmN0aW9uKGUub25Mb2FkKSYmZS5vbkxvYWQoKSxzKCl9LGZ1bmN0aW9uKHQsaSl7ZS5vbkFjdGlvbih0LGkpfSksYX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2FuTG9hZFJzeWFUYWdVc2VyPWZ1bmN0aW9uKGUpe3JldHVybiFpKDIxKS5pc0hvc3RJbkxpc3QoZSxbIndpZmkiXSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaSg3MikuZ2V0TmF0aXZlSlNPTih3aW5kb3cpLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyl9LHQucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZm9udCxuPWUudGl0bGVQZXJjZW50LG89ZS50aXRsZUJvbGQ7aWYodGhpcy5lbGVtZW50KXt2YXIgcj1pKDMwMCkuZ2V0Q29tcHV0ZWRGb250U2l6ZSh0aGlzLmVsZW1lbnQpO2lmKHIpe3ZhciBhPXQqcGFyc2VJbnQobiwxMCkvMTAwO3RoaXMuc2V0KCJ0aXRsZV9zaXplIixNYXRoLnJvdW5kKGEqcikpLHRoaXMuc2V0KCJ0aXRsZV9ib2xkIixvPzE6MCl9fX0sdC5wcm90b3R5cGUuZ2V0SXNGaXJzdFNjcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRmlyc3RTY3JlZW59LHR9KGkoNzc4KS5MYXlvdXRDb25maWcpO3QuTGF5b3V0Q29uZmlnPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPVt7bmFtZToiWWFuZGV4IE5ld3MiLGxpc3Q6WyJ5YW5kZXhOZXdzIl19LHtuYW1lOiJZYW5kZXggUG9nb2RhIixsaXN0OlsieWFuZGV4UG9nb2RhIl19LHtuYW1lOiJBdml0byIsbGlzdDpbImF2aXRvIiwiYXZpdG9Nb2JpbGUiXX0se25hbWU6IllhbmRleCBNYWlsIixsaXN0OlsieWFuZGV4TWFpbCJdfSx7bmFtZToiWWFuZGV4IFplbiIsbGlzdDpbInlhbmRleFplbiJdfSx7bmFtZToiT2suUnUiLGxpc3Q6WyJvayJdfSx7bmFtZToiR2lzbWV0ZW8iLGxpc3Q6WyJnaXNtZXRlbyJdfSx7bmFtZToiTWFpbC5SdSIsbGlzdDpbIm1haWxSdUFsbCJdfSx7bmFtZToiWWFuZGV4IFZpZGVvIixsaXN0OlsieWFuZGV4VmlkZW8iXX0se25hbWU6IllhbmRleCBJbWFnZXMiLGxpc3Q6WyJ5YW5kZXhJbWFnZXMiXX0se25hbWU6IllhbmRleCBNYXBzIixsaXN0OlsieWFuZGV4TWFwcyJdfV07dC5nZXRTZXJ2aWNlTmFtZT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO2Zvcih2YXIgdD0iT3RoZXIiLG89MDtvPG4ubGVuZ3RoO28rKylpZihpKDIxKS5pc0hvc3RJbkxpc3QoZSxuW29dLmxpc3QpKXt0PW5bb10ubmFtZTticmVha31yZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucXVlcnlTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWRvY3VtZW50KSwhaSgxOSkuaXNTdHJpbmcoZSkpcmV0dXJuIGU7dmFyIG49ZS5zbGljZSgwLDEpLG89ZS5zbGljZSgxKTtzd2l0Y2gobil7Y2FzZSIjIjpyZXR1cm4gaSgxNDQpLmdldEVsZW1lbnRCeUlkKG8pO2Nhc2UiLiI6cmV0dXJuIGkoMTE1KS5saXN0VG9BcnJheShpKDI5OSkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShvLHQpKTtkZWZhdWx0OnJldHVybiBpKDE0KS5tYXAoaSgxMTUpLmxpc3RUb0FycmF5KCh0fHxkb2N1bWVudCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49InNsb3RDb3VudGVyIjtmdW5jdGlvbiBvKCl7dmFyIGU9aSgxMikuZ2V0R2xvYmFsVmFyaWFibGUobik7cmV0dXJuIHZvaWQgMD09PWU/KGkoMTIpLnNldEdsb2JhbFZhcmlhYmxlKG4sMCksMCk6ZX10LmdldENvdW50ZXI9byx0LmluY3JlYXNlQ291bnRlcj1mdW5jdGlvbigpe3ZhciBlPW8oKSsxO3JldHVybiBpKDEyKS5zZXRHbG9iYWxWYXJpYWJsZShuLGUpLGV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fChuPWUpLG4uYWRkQ2xhc3ModC5qb2luKCIgIikpLGkoMCkuZWFjaCh0LGZ1bmN0aW9uKHQpeyFmdW5jdGlvbihlLHQsbil7dmFyIG89ZS5nZXRFbGVtZW50KCk7KDAsaSgxMzApLmhhc1Njcm9sbEluRWxlbWVudCkobyl8fChuLnJlbW92ZUNsYXNzKHQpLCgwLGkoMTMwKS5oYXNTY3JvbGxJbkVsZW1lbnQpKG8pJiZuLmFkZENsYXNzKHQpKX0oZSx0LG4pfSksKDAsaSgxMzApLmhhc1Njcm9sbEluRWxlbWVudCkoZS5nZXRFbGVtZW50KCkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPWkoMykscj0obj1vKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0sYT1pKDM1KTt2YXIgcz1pKDEwKSxsPWkoNDk5KSxjPXJbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQocyx7bmFtZToieWFwLWJ1dHRvbiIsYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMobCl9LGdldEljb25TaXplOmZ1bmN0aW9uKCl7dmFyIGU9e1hTOlsxNiwxNl0sIjIweDIwIjpbMjAsMjBdLFM6WzIyLDIyXSxNOlszMiwzMl0sTDpbMzYsMzZdLFhMOls0OCw0OF19LHQ9ZVt0aGlzLnByb3BzLnNpemVdfHxlWyJNIl07cmV0dXJue3dpZHRoOnRbMF0saGVpZ2h0OnRbMV19fSxnZXRNb2RUaGVtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMudGhlbWU7cmV0dXJuIGUmJiJfdGhlbWVfIitlfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImJ1dHRvbiIpLGk9dC5nZXRFbGVtZW50KCk7cmV0dXJuIGUmJihpLmhyZWY9ZSx0LmFkZENsYXNzKHRoaXMuYl8oIl9hY3RpdmUtbGluayIpKSksZX0sX3JlbmRlcjpmdW5jdGlvbihlLHQsaSl7dmFyIG49dC5ocmVmLG89dC50aGVtZSxzPSJhbmRyb2lkLXgiIT09byYmImlvcy14IiE9PW98fHQuaWNvbj9udWxsOntoZWlnaHQ6dGhpcy5nZXRJY29uU2l6ZSgpLmhlaWdodH07cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoYS5OZXdMaW5rLHtjbGFzczplKHRbImNsYXNzIl0sZSgpLG4/ZSgiX2FjdGl2ZS1saW5rIik6IiIsdGhpcy5tb2QsdGhpcy5nZXRNb2RUaGVtZSgpKSxyZXNvdXJjZUlkOiJidXR0b24iLGhyZWY6bix0YXJnZXQ6Il9ibGFuayIsc3R5bGU6c30sdC5pY29uP3JbImRlZmF1bHQiXS5jcmVhdGUoaS5BcHBJY29uLHtjbGFzczplKCJfX2ljb24iKSxpbWFnZTp0Lmljb24sc2l6ZTp0aGlzLmdldEljb25TaXplKCl9KTpudWxsLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX190ZXh0IikscmVzb3VyY2VJZDoidGV4dCJ9LHRoaXMuZ2V0Q2hpbGRyZW4oKSkpfX0se0FwcEljb246aSgzNzApfSk7ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1pKDMpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGE9aSgxKSxzPWkoNTkpO3ZhciBsPWkoMTApLGM9aSgzNjYpLHU9aSgyMzUpLGQ9aSgwKSxwPWkoNTE3KSxmPXJbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQoW2wsdV0se25hbWU6InlhcC13YXJuaW5nIixzaG91bGRSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZi53aWxsUmVuZGVyKHRoaXMucHJvcHMuYWR2KX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMocCksdGhpcy5fc3R5bGVDb21wb25lbnQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoInN0eWxlIiksdGhpcy5fcm9vdENvbXBvbmVudD10aGlzLmdldFJlc291cmNlQnlJZCgicm9vdCIpLHRoaXMuX2NvbnRhaW5lckNvbXBvbmVudD10aGlzLmdldFJlc291cmNlQnlJZCgibWFpbiIpLHRoaXMuX3RleHRDb21wb25lbnQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImNvbnRhaW5lciIpLHRoaXMuX2RvdHNDb21wb25lbnQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImRvdHMiKX0saXNJbXBvcnRhbnRXYXJuaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuYWR2Lndhcm5pbmcmJih0aGlzLl9oYXNJbXBvcnRhbnRGbGFnKCl8fHRoaXMucHJvcHMucmVuZGVyQXNJbXBvcnRhbnQpfSxfaGFzSW1wb3J0YW50RmxhZzpmdW5jdGlvbigpe3JldHVybiBkLndhcm5pbmcuaGFzSW1wb3J0YW50RmxhZyh0aGlzLnByb3BzLmFkdi5iYW5uZXJGbGFncyl9LG9uRGlzcGxheWVkOmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVPdmVyZmxvdygpLHRoaXMuaXNJbXBvcnRhbnRXYXJuaW5nKCk/KHRoaXMuX3Jvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy5iXygiX21lZGljYWwiKSksdGhpcy5fc2V0V2FybmluZ1NpemUoKSk6dGhpcy5fYWRkQW5pbWF0ZSgpfSxyZWNhbGNTaXplOmZ1bmN0aW9uKCl7dGhpcy5zaG91bGRSZW5kZXIoKSYmdGhpcy5pc0ltcG9ydGFudFdhcm5pbmcoKSYmdGhpcy5fc2V0V2FybmluZ1NpemUoKX0scmVtb3ZlT3ZlcmZsb3c6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnJlbW92ZU92ZXJmbG93TW9kcztpZihlJiZlLmxlbmd0aCl7dmFyIHQ9dGhpcy5iXyxpPWQubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9KTtjKHRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJjb250YWluZXIiKSxpKX19LF9hZGRBbmltYXRlOmZ1bmN0aW9uKCl7dGhpcy5fcG9zPTAsdGhpcy5fcm9vdENvbXBvbmVudC5hZGRDbGFzcyh0aGlzLmJfKCJfbG9uZyIpKTt2YXIgZT10aGlzLl90ZXh0Q29tcG9uZW50LmdldEVsZW1lbnQoKS5vZmZzZXRXaWR0aCx0PXRoaXMuX3Jvb3RDb21wb25lbnQuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRoO3RoaXMucHJvcHMuc2xpbVdhcm5pbmcmJnRoaXMucHJvcHMuc2xpbVdhcm5pbmdXaWR0aCYmKHQ9dGhpcy5wcm9wcy5zbGltV2FybmluZ1dpZHRoKSxlPnQ/KHRoaXMuX2NvbnRhaW5lckNvbXBvbmVudC5iaW5kKCJtb3VzZWVudGVyIix0aGlzLl9vbk1vdXNlRW50ZXIsdGhpcyksdGhpcy5fY29udGFpbmVyQ29tcG9uZW50LmJpbmQoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKSx0aGlzLl9jb250YWluZXJDb21wb25lbnQuYmluZCgibW91c2VsZWF2ZSIsdGhpcy5fb25Nb3VzZUxlYXZlLHRoaXMpLHRoaXMuX2NvbnRhaW5lckNvbXBvbmVudC5iaW5kKCJjbGljayIsdGhpcy5fb25DbGljayx0aGlzKSx0aGlzLl9zdHlsZUNvbXBvbmVudC5hZGRDbGFzcyh0aGlzLmJfKCJfZWxsaXBzaXMiKSksdGhpcy5fcm9vdENvbXBvbmVudC5hZGRDbGFzcyh0aGlzLmJfKCJfZ3JhZGllbnRfX3JpZ2h0IikpKTp0aGlzLl9kb3RzQ29tcG9uZW50LmFkZENsYXNzKHRoaXMuYl8oIl9tb3VzZS1vbiIpKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5pbWF0ZVN0YXJ0KCEwKSx0aGlzLl9kb3RzQ29tcG9uZW50LmFkZENsYXNzKHRoaXMuYl8oIl9tb3VzZS1vbiIpKX0sX29uTW91c2VFbnRlcjpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGVTdGFydCghMSksdGhpcy5fZG90c0NvbXBvbmVudC5hZGRDbGFzcyh0aGlzLmJfKCJfbW91c2Utb24iKSl9LF9vbk1vdXNlTGVhdmU6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRlU3RvcCgpLHRoaXMuX3Jlc2V0UG9zKCksdGhpcy5fZG90c0NvbXBvbmVudC5yZW1vdmVDbGFzcyh0aGlzLmJfKCJfbW91c2Utb24iKSl9LF9vbkNsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLnByb3BzLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9hbmltYXRlU3RhcnQoITEpfSxfYW5pbWF0ZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Jvb3RDb21wb25lbnQuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRoLGk9dGhpcy5fdGV4dENvbXBvbmVudC5nZXRFbGVtZW50KCkub2Zmc2V0V2lkdGgtdDt0aGlzLl9hbmltYXRlV2FybmluZyh0aGlzLl9wb3MsaSxlKSx0aGlzLl9kb3RzQ29tcG9uZW50LmFkZENsYXNzKHRoaXMuYl8oIl9tb3VzZS1vbiIpKX0sX2FuaW1hdGVTdG9wOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0ZS5zdG9wKCl9LF9yZXNldFBvczpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2xpbVdhcm5pbmc/MTAwOjcwMDthLnByb3RlY3Quc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX21vdmUoMCksdGhpcy5fcm9vdENvbXBvbmVudC5yZW1vdmVDbGFzcyh0aGlzLmJfKCIgX2dyYWRpZW50X19sZWZ0IikpLHRoaXMuX3Jvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy5iXygiIF9ncmFkaWVudF9fcmlnaHQiKSl9LGUsdGhpcyl9LF9hbmltYXRlV2FybmluZzpmdW5jdGlvbihlLHQsaSl7dmFyIG49MCxvPXRoaXMscj10aGlzLl90ZXh0Q29tcG9uZW50LmdldEVsZW1lbnQoKS5vZmZzZXRXaWR0aCxhPXRoaXMuX3Jvb3RDb21wb25lbnQuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRoO3RoaXMucHJvcHMuc2xpbVdhcm5pbmdXaWR0aCYmKG49dGhpcy5wcm9wcy5zbGltV2FybmluZ1dpZHRoKSx0aGlzLl9hbmltYXRlPWQuYW5pbWF0ZSh7ZHVyYXRpb246MjAqKHItYStuKSxzdGFydDplLGVuZDp0K24sb25GcmFtZTpmdW5jdGlvbihlKXtvLl9tb3ZlKGUtbiksby5fcm9vdENvbXBvbmVudC5hZGRDbGFzcyhvLmJfKCIgX2dyYWRpZW50X19sZWZ0IikpfSxvbkVuZDpmdW5jdGlvbigpe28uX3Bvcz09PXQmJihvLl9yb290Q29tcG9uZW50LnJlbW92ZUNsYXNzKG8uYl8oIiBfZ3JhZGllbnRfX3JpZ2h0IikpLG8ucHJvcHMuc2xpbVdhcm5pbmd8fG8uX3Jlc2V0UG9zKCksaSYmby5fZG90c0NvbXBvbmVudC5yZW1vdmVDbGFzcyhvLmJfKCJfbW91c2Utb24iKSkpfX0pfSxfbW92ZTpmdW5jdGlvbihlKXt0aGlzLl90ZXh0Q29tcG9uZW50LnNldFN0eWxlKHtsZWZ0Oi1lKyJweCJ9KSx0aGlzLl9wb3M9ZX0sX2dldEFkdkFyZWE6ZnVuY3Rpb24oKXt2YXIgZSx0LGk9dGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCk7aT8oZT1pLmdldEVsZW1lbnQoKSx0PWkuZ2V0Q29udGVudEVsZW1lbnQoKSk6KGU9dGhpcy5wcm9wcy5hZEVsZW1lbnQsdD10aGlzLnByb3BzLmNvbnRlbnRFbGVtZW50KTt2YXIgbj1lLmNsaWVudFdpZHRoLG89ZS5jbGllbnRIZWlnaHQ7cmV0dXJuIHRoaXMuY29udGVudEVsZW1lbnRXaWR0aD10LmNsaWVudFdpZHRoLG4qb30sX3JlbmRlckRvdHM6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNJbXBvcnRhbnRXYXJuaW5nKCkpcmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX2RvdHMiKSxyZXNvdXJjZUlkOiJkb3RzIn0sIlx1MjAyNiIpfSxfc2V0V2FybmluZ1NpemU6ZnVuY3Rpb24oKXtpZighdGhpcy5wcm9wcy5zbGltV2FybmluZyl7dmFyIGU9dGhpcy5fcm9vdENvbXBvbmVudC5nZXRFbGVtZW50KCkuY2xpZW50SGVpZ2h0LHQ9dGhpcy5fZ2V0QWR2QXJlYSgpLGk9dGhpcy5jb250ZW50RWxlbWVudFdpZHRoO2lmKHRoaXMucHJvcHMud2lkZVdhcm5pbmcpe3ZhciBuPU1hdGgubWF4KGUsTWF0aC5mbG9vciguMSp0L2kpKTtyZXR1cm4gdm9pZCB0aGlzLl90ZXh0Q29tcG9uZW50LnNldFN0eWxlKHtoZWlnaHQ6bisicHgiLHdpZHRoOmkrInB4In0pfXZhciBvPU1hdGguZmxvb3IoLjEqdC9lKTtpZihpPj1vKXRoaXMuX3RleHRDb21wb25lbnQuc2V0U3R5bGUoe3dpZHRoOm8rInB4In0pO2Vsc2V7dmFyIHI9TWF0aC5mbG9vciguMSp0L2kpLGE9dGhpcy5fdGV4dENvbXBvbmVudC5nZXRFbGVtZW50KCkuY2xpZW50SGVpZ2h0O2E8PXI/KHRoaXMuX3Jvb3RDb21wb25lbnQuc2V0U3R5bGUoe2hlaWdodDpyKyJweCJ9KSx0aGlzLl90ZXh0Q29tcG9uZW50LnNldFN0eWxlKHt3aWR0aDppKyJweCJ9KSk6dGhpcy5fcm9vdENvbXBvbmVudC5zZXRTdHlsZSh7aGVpZ2h0OmErInB4In0pfX19LHJlbmRlcldhcm5pbmc6ZnVuY3Rpb24oZSx0LGkpe3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKGkuSFRNTCx7dGV4dDooMCxzLnByZXR0aWZ5KSh0LmFkdi53YXJuaW5nKX0pfSxfcmVuZGVyOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj17Y29sb3I6dC5jb2xvcix3aWR0aDp0aGlzLnByb3BzLndpZHRoLCJtYXgtd2lkdGgiOnQubWF4V2lkdGh9LG89e2NvbG9yOnQuY29sb3IsImJhY2tncm91bmQtY29sb3IiOnQuYmFja2dyb3VuZENvbG9yLGhlaWdodDp0LmluaXRpYWxIZWlnaHQsd2lkdGg6dC5kZXNpcmVkV2lkdGh9O3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fY29udGFpbmVyIikscmVzb3VyY2VJZDoibWFpbiJ9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19zdHlsZSIpLHN0eWxlOm4scmVzb3VyY2VJZDoic3R5bGUifSx0aGlzLmdldENoaWxkcmVuKCksclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKGUoKSx0WyJjbGFzcyJdLHRoaXMubW9kKSxzdHlsZTpvLHJlc291cmNlSWQ6InJvb3QifSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fdGV4dCIpLHJlc291cmNlSWQ6ImNvbnRhaW5lciJ9LHRoaXMucmVuZGVyV2FybmluZyhlLHQsaSkpKSksdGhpcy5fcmVuZGVyRG90cyhlKSl9fSk7Zi53aWxsUmVuZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUud2FybmluZyl9LGUuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0scj1pKDMpLGE9KG49cikmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LHM9aSgxODMpLGw9aSgxMTApLGM9aSgxMjkpLHU9aSgyMiksZD1pKDE0KSxwPShpKDUpLGkoMzMpKSxmPWkoMjI0KSxoPWkoNTgpLGc9aSg5NiksXz1pKDUxKSx5PWkoMjUwKSxtPWkoMTgyKSxiPWkoMTgxKSx2PWkoMjUzKSx3PWkoMjU0KSx4PWkoMTY5KSxrPWkoOTIpLEM9aSgyKSxTPWkoNjAxKSxPPWkoMjUpLEk9KGkoOSksaSgxKSksQT1pKDIwNSksVD1pKDEwNSksRT1pKDE0OCksUj1pKDg3KTt2YXIgTT1pKDEwKSxQPWkoMTA5KSxMPWkoMCksQj1pKDYpLE49YVsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChNLHtuYW1lOiJ5YXAtYmxvY2siLG1vZDoiIixsYXlvdXQ6Qi5MYXlvdXRzLldJREUsdmlzaWJpbGl0eVBvcnRpb246MCxfdmlzaWJpbGl0eUNvbmZpcm1lZDohMSxib2R5V2lkdGg6MCxvbkluaXQ6ZnVuY3Rpb24oKXt0aGlzLnVuaXFJZD10aGlzLnByb3BzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSwoMCxPLnNldE1hcmspKHRoaXMudW5pcUlkLE8uUmVuZGVyTWFya3MuUmVhZHlGb3JSZW5kZXJpbmcpLCgwLEMubG9nUmVuZGVyTGFiZWwpKHRoaXMudW5pcUlkLEMuQmxvY2tSZW5kZXJTdGVwcy5Db21wb25lbnRCbG9ja0luaXQpLHRoaXMuX19iYXNlKCk7dmFyIGU9dGhpcy5wcm9wczt0aGlzLl9yZW5kZXJUb05vZGU9ZS5yZW5kZXJUb05vZGUsdGhpcy5kYXRhU291cmNlPWUuZGF0YVNvdXJjZSx0aGlzLnNldHRpbmdzPWUuc2V0dGluZ3MsdGhpcy5ibG9ja0lkPWUuYmxvY2tJZCx0aGlzLnJlbmRlclBhcmFtcz1lLnJlbmRlclBhcmFtcyx0aGlzLnNldHRpbmdzLmhvcml6b250YWxBbGlnbj10aGlzLnNldHRpbmdzLmhvcml6b250YWxBbGlnbnx8dGhpcy5yZW5kZXJQYXJhbXMuaG9yaXpvbnRhbEFsaWduLHRoaXMuaWQ9dGhpcy5nZXRDc3NDbGFzc05hbWUoKSx0aGlzLmNvbnRleHQ9e2Jsb2NrU3RhdGU6bmV3IGsuQmxvY2tTdGF0ZSxzZXR0aW5nczp0aGlzLnNldHRpbmdzLGRhdGFTb3VyY2U6dGhpcy5kYXRhU291cmNlfSx0aGlzLl9jb25maXJtQXRPbmNlPWUucmVuZGVyUGFyYW1zLmNvbmZpcm1BdE9uY2UsdGhpcy5pc0RvY3VtZW50SGlkZGVuPSgwLEUuaXNIaWRkZW4pKCksdGhpcy5pbml0QmxvY2soKX0saW5pdEJsb2NrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhU291cmNlLmdldEZyZWVBZHMoKTt0aGlzLnJhd0Fkdkxpc3Q9dGhpcy5maWx0ZXJSYXdBZHMoZSksdGhpcy5pbml0TGF5b3V0KCksdGhpcy5kYXRhU291cmNlLnNldFRlc3R0YWdQcm9wcyh0aGlzLmdldFRlc3R0YWdQcm9wcygpKSx0aGlzLmFkdkxpc3Q9dGhpcy5jcmVhdGVBZHZMaXN0KCl9LGZpbHRlclJhd0FkczpmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgwLHRoaXMuc2V0dGluZ3MubGltaXQpfSxpbml0TGF5b3V0OmZ1bmN0aW9uKCl7fSxnZXRUZXN0dGFnUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm57bGF5b3V0OnRoaXMubGF5b3V0fX0sY3JlYXRlQWR2TGlzdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5yYXdBZHZMaXN0LG49KDAsZC5tYXApKGksZnVuY3Rpb24oaSxuKXtyZXR1cm4gdC5wcmVwYXJlUmF3QWR2KGksZXx8e30sbisxKX0pO3JldHVybigwLHUuZmlsdGVyKShuLGZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUpfSl9LHByZXBhcmVSYXdBZHY6ZnVuY3Rpb24oZSx0LGkpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UucHJlcGFyZUFkKGUsdCxpKX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKSx0aGlzLnVuTXJhaWRSZWFkeSYmdGhpcy51bk1yYWlkUmVhZHkoKSxMLmVhY2godGhpcy5hZHZMaXN0LGZ1bmN0aW9uKGUpe3RoaXMuZGF0YVNvdXJjZS5yZWxlYXNlQWQoZS5hZElkKX0sdGhpcyl9LG9uTW91bnQ6ZnVuY3Rpb24oKXt0aGlzLl9fYmFzZSgpLCgwLE8uc2V0TWFyaykodGhpcy51bmlxSWQsTy5SZW5kZXJNYXJrcy5Nb3VudGVkKSwoMCxDLmxvZ1JlbmRlckxhYmVsKSh0aGlzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSxDLkJsb2NrUmVuZGVyU3RlcHMuQ29tcG9uZW50QmxvY2tNb3VudGVkKTt2YXIgZT10aGlzLmdldFJlc291cmNlQnlJZCgiZGV0ZWN0b3IiKTtlJiZlLnN0YXJ0KCl9LG9uRG9tUmVhZHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuaXNSZWFkeXx8KDAsTy5zZXRNYXJrKSh0aGlzLnVuaXFJZCxPLlJlbmRlck1hcmtzLkRpc3BsYXllZCksKDAsTy5zZXRNYXJrKSh0aGlzLnVuaXFJZCxPLlJlbmRlck1hcmtzLlBvc3RSZW5kZXJpbmcpLHRoaXMuYm9keVdpZHRoPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsdGhpcy5pc0luVmlld3BvcnRXaGVuRGlzcGxheWVkPUwuZG9tLmlzSW5WaWV3cG9ydCh0aGlzLl9yZW5kZXJUb05vZGUpLHRoaXMuaXNSZWFkeT0hMCx0aGlzLmNvbnRleHQuYmxvY2tTdGF0ZS5zZXRTdGF0ZSh7c3RhdHVzOmsuQmxvY2tTdGF0dXMuRGlzcGxheWVkfSksdGhpcy5vbkRpc3BsYXllZCgpLHRoaXMubmVlZFVwZGF0ZUFmdGVyUmVtb3ZlT3ZlcmZsb3coKT90aGlzLnVwZGF0ZSgpOmguTXJhaWRIZWxwZXJzLmlzQXZhaWxhYmxlKCkmJiFoLk1yYWlkSGVscGVycy5pc1JlYWR5KCk/dGhpcy51bk1yYWlkUmVhZHk9KDAsZi5vbikoInJlYWR5IixmdW5jdGlvbigpe3JldHVybiBlLm9uUmVhZHkoKX0pOnRoaXMub25SZWFkeSgpfSxvbkRpc3BsYXllZDpmdW5jdGlvbigpe30sbmVlZFVwZGF0ZUFmdGVyUmVtb3ZlT3ZlcmZsb3c6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sb25SZWFkeTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YVNvdXJjZTt0aGlzLmNvbnRleHQuYmxvY2tTdGF0ZS5zZXRTdGF0ZSh7c3RhdHVzOmsuQmxvY2tTdGF0dXMuUmVhZHl9KTt2YXIgdD0zPT09ZS5jbGlja0RlbGF5V2lmeUV4cCgpPzQwMDp2b2lkIDA7KDAsbS5wcmV2ZW50TWlzc0NsaWNrcykodGhpcy5fcmVuZGVyVG9Ob2RlLHQpLHRoaXMuaW5pdFZpc2liaWxpdHlDaGVja2VyKHRoaXMucHJvcHMucmVuZGVyUGFyYW1zLmNvbmZpcm1CeUhhbmRsZXIpLCgwLE8uc2V0TWFyaykodGhpcy51bmlxSWQsTy5SZW5kZXJNYXJrcy5SZWFkeSksKDAsUy5hc3luY0NvbGxlY3RNYXJrcykodGhpcy51bmlxSWQse2lkOnRoaXMuaWQscGFnZUlkOmUuZ2V0UGFnZUlkKCksc2xvdEluZGV4OmUuZ2V0U2xvdEluZGV4KCksaXNSZWZyZXNoZWQ6ZS5pc1JlZnJlc2hlZCgpLGlzRG9jdW1lbnRIaWRkZW46dGhpcy5pc0RvY3VtZW50SGlkZGVuLGlzSW5WaWV3cG9ydDp0aGlzLmlzSW5WaWV3cG9ydFdoZW5EaXNwbGF5ZWQsZm9ybWF0OnRoaXMuX2dldEZvcm1hdE5hbWUoKSxsaW1pdDp0aGlzLmdldFVzZWRBZHZzKCkubGVuZ3RofSl9LG9uVW5tb3VudDpmdW5jdGlvbigpe3RoaXMuX3Zpc2liaWxpdHlDb25maXJtZXImJnRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXIuc3RvcCgpLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0YiYmdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLnN0b3AoKSx0aGlzLl9zdHlsZUVsZW1lbnQmJihMLmRvbS5yZW1vdmUodGhpcy5fc3R5bGVFbGVtZW50KSx0aGlzLl9zdHlsZUVsZW1lbnQ9bnVsbCl9LF9nZXRGb3JtYXROYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuZm9ybWF0Lm5hbWV9LGdldENzc0NsYXNzTmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMucGFnZU51bWJlcjtyZXR1cm4ieWFwLSIrdGhpcy5ibG9ja0lkKyhlPyItIitlOiIiKX0sZ2V0VXNlZEFkdnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZHZMaXN0fSxzaG91bGRSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZHZMaXN0Lmxlbmd0aH0sYmVmb3JlUmVuZGVyOmZ1bmN0aW9uKCl7KDAsTy5zZXRNYXJrKSh0aGlzLnVuaXFJZCxPLlJlbmRlck1hcmtzLlN0YXJ0RG9tUmVuZGVyaW5nKSwoMCxDLmxvZ1JlbmRlckxhYmVsKSh0aGlzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSxDLkJsb2NrUmVuZGVyU3RlcHMuQ29tcG9uZW50QmxvY2tCZWZvcmVSZW5kZXIpLFAuY2xlYXIoKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXsoMCxDLmxvZ1JlbmRlckxhYmVsKSh0aGlzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSxDLkJsb2NrUmVuZGVyU3RlcHMuQ29tcG9uZW50QmxvY2tSZW5kZXJDb21wbGV0ZSksdGhpcy5wdXNoQ3NzKCk7dmFyIGU9TC5leHRlbmQodGhpcy5nZXRDU1NQcm9wcygpLHt1dGlsczpMLENvbnN0OkJ9KTt0aGlzLl9zdHlsZUVsZW1lbnQ9UC5pbnNlcnRDU1MoZSx0aGlzLnByb3BzLm5vbmNlLHRoaXMuX3JlbmRlclRvTm9kZS5wYXJlbnROb2RlKX0scHVzaENzczpmdW5jdGlvbigpe30sZ2V0Q1NTUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm57aWQ6dGhpcy5pZCxibG9jazp0aGlzLHNldHRpbmdzOnRoaXMuc2V0dGluZ3N9fSxpbml0VmlzaWJpbGl0eUNoZWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsXy5nZXRWaXNpYmlsaXR5Q29udGFpbmVyKSh0aGlzLmdldE1haW5Db250KCkpLGk9dGhpcy5nZXREYXRhU291cmNlKCksbj0oMCxnLmlzUnRiSW5EaXJlY3RFeHBlcmltZW50KSh7cGFnZUlkOmkuZ2V0UGFnZUlkKCkscHJvZHVjdDppLmdldFByb2R1Y3QoKSxoYXNTZWFyY2hUZXh0OmkuaGFzU2VhcmNoVGV4dCgpfSk7IWkuaXNPbGREaXJlY3QoKSYmbiYmKHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0Yj0oMCxzLmNyZWF0ZUJsb2NrVmlzaWJpbGl0eUNvbmZpcm1lcikoe2VsZW1lbnQ6dCxhdXRvc3RhcnQ6IWUsZGF0YVNvdXJjZTp0aGlzLmRhdGFTb3VyY2Usb25WaXNpYmxlOigwLEkucHJvdGVjdCkoIkFkdkJsb2NrOiBvbkRpcmVjdEluUnRiQ29uZmlybWVkIix0aGlzLmNvbmZpcm1WaXNpYmlsaXR5SW5SdGIsdGhpcyl9KSx0aGlzLl9jb25maXJtQXRPbmNlJiYhZSYmKHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITAsdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLmNvbmZpcm0oKSkpLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXI9bmV3IFIuVmlzaWJpbGl0eUNvbmZpcm1lcih7ZWxlbWVudDp0LGF1dG9zdGFydDohZSxwb3J0aW9uOjAsY29uZmlybWF0aW9uczpbe2RlbGF5OnRoaXMuZGF0YVNvdXJjZS5nZXRWaXNpYmlsaXR5VGltZSgpLG9uQ29uZmlybTooMCxJLnByb3RlY3QpKCJBZHZCbG9jazogb25Db25maXJtZWQiLHRoaXMuY29uZmlybUJhbm5lclZpc2liaWxpdHksdGhpcyl9XX0pLHRoaXMuX2NvbmZpcm1BdE9uY2UmJiFlJiYodGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMCx0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVyLmNvbmZpcm0oKSl9LGNvbmZpcm1WaXNpYmlsaXR5OmZ1bmN0aW9uKCl7dGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZHx8KHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITAsdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiJiZ0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVySW5SdGIuY29uZmlybSgpLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXImJnRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXIuY29uZmlybSgpKX0sY29uZmlybVZpc2liaWxpdHlJblJ0YjpmdW5jdGlvbihlKXt2YXIgdD0oMCxfLmdldFZpc2liaWxpdHlDb250YWluZXIpKHRoaXMuZ2V0TWFpbkNvbnQoKSk7dGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZD0hMCx0aGlzLmRhdGFTb3VyY2UuY29uZmlybVZpc2liaWxpdHlJblJ0Yih7cmVuZGVyU2l6ZTp0aGlzLmdldEJsb2NrU2l6ZSgpLGV4dFBhcmFtczp7Y29uZmlybVRpbWU6ZSxjb25maXJtUmF0aW86KDAsVC5nZXRWaXNpYmlsaXR5UmF0aW8pKHQpfX0pfSxjb25maXJtQmFubmVyVmlzaWJpbGl0eTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFVzZWRBZHZzKCksaT0oMCxfLmdldFZpc2liaWxpdHlDb250YWluZXIpKHRoaXMuZ2V0TWFpbkNvbnQoKSk7dGhpcy5kYXRhU291cmNlLm9uQ29uZmlybVZpc2liaWxpdHkodCx7cmVuZGVyU2l6ZTp0aGlzLmdldEJsb2NrU2l6ZSgpLGV4dFBhcmFtczp7Y29uZmlybVRpbWU6ZSxjb25maXJtUmF0aW86KDAsVC5nZXRWaXNpYmlsaXR5UmF0aW8pKGkpfX0pLHRoaXMuX3Zpc2liaWxpdHlDb25maXJtZWQ9ITAsdGhpcy5kYXRhU291cmNlLnNldFZpc2liaWxpdHlDb25maXJtYXRpb25UaW1lc3RhbXAoRGF0ZS5ub3coKSl9LGNvbmZpcm1WaXNpYmlsaXR5QnlIb3ZlcjpmdW5jdGlvbihlKXt2YXIgdD1bZV0saT0oMCxfLmdldFZpc2liaWxpdHlDb250YWluZXIpKHRoaXMuZ2V0TWFpbkNvbnQoKSk7dGhpcy5kYXRhU291cmNlLnNlbmRWaXNpYmlsaXR5Q29uZmlybWF0aW9uKHQse3Rlc3R0YWdQcm9wczp7aXNIb3ZlcjohMH0scmVuZGVyU2l6ZTp0aGlzLmdldEJsb2NrU2l6ZSgpLGV4dFBhcmFtczp7Y29uZmlybVRpbWU6LTEsY29uZmlybVJhdGlvOigwLFQuZ2V0VmlzaWJpbGl0eVJhdGlvKShpKX19KSx0aGlzLl92aXNpYmlsaXR5Q29uZmlybWVkPSEwfSxpc1Zpc2liaWxpdHlDb25maXJtZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lZH0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlc291cmNlQnlJZCgibGF5b3V0IikuZ2V0Um9vdCgpfSxnZXRCbG9ja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxjLmdldEVsZW1lbnRSZWN0U2l6ZSkodGhpcy5fcmVuZGVyVG9Ob2RlKX0sZ2V0TWFpbkNvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRNYWluQ29udGFpbmVyKCkuZ2V0RWxlbWVudCgpfSxnZXRNYWluQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJsYXlvdXQiKS5nZXRMYXlvdXRDb250YWluZXIoKX0saGFzQm9yZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5zZXR0aW5ncy5ib3JkZXJUeXBlO3JldHVybiBlPT09Qi5Cb3JkZXJUeXBlcy5CTE9DS3x8ZT09PUIuQm9yZGVyVHlwZXMuQ09MTEFQU0V9LGdldEJvZHk6ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBudWxsfSxpc0luVmlld3BvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5kb20uaXNJblZpZXdwb3J0KHRoaXMuZ2V0RWxlbWVudCgpLEIuUkVGUkVTSF9WSUVXUE9SVF9WSVNJQkxFX1BBUlQpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Zpc2liaWxpdHlDb25maXJtZXJJblJ0YiYmdGhpcy5fdmlzaWJpbGl0eUNvbmZpcm1lckluUnRiLmdldElzVmlzaWJsZSgpfSxnZXREYXRhU291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZX0sb25SZWNlaXZlZEZlZWRiYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX19iYXNlKCksdGhpcy5nZXREYXRhU291cmNlKCkuYWJ1c2VBZChlKX0sc2xpZGVVcDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJvb3QoKS5nZXRFbGVtZW50KCksaT10aGlzLmdldE1haW5Db250YWluZXIoKS5nZXRFbGVtZW50KCksbj0oMCxwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkoaSksbz1uLndpZHRoLHI9bi5oZWlnaHQ7dGhpcy5nZXRNYWluQ29udGFpbmVyKCkuc2V0U3R5bGUoe3dpZHRoOm8saGVpZ2h0OnJ9KSwoMCxsLnNsaWRlVXApKHQsZSl9LHJlbmRlckxvZ286ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoZS5Mb2dvLHtjbGFzczp0aGlzLmJfKCJfX2xvZ28iKSx0aXRsZTp0aGlzLmRhdGFTb3VyY2UuZ2V0VGl0bGUoKX0pfSxfcmVuZGVyOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzOygwLEMubG9nUmVuZGVyTGFiZWwpKHRoaXMuZGF0YVNvdXJjZS5nZXRVbmlxdWVJZCgpLEMuQmxvY2tSZW5kZXJTdGVwcy5Db21wb25lbnRCbG9ja1JlYWR5VG9SZW5kZXIpO3ZhciByPXRoaXMuX2dldEZvcm1hdE5hbWUoKSxzPXRoaXMuZ2V0RGF0YVNvdXJjZSgpLmdldExhbmd1YWdlKCksbD0oKDAseS5nZXRMYW5nQ29kZSkocyksdGhpcy5zZXR0aW5ncyksYz10aGlzLmRhdGFTb3VyY2UuZ2V0SG9uZXlwb3QoKSE9PUEuSG9uZXlwb3QuTk9ORT97dmlzaWJpbGl0eToiaGlkZGVuIixvcGFjaXR5OjB9Ont2aXNpYmlsaXR5OiJ2aXNpYmxlIixvcGFjaXR5OjF9LHU9dGhpcy5kYXRhU291cmNlLmdldEhvbmV5cG90KCk9PT1BLkhvbmV5cG90Lk9ORV9QSVhFTD97aG9uZXlIZWlnaHQ6IjFweCIsaG9uZXlXaWR0aDoiMXB4In06e2hvbmV5SGVpZ2h0OiJhdXRvIixob25leVdpZHRoOiJhdXRvIn0sZD1vKHtyZXNvdXJjZUlkOiJsYXlvdXQiLGlkOnRoaXMuaWQsY2xhc3M6ZShlKCksIl8iK3IsIl9ib3JkZXItdHlwZV8iK2wuYm9yZGVyVHlwZSx0aGlzLm1vZCl9LGMsdSk7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoaS5MYXlvdXQsZCxhWyJkZWZhdWx0Il0uY3JlYXRlKHguQmxvY2tDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmNvbnRleHR9LHRoaXMuZ2V0Qm9keShlLHQsaSksdGhpcy5yZW5kZXJMb2dvKGkpKSxhWyJkZWZhdWx0Il0uY3JlYXRlKHcuQ29tcG9zaXRlRGV0ZWN0b3Ise3Jlc291cmNlSWQ6ImRldGVjdG9yIixzdGFydE9uTW91bnQ6ITEsb25SZWFkeTpmdW5jdGlvbigpe3JldHVybiBuLm9uRG9tUmVhZHkoKX19LHRoaXMuaXNSZWFkeT9udWxsOmFbImRlZmF1bHQiXS5jcmVhdGUodi5EaXNwbGF5RGV0ZWN0b3Ise25vbmNlOnRoaXMucHJvcHMubm9uY2V9KSkpfSxvbk9wZW5MaW5rOmZ1bmN0aW9uKGUpeygwLGIub3BlbikoZSl9LHNldE1vZDpmdW5jdGlvbihlKXt0aGlzLmdldE1haW5Db250YWluZXIoKS5hZGRDbGFzcyh0aGlzLmJfKGUpKX0sZGVsTW9kOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0TWFpbkNvbnRhaW5lcigpLnJlbW92ZUNsYXNzKHRoaXMuYl8oZSkpfX0se0xheW91dDppKDYwMiksTG9nbzppKDM4MCl9KTtlLmV4cG9ydHM9Tn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPWkoMykscj0obj1vKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07dmFyIGE9aSgxMCkscz1pKDUwMCksbD1yWyJkZWZhdWx0Il0uY3JlYXRlQ29tcG9uZW50KGEse25hbWU6InlhcC1hcHAtaWNvbiIsYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMocyl9LGdldFBpY3R1cmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmltYWdlLHQ9dGhpcy5wcm9wcy5zaXplO3JldHVybiBlLmdldEZpdHRpbmcodC53aWR0aCx0LmhlaWdodCx0LndMb3NzKX0sZ2V0TW9kVGhlbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnRoZW1lO3JldHVybiBlJiYiX3RoZW1lXyIrZX0sX3JlbmRlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0UGljdHVyZSgpLG49aS53aWR0aCxvPWkuaGVpZ2h0O3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJpbWciLHtjbGFzczplKHRbImNsYXNzIl0sZSgpLHRoaXMubW9kLHRoaXMuZ2V0TW9kVGhlbWUoKSksYWx0OiIiLHNyYzppLnNyYyxzdHlsZTp7d2lkdGg6bixoZWlnaHQ6bywibWF4LXdpZHRoIjpufX0pfX0pO2UuZXhwb3J0cz1sfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LG89YyhpKDMpKSxyPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdFsiZGVmYXVsdCJdPWUsdH0oaSgzNikpLGE9YyhpKDUyNSkpLHM9aSg4NCksbD1pKDM1KTtmdW5jdGlvbiBjKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgdT1pKDEwKSxkPWkoMCkscD1pKDUyOCksZj1vWyJkZWZhdWx0Il0uY3JlYXRlQ29tcG9uZW50KHUse25hbWU6InlhcC1waWN0dXJlIixzaG91bGRSZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnByb3BzLnBpY3R1cmUpfSxfcmVuZGVyOmZ1bmN0aW9uKGUsdCxpKXt2YXIgYT10aGlzLnByb3BzLHM9YS5waWN0dXJlLGM9YS5maXRTaXplLHU9cy53aWR0aCxwPXMuaGVpZ2h0LGY9Qm9vbGVhbih0LmhyZWYpLGg9e2NsYXNzOmUoIl9fY29udGFpbmVyIixmPyJfX2xpbmsiOiIiKSxzdHlsZTpjP3t9Ont3aWR0aDp1LGhlaWdodDpwLCJtYXJnaW4tbGVmdCI6LXUvMn19LGc9b1siZGVmYXVsdCJdLmNyZWF0ZSgiaW1nIix7cmVzb3VyY2VJZDoiaW1hZ2UiLGNsYXNzOmUoIl9faW1nIiksYWx0OiIiLHNyYzpzLnNyYyxzdHlsZTp0aGlzLl9nZXRJbWFnZVN0eWxlKCl9KTtyZXR1cm4gb1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKHRbImNsYXNzIl0sZSgpLHRoaXMuZnVsbFdpZHRoKCkmJmUoIl9mdWxsLXdpZHRoIiksZSgiX3RvdWNoXyIrci5zdXBwb3J0LnRvdWNoKSksc3R5bGU6ZC5leHRlbmQoe30sdC5zdHlsZSx0aGlzLl9jYWxjQ29udGFpbmVyU3R5bGVzKHMpKX0sZj9vWyJkZWZhdWx0Il0uY3JlYXRlKGwuTmV3TGluayxuKHtocmVmOnQuaHJlZn0saCksZyk6b1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLGgsZykpfSxfZ2V0SW1hZ2VTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBpY3R1cmUsaT10LndpZHRoLG49dC5oZWlnaHQsbz1lLmZpdFNpemUscj1lLnNpemU7cmV0dXJuIG8/KDAsYVsiZGVmYXVsdCJdKSh7dmlld3BvcnRXaWR0aDpyLndpZHRoLHZpZXdwb3J0SGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOmksaGVpZ2h0Om4sc3RyZXRjaDohMH0pLmJveDp7d2lkdGg6aSxoZWlnaHQ6biwibWF4LXdpZHRoIjppfX0sX2NhbGNDb250YWluZXJTdHlsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxpPXQuc2l6ZSxuPXQuZml0U2l6ZTtyZXR1cm57d2lkdGg6bj9pLndpZHRoOmkud2lkdGg9PT0xLzA/IjEwMCUiOk1hdGgubWluKGkud2lkdGgsZS53aWR0aCksaGVpZ2h0Om4/aS5oZWlnaHQ6TWF0aC5taW4oaS5oZWlnaHQsZS5oZWlnaHQpfX0sZnVsbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMucGljdHVyZS53aWR0aD49dGhpcy5wcm9wcy5zaXplLndpZHRofSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyhwKSx0aGlzLl9pbWFnZT10aGlzLmdldFJlc291cmNlQnlJZCgiaW1hZ2UiKSwoMCxzLnNlbmRSZXNvdXJjZUluZm8pKCl9LHNjcm9sbFRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1hZ2Uuc2V0U3R5bGUoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrZSsicHgsICIrdCsicHgpIn0pfX0pO2UuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSgzKSxyPShuPW8pJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxhPWkoNjA3KSxzPWkoMSksbD1pKDE3KSxjPWkoNzQpLHU9aSgxODQpO3ZhciBkPWkoMTApLHA9aSg0MDMpLGY9aSgyMzUpLGg9aSg2MTApLGc9clsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChbZCxwLGZdLHtuYW1lOiJ5YXAtYWR2IixIT1ZFUl9DT05GSVJNX0RFTEFZOjMwMCxvbkluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9fYmFzZSgpO3ZhciBlPXRoaXMucHJvcHMsdD10aGlzLmdldERhdGFTb3VyY2UoKTt0LmNhcHR1cmVBZChlLmFkdi5hZElkKSx0aGlzLmluaXRBZHR1bmUoKDAsdS5zaG91bGRTaG93QWR0dW5lKSh0KT97YWJ1c2VVcmw6ZS5hZHYuYWJ1c2VVcmwsbGFuZ3VhZ2U6dC5nZXRMYW5ndWFnZSgpfTp7fSksdGhpcy5jb250ZXh0PXthZHY6ZS5hZHZ9fSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJzKCksdGhpcy5nZXREYXRhU291cmNlKCkucmVsZWFzZUFkKHRoaXMucHJvcHMuYWR2LmFkSWQpfSxyZW1vdmVDbGlja0xpc3RlbmVyczpmdW5jdGlvbigpe30sZ2V0QWR2QmxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCl9LGdldERhdGFTb3VyY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBZHZCbG9jaygpLmdldERhdGFTb3VyY2UoKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hDc3MoKSx0aGlzLmluaXRIb3ZlckNoZWNrZXIoKSx0aGlzLmluaXRDbGlja0xvZ2dlcigpLHRoaXMucmVuZGVyVGltZXN0YW1wPURhdGUubm93KCksdGhpcy5fY2xpY2tDb25maXJtYXRpb25Db21wb25lbnQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImNsaWNrLWNvbmZpcm1hdGlvbiIpLHRoaXMuX19iYXNlKCl9LGdldENvbnRlbnRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJjb250ZW50IikuZ2V0RWxlbWVudCgpfSxvbkNsaWNrTGluazpmdW5jdGlvbihlKXt0aGlzLl9wcmV2ZW50Q2xpY2tJZk5lY2Vzc2FyeShlKX0sX3ByZXZlbnRDbGlja0lmTmVjZXNzYXJ5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzTmVlZFRvUHJldmVudENsaWNrKCk/dGhpcy5fcHJldmVudENsaWNrT3JPcGVuQ29uZmlybWF0aW9uKGUpOnRoaXMuX3RyYWNrQ2xpY2soKX0sX2lzTmVlZFRvUHJldmVudENsaWNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXREYXRhU291cmNlKCksdD0oZS5nZXRDbGlja0NvbmZpcm1hdGlvbigpfHx7fSkudGltZW91dCxpPWUuZ2V0VmlzaWJpbGl0eUNvbmZpcm1hdGlvblRpbWVzdGFtcCgpO3JldHVybiB0JiZpJiZfKGksdCl9LF9wcmV2ZW50Q2xpY2tPck9wZW5Db25maXJtYXRpb246ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuZ2V0RGF0YVNvdXJjZSgpLmdldENsaWNrQ29uZmlybWF0aW9uKCl8fHt9KS5uZWVkQ29uZmlybWF0aW9uP3RoaXMuX29wZW5DbGlja0NvbmZpcm1hdGlvbihlKTp0aGlzLl9wcmV2ZW50Q2xpY2soZSl9LF90cmFja0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5nZXREYXRhU291cmNlKCkudHJhY2tDbGljayh0aGlzLnByb3BzLmFkdil9LF9vcGVuQ2xpY2tDb25maXJtYXRpb246ZnVuY3Rpb24oZSl7dGhpcy5fY2xpY2tDb25maXJtYXRpb25Db21wb25lbnQmJnRoaXMuX2NsaWNrQ29uZmlybWF0aW9uQ29tcG9uZW50Lm9wZW4oZSl9LF9wcmV2ZW50Q2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5nZXREYXRhU291cmNlKCkucHJldmVudENsaWNrT25jZShlKX0scmVuZGVyQ2xpY2tDb25maXJtYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZShhLkNsaWNrQ29uZmlybWF0aW9uLHtyZXNvdXJjZUlkOiJjbGljay1jb25maXJtYXRpb24iLGNsaWNrQ2FsbGJhY2s6dGhpcy5fdHJhY2tDbGljay5iaW5kKHRoaXMpfSl9LHB1c2hDc3M6ZnVuY3Rpb24oKXt0aGlzLl9fYmFzZSgpLHRoaXMucHVzaFN0eWxlcyhoKX0saW5pdENsaWNrTG9nZ2VyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5hZHYuaXNGdWxsc2NyZWVuLHQ9RGF0ZS5ub3coKSxpPXRoaXMucm9vdENvbXBvbmVudC5nZXRFbGVtZW50KCk7aWYoaSYmIWUpe3ZhciBuPSgwLGwub24pKGksImNsaWNrIixmdW5jdGlvbihlKXt2YXIgaT1EYXRlLm5vdygpLXQsbj0oMCxjLmNyZWF0ZUNsaWNrSW5mbykoZSwiZGlyZWN0IixpKTsoMCxjLnNlbmRDbGlja0luZm9Mb2cpKG4pfSx0aGlzLHtjYXB0dXJlOiEwfSk7dGhpcy5yZW1vdmVDbGlja0xpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybigwLGwudW4pKG4pfX19LGluaXRIb3ZlckNoZWNrZXI6ZnVuY3Rpb24oKXt2YXIgZT12b2lkIDA7dGhpcy5yb290Q29tcG9uZW50LmJpbmQoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtlfHwoZT1zLnByb3RlY3Quc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX2NvbmZpcm1lZEhvdmVyfHwodGhpcy5fY29uZmlybWVkSG92ZXI9ITAsdGhpcy5jb25maXJtSG92ZXIoKSl9LHRoaXMuSE9WRVJfQ09ORklSTV9ERUxBWSx0aGlzKSl9LHRoaXMpLHRoaXMucm9vdENvbXBvbmVudC5iaW5kKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChlKSxlPW51bGx9LHRoaXMpfSxjb25maXJtSG92ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEFkdkJsb2NrKCksdD10aGlzLnByb3BzLmFkdjtlLmNvbmZpcm1WaXNpYmlsaXR5QnlIb3Zlcih0KX0sZ2V0UGljdHVyZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuYWR2LmltYWdlO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PXRoaXMuZ2V0SW1hZ2VTaXplKCk7cmV0dXJuIGUuZ2V0Rml0dGluZyh0LndpZHRoLHQuaGVpZ2h0LHQud0xvc3MpfSxnZXRJbWFnZVNpemU6ZnVuY3Rpb24oKXtyZXR1cm57d2lkdGg6MTIwLGhlaWdodDo5MH19LG9uUmVjZWl2ZWRGZWVkYmFjazpmdW5jdGlvbigpe3RoaXMuX19iYXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnJvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy5iXygiX2FidXNlZF90cnVlIikpfX0se30pLF89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRGF0ZS5ub3coKS1lPHR9O2UuZXhwb3J0cz1nfSwsLGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1pKDMpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGE9aSg3Nyk7dmFyIHM9aSgxMCksbD1pKDMwMSkuZ2V0RWxlbWVudElubmVyU2l6ZSxjPWkoMzgpLHU9clsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChzLHtuYW1lOiJlbGFzdGljLXdpZGUtaW1nIixnZXRJbWFnZVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5pbWFnZVNpemV9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKSx0aGlzLl9waWN0dXJlQ29tcG9uZW50PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJwaWN0dXJlIiksdGhpcy5fcGljdHVyZUNvbnRhaW5lckNvbXBvbmVudD10aGlzLmdldFJlc291cmNlQnlJZCgicGljdHVyZS1jb250YWluZXIiKSx0aGlzLl9wb3NYPTAsdGhpcy5fcG9zWT0wfSxvbk1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKSx0aGlzLl9waWN0dXJlQ29tcG9uZW50JiZ0aGlzLnByb3BzLmVuYWJsZUFuaW1hdGlvbiYmKHRoaXMuX3BpY3R1cmVDb250YWluZXJDb21wb25lbnQuYmluZCgibW91c2VlbnRlciIsdGhpcy5vbk1vdXNlRW50ZXIsdGhpcyksdGhpcy5fcGljdHVyZUNvbnRhaW5lckNvbXBvbmVudC5iaW5kKCJtb3VzZW91dCIsdGhpcy5vbk1vdXNlT3V0LHRoaXMpLHRoaXMuX3BpY3R1cmVDb250YWluZXJDb21wb25lbnQuYmluZCgibW91c2Vtb3ZlIix0aGlzLm9uTW92ZSx0aGlzKSl9LG9uTW91c2VFbnRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UGljdHVyZVNpemUoKSx0PWwodGhpcy5fcGljdHVyZUNvbnRhaW5lckNvbXBvbmVudC5nZXRFbGVtZW50KCkpO3RoaXMuX3hEaWZmPWUud2lkdGgtdC53aWR0aCx0aGlzLl95RGlmZj1lLmhlaWdodC10LmhlaWdodCx0aGlzLl94UmF0aW89TWF0aC5tYXgodGhpcy5feERpZmYvdC53aWR0aCwwKSx0aGlzLl95UmF0aW89TWF0aC5tYXgodGhpcy5feURpZmYvdC5oZWlnaHQsMCksdGhpcy5feENlbnRlck9mZnNldD1NYXRoLm1heCh0aGlzLl94RGlmZi8yLDApLHRoaXMuX3lDZW50ZXJPZmZzZXQ9TWF0aC5tYXgodGhpcy5feURpZmYvMiwwKX0sZ2V0UGljdHVyZVNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmZpdENvbnRhaW5lcix0PShjLnF1ZXJ5U2VsZWN0b3IoImltZyIsdGhpcy5fcGljdHVyZUNvbXBvbmVudC5nZXRFbGVtZW50KCkpfHxbXSlbMF07aWYoZSYmdClyZXR1cm4gbCh0KTt2YXIgaT10aGlzLmdldFBpY3R1cmUoKTtyZXR1cm57d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fSxnZXRQaWN0dXJlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5hZHYuaW1hZ2U7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5nZXRJbWFnZVNpemUoKTtyZXR1cm4gZS5nZXRGaXR0aW5nKHQud2lkdGgsdC5oZWlnaHQsdC53TG9zcyl9LG9uTW91c2VPdXQ6ZnVuY3Rpb24oKXsoMCxhLmNhbmNlbEFuaW1hdGlvbkZyYW1lKSh0aGlzLl9yYWZJZCksdGhpcy5zY3JvbGxUbygwLDApfSxvbk1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLnRhcmdldCxuPSh2b2lkIDA9PT1pP3t9OmkpLm93bmVyRG9jdW1lbnR8fHt9LG89bi5kb2N1bWVudEVsZW1lbnQscj1uLmJvZHksYT10aGlzLl9waWN0dXJlQ29udGFpbmVyQ29tcG9uZW50LmdldEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPW8uc2Nyb2xsTGVmdHx8ci5zY3JvbGxMZWZ0fHwwLGw9by5zY3JvbGxUb3B8fHIuc2Nyb2xsVG9wfHwwLGM9YS5yaWdodC1hLmxlZnQsdT1hLmJvdHRvbS1hLnRvcCxkPWUucGFnZVgtYS5sZWZ0LXMscD1lLnBhZ2VZLWEudG9wLWw7cD1NYXRoLm1heChNYXRoLm1pbihwLGMpLDApO3ZhciBmPShkPU1hdGgubWF4KE1hdGgubWluKGQsdSksMCkpKnRoaXMuX3hSYXRpbyxoPXAqdGhpcy5feVJhdGlvO3QmJihmPXRoaXMuX3hEaWZmLWYsaD10aGlzLl95RGlmZi1oKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oZix0aGlzLl94RGlmZikpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihoLHRoaXMuX3lEaWZmKSksdGhpcy5zY3JvbGxUbyh0aGlzLl94Q2VudGVyT2Zmc2V0LWYsdGhpcy5feUNlbnRlck9mZnNldC1oKX0sc2Nyb2xsVG86ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzOygwLGEuY2FuY2VsQW5pbWF0aW9uRnJhbWUpKHRoaXMuX3JhZklkKTshZnVuY3Rpb24gbigpe3ZhciBvPWUtaS5fcG9zWCxyPXQtaS5fcG9zWTtNYXRoLnNxcnQobypvK3Iqcik+MSYmKGkuX3Bvc1grPS4wNTcqbyxpLl9wb3NZKz0uMDU3KnIsaS5fcGljdHVyZUNvbXBvbmVudC5zY3JvbGxUbyhpLl9wb3NYLGkuX3Bvc1kpLGkuX3JhZklkPSgwLGEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKShuKSl9KCl9LF9yZW5kZXJQaWN0dXJlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10LmFkdixvPSh0LnBhbGV0dGUsdC5maXRDb250YWluZXIpLGE9dC5kaXNhYmxlVmVydGljYWxTcGFjaW5nO3JldHVybiBuLmltYWdlP3JbImRlZmF1bHQiXS5jcmVhdGUoaS5QaWN0dXJlQmcse3Jlc291cmNlSWQ6InBpY3R1cmUiLGNsYXNzOmUoIl9fcGljdHVyZSIpLGZpdENvbnRhaW5lcjpvLGhyZWY6bi5jbGlja0ltYWdlVXJsLHBpY3R1cmU6dGhpcy5nZXRQaWN0dXJlKCksZGlzYWJsZVZlcnRpY2FsU3BhY2luZzphLHNpemU6dGhpcy5nZXRJbWFnZVNpemUoKX0pOnJbImRlZmF1bHQiXS5jcmVhdGUoaS5QaWN0dXJlU3R1Yix7Y2xhc3M6ZSgiX19waWN0dXJlLXN0dWIiKSxhZHY6bixmaXRDb250YWluZXI6byxzaXplOnRoaXMuZ2V0SW1hZ2VTaXplKCl9KX0sX3JlbmRlcjpmdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5nZXRDaGlsZHJlbigpO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6InBpY3R1cmUtY29udGFpbmVyIixjbGFzczplKCJfX3BpY3R1cmUtY29udGFpbmVyIix0WyJjbGFzcyJdKX0sdGhpcy5fcmVuZGVyUGljdHVyZShlLHQsaSksbil9fSx7UGljdHVyZUJnOmkoMzc3KSxQaWN0dXJlU3R1YjppKDUyOSl9KTtlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPWkoMykscj0obj1vKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0sYT1pKDcwKSxzPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdFsiZGVmYXVsdCJdPWUsdH0oaSgzNikpO3ZhciBsPWkoMTApLGM9aSg1MjQpLHU9clsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChsLHtuYW1lOiJ5YXAtYmciLF9nZXRCbHVyU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmJsdXJTaXplfHwxMH0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMoYyx7Ymx1clNpemU6dGhpcy5fZ2V0Qmx1clNpemUoKX0pfSxfcmVuZGVyTWV0aG9kTW9kZXJuOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19iZyIpLHN0eWxlOnsiYmFja2dyb3VuZC1pbWFnZSI6InVybCgiK3Quc3JjKyIpIn19KX0sX3JlbmRlck1ldGhvZFN2ZzpmdW5jdGlvbihlLHQpe3ZhciBpPSJibHVyIisoMCxhLmdlbmVyYXRlSGV4U3RyaW5nKSg1KTtyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX3N2ZyIpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJzdmciLG51bGwsclsiZGVmYXVsdCJdLmNyZWF0ZSgiZGVmcyIsbnVsbCxyWyJkZWZhdWx0Il0uY3JlYXRlKCJmaWx0ZXIiLHtpZDppLHg6IjAiLHk6IjAifSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjp0aGlzLl9nZXRCbHVyU2l6ZSgpfSkpKSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJpbWFnZSIse3hsaW5rSHJlZjp0LnNyYyx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixmaWx0ZXI6InVybCgjIitpKyIpIn0pKSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXQucGljdHVyZSxvPXZvaWQgMDtyZXR1cm4gbz1zLnN1cHBvcnQuY3NzRmlsdGVyQmx1ciYmcy5zdXBwb3J0LmNzc1RyYW5zZm9ybSYmIXMuaXNFZGdlP3RoaXMuX3JlbmRlck1ldGhvZE1vZGVybi5iaW5kKHRoaXMpOnRoaXMuX3JlbmRlck1ldGhvZFN2Zy5iaW5kKHRoaXMpLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSh0WyJjbGFzcyJdLGUoKSx0aGlzLm1vZCl9LG4/byhlLG4saSk6bnVsbCx0aGlzLmdldENoaWxkcmVuKCkpfX0pO2UuZXhwb3J0cz11fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSgzKSxyPShuPW8pJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxhPWkoNzcpLHM9aSgzNSk7dmFyIGw9aSgxMCksYz1pKDApLHU9aSg1MjMpLGQ9clsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChsLHtuYW1lOiJ5YXAtcGljdHVyZS1iZyIsb25Jbml0OmZ1bmN0aW9uKCl7dGhpcy5faW5pdFNpemUoKSx0aGlzLl9pc1JlcmVuZGVyZWQ9ITEsdGhpcy5fc2l6ZUNvbnRhaW5lcj17fSx0aGlzLl9fYmFzZSgpfSxfaW5pdFNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5waWN0dXJlLGk9ZS5zaXplLG49ZS5maXRDb250YWluZXIsbz0wOyEwIT09dGhpcy5wcm9wcy5kaXNhYmxlVmVydGljYWxTcGFjaW5nJiYobz1NYXRoLm1pbihpLndpZHRoLXQud2lkdGgsaS5oZWlnaHQtdC5oZWlnaHQsLjIqaS53aWR0aCksbz1jLmlzSW5SYW5nZShvLDEsMTAwKT9vOjApLHRoaXMuX3NpemU9e3dpZHRoOmkud2lkdGgsaGVpZ2h0Om4/MTp0LmhlaWdodCtvfX0sb25Nb3VudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLmZpdENvbnRhaW5lcjsoMCxhLnJlcXVlc3RBbmltYXRpb25GcmFtZSkoZnVuY3Rpb24oKXtpZighZS5faXNSZXJlbmRlcmVkJiZ0JiZlLl9fcGFyZW50Q29tcG9uZW50KXt2YXIgaT1lLl9fcGFyZW50Q29tcG9uZW50LmdldEVsZW1lbnQoKSxuPWkucGFyZW50Tm9kZTtuJiYoZS5fc2l6ZUNvbnRhaW5lcj17d2lkdGg6aS5jbGllbnRXaWR0aCxoZWlnaHQ6bi5jbGllbnRIZWlnaHR9LGUuX2lzUmVyZW5kZXJlZD0hMCxlLnVwZGF0ZSgpKX19KX0sX2dldFN0eWxlc0FuZFNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5waWN0dXJlLGk9ZS5maXRDb250YWluZXIsbj10aGlzLl9zaXplO2lmKHRoaXMuX2lzUmVyZW5kZXJlZCYmaSl7dmFyIG89dGhpcy5fc2l6ZUNvbnRhaW5lcixyPW8ud2lkdGgsYT1vLmhlaWdodDtyZXR1cm57Y29udGFpbmVyU3R5bGU6e3dpZHRoOnIsaGVpZ2h0OmF9LGFkZGl0aW9uYWxTdHlsZTp7fSxzaXplOnt3aWR0aDpyLGhlaWdodDphfX19dmFyIHM9KG4uaGVpZ2h0LXQuaGVpZ2h0KS8yO3JldHVybntjb250YWluZXJTdHlsZTp7d2lkdGg6bi53aWR0aD09PTEvMD8iYXV0byI6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQ9PT0xLzA/ImF1dG8iOm4uaGVpZ2h0fSxhZGRpdGlvbmFsU3R5bGU6eyJtYXJnaW4tdG9wIjpzLCJtYXJnaW4tYm90dG9tIjpzfSxzaXplOm59fSxfcmVuZGVyOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10LnBpY3R1cmUsbz10LmZpdENvbnRhaW5lcixhPXRoaXMuX2lzUmVyZW5kZXJlZCxsPXRoaXMuZnVsbFdpZHRoKCksYz10aGlzLl9nZXRTdHlsZXNBbmRTaXplKCksdT1jLmNvbnRhaW5lclN0eWxlLGQ9Yy5hZGRpdGlvbmFsU3R5bGUscD1jLnNpemUsZj0hb3x8YT9yWyJkZWZhdWx0Il0uY3JlYXRlKGkuUGljdHVyZSx7cmVzb3VyY2VJZDoicGljdHVyZSIsY2xhc3M6ZSgiX19waWN0dXJlIiwiX2Z1bGwtd2lkdGhfIitsKSxwaWN0dXJlOm4sZml0U2l6ZTp0LmZpdENvbnRhaW5lcixzaXplOnAsc3R5bGU6ZH0pOm51bGw7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUocy5OZXdMaW5rLHtjbGFzczplKHRbImNsYXNzIl0sZSgpKSxzdHlsZTp1LGhyZWY6dC5ocmVmfSx0Lm5vQmc/ZjpyWyJkZWZhdWx0Il0uY3JlYXRlKGkuQmcse2NsYXNzOmUoIl9fYmciKSxwaWN0dXJlOm4sc2l6ZTpwfSxmKSl9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZnVsbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMucGljdHVyZS53aWR0aD49dGhpcy5wcm9wcy5zaXplLndpZHRofSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyh1KSx0aGlzLl9waWN0dXJlQ29tcG9uZW50PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJwaWN0dXJlIil9LHNjcm9sbFRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcGljdHVyZUNvbXBvbmVudCYmdGhpcy5fcGljdHVyZUNvbXBvbmVudC5zY3JvbGxUbyhlLHQpfX0se0JnOmkoMzc2KSxQaWN0dXJlOmkoMzcxKX0pO2UuZXhwb3J0cz1kfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDE0Mikscz1pKDcpLGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQ9dGhpcy5wcm9wcy52YWx1ZXx8dGhpcy5nZXREZWZhdWx0Q29udGV4dCgpfSx0LnByb3RvdHlwZS5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dH0sdH0oclsiZGVmYXVsdCJdLkFic3RyYWN0Q29tcG9uZW50KTt0LkFic3RyYWN0Q29udGV4dFByb3ZpZGVyPWw7dmFyIGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQ9dGhpcy5nZXREZWZhdWx0Q29udGV4dCgpLHRoaXMucHJvdmlkZXJDbGFzcz10aGlzLmdldFByb3ZpZGVyQ2xhc3MoKX0sdC5wcm90b3R5cGUuYmVmb3JlUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0PXUodGhpcyx0aGlzLnByb3ZpZGVyQ2xhc3MsdGhpcy5nZXREZWZhdWx0Q29udGV4dCgpKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDaGlsZHJlbigpWzBdO3JldHVybiBzLmlzRnVuY3Rpb24oZSk/ZSh0aGlzLmNvbnRleHQpOm51bGx9LHR9KHJbImRlZmF1bHQiXS5BYnN0cmFjdENvbXBvbmVudCk7ZnVuY3Rpb24gdShlLHQsaSl7dmFyIG49ZS5nZXRQYXJlbnRDb21wb25lbnQoKSxvPW51bGw7ZG97biBpbnN0YW5jZW9mIHQ/bz1uLmdldENvbnRleHQoKTpuJiYobj1uLmdldFBhcmVudENvbXBvbmVudCgpKX13aGlsZShudWxsPT09byYmbik7cmV0dXJuIG98fGl9dC5BYnN0cmFjdENvbnRleHRDb25zdW1lcj1jLHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyhpLHQpLGkucHJvdG90eXBlLmdldERlZmF1bHRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LGl9KGwpLGk9ZnVuY3Rpb24oaSl7ZnVuY3Rpb24gbigpe3JldHVybiBudWxsIT09aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8obixpKSxuLnByb3RvdHlwZS5nZXRQcm92aWRlckNsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucHJvdG90eXBlLmdldERlZmF1bHRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG59KGMpO3JldHVybntQcm92aWRlcjp0LENvbnN1bWVyOmksZ2V0Q2xvc2VzdFByb3ZpZGVyOmZ1bmN0aW9uKGkpe3JldHVybiB1KGksdCxlKX19fSx0LnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YS5NYXJrdXBXcml0ZXIuZ2V0Q3VycmVudENvbXBvbmVudCgpO3JldHVybiBlLmdldENsb3Nlc3RQcm92aWRlcih0KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWkoMTApLHM9aSgzMCksbD1pKDM1KSxjPWkoMzIxKSx1PWkoODYpLGQ9aSg2MTQpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1jdXJyZW5jeS1sb2dvIixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmxvZ28saT1lLmhhc1Rvb2x0aXAsbj12b2lkIDA9PT1pfHxpO2lmKCF0fHwhdC51cmx8fCF0LnRpdGxlKXJldHVybiBudWxsO3ZhciBvPXQudXJsLGE9dC50aXRsZSxzPXRoaXMuYl87cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUobC5OZXdMaW5rLHtjbGFzczp0aGlzLmdldENsYXNzTmFtZSgpLGhyZWY6b30sclsiZGVmYXVsdCJdLmNyZWF0ZSh1LlRleHQse3RleHQ6YSxjbGFzc05hbWU6cygiX190ZXh0Iil9KSxuP3JbImRlZmF1bHQiXS5jcmVhdGUoYy5Ub29sdGlwLHtiZW1Gb3JtYXR0ZXI6cyx0ZXh0OnRoaXMuZ2V0VG9vbHRpcFRleHQoKX0pOm51bGwpfSx0LnByb3RvdHlwZS5nZXRUb29sdGlwVGV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMubGFuZ3VhZ2UsdD12b2lkIDA9PT1lPyIxIjplO3JldHVybiBzLmkxOG4oIllBTkRFWF9ESVJFQ1QiLHQpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyhkKX0sdC5wcm90b3R5cGUuZ2V0Q2xhc3NOYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMsaT10LmNsYXNzTmFtZSxuPVt0Lmhhc0JnPyJfaGFzLWJnIjoiIl07cmV0dXJuW2UoKSxlLmFwcGx5KHZvaWQgMCxuKSxpXS5qb2luKCIgIil9LHR9KGEpO3QuQ3VycmVuY3lMb2dvPXB9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1pKDMpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGE9aSgzNSk7dmFyIHM9aSgxMCksbD1pKDMzNSkuVGV4dE9iZnVzY2F0b3IsYz1pKDYwNiksdT1yWyJkZWZhdWx0Il0uY3JlYXRlQ29tcG9uZW50KHMse25hbWU6InlhcC1sb2dvIixpbml0UHJvcHM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50aXRsZTtyZXR1cm4gdGhpcy51cmw9dC51cmwsdGhpcy50ZXh0PXQudGl0bGUsZX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMoYyl9LF9yZW5kZXI6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXQuY29udGFpbmVyU3R5bGUsbz17Y29sb3I6dC5jb2xvcn07cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSh0WyJjbGFzcyJdLGUoKSx0aGlzLm1vZCksc3R5bGU6bn0sclsiZGVmYXVsdCJdLmNyZWF0ZShhLk5ld0xpbmsse3N0eWxlOm8sY2xhc3M6ZSgiX190ZXh0IikscmVzb3VyY2VJZDoibGluayIsaHJlZjp0aGlzLnVybH0sbD9yWyJkZWZhdWx0Il0uY3JlYXRlKGwse3RleHQ6dGhpcy50ZXh0fSk6clsiZGVmYXVsdCJdLmNyZWF0ZShpLkhUTUwse3RleHQ6dGhpcy50ZXh0fSkpLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19iZyIpfSkpfX0pO2UuZXhwb3J0cz11fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXUoaSgzKSksbz1pKDI0KSxyPXUoaSgzOTgpKSxhPWkoNSkscz1pKDIzKSxsPWkoNzcpLGM9aSg3OCk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIGQ9aSgxMCkscD1pKDQ5NSksZj1pKDE2OCkuTk9UX0lOVFJFU1RJTkcsaD1pKDM4KSxnPVsiNzI4eDkwIiwiNzI4eDkwLWRlc2lnbiIsIjk3MHg5MCIsIjB4OTAiLCIweDkwLXlhbmV3cyIsIjEwMDB4MTIwIiwiOTcweDI1MCJdLF89blsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChkLHtuYW1lOiJ5YXAtaW50ZXJ2aWV3IixvbkluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9fYmFzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5nZXREYXRhU291cmNlKCkuY2FwdHVyZUFkKHRoaXMucHJvcHMuYWRJZCl9LGdldERhdGFTb3VyY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5kYXRhLmRhdGFTb3VyY2V9LGJlZm9yZVJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZVVSTD10aGlzLl9nZXRBY3RpdmVIcmVmKCl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5faW5pdExlZ2FsKCksdGhpcy5wdXNoU3R5bGVzKHApfSxfaW5pdExlZ2FsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sZWdhbFRpbWVvdXRTaG93PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9zaG93TGVnYWwoKSxlLl9sZWdhbFRpbWVvdXRIaWRlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9oaWRlTGVnYWwoKSxlLl9pbml0TGVnYWwoKX0sM2UzKX0sMWU0KX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKSxjbGVhclRpbWVvdXQodGhpcy5fbGVnYWxUaW1lb3V0U2hvdyksY2xlYXJUaW1lb3V0KHRoaXMuX2xlZ2FsVGltZW91dEhpZGUpLHRoaXMuZ2V0RGF0YVNvdXJjZSgpLnJlbGVhc2VBZCh0aGlzLnByb3BzLmFkSWQpfSxfZ2V0QWN0aXZlSHJlZjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuZGF0YXx8e30sdD1lLml0ZW1zLGk9ZS5kZWZhdWx0VXJsfHwiIjtyZXR1cm4oMCxhLmZvckVhY2gpKHQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc0FjdGl2ZSxuPWUudXJsO3JldHVybiBpPXQ/bjppfSksaX0sX2J1aWxkVXJsOmZ1bmN0aW9uKGUsdCl7dmFyIGk9e307cmV0dXJuKDAsYS5mb3JFYWNoKShbInJlYXNvbi1pZCIsImFjdGlvbi1pZCJdLGZ1bmN0aW9uKGUpe2lbZV09dFtlXX0pLG5ldyBvLlVybCh7aG9zdDplLHBhcmFtczppfSkuZ2V0VXJsKCl9LF9zZW5kQWJ1c2U6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5wcm9wcy5kYXRhfHx7fSkuYWJ1c2VVcmw7dGhpcy5faXNTZW5kZWRBYnVzZXx8KHRoaXMuX2lzU2VuZGVkQWJ1c2U9ITAsKDAsYy5zZW5kUGl4ZWwpKHRoaXMuX2J1aWxkVXJsKGUseyJyZWFzb24taWQiOmZbMF0sImFjdGlvbi1pZCI6ZlsxXX0pKSl9LG9uTW91bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzOygwLGwucmVxdWVzdEFuaW1hdGlvbkZyYW1lKShmdW5jdGlvbigpe3ZhciB0PWUuZ2V0UmVzb3VyY2VCeUlkKCJpbnRlcnZpZXciKTtpZih0KXt0LmFkZENsYXNzKGUuYl8oIl9zaG93IikpO3ZhciBpPXQuZ2V0RWxlbWVudCgpLG49KGkucGFyZW50Tm9kZXx8e30pLmNsaWVudEhlaWdodDtuPjAmJmguc2V0SW1wb3J0YW50Q3NzUHJvcGVydHkoaSx7aGVpZ2h0Om59KX19KX0sb25DbGlja0xpbms6ZnVuY3Rpb24oZSl7dGhpcy5fYWN0aXZlVVJMP3RoaXMuX3NlbmRBYnVzZSgpOmUucHJldmVudERlZmF1bHQoKX0sX29uTGVnYWxPdmVyOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2xlZ2FsVGltZW91dFNob3cpLGNsZWFyVGltZW91dCh0aGlzLl9sZWdhbFRpbWVvdXRIaWRlKSx0aGlzLl9oaWRlTGVnYWwoKX0sX3Nob3dMZWdhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJsZWdhbCIpO2UmJmUuYWRkQ2xhc3ModGhpcy5iXygiX19sZWdhbF9zaG93IikpfSxfaGlkZUxlZ2FsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImxlZ2FsIik7ZSYmZS5yZW1vdmVDbGFzcyh0aGlzLmJfKCJfX2xlZ2FsX3Nob3ciKSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSx0LGkpe3ZhciBvPXRoaXMsYT10LmRhdGF8fHt9LGw9YS5idXR0b25UZXh0LGM9YS5kZXNjcmlwdGlvbix1PWEuaXRlbXMsZD1hLmZvcm1hdE5hbWUscD1hLmRpc2NsYWltZXIsZj0oMCxzLmluZGV4T2YpKGcsZCk+LTEsaD0oMCxyWyJkZWZhdWx0Il0pKGMpLF89blsiZGVmYXVsdCJdLmNyZWF0ZShpLkJ1dHRvbix7dGhlbWU6ImludGVydmlldyIsaHJlZjp0aGlzLl9hY3RpdmVVUkx9LGwpLHk9blsiZGVmYXVsdCJdLmNyZWF0ZShpLlN3aXRjaCx7aXRlbXM6dSxvbkNoYW5nZTpmdW5jdGlvbihlKXtyZXR1cm4gby5fYWN0aXZlVVJMPV8udXBkYXRlTGluayhlLnVybCl9fSk7cmV0dXJuIG5bImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSh0WyJjbGFzcyJdLGUoKSxlKCJfZm9ybWF0LSIrZCksZj9lKCJfdGhlbWUtaG9yaXpvbnRhbCIpOiIiKSxyZXNvdXJjZUlkOiJpbnRlcnZpZXcifSxuWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fdmlld3BvcnQiKX0sblsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2Rlc2NyaXB0aW9uIil9LGgpLHksXyxwP25bImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19sZWdhbCIpLG9uTW91c2VPdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uX29uTGVnYWxPdmVyKCl9LHJlc291cmNlSWQ6ImxlZ2FsIn0sblsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2xlZ2FsLWljb24iKX0sIiEiKSxuWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fbGVnYWwtdmlld3BvcnQiKX0sblsiZGVmYXVsdCJdLmNyZWF0ZShpLkhUTUwse3RleHQ6cH0pKSk6bnVsbCkpfX0se0J1dHRvbjppKDM2NyksU3dpdGNoOmkoNTAxKX0pO2UuZXhwb3J0cz1ffSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LGkpe3ZhciBuPTAsbz0wLHI9MCxhPU1hdGguZmxvb3IoNiplKSxzPTYqZS1hLGw9aSooMS10KSxjPWkqKDEtcyp0KSx1PWkqKDEtKDEtcykqdCk7c3dpdGNoKGElNil7Y2FzZSAwOm49aSxvPXUscj1sO2JyZWFrO2Nhc2UgMTpuPWMsbz1pLHI9bDticmVhaztjYXNlIDI6bj1sLG89aSxyPXU7YnJlYWs7Y2FzZSAzOm49bCxvPWMscj1pO2JyZWFrO2Nhc2UgNDpuPXUsbz1sLHI9aTticmVhaztjYXNlIDU6bj1pLG89bCxyPWN9cmV0dXJuWzI1NSpuLDI1NSpvLDI1NSpyXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC51bk5vcm1hbGl6ZWRIc3ZUb1JnYj1uLHQuaHN2VG9SZ2I9ZnVuY3Rpb24oZSx0LGkpe3ZhciBvPW4oTWF0aC5tYXgoMCxNYXRoLm1pbihlLDM2MCkpLzM2MCxNYXRoLm1heCgwLE1hdGgubWluKHQsMTAwKSkvMTAwLE1hdGgubWF4KDAsTWF0aC5taW4oaSwxMDApKS8xMDApLHI9b1swXSxhPW9bMV0scz1vWzJdO3JldHVybltNYXRoLm1heCgwLE1hdGgubWluKE1hdGgucm91bmQociksMjU1KSksTWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLnJvdW5kKGEpLDI1NSkpLE1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5yb3VuZChzKSwyNTUpKV19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm5vcm1hbGl6ZVVybD1mdW5jdGlvbihlKXtyZXR1cm4gZT8idXJsKCIrZSsiKSI6Im5vbmUifX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9aSgxMCkscz1pKDM1KSxsPWkoODYpLGM9aSg2NTQpLHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1sb2dvIixlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLnByb3BzLGk9dC5jbGFzc05hbWUsbj10LmRpcmVjdFRpdGxlLG89dC5za2lwT2JmdXNjYXRlO2lmKCFufHwhbi51cmx8fCFuLnRpdGxlKXJldHVybiBudWxsO3ZhciBhPVtlKCksaV0sYz1uLnVybCx1PW4udGl0bGU7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUocy5OZXdMaW5rLHtocmVmOmMsY2xhc3M6YS5qb2luKCIgIil9LHJbImRlZmF1bHQiXS5jcmVhdGUobC5UZXh0LHtvYmZ1c2NhdGU6IW8sdGV4dDp1LGNsYXNzTmFtZTplKCJfX3RleHQiKX0pLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19iZyIpfSkpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyhjKX0sdH0oYSk7dC5Mb2dvPXV9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPTAscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMudGV4dCx0PXZvaWQgMD09PWU/IiI6ZTtpZigiIj09PXQpcmV0dXJuIG51bGw7dmFyIGk9InRleHQiKyArK2Esbj0icGF0dGVybiIrYSxvPS42Kih0Lmxlbmd0aCs0KTtyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LHJbImRlZmF1bHQiXS5jcmVhdGUoImRlZnMiLG51bGwsclsiZGVmYXVsdCJdLmNyZWF0ZSgiZyIse2lkOml9LHJbImRlZmF1bHQiXS5jcmVhdGUoInRleHQiLHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiOiJtaWRkbGUifSx0KSkpLHJbImRlZmF1bHQiXS5jcmVhdGUoInBhdHRlcm4iLHtpZDpuLHg6IjUwJSIseToiNTAlIix3aWR0aDpvKyJlbSIsaGVpZ2h0OiI4ZW0iLHBhdHRlcm5Vbml0czoidXNlclNwYWNlT25Vc2UiLHBhdHRlcm5Db250ZW50VW5pdHM6InVzZXJTcGFjZU9uVXNlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixwYXR0ZXJuVHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitvLzIrIiAyKSByb3RhdGUoLTI1ICIrby8yKyIgMikifSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ1c2UiLHt4OiIwIix5OiIyZW0iLHhsaW5rSHJlZjoiIyIraX0pLHJbImRlZmF1bHQiXS5jcmVhdGUoInVzZSIse3g6bysiZW0iLHk6IjJlbSIseGxpbmtIcmVmOiIjIitpfSksclsiZGVmYXVsdCJdLmNyZWF0ZSgidXNlIix7eDpvLzIrImVtIix5OiI2ZW0iLHhsaW5rSHJlZjoiIyIraX0pKSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsZmlsbDoidXJsKCMiK24rIikifSkpfSx0fShpKDEwKSk7dC5JbWFnZVN0dWI9c30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSg2MzkpLmdldFRlc3REaXYod2luZG93KTt0LmlzQ3NzUHJvcFN1cHBvcnRlZD1mdW5jdGlvbihlLHQpe3ZhciBvPXZvaWQgMCE9PW4uc3R5bGVbZV07aWYobyYmdCYmaSgxOSkuaXNTdHJpbmcodCkpdHJ5e24uc3R5bGUuY3NzVGV4dD1lKyI6ICIrdCsiOyI7dmFyIHI9Qm9vbGVhbihuLnN0eWxlLmNzc1RleHQpO3JldHVybiBuLnN0eWxlLmNzc1RleHQ9IiIscn1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4gb319LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudHJpbVRleHRCeU51bWJlck9mTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lLnRleHRDb250ZW50O2lmKGkpe2Zvcih2YXIgbj1pLnNwbGl0KCIgIiksbz1uLmxlbmd0aCxyPW87cj4wOylyPU1hdGguZmxvb3Ioci8yKSxlLmlubmVySFRNTD1uLnNsaWNlKDAsbykuam9pbigiICIpKyIuLi4iLG8rPWUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg+dD8tcjpyO2UuaW5uZXJIVE1MPW4uc2xpY2UoMCxvKS5qb2luKCIgIikrIi4uLiJ9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsaSxuKXtpZighbilyZXR1cm57eDouNSx5Oi41fTt2YXIgbz1uLngrbi53LzIscj1uLnkrbi5oLzIsYT17eDpvL2Uudyx5OnIvZS5ofSxzPWkudy9pLmgsbD1lLncvZS5oO3JldHVybiB0LmNhbGNCYWNrZ3JvdW5kUG9zaXRpb24oYSxzLGwpfWZ1bmN0aW9uIG8oZSx0KXtpZihlJiYwIT09ZS5sZW5ndGgpe3ZhciBpPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBpPWUudy9lLmgsbj1pPD10LncvdC5oLG89bj90Lnc6dC5oKmkscj1uP3Qudy9pOnQuaDtyZXR1cm57YXJlYTpNYXRoLm1pbihvLGUudykqTWF0aC5taW4ocixlLmgpLG9yaWdpbkFyZWE6ZS53KmUuaCxzbWFydENlbnRlcjplfX0oZSx0KX0pO3JldHVybiBpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBuPXQsKGk9ZSkuYXJlYT5uLmFyZWF8fGkuYXJlYT09PW4uYXJlYSYmaS5vcmlnaW5BcmVhPG4ub3JpZ2luQXJlYT9pOm47dmFyIGksbn0saVswXSkuc21hcnRDZW50ZXJ9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbGNCYWNrZ3JvdW5kUG9zaXRpb249ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWUueCxyPWUueSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoNjMxKS5nZXRMaW1pdGVkTGluZWFyRnVuY3Rpb24oLjUsMCx0LS41LDEpKGUqdCl9O3JldHVybiB0Pm4/cj1hKHIsdC9uKTp0PG4mJihvPWEobyxuL3QpKSx7eDpvLHk6cn19LHQuZ2V0Q2VudGVyUG9zaXRpb249bix0LmdldFNtYXJ0Q2VudGVyPW8sdC5nZXRTbWFydENlbnRlckJnU3R5bGU9ZnVuY3Rpb24oZSx0KXt2YXIgaT1uKHt3OmUudyxoOmUuaH0sdCxvKGUuc21hcnRDZW50ZXJzLHQpKTtyZXR1cm4gMTAwKmkueCsiJSAiKzEwMCppLnkrIiUifSx0LmdldEJlc3RTbWFydENlbnRlcj1mdW5jdGlvbihlKXtpZihlLm9wdGlvbnMmJmUub3B0aW9uc1sic21hcnQtY2VudGVycyJdKXt2YXIgdD1lLm9wdGlvbnNbInNtYXJ0LWNlbnRlcnMiXSxuPWkoMTQpLm1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybltlLnNyYyx0LncsdC5oLHsic21hcnQtY2VudGVyIjp0fV19KSxvPWkoNjMyKS5hcHBseUltYWdlKG4se3dpZHRoOmUuY29udGFpbmVyV2lkdGgsaGVpZ2h0OmUuY29udGFpbmVySGVpZ2h0LGlzQ292ZXI6ITF9KTtpZihvJiZvLm9wdGlvbnMmJm8ub3B0aW9uc1sic21hcnQtY2VudGVyIl0pcmV0dXJuIG8ub3B0aW9uc1sic21hcnQtY2VudGVyIl19cmV0dXJuIG51bGx9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbmNhdE1vZHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9W10sbj0wO248dC5sZW5ndGg7bisrKUJvb2xlYW4odFtuXSkmJmkucHVzaChlKyJfIit0W25dKTtyZXR1cm4gaX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIGk9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG4pJiYoZVtuXT1pW25dKX1yZXR1cm4gZX0sbz1mdW5jdGlvbigpe3JldHVybihvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxpPWFyZ3VtZW50cy5sZW5ndGg7dDxpO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBuPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8aTt0KyspZm9yKHZhciByPWFyZ3VtZW50c1t0XSxhPTAscz1yLmxlbmd0aDthPHM7YSsrLG8rKyluW29dPXJbYV07cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYSxzPWkoMjIpLGw9aSgxNCksYz1pKDQzKSx1PWkoMzEpLGQ9aSg0MDcpLHA9aSg2NTgpLGY9aSgyMjcpLGg9aSgxMDYpOyFmdW5jdGlvbihlKXtlW2VbIklOSVQiXT0wXT0iSU5JVCIsZVtlWyJSRUFEWSJdPTFdPSJSRUFEWSJ9KGF8fChhPXt9KSk7dmFyIGc9ZnVuY3Rpb24oZSl7MH0sXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb250ZXh0TGlzdD1bXSx0aGlzLnN0YXRlPWEuSU5JVCx0aGlzLmJsb2NrPWUuYmxvY2ssdGhpcy5pc0hvcml6b250YWw9ZS5pc0hvcml6b250YWwsdGhpcy51c2VGaXJzdEFkR3Jvdz1lLnVzZUZpcnN0QWRHcm93LHRoaXMuc2V0dGluZ3M9ZS5zZXR0aW5ncyx0aGlzLmludGVyc2VjdGluZ01hbmFnZXI9bmV3IGYuSW50ZXJzZWN0aW5nTWFuYWdlcix0aGlzLmdldFRoZW1lPXUub25jZSh0aGlzLmdldFRoZW1lKX1yZXR1cm4gZS5wcm90b3R5cGUuZG9PblJlYWR5PWZ1bmN0aW9uKGUsdCl7dGhpcy5ibG9jay5kb09uUmVhZHkoZSx0KX0sZS5wcm90b3R5cGUuZG9PblVubW91bnQ9ZnVuY3Rpb24oZSl7dGhpcy5ibG9jay5kb09uVW5tb3VudChlKX0sZS5wcm90b3R5cGUuZ2V0QWR2Q29udGV4dExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0TGlzdH0sZS5wcm90b3R5cGUuZ2V0U3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZX0sZS5wcm90b3R5cGUuY3JlYXRlQWR2Q29udGV4dD1mdW5jdGlvbigpe2coKTt2YXIgZT1uZXcgeSh0aGlzLHRoaXMuY29udGV4dExpc3QubGVuZ3RoKTtyZXR1cm4gdGhpcy5jb250ZXh0TGlzdC5wdXNoKGUpLGV9LGUucHJvdG90eXBlLmdldFRoZW1lPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1hLlJFQURZO3ZhciBlPXRoaXMuc2V0dGluZ3MsdD10aGlzLmlzSG9yaXpvbnRhbCxpPXRoaXMuY29udGV4dExpc3Qsbj10aGlzLnVzZUZpcnN0QWRHcm93LG89dGhpcy5ibG9jay5nZXRUaGVtZSgpLmJvcmRlckNvbG9yLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBsLm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiBlKHQucGFyYW1zKX0pfShlKSxmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4oZSl9KX0sZD1pLmxlbmd0aD4xLGY9ZS5mb250RmFtaWx5P2UuZm9udEZhbWlseSsiLCAiOiIiLGc9TnVtYmVyKGUuZm9udFNpemUpfHwxLF89Qm9vbGVhbihlLnRpdGxlRm9udFNpemVBYnMpLHk9Xz9OdW1iZXIoZS50aXRsZUZvbnRTaXplQWJzKToxLjMsbT1oLmNhbGNBdmcuYXBwbHkodm9pZCAwLHUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udFNpemV9KXx8WzBdKSpnLGI9aC5jYWxjQXZnLmFwcGx5KHZvaWQgMCx1KGZ1bmN0aW9uKGUpe3JldHVybiBlLmZvbnRNaW5TaXplfSl8fFswXSksdj1uZXcgYy5Db2xvcihlLmJnQ29sb3J8fGUuc2l0ZUJnQ29sb3J8fCIjZjVmNWY1Iikuc2V0QWxwaGEoTnVtYmVyKGUuYmdDb2xvcnx8IWUuc2l0ZUJnQ29sb3IpKSx3PW5ldyBjLkNvbG9yKGUudGV4dENvbG9yfHx2LnRvUmVhZGFibGUoKSkseD1uZXcgYy5Db2xvcihlLmhvdmVyQ29sb3J8fHcpLGs9TWF0aC5tYXguYXBwbHkoTWF0aCxyKFswXSx1KGZ1bmN0aW9uKGUpe3JldHVybiBlLndhcm5pbmdIZWlnaHR9KSkpLEM9di50b1JlYWRhYmxlKDIwMCkudG9SZWFkYWJsZSgpLFM9Qy50b1JlYWRhYmxlKCkubGlnaHRlbiguNikuc2V0QWxwaGEoLjcpLE89Qm9vbGVhbihlLmlzV2FybmluZ0NvbXBhY3QpLEk9ZS5oZWFkZXJCZ0NvbG9yP25ldyBjLkNvbG9yKGUuaGVhZGVyQmdDb2xvcik6bmV3IGMuQ29sb3IoIiMwMDAiKS5zZXRBbHBoYSguMjUpLEE9ZS5oZWFkZXJGb250Q29sb3I/bmV3IGMuQ29sb3IoZS5oZWFkZXJGb250Q29sb3IpOkkudG9SZWFkYWJsZSgpLFQ9ZS5oZWFkZXJGb250Q29sb3I/bmV3IGMuQ29sb3IoZS5oZWFkZXJGb250Q29sb3IpOiJpbmhlcml0IixFPSJlYWNoIj09PWUuaGVhZGVyUG9zaXRpb24/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lfSxSPW5ldyBjLkNvbG9yKGUudGl0bGVDb2xvcnx8dyksTT1uZXcgYy5Db2xvcihlLmhvdmVyQ29sb3J8fFIpLFA9bmV3IGMuQ29sb3IoZS5zaXRlbGlua3NDb2xvcnx8dyksTD1uZXcgYy5Db2xvcihlLmhvdmVyQ29sb3J8fFApLEI9ZS5saW5rc1VuZGVybGluZT8uMjowLE49UC5jbG9uZSgpLnNldEFscGhhKEIpLEQ9bmV3IGMuQ29sb3IoZS5ob3ZlckNvbG9yfHxOKS5zZXRBbHBoYShCKSxqPU1hdGgubWF4KGIsbSkrInB4Iix6PU1hdGgubWF4KGIsLjkqbSkrInB4IixGPU1hdGgubWF4KGIsbSkrInB4IixIPUJvb2xlYW4oZS5idXR0b24pLFU9SD9uZXcgYy5Db2xvcihlLnVybEJhY2tncm91bmRDb2xvcnx8dy5jbG9uZSgpLnNldEFscGhhKDApKTpuZXcgYy5Db2xvcigiI0U1RTVFNSIpLFY9bmV3IGMuQ29sb3IoZS51cmxCYWNrZ3JvdW5kQ29sb3I/VS50b1JlYWRhYmxlKCk6ZS51cmxDb2xvcnx8dyksVz1uZXcgYy5Db2xvcihlLnVybEJhY2tncm91bmRDb2xvcj9WOmUuaG92ZXJDb2xvcnx8ViksSz1lLnVybEJhY2tncm91bmRDb2xvcj9VOlYuY2xvbmUoKS5zZXRBbHBoYSguNSksRz1uZXcgYy5Db2xvcihlLnVybENvbG9yfHx3KSxZPW5ldyBjLkNvbG9yKGUuaG92ZXJDb2xvcnx8RykscT1uZXcgYy5Db2xvcihlLnVybEJhY2tncm91bmRDb2xvcj9LOmUuaG92ZXJDb2xvcnx8Sykuc2V0QWxwaGEoLjM1KSxYPUJvb2xlYW4oZS5mZWVkYmFja0JnQ29sb3IpP3Y6ImhzbGEoMCwwJSwxMDAlLC45OCkiLFo9Qm9vbGVhbihlLmZlZWRiYWNrQmdDb2xvcik/di50b1JlYWRhYmxlKCk6bmV3IGMuQ29sb3IoIiM1NTUiKSxRPW5ldyBjLkNvbG9yKGUudXJsQmFja2dyb3VuZENvbG9yfHxuZXcgYy5Db2xvcigiIzAwMCIpLnNldEFscGhhKC41KSksJD1RLnRvUmVhZGFibGUoKSxKPWUudXJsQmFja2dyb3VuZENvbG9yP1E6JC5jbG9uZSgpLnNldEFscGhhKC41KSxlZT1OdW1iZXIoZS5pbWFnZVdpZHRoKXx8MCx0ZT1OdW1iZXIoZS5pbWFnZUhlaWdodCl8fDAsaWU9ZS5pbWFnZVBhZGRpbmdMZWZ0fHwiMWVtIixuZT1lLmltYWdlUG9zaXRpb258fCJjZW50ZXIgdG9wIixvZT11KGZ1bmN0aW9uKGUpe3JldHVybiBlLmltYWdlTWluV2lkdGh9KSxyZT1vZS5sZW5ndGg+MT9vZTp1KGZ1bmN0aW9uKGUpe3JldHVybiBlLmltYWdlTWF4V2lkdGh9KSxhZT11KGZ1bmN0aW9uKGUpe3JldHVybiBlLmltYWdlTWluSGVpZ2h0fSksc2U9YWUubGVuZ3RoPjE/YWU6dShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbWFnZU1heEhlaWdodH0pLGxlPU1hdGgubWF4LmFwcGx5KE1hdGgscihbMF0sb2UpKSxjZT1NYXRoLm1heC5hcHBseShNYXRoLHIoWzBdLHJlKSksdWU9TWF0aC5tYXguYXBwbHkoTWF0aCxyKFswXSxhZSkpLGRlPU1hdGgubWF4LmFwcGx5KE1hdGgscihbMF0sc2UpKSxwZT1OdW1iZXIoZS5hbmltYXRpb25Db3VudCksZmU9Qm9vbGVhbihlLmVuYWJsZUFuaW1hdGlvbikmJnBlPjAsaGU9Qm9vbGVhbihlLm5vQm9keVRleHQpLGdlPUJvb2xlYW4oZS5wYWRkaW5nc0Rpc2FibGVkKSxfZT1OdW1iZXIoZS5oZWFkZXJGb250U2l6ZSl8fDEwLHllPU51bWJlcihlLmltYWdlUmFkaXVzKSxtZT1lLnBpY3R1cmVGbG9hdCxiZT0idW5kZWZpbmVkIj09PWUuaGVhZGVyVGV4dD8iIjplLmhlYWRlclRleHQsdmU9Qm9vbGVhbihlLmZhdmljb24pLHdlPUJvb2xlYW4oZS5leHRlbmRlZFRpdGxlRm9udFJhbmdlKT9bMSwyLDMsNCw1LDYsNyw4LDksMTAsMTFdOls0LDUsNiw3LDgsOSwxMCwxMV07cmV0dXJue211bHRpcGxlOmQsaXNIb3Jpem9udGFsOnQsbWF4U21hbGxBZHZTcXVhcmU6ZS5jbGlja2FibGVCYWNrZ3JvdW5kPzEvMDoyNWUzLHVzZUZpcnN0QWRHcm93Om4sZm9udEZhbWlseTpmLGZvbnRTaXplOm0sZm9udE1pblNpemU6Yixib3JkZXJDb2xvcjpvLGJnQ29sb3I6dix0ZXh0Q29sb3I6dyxob3ZlckNvbG9yOngsd2FybmluZ0JnQ29sb3I6Qyx3YXJuaW5nVGV4dENvbG9yOlMsd2FybmluZ0hlaWdodDprLGlzV2FybmluZ0NvbXBhY3Q6Tyxsb2dvQmdDb2xvcjpJLGxvZ29UZXh0Q29sb3I6QSxoYXNMb2dvOkUsdGl0bGVDb2xvcjpSLHRpdGxlSG92ZXJDb2xvcjpNLHRpdGxlRm9udFNpemU6eSxoYXNUaXRsZUZvbnRTaXplOl8sc2l0ZUxpbmtzQ29sb3I6UCxzaXRlTGlua3NIb3ZlckNvbG9yOkwsc2l0ZUxpbmtzVW5kZXJsaW5lQ29sb3I6TixzaXRlTGlua3NVbmRlcmxpbmVIb3ZlckNvbG9yOkQsaXNCdXR0b25WaXNpYmxlOkgsYnV0dG9uRm9udFNpemU6aixidXR0b25TbWFsbEZvbnRTaXplOnosYnV0dG9uRG9tYWluRm9udFNpemU6RixidXR0b25Db2xvcjpWLGJ1dHRvbkhvdmVyQ29sb3I6VyxidXR0b25CZ0NvbG9yOlUsYnV0dG9uQm9yZGVyQ29sb3I6SyxidXR0b25Cb3JkZXJIb3ZlckNvbG9yOnEsYnV0dG9uRXh0cmFDb2xvcjpHLGJ1dHRvbkV4dHJhSG92ZXJDb2xvcjpZLGJ1dHRvbkFsdEJnQ29sb3I6USxidXR0b25BbHRDb2xvcjokLGJ1dHRvbkFsdEJvcmRlckNvbG9yOkosaW1hZ2VQb3NpdGlvbjpuZSxpbWFnZVBhZGRpbmdMZWZ0OmllLGdldEltYWdlU2l6ZTpmdW5jdGlvbihlLHQpe3ZhciBpPWUud2lkdGgsbj1lLmhlaWdodCxvPWxlfHxjZSxyPXVlfHxkZSxhPW8mJihlZT4xP2VlOmVlKmkpLHM9ciYmKHRlPjE/dGU6dGUqbik7cmV0dXJue21pbldpZHRoOmF8fHQubWluV2lkdGh8fGxlfHxvfHxpLG1heFdpZHRoOmF8fHQubWF4V2lkdGh8fGNlfHxvfHxpLG1pbkhlaWdodDpzfHx0Lm1pbkhlaWdodHx8dWV8fHJ8fG4sbWF4SGVpZ2h0OnN8fHQubWF4SGVpZ2h0fHxkZXx8cnx8bn19LGFuaW1hdGVkOmZlLGFuaW1hdGlvbkNvdW50OnBlLHBpY3R1cmVGbG9hdDptZSxwYWRkaW5nc0Rpc2FibGVkOmdlLG5vQm9keVRleHQ6aGUsaGVhZGVyVGV4dDpiZSxmYXZpY29uOnZlLGhlYWRlckZvbnRTaXplOl9lLGltYWdlUmFkaXVzOnllLGxvZ29Sb3dDb2xvcjpULHRpdGxlRm9udFJhbmdlOndlLGZlZWRiYWNrQmdDb2xvcjpYLGZlZWRiYWNrRm9udENvbG9yOloscGlUaGVtZTpwLmdldFBJVGhlbWVGaWVsZHModGhpcy5zZXR0aW5ncyksY2xpY2thYmxlQmFja2dyb3VuZDplLmNsaWNrYWJsZUJhY2tncm91bmR9fSxlfSgpO3QuQWR2Q29udGV4dFByb3ZpZGVyPV87dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5wcm92aWRlcj1lLHRoaXMuaW5kZXg9dCx0aGlzLnBhcmFtcz17fSx0aGlzLmdldFRoZW1lPXUub25jZSh0aGlzLmdldFRoZW1lKSx0aGlzLmludGVyc2VjdGluZ01hbmFnZXI9dGhpcy5wcm92aWRlci5pbnRlcnNlY3RpbmdNYW5hZ2VyfXJldHVybiBlLnByb3RvdHlwZS5kb09uUmVhZHk9ZnVuY3Rpb24oZSx0KXt0aGlzLnByb3ZpZGVyLmRvT25SZWFkeShlLHQpfSxlLnByb3RvdHlwZS5kb09uVW5tb3VudD1mdW5jdGlvbihlKXt0aGlzLnByb3ZpZGVyLmRvT25Vbm1vdW50KGUpfSxlLnByb3RvdHlwZS5zZXRQYXJhbXM9ZnVuY3Rpb24oZSl7Zyh0aGlzLnByb3ZpZGVyKSxuKHRoaXMucGFyYW1zLGUpfSxlLnByb3RvdHlwZS5nZXRUaGVtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW5kZXgsdD10aGlzLnByb3ZpZGVyLGk9dGhpcy5wYXJhbXMsbj10LmdldFRoZW1lKCkscj1uLmlzSG9yaXpvbnRhbCxhPWkuaW1hZ2VNaW5XaWR0aCxzPWkuaW1hZ2VNYXhXaWR0aCxsPWkuaW1hZ2VNaW5IZWlnaHQsYz1pLmltYWdlTWF4SGVpZ2h0LHU9aS53YXJuaW5nSGVpZ2h0LHA9dm9pZCAwPT09dT8wOnUsZj1kLmRlbGV0ZVVuZGVmaW5lZFByb3BlcnRpZXMocj97bWluV2lkdGg6YSxtYXhXaWR0aDpzfTp7bWluSGVpZ2h0OmwsbWF4SGVpZ2h0OmN9KTtyZXR1cm4gbyhvKG8oe30sbikse2hhc0xvZ286bi5oYXNMb2dvKGUpLGdldEltYWdlU2l6ZTpmdW5jdGlvbihlKXtyZXR1cm4gbi5nZXRJbWFnZVNpemUoZSxmKX19KSxyP3t9Ont3YXJuaW5nSGVpZ2h0OnB9KX0sZX0oKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JTlRFUlNDUk9MTEVSX0RFU0tUT1BfU0VUVElOR1M9e21pbkhvcml6b250YWxQYWRkaW5nOjMyLGludGVyQWRQYWRkaW5nOjE2LHZlcnRpY2FsUGFkZGluZzoxNixhZEhlaWdodDozMDAsbWluQXNwZWN0UmF0aW86MSxtYXhBc3BlY3RSYXRpbzo0LzN9LHQuSU5URVJTQ1JPTExFUl9NT0JJTEVfU0VUVElOR1M9e291dGVyUGFkZGluZzoxNixpbm5lckFkUGFkZGluZzo4LGFzcGVjdFJhdGlvOjQvMyxjb250ZW50RWFyczo2NH0sdC5JTlRFUlNDUk9MTEVSX0JBQ0tHUk9VTkQ9IiMwMDAwMzMifSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0Lkh0bWw9dm9pZCAwO3ZhciBuLG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSkscj1pKDEwMiksYT0obj1yKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0scz1pKDk1KTt0Lkh0bWw9by5hdWdtZW50KHMuQWJzdHJhY3RDb21wb25lbnQse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7cy5BYnN0cmFjdENvbXBvbmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGJlZm9yZVJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthWyJkZWZhdWx0Il0uaW5uZXJIVE1MKHQsdGhpcy5wcm9wcy50ZXh0LnRvU3RyaW5nKCl8fCIiKTt2YXIgaT1lLmdldEN1cnJlbnRFbGVtZW50KCksbj1vLm1hcCh0LmNoaWxkTm9kZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtyZXR1cm4gby5lYWNoKG4sZnVuY3Rpb24oZSl7aS5hcHBlbmRDaGlsZChlKX0pLCExfX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1bMjU1LDI0NywyNDAsMjMxLDIyMSwyMTAsMTk0LDE3NCwxNDQsMTEyLDgwLDM1LDBdLG89WzI1NSwyMjIsMTkwLDE2NSwxMzksMTE4LDEwMiw4Niw3NSw3MCw2OCw2Niw2NF07dC5nZXRCZ0NvbG9yPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1pKDQzKS5jcmVhdGVDb2xvcihlKSxyPXQuZ2V0QXZlcmFnZSgpLGE9dC50b1JnYkFycmF5KCkscz0xO3I8bltzXTspcysrO3ZhciBsPW5bc10sYz1vW3NdLHU9KGMrMSooci1sKS8obltzLTFdLWwpKihvW3MtMV0tYykpLzI1NSxkPTEtdSxwPTI1NSp1O3JldHVybiBpKDQzKS5jcmVhdGVDb2xvcihbTWF0aC5yb3VuZChhWzBdKmQrcCksTWF0aC5yb3VuZChhWzFdKmQrcCksTWF0aC5yb3VuZChhWzJdKmQrcCldKS50b1N0cmluZygpfSx0LmdldEJvcmRlckNvbG9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1pKDQzKS5jcmVhdGVDb2xvcihlKS50b1JnYkFycmF5KCkscj1pKDQzKS5jcmVhdGVDb2xvcih0KS50b1JnYkFycmF5KCk7cmV0dXJuIG49cGFyc2VGbG9hdChuKSxuPWlzTmFOKG4pPy44NTpuLGkoNDMpLmNyZWF0ZUNvbG9yKFtNYXRoLnJvdW5kKG9bMF0qbityWzBdKigxLW4pKSxNYXRoLnJvdW5kKG9bMV0qbityWzFdKigxLW4pKSxNYXRoLnJvdW5kKG9bMl0qbityWzJdKigxLW4pKV0pLnRvU3RyaW5nKCl9LHQuaGFzSW1wb3J0YW50RmxhZz1pKDIzNikuaGFzSW1wb3J0YW50RmxhZ30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubG9hZFNjcmlwdD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxvKXtpKDU3MSkubG9hZFNjcmlwdChuKG4oe30sZSkse29uTG9hZDp0LG9uRXJyb3I6b30pKX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pLHI9ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGE9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsaT1hcmd1bWVudHMubGVuZ3RoO3Q8aTt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgbj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PGk7dCsrKWZvcih2YXIgcj1hcmd1bWVudHNbdF0sYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyxvKyspbltvXT1yW2FdO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9aSgzNCksbD1pKDMpLGM9aSg2OSksdT1pKDQzKSxkPWkoNjEpLHA9aSg0NCksZj1pKDczKSxoPWkoMzM5KSxnPWkoODYpLF89aSgzMCkseT1pKDM1KSxtPWkoMTYyKSxiPWkoNjc0KSx2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5tb2Q9ImFkYXB0aXZlLXYzIix0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5wcmVwYXJlRGF0YT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWluSGVpZ2h0LGk9dGhpcy53aWR0aDt0aGlzLmlzVG93ZXJMYXlvdXQ9aS90PDE2LzksdGhpcy5pc0NvbXBhY3RMYXlvdXQ9dDw4MCxlLnByb3RvdHlwZS5wcmVwYXJlRGF0YS5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24odCl7ZS5wcm90b3R5cGUuYmVmb3JlUmVuZGVyLmNhbGwodGhpcyx0KSx0aGlzLmltYWdlU2l6ZSYmKHRoaXMuaW1hZ2VTdHlsZT10aGlzLmdldEltYWdlU3R5bGUoKSl9LHQucHJvdG90eXBlLmdldEltYWdlU3R5bGU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMud2lkdGgsaT10aGlzLm1pbkhlaWdodCxuPXRoaXMuaXNUb3dlckxheW91dCxvPXRoaXMucHJvcHMuc2V0dGluZ3Mscj10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS51c2VGaXJzdEFkR3JvdyxhPXQscz1pO2lmKG4pe3ZhciBsPU51bWJlcihvLmltYWdlSGVpZ2h0KXx8MDtsJiYobD1sPjE/bDpsKmkpLHM9TWF0aC5tYXgoLjUqaSx0LygxNi85KSksZT17aGVpZ2h0Omw9bHx8cywibWF4LWhlaWdodCI6cz1NYXRoLm1pbig0KnQvMywuNjUqaSxpLTYwKX19ZWxzZXt2YXIgYz1OdW1iZXIoby5pbWFnZVdpZHRoKXx8MDtjJiYoYz1jPjE/YzpjKnQpO3ZhciB1PXImJmk8PTE4MCxkPU1hdGgubWluKGksLjc1KmkpO2E9dT8yLjEyNSppOk1hdGgubWluKHQvMi41LDM0MCksYT1jfHxhLGU9e3dpZHRoOk1hdGgubWluKGEsdCoodT8uMzouNSkpLCJtYXgtd2lkdGgiOmEsIm1pbi13aWR0aCI6ZCwibWF4LWhlaWdodCI6IjEwMCUifX1yZXR1cm4gZX0sdC5wcm90b3R5cGUuZ2V0Q29udGVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1pbkhlaWdodCx0PXRoaXMud2lkdGgsaT10aGlzLmltYWdlU3R5bGUsbj12b2lkIDA9PT1pP3t9Omk7cmV0dXJue3dpZHRoOnQtKG4ud2lkdGh8fDApLGhlaWdodDplLShuLmhlaWdodHx8MCl9fSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bYl19LHQucHJvdG90eXBlLnJlbmRlckNvbnRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5iXyxpPXRoaXMuZ2V0Q29udGVudFNpemUoKSxuPXRoaXMuY2FsY0ZvbnRTaXplKGkpLG89dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuaXNCdXR0b25WaXNpYmxlLHI9e2h5cGhlbmF0ZXM6ITB9O3JldHVybiBpLndpZHRoPjMwMCYmKHIuaHlwaGVuYXRlcz0hMSksbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2NvbnRlbnQiKSxzdHlsZTp7ImZvbnQtc2l6ZSI6bn19LHRoaXMucmVuZGVySW1hZ2UoKSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6IndyYXBwZXIiLGNsYXNzOnQoIl9fZGV0YWlscyIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImNvbnRlbnQiLGNsYXNzOnQoIl9fZGV0YWlscy13cmFwcGVyIil9LGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19jb250ZW50LXdyYXBwZXIiKX0sdGhpcy5yZW5kZXJUaXRsZVNpemUoMSxyKSx0aGlzLnJlbmRlclRpdGxlU2l6ZSgyLHIpLHRoaXMucmVuZGVyVGl0bGVTaXplKDMsciksdGhpcy5yZW5kZXJUaXRsZVNpemUoNCxyKSx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlclNpdGVMaW5rcygpKSx0aGlzLmltYWdlU2l6ZT9udWxsOmxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoid2FybmluZy1jb250YWluZXIiLGNsYXNzOnQoIl9fd2FybmluZy1jb250YWluZXIiKX0sdGhpcy5yZW5kZXJXYXJuaW5nKCkpLG8/dGhpcy5yZW5kZXJBY3Rpb25CdXR0b24oKTpudWxsLHRoaXMucmVuZGVyRG9tYWluQnV0dG9uKCJidXR0b24iKSx0aGlzLnJlbmRlckRvbWFpbkJ1dHRvbigiY29tcGFjdCIpKSksdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlP3RoaXMucmVuZGVyQ3VycmVuY3lMb2dvKCk6bnVsbCx0aGlzLmltYWdlU2l6ZT9udWxsOnRoaXMucmVuZGVyTG9nb0FuZEFnZSgibm8taW1hZ2UiKSl9LHQucHJvdG90eXBlLnJlbmRlckltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuaW1hZ2VTaXplLGk9dGhpcy5pbWFnZVN0eWxlO2lmKCF0KXJldHVybiBudWxsO3ZhciBuPXRoaXMucHJvcHMuYWR2LG89bi5pbWFnZXMscj1uLmFkZEluZm8sYT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKSxzPWEuYW5pbWF0ZWQsYz1hLmFuaW1hdGlvbkNvdW50O3JldHVybiBsWyJkZWZhdWx0Il0uY3JlYXRlKHkuTmV3TGluayx7cmVzb3VyY2VJZDoiaW1hZ2UiLGhyZWY6dGhpcy5wcm9wcy5hZHYudXJsLGNsYXNzOmUoIl9fbGluayIsIl9faW1hZ2UiKSxzdHlsZTppfSxsWyJkZWZhdWx0Il0uY3JlYXRlKGYuSW1hZ2VBZGFwdGl2ZSx7aW1hZ2VzOm98fHIuaWNvbixjb250ZXh0OnRoaXMucHJvcHMuY29udGV4dCxzbWFydENlbnRlcjohMCxhbmltYXRpb246cyxhbmltYXRpb25Db3VudDpjfSksdGhpcy5yZW5kZXJMb2dvQW5kQWdlKCJpbi1pbWFnZSIsITApLHRoaXMucmVuZGVyV2FybmluZygic3VidGxlIiksdGhpcy5yZW5kZXJBcHBJY29uKCkpfSx0LnByb3RvdHlwZS5yZW5kZXJMb2dvQW5kQWdlPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5iXyxuPXRoaXMubG9nbyxvPXRoaXMuaXNDdXJyZW5jeUxvZ29UaXRsZTtyZXR1cm4gbFsiZGVmYXVsdCJdLmNyZWF0ZShjLkNvbnRhaW5lcixudWxsLG4mJnQmJiFvP2xbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6aSgiX19sb2dvLXNoYWRvdy1iZyIpfSk6bnVsbCxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmkoIl9fbG9nby1hbmQtYWdlIil9LG8/bnVsbDp0aGlzLnJlbmRlckxvZ28oIm5vcm1hbCAiK2UpLHRoaXMucmVuZGVyQWdlKGUpKSl9LHQucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaXNUb3dlckxheW91dCxpPXRoaXMucHJvcHMuYWR2LmFidXNlVXJsLG49Qm9vbGVhbih0aGlzLmltYWdlU2l6ZSkmJih0fHx0aGlzLmlzUGljdHVyZUZsb2F0UmlnaHQoKSksbz1baT8iIjoibm8tb2Zmc2V0Il0scj17aGFzQmc6Qm9vbGVhbihuKX07cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nby5jYWxsKHRoaXMsbyxyKX0sdC5wcm90b3R5cGUucmVuZGVyQWN0aW9uQnV0dG9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuYWN0aW9uLGk9dGhpcy5hcHAsbj10aGlzLnByb3BzLmFkdi5kb21haW4sbz10LnRpdGxlLHI9dGhpcy5nZXREYXRhU291cmNlKCkuZ2V0TGFuZ3VhZ2UoKTtyZXR1cm4gbz09PV8uaTE4bigiTEVBUk5fTU9SRSIscikmJihvPV8uaTE4bigiTU9SRSIscikpLGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiYWN0aW9uLWJ1dHRvbiIsY2xhc3M6ZSgiX19jb250ZW50LWZvb3RlciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fYWN0aW9uLWNvbnRhaW5lciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKHkuTmV3TGluayx7aHJlZjp0LnVybCxjbGFzczplKCJfX2FjdGlvbi1idXR0b24iKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2FjdGlvbi1idXR0b24tdGV4dCIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKGcuVGV4dCx7dGV4dDpvfSkpLGkmJmkucHJpY2U/bFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2FjdGlvbi1idXR0b24tdGV4dCIpfSwiXHhhMFx1MjAxNCAiK2kucHJpY2UsIiAiLGxbImRlZmF1bHQiXS5jcmVhdGUoaC5SdWJsZSxudWxsKSk6bnVsbCksbj90aGlzLnJlbmRlckRvbWFpbigiX19hY3Rpb24tYnV0dG9uLWRvbWFpbiIsImFjdGlvbi1idXR0b24tZG9tYWluLXRleHQiKTpudWxsKSl9LHQucHJvdG90eXBlLnJlbmRlckRvbWFpbkJ1dHRvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJfO3JldHVybiBsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImRvbWFpbi0iK2UsY2xhc3M6dCgiX19jb250ZW50LWZvb3RlciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fZG9tYWluLWNvbnRhaW5lciIpfSx0aGlzLnJlbmRlckRvbWFpbigiX19kb21haW4tIitlKSkpfSx0LnByb3RvdHlwZS5yZW5kZXJEb21haW49ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmJfLG49dGhpcy5hY3Rpb24sbz10aGlzLnByb3BzLmFkdixyPW8uZG9tYWluLGE9by5mYXZpY29uLHM9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuZmF2aWNvbjtyZXR1cm4gbFsiZGVmYXVsdCJdLmNyZWF0ZSh5Lk5ld0xpbmsse3Jlc291cmNlSWQ6dCxocmVmOm4udXJsLGNsYXNzOmkoIl9fZG9tYWluIixlKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczppKCJfX2RvbWFpbi10ZXh0Iil9LGEmJnM/bFsiZGVmYXVsdCJdLmNyZWF0ZShtLHtzcmM6YSxtb2Q6Il90cmFuc3BhcmVudF9ub25lIixjbGFzczppKCJfX2Zhdmljb24iKX0pOm51bGwsbFsiZGVmYXVsdCJdLmNyZWF0ZShnLlRleHQse3RleHQ6cnx8bi50aXRsZX0pKSl9LHQucHJvdG90eXBlLmdldENzc1ZhcmlhYmxlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2V0dGluZ3MsdD10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5iZ0NvbG9yLnRvUmVhZGFibGUoKSxpPXUuY3JlYXRlQ29sb3IoZS50ZXh0Q29sb3J8fGUudXJsQ29sb3IpLnNldEFscGhhKC42NSksbj11LmNyZWF0ZUNvbG9yKGUuaG92ZXJDb2xvciksbz11LmNyZWF0ZUNvbG9yKGUuYmdDb2xvcnx8ImZmZiIpLmRhcmtlbiguMDUpLHI9dS5jcmVhdGVDb2xvcihlLnVybENvbG9yfHxlLnRleHRDb2xvciksYT1yLmNsb25lKCkuc2V0QWxwaGEoLjEpLHM9dS5jcmVhdGVDb2xvcihlLmhvdmVyQ29sb3IpLGw9cy5jbG9uZSgpLnNldEFscGhhKC4xKSxjPXUuY3JlYXRlQ29sb3IoZS51cmxDb2xvcnx8ZS50ZXh0Q29sb3IpLGQ9Yy5jbG9uZSgpLnNldEFscGhhKC41KSxwPSJ0cmFuc3BhcmVudCIsZj11LmNyZWF0ZUNvbG9yKGUuaG92ZXJDb2xvciksaD1mLmNsb25lKCkuc2V0QWxwaGEoLjUpLGc9InRyYW5zcGFyZW50IjtyZXR1cm4oZS5idXR0b25CZ0NvbG9yfHxlLnVybEJhY2tncm91bmRDb2xvcikmJihyPShhPXUuY3JlYXRlQ29sb3IoZS5idXR0b25CZ0NvbG9yfHxlLnVybEJhY2tncm91bmRDb2xvcikpLnRvUmVhZGFibGUoMTUwKSxzPShsPXMpLnRvUmVhZGFibGUoMTUwKSxjPShwPWQ9YSkudG9SZWFkYWJsZSgxNTApLGY9KGc9aD1sKS50b1JlYWRhYmxlKDE1MCkpLHthZHR1bmVDb2xvcjp0LGFjdGlvbkJ1dHRvblRleHRDb2xvcjpyLGFjdGlvbkJ1dHRvbkJnQ29sb3I6YSxhY3Rpb25CdXR0b25Ib3ZlclRleHRDb2xvcjpzLGFjdGlvbkJ1dHRvbkhvdmVyQmdDb2xvcjpsLGRvbWFpblRleHRDb2xvcjppLGRvbWFpbkhvdmVyVGV4dENvbG9yOm4sZG9tYWluQnV0dG9uVGV4dENvbG9yOmMsZG9tYWluQnV0dG9uQm9yZGVyQ29sb3I6ZCxkb21haW5CdXR0b25CZ0NvbG9yOnAsZG9tYWluQnV0dG9uSG92ZXJUZXh0Q29sb3I6Zixkb21haW5CdXR0b25Ib3ZlckJnQ29sb3I6Zyxkb21haW5CdXR0b25Ib3ZlckJvcmRlckNvbG9yOmgsd2FybmluZ0JnQ29sb3I6b319LHQucHJvdG90eXBlLmNhbGNGb250U2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQ7aWYodGhpcy5pc0NvbXBhY3RMYXlvdXQpcmV0dXJuIDExO3ZhciBuPXMuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDE2ZTMsMTQsMjRlNCwyMCksbz1OdW1iZXIodGhpcy5wcm9wcy5zZXR0aW5ncy5mb250U2l6ZSl8fDE7cmV0dXJuIE1hdGguY2VpbChuKHQqaSkqbyl9LHQucHJvdG90eXBlLmdldENzc01vZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzVG93ZXJMYXlvdXQsaT10aGlzLmlzQ29tcGFjdExheW91dCxuPXRoaXMubG9nbyxvPXRoaXMuZ2V0Q29udGVudFNpemUoKSxyPSIiO3I9dD8iX2xheW91dF90b3dlciI6dGhpcy5pc1BpY3R1cmVGbG9hdFJpZ2h0KCk/Il9sYXlvdXRfbGVhZGVyYm9hcmQtcmlnaHQiOiJfbGF5b3V0X2xlYWRlcmJvYXJkLWxlZnQiO3ZhciBzPSJub3JtYWwiO3JldHVybiBvLmhlaWdodD49MjIwJiZvLndpZHRoPj0yMjA/cz0iYmlnIjppJiYocz0iY29tcGFjdCIpLGEoZS5wcm90b3R5cGUuZ2V0Q3NzTW9kcy5jYWxsKHRoaXMpLHRoaXMucmVzb2x2ZU1vZHMoKSxbdGhpcy5pbWFnZVNpemU/Il9oYXMtaW1hZ2UiOiJfbm8taW1hZ2UiLHIsIl9zaXplXyIrcywiX2JvcmRlci10eXBlXyIrdGhpcy5wcm9wcy5zZXR0aW5ncy5ib3JkZXJUeXBlLHRoaXMucHJvcHMuaXNIb3Jpem9udGFsPyJfaW4tcm93IjoiX2luLWNvbHVtbiIsdGhpcy5wcm9wcy5pc1NpbmdsZSYmIl9zaW5nbGUiLG4mJiJfbG9nb18iKyh0aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGU/ImN1cnJlbmN5Ijoibm9ybWFsIildKX0sdC5wcm90b3R5cGUuZ2V0QWR0dW5lT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaXNUb3dlckxheW91dDtyZXR1cm4gdGhpcy5pbWFnZVNpemUmJihlfHx0aGlzLmlzUGljdHVyZUZsb2F0UmlnaHQoKSk/e21vZDoiX2JsYWNrLXdoaXRlIn06e319LHQucHJvdG90eXBlLmlzQ29tcGFjdFdhcm5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLmltYWdlU2l6ZSl9LHQucHJvdG90eXBlLmlzUGljdHVyZUZsb2F0UmlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1pbkhlaWdodCx0PXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLGk9dC5waWN0dXJlRmxvYXQsbj10LnVzZUZpcnN0QWRHcm93O3JldHVybiJyaWdodCI9PT1pfHxuJiZlPDIwMH0sdC5wcm90b3R5cGUuY3JlYXRlUmVzb3VyY2VUcmVlPWZ1bmN0aW9uKCl7dmFyIGU9W1siYm9keSIsMixbWyJzaXRlLWxpbmtzIiwxXV1dXSx0PVtbImFjdGlvbi1idXR0b24iLDQsZV0sWyJkb21haW4tYnV0dG9uIiwyLGVdLFsiZG9tYWluLWNvbXBhY3QiLDJdXTtyZXR1cm4gdGhpcy5pc0NvbXBhY3RMYXlvdXQ/W1sidGl0bGUtc2l6ZS00Iiw4LHRdLFsidGl0bGUtc2l6ZS0zIiw4LHRdLFsidGl0bGUtc2l6ZS0yIiw4LHRdLFsidGl0bGUtc2l6ZS0xIiw4LHRdXTpbWyJ0aXRsZS1zaXplLTQiLDgsdF0sWyJ0aXRsZS1zaXplLTMiLDgsdF0sWyJ0aXRsZS1zaXplLTIiLDgsdF0sWyJ0aXRsZS1zaXplLTEiLDYsdF1dfSx0LnByb3RvdHlwZS5wb3N0UHJvY2Vzc1NpemVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT1yKHt9LGUpLG49ZnVuY3Rpb24oZSxpKXt2YXIgbj10LmdldFJlc291cmNlRWxlbWVudChlKTtuJiZpKG4pfTtpZihuKCJhY3Rpb24tYnV0dG9uLWRvbWFpbi10ZXh0IixmdW5jdGlvbihlKXtlLmNsaWVudFdpZHRoPDI1MCYmZS5zY3JvbGxXaWR0aD4xLjIqZS5jbGllbnRXaWR0aCYmKGlbImFjdGlvbi1idXR0b24iXT1udWxsKX0pLHRoaXMuaXNDb21wYWN0TGF5b3V0KWZvcih2YXIgbz1mdW5jdGlvbihlKXt2YXIgdD0idGl0bGUtc2l6ZS0iK2U7bih0LGZ1bmN0aW9uKGUpe2Uuc2Nyb2xsV2lkdGg+MS41KmUuY2xpZW50V2lkdGgmJihpW3RdPW51bGwpfSl9LGE9MTthPD00O2ErKylvKGEpO3JldHVybiBpfSx0LmNvZXJjZVNpemU9cC5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoxNTAsbWF4OjEvMH0saGVpZ2h0OnttaW46NTAsbWF4OjEvMH0scmF0aW86e21pbjowLG1heDoxLzB9fSksdH0oZC5BZHZBZGFwdGl2ZUJhc2UpO3QuQWR2QWRhcHRpdmVWMz12fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmdlblJuZD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmFicygrbmV3IERhdGUpK01hdGgucm91bmQoMWU0Kk1hdGgucmFuZG9tKCkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iaW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWlbbl09YXJndW1lbnRzW25dO3JldHVybiBlLmFwcGx5KHQsaSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdFsiZGVmYXVsdCJdPWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmlubmVySFRNTD1lLHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHwiIn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNJblZpZXdwb3J0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoMzE1KS5pc09wZXJhTWluaT9lLm9mZnNldFdpZHRoPjAmJmUub2Zmc2V0SGVpZ2h0PjA6aSgzMTgpLmdldFJhdGlvSW5WaWV3cG9ydChlKT49KHR8fE51bWJlci5NSU5fVkFMVUUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DSEFSU0VUX1VURl84PSJ1dGYtOCIsdC5sb2FkU2NyaXB0PWZ1bmN0aW9uKGUpe3JldHVybiBpKDM5NCkubG9hZFNjcmlwdChlKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJue319KX0sdC5sb2FkQ3VzdG9tU2NyaXB0PWZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPSEwKSxpKDEzNykubG9hZEN1c3RvbVNjcmlwdCh7d2luOmUsc3JjOnQsb25Mb2FkOm4saGFzQ29yczpvfSl9LHQuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihlLHQsbil7dmFyIG89ZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtvLnRleHQ9dCxpKDgwKS5nZXRIZWFkKGUpLmFwcGVuZENoaWxkKG8pLG4oKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4hMH07dC5sb2FkU2NyaXB0TGl0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRyb3BDYWNoZU9uUmV0cnkscj12b2lkIDAhPT10JiZ0LGE9ZS5vbkJlZm9yZUxvYWQscz12b2lkIDA9PT1hP2koMTMpLm5vb3A6YSxsPWUucmV0cmllcyxjPXZvaWQgMD09PWw/MDpsO2lmKCFlLmNoZWNrTG9hZHx8IWUuY2hlY2tMb2FkKCkpe3ZhciB1PXMsZD0wO3JldHVybiByJiZjPjAmJih1PWZ1bmN0aW9uKGUpe2lmKHMoZSksZD4wKXt2YXIgdD0tMT09PWUuc3JjLmluZGV4T2YoIj8iKT8iPyI6IiYiLG49aSg4MikuZ2V0UmFuZG9tU3RyaW5nKDQpO2Uuc3JjKz10K259ZCsrfSksZnVuY3Rpb24gZSh0KXt2YXIgcj10LnNyYyxhPXQud2luLHM9dm9pZCAwPT09YT93aW5kb3c6YSxsPXQuY2hhcnNldCxjPXZvaWQgMD09PWw/aSg1NzMpLkNIQVJTRVRfVVRGXzg6bCx1PXQuYXN5bmMsZD12b2lkIDA9PT11fHx1LHA9dC5yZXRyaWVzLGY9dm9pZCAwPT09cD8wOnAsaD10Lm9uUmV0cnksZz12b2lkIDA9PT1oP2koMTMpLm5vb3A6aCxfPXQucmV0cnlEZWxheSx5PXZvaWQgMD09PV8/MDpfLG09dC5jaGVja0xvYWQsYj12b2lkIDA9PT1tP286bSx2PXQub25CZWZvcmVMb2FkLHc9dm9pZCAwPT09dj9pKDEzKS5ub29wOnYseD10Lm9uTG9hZCxrPXZvaWQgMD09PXg/aSgxMykubm9vcDp4LEM9dC5vbkVycm9yLFM9dm9pZCAwPT09Qz9pKDEzKS5ub29wOkMsTz1zLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLEk9ZnVuY3Rpb24obyl7Zj4wPyhnKG8pLGUobihuKHt9LHQpLHtzcmM6cixyZXRyaWVzOmYtMX0pKSk6UyhvKSxpKDYzKS5yZW1vdmVOb2RlRnJvbVBhcmVudChPKX07Ty50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLE8uYXN5bmM9ZCxPLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiBiKE8pP2soKTpJKG5ldyBFcnJvcigiY2hlY2tMb2FkIGZvciAiK3IrIiBmYWlsZWQiKSl9LE8ub25lcnJvcj1mdW5jdGlvbihlKXt0cnl7cy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7SShlKX0seSl9Y2F0Y2goZSl7fX0sTy5zcmM9cixPLmNoYXJzZXQ9Yyx3KE8pLGkoODApLmdldEhlYWQocykuYXBwZW5kQ2hpbGQoTyl9KG4obih7fSxlKSx7b25CZWZvcmVMb2FkOnV9KSl9ZS5vbkxvYWQmJmUub25Mb2FkKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmhhc0RpbWVuc2lvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9aSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpLG49dC53aWR0aCxvPXQuaGVpZ2h0O3JldHVybiBuPjAmJm8+MH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgaT1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksbikmJihlW25dPWlbbl0pfXJldHVybiBlfSxyPWkoMyksYT0obj1yKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07dmFyIHM9aSgyNTEpLGw9aSgyNTkpLGM9aSgwKSx1PWkoMTc0KSxkPXtpbml0QWR0dW5lOmZ1bmN0aW9uKGUpe3RoaXMuX2FkdHVuZVByb3BzPWV9LF9nZXRBYnVzZVVybDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hZHR1bmVQcm9wcy5hYnVzZVVybH0scmVuZGVyQWR0dW5lOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9nZXRBYnVzZVVybCgpKXJldHVybiBudWxsO3ZhciB0PXRoaXMuX2FkdHVuZVByb3BzO3JldHVybiBhWyJkZWZhdWx0Il0uY3JlYXRlKHMsbyh7cmVzb3VyY2VJZDoiYWR0dW5lIixjbGFzczp0aGlzLmJfKCJfX2FkdHVuZSIpLGxhbmd1YWdlOnQubGFuZ3VhZ2UsYWRJZDp0LmFkSWR9LGUpKX0scmVuZGVyRmVlZGJhY2s6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX2dldEFidXNlVXJsKCkpcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5wcm9wcyxpPXRoaXMuX2FkdHVuZVByb3BzLG49dGhpcy5nZXREYXRhU291cmNlKCkscj1uJiZuLmdldFRpdGxlJiZuLmdldFRpdGxlKCkscz1yJiZyLnVybDtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShsLG8oe3Jlc291cmNlSWQ6ImZlZWRiYWNrIixjbGFzczp0aGlzLmJfKCJfX2ZlZWRiYWNrIiksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsYWJ1c2VVcmw6dGhpcy5fZ2V0QWJ1c2VVcmwoKSxkaXJlY3RVcmw6cyxsYW5ndWFnZTppLmxhbmd1YWdlfSxlKSl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5fYWR0dW5lQ29tcG9uZW50PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJhZHR1bmUiKSx0aGlzLl9mZWVkYmFja0NvbXBvbmVudD10aGlzLmdldFJlc291cmNlQnlJZCgiZmVlZGJhY2siKSx0aGlzLl9fYmFzZSgpfSxwdXNoQ3NzOmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKSx0aGlzLnB1c2hTdHlsZXModSx7dXRpbDpjfSl9LG9uQ2xpY2tBZHR1bmU6ZnVuY3Rpb24oKXt0aGlzLl9mZWVkYmFja0NvbXBvbmVudC5maXRTaXplKCksdGhpcy5fZmVlZGJhY2tDb21wb25lbnQuaXNWaXNpYmxlKCk/KHRoaXMuY2xvc2VGZWVkYmFjaygpLHRoaXMuZmlyZUV2ZW50KCJjbG9zZTpmZWVkYmFjayIpKToodGhpcy5maXJlRXZlbnQoIm9wZW46ZmVlZGJhY2siKSx0aGlzLm9wZW5GZWVkYmFjaygpKX0sb25SZWNlaXZlZEZlZWRiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fYWJ1c2VkPSEwLHRoaXMuX2FkdHVuZUNvbXBvbmVudC5kZXN0cm95KCksdGhpcy5fX2Jhc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxjbG9zZUZlZWRiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fZ2V0QWJ1c2VVcmwoKSYmKHRoaXMuX2FidXNlZHx8KHRoaXMuX2ZlZWRiYWNrQ29tcG9uZW50LmhpZGUoKSx0aGlzLl9hZHR1bmVDb21wb25lbnQuZW5hYmxlVG9vbHRpcCgpKSl9LG9wZW5GZWVkYmFjazpmdW5jdGlvbigpe3RoaXMuX2FidXNlZHx8KHRoaXMuX2ZlZWRiYWNrQ29tcG9uZW50LnNob3coKSx0aGlzLl9hZHR1bmVDb21wb25lbnQuZGlzYWJsZVRvb2x0aXAoKSl9fTtlLmV4cG9ydHM9ZH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49MjUwLG89MTUwLHI9OTAsYT0zMDAscz05MCxsPTQyMCxjPTcyODtmdW5jdGlvbiB1KGUpe3JldHVybiBlPGx9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZT49bCYmZTxjfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGU+PWN9dC5MQVJHRT0ibCIsdC5TTUFMTD0icyIsdC5pc05hcnJvd0Jsb2NrPXUsdC5pc01lZGl1bUJsb2NrPWQsdC5pc1dpZGVCbG9jaz1wLHQuaXNDb3JyZWN0SGVpZ2h0PWZ1bmN0aW9uKGUsaSxsKXtyZXR1cm4gbD09PXQuTEFSR0U/aTxhOmw9PT10LlNNQUxMP2k8czohKHUoZSkmJmk+bnx8ZChlKSYmaT5vfHxwKGUpJiZpPnIpfSx0LmdldEhlaWdodD1mdW5jdGlvbihlLGkpe3JldHVybiBpPT09dC5MQVJHRT9hOmk9PT10LlNNQUxMP3M6dShlKT9uOmQoZSk/bzoocChlKSxyKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QXZlcmFnZUNvbG9yPWZ1bmN0aW9uKGUpe3ZhciB0PTAsaT0wLG49MDtpZighZSlyZXR1cm4gbnVsbDtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rPTQpdCs9ZVtvXSxpKz1lW28rMV0sbis9ZVtvKzJdO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHI9ZS5sZW5ndGgvNDt0PU1hdGguZmxvb3IodC9yKSxpPU1hdGguZmxvb3IoaS9yKSxuPU1hdGguZmxvb3Iobi9yKX1yZXR1cm5bdCxpLG5dfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pLHI9ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1pKDMpLHM9aSg0MyksbD1pKDY2KSxjPWkoNTcpLHU9aSg1OSksZD1pKDEwKSxwPWkoOTIpLGY9aSgyMjUpLGg9aSgyNjApLGc9aSgzMCksXz1pKDI0KSx5PWkoODkpLG09aSgxMzUpLGI9aSgzNSksdj1pKDEyNCksdz1pKDY1MykseD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubmFtZT0ic2ltaWxhci1idXR0b24iLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10aGlzLnByb3BzLG49aS5hZHYsbz1pLmRhdGFTb3VyY2Uscj1pLmNsYXNzTmFtZXMscz1vLmdldExhbmd1YWdlKCksYz1sLmNsYXNzTmFtZXNGYWN0b3J5KHIpLHU9dGhpcy5nZXRUaGVtZSgpLGQ9dSE9PWguU2ltaWxhckJ1dHRvblRoZW1lLkJBU0VfVEFCLHA9bi5zaW1pbGFyVGV4dCxfPWcuaTE4bigiU0lNSUxBUl9PRkZFUlNfU0hPVyIscyk7cmV0dXJuIHAmJihfPXRoaXMucHJldHRpZnkocCkpLGFbImRlZmF1bHQiXS5jcmVhdGUoYi5OZXdMaW5rLHtyZXNvdXJjZUlkOiJob3N0IixocmVmOnRoaXMucHJlcGFyZVVybCgpLGNsYXNzOmMoIjo6aG9zdCIsZSgpLGUoIl90aGVtZV8iK3UpKX0sYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpjKCI6OmJ1dHRvbiIsZSgiX19idXR0b24iKSl9LGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6YygiOjp0ZXh0IixlKCJfX3RleHQiKSl9LGQ/dGhpcy5yZW5kZXJJY29uKCk6bnVsbCxhWyJkZWZhdWx0Il0uY3JlYXRlKHkuSHRtbCx7dGV4dDpffSksZD9udWxsOnRoaXMucmVuZGVyQXJyb3coKSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoZi5PbkNoYW5nZUJsb2NrU3RhdHVzLHtjYWxsYmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdC5vbkNoYW5nZUJsb2NrU3RhdHVzKGUpfX0pKX0sdC5wcm90b3R5cGUucmVuZGVySWNvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl87cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19pY29uIF9faWNvbl9sZWZ0Iil9LGFbImRlZmF1bHQiXS5jcmVhdGUoInN2ZyIse3dpZHRoOiIxZW0iLGhlaWdodDoiMWVtIix2aWV3Qm94OiIwIDAgMTIgMTIifSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJnIix7ZmlsbDoibm9uZSIsImZpbGwtcnVsZSI6Im5vbnplcm8iLCJzdHJva2Utd2lkdGgiOiIxIiwic3Ryb2tlLWxpbmVjYXAiOiJzcXVhcmUifSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJwYXRoIix7ZDoiTTMuNSwzLjUgTDMuNSwxMC41IEwxMC41LDEwLjUgTDEwLjUsMy41IEwzLjUsMy41IFoifSksYVsiZGVmYXVsdCJdLmNyZWF0ZSgicGF0aCIse2Q6Ik0wLjUsMC41IEw3LjUsMC41In0pLGFbImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNMC41LDAuNSBMMC41LDcuNSJ9KSkpKX0sdC5wcm90b3R5cGUucmVuZGVyQXJyb3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfO3JldHVybiBhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9faWNvbiBfX2ljb25fcmlnaHQiKX0sYVsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7d2lkdGg6IjFlbSIsaGVpZ2h0OiIxZW0iLHZpZXdCb3g6IjAgMCA5IDkifSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJnIix7ZmlsbDoibm9uZSIsImZpbGwtcnVsZSI6Im5vbnplcm8iLCJzdHJva2Utd2lkdGgiOiIxIiwic3Ryb2tlLWxpbmVjYXAiOiJzcXVhcmUifSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJwYXRoIix7ZDoiTTIuNSwwLjUgTDguNSwwLjUifSksYVsiZGVmYXVsdCJdLmNyZWF0ZSgicGF0aCIse2Q6Ik04LjUsMC41IEw4LjUsNi41In0pLGFbImRlZmF1bHQiXS5jcmVhdGUoInBhdGgiLHtkOiJNOCwxIEwwLjUsOC4xMzE3Mjc5OCJ9KSkpKX0sdC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXModyx0aGlzLmdldENzc1ZhcmlhYmxlcygpKX0sdC5wcm90b3R5cGUuZ2V0Q3NzVmFyaWFibGVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuYnV0dG9uQ29sb3IsaT1lLmxpbmtDb2xvcixuPXRoaXMucHJvcHMuc2V0dGluZ3Msbz1zLmNyZWF0ZUNvbG9yKG4uYmdDb2xvcnx8bi5zaXRlQmdDb2xvcnx8IiNGRkYiKSxyPW4uYmdDb2xvcj9vOiJ0cmFuc3BhcmVudCIsYT1vLnRvUmVhZGFibGUoKSxsPW8uaXNMaWdodCgpP28ubWl4KCIjMDAwIiwuMik6by5taXgoIiNmZmYiLC4zKSxjPXMuY3JlYXRlQ29sb3IodHx8bi51cmxDb2xvcnx8IiMwMDczRTYiKSx1PWMudG9SZWFkYWJsZSgpLGQ9Yy5pc0xpZ2h0KCk/Yy5kYXJrZW4oLjEpOmMubGlnaHRlbiguMSkscD1kLnRvUmVhZGFibGUoKSxmPXMuY3JlYXRlQ29sb3IoaXx8IiMwMDczRTYiKSxoPWYudG9SZWFkYWJsZSgpLGc9Zi5pc0xpZ2h0KCk/Zi5kYXJrZW4oLjEpOmYubGlnaHRlbiguMSk7cmV0dXJue21pbkhlaWdodDo0MCxiZ0NvbG9yOnIsdGV4dENvbG9yOmEsYm9yZGVyQ29sb3I6bCxidXR0b25CZ0NvbG9yOmMsYnV0dG9uVGV4dENvbG9yOnUsaG92ZXJCdXR0b25CZ0NvbG9yOmQsaG92ZXJCdXR0b25UZXh0Q29sb3I6cCxsaW5rQmdDb2xvcjpmLGxpbmtUZXh0Q29sb3I6aCxob3ZlckxpbmtCZ0NvbG9yOmcsaG92ZXJMaW5rVGV4dENvbG9yOmcudG9SZWFkYWJsZSgpfX0sdC5wcm90b3R5cGUuZ2V0VGhlbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS50aGVtZSxpPWUuZGF0YVNvdXJjZS5nZXRTaW1pbGFyRXhwZXJpbWVudCgpLnRoZW1lO3JldHVybiB0fHxoLlNpbWlsYXJCdXR0b25UaGVtZUJpdHNbaS0xXXx8aC5TaW1pbGFyQnV0dG9uVGhlbWUuVEFCfSx0LnByb3RvdHlwZS5wcmVwYXJlVXJsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGF0YVNvdXJjZSxpPWUuYWR2LG49dC5nZXRUZXN0dGFnUHJvcHMoKSxvPXsidGVzdC10YWciOm5ldyBtLkRpcmVjdFRlc3R0YWcocihyKHt9LG4pLHtpc1NpbWlsYXJPZmZlcnM6ITB9KSkudG9TdHJpbmcoKSwiYWRiLWJpdHMiOiIxIn0sYT1uZXcgXy5Vcmwoe2hvc3Q6aS5zaW1pbGFyVXJsLHBhcmFtczpvfSk7cmV0dXJuIG5ldyB2LlRhcmdldFVybExpbmsoYS5nZXRVcmwoKSl9LHQucHJvdG90eXBlLm9uQ2hhbmdlQmxvY2tTdGF0dXM9ZnVuY3Rpb24oZSl7aWYoZT49cC5CbG9ja1N0YXR1cy5SZWFkeSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImhvc3QiKTtjLmdldEVsZW1lbnRJbm5lclNpemUodC5nZXRFbGVtZW50KCkpLmhlaWdodD40MCYmdGhpcy5hZGRDbGFzcyh0aGlzLmJfKCJfc2l6ZV9zIikpfXJldHVybiExfSx0LnByb3RvdHlwZS5wcmV0dGlmeT1mdW5jdGlvbihlKXt2YXIgdD11LnByZXR0aWZ5KGUpO3JldHVybiB0PXQucmVwbGFjZSgvKFx1MDQxZlx1MDQzZVx1MDQzYVx1MDQzMFx1MDQzN1x1MDQzMFx1MDQ0Mlx1MDQ0YyBcdTA0MzVcdTA0NDlcdTA0MzUgKSguKykkLywiJDE8c3BhbiBjbGFzcz0nIit0aGlzLmJfKCJfX2IiKSsiJz4kMjwvc3Bhbj4iKX0sdH0oZCk7dC5TaW1pbGFyQnV0dG9uPXh9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVsZXRlVW5kZWZpbmVkUHJvcGVydGllcz1mdW5jdGlvbihlKXt2YXIgdD17fTtmb3IodmFyIG4gaW4gZSlpKDEzOSkuaGFzT3duUHJvcGVydHkoZSxuKSYmdm9pZCAwIT09ZVtuXSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSkscj1mdW5jdGlvbigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYT1pKDMpLHM9aSgyNDApLGw9aSgzOTUpLGM9aSgzNDQpLHU9aSg2NzUpLGQ9aSg2NzYpLHA9aSg0MDkpLGY9aSgyMjgpLGg9aSg2NzkpLGc9aSg2ODEpLF89aSg2ODMpLHk9aSg2ODUpLG09aSg2ODcpLGI9aSgyNTUpLHY9aSgyNjEpO2Z1bmN0aW9uIHcoZSl7cmV0dXJuIEJvb2xlYW4oZS5pbWFnZSl9dmFyIHg9bmV3IHMuQWR2UmVuZGVyZXJzU2V0KHtuYW1lOiJuby1pbWFnZSIsY29lcmNlU2l6ZTp1LkFkdk5vSW1hZ2UuY29lcmNlU2l6ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUodS5BZHZOb0ltYWdlLHIoe30sZSkpfX0sW3tuYW1lOiJyb3ciLGNvZXJjZVNpemU6ZC5BZHZSb3cuY29lcmNlU2l6ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoZC5BZHZSb3cscih7fSxlKSl9fSx7bmFtZToibGVhZGVyYm9hcmQiLGNvZXJjZVNpemU6Yy5BZHZMZWFkZXJib2FyZC5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShjLkFkdkxlYWRlcmJvYXJkLHIoe30sZSkpfSx2YWxpZGF0ZTp3fSx7bmFtZToibGVhZGVyYm9hcmQtYXZpdG8iLGNvZXJjZVNpemU6aC5BZHZMZWFkZXJib2FyZEF2aXRvLmNvZXJjZVNpemUscmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBhWyJkZWZhdWx0Il0uY3JlYXRlKGguQWR2TGVhZGVyYm9hcmRBdml0byxyKHt9LGUpKX0sdmFsaWRhdGU6d30se25hbWU6ImxlYWRlcmJvYXJkVmVydGljYWwwMzE4Iixjb2VyY2VTaXplOnkuQWR2TGVhZGVyYm9hcmRWZXJ0aWNhbDAzMTguY29lcmNlU2l6ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoeS5BZHZMZWFkZXJib2FyZFZlcnRpY2FsMDMxOCxyKHt9LGUpKX0sdmFsaWRhdGU6d30se25hbWU6InNxdWFyZSIsY29lcmNlU2l6ZTpwLkFkdlNxdWFyZS5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShwLkFkdlNxdWFyZSxyKHt9LGUpKX0sdmFsaWRhdGU6d30se25hbWU6InRvd2VyIixjb2VyY2VTaXplOmYuQWR2VG93ZXIuY29lcmNlU2l6ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoZi5BZHZUb3dlcixyKHt9LGUpKX0sdmFsaWRhdGU6d30se25hbWU6InRvd2VyLWF2aXRvIixjb2VyY2VTaXplOmcuQWR2VG93ZXJBdml0by5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShnLkFkdlRvd2VyQXZpdG8scih7fSxlKSl9LHZhbGlkYXRlOnd9LHtuYW1lOiJ0b3dlci1nZW8iLGNvZXJjZVNpemU6Xy5BZHZUb3dlckdlby5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShfLkFkdlRvd2VyR2VvLHIoe30sZSkpfSx2YWxpZGF0ZTp3fSx7bmFtZToidG93ZXJWZXJ0aWNhbDAzMTgiLGNvZXJjZVNpemU6bS5BZHZUb3dlclZlcnRpY2FsMDMxOC5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShtLkFkdlRvd2VyVmVydGljYWwwMzE4LHIoe30sZSkpfSx2YWxpZGF0ZTp3fSx7bmFtZToiYWRhcHRpdmVWMyIsY29lcmNlU2l6ZTpsLkFkdkFkYXB0aXZlVjMuY29lcmNlU2l6ZSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUobC5BZHZBZGFwdGl2ZVYzLHIoe30sZSkpfX1dKSxrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuZ2V0QWR2UmVuZGVyZXJzU2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHQucHJvdG90eXBlLmdldEFsdGVybmF0aXZlU2tpbnNTZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNldHRpbmdzLnNraW4sdD1bInJvdyIsInNxdWFyZSIsImxlYWRlcmJvYXJkIix0aGlzLmlzR2VvKCk/InRvd2VyLWdlbyI6IiIsInRvd2VyIl07cmV0dXJuIGUmJih0PWUuc3BsaXQoL1tccyw7XSsvKSksdH0sdC5wcm90b3R5cGUucHVzaENzcz1mdW5jdGlvbigpe2UucHJvdG90eXBlLnB1c2hDc3MuY2FsbCh0aGlzKSx0aGlzLnB1c2hTdHlsZXModix0aGlzLmdldFRoZW1lKCkpfSx0LnByb3RvdHlwZS5pc0dlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFkdkxpc3QmJjAhPT10aGlzLmFkdkxpc3RbMF0uZ2VvU2tpblZlcn0sdH0oYi5CbG9ja0FkYXB0aXZlQmFzZSk7ZS5leHBvcnRzPWt9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzNCksYT1pKDMpLHM9aSg2MSksbD1pKDQ0KSxjPWkoNzMpLHU9aSgzNSksZD1pKDY5KSxwPWkoNjc4KSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQucHJpY2VMYWJlbEVuYWJsZWQ9ITEsdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubW9kPSJzcXVhcmUiLHRoaXMuY29lcmNlU2l6ZT10LmNvZXJjZVNpemUsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyksdGhpcy5wcm9wcy5jb250ZXh0LnNldFBhcmFtcyh7d2FybmluZ0hlaWdodDp0aGlzLmdldFdhcm5pbmdNaW5IZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bcF19LHQucHJvdG90eXBlLmdldEFkdHVuZU9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm57bW9kOlt0aGlzLmltYWdlU2l6ZT8iX2JsYWNrLXdoaXRlIjoiIix0aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGU/Il9zaGFycCI6IiJdLmpvaW4oIiAiKX19LHQucHJvdG90eXBlLmNhbGNGb250U2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJuIHIuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDNlNCwxMyw0ZTUsNDApKHQqaSl9LHQucHJvdG90eXBlLmNyZWF0ZVJlc291cmNlVHJlZT1mdW5jdGlvbigpe3JldHVybltbInRpdGxlIiwxXV19LHQucHJvdG90eXBlLnJlbmRlckltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCksdD1lLmFuaW1hdGVkLGk9ZS5hbmltYXRpb25Db3VudCxuPXRoaXMucHJvcHMuYWR2LG89bi5pbWFnZXMscj1uLmFkZEluZm87cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoYy5JbWFnZUFkYXB0aXZlLHtpbWFnZXM6b3x8ci5pY29uLGNvbnRleHQ6dGhpcy5wcm9wcy5jb250ZXh0LGFuaW1hdGlvbjp0LGFuaW1hdGlvbkNvdW50Omksc21hcnRDZW50ZXI6ITAsZmFkZTohMH0pfSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYl8saT10aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGUsbj10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5jbGlja2FibGVCYWNrZ3JvdW5kLG89dm9pZCAwPT09bnx8bixyPXRoaXMuZ2V0RGF0YVNvdXJjZSgpLmlzRnVsbENsaWNrYWJsZTtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShkLkNvbnRhaW5lcixudWxsLG8mJiFyP2FbImRlZmF1bHQiXS5jcmVhdGUodS5OZXdMaW5rLHt0eXBlOiJvdmVybGF5IixocmVmOnRoaXMucHJvcHMuYWR2LnVybH0pOm51bGwsYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOmUsY2xhc3M6dCgiX19jb250ZW50Iil9LHRoaXMucmVuZGVySW1hZ2UoKSxpP3RoaXMucmVuZGVyQ3VycmVuY3lMb2dvKCk6dGhpcy5yZW5kZXJMb2dvKCJzdWJ0bGUiLCEwKSx0aGlzLnJlbmRlckxvZ29TdHViKCksdGhpcy5yZW5kZXJBcHBJY29uKCksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2RldGFpbHMiKX0sdGhpcy5yZW5kZXJUaXRsZSgpLHRoaXMucmVuZGVyQWdlKCkpLHRoaXMucmVuZGVyV2FybmluZygpKSl9LHQucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nbz1mdW5jdGlvbigpe3ZhciB0PVt0aGlzLnByb3BzLmFkdi5hYnVzZVVybD8iIjoibm8tb2Zmc2V0Il0saT17aGFzQmc6Qm9vbGVhbih0aGlzLmltYWdlU2l6ZSl9O3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ28uY2FsbCh0aGlzLHQsaSl9LHQuY29lcmNlU2l6ZT1sLmNyZWF0ZVNpemVDb2VyY2VyKHt3aWR0aDp7bWluOjE1OCxtYXg6MS8wfSxoZWlnaHQ6e21pbjoxMTgsbWF4OjEvMH0scmF0aW86e21pbjpsLk1JTl9JTUFHRV9SQVRJTyxtYXg6bC5NQVhfSU1BR0VfUkFUSU99fSksdH0ocy5BZHZBZGFwdGl2ZUJhc2UpO3QuQWR2U3F1YXJlPWZ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbyxyPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYSxzPWkoMzQpLGw9aSgzKSxjPWkoNDMpLHU9aSgzODYpLGQ9aSgzODMpLHA9aSgxKSxmPWkoMzg3KSxoPWkoMTE5KSxnPWkoMjA4KSxfPWkoMjA5KSx5PWkoMTQ5KSxtPWkoNjEpLGI9aSgxNTUpLHY9aSg0NCksdz1pKDkyKSx4PWkoMjI1KSxrPWkoMzQzKSxDPWkoMzM3KSxTPWkoMjM4KSxPPWkoMjM3KSxJPWkoODYpLEE9aSgyMjcpLFQ9aSgxNzMpLEU9aSg2OTApLFI9aSgzNDcpLE09aSgxNjIpLFA9aSg2OTEpLEw9aSg2OTIpOyFmdW5jdGlvbihlKXtlWyJEQVJLIl09ImRhcmsiLGVbIkxJR0hUIl09ImxpZ2h0In0oYXx8KGE9e30pKTt2YXIgQj0oKG89e30pW2EuREFSS109e2J1dHRvbkJnQ29sb3I6IiNGRkZGRkYxOSIsYnV0dG9uVGV4dENvbG9yOiIjRkZGRkZGIn0sb1thLkxJR0hUXT17YnV0dG9uQmdDb2xvcjoiIzAwNzNFNjE5IixidXR0b25UZXh0Q29sb3I6IiMwMDczRTYifSxvKSxOPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuZGVzdHJveWVkPSExLHR9cmV0dXJuIHIodCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpO3ZhciBpPXRoaXMucHJvcHMsbj1pLmFkdixvPWkuc2V0dGluZ3Mscj1uLndhcm5pbmcscz1uLmFkZEluZm8sbD1jLmNyZWF0ZUNvbG9yKG8uYmdDb2xvcnx8by5zaXRlQmdDb2xvcnx8IiNmZmYiKTt0aGlzLnRoZW1lPWwuaXNMaWdodCgpP2EuTElHSFQ6YS5EQVJLLHRoaXMuaXNIZWFkZXJPblRvcD0hMSx0aGlzLmhhc0FwcEljb249Qm9vbGVhbihzJiZzLmljb24mJnMuaWNvbi5sZW5ndGgpLHRoaXMuaGFzSW1hZ2U9Qm9vbGVhbihuLmltYWdlcyYmbi5pbWFnZXMubGVuZ3RoKXx8dGhpcy5oYXNBcHBJY29uLHRoaXMuaGFzR29CdXR0b249IXRoaXMuaXNIZWFkZXJPblRvcCYmIXRoaXMuaGFzQXBwSWNvbiYmdGhpcy53aWR0aD4yNjAmJiEwLHRoaXMuaGFzUGljdHVyZVN0dWI9ITAsdGhpcy5oYXNIeXBoZW5hdGVzSW5UaXRsZT10aGlzLndpZHRoPCh0aGlzLmhhc0dvQnV0dG9uPzI4MDoyMjApLHRoaXMubW9kPVsicG9zdGVyIiwiYm9yZGVyLXJhZGl1c18iK28uYm9yZGVyUmFkaXVzLCJ0aGVtZV8iK3RoaXMudGhlbWUsImhlYWRlci1wb3NpdGlvbl8iKyh0aGlzLmlzSGVhZGVyT25Ub3A/InRvcCI6ImJvdHRvbSIpLCJoYXMtd2FybmluZ18iK0Jvb2xlYW4ociksIndpdGgtZ28tYnV0dG9uXyIrdGhpcy5oYXNHb0J1dHRvbl0uam9pbigiICIpfSx0LnByb3RvdHlwZS5jbGFtcFRpdGxlTGluZXM9ZnVuY3Rpb24oZSl7aWYoIXUuaXNDc3NQcm9wU3VwcG9ydGVkKCJ3ZWJraXRCb3hPcmllbnQiKXx8IXUuaXNDc3NQcm9wU3VwcG9ydGVkKCJ3ZWJraXRMaW5lQ2xhbXAiKSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoInRpdGxlIikuZ2V0UmVzb3VyY2VCeUlkKCJwdWJsaXNoZXJzLXRleHQiKSxpPXQmJnQuZ2V0RWxlbWVudCgpO2kuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg+ZSYmZi50cmltVGV4dEJ5TnVtYmVyT2ZMaW5lcyhpLGUpfX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5zdG9wVmlzaWJpbGl0eU9ic2VydmVyJiZ0aGlzLnN0b3BWaXNpYmlsaXR5T2JzZXJ2ZXIoKX0sdC5wcm90b3R5cGUuY2FsY0ZvbnRTaXplPWZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGg7ZS5oZWlnaHQ7cmV0dXJuIHMuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDE4MCwxMSw0MDAsMTcpKHQpfSx0LnByb3RvdHlwZS5nZXRBZHR1bmVPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJue21vZDpbIl9ibGFjay13aGl0ZSIsdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlPyJfc2hhcnAiOiIiXS5qb2luKCIgIil9fSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10aGlzLmJfO3JldHVybiBsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmkoIl9fY29udGVudCIpLHJlc291cmNlSWQ6ZX0sdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlP3RoaXMucmVuZGVyQ3VycmVuY3lMb2dvKCk6dGhpcy5yZW5kZXJMb2dvKCJzdWJ0bGUiLCEwKSxudWxsLHRoaXMuaGFzSW1hZ2U/dGhpcy5yZW5kZXJQaWN0dXJlKCk6dGhpcy5yZW5kZXJQaWN0dXJlU3R1YigpLGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiYmFzZSIsY2xhc3M6aSgiX19iYXNlIil9LGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6aSgiX19iYXNlLWl0ZW1zIikscmVzb3VyY2VJZDoiYmFzZS1pdGVtcyJ9LHRoaXMucmVuZGVyV2FybmluZygpKSksdGhpcy5yZW5kZXJHbygpLHRoaXMucmVuZGVySGVhZGVyKCksbFsiZGVmYXVsdCJdLmNyZWF0ZSh4Lk9uQ2hhbmdlQmxvY2tTdGF0dXMse2NhbGxiYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0Lm9uQ2hhbmdlQmxvY2tTdGF0dXMoZSl9fSkpfSx0LnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ289ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5wcm9wcy5hZHYuYWJ1c2VVcmw/IiI6Im5vLW9mZnNldCJdO3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ28uY2FsbCh0aGlzLHQse2hhc0JnOiEwfSl9LHQucHJvdG90eXBlLnJlbmRlckRvbWFpbj1mdW5jdGlvbihlKXt2YXIgdD0odm9pZCAwPT09ZT97fTplKS5lbmFibGVGYXZpY29uLGk9dm9pZCAwIT09dCYmdCxuPXRoaXMuYl8sbz10aGlzLnByb3BzLmFkdixyPW8uZG9tYWluLGE9by5mYXZpY29uO3JldHVybiByP2xbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6bigiX19kb21haW4iKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpuKCJfX2RvbWFpbi10ZXh0Iil9LGkmJmE/bFsiZGVmYXVsdCJdLmNyZWF0ZShNLHtzcmM6YSxjbGFzczpuKCJfX2Zhdmljb24iKX0pOm51bGwsbFsiZGVmYXVsdCJdLmNyZWF0ZShJLlRleHQse3RleHQ6cn0pKSk6bnVsbH0sdC5wcm90b3R5cGUucmVuZGVyUGljdHVyZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmJfLGk9dGhpcy5wcm9wcy5hZHYuaW1hZ2VzLG49dGhpcy5wcm9wcy5hZHYuYWRkSW5mbztyZXR1cm4gaXx8KGk9bi5pY29uKSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJnIixjbGFzczp0KCJfX3BpY3R1cmUtd3JhcHBlciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKFMuSW1hZ2Use3Jlc291cmNlSWQ6InBpY3R1cmUiLGltYWdlczppLHNpemU6ImNvdmVyIixzbWFydENlbnRlcjohMCxkaXNhYmxlRml0T25Nb3VudDohMCxvbkxvYWQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUub25QaWN0dXJlTG9hZCh0KX0sY2xhc3NOYW1lczp7Ijo6aG9zdCI6dCgiX19waWN0dXJlIiksIjo6Y29udGFpbmVyIjp0KCJfX3BpY3R1cmUtY29udGFpbmVyIiksIjo6aW1nIjp0KCJfX3BpY3R1cmUtaW1nIil9fSkpfSx0LnByb3RvdHlwZS5yZW5kZXJQaWN0dXJlU3R1Yj1mdW5jdGlvbigpe2lmKCF0aGlzLmhhc1BpY3R1cmVTdHViKXJldHVybiBudWxsO3ZhciBlPXRoaXMuYl8sdD1UWyJkZWZhdWx0Il0oMCwxMDApLGk9VFsiZGVmYXVsdCJdKDAsMTAwKTtyZXR1cm4gbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2ltYWdlLXN0dWIiKSxzdHlsZTp7ImJhY2tncm91bmQtcG9zaXRpb24iOnQrIiUgIitpKyIlIn19KX0sdC5wcm90b3R5cGUucmVuZGVySGVhZGVyPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLGk9dGhpcy5iXyxuPXRoaXMucHJvcHMuYWR2LmFnZTtyZXR1cm4gbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJtYWluIixjbGFzczppKCJfX21haW4iKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczppKCJfX2hlYWRlciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmkoIl9faGVhZGVyLWNvbnRhaW5lciIpfSwoZT0ibm9ybWFsIixsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImhlYWRlci0iK2UsY2xhc3M6aSgiX19oZWFkZXItY29udGVudCIsIl9faGVhZGVyLWNvbnRlbnRfIitlKX0sdC5yZW5kZXJUaXRsZSh7Y2xhc3NOYW1lOmkoIl9fdGl0bGUiLCJfX3RpdGxlXyIrZSl9KSkpKSx0aGlzLnJlbmRlckFwcEljb24oKSx0aGlzLnJlbmRlckdvU3R1YigpKSxuP2xbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6aSgiX19hZ2UiKX0sbik6bnVsbCl9LHQucHJvdG90eXBlLnJlbmRlcldhcm5pbmc9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9Im1haW4iKTt2YXIgdD10aGlzLmJfLGk9dGhpcy53YXJuaW5nO2lmKCFpKXJldHVybiBudWxsO3ZhciBuPXsibWluLWhlaWdodCI6dGhpcy5nZXRXYXJuaW5nTWluSGVpZ2h0KCl9O3JldHVybiBsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3N0eWxlOm4scmVzb3VyY2VJZDoid2FybmluZyIsb25DbGljazpmdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpfSxjbGFzczp0KCJfX3dhcm5pbmciLCJfX3dhcm5pbmdfIisoaS5pbXBvcnRhbnQ/ImltcG9ydGFudCI6Im5vcm1hbCIpLCJfX3dhcm5pbmdfIitlKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZShPLlNjcm9sbCxudWxsLGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX193YXJuaW5nLXRleHQiKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZShJLlRleHQse3RleHQ6aS50ZXh0fSkpKSl9LHQucHJvdG90eXBlLnJlbmRlclRpdGxlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMuYWR2LnRpdGxlLGk9ZS5oeXBoZW5hdGVzLG49dm9pZCAwPT09aT90aGlzLmhhc0h5cGhlbmF0ZXNJblRpdGxlOmk7cmV0dXJuIHQ/bFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHt0aXRsZTpSLnJlbW92ZUh0bWxBbmRTcGVjaWFsQ2hhcnModCkscmVzb3VyY2VJZDplLnJlc291cmNlSWQsY2xhc3M6ZS5jbGFzc05hbWV9LGxbImRlZmF1bHQiXS5jcmVhdGUoSS5UZXh0LHtyZXNvdXJjZUlkOiJ0aXRsZSIsaHlwaGVuYXRlczpuLHByZXR0aWZ5OiEwLHByZXR0aWZ5T3B0aW9uczp7Z2x1ZVByZXBvc2l0aW9uczohMX0sdGV4dDpFLm1ha2VFbmdsaXNoV29yZHNMaW5lQnJlYWthYmxlKHQpfSkpOm51bGx9LHQucHJvdG90eXBlLnJlbmRlckdvPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXztyZXR1cm4gdGhpcy5oYXNHb0J1dHRvbj9sWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZ28tYnV0dG9uLWNvbnRhaW5lciIpfSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJzdmciLHt3aWR0aDoiMWVtIixoZWlnaHQ6IjFlbSIsY2xhc3M6ZSgiX19nby1idXR0b24iKSx2aWV3Qm94OiIwIDAgNjQgNjQifSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJnIix7ImZpbGwtcnVsZSI6Im5vbnplcm8iLGZpbGw6Im5vbmUifSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJwYXRoIix7ZDoiTTAgMzJjMCAyNC44ODkgNy4xMjkgMzIgMzIgMzJzMzItNy4xMTEgMzItMzJTNTYuODcxIDAgMzIgMEM3LjExMSAwIDAgNy4xMTEgMCAzMnoiLGNsYXNzOmUoIl9fZ28tYnV0dG9uLWJnIil9KSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJwYXRoIix7ZDoiTTE2LjAwMiAzMS44MzJjLS4wMDMuMDUxLS4wMDMuMTAyIDAgLjEzM2ExLjUxIDEuNTEgMCAwIDAgLjQ1MyAxLjA5NiAxLjU1IDEuNTUgMCAwIDAgMS4xMDQuNDQ0aDI0LjIxNmwtOS4wODEgOC44MzNhMS41MSAxLjUxIDAgMCAwLS40NzggMS40OTcgMS41MyAxLjUzIDAgMCAwIDEuMTEzIDEuMTE3IDEuNTUgMS41NSAwIDAgMCAxLjUwOS0uNDMybDExLjc3OS0xMS40NWExLjUxIDEuNTEgMCAwIDAgMC0yLjE3MUwzNC44NDEgMTkuNDUyYy0uNDQxLS40NC0xLjEwOC0uNTczLTEuNjg3LS4zMzZhMS41MiAxLjUyIDAgMCAwLS45NTEgMS40MjMgMS41MSAxLjUxIDAgMCAwIC40NzkgMS4wODFsOS4wOTMgOC44NDRIMTcuNTYxYTEuNTQgMS41NCAwIDAgMC0xLjU1OSAxLjM2OXoiLGNsYXNzOmUoIl9fZ28tYnV0dG9uLWFycm93Iil9KSkpKTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJHb1N0dWI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfO3JldHVybiB0aGlzLmhhc0dvQnV0dG9uP2xbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19nby1idXR0b24tc3R1YiIpfSk6bnVsbH0sdC5wcm90b3R5cGUucmVuZGVyQXBwSWNvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLnByb3BzLmFkdjtyZXR1cm4gdGhpcy5oYXNBcHBJY29uP2xbImRlZmF1bHQiXS5jcmVhdGUoUy5JbWFnZSx7cmVzb3VyY2VJZDoiYXBwLWljb24iLGltYWdlczp0LmFkZEluZm8uaWNvbixzaXplOiJjb250YWluIixhbHQ6IiIsZGlzYWJsZUZpdE9uTW91bnQ6ITAsdXNlQmFja2dyb3VuZE1ldGhvZDohMCxjbGFzc05hbWU6ZSgiX19hcHAtaWNvbiIpfSk6bnVsbH0sdC5wcm90b3R5cGUuY3JlYXRlUmVzb3VyY2VUcmVlPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLmdldENzc1ZhcmlhYmxlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMubWluSGVpZ2h0LHQ9dGhpcy53aWR0aCxpPXMuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDEzMTIwLDE2LDIzNDAwLDIzKSxuPU1hdGgucm91bmQoaSh0Kk1hdGgucm91bmQoLjMqZSkpKSxvPTEuMTQqbiozLHI9TWF0aC5tYXgoMTMsTWF0aC5yb3VuZChvLzQvMS4xNCkpLGE9TWF0aC5yb3VuZChvKzE4KSsxLGw9TWF0aC5yb3VuZChNYXRoLm1pbigxNywuOCpuKSksdT1NYXRoLnJvdW5kKE1hdGgubWF4KDEzLC44KmwpKSxwPWUtKGErOCksZj1NYXRoLm1pbig2NCxvKSxoPUJbdGhpcy50aGVtZV0sZz10aGlzLnByb3BzLnNldHRpbmdzLF89Im1hbnVhbCI9PT1nLnRoZW1lP2c6e30seT1jLmNyZWF0ZUNvbG9yKF8uYnV0dG9uQmdDb2xvcnx8aC5idXR0b25CZ0NvbG9yKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6ZSxwYWRkaW5nOjgsaGVhZGVyUGFkZGluZzo5LGhlYWRlckhlaWdodDphLGhlYWRlclRvcE9mZnNldDpwLGdvQnV0dG9uU2l6ZTpmLGZvbnRTaXplOmwsZm9udFNpemVTbWFsbDp1LHRpdGxlRm9udFNpemU6bix0aXRsZUxpbmVIZWlnaHQ6MS4xNCx0aXRsZU1heEhlaWdodDozLjQyLHRpdGxlRm9udFNpemVTbWFsbDpyLGJ1dHRvbkJnQ29sb3I6eSxidXR0b25UZXh0Q29sb3I6Yy5jcmVhdGVDb2xvcihfLmJ1dHRvblRleHRDb2xvcnx8KF8uYnV0dG9uQmdDb2xvcj95LnRvUmVhZGFibGUoMTUwKTpoLmJ1dHRvblRleHRDb2xvcikpLGdyYWRpZW50TWVzaFVybDpkLm5vcm1hbGl6ZVVybChQKSxhbmltYXRpb25EdXJhdGlvbjo2ZTN9fSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bTF19LHQucHJvdG90eXBlLmJlZm9yZU1vdW50PWZ1bmN0aW9uKCl7dGhpcy5waWN0dXJlPXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJwaWN0dXJlIiksdGhpcy5iZz10aGlzLmdldFJlc291cmNlQnlJZCgiYmciKSx0aGlzLmJhc2U9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImJhc2UiKSx0aGlzLmFwcEljb249dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImFwcC1pY29uIiksdGhpcy5pbml0QW5pbWF0aW9uKCksdGhpcy5maXRSZXNvdXJjZXMoKSx0aGlzLnNldFRpdGxlRm9udFNpemVBbmRDbGFtcCgpfSx0LnByb3RvdHlwZS5zZXRUaXRsZUZvbnRTaXplQW5kQ2xhbXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCk7dCYmdC5zZXRQb3N0ZXJUaXRsZUZvbnRTaXplcyYmdC5vbkFsbFBvc3RlcnNUaXRsZUZvbnRTaXplc1N5bmNlZCYmKHRoaXMucHJvcHMuY29udGV4dC5kb09uUmVhZHkoYi5SZWFkeVN0YWdlLkNoYW5nZSxmdW5jdGlvbigpe3Quc2V0UG9zdGVyVGl0bGVGb250U2l6ZXMoKX0pLHQub25BbGxQb3N0ZXJzVGl0bGVGb250U2l6ZXNTeW5jZWQoZnVuY3Rpb24oKXtlLmRlc3Ryb3llZHx8ZS5jbGFtcFRpdGxlTGluZXMoMyl9KSl9LHQucHJvdG90eXBlLmdldEhlYWRlckhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlc291cmNlSGVpZ2h0KCJoZWFkZXItbm9ybWFsIil9LHQucHJvdG90eXBlLmlzVGl0bGVPdmVyZmxvd2luZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJoZWFkZXItbm9ybWFsIikuZ2V0RWxlbWVudCgpO2lmKCFlKXJldHVybiExO3ZhciB0PWUuY2hpbGRyZW4mJmUuY2hpbGRyZW5bMF07aWYoIXQpcmV0dXJuITE7cmV0dXJuLjkqdC5zY3JvbGxIZWlnaHQ+dC5jbGllbnRIZWlnaHR9LHQucHJvdG90eXBlLnNldFRpdGxlRm9udFNpemU9ZnVuY3Rpb24oZSl7aWYodGhpcy50aXRsZUZvbnRTaXplIT09ZSl7dmFyIHQ9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImhlYWRlci1ub3JtYWwiKTt0JiYodC5zZXRTdHlsZSh7ImZvbnQtc2l6ZSI6ZSsicHgifSksdGhpcy50aXRsZUZvbnRTaXplPWUpfX0sdC5wcm90b3R5cGUuZml0UmVzb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PVtbImhlYWRlci1ub3JtYWwiLDEsW11dLFsiaGVhZGVyLXNtYWxsIiwxLFtdXV0saT1BLmNyZWF0ZUNvbXBvc2l0aW9uc0J5VHJlZSh0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBlLmdldFJlc291cmNlSGVpZ2h0KHQpfSxvPXRoaXMucHJvcHMscj1vLmNvbnRleHQsYT1vLnNraW5OYW1lO3IuZG9PblJlYWR5KGIuUmVhZHlTdGFnZS5SZWFkLGZ1bmN0aW9uKCl7dmFyIG89bigibWFpbiIpfHwwLHM9QS5jYWxjdWxhdGVFbGVtZW50c1NpemVzQnlUcmVlKHQsbiksbD1lLnBvc3RQcm9jZXNzU2l6ZXMocyksYz1BLmNvbXBvc2VTZXRzKGksbCk7Yz1BLmZlZXRUb1JhbmdlKGMsbyxvKSxyLmludGVyc2VjdGluZ01hbmFnZXIucHVzaChhLGMpLHIuZG9PblJlYWR5KGIuUmVhZHlTdGFnZS5DYWxjLGZ1bmN0aW9uKCl7dmFyIHQ9ci5pbnRlcnNlY3RpbmdNYW5hZ2VyLmNhbGMoYSlbMF18fGNbMF0ubmFtZSxpPXQuc3BsaXQoIiAiKTsiaGVhZGVyLXNtYWxsIj09PXQmJmUuc2V0TW9kKGUuYl8oIl9zbWFsbC1oZWFkZXIiKSksZnVuY3Rpb24odCxpKXtmb3IodmFyIG49MCxvPUEuZ2V0RXhjbHVkZWRFbGVtZW50cyh0LGkpO248by5sZW5ndGg7bisrKXt2YXIgcj1vW25dLGE9ZS5nZXRSZXNvdXJjZUJ5SWQocik7YSYmYS5kZXN0cm95KCl9fShpLHMpfSl9KX0sdC5wcm90b3R5cGUub25DaGFuZ2VCbG9ja1N0YXR1cz1mdW5jdGlvbihlKXtyZXR1cm4gZT49dy5CbG9ja1N0YXR1cy5SZWFkeSYmKHRoaXMucGljdHVyZSYmdGhpcy5waWN0dXJlLmZpdEltYWdlKCksdGhpcy5hcHBJY29uJiZ0aGlzLmFwcEljb24uZml0SW1hZ2UoKSwhMCl9LHQucHJvdG90eXBlLm9uUGljdHVyZUxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPXt4OnRoaXMucGljdHVyZS5wb3NYLHk6dGhpcy5waWN0dXJlLnBvc1l9O0MuZ2V0SW1hZ2VEYXRhKGUsaSxmdW5jdGlvbihlKXtudWxsIT09ZSYmZS5kYXRhLmxlbmd0aCYmdC5jYWxjQmFja2dyb3VuZChlKX0pfSx0LnByb3RvdHlwZS5jYWxjQmFja2dyb3VuZD1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQsbj10aGlzLmlzSGVhZGVyT25Ub3A/MDppLTEsbz1EKEMuZ2V0UGl4ZWwoZSwwLG4pKSxyPUQoQy5nZXRQaXhlbChlLHQtMSxuKSk7aWYodGhpcy50aGVtZT09PWEuREFSSyl7dmFyIHM9by5taXgociwuNSkuZ2V0SFNMKCksbD1zWzBdLHU9c1sxXSxkPWMuY3JlYXRlQ29sb3IoKS5zZXRIU0woW2wsdSx0aGlzLnRoZW1lPT09YS5EQVJLPzEwOjkwXSk7dGhpcy5iYXNlLnNldFN0eWxlKHsiYmFja2dyb3VuZC1jb2xvciI6ZC50b1N0cmluZygpfSl9dGhpcy5iZy5zZXRTdHlsZSh7ImJhY2tncm91bmQtaW1hZ2UiOiJsaW5lYXItZ3JhZGllbnQoOTBkZWcsICIrbysiLCAiK3IrIikifSl9LHQucHJvdG90eXBlLmluaXRBbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcy5zZXR0aW5ncy5lbmFibGVBbmltYXRpb247aWYodm9pZCAwPT09dHx8dCl7dmFyIGksbj10aGlzLnJvb3RDb21wb25lbnQuZ2V0RWxlbWVudCgpLG89e29uU3RhcnQ6ZnVuY3Rpb24odCl7ZS5zZXRNb2QoIl9hbmltYXRlIiksaT1wLnByb3RlY3Quc2V0VGltZW91dChmdW5jdGlvbigpe28ub25TdG9wKHQpfSw2ZTMpfSxvblN0b3A6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KGkpLGUuZGVsTW9kKCJfYW5pbWF0ZSIpLHQoKX19LHI9aC52aXNpYmlsaXR5T2JzZXJ2ZXIoeS5PbmVPZlN0cmF0ZWd5LmZyb20oXy5JbnRlcnNlY3Rpb25TdHJhdGVneS5mYWN0b3J5LGcuRHVtbXlTdHJhdGVneS5mYWN0b3J5KSk7dGhpcy5zdG9wVmlzaWJpbGl0eU9ic2VydmVyPXIobixwLnByb3RlY3QoIm9uQ2hhbmdlVmlzaWJpbGl0eVBvc3RlciIsZnVuY3Rpb24oZSl7ZT9rLmFuaW1hdGlvblF1ZXVlLnB1c2gobyk6ay5hbmltYXRpb25RdWV1ZS5yZW1vdmUobyl9KSl9fSx0LmNvZXJjZVNpemU9di5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoxNTUsbWF4OjEvMH0saGVpZ2h0OnttaW46MTk1LG1heDoxLzB9LHJhdGlvOnttaW46MS8zLG1heDoxLzB9fSksdH0obS5BZHZBZGFwdGl2ZUJhc2UpO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIGMuY3JlYXRlQ29sb3IoW2VbMF0sZVsxXSxlWzJdLGVbM10vMjU1XSl9dC5BZHZQb3N0ZXJWMz1OfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFdpbmRvd1Njcm9sbD1mdW5jdGlvbigpe3JldHVybntsZWZ0OnZvaWQgMD09PXdpbmRvdy5wYWdlWE9mZnNldD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDp3aW5kb3cucGFnZVhPZmZzZXQsdG9wOnZvaWQgMD09PXdpbmRvdy5wYWdlWU9mZnNldD9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOndpbmRvdy5wYWdlWU9mZnNldH19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvYWREaXJlY3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiB0LnN0YXRJZCYmKGVbInN0YXQtaWQiXT10LnN0YXRJZCksdC5za2lwQmFubmVyJiYoZVsic2tpcC1iYW5uZXIiXT10LnNraXBCYW5uZXIpLHQuc2VhcmNoVGV4dCYmKGUudGV4dD10LnNlYXJjaFRleHQsZVsicGFnZS1ubyJdPXQuc2VhcmNoUGFnZU51bWJlciksZX0oaSgyMzMpLmdldENvbW1vblBhcmFtcyhlKSxlKTtpKDM1MykuY3JlYXRlVXJsKGkoNikuVVJMUy5kaXJlY3QsbixlLGZ1bmN0aW9uKG4sbyl7aSgxNzUpLmxvYWRBZCh7dXJsOm4saGVhZGVyczpvLHBhZ2VJZDplLnBhZ2VJZCxpc1JlZnJlc2g6ZS5yZWZyZXNoLGNhbGxiYWNrOnR9KX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgaT1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksbikmJihlW25dPWlbbl0pfXJldHVybiBlfSxvPWZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdFsiZGVmYXVsdCJdPWUsdH0oaSgzNikpO3ZhciByPXt9OygwLGkoMjE1KS5pc05hdGl2ZVNlbmRCZWFjb25TdXBwb3J0ZWQpKHdpbmRvdyk7KDAsaSg4MykuaXNJbklmcmFtZSkod2luZG93KSYmKHJbInRhcmdldC1yZWYiXT1kb2N1bWVudC5yZWZlcnJlcik7dmFyIGE9aSgwKS5hdWdtZW50KE9iamVjdCx7Y29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0KXt0aGlzLmlzSW50ZXJzdGl0aWFsPSgwLGkoMTU4KS5pc05hbnB1SW50ZXJzdGl0aWFsKSh0KSx0aGlzLl9kYXRhPWUuZGF0YSx0aGlzLl9zZXR0aW5ncz1lLnNldHRpbmdzLHRoaXMuX2Zvcm1hdD1lLnNldHRpbmdzLmZvcm1hdCx0aGlzLl92aXNpYmlsaXR5TWFuYWdlcj1lLnZpc2liaWxpdHlNYW5hZ2VyLHRoaXMuX29uQWRBYnVzZWQ9ZS5vbkFkQWJ1c2VkLHRoaXMuX3Byb2R1Y3Q9ZS5wcm9kdWN0fHx0LnByb2R1Y3QsdGhpcy5fdW5pcXVlSWQ9dC51bmlxdWVJZCx0aGlzLl9zdGF0SWQ9dC5zdGF0SWQsdGhpcy5fYmxvY2tJZD10LmJsb2NrSWQsdGhpcy5fcmVuZGVyVG89dC5yZW5kZXJUbyx0aGlzLl9wYWdlSWQ9dC5wYWdlSWQsdGhpcy5fcGFnZU51bWJlcj10LnBhZ2VOdW1iZXIsdGhpcy5fYWRmb3hleHA9dC5hZGZveGV4cCx0aGlzLl9jbGlja01hY3JvPXQuY2xpY2tNYWNybyx0aGlzLl9zZWFyY2hUZXh0PXQuc2VhcmNoVGV4dCx0aGlzLl9pc0luT3ZlcmxheT1Cb29sZWFuKHQuaXNJbk92ZXJsYXkpLHRoaXMuX25vbmNlPXQuY3NwTm9uY2UsdGhpcy5fcmVmcmVzaGVkPXQucmVmcmVzaHx8ITEsdGhpcy5fc2xvdEluZGV4PXQuc2xvdEluZGV4fHwtMSx0aGlzLl9jbGlja1ByZXZlbnRlZE9uY2U9ITE7dGhpcy5fYWRVc2FnZVN0b3JhZ2U9KDAsaSg2MikuZ2V0QWRVc2FnZVN0b3JhZ2UpKGUpLHRoaXMuX3Rlc3R0YWc9bmV3KGkoMTM1KS5EaXJlY3RUZXN0dGFnKSx0aGlzLl9zaW1pbGFyRXhwZXJpbWVudD17dGFyZ2V0OiExLHNsaWNlOiExfSx0aGlzLnZpc2liaWxpdHlDb25maXJtYXRpb25UaW1lc3RhbXA9bnVsbCx0aGlzLl92aXNpYmlsaXR5U2V0dGluZ3M9ZS5kYXRhLnZpc2liaWxpdHlTZXR0aW5nc3x8e30sdGhpcy5pbml0VGVzdHRhZygpO3ZhciBuPXRoaXMuX2dldEZyb21EYXRhKCJhZHMiKXx8W107dGhpcy5zYXZlVG9EaXJlY3RTdG9yYWdlKG4pLGkoMCkuZWFjaChuLGZ1bmN0aW9uKGUpe2UuZ2VvRGlzdGFuY2VSZWd1bGFyJiZwYXJzZUludChlLmdlb0Rpc3RhbmNlUmVndWxhciwxMCk+MmUzJiYoZS5nZW9EaXN0YW5jZVJlZ3VsYXI9IiIpLGUub3JpZ2luYWxTZWNvbmRUaXRsZUZvckN1c3RvbUJsb2NrPWUuc2Vjb25kVGl0bGU7dmFyIHQ9dGhpcy5fZm9ybWF0Lm5hbWUsbj10aGlzLl9pc0luT3ZlcmxheSYmIjMyMHgxMDAiPT09dCxvPS0xIT09KDAsaSgyMykuaW5kZXhPZikoWyJ2ZXJ0aWNhbCIsIm5ld1ZlcnRpY2FsIiwib2xkVmVydGljYWwiLCJob3Jpem9udGFsIiwibmV3SG9yaXpvbnRhbCIsIm9sZEhvcml6b250YWwiLCIyNDB4NDAwIl0sdCk7KCEobnx8byl8fCgwLGkoMTAzKS5pc0hvc3RJblRvcFBhcnRuZXJMaXN0KSgpKSYmKGUuc2Vjb25kVGl0bGU9IiIpLGUuaW50ZXJ2aWV3RGF0YT10aGlzLl9nZXRJbnRlcnZpZXdEYXRhKGUpLCgwLGkoMzQ5KS5jYW5Vc2VBZHR1bmUpKHdpbmRvdykmJiF0aGlzLmlzRnVsbHNjcmVlbigpfHxkZWxldGUgZS5hYnVzZVVybH0sdGhpcyksdGhpcy5fYWRzPW4sdGhpcy5fdmlzaWJpbGl0eVRpbWU9KDAsaSgyNjMpLmNhbGNWaXNpYmlsaXR5VGltZSkodGhpcy5nZXRTZXR0aW5ncygpKX0scHJldmVudENsaWNrT25jZTpmdW5jdGlvbihlKXt0aGlzLl9jbGlja1ByZXZlbnRlZE9uY2V8fChlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGlja1ByZXZlbnRlZE9uY2U9ITApfSxpbml0VGVzdHRhZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Zvcm1hdC5pbmRleCx0PXthZHZhbmNlZEZvcm1hdDpNYXRoLmZsb29yKGUvNjQpLGZvcm1hdDplLHVzZXJHcm91cDp0aGlzLmdldFVzZXJHcm91cCgpLGlzQXBwOnRoaXMuaXNBcHAoKSxhZGZveGV4cDp0aGlzLl9hZGZveGV4cCxpc0Z1bGxzY3JlZW46dGhpcy5pc0Z1bGxzY3JlZW4oKSxpc1JlZnJlc2hlZDp0aGlzLmlzUmVmcmVzaGVkKCksaG9uZXlwb3Q6Qm9vbGVhbih0aGlzLmdldEhvbmV5cG90KCkpfTt0aGlzLl90ZXN0dGFnLnNldFByb3BzKHQpfSxzZXRUZXN0dGFnUHJvcHM6ZnVuY3Rpb24oZSl7dGhpcy5fdGVzdHRhZy5zZXRQcm9wcyhlKX0sZ2V0VGVzdHRhZ1Byb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rlc3R0YWcuZ2V0UHJvcHMoKX0sZ2V0VGVzdHRhZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXN0dGFnLnRvU3RyaW5nKCl9LHNldFNpbWlsYXJFeHBlcmltZW50OmZ1bmN0aW9uKGUpe3RoaXMuX3NpbWlsYXJFeHBlcmltZW50PW4oe30sdGhpcy5fc2ltaWxhckV4cGVyaW1lbnQsZSl9LGdldFNpbWlsYXJFeHBlcmltZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpbWlsYXJFeHBlcmltZW50fSxpc0luT3ZlcmxheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0luT3ZlcmxheX0sZ2V0VmlzaWJpbGl0eVRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlzaWJpbGl0eVRpbWV9LGdldENzcE5vbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vbmNlfSxnZXRWaXNpYmlsaXR5Q29uZmlybWF0aW9uVGltZXN0YW1wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlzaWJpbGl0eUNvbmZpcm1hdGlvblRpbWVzdGFtcH0sc2V0VmlzaWJpbGl0eUNvbmZpcm1hdGlvblRpbWVzdGFtcDpmdW5jdGlvbihlKXt0aGlzLnZpc2liaWxpdHlDb25maXJtYXRpb25UaW1lc3RhbXA9ZX0sX2dldEludGVydmlld0RhdGE6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD10aGlzLl9zZXR0aW5ncyxuPSh0PXZvaWQgMD09PXQ/e306dCkuZm9ybWF0LG89dm9pZCAwPT09bj97fTpuLHI9ZS5zaXRlbGlua3N8fFtdLGE9InRoZXZlcnl1bnVzdWFsZG9tYWluLmNvbSI9PT1lLmRvbWFpbixzPSgoZS5hZGRJbmZvfHx7fSkuY2FsbG91dHNfbGlzdHx8W10pWzBdLGw9KDAsaSgyMikuZmlsdGVyKShyLGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS50aXRsZSxpPWUudXJsO3JldHVybiB0JiZpfSksYz0oMCxpKDE0KS5tYXApKGwsZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnRpdGxlLGk9ZS51cmwsbj1hcmd1bWVudHNbMV07cmV0dXJue3RleHQ6dCx1cmw6aSxpc0FjdGl2ZTpwYXJzZUludChzLDEwKT09PW59fSk7cmV0dXJue2RlZmF1bHRVcmw6KCItMSI9PT1zfHwtMT09PXMpJiZlLnVybD9lLnVybDoiIixkaXNjbGFpbWVyOmUud2FybmluZyxmb3JtYXROYW1lOm8ubmFtZSxpc0ludGVydmlldzphLGFidXNlVXJsOmUuYWJ1c2VVcmwsYnV0dG9uVGV4dDplLnRpdGxlLGRlc2NyaXB0aW9uOmUuYm9keSxpdGVtczpjLGRhdGFTb3VyY2U6dGhpc319LF9nZXRGcm9tRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YVt0aGlzLl9wcm9kdWN0XSYmdGhpcy5fZGF0YVt0aGlzLl9wcm9kdWN0XVtlXX0sX3ByZXBhcmVTbWFydENyb3BFeHA6ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxpKDI2KS5pc0xvbmdFeHBlcmltZW50KShpKDgpLmV4cGVyaW1lbnRJZHMuc21hcnRDcm9wLkFMTE9XRUQpLG89KDAsaSgyNikuaXNMb25nRXhwZXJpbWVudCkoaSg4KS5leHBlcmltZW50SWRzLnNtYXJ0Q3JvcC5FTkFCTEVEKSxyPSgwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5zbWFydENyb3AuRElTQUJMRUQpLGE9Qm9vbGVhbigob3x8cikmJnQmJnQuc21hcnRDcm9wU3VwcG9ydGVkJiYhZS5za2lwUGljdHVyZXMmJiF0aGlzLmlzRW5hYmxlQW5pbWF0aW9uKCkpO2lmKGEpe3ZhciBzPSgwLGkoMjIpLmZpbHRlcikoZS5pbWFnZXN8fFtdLGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlWzBdfSk7YT1Cb29sZWFuKHMubGVuZ3RoJiYoMCxpKDIyMSkuZXZlcnkpKHMsZnVuY3Rpb24oZSl7cmV0dXJuIGVbM10mJmVbM11bInNtYXJ0LWNlbnRlciJdJiZlWzNdWyJzbWFydC1jZW50ZXJzIl19KSl9aWYoIShufHxhJiZvKSl7dmFyIGw9ZS5pbWFnZXN8fFtdLGM9QXJyYXkuaXNBcnJheShsKSx1PTA7Zm9yKGw9Yz9sOmxbU3ltYm9sLml0ZXJhdG9yXSgpOzspe3ZhciBkO2lmKGMpe2lmKHU+PWwubGVuZ3RoKWJyZWFrO2Q9bFt1KytdfWVsc2V7aWYoKHU9bC5uZXh0KCkpLmRvbmUpYnJlYWs7ZD11LnZhbHVlfXZhciBwPWQ7cCYmcFszXSYmKGRlbGV0ZSBwWzNdWyJzbWFydC1jZW50ZXIiXSxkZWxldGUgcFszXVsic21hcnQtY2VudGVycyJdKX19cmV0dXJue3NsaWNlOmEsY29pbjpvfX0scHJlcGFyZUFkOmZ1bmN0aW9uKGUsdCxuKXt0cnl7dmFyIHI9aSgwKS5leHRlbmQoe30sZSksYT1yLnVybDtyLnVuaXFJZD1pKDApLmdlblJuZCgpLG8uaXNQaG9uZSYmKHIudGVsTnVtT3JpZ2luYWw9ci50ZWxOdW0pLHRoaXMuX3ByZXBhcmVDYWxsb3V0cyhyKSx0aGlzLl9wcmVwYXJlSGlnaGxpZ2h0KHIpLHIuc2tpcFBpY3R1cmVzPXRoaXMuX2Zvcm1hdC5za2lwUGljdHVyZXN8fEJvb2xlYW4oTnVtYmVyKHIuc2tpcFBpY3R1cmVzKSksci5pc1NlYXJjaFBhZ2U9dGhpcy5pc1NlYXJjaFBhZ2UoKSxyLmlzQ1RFbmFibGVkPUJvb2xlYW4oTnVtYmVyKHIuaXNDVEVuYWJsZWQpKTt2YXIgcz10aGlzLl9wcmVwYXJlU21hcnRDcm9wRXhwKHIsdCksbD0odHx8e30pLmZvcm1hdDsobD12b2lkIDA9PT1sP3t9OmwpLm5hbWUsbC50eXBlO3IuaW1hZ2VzJiYhci5za2lwUGljdHVyZXMmJihyLmltYWdlPW5ldyhpKDE4NSkpKHIuaW1hZ2VzLGkoMCkuYnJvd3Nlci5pc0hEUElTY3JlZW4pKSxyLmdlb1NraW5WZXI9KDAsaSg3NjApLmdldEdlb1NraW5FeHApKHIsdGhpcy5fc2V0dGluZ3MuZm9ybWF0Lm5hbWUpLHIuZG9tYWluPXIuZG9tYWluP3IuZG9tYWluLnJlcGxhY2UoL153d3dcLi8sIiIpOiIiLC95YW5kZXhcLnJ1XC90dXJiby9pLnRlc3Qoci50YXJnZXRVcmwpJiYoci5kb21haW49Ilx1MDQyMlx1MDQ0M1x1MDQ0MFx1MDQzMVx1MDQzZS1cdTA0NDFcdTA0NDJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0MzhcdTA0NDZcdTA0MzAiLHRoaXMuX3NldHRpbmdzLmZhdmljb249bnVsbCksL3lhbmRleFwucnVcL21hcHMvaS50ZXN0KHIudGFyZ2V0VXJsKSYmKHIuZG9tYWluPXIucGF0aCx0aGlzLl9zZXR0aW5ncy5mYXZpY29uPW51bGwpLHRoaXMuaXNTZWFyY2hQYWdlKCl8fChyLnRlbE51bT1udWxsLHIubWV0cm89bnVsbCksIjEiIT10aGlzLmdldExhbmd1YWdlKCkmJihkZWxldGUgci5hZGRyZXNzLGRlbGV0ZSByLmdlb0Rpc3RhbmNlLGRlbGV0ZSByLmdlb0Rpc3RhbmNlUmVndWxhciksMCE9PXIuZ2VvU2tpblZlcnx8ci5hZGRyZXNzJiYoci5nZW9EaXN0YW5jZXx8ci5nZW9EaXN0YW5jZVJlZ3VsYXIpP3IuYWRkcmVzcz10aGlzLl9nZXRGb3JtYXR0ZWRBZGRyZXNzKHIuYWRkcmVzcyk6ci5hZGRyZXNzPW51bGwsci53b3JraW5nVGltZT0wIT09ci5nZW9Ta2luVmVyP3RoaXMuX2dldEZvcm1hdHRlZFdvcmtpbmdUaW1lKHIud29ya2luZ1RpbWUpOnIud29ya2luZ1RpbWUsci5nZW9EaXN0YW5jZSYmKHIuZ2VvRGlzdGFuY2U9KDAsaSg1OSkucHJldHRpZnkpKHIuZ2VvRGlzdGFuY2UpKSx0aGlzLl9zZXR0aW5ncy5mYXZpY29uJiYoci5mYXZpY29uPXRoaXMuX2dldEZhdmljb24ocikpLHRoaXMuZ2V0VXNlckdyb3VwKCk+NSYmdGhpcy5nZXRVc2VyR3JvdXAoKTwxMSYmKHRoaXMuX3NldHRpbmdzLmMxMW4udGV4dENsaWNrYWJsZT0hMCksci5zZXR0aW5ncz10aGlzLl9zZXR0aW5ncyxyLm9yaWdpbmFsVGl0bGU9ci50aXRsZSxyLm9yaWdpbmFsQm9keT1yLmJvZHksci5sYW5ndWFnZT10aGlzLmdldExhbmd1YWdlKCk7dmFyIGM9KDAsaSgyNDUpLmFkSGFzUHJpY2UpKHIpLHU9KDAsaSgyNDUpLmFwcGVuZFByaWNlKShyLHRoaXMuZ2V0TGFuZ3VhZ2UoKSksZD0wO3UmJihkPSgwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5wcmljZUluVGV4dC5FTkFCTEVEKT8zOigwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5wcmljZUluVGV4dC5ESVNBQkxFRCk/MjoxKTt2YXIgcD0wOygwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5tb3Rpb25CaWdQaWN0dXJlRXhwLkJJR19QSUNUVVJFKT9wPTE6KDAsaSgyNikuaXNMb25nRXhwZXJpbWVudCkoaSg4KS5leHBlcmltZW50SWRzLm1vdGlvbkJpZ1BpY3R1cmVFeHAuU01BTExfUElDVFVSRSkmJihwPTIpO3ZhciBmPTA7KDAsaSgyNikuaXNMb25nRXhwZXJpbWVudCkoaSg4KS5leHBlcmltZW50SWRzLnJlbW92ZUJpbGxib2FyZEN1c3RvbUZvbnQuRU5BQkxFRCk/Zj0xOigwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5yZW1vdmVCaWxsYm9hcmRDdXN0b21Gb250LkRJU0FCTEVEKSYmKGY9Mik7dmFyIGg9dGhpcy5fc2ltaWxhckV4cGVyaW1lbnQ7ci5iYW5uZXJUZXN0dGFnPW5ldyhpKDE2MSkuQmFubmVyVGVzdHRhZykoe2Jhbm5lckluZGV4Om4saXNHZW86Qm9vbGVhbihyLmdlb0Rpc3RhbmNlKSxpc0dlb1JlZ3VsYXI6Qm9vbGVhbihyLmdlb0Rpc3RhbmNlUmVndWxhciksaGFzSW1hZ2U6Qm9vbGVhbihyLmltYWdlcyksaGFzQ2FsbG91dHM6Qm9vbGVhbihyLmNhbGxvdXRzKSxoYXNQaG9uZTpCb29sZWFuKHIudGVsTnVtT3JpZ2luYWwpLGlzUm1wOnRoaXMuaXNNb2JpbGVBcHAociksc21hcnRDcm9wU2xpY2U6cy5zbGljZSxzbWFydENyb3BDb2luOnMuY29pbixpc1NpbWlsYXJFeHBlcmltZW50VGFyZ2V0OmgudGFyZ2V0LGlzU2ltaWxhckV4cGVyaW1lbnRTbGljZTpoLnNsaWNlLGdlb1NraW5FeHBWZXI6ci5nZW9Ta2luVmVyLGhhc1Rnb1ByaWNlOmMscHJpY2VJblRleHRFeHA6ZCxzZW5kQmVhY29uRXhwOnRoaXMuZ2V0VGFyZ2V0VXJsRXhwKHIudGFyZ2V0VXJsKSxjbGlja0RlbGF5RXhwOnRoaXMuY2xpY2tEZWxheVdpZnlFeHAoKSxtb3Rpb25CaWdQaWN0dXJlRXhwOnAscmVtb3ZlQmlsbGJvYXJkQ3VzdG9tRm9udEV4cDpmfSk7dmFyIGc9dGhpcy5nZXRBdXhRdWVyeVBhcmFtcyhbcl0pO3JldHVybiByLnVybD10aGlzLmNyZWF0ZUxpbmsoe2hvc3Q6YSxwYXJhbXM6Zyx0YXJnZXRVcmw6ci50YXJnZXRVcmx9KSxyLnZjYXJkVXJsJiYoci52Y2FyZFVybD10aGlzLmNyZWF0ZUxpbmsoe2hvc3Q6ci52Y2FyZFVybCxwYXJhbXM6Z30pKSxyLmNhbGxVcmwmJihyLmNhbGxVcmw9dGhpcy5jcmVhdGVMaW5rKHtob3N0OnIuY2FsbFVybCxwYXJhbXM6Z30pKSxyLmltYWdlJiYhci5za2lwUGljdHVyZXMmJihyLmNsaWNrSW1hZ2VVcmw9ci51cmwpLHRoaXMuX3NldHRpbmdzLm5vU2l0ZWxpbmtzfHwhci5zaXRlbGlua3M/ci5zaXRlbGlua3M9bnVsbDpyLnNpdGVsaW5rcz10aGlzLl9wcmVwYXJlU2l0ZWxpbmtzKHIuc2l0ZWxpbmtzLGcpLHRoaXMuaXNNb2JpbGVBcHAocikmJnRoaXMuX3ByZXBhcmVNb2JpbGVBcHAocixnKSxyLmlzRnVsbHNjcmVlbj10aGlzLmlzRnVsbHNjcmVlbigpLHJ9Y2F0Y2goZSl7cmV0dXJuIGkoOSkubG9nZ2VyLmVycm9yKGUsInByZXBhcmVBZCIpLG51bGx9fSxjbGlja0RlbGF5V2lmeUV4cDpmdW5jdGlvbigpe3ZhciBlPTA7cmV0dXJuKDAsaSg3NjIpLmlzQXV0aFdpZmkpKCkmJihlPSgwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5jbGlja0RlbGF5V2lGaS5FTkFCTEVEKT8zOigwLGkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQpKGkoOCkuZXhwZXJpbWVudElkcy5jbGlja0RlbGF5V2lGaS5ESVNBQkxFRCk/MjoxKSxlfSxjcmVhdGVMaW5rOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaG9zdCxuPWUucGFyYW1zLG89ZS50YXJnZXRVcmwsYT1uZXcoaSgyNCkuVXJsKSh7aG9zdDp0LHBhcmFtczpufSk7YS5hcHBlbmRQYXJhbXMocik7dmFyIHM9YS5nZXRVcmwoKSxsPXRoaXMuX2NsaWNrTWFjcm8mJigwLGkoMTkpLmlzU3RyaW5nKSh0aGlzLl9jbGlja01hY3JvKSxjPSgwLGkoMzU0KS5jYW5Vc2VDbGlja01hY3JvKSh3aW5kb3cpfHx0aGlzLmlzU1NQKCk7cmV0dXJuIGwmJmMmJihzPSIiK3RoaXMuX2NsaWNrTWFjcm8rZW5jb2RlVVJJQ29tcG9uZW50KHMpKSxuZXcoaSgxMjQpLlRhcmdldFVybExpbmspKHMsbyl9LF9nZXRGb3JtYXR0ZWRBZGRyZXNzOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO3JldHVybiBpKDApLmVhY2goW1svLFxzXHUwNDNlXHUwNDQ0XHUwNDM4XHUwNDQxXHMuKyQvZywiIl0sWy9cdTA0MzQuXHNcdTA0MzQuXHM/L2ksIlx1MDQzNC4gIl0sWy9cdTA0M2FcdTA0M2VcdTA0NDBcdTA0M2YuXHNcdTA0M2FcdTA0M2VcdTA0NDBcdTA0M2YuXHM/L2ksIlx1MDQzYVx1MDQzZVx1MDQ0MFx1MDQzZi4gIl0sWy8sezIsfS9nLCIsIl0sWy9cLnsyLH0vZywiLiJdXSxmdW5jdGlvbih0KXtlPWUucmVwbGFjZSh0WzBdLHRbMV0pfSksZX0sX2dldEZvcm1hdHRlZFdvcmtpbmdUaW1lOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO3ZhciB0PWUuc3BsaXQoIiwgIik7cmV0dXJuIHQubGVuZ3RoPjE/KDAsaSgxNCkubWFwKSh0LGZ1bmN0aW9uKGUpe3JldHVybntkYXlzOmUuc3BsaXQoIiAiKVswXSxob3VyczplLnNwbGl0KCIgIilbMV19fSk6ZX0sX3ByZXBhcmVDYWxsb3V0czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jYW5TaG93Q2FsbG91dHMoKSYmZS5hZGRJbmZvJiYiY2FsbG91dHMiPT09ZS5hZGRJbmZvLnR5cGUmJigwLGkoNjApLmlzQXJyYXkpKGUuYWRkSW5mb1siY2FsbG91dHNfbGlzdCJdKTtyZXR1cm4gZS5jYWxsb3V0cz10P2koMCkubWFwKGUuYWRkSW5mb1siY2FsbG91dHNfbGlzdCJdLGkoNTkpLnByZXR0aWZ5KS5zbGljZSgwLDQpOm51bGwsdH0sX2NhblNob3dDYWxsb3V0czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXR0aW5ncy5jYWxsb3V0c30sX3ByZXBhcmVTaXRlbGlua3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89W107cmV0dXJuIGkoMCkuZWFjaChlLGZ1bmN0aW9uKGUpe2lmKGUudGl0bGUmJmUudXJsKXt2YXIgaT1uLmNyZWF0ZUxpbmsoe2hvc3Q6ZS51cmwscGFyYW1zOnQsdGFyZ2V0VXJsOmUudGFyZ2V0VXJsfSk7by5wdXNoKHt0aXRsZTplLnRpdGxlLHVybDppfSl9fSksby5sZW5ndGg/bzpudWxsfSxfcHJlcGFyZU1vYmlsZUFwcDpmdW5jdGlvbihlLHQpe2lmKGUuYWRkSW5mbz1pKDApLmNhbWVsaXplS2V5cyhlLmFkZEluZm8pLGUuYWRkSW5mby5jYWxsVG9BY3Rpb25Vcmw9dGhpcy5jcmVhdGVMaW5rKHtob3N0OmUuYWRkSW5mby5jYWxsVG9BY3Rpb25VcmwscGFyYW1zOnR9KSxlLmFkZEluZm8ucHJpY2UmJmUuYWRkSW5mby5wcmljZT4wKXt2YXIgbj1lLmFkZEluZm8ucHJpY2U7ZS5hZGRJbmZvLnByaWNlPU51bWJlcihuKT5wYXJzZUludChuLDEwKT9OdW1iZXIobikudG9GaXhlZCgyKTpOdW1iZXIobiksIlJVQiI9PT1lLmFkZEluZm8ucHJpY2VDdXJyZW5jeUNvZGUmJihlLmFkZEluZm8ucHJpY2VDdXJyZW5jeVN5bWJvbD0iXHUwNDQwLiIpfWVsc2UgZGVsZXRlIGUuYWRkSW5mby5wcmljZTtpZihlLmFkZEluZm8ucmV2aWV3Q291bnQ9ZS5hZGRJbmZvLnJldmlld0NvdW50JiZlLmFkZEluZm8ucmV2aWV3Q291bnQ+MD9lLmFkZEluZm8ucmV2aWV3Q291bnQ6dm9pZCAwLGUuYWRkSW5mby5pY29uJiZlLmFkZEluZm8uaWNvbi5sZW5ndGgmJiFlLnNraXBQaWN0dXJlcyl7dmFyIG89bmV3KGkoMTg1KSkoZS5hZGRJbmZvLmljb24saSgwKS5icm93c2VyLmlzSERQSVNjcmVlbik7ZS5oYXNJY29uPSEwLGUuaWNvbj1vLGUuaW1hZ2V8fChlLmltYWdlPW8sZS5pc0ljb25Jc3RlYWRPZkltYWdlPSEwLGUuY2xpY2tJbWFnZVVybD1lLnVybCl9ZWxzZSBlLmhhc0ljb249ITE7ZS5hZGRJbmZvLnJhdGluZz1lLmFkZEluZm8ucmF0aW5nJiZlLmFkZEluZm8ucmF0aW5nPjA/ZS5hZGRJbmZvLnJhdGluZzp2b2lkIDAsZS5hZGRJbmZvLmRvbWFpbj1lLmRvbWFpbixkZWxldGUgZS5kb21haW4sZS5pc0FwcEFkPSEwfSxfZ2V0RmF2aWNvbjpmdW5jdGlvbihlKXtpZihlLmlzQXBwQWQpe2lmKGUuc2tpcFBpY3R1cmVzJiZlLmFkZEluZm8uaWNvbiYmZS5hZGRJbmZvLmljb24ubGVuZ3RoKXJldHVybiBuZXcoaSgxODUpKShlLmFkZEluZm8uaWNvbixpKDApLmJyb3dzZXIuaXNIRFBJU2NyZWVuKS5nZXRGaXR0aW5nKDE2LDE2KS5zcmN9ZWxzZSBpZihlLnB1bnlEb21haW4pcmV0dXJuIG5ldyhpKDI0KS5VcmwpKHtob3N0OmkoNikudXJscy5mYXZpY29uLHBhdGg6ZS5wdW55RG9tYWlufSkuZ2V0VXJsKCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fYWRzfHwhdGhpcy5fYWRzLmxlbmd0aH0sZ2V0VXNlckdyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9cGFyc2VJbnQodGhpcy5fZGF0YS5jb21tb24udXNlckdyb3VwLDEwKTtyZXR1cm4gaXNOYU4oZSk/MTAyOi0xPT09ZT8xMDE6ZSsxfSxnZXRDbGlja0NvbmZpcm1hdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLmNvbW1vbi5jbGlja0NvbmZpcm1hdGlvbn0saXNZYW5kZXhQYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIjEiPT10aGlzLl9kYXRhLmNvbW1vbi5pc1lhbmRleFBhZ2V9LGlzU2VhcmNoUGFnZTpmdW5jdGlvbigpe3JldHVybiIxIj09dGhpcy5fZGF0YS5jb21tb24uaXNTZWFyY2hQYWdlfSxpc1ByZXZpZXdQYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIjEiPT10aGlzLl9kYXRhLmNvbW1vbi5pc1ByZXZpZXdQYWdlfSxpc1lhbmRleDpmdW5jdGlvbigpe3JldHVybiIxIj09dGhpcy5fZGF0YS5jb21tb24uaXNZYW5kZXh9LGlzQXBwOmZ1bmN0aW9uKCl7cmV0dXJuIjEiPT10aGlzLl9kYXRhLmNvbW1vbi5pc01vYmlsZVNka30saXNNb2JpbGVBcHA6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWRkSW5mbyYmIm1vYmlsZS1hcHAiPT09ZS5hZGRJbmZvLnR5cGV9LGlzU1NQOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZGF0YS5jb21tb24uc3NwSWQ7cmV0dXJuIG51bGwhPWUmJjAhPWV9LGRvU29ydEJ5SW1hZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNZYW5kZXhQYWdlKCkmJkJvb2xlYW4odGhpcy5fc2V0dGluZ3MuaW1hZ2VzRmlyc3QpfSxnZXRMaW5rSGVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLmNvbW1vbi5saW5rSGVhZH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9nZXRGcm9tRGF0YSh0aGlzLl9wcm9kdWN0KyJUaXRsZSIpLHQ9bmV3KGkoMjQpLlVybCkoe2hvc3Q6KDAsaSgxOSkuaXNTdHJpbmcpKGUudXJsKT9lLnVybDplLnVybC5nZXRSZWRpcmVjdCgpfSkuYXBwZW5kUGFyYW1zKHIpLmdldFVybCgpO2UudXJsPXRoaXMuX2lzT2xkQmxvY2s/dDpuZXcoaSgxMjQpLlRhcmdldFVybExpbmspKHQpO3ZhciBuPXRoaXMuZ2V0VXNlckN1cnJlbmN5KCksbz10aGlzLmdldExhbmd1YWdlKCk7cmV0dXJuIGUudGl0bGU9KDAsaSg3NjMpLmdldFRpdGxlKShlLnRpdGxlLG4sbyx0aGlzLmFjdHVhbEZvcm1hdCksZX0sZ2V0VXNlckN1cnJlbmN5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0RnJvbURhdGEodGhpcy5fcHJvZHVjdCsiVGl0bGUiKTtyZXR1cm4gZSYmZS51c2VyQ3VycmVuY3l9LGdldEZyZWVBZHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9KDAsaSgyMikuZmlsdGVyKSh0aGlzLl9hZHMsZnVuY3Rpb24odCl7cmV0dXJuIWUuX3Zpc2liaWxpdHlNYW5hZ2VyLmlzQWJ1c2VkKHQuYWRJZCl9KTtpZih0aGlzLmlzT2xkRGlyZWN0KCkpe3ZhciBuPXRoaXMuX2FkVXNhZ2VTdG9yYWdlLmdldFVudXNhYmxlQWRzKHtwYWdlTnVtYmVyOnRoaXMuX3BhZ2VOdW1iZXIscmVuZGVyVG86dGhpcy5fcmVuZGVyVG99KTt0PSgwLGkoMjIpLmZpbHRlcikodCxmdW5jdGlvbihlKXtyZXR1cm4tMT09PWkoMCkuaW5BcnJheShuLGUuYWRJZCl9KX1yZXR1cm4gdH0scmVsZWFzZUFkOmZ1bmN0aW9uKGUpe3RoaXMuX2FkVXNhZ2VTdG9yYWdlLnJlbGVhc2Uoe2FkSWQ6ZSxwYWdlTnVtYmVyOnRoaXMuX3BhZ2VOdW1iZXIscmVuZGVyVG86dGhpcy5fcmVuZGVyVG99KX0sY2FwdHVyZUFkOmZ1bmN0aW9uKGUpe3RoaXMuX2FkVXNhZ2VTdG9yYWdlLmNhcHR1cmUoe2FkSWQ6ZSxwYWdlTnVtYmVyOnRoaXMuX3BhZ2VOdW1iZXIscmVuZGVyVG86dGhpcy5fcmVuZGVyVG99KX0sc2F2ZVRvRGlyZWN0U3RvcmFnZTpmdW5jdGlvbihlKXt2YXIgdD0oMCxpKDE0KS5tYXApKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWRJZH0pO3RoaXMuX2FkVXNhZ2VTdG9yYWdlLmNhcHR1cmVEaXJlY3QodCl9LGdldExhbmd1YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGEuY29tbW9uLnBhZ2VMYW5nfHwiMSJ9LGlzRW5hYmxlQW5pbWF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLl9zZXR0aW5ncy5lbmFibGVBbmltYXRpb259LHNldEFidXNlZDpmdW5jdGlvbihlKXt0aGlzLl92aXNpYmlsaXR5TWFuYWdlci5hYnVzZShlLmFkSWQpfSxfZ2V0S2V5RnJvbVNldHRpbmdzOmZ1bmN0aW9uKCl7aWYodGhpcy5fZGF0YSYmdGhpcy5fZGF0YS5zZXR0aW5ncylmb3IodmFyIGUgaW4gdGhpcy5fZGF0YS5zZXR0aW5ncylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZGF0YS5zZXR0aW5ncyxlKSlyZXR1cm4gZTtyZXR1cm4gbnVsbH0sZ2V0UGFnZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJZH0sZ2V0SW1wSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSgxNSkucGFyc2VCbG9ja0lkKHRoaXMuX2Jsb2NrSWQpLmltcElkfSxnZXRQcm9kdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPbGREaXJlY3QoKT9pKDE1KS5wYXJzZUJsb2NrSWQodGhpcy5fYmxvY2tJZCkucHJvZHVjdDp0aGlzLl9wcm9kdWN0fSxnZXRTZXR0aW5nczpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PSgwLGkoOTYpLmlzUnRiSW5EaXJlY3RFeHBlcmltZW50KSh7cGFnZUlkOnRoaXMuX3BhZ2VJZCxwcm9kdWN0OnRoaXMuX3Byb2R1Y3QsaGFzU2VhcmNoVGV4dDp0aGlzLmhhc1NlYXJjaFRleHQoKX0pLG49ImN1c3RvbUJsb2NrIj09PXRoaXMuX3NldHRpbmdzLmZvcm1hdC5uYW1lO2lmKHR8fG4pe3ZhciBvPXRoaXMuX2dldEtleUZyb21TZXR0aW5ncygpO251bGwhPT1vJiYoZT10aGlzLl9kYXRhLnNldHRpbmdzW29dKX1yZXR1cm4gZX0saGFzU2VhcmNoVGV4dDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3NlYXJjaFRleHQpfSxjb25maXJtVmlzaWJpbGl0eUluUnRiOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9dGhpcy5nZXRTZXR0aW5ncygpO3QmJnQubGlua1RhaWwmJihlLnRlc3R0YWdQcm9wcz1pKDApLmV4dGVuZCh7aXNBcHA6dGhpcy5pc0FwcCgpLGFkZm94ZXhwOnRoaXMuX2FkZm94ZXhwLGlzRnVsbHNjcmVlbjp0aGlzLmlzRnVsbHNjcmVlbigpfSxlLnRlc3R0YWdQcm9wcyksZS5mb3JtYXRUeXBlPXRoaXMuX2Zvcm1hdC5pbmRleCxlLmFjdHVhbEZvcm1hdD10aGlzLmFjdHVhbEZvcm1hdCx0aGlzLl92aXNpYmlsaXR5TWFuYWdlci5jb25maXJtUnRiKHQsZSkpfSxvbkNvbmZpcm1WaXNpYmlsaXR5OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRVbmNvbmZpcm1lZEFkcyhlKTt0aGlzLnNlbmRWaXNpYmlsaXR5Q29uZmlybWF0aW9uKGksdCksdGhpcy5yZW1lbWJlckNvbmZpcm1lZEFkcyhpKX0sZ2V0VW5jb25maXJtZWRBZHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMCkuZmlsdGVyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Zpc2liaWxpdHlNYW5hZ2VyLmlzTm90Q29uZmlybWVkKGUubGlua1RhaWwpfSx0aGlzKX0scmVtZW1iZXJDb25maXJtZWRBZHM6ZnVuY3Rpb24oZSl7aSgwKS5lYWNoKGUsZnVuY3Rpb24oZSl7dGhpcy5fdmlzaWJpbGl0eU1hbmFnZXIuY29uZmlybShlLmxpbmtUYWlsKX0sdGhpcyl9LHNlbmRWaXNpYmlsaXR5Q29uZmlybWF0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGgpeygwLGkoMzU1KS5wYXRjaFZpc2liaWxpdHlDb25maXJtYXRpb25Gb3JtYXQpKHQpO3ZhciBuPW5ldyhpKDI0KS5VcmwpKHtob3N0OigwLGkoMTAxKS5jcmVhdGVMaW5rVGFpbFVybCkodGhpcy5nZXRMaW5rSGVhZCgpLGUpLHBhcmFtczp0aGlzLmdldEF1eFF1ZXJ5UGFyYW1zKGUsdCl9KTtuLmFwcGVuZFBhcmFtcygid21vZGUiLDApLHRoaXMuc2VuZFBpeGVsKG4uZ2V0VXJsKCkpfX0sdHJhY2tDbGljazpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49W2VdOygwLGkoNzY0KS50cmFja0NsaWNrKShmdW5jdGlvbihlLG8pe3ZhciByLGE9KDAsaSgxMDEpLmJ1aWxkQmFubmVyVGVzdHRhZ3MpKG4se2NsaWNrUGl4ZWw6ZX0pLHM9KChyPXt9KVtpKDEwMSkuQkFOTkVSX1RFU1RfVEFHX0tFWV09YS50b1N0cmluZygpLHIucmVhY3Rpb25UaW1lPW8sciksbD1uZXcoaSgyNCkuVXJsKSh7aG9zdDooMCxpKDEwMSkuY3JlYXRlTGlua1RhaWxVcmwpKHQuZ2V0TGlua0hlYWQoKSxuKSxwYXJhbXM6c30pO3Quc2VuZFBpeGVsKGwuZ2V0VXJsKCkpfSl9LHNlbmRQaXhlbDpmdW5jdGlvbihlKXsoMCxpKDc4KS5zZW5kUGl4ZWwpKGUpfSxzZXRBY3R1YWxGb3JtYXQ6ZnVuY3Rpb24oZSl7dGhpcy5hY3R1YWxGb3JtYXQ9ZX0sZ2V0QXV4UXVlcnlQYXJhbXM6ZnVuY3Rpb24oKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxvPW4udGVzdHRhZ1Byb3BzLHI9bi5iYW5uZXJUZXN0dGFnUHJvcHMsYT1uLnJlbmRlclNpemUscz1uLmV4dFBhcmFtcyxsPXRoaXMuX3Rlc3R0YWcuY2xvbmUoKS5zZXRQcm9wcyhvKSxjPSgwLGkoMTAxKS5idWlsZEJhbm5lclRlc3R0YWdzKSh0LHIpLHU9KChlPXsic3RhdC1pZCI6dGhpcy5fc3RhdElkLCJ0ZXN0LXRhZyI6bC50b1N0cmluZygpLCJmb3JtYXQtdHlwZSI6dGhpcy5fZm9ybWF0LmluZGV4LCJhY3R1YWwtZm9ybWF0Ijp0aGlzLmFjdHVhbEZvcm1hdH0pW2koMTAxKS5CQU5ORVJfVEVTVF9UQUdfS0VZXT1jLnRvU3RyaW5nKCksZSk7cmV0dXJuIGEmJih1WyJyZW5kZXJXaWR0aCJdPWEud2lkdGgsdVsicmVuZGVySGVpZ2h0Il09YS5oZWlnaHQpLHVbImFkYi1iaXRzIl09IjEiLGkoMCkuZXh0ZW5kKHUscyksdX0sX3ByZXBhcmVIaWdobGlnaHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9LzwoXC8/KWhsPi9nLGk9dGhpcy5faXNOZWVkSGlnaGxpZ2h0KCk/IjwkMWI+IjoiIjtlLnRpdGxlPXRoaXMuX3ByZXBhcmVIaWdobGlnaHRTdHJpbmcoZS50aXRsZSkucmVwbGFjZSh0LGkpLGUuYm9keT10aGlzLl9wcmVwYXJlSGlnaGxpZ2h0U3RyaW5nKGUuYm9keSkucmVwbGFjZSh0LGkpLGUuc2Vjb25kVGl0bGUmJihlLm9yaWdpbmFsU2Vjb25kVGl0bGU9dGhpcy5fcHJlcGFyZUhpZ2hsaWdodFN0cmluZyhlLnNlY29uZFRpdGxlKS5yZXBsYWNlKHQsaSksZS5zZWNvbmRUaXRsZT0iJm5ic3A7Jm5kYXNoOyAiK2Uub3JpZ2luYWxTZWNvbmRUaXRsZSksZS5wYXRoJiYoZS5wYXRoPXRoaXMuX3ByZXBhcmVIaWdobGlnaHRTdHJpbmcoZS5wYXRoKS5yZXBsYWNlKHQsaSkpfSxfcHJlcGFyZUhpZ2hsaWdodFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4oZXx8IiIpLnJlcGxhY2UoLzxobD4oXGQrKTxcL2hsPi9nLCIkMSIpLnJlcGxhY2UoLzxcL2hsPihccyopPGhsPi9nLCIkMSIpLnJlcGxhY2UoLzxobD4oW2Etelx1MDQzMC1cdTA0NGZcdTA0NTFdezEsM30pPFwvaGw+L2csIiQxIil9LF9pc05lZWRIaWdobGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hL25ld1ZrfHZrfG1haWwvLnRlc3QodGhpcy5fc2V0dGluZ3MuZm9ybWF0Lm5hbWUpfSxub3RDb250YWluV2FybmluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIShlLndhcm5pbmd8fGUuYWRkSW5mbyYmImV4dC1kaXN0cmliIj09PWUuYWRkSW5mby50eXBlKX0saXNPbGREaXJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fYmxvY2tJZH0sYWJ1c2VBZDpmdW5jdGlvbihlKXt0aGlzLl9vbkFkQWJ1c2VkJiYoMCxpKDcpLmlzRnVuY3Rpb24pKHRoaXMuX29uQWRBYnVzZWQpJiZ0aGlzLl9vbkFkQWJ1c2VkKGUpfSxnZXRVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91bmlxdWVJZH0sZ2V0SG9uZXlwb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlzaWJpbGl0eVNldHRpbmdzLmV4cFNob3d8fDB9LGdldFRhcmdldFVybEV4cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92aXNpYmlsaXR5U2V0dGluZ3MuZXhwU2VuZEJlYWNvbjtyZXR1cm4gcGFyc2VJbnQodCwxMCksMH0saXNGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaSgxMjUpLmlzRnVsbHNjcmVlbikodGhpcy5fc2V0dGluZ3MpfSxpc0ludGVyc2Nyb2xsZXI6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9zZXR0aW5ncy5pbnRlcnNjcm9sbGVyKX0sY3JlYXRlVXJsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDE9PT10aGlzLmdldFRhcmdldFVybEV4cCh0KXx8Mj09PXRoaXMuZ2V0VGFyZ2V0VXJsRXhwKHQpP25ldyhpKDEyNCkuVGFyZ2V0VXJsTGluaykoZSx0KTpuZXcoaSgxMjQpLlRhcmdldFVybExpbmspKGUpfSxnZXRTbG90SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2xvdEluZGV4fSxpc1JlZnJlc2hlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWZyZXNoZWR9fSk7ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTUVUSE9EX1JFTkRFUl9PVkVSTEFZPTJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGkoMTcpLm9uKHdpbmRvdywiZXJyb3IiLGZ1bmN0aW9uKGUpey9cL2NvbnRleHRfc3RhdGljX1tcZFx3XStcLmpzJHxcL3BhcnRuZXItY29kZS1idW5kbGVzXC9cZCtcL1x3K1wuanMkL2kudGVzdChlLmZpbGVuYW1lKSYmaSg5KS5sb2dnZXIuZXJyb3IoZSwiVW5jYXVnaHRFcnJvciIpfSksd2luZG93LlByb21pc2V8fCh3aW5kb3cuUHJvbWlzZT1pKDQ0MikpLGkoNDQ1KSxpKDQ2OCk7dHJ5eyFmdW5jdGlvbigpe3ZhciBlPWkoMTI2KSx0PWkoMTIpLmdldFlhKCksbj10LmVFY2lrUnZPYjlnLmlzTmV3TG9hZGVyPyJBZHZNYW5hZ2VyU3RhdGljIjoiQWR2TWFuYWdlciI7aWYoIXQuZUVjaWtSdk9iOWdbbl0pe3ZhciBvPW5ldyBlLHI9WyJyZW5kZXIiLCJyZW5kZXJEaXJlY3QiLCJyZW5kZXJPdmVybGF5IiwiZ2V0QmlkIiwicmVsZWFzZUJpZCIsImdldFNraXBUb2tlbiIsImdldENhcHR1cmVkQ291bnQiLCJnZXRTa2lwQmFubmVyIiwiZ2V0QWRTZXNzaW9uSWQiLCJkZXN0cm95Il07dC5lRWNpa1J2T2I5Z1tuXT17fSxpKDUpLmZvckVhY2gocixmdW5jdGlvbihlKXt0LmVFY2lrUnZPYjlnW25dW2VdPWkoMSkucHJvdGVjdChpKDEpLlByb3RlY3RlZE5hbWVzLkFkdk1hbmFnZXIrIi4iK2UsZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdFtpXT1hcmd1bWVudHNbaV07cmV0dXJuIG9bZV0uYXBwbHkobyx0KX0pfSx2b2lkIDApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmVFY2lrUnZPYjlnLG4se2NvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMX0pLGkoNSkuZm9yRWFjaChyLGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmVFY2lrUnZPYjlnW25dLGUse2NvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMX0pfSx2b2lkIDApLGkoODQpLnNlbmRSZXNvdXJjZUluZm8oKSx0LmVFY2lrUnZPYjlnLl9pbml0PWkoMSkucHJvdGVjdChpKDEpLlByb3RlY3RlZE5hbWVzLllhQ29udGV4dENhbGxiYWNrcyxmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dC5lRWNpa1J2T2I5Zy5fY2FsbGJhY2tzLmxlbmd0aDtlKyspaSgxKS5wcm90ZWN0KGkoMSkuUHJvdGVjdGVkTmFtZXMuWWFDb250ZXh0Q2FsbGJhY2tzQ2FsbHMsdC5lRWNpa1J2T2I5Zy5fY2FsbGJhY2tzW2VdKSgpO3QuZUVjaWtSdk9iOWcuX2NhbGxiYWNrcz1bXX0pfX0oKSxpKDEyKS5nZXRZYUNvbnRleHQoKS5faW5pdCgpfWNhdGNoKGUpe2koOSkubG9nZ2VyLmVycm9yKGUsIkluaXRpYWxpemF0aW9uRmFpbGVkIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIG8oKXt0aGlzLmNhbmNlbEJ1YmJsZT0hMH1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5maXhFdmVudD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9ufHwoZS5zdG9wUHJvcGFnYXRpb249byksZS5wcmV2ZW50RGVmYXVsdHx8KGUucHJldmVudERlZmF1bHQ9biksZS50YXJnZXR8fChlLnRhcmdldD1lLnNyY0VsZW1lbnQpLGV9KHQpO2UuY2FsbCh0aGlzLGkpfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0SGFzT2JqZWN0RGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93KTt2YXIgdD1lLk9iamVjdDt0cnl7dmFyIGk9e307cmV0dXJuIHQuZGVmaW5lUHJvcGVydHkoaSwic2VudGluZWwiLHt9KSwic2VudGluZWwiaW4gaX1jYXRjaChlKXtyZXR1cm4hMX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmhhc1RvdWNoUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlLlBvaW50ZXJFdmVudCl9KGUpJiZmdW5jdGlvbihlKXt2YXIgdD1lLm5hdmlnYXRvcnx8e30saT10Lm1zTWF4VG91Y2hQb2ludHMsbj10Lm1heFRvdWNoUG9pbnRzO3JldHVybiBpfHxufHwwfShlKT4wJiYhaSgyNjYpLmdldElzRWRnZShlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2V8fChlPXdpbmRvdyk7dmFyIHQ9ZS5uYXZpZ2F0b3IudXNlckFnZW50LGk9dC5pbmRleE9mKCJNU0lFICIpO2lmKGk+MClyZXR1cm4gcGFyc2VJbnQodC5zdWJzdHJpbmcoaSs1LHQuaW5kZXhPZigiLiIsaSkpLDEwKTtpZih0LmluZGV4T2YoIlRyaWRlbnQvIik+MCl7dmFyIG49dC5pbmRleE9mKCJydjoiKTtyZXR1cm4gcGFyc2VJbnQodC5zdWJzdHJpbmcobiszLHQuaW5kZXhPZigiLiIsbikpLDEwKX12YXIgbz10LmluZGV4T2YoIkVkZ2UvIik7cmV0dXJuIG8+MCYmcGFyc2VJbnQodC5zdWJzdHJpbmcobys1LHQuaW5kZXhPZigiLiIsbykpLDEwKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMTQpLm1hcChpKDE5MCkuY3NzUHJlZml4ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIigiK2UrImFueS1wb2ludGVyOmNvYXJzZSkifSkuam9pbigiLCIpO3QuaXNNYXRjaGluZ0FueVBvaW50ZXJDb2Fyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjY3KS5pc01hdGNoaW5nTWVkaWFRdWVyeShlLG4pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UT1VDSF9FTkFCTEVEX1FVRVJZPWkoMTQpLm1hcChpKDE5MCkuY3NzUHJlZml4ZXMsZnVuY3Rpb24oZSl7cmV0dXJuIigiK2UrInRvdWNoLWVuYWJsZWQpIn0pLmpvaW4oIiwiKSx0LmlzTWF0Y2hpbmdUb3VjaEVuYWJsZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjY3KS5pc01hdGNoaW5nTWVkaWFRdWVyeShlLHQuVE9VQ0hfRU5BQkxFRF9RVUVSWSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lmhhc0RvY3VtZW50VG91Y2g9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5Eb2N1bWVudFRvdWNoO3JldHVybiBCb29sZWFuKHQpJiZlLmRvY3VtZW50IGluc3RhbmNlb2YgdH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaGFzVG91Y2hFdmVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiBlfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFpKDQ2KS5nZXRPYmplY3RLZXlzKGUpLmxlbmd0aH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudG9RdWVyeVBhcmFtcz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYiIiE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJm51bGwhPT1lW2ldJiZ0LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGkpKyI9IitlbmNvZGVVUklDb21wb25lbnQoZVtpXSkpO3JldHVybiB0LmpvaW4oIiYiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGZ1bmN0aW9uKGUpe2VbZVsiZG9Ob3RNYXRjaCJdPTBdPSJkb05vdE1hdGNoIixlW2VbImltYWdlIl09MV09ImltYWdlIixlW2VbInJlZnJlc2giXT0yXT0icmVmcmVzaCIsZVtlWyJhbGwiXT0zXT0iYWxsIixlW2VbInNjcnVtYmxlIl09NF09InNjcnVtYmxlIn0odC5BZGJsb2NrQ29va2llTWF0Y2hpbmdUeXBlfHwodC5BZGJsb2NrQ29va2llTWF0Y2hpbmdUeXBlPXt9KSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXsyMTc1Mzo1MCwyNzIxOTo1MCwxMDE4MzM6NTAsMTIyOTg5OjUwLDcwMzUwOjUwLDI1MDg5NDoxMH07dC5pc0FsbG93ZWRSZXBlYXRBZHM9ZnVuY3Rpb24oZSx0KXtpZihlIGluIG4pe3ZhciBvPW5bZV07cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbz9vOm5bZV09aSg0MCkuaXNQZXJjZW50KG8pfXJldHVybiB0fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRTZXNzaW9uPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciByPXQuZ2V0SXRlbShpKDk0KS5TRVNTSU9OX0tFWSk7cmV0dXJuIHJ8fChyPW4uZ2V0SXRlbShpKDk0KS5TRVNTSU9OX0tFWSl8fGUoKSxvKHdpbmRvdyxyKSksdC5zZXRJdGVtKGkoOTQpLlNFU1NJT05fS0VZLHIpLG4uc2V0SXRlbShpKDk0KS5TRVNTSU9OX0tFWSxyKSxyfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZW5lcmF0ZVNlc3Npb25JZD1mdW5jdGlvbigpe3JldHVybigxZTYqaSgxMTQpLnJhbmRvbSgpKS50b0ZpeGVkKDApKyhuZXcgRGF0ZSkudmFsdWVPZigpLnRvU3RyaW5nKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklTX0JST0tFTl9NQVRIX1JBTkRPTT0haSgzNykuY2hlY2tOYXRpdmVDb2RlKE1hdGgucmFuZG9tKXx8TWF0aC5yYW5kb20oKT09TWF0aC5yYW5kb20oKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49MjE0NzQ4MzY0NyxvPTE2ODA3LHI9RGF0ZS5ub3coKSppKDQzMikucGVyZm9ybWFuY2VOb3coKSVuO3ZhciBhPW4tMTt0LnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3JldHVybigocj1yKm8lbiktMSkvYX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3ZvaWQgMDp3aW5kb3cucGVyZm9ybWFuY2U7dC5pc1BlcmZvcm1hbmNlTm93U3VwcG9ydGVkPW4mJmkoNykuaXNGdW5jdGlvbihuLm5vdyk7dmFyIG89biYmbi50aW1pbmcmJm4udGltaW5nLm5hdmlnYXRpb25TdGFydD9uLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQ6aSgyNjkpLmRhdGVOb3coKTt0LnBlcmZvcm1hbmNlTm93U2hpbT1mdW5jdGlvbigpe3JldHVybiBpKDI2OSkuZGF0ZU5vdygpLW99LHQucGVyZm9ybWFuY2VOb3c9dC5pc1BlcmZvcm1hbmNlTm93U3VwcG9ydGVkP2Z1bmN0aW9uKCl7cmV0dXJuIG4ubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHQucGVyZm9ybWFuY2VOb3dTaGltKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldENyb3NzRnJhbWVEYXRhU291cmNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbztyZXR1cm4gaSgyNzQpLnRyYXZlcnNlQnJlYWR0aChbZS50b3BdLGZ1bmN0aW9uKGUpe2lmKCEobz1pKDEpLmNhbGxTYWZlKGZ1bmN0aW9uKCl7cmV0dXJuIGkoNzEpLmdldChlLHQpfSkpKXJldHVybiBpKDEpLmNhbGxTYWZlKGZ1bmN0aW9uKCl7cmV0dXJuIGkoMTE1KS5saXN0VG9BcnJheShlLmZyYW1lcyl9KXx8W119KSxvfHwobz1uKCkpLGkoMTk2KS5zZXQoZSx0LG8pLG99fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5wdXNoTWV0cmlrYUV2ZW50PWkoMSkucHJvdGVjdCgibWV0cmlrYTo6cHVzaEV2ZW50IixmdW5jdGlvbihlLHQpe3ZhciBvPWkoNzEpLmdldChlLCJZYS5fbWV0cmlrYS5kYXRhTGF5ZXIiKXx8W107aSgxOTYpLnNldChlLCJZYS5fbWV0cmlrYS5kYXRhTGF5ZXIiLG8pLG8ucHVzaCh7eW1ldHJpa2FFdmVudDp7dHlwZToicGFyYW1zIixwYXJlbnQ6MSxkYXRhOntfX3ltOm4oe30sdCl9fX0pfSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2V0U2Vzc2lvbj1mdW5jdGlvbihlLHQsbixvKXtvKHdpbmRvdyxlKSx0LnNldEl0ZW0oaSg5NCkuU0VTU0lPTl9LRVksZSksbi5zZXRJdGVtKGkoOTQpLlNFU1NJT05fS0VZLGUpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49MSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT1uKSx0aGlzLnRocmVzaG9sZD1lfXJldHVybiBlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24oZSl7dmFyIHQ9e307aWYodFtlLnZlcnNpb25dPXt9LHRbZS52ZXJzaW9uXVtlLm5hbWVzcGFjZV09e30sdFtlLnZlcnNpb25dW2UubmFtZXNwYWNlXVtlLmVycm9yLm5hbWVdPWUuZXJyb3IsaSg0MCkuaXNQZXJjZW50KHRoaXMudGhyZXNob2xkKSl7aSgxMzYpLnJlcXVlc3RDb3VudGVyKHtpZDo0MjA5MzQ0OSxlbmFibGVDb29raWVzOiExfSxmdW5jdGlvbihlKXtlLmhpdCh3aW5kb3cubG9jYXRpb24uaHJlZix7cGFyYW1zOnR9KX0pfX0sZX0oKTt0Lk1ldHJpa2FMb2dnZXI9b30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1NzcFBhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEJvb2xlYW4oZS5ZQV9TU1BfUEFHRSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm1ldHJpa2FDYWxsYmFja3NEaWN0PXtNZXRyaWthOiJ5YW5kZXhfbWV0cmlrYV9jYWxsYmFja3MiLE1ldHJpa2EyOiJ5YW5kZXhfbWV0cmlrYV9jYWxsYmFja3MyIn07dC5NRVRSSUtBX1VSTD0iaHR0cHM6Ly95YW5kZXgucnUvdHVyYm8vYWFiL3BHVEg5NzM2OS9jNjQ3ODRPdE8tUXUvWFpyYWdWR3EyamN2cnNnU3pXbDVWVU1NMEJreUlubmFTdzZxZDRsZWQ2X1NxREptWlBqR1lvRXR6dGRpak9XdG9ELWxqVmVvRFdWRFpZYXpyb3ZIN0Jwc2JkTVNqRWlsN1k1SXdDdXBhWklSUGFMYWNIUGJfYmtQNm5mSkNmVzhSWW1pVlZiYjFRTlJYTXdsY183Vl9ZQmNwTDRWQ2QzMkE0YVZZbzdiQkMzcV9qOEJrZHpxTlo5X210REp5b3F4VTU4aWVaUFNPc3hwSE92bGlMaEdqZGJLZ2Fja3l4UVFRbF9mdC1KLWxiX3lfMVM5UmxuTTFaSWxORUFjQ1BVY2FTMXQ4MlBfYWlmX3pFbkRldW41STZHdU15bFNZRXN1NnU2S0I1aUo1ODZYS0NDMjlxaVVJN0NmTEdUZ0xLYVA0WTdVRDNlNG5NV0FsVGR5TEt1MTNodGNiTEZpUFhtMTN3NUtjT29MTzZPQVQ5SXBFdkdLdnRyZm1nVjU2WmY4RmVpaEZTUjcxZkpTajYtRkVseGtYS045NUd6bC1pOUZ3SmJrZ2M1SnA4OTVMU3hqODE0TFJMNTlpV0VMU3VqQmN1MERHMklqU2Y3SWJtdWxLdHFsemxUNWdRYUdXU1RoWXczT0JpQnV4RzF4ejRhOVZZaF9ONEgyRkdLc0NrVTl5ZzZQRTJDYy1PWnRYeXJqNnlrcGNYTE44dHBnTUR1c2Fyd0p4eXE3NVZ5V2FzTUdOOWsxRVVOdW5GVXpYSWVPb2o3WHZJZmFMV2ZoMXJXQ0xLazMzNXA5UGxJQUhJa2tYczZvd0JzNE9DQWhUd1A3TUpLS3JudGNTU1Y3V09RUHRDcmdGUWViaEhHU0hwM1VJbDExVFZJZGg1Mm5LNTFIZ1ZUR2drOEpwYXdLSEU0d2dZeDUxRXhlV29OYW1kbFM0UHlqT0pKanVxNHJIeXFXdVJoblhXWXFJQmExaTZlU0FBM3RCWEJ1Wm4td1hqUjhKMHZkaEpHRTUxRy1hR1dlNk02czRfTThDTWNQZjRxaTJXaXFVT09QZ1lrVElnamMyMzI3NU5zWWRHNmx1OUZGVk52a0lHRnMzdFV6cndaZXM4d1h2YWVaX2NjUmR2ZFJqcGgzalVpUFhxUHp2dmdsTE54TFFqaXBTQ0dSSE9KYnNfQ1pQdnR1eXdVNmU3Vk9sRGpCNVdlcjFFRkF6dDdrY3o3MFBkTl9oYnduV1kyRWdBVFZzQzVLZGgtWUw0N3pjOTA3OWc0OTYtSWE2bmxoNHp6Z3lGQWpXdjg2SF91VWsiO3ZhciBuPSJodHRwczovL2Q5M2loN3V5M2F6anAuY2xvdWRmcm9udC5uZXQvbWV0cmlrYS93YXRjaC5qcyIsbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxvLHIpe3ZhciBhPXRoaXM7dGhpcy5nZXRZYT1lLHRoaXMubmVlZExvYWRNZXRyaWthPW8sdGhpcy5sb2FkTWV0cmlrYT1pKDMxKS5vbmNlKGZ1bmN0aW9uKCl7aWYoYS5uZWVkTG9hZE1ldHJpa2EmJiFhLndpbi5ZQV9UVVJCT19NRVRSSUtBKXt2YXIgZT1hLmdldFlhKCkucmVsSG9zdG5hbWU/bjp0Lk1FVFJJS0FfVVJMO2koMTM3KS5sb2FkQ3VzdG9tU2NyaXB0KHtzcmM6ZSx3aW46YS53aW59KX19KSx0aGlzLndpbj1yfHx3aW5kb3csQm9vbGVhbihlKCkuTWV0cmlrYSk/dGhpcy5tZXRyaWthTmFtZT0iTWV0cmlrYSI6Qm9vbGVhbihlKCkuTWV0cmlrYTIpP3RoaXMubWV0cmlrYU5hbWU9Ik1ldHJpa2EyIjp0aGlzLm1ldHJpa2FOYW1lPSJ0YWciPT09dGhpcy53aW4uWUFfVFVSQk9fTUVUUklLQT8iTWV0cmlrYTIiOiJNZXRyaWthIix0aGlzLm1ldHJpa2FDYWxsYmFja3NOYW1lPXQubWV0cmlrYUNhbGxiYWNrc0RpY3RbdGhpcy5tZXRyaWthTmFtZV19cmV0dXJuIGUuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24odCxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9ITApLHRoaXMuaW5zdGFuY2V8fCh0aGlzLmluc3RhbmNlPW5ldyBlKHQsaSkpLHRoaXMuaW5zdGFuY2V9LGUucHJvdG90eXBlLnJlcXVlc3RDb3VudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpczt0aGlzLmlzTG9hZGVkKCk/dCh0aGlzLmdldENvdW50ZXIoZSkpOih0aGlzLmxvYWRNZXRyaWthKCksdGhpcy5hZGRDYWxsYmFjayhmdW5jdGlvbigpe3QoaS5nZXRDb3VudGVyKGUpKX0pKX0sZS5wcm90b3R5cGUuZ2V0Q291bnRlcj1mdW5jdGlvbihlKXt2YXIgdD0ieWFDb3VudGVyIitlLmlkO3JldHVybiB0aGlzLndpblt0XXx8KHRoaXMud2luW3RdPXRoaXMuY3JlYXRlQ291bnRlcihlKSksdGhpcy53aW5bdF19LGUucHJvdG90eXBlLmlzTG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5nZXRZYSgpW3RoaXMubWV0cmlrYU5hbWVdKX0sZS5wcm90b3R5cGUuYWRkQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7dGhpcy53aW5bdGhpcy5tZXRyaWthQ2FsbGJhY2tzTmFtZV18fCh0aGlzLndpblt0aGlzLm1ldHJpa2FDYWxsYmFja3NOYW1lXT1bXSksdGhpcy53aW5bdGhpcy5tZXRyaWthQ2FsbGJhY2tzTmFtZV0ucHVzaChlKX0sZS5wcm90b3R5cGUuY3JlYXRlQ291bnRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFlhKClbdGhpcy5tZXRyaWthTmFtZV07aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJtZXRyaWthIGNvdW50ZXIgY3JlYXRpb24gZXJyb3I6ICIrdGhpcy5tZXRyaWthTmFtZSsiIGlzIG5vdCBpbiBjb250ZXh0Iik7dHJ5e3JldHVybiBuZXcgdCh7aWQ6ZS5pZCx0eXBlOmUuaXNZQU4/MTp2b2lkIDAsZGVmZXI6ITAsbmNrOiFlLmVuYWJsZUNvb2tpZXN9KX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoIm1ldHJpa2EgY291bnRlciBjcmVhdGlvbiBlcnJvcjogIitlLm1lc3NhZ2UpfX0sZX0oKTt0Lk1ldHJpa2FNYW5hZ2VyPW99LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY3JlYXRlSGlkZGVuRnJpZW5kbHlJRnJhbWU9ZnVuY3Rpb24oZSl7dmFyIHQ9aSg0NDApLmNyZWF0ZUZyaWVuZGx5SUZyYW1lKGUpO3JldHVybiB0LndpZHRoPSIwIix0LmhlaWdodD0iMCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUZyaWVuZGx5SUZyYW1lPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dm9pZCAwPT09dD97fTp0LG49aS5jb250ZW50LG89aS5zaXplLHI9ZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO3Iuc2Nyb2xsaW5nPSJubyIsci5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpLHIuc3R5bGUuZGlzcGxheT0iYmxvY2siLG8mJihyLmhlaWdodD1vLmhlaWdodCxyLndpZHRoPW8ud2lkdGgpLGUuYXBwZW5kQ2hpbGQocik7dmFyIGE9ci5jb250ZW50RG9jdW1lbnQ7cmV0dXJuIGEub3BlbigpLG4mJmEud3JpdGUobiksYS5jbG9zZSgpLGEuYm9keS5zdHlsZS5tYXJnaW49IjAiLHIuc3R5bGUuYm9yZGVyV2lkdGg9IjAiLHJ9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnJlbW92ZUlmcmFtZT1mdW5jdGlvbihlKXtlLnNyYz0iIixpKDYzKS5yZW1vdmVOb2RlRnJvbVBhcmVudChlKX19LGZ1bmN0aW9uKGUsdCxpKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGksbil7ZnVuY3Rpb24gbyhlLHQpe3JldHVybih0eXBlb2YgdClbMF09PWV9ZnVuY3Rpb24gcihlLHQpe3JldHVybih0PWZ1bmN0aW9uIHMobCxjLHUsZCxwLGYpe2lmKGQ9cy5xLGwhPW8pcmV0dXJuIHIoZnVuY3Rpb24oZSx0KXtkLnB1c2goe3A6dGhpcyxyOmUsajp0LDE6bCwwOmN9KX0pO2lmKHUmJm8oaSx1KXxvKG4sdSkpdHJ5e3A9dS50aGVufWNhdGNoKGUpe2M9MCx1PWV9aWYobyhpLHApKXRyeXtwLmNhbGwodSxoKDEpLGM9aCgwKSl9Y2F0Y2goZSl7YyhlKX1lbHNlIGZvcih0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG8oaSx0PWM/dDpuKT9yKGZ1bmN0aW9uKGUsaSl7YSh0aGlzLGUsaSx1LHQpfSk6ZX0sZj0wO2Y8ZC5sZW5ndGg7KXA9ZFtmKytdLG8oaSxsPXBbY10pP2EocC5wLHAucixwLmosdSxsKTooYz9wLnI6cC5qKSh1KTtmdW5jdGlvbiBoKGUpe3JldHVybiBmdW5jdGlvbih0KXtwJiYocD0wLHMobyxlLHQpKX19fSkucT1bXSxlLmNhbGwoZT17dGhlbjpmdW5jdGlvbihlLGkpe3JldHVybiB0KGUsaSl9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0KDAsZSl9fSxmdW5jdGlvbihlKXt0KG8sMSxlKX0sZnVuY3Rpb24oZSl7dChvLDAsZSl9KSxlfWZ1bmN0aW9uIGEoZSxyLGEscyxsKXt0KGZ1bmN0aW9uKCl7dHJ5e3M9bChzKSxsPXMmJm8obixzKXxvKGkscykmJnMudGhlbixvKGksbCk/cz09ZT9hKFR5cGVFcnJvcigpKTpsLmNhbGwocyxyLGEpOnIocyl9Y2F0Y2goZSl7YShlKX19KX1mdW5jdGlvbiBzKGUpe3JldHVybiByKGZ1bmN0aW9uKHQpe3QoZSl9KX1lLmV4cG9ydHM9cixyLnJlc29sdmU9cyxyLnJlamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gcihmdW5jdGlvbih0LGkpe2koZSl9KX0sci5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZnVuY3Rpb24odCxpLG4sbyl7bz1bXSxuPWUubGVuZ3RofHx0KG8pLGUubWFwKGZ1bmN0aW9uKGUscil7cyhlKS50aGVuKGZ1bmN0aW9uKGUpe29bcl09ZSwtLW58fHQobyl9LGkpfSl9KX0sci5yYWNlPWZ1bmN0aW9uKGUpe3JldHVybiByKGZ1bmN0aW9uKHQsaSl7ZS5tYXAoZnVuY3Rpb24oZSl7cyhlKS50aGVuKHQsaSl9KX0pfX0oImYiLCJvIil9KS5jYWxsKHQsaSgyNzYpLnNldEltbWVkaWF0ZSl9LGZ1bmN0aW9uKGUsdCxpKXsoZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSxpKXsidXNlIHN0cmljdCI7aWYoIWUuc2V0SW1tZWRpYXRlKXt2YXIgbixvLHIsYSxzLGw9MSxjPXt9LHU9ITEsZD1lLmRvY3VtZW50LHA9T2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cD1wJiZwLnNldFRpbWVvdXQ/cDplLCJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoZS5wcm9jZXNzKT9uPWZ1bmN0aW9uKGUpe3QubmV4dFRpY2soZnVuY3Rpb24oKXtoKGUpfSl9OiFmdW5jdGlvbigpe2lmKGUucG9zdE1lc3NhZ2UmJiFlLmltcG9ydFNjcmlwdHMpe3ZhciB0PSEwLGk9ZS5vbm1lc3NhZ2U7cmV0dXJuIGUub25tZXNzYWdlPWZ1bmN0aW9uKCl7dD0hMX0sZS5wb3N0TWVzc2FnZSgiIiwiKiIpLGUub25tZXNzYWdlPWksdH19KCk/ZS5NZXNzYWdlQ2hhbm5lbD8oKHI9bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7aChlLmRhdGEpfSxuPWZ1bmN0aW9uKGUpe3IucG9ydDIucG9zdE1lc3NhZ2UoZSl9KTpkJiYib25yZWFkeXN0YXRlY2hhbmdlImluIGQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik/KG89ZC5kb2N1bWVudEVsZW1lbnQsbj1mdW5jdGlvbihlKXt2YXIgdD1kLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aChlKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLG8ucmVtb3ZlQ2hpbGQodCksdD1udWxsfSxvLmFwcGVuZENoaWxkKHQpfSk6bj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGgsMCxlKX06KGE9InNldEltbWVkaWF0ZSQiK01hdGgucmFuZG9tKCkrIiQiLHM9ZnVuY3Rpb24odCl7dC5zb3VyY2U9PT1lJiYic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmMD09PXQuZGF0YS5pbmRleE9mKGEpJiZoKCt0LmRhdGEuc2xpY2UoYS5sZW5ndGgpKX0sZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscywhMSk6ZS5hdHRhY2hFdmVudCgib25tZXNzYWdlIixzKSxuPWZ1bmN0aW9uKHQpe2UucG9zdE1lc3NhZ2UoYSt0LCIqIil9KSxwLnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXsiZnVuY3Rpb24iIT10eXBlb2YgZSYmKGU9bmV3IEZ1bmN0aW9uKCIiK2UpKTtmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSksaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV09YXJndW1lbnRzW2krMV07dmFyIG89e2NhbGxiYWNrOmUsYXJnczp0fTtyZXR1cm4gY1tsXT1vLG4obCksbCsrfSxwLmNsZWFySW1tZWRpYXRlPWZ9ZnVuY3Rpb24gZihlKXtkZWxldGUgY1tlXX1mdW5jdGlvbiBoKGUpe2lmKHUpc2V0VGltZW91dChoLDAsZSk7ZWxzZXt2YXIgdD1jW2VdO2lmKHQpe3U9ITA7dHJ5eyFmdW5jdGlvbihlKXt2YXIgdD1lLmNhbGxiYWNrLG49ZS5hcmdzO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnQoKTticmVhaztjYXNlIDE6dChuWzBdKTticmVhaztjYXNlIDI6dChuWzBdLG5bMV0pO2JyZWFrO2Nhc2UgMzp0KG5bMF0sblsxXSxuWzJdKTticmVhaztkZWZhdWx0OnQuYXBwbHkoaSxuKX19KHQpfWZpbmFsbHl7ZihlKSx1PSExfX19fX0oInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmP3ZvaWQgMD09PWU/dGhpczplOnNlbGYpfSkuY2FsbCh0LGkoMjc3KSxpKDQ0NCkpfSxmdW5jdGlvbihlLHQpe3ZhciBpLG4sbz1lLmV4cG9ydHM9e307ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoZSl7aWYoaT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoaT09PXJ8fCFpKSYmc2V0VGltZW91dClyZXR1cm4gaT1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIGkoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGkuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIGkuY2FsbCh0aGlzLGUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7aT0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnJ9Y2F0Y2goZSl7aT1yfXRyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmF9Y2F0Y2goZSl7bj1hfX0oKTt2YXIgbCxjPVtdLHU9ITEsZD0tMTtmdW5jdGlvbiBwKCl7dSYmbCYmKHU9ITEsbC5sZW5ndGg/Yz1sLmNvbmNhdChjKTpkPS0xLGMubGVuZ3RoJiZmKCkpfWZ1bmN0aW9uIGYoKXtpZighdSl7dmFyIGU9cyhwKTt1PSEwO2Zvcih2YXIgdD1jLmxlbmd0aDt0Oyl7Zm9yKGw9YyxjPVtdOysrZDx0OylsJiZsW2RdLnJ1bigpO2Q9LTEsdD1jLmxlbmd0aH1sPW51bGwsdT0hMSxmdW5jdGlvbihlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKG49PT1hfHwhbikmJmNsZWFyVGltZW91dClyZXR1cm4gbj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtuKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBoKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gZygpe31vLm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRbaS0xXT1hcmd1bWVudHNbaV07Yy5wdXNoKG5ldyBoKGUsdCkpLDEhPT1jLmxlbmd0aHx8dXx8cyhmKX0saC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sby50aXRsZT0iYnJvd3NlciIsby5icm93c2VyPSEwLG8uZW52PXt9LG8uYXJndj1bXSxvLnZlcnNpb249IiIsby52ZXJzaW9ucz17fSxvLm9uPWcsby5hZGRMaXN0ZW5lcj1nLG8ub25jZT1nLG8ub2ZmPWcsby5yZW1vdmVMaXN0ZW5lcj1nLG8ucmVtb3ZlQWxsTGlzdGVuZXJzPWcsby5lbWl0PWcsby5wcmVwZW5kTGlzdGVuZXI9ZyxvLnByZXBlbmRPbmNlTGlzdGVuZXI9ZyxvLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX0sby5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sby5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LG8uY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sby51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LHI9KG49aSgzKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciBhPWkoMTk5KS5nZXRTdHlsZXNDb250YWluZXI7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlfXJbImRlZmF1bHQiXS5jb21wb25lbnRzLmVsZW1lbnQ9clsiZGVmYXVsdCJdLmNyZWF0ZUNvbXBvbmVudChpKDI4MykuQ29tcG9uZW50RWxlbWVudCx7b25Jbml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnPWkoMjgpLnJlcGxhY2VZYXRhZyh0aGlzLnRhZyksdGhpcy5lbmNvZGVTdHlsZXM9ITAsdGhpcy5fX2Jhc2UoKX0sc2V0QXR0cjpmdW5jdGlvbihlLHQpeyJkYXRhLWlkIiE9PWUmJiJkYXRhLXVuaXEtaWQiIT09ZSYmKHRoaXMuZW5jb2RlU3R5bGVzJiYoImlkIj09PWU/dD0iISI9PT10LmNoYXJBdCgwKT90LnNsaWNlKDEpOmkoMjgpLmdldEFsaWFzKHQpOiJzdHlsZSIhPT1lJiZpKDApLmlzU3RyaW5nKHQpJiZ0LmluZGV4T2YoIiMiKT4tMSYmKHQ9dC5yZXBsYWNlKC8jKChcd3xbLV9dKSspLyxmdW5jdGlvbihlLHQpe3JldHVybiIjIitpKDI4KS5nZXRBbGlhcyh0KX0pKSksdGhpcy5fX2Jhc2UoZSx0KSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fYmFzZShzKGUsdGhpcy5lbmNvZGVTdHlsZXMpKX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy5fX2Jhc2UocyhlLHRoaXMuZW5jb2RlU3R5bGVzKSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3RoaXMuX19iYXNlKHMoZSx0aGlzLmVuY29kZVN0eWxlcykpfSxnZXRUb3BQYXJlbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PXRoaXMuZ2V0UGFyZW50Q29tcG9uZW50KCk7dDspdD0oZT10KS5nZXRQYXJlbnRDb21wb25lbnQoKTtyZXR1cm4gZX0sc2V0U3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMj09YXJndW1lbnRzLmxlbmd0aCYmKCh0PXt9KVthcmd1bWVudHNbMF1dPWFyZ3VtZW50c1sxXSxlPXQpLHRoaXMuX2FkYlN0eWxlc3x8KHRoaXMuX2FkYlN0eWxlcz17fSx0aGlzLl9hZGJDbGFzcz0oMCxpKDE0NikuaWRlbnRpZnkpKCksdGhpcy5hZGRDbGFzcyh0aGlzLl9hZGJDbGFzcyksdGhpcy5wcm9wc1siY2xhc3MiXT90aGlzLnByb3BzWyJjbGFzcyJdKz0iICIrdGhpcy5fYWRiQ2xhc3M6dGhpcy5wcm9wc1siY2xhc3MiXT10aGlzLl9hZGJDbGFzcyksIXRoaXMuX3N0eWxlRWxlbWVudCl7dmFyIG49dGhpcy5nZXRUb3BQYXJlbnQoKSxyPSgwLGkoMjA0KS5nZXRSb290Tm9kZSkodGhpcy5fZWxlbWVudCk7cj09PWRvY3VtZW50JiYocj0oMCxpKDgwKS5nZXRIZWFkKSh3aW5kb3cpKSx0aGlzLl9zdHlsZUVsZW1lbnQ9YShuLm5vbmNlLHIpfXRoaXMuX2FkYlN0eWxlcz1vKHRoaXMuX2FkYlN0eWxlcyxlKTt2YXIgcz1pKDI4KS5nZXRBbGlhcyh0aGlzLl9hZGJDbGFzcyksbD1uZXcgUmVnRXhwKCJcXHNcXC4iK3MrIlxcc3suKj99IiwiZyIpLGM9Ii4iK3MrIiB7IisoMCxpKDE3OSkuc3R5bGVUb1N0cmluZykodGhpcy5fYWRiU3R5bGVzLCEwKSsifSI7dGhpcy5fc3R5bGVFbGVtZW50LmlubmVyVGV4dD10aGlzLl9zdHlsZUVsZW1lbnQuaW5uZXJUZXh0LnJlcGxhY2UobCwiIikrIiAiK2N9fSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBuPWkoNDQ3KSxvPWkoNDUwKSxyPWkoMjc4KSxhPWkoMTQyKSxzPWkoOTUpLGw9e3JlbmRlcjphLk1hcmt1cFdyaXRlci5yZW5kZXJDb21wb25lbnQscmVuZGVyVG9Ob2RlOmEuTWFya3VwV3JpdGVyLnJlbmRlckNvbXBvbmVudFRvTm9kZSxBYnN0cmFjdENvbXBvbmVudDpzLkFic3RyYWN0Q29tcG9uZW50LGNyZWF0ZUNvbXBvbmVudDpvLmNyZWF0ZUNvbXBvbmVudCxjcmVhdGU6bi5jcmVhdGUsY29tcG9uZW50czpyLmNvbXBvbmVudHN9O3RbImRlZmF1bHQiXT1sfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDYwKSxvPWkoMTkpLHI9aSgyNzgpLGE9aSgxNDIpLHM9W107dC5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9W10sbD0yO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspaVtsLTJdPWFyZ3VtZW50c1tsXTtmb3IodmFyIGM9W10sdT1hLk1hcmt1cFdyaXRlci5nZXRDdXJyZW50Q29tcG9uZW50KCksZD1hcmd1bWVudHMubGVuZ3RoLTE7ZD49Mjspcy5wdXNoKGFyZ3VtZW50c1tkLS1dKTtmb3IoO3MubGVuZ3RoPjA7KXt2YXIgcD1zLnBvcCgpO2lmKG4uaXNBcnJheShwKSlmb3IodmFyIGY9cC5sZW5ndGgtMTtmPj0wOylzLnB1c2gocFtmLS1dKTtlbHNlIHZvaWQgMCE9PXAmJm51bGwhPT1wJiZjLnB1c2gocCl9cmV0dXJuIG8uaXNTdHJpbmcoZSkmJih0fHwodD17fSksdC50YWc9ZSxlPXIuY29tcG9uZW50cy5lbGVtZW50KSxuZXcgZSh0LGMsdSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt0LkNPTVBPTkVOVF9TVEFURVM9e0lOSVRJQUw6IklOSVRJQUwiLE1PVU5URUQ6Ik1PVU5URUQiLFVOTU9VTlRFRDoiVU5NT1VOVEVEIixERVNUUk9ZRUQ6IkRFU1RST1lFRCJ9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlubmVySHRtbD1mdW5jdGlvbihlLHQpe2UuaW5uZXJIVE1MPXR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmNyZWF0ZUNvbXBvbmVudD1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztuLmlzQXJyYXkoZVswXSl8fG4uaXNGdW5jdGlvbihlWzBdKXx8KGU9W28uQWJzdHJhY3RDb21wb25lbnQsZVswXSxlWzFdXSk7cmV0dXJuIHIuYXBwbHkodGhpcyxlKX07dmFyIG49ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSksbz1pKDk1KTt2YXIgcj1pKDQ1MSl9LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9aSg0NTIpfSxmdW5jdGlvbihlLHQsaSl7dmFyIG47IWZ1bmN0aW9uKG8pe3ZhciByPWZ1bmN0aW9uKCl7fSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJuIHQucHJvdG90eXBlPWUsbmV3IHR9LGw9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgaSBpbiBlKWEuY2FsbChlLGkpJiZ0LnB1c2goaSk7cmV0dXJuIHR9LGM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdClhLmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9LHU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxjLGQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxwPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1kLmNhbGwoZSl9LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PWQuY2FsbChlKX0saD0hMCxnPXt0b1N0cmluZzoiIn07Zm9yKHZhciBfIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShfKSYmKGg9ITEpO3ZhciB5PWg/WyJ0b1N0cmluZyIsInZhbHVlT2YiXTpudWxsO2Z1bmN0aW9uIG0oZSx0LGkpe2Zvcih2YXIgbixvLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9bChlKTtpZihoKWZvcih2YXIgaSxuPTA7aT15W24rK107KWUuaGFzT3duUHJvcGVydHkoaSkmJnQucHVzaChpKTtyZXR1cm4gdH0oaSkscz0wLGM9YS5sZW5ndGg7czxjOykiX19zZWxmIiE9PShuPWFbcysrXSkmJihvPWlbbl0sZihvKSYmKCFvLnByb3RvdHlwZXx8IW8ucHJvdG90eXBlLl9fc2VsZikmJm8udG9TdHJpbmcoKS5pbmRleE9mKCIuX19iYXNlIik+LTE/dFtuXT1mdW5jdGlvbihpLG4pe3ZhciBvPWVbaV0/ZVtpXToiX19jb25zdHJ1Y3RvciI9PT1pP3QuX19zZWxmLl9fcGFyZW50OnIsYT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX19iYXNlO3RoaXMuX19iYXNlPWEuX19iYXNlO3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzLl9fYmFzZT1lLHR9O3JldHVybiBhLl9fYmFzZT1vLGF9KG4sbyk6dFtuXT1vKX1mdW5jdGlvbiBiKGUsdCl7Zm9yKHZhciBpLG49MTtpPWVbbisrXTspdD9mKGkpP3Yuc2VsZih0LGkucHJvdG90eXBlLGkpOnYuc2VsZih0LGkpOnQ9ZihpKT92KGVbMF0saS5wcm90b3R5cGUsaSk6dihlWzBdLGkpO3JldHVybiB0fHxlWzBdfWZ1bmN0aW9uIHYoKXt2YXIgZT1hcmd1bWVudHMsdD1wKGVbMF0pLGk9dHx8ZihlWzBdKSxuPWk/dD9iKGVbMF0pOmVbMF06cixvPWVbaT8xOjBdfHx7fSxhPWVbaT8yOjFdLGw9by5fX2NvbnN0cnVjdG9yfHxpJiZuLnByb3RvdHlwZSYmbi5wcm90b3R5cGUuX19jb25zdHJ1Y3Rvcj9mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfTppP2Z1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfTpmdW5jdGlvbigpe307aWYoIWkpcmV0dXJuIGwucHJvdG90eXBlPW8sbC5wcm90b3R5cGUuX19zZWxmPWwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWwsYyhsLGEpO3UobCxuKSxsLl9fcGFyZW50PW47dmFyIGQ9bi5wcm90b3R5cGUsaD1sLnByb3RvdHlwZT1zKGQpO3JldHVybiBoLl9fc2VsZj1oLmNvbnN0cnVjdG9yPWwsbyYmbShkLGgsbyksYSYmbShuLGwsYSksbH12LnNlbGY9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMsdD1wKGVbMF0pP2IoZVswXSxlWzBdWzBdKTplWzBdLGk9ZVsxXSxuPWVbMl0sbz10LnByb3RvdHlwZTtyZXR1cm4gaSYmbShvLG8saSksbiYmbSh0LHQsbiksdH07ZS5leHBvcnRzPXYsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGVzJiYiZnVuY3Rpb24iPT10eXBlb2YgbW9kdWxlcy5kZWZpbmUmJm1vZHVsZXMuZGVmaW5lKCJpbmhlcml0IixmdW5jdGlvbihlKXtlKHYpfSksdm9pZCAwPT09KG49ZnVuY3Rpb24oZSx0LGkpe2kuZXhwb3J0cz12fS5jYWxsKHQsaSx0LGUpKXx8KGUuZXhwb3J0cz1uKSwhMSYmKG8uaW5oZXJpdD12KX0odGhpcyl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNPcGVyYT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxlLm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiT3BlcmEiKT4tMXx8ZS5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9QUiIpPi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc1RpemVuPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLGkoODEpLmdldFVzZXJBZ2VudChlKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInRpemVuIik+LTF9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFNhZmFyaVZlcnNpb249ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9d2luZG93KSxpKDI4OCkuaXNTYWZhcmkmJmUubmF2aWdhdG9yJiZlLm5hdmlnYXRvci51c2VyQWdlbnQpe3ZhciB0PWUubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvdmVyc2lvblwvKFxkKykvaSk7aWYodCl7dmFyIG49TnVtYmVyKHRbMV0pO2lmKG4pcmV0dXJuIG59fXJldHVybi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJT1NWZXJzaW9uPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPXdpbmRvdyksaSgxMDgpLmdldElzSU9TKGUpJiZlLm5hdmlnYXRvcil7dmFyIHQ9ZS5uYXZpZ2F0b3IucGxhdGZvcm07aWYodCYmL2lQKGhvbmV8b2R8YWQpLy50ZXN0KHQpKXt2YXIgbj1lLm5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9PUyAoXGQrKV8oXGQrKV8/KFxkKyk/Lyk7aWYobilyZXR1cm4gcGFyc2VJbnQoblsxXSwxMCl9fXJldHVybi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRBbmRyb2lkVmVyc2lvbj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpO3ZhciB0PWUubmF2aWdhdG9yLnVzZXJBZ2VudCxpPXQuaW5kZXhPZigiQW5kcm9pZCIpO3JldHVybi0xPT09aT8tMTpwYXJzZUZsb2F0KHQuc2xpY2UoaSs4KSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzUGhvbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXdpbmRvdyksaSg0NTkpLmdldElzSXBob25lKGUpfHxpKDI0OCkuZ2V0SWZJc0FuZHJvaWQoZSkmJmkoODEpLmdldFVzZXJBZ2VudChlKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1vYmlsZSIpPi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc0lwaG9uZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxpKDEwOCkuZ2V0SXNJT1MoZSkmJmkoODEpLmdldFVzZXJBZ2VudChlKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImlwaG9uZSIpPi0xfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRJc1Bvc3RNZXNzYWdlU3VwcG9ydGVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT13aW5kb3cpLGkoNykuaXNGdW5jdGlvbihlLnBvc3RNZXNzYWdlKSYmLTE9PT1pKDExMikuZ2V0SW50ZXJuZXRFeHBsb3JlclZlcnNpb24oZSkmJiFpKDIwMCkuaXNPcGVyYU1pbmkoZSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNsYW1wPWZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZT5pP2k6ZTx0P3Q6ZX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0W2ktMV09YXJndW1lbnRzW2ldO3JldHVybiBlLnRvU3RyaW5nKCkucmVwbGFjZSgvKF58LnxccnxcbikoXCRceyguKj8pXH0pL2csZnVuY3Rpb24oZSxpLG4sbyl7cmV0dXJuIlxcIj09PWk/bjovXlswLTldKyQvLnRlc3Qobyk/aStbdFsrb11dLmpvaW4oIiIpOmkrW3RbMF0mJnRbMF1bb11dLmpvaW4oIiIpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhbWVsaXplS2V5cz1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gaSg0NykuZm9yT3duKGUsZnVuY3Rpb24oZSxuKXt0W2koMjgwKS5jYW1lbGl6ZShuKV09ZX0pLHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7bisrKXRbZVtuXV09bjtyZXR1cm4oMCxpKDQ2KS5nZXRPYmplY3RLZXlzKSh0KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QW5pbWF0aW9uRnJhbWVGdW5jdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGUubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxlLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZS5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24odCl7cmV0dXJuIGUuc2V0VGltZW91dCh0LGkoNDY2KS5ERUZBVUxUX0FOSU1BVElPTl9USU1FT1VUKX0sbj1lLmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlLm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlLndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lfHxlLm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsZWFyVGltZW91dCh0KX07cmV0dXJue3JlcXVlc3RBbmltYXRpb25GcmFtZTp0LmJpbmQoZSksY2FuY2VsQW5pbWF0aW9uRnJhbWU6bi5iaW5kKGUpfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuREVGQVVMVF9BTklNQVRJT05fVElNRU9VVD0xZTMvNjB9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSgwLGkoMTc3KS5hdWdtZW50KShPYmplY3Qse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe3RoaXMuZGVsYXk9ZXx8MH0sb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29uQ29uZmlybWVkPWUsdGhpc30sbGlzdGVuOmZ1bmN0aW9uKGUpe3JldHVybigwLGkoNSkuZm9yRWFjaCkoZSxmdW5jdGlvbihlKXt2YXIgdCxuPSgwLGkoMTcpLm9uKShlLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7dHx8KHQ9aSgxKS5wcm90ZWN0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLl9vbkNvbmZpcm1lZChlLmdldEF0dHJpYnV0ZSgiZGF0YS1pZCIpKSwoMCxpKDE3KS51bikobiksKDAsaSgxNykudW4pKG8pfSx0aGlzLmRlbGF5LHRoaXMpKX0sdGhpcyksbz0oMCxpKDE3KS5vbikoZSwibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodCksdD1udWxsfSl9LHRoaXMpLHRoaXN9fSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1pKDQ2OSkpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTt3aW5kb3cuUHJvbWlzZXx8KHdpbmRvdy5Qcm9taXNlPW9bImRlZmF1bHQiXSksaSg0NzApLGkoNDcxKSxpKDU2OCksaSg3MTkpLGkoNzM4KX0sZnVuY3Rpb24oZSx0LGkpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24oaSl7dmFyIG49c2V0VGltZW91dDtmdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIHIoZSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldyIpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm5vdCBhIGZ1bmN0aW9uIik7dGhpcy5fc3RhdGU9MCx0aGlzLl9oYW5kbGVkPSExLHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLl9kZWZlcnJlZHM9W10sdShlLHRoaXMpfWZ1bmN0aW9uIGEoZSx0KXtmb3IoOzM9PT1lLl9zdGF0ZTspZT1lLl92YWx1ZTswIT09ZS5fc3RhdGU/KGUuX2hhbmRsZWQ9ITAsci5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKXt2YXIgaT0xPT09ZS5fc3RhdGU/dC5vbkZ1bGZpbGxlZDp0Lm9uUmVqZWN0ZWQ7aWYobnVsbCE9PWkpe3ZhciBuO3RyeXtuPWkoZS5fdmFsdWUpfWNhdGNoKGUpe3JldHVybiB2b2lkIGwodC5wcm9taXNlLGUpfXModC5wcm9taXNlLG4pfWVsc2UoMT09PWUuX3N0YXRlP3M6bCkodC5wcm9taXNlLGUuX3ZhbHVlKX0pKTplLl9kZWZlcnJlZHMucHVzaCh0KX1mdW5jdGlvbiBzKGUsdCl7dHJ5e2lmKHQ9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuIik7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXt2YXIgaT10LnRoZW47aWYodCBpbnN0YW5jZW9mIHIpcmV0dXJuIGUuX3N0YXRlPTMsZS5fdmFsdWU9dCx2b2lkIGMoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGkpcmV0dXJuIHZvaWQgdSgobj1pLG89dCxmdW5jdGlvbigpe24uYXBwbHkobyxhcmd1bWVudHMpfSksZSl9ZS5fc3RhdGU9MSxlLl92YWx1ZT10LGMoZSl9Y2F0Y2godCl7bChlLHQpfXZhciBuLG99ZnVuY3Rpb24gbChlLHQpe2UuX3N0YXRlPTIsZS5fdmFsdWU9dCxjKGUpfWZ1bmN0aW9uIGMoZSl7Mj09PWUuX3N0YXRlJiYwPT09ZS5fZGVmZXJyZWRzLmxlbmd0aCYmci5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKXtlLl9oYW5kbGVkfHxyLl91bmhhbmRsZWRSZWplY3Rpb25GbihlLl92YWx1ZSl9KTtmb3IodmFyIHQ9MCxpPWUuX2RlZmVycmVkcy5sZW5ndGg7dDxpO3QrKylhKGUsZS5fZGVmZXJyZWRzW3RdKTtlLl9kZWZlcnJlZHM9bnVsbH1mdW5jdGlvbiB1KGUsdCl7dmFyIGk9ITE7dHJ5e2UoZnVuY3Rpb24oZSl7aXx8KGk9ITAscyh0LGUpKX0sZnVuY3Rpb24oZSl7aXx8KGk9ITAsbCh0LGUpKX0pfWNhdGNoKGUpe2lmKGkpcmV0dXJuO2k9ITAsbCh0LGUpfX1yLnByb3RvdHlwZVsiY2F0Y2giXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LHIucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSx0KXt2YXIgaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihvKTtyZXR1cm4gYSh0aGlzLG5ldyBmdW5jdGlvbihlLHQsaSl7dGhpcy5vbkZ1bGZpbGxlZD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGwsdGhpcy5vblJlamVjdGVkPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbCx0aGlzLnByb21pc2U9aX0oZSx0LGkpKSxpfSxyLmFsbD1mdW5jdGlvbihlKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKTtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oZSxpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGUoW10pO3ZhciBuPXQubGVuZ3RoO2Z1bmN0aW9uIG8ocixhKXt0cnl7aWYoYSYmKCJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGEpKXt2YXIgcz1hLnRoZW47aWYoImZ1bmN0aW9uIj09dHlwZW9mIHMpcmV0dXJuIHZvaWQgcy5jYWxsKGEsZnVuY3Rpb24oZSl7byhyLGUpfSxpKX10W3JdPWEsMD09LS1uJiZlKHQpfWNhdGNoKGUpe2koZSl9fWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKW8ocix0W3JdKX0pfSxyLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3Rvcj09PXI/ZTpuZXcgcihmdW5jdGlvbih0KXt0KGUpfSl9LHIucmVqZWN0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihmdW5jdGlvbih0LGkpe2koZSl9KX0sci5yYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihmdW5jdGlvbih0LGkpe2Zvcih2YXIgbj0wLG89ZS5sZW5ndGg7bjxvO24rKyllW25dLnRoZW4odCxpKX0pfSxyLl9pbW1lZGlhdGVGbj0iZnVuY3Rpb24iPT10eXBlb2YgdCYmZnVuY3Rpb24oZSl7dChlKX18fGZ1bmN0aW9uKGUpe24oZSwwKX0sci5fdW5oYW5kbGVkUmVqZWN0aW9uRm49ZnVuY3Rpb24oZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlJiZjb25zb2xlLndhcm4oIlBvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjoiLGUpfSxyLl9zZXRJbW1lZGlhdGVGbj1mdW5jdGlvbihlKXtyLl9pbW1lZGlhdGVGbj1lfSxyLl9zZXRVbmhhbmRsZWRSZWplY3Rpb25Gbj1mdW5jdGlvbihlKXtyLl91bmhhbmRsZWRSZWplY3Rpb25Gbj1lfSx2b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXI6aS5Qcm9taXNlfHwoaS5Qcm9taXNlPXIpfSh0aGlzKX0pLmNhbGwodCxpKDI3Nikuc2V0SW1tZWRpYXRlKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWkoMTAyKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciByPW9bImRlZmF1bHQiXS5oYXNDbGFzcyxhPW9bImRlZmF1bHQiXS5hZGRDbGFzcyxzPW9bImRlZmF1bHQiXS5yZW1vdmVDbGFzcyxsPW9bImRlZmF1bHQiXS5pbm5lckhUTUw7b1siZGVmYXVsdCJdLmhhc0NsYXNzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSxpKDI4KS5nZXRBbGlhcyh0KSl9LG9bImRlZmF1bHQiXS5hZGRDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBuPSIiO3JldHVybiB0JiYobj10LnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpKDI4KS5nZXRBbGlhcyhlKX0pLmpvaW4oIiAiKSksYShlLG4pfSxvWyJkZWZhdWx0Il0ucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLGkoMjgpLmdldEFsaWFzKHQpKX0sb1siZGVmYXVsdCJdLmlubmVySFRNTD1mdW5jdGlvbihlLHQpe3JldHVybiBsKGUsaSgyOCkuZW5jb2RlVGVtcGxhdGUodCkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1pKDE2MykucHJvdG90eXBlLmluc2VydEh0bWw7aSgxNjMpLnByb3RvdHlwZS5fcmVuZGVyQWdhaW49ZnVuY3Rpb24oKXt0aGlzLl9jbGVhclZpZXcoKSx0aGlzLl9yZW5kZXIoKX0saSgxNjMpLnByb3RvdHlwZS5pbnNlcnRIdG1sPWZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGU9aSgzOCkucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5yZW5kZXJUbyksdD10aGlzLG89e2V2ZW50OmkoNDkpLkVWRU5UUy5CTE9DS19DT05GSVJNQVRJT04sZGF0YTp7YWN0aW9uOmkoNDkpLkVWRU5UUy5DT05GSVJNX0JMT0NLLHBhZ2VJZDp0aGlzLmRhdGFTb3VyY2UuX3BhZ2VJZCxibG9ja05hbWU6dGhpcy5zZXR0aW5ncy5mb3JtYXQubmFtZSxibG9ja0lkOnRoaXMuYmxvY2tJZCxyZW5kZXJUbzp0aGlzLnJlbmRlclRvLHR5cGU6IkQifX07aSgyMTQpKGUsbyksKDAsaSgzMzMpLnN0YXJ0V2F0Y2hpbmcpKGUsZnVuY3Rpb24oKXt0Ll9yZW5kZXJBZ2FpbigpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXIoaSg2KSksbz1yKGkoMCkpO2Z1bmN0aW9uIHIoZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fXZhciBhPWkoMzApLmkxOG4scz17bG9nbzpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sb2dvLWJsb2NrJyksZS5pc1ZlcnRpY2FsJiZ0LnB1c2goIiB5YXAtbG9nby1ibG9ja190eXBlX3ZlcnRpY2FsIiksdC5wdXNoKCciPjx5YXRhZyBjbGFzcz0ieWFwLWxvZ28tYmxvY2tfX3Bvc2l0aW9uIHlhcC1sb2dvLXBvc2l0aW9uIj48YSBjbGFzcz0ieWFwLWxvZ28tYmxvY2tfX3RleHQgeWFwLWxvZ28tdGV4dCB5YXAtbG9nby1jb2xvciB5YXAtbG9nby1iZy1jb2xvciIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicsZS51cmwsJyI+JyxlLnRpdGxlLCc8L2E+PC95YXRhZz48eWF0YWcgY2xhc3M9InlhcC1sb2dvLWJsb2NrX19hcnJvdyB5YXAtbG9nby1hcnJvdyI+PC95YXRhZz48L3lhdGFnPicpLCFvLmJyb3dzZXIuc3VwcG9ydC5jc3NUcmFuc2Zvcm0mJmUuaXNWZXJ0aWNhbCYmdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sb2dvLWZhbGxiYWNrIj48L3lhdGFnPicpLHQucHVzaCgiIiksdC5qb2luKCIiKX0sbG9nb19zdGFtcDpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sb2dvX3N0YW1wIj48YSBjbGFzcz0ieWFwLWxvZ29fc3RhbXBfX3RleHQiIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLGUudXJsLCciPicsZS50aXRsZSwiPC9hPiIpLHZvaWQgMCE9PWUuaW5zZXJ0QWR0dW5lJiZlLmluc2VydEFkdHVuZSYmdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sYXlvdXRfX2FkdHVuZSI+PC95YXRhZz4nKSx0LnB1c2goIjwveWF0YWc+IiksdC5qb2luKCIiKX0sY3VycmVuY3lMb2dvOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWN1cnJlbmN5LWxvZ28iPjxhIGNsYXNzPSJ5YXAtY3VycmVuY3ktbG9nb19fdGV4dCIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicsZS51cmwsJyI+JyxlLnRpdGxlLCc8L2E+PHlhdGFnIGNsYXNzPSIgeWFwLXRvb2x0aXAgeWFwLWN1cnJlbmN5LWxvZ29fX3Rvb2x0aXAiPjx5YXRhZyBjbGFzcz0ieWFwLXRvb2x0aXBfX2Fycm93IiAvPjwveWF0YWc+PHlhdGFnIGNsYXNzPSJ5YXAtdG9vbHRpcF9fdGV4dCI+JyxlLnRvb2x0aXBUaXRsZSwiPC95YXRhZz48L3lhdGFnPjwveWF0YWc+IiksdC5qb2luKCIiKX0scGljdHVyZTpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1waWN0dXJlLWJsb2NrIiBzdHlsZT0id2lkdGg6ICcsZS5hZC5waWN0dXJlLnBsYWNlaG9sZGVyLndpZHRoLCI7IGhlaWdodDogIixlLmFkLnBpY3R1cmUucGxhY2Vob2xkZXIuaGVpZ2h0LCc7Ij48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyxlLmFkLmNsaWNrSW1hZ2VVcmwsJyIgY2xhc3M9InlhcC1waWN0dXJlLWJsb2NrX19saW5rInN0eWxlPSJ3aWR0aDogJyxlLmFkLnBpY3R1cmUud2lkdGgsInB4ICFpbXBvcnRhbnQ7aGVpZ2h0OiAiLGUuYWQucGljdHVyZS5oZWlnaHQsInB4ICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IC0iLGUuYWQucGljdHVyZS53aWR0aC8yLCdweCAhaW1wb3J0YW50OyI+PGltZyBjbGFzcz0ieWFwLXBpY3R1cmUtYmxvY2tfX2ltYWdlIHlhcC1pbWFnZSIgc3JjPSInLGUuYWQucGljdHVyZS5zcmMsJyIgYWx0PSIic3R5bGU9IndpZHRoOiAnLGUuYWQucGljdHVyZS53aWR0aCwicHggIWltcG9ydGFudDttYXgtd2lkdGg6ICIsZS5hZC5waWN0dXJlLndpZHRoLCJweCAhaW1wb3J0YW50O2hlaWdodDogIixlLmFkLnBpY3R1cmUuaGVpZ2h0LCdweCAhaW1wb3J0YW50OyIgLz48L2E+PC95YXRhZz4nKSx0LmpvaW4oIiIpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgnPGEgY2xhc3M9InlhcC1idXR0b24gJyxlLnNpemU/InlhcC1idXR0b25fc2l6ZV8iK2Uuc2l6ZToiIiwnIiBocmVmPSInLGUubGluaywnIiB0YXJnZXQ9Il9ibGFuayI+PHlhdGFnIGNsYXNzPSJ5YXAtYnV0dG9uX190ZXh0Ij4nLGUudGV4dCwiPC95YXRhZz48L2E+IiksdC5qb2luKCIiKX0sYnV0dG9uTW9iaWxlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIiIpLGUubGluaz90LnB1c2goJzxhIGNsYXNzPSJ5YXAtYnV0dG9uIHlhcC1idXR0b25fbW9iaWxlICcsZS5pY29uPyJ5YXAtYnV0dG9uX2ljb25fdHJ1ZSI6IiIsIiB5YXAtYnV0dG9uX3N0eWxlXyIsZS5idXR0b25TdHlsZSwnIiBocmVmPSInLGUubGluaywnIiB0YXJnZXQ9Il9ibGFuayI+Jyk6dC5wdXNoKCc8c3BhbiBjbGFzcz0ieWFwLWJ1dHRvbiB5YXAtYnV0dG9uX21vYmlsZSAnLGUuaWNvbj8ieWFwLWJ1dHRvbl9pY29uX3RydWUiOiIiLCciPicpLHQucHVzaCgiIiksZS5pY29uJiZ0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWJ1dHRvbl9faWNvbiI+PGltZyBjbGFzcz0ieWFwLWJ1dHRvbl9faWNvbi1pbWFnZSIgc3JjPSInLGUuaWNvbi5zcmMsJyJhbHQ9IiI+PC95YXRhZz4nKSx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWJ1dHRvbl9fdGV4dCI+JyxlLnRleHQsIiIpLGUuZXh0cmFUZXh0JiYhZS5idXR0b25FeHBlcmltZW50JiZ0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWJ1dHRvbl9fdGV4dCB5YXAtYnV0dG9uX190ZXh0X2V4dHJhIj4nLGUuZXh0cmFUZXh0LCI8L3lhdGFnPiIpLHQucHVzaCgiPC95YXRhZz4iKSxlLmxpbms/dC5wdXNoKCI8L2E+Iik6dC5wdXNoKCI8L3NwYW4+IiksdC5wdXNoKCIiKSx0LmpvaW4oIiIpfSxkb21haW46ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgnPGEgY2xhc3M9InlhcC1kb21haW4geWFwLWRvbWFpbi10ZXh0IiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyxlLmFkLnVybCwnIj4nKSxlLmFkLmZhdmljb24mJmUuc2hvd0Zhdmljb24mJnQucHVzaCgiIixzLmZhdmljb24oe3NyYzplLmFkLmZhdmljb259KSwiIiksdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1kb21haW5fX3RleHQiPicsZS5hZC5kb21haW4sIjwveWF0YWc+PC9hPiIpLHQuam9pbigiIil9LG1vYmlsZUFwcDpmdW5jdGlvbihlKXt2YXIgdD1bXTt0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLW1vYmlsZS1hcHAgJyxlLnBsYWluTGluaz8ieWFwLW1vYmlsZS1hcHBfaW5saW5lIjoiIiwnIj4nKTt2YXIgaT1lLmFkLmFkZEluZm8ucHJpY2U/IiZuYnNwOyZuZGFzaDsgIitlLmFkLmFkZEluZm8ucHJpY2UrIiZuYnNwOyIrZS5hZC5hZGRJbmZvLnByaWNlQ3VycmVuY3lTeW1ib2w6bnVsbDtyZXR1cm4gdC5wdXNoKCIiKSxlLnBsYWluTGluaz90LnB1c2goJzxhIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fbGluayIgaHJlZj0iJyxlLmFkLmFkZEluZm8uY2FsbFRvQWN0aW9uVXJsLCciIHRhcmdldD0iX2JsYW5rIj4nLGUuYWQuYWRkSW5mby5jYWxsVG9BY3Rpb24rKGl8fCIiKSwiPC9hPiIpOnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fYnV0dG9uIj4nLHMuYnV0dG9uTW9iaWxlKHt0ZXh0OmUuYWQuYWRkSW5mby5jYWxsVG9BY3Rpb24sZXh0cmFUZXh0OmksbGluazplLm5vTGluaz9udWxsOmUuYWQuYWRkSW5mby5jYWxsVG9BY3Rpb25VcmwsYnV0dG9uU3R5bGU6ZS5idXR0b25TdHlsZSxpY29uOiFlLmJ1dHRvblN0eWxlJiZlLmFkLmljb25QaWN0dXJlfSksIjwveWF0YWc+IiksdC5wdXNoKCIiKSxlLmFkLmFkZEluZm8ucmF0aW5nJiYhZS5oaWRlUmF0aW5nJiZ0LnB1c2goIiIscy5tb2JpbGVBcHBfX3JhdGluZyh7YWQ6ZS5hZCxjZW50ZXJlZDplLnJhdGluZ0NlbnRlcmVkLGZ1bGxXaWR0aDplLnJhdGluZ0Z1bGxXaWR0aH0pLCIiKSx0LnB1c2goIjwveWF0YWc+IiksdC5qb2luKCIiKX0sbW9iaWxlQXBwX19yYXRpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9W107dC5wdXNoKCIiKTt2YXIgaT0iIjt0LnB1c2goIiIpLGkrPWUuYWQuYWRkSW5mby5yZXZpZXdDb3VudD8iIjoiIHlhcC1tb2JpbGUtYXBwX19yYXRpbmdfbm8tdm90ZXMiLHQucHVzaCgiIiksaSs9ZS5jZW50ZXJlZD8iIHlhcC1tb2JpbGUtYXBwX19yYXRpbmdfY29udGVudF9jZW50ZXJlZCI6IiIsdC5wdXNoKCIiKSxpKz1lLmZ1bGxXaWR0aD8iIHlhcC1tb2JpbGUtYXBwX19yYXRpbmdfd2lkdGhfZnVsbCI6IiIsdC5wdXNoKCIiKTt2YXIgbj1vLmZvcm1hdChlLmRpc2FibGVQYXJlbnRoZXNlcz8iJHtjfSI6Iigke2N9KSIse2M6ZS5hZC5hZGRJbmZvLnJldmlld0NvdW50fSk7dC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1tb2JpbGUtYXBwX19yYXRpbmcgJyxpLCciIHRpdGxlPSInLCJcdTA0MjBcdTA0MzVcdTA0MzlcdTA0NDJcdTA0MzhcdTA0M2RcdTA0MzMgIitlLmFkLmFkZEluZm8ucmF0aW5nKyIgLyA1IiwnIj48eWF0YWcgY2xhc3M9InlhcC1tb2JpbGUtYXBwX19yYXRpbmctc3RhcnMiPjx5YXRhZyBjbGFzcz0ieWFwLW1vYmlsZS1hcHBfX3JhdGluZy1zdGFycy1zY2FsZSI+Jyk7Zm9yKHZhciByPTA7cjw1O3IrKyl0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLW1vYmlsZS1hcHBfX3JhdGluZy1zdGFyIj4nLHMubW9iaWxlQXBwX19zdGFyKHt9KSwiPC95YXRhZz4iKTt0LnB1c2goJzwveWF0YWc+PHlhdGFnIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fcmF0aW5nLXN0YXJzLXNjYWxlIHlhcC1tb2JpbGUtYXBwX19yYXRpbmctc3RhcnMtc2NhbGVfZmlsbGVkIiBzdHlsZT0id2lkdGg6ICcsZS5hZC5hZGRJbmZvLnJhdGluZy81KjEwMCwnJSI+Jyk7Zm9yKHI9MDtyPDU7cisrKXQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fcmF0aW5nLXN0YXIiPicscy5tb2JpbGVBcHBfX3N0YXIoe2FjdGl2ZTohMH0pLCI8L3lhdGFnPiIpO3JldHVybiB0LnB1c2goIjwveWF0YWc+PC95YXRhZz4iKSxlLmFkLmFkZEluZm8ucmV2aWV3Q291bnQmJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fcmF0aW5nLXZvdGVzIj4nLG4sIjwveWF0YWc+IiksdC5wdXNoKCI8L3lhdGFnPiIpLHQuam9pbigiIil9LG1vYmlsZUFwcF9fc3RhcjpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8c3ZnIGNsYXNzPSJ5YXAtbW9iaWxlLWFwcF9fc3Rhci1zdmciIGhlaWdodD0iMTJweCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIxMnB4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cG9seWdvbiBwb2ludHM9IjIyLjEzNywxOS42MjUgMzIsMTIgMjAsMTIgMTYsMCAxMiwxMiAwLDEyIDkuODc1LDE5LjU5NCA2LDMyIDE2LjAxNiwyNC4zMiAyNi4wMDgsMzIiLz48L3N2Zz4nKSx0LmpvaW4oIiIpfSx0aXRsZTpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC10aXRsZS1ibG9jayB5YXAtdGl0bGUgJyksZS5pc05lZWRIeXBoZW5hdGUmJnQucHVzaCgieWFwLXRpdGxlLWJsb2NrX2h5cGhlbnMiKSx0LnB1c2goJyI+PGEgaHJlZj0iJyxlLmFkLnVybCwnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InlhcC10aXRsZS1ibG9ja19fdGV4dCB5YXAtdGl0bGUtdGV4dCB5YXAtdGl0bGUtZm9udC1zaXplIHlhcC10aXRsZS1jb2xvciB5YXAtdGl0bGUtaG92ZXItY29sb3IiPicpLGUubm9GYXZpY29ufHwhZS5hZC5mYXZpY29ufHxlLmFkLnBpY3R1cmUmJiFlLmZvcmNlRmF2aWNvbnx8dC5wdXNoKCIiLHMuZmF2aWNvbih7c3JjOmUuYWQuZmF2aWNvbn0pLCIiKSx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVyIj4nLGUuYWQudGl0bGUsIjwveWF0YWc+IiksZS5kaXNhYmxlRG91YmxlfHx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVyIHlhcC1vYmouYWQuX190aXRsZV9zZWNvbmQiPicsZS5hZC5zZWNvbmRUaXRsZSwiPC95YXRhZz4iKSx0LnB1c2goIjwvYT48L3lhdGFnPiIpLHQuam9pbigiIil9LGZhdmljb246ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgnPGltZyBjbGFzcz0ieWFwLWZhdmljb24ic3JjPSInLGUuc3JjLCciYWx0PSIiIC8+JyksdC5qb2luKCIiKX0sYWdlOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWFnZSI+JyxlLmFkLmFnZSwiPC95YXRhZz4iKSx0LmpvaW4oIiIpfSxib2R5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIiIpLGUuY2xpY2thYmxlPyh0LnB1c2goJzxhIGNsYXNzPSJ5YXAtYm9keS10ZXh0IHlhcC10ZXh0LWNvbG9yICcpLGUuaXNOZWVkSHlwaGVuYXRlJiZ0LnB1c2goInlhcC1ib2R5LXRleHRfaHlwaGVucyIpLHQucHVzaCgnIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyxlLmFkLnVybCwnIj48d2JyIC8+JyxlLmFkLmJvZHksIjwvYT4iKSk6KHQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtYm9keS10ZXh0IHlhcC10ZXh0LWNvbG9yICcpLGUuaXNOZWVkSHlwaGVuYXRlJiZ0LnB1c2goInlhcC1ib2R5LXRleHRfaHlwaGVucyIpLHQucHVzaCgnIj48d2JyIC8+JyxlLmFkLmJvZHksIjwveWF0YWc+IikpLHQucHVzaCgiIiksdC5qb2luKCIiKX0sc2l0ZWxpbmtzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLXNpdGVsaW5rcyI+Jyksby5lYWNoKGUuYWQuc2l0ZWxpbmtzLGZ1bmN0aW9uKGUpe3QucHVzaCgnPGEgY2xhc3M9InlhcC1zaXRlbGlua3NfX2xpbmsgeWFwLXNpdGVsaW5rLXRleHQiIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLGUudXJsLCciPjx5YXRhZyBjbGFzcz0ieWFwLXNpdGVsaW5rc19faW5uZXIiPicsZS50aXRsZSwiPC95YXRhZz48L2E+Iil9KSx0LnB1c2goIjwveWF0YWc+IiksdC5qb2luKCIiKX0sc2NoZWR1bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiIiksdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1jb250YWN0cyI+JyksZS5hZC50ZWxOdW0mJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHNfX2l0ZW0geWFwLWNvbnRhY3RzX19waG9uZSI+PHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHNfX2l0ZW0tdGV4dCB5YXAtZG9tYWluLXRleHQiPicsZS5hZC50ZWxOdW0sIjwveWF0YWc+PC95YXRhZz4iKSx0LnB1c2goIiIpLGUuYWQud29ya2luZ1RpbWUmJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHNfX2l0ZW0iPjx5YXRhZyBjbGFzcz0ieWFwLWNvbnRhY3RzX19pdGVtLXRleHQgeWFwLWRvbWFpbi10ZXh0Ij4nLGUuYWQud29ya2luZ1RpbWUsIjwveWF0YWc+PC95YXRhZz4iKSx0LnB1c2goIjwveWF0YWc+IiksdC5qb2luKCIiKX0sY29udGFjdHM6ZnVuY3Rpb24oZSl7dmFyIHQ9W107dC5wdXNoKCIiKSx0LnB1c2goIiIpO3ZhciBpPWUuZm9ybWF0fHx7fTt0LnB1c2goIiIpO3ZhciBuPS9eKDB4NTB8MHg5MCkkLy50ZXN0KGkubmFtZSk7cmV0dXJuIHQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19jb250YWN0cyI+PHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHMiPicpLGUuYWQuZG9tYWluJiZ0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWNvbnRhY3RzX19pdGVtIHlhcC1jb250YWN0c19faXRlbV9kb21haW4iPicscy5kb21haW4oe2FkOmUuYWQsc2hvd0Zhdmljb246ZS5zaG93RmF2aWNvbn0pLCI8L3lhdGFnPiIpLHQucHVzaCgiIiksIWUuYWQuYWRkcmVzcyYmZS5hZC52Y2FyZFVybCYmdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1jb250YWN0c19faXRlbSI+PGEgY2xhc3M9InlhcC1jb250YWN0c19faXRlbS1saW5rIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyxlLmFkLnZjYXJkVXJsLCciPicsYSgiQUREUkVTU19BTkRfUEhPTkUiLGUubGFuZ3VhZ2UpLCI8L2E+PC95YXRhZz4iKSx0LnB1c2goIiIpLChlLmFkLnJlZ2lvbnx8ZS5hZC5tZXRybykmJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHNfX2l0ZW0iPjx5YXRhZyBjbGFzcz0ieWFwLWNvbnRhY3RzX19pdGVtLXRleHQgeWFwLWRvbWFpbi10ZXh0Ij4nLGUuYWQubWV0cm8/YSgiTUVUUk8iLGUubGFuZ3VhZ2UpKyImbmJzcDsiK2UuYWQubWV0cm86ZS5hZC5yZWdpb24sIjwveWF0YWc+PC95YXRhZz4iKSx0LnB1c2goIiIpLGUuYWQuZ2VvRGlzdGFuY2UmJm4mJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtY29udGFjdHNfX2l0ZW0iPicscy5jb250YWN0c19fZ2VvKHtnZW9EaXN0YW5jZTplLmFkLmdlb0Rpc3RhbmNlLGxhbmd1YWdlOmUubGFuZ3VhZ2V9KSwiPC95YXRhZz4iKSx0LnB1c2goIjwveWF0YWc+PC95YXRhZz4iKSwhZS5hZC5hZGRyZXNzfHxpLnNpbmdsZXx8bnx8KHQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19hZGRyZXNzIj48eWF0YWcgY2xhc3M9InlhcC1hZGRyZXNzIj4nKSxlLmFkLmdlb0Rpc3RhbmNlJiZ0LnB1c2goIiIscy5jb250YWN0c19fZ2VvKHtnZW9EaXN0YW5jZTplLmFkLmdlb0Rpc3RhbmNlLGxhbmd1YWdlOmUubGFuZ3VhZ2V9KSwiIiksdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1hZGRyZXNzX190ZXh0Ij48eWF0YWcgY2xhc3M9InlhcC1hZGRyZXNzX190ZXh0LXdyYXAiIHRpdGxlPSInLGUuYWQuYWRkcmVzcywnIj4nKSxlLmFkLnZjYXJkVXJsP3QucHVzaCgnPGEgY2xhc3M9InlhcC1jb250YWN0c19faXRlbS1saW5rIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyxlLmFkLnZjYXJkVXJsLCciPicsZS5hZC5hZGRyZXNzLCI8L2E+Iik6dC5wdXNoKCIiLGUuYWQuYWRkcmVzcywiIiksdC5wdXNoKCI8L3lhdGFnPjwveWF0YWc+PC95YXRhZz48L3lhdGFnPiIpKSx0LnB1c2goIiIpLHQuam9pbigiIil9LGNvbnRhY3RzX19nZW86ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtYWRkcmVzc19fZ2VvIj48eWF0YWcgY2xhc3M9InlhcC1jb250YWN0c19faXRlbS10ZXh0IHlhcC1kb21haW4tdGV4dCI+JyxhKCJHRU9fRlJPTSIsZS5sYW5ndWFnZSksIiB+Jm5ic3A7IixlLmdlb0Rpc3RhbmNlLCc8L3lhdGFnPjxhIGNsYXNzPSJ5YXAtY29udGFjdHNfX2luZm8taWNvbiIgdGFyZ2V0PSJfYmxhbmsiaHJlZj0iaHR0cHM6Ly95YW5kZXgucnUvc3VwcG9ydC9kaXJlY3QtdG9vbHRpcHMvY2FsY3VsYXRlLWRpc3RhbmNlLnhtbCI+PzwvYT48L3lhdGFnPicpLHQuam9pbigiIil9LGxheW91dDpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCc8eWF0YWcgY2xhc3M9IicsZS5pZCwnIHlhcC1yZXNldCIgaWQ9IicsZS5pZCwnIiBsYW5nPSInLGUubGFuZywnIj48eWF0YWcgY2xhc3M9InlhcC1sYXlvdXQgeWFwLW1haW4geWFwLWZvbnQtc2l6ZSB5YXAtbGF5b3V0X3R5cGVfJyxlLmxheW91dCwiICIsZS5jbGFzc2VzLCIgIiksZS5pc0N1cnJlbmN5WWFUaXRsZSYmdC5wdXNoKCJ5YXAtbGF5b3V0X2FkdHVuZS1hbHdheXMtdmlzaWJsZSIpLHQucHVzaCgnIj4nKSxlLmlzQ3VycmVuY3lZYVRpdGxlfHx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fbG9nbyB5YXAtbG9nbyB5YXAtbG9nby1iZy1jb2xvciI+JyxzLmxvZ28oe3RpdGxlOmUueWFUaXRsZSx1cmw6ZS55YVVybCxpc1ZlcnRpY2FsOmUuZm9ybWF0LnR5cGU9PT1uLkJsb2NrVHlwZXMuSE9SSVpPTlRBTCYmZS5mb3JtYXQuZml4ZWR9KSwiPC95YXRhZz4iKSx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fd3JhcHBlciB5YXAtbGlzdC13cmFwcGVyIHlhcC1mb250LWZhbWlseSB5YXAtYm9yZGVyLWNvbG9yIj48dGFibGUgY2xhc3M9InlhcC1sYXlvdXRfX2l0ZW1zIHlhcC1saXN0Ij48dHI+Jyksby5lYWNoKGUuYWRzLGZ1bmN0aW9uKGksbyl7aWYodC5wdXNoKCc8dGQgZGF0YS1pZD0iJyxpLmFkSWQsJyJkYXRhLXVuaXEtaWQ9IicsaS51bmlxSWQsJyJjbGFzcz0ieWFwLWxheW91dF9faXRlbSB5YXAtaXRlbSB5YXAtYm9yZGVyLWNvbG9yIHlhcC1sYXlvdXRfX2l0ZW1fbnRoXycsbysxLCIgeWFwLWxheW91dF9faXRlbV9waWN0dXJlXyIsISFpLnBpY3R1cmUsIiAiKSxpLnBpY3R1cmUmJnQucHVzaCgieWFwLWl0ZW0taGFzLXBpY3R1cmUiKSx0LnB1c2goIiAiKSxpLmlzQXBwQWQmJnQucHVzaCgieWFwLWxheW91dF9faXRlbV9hcHAiKSx0LnB1c2goIiAiKSxpLmFnZSYmdC5wdXNoKCJ5YXAtbGF5b3V0X19pdGVtX2FnZSIpLHQucHVzaCgiICIpLGkuYWJ1c2VVcmwmJnQucHVzaCgieWFwLWxheW91dF9faXRlbV9hZHR1bmUiKSx0LnB1c2goJyI+PHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19vdXRlciI+PHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19pbm5lciB5YXAtaXRlbS1pbm5lciI+JyksaS5waWN0dXJlKXt0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fcGljdHVyZSIgc3R5bGU9IndpZHRoOiAnLGkucGljdHVyZS5wbGFjZWhvbGRlci53aWR0aCwnIj4nKSxlLmZvcm1hdC51c2VFbGFzdGljUGljdHVyZSYmaS5waWN0dXJlLmlzV2lkZT90LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fcGljdHVyZS1wbGFjZWhvbGRlciI+PC95YXRhZz4nKTp0LnB1c2goIiIscy5waWN0dXJlKHthZDppfSksIiIpLHQucHVzaCgiIik7dmFyIHI9aS5pc0FwcEFkJiZpLmFkZEluZm8ucmF0aW5nJiYibWVkaXVtIj09PWUubGF5b3V0O3QucHVzaCgiIiksciYmdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sYXlvdXRfX3BpY3R1cmUtcmF0aW5nIj4nLHMubW9iaWxlQXBwX19yYXRpbmcoe2FkOmksY2VudGVyZWQ6ITB9KSwiPC95YXRhZz4iKSx0LnB1c2goIjwveWF0YWc+Iil9dC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sYXlvdXRfX2NvbnRlbnQiPjx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fdGl0bGUiPicscy50aXRsZSh7YWQ6aSxub0Zhdmljb246Qm9vbGVhbihlLmZvcm1hdC5zaW5nbGUpLGlzTmVlZEh5cGhlbmF0ZTplLmlzTmVlZEh5cGhlbmF0ZX0pLCc8L3lhdGFnPjx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fYm9keSB5YXAtdGV4dCI+JyxzLmJvZHkoe2FkOmksY2xpY2thYmxlOmUuc2V0dGluZ3MuYzExbi50ZXh0Q2xpY2thYmxlLGlzTmVlZEh5cGhlbmF0ZTplLmlzTmVlZEh5cGhlbmF0ZX0pLCIiKSxpLmFnZSYmdC5wdXNoKCcmbmJzcDs8eWF0YWcgY2xhc3M9InlhcC1sYXlvdXRfX2FnZSI+JyxzLmFnZSh7YWQ6aX0pLCI8L3lhdGFnPiIpLHQucHVzaCgiPC95YXRhZz4iKSxpLmRlYnVnJiZ0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fZGVidWciPicsaS5kZWJ1ZywiPC95YXRhZz4iKSx0LnB1c2goIiIpLGkuaXNBcHBBZD8odC5wdXNoKCIiKSx0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fYXBwIHlhcC1sYXlvdXRfX2FwcF9zdHlsZV8nLGUuYXBwQnV0dG9uU3R5bGUsJyI+JyxzLm1vYmlsZUFwcCh7YWQ6aSxoaWRlUmF0aW5nOnJ8fCIzMjB4NTAiPT09ZS5mb3JtYXQubmFtZSxyYXRpbmdGdWxsV2lkdGg6Im5hcnJvdyI9PT1lLmxheW91dCxwbGFpbkxpbms6IjMyMHg1MCI9PT1lLmZvcm1hdC5uYW1lLGJ1dHRvblN0eWxlOmUuYXBwQnV0dG9uU3R5bGV9KSwiPC95YXRhZz4iKSk6KHQucHVzaCgiIiksaS5zaXRlbGlua3MmJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19zaXRlbGlua3MiPicscy5zaXRlbGlua3Moe2FkOml9KSwiPC95YXRhZz4iKSx0LnB1c2goIiIpLChpLndvcmtpbmdUaW1lfHxpLnRlbE51bSkmJnQucHVzaCgnPHlhdGFnIGNsYXNzPSJ5YXAtbGF5b3V0X19zY2hlZHVsZSI+JyxzLnNjaGVkdWxlKHthZDppfSksIjwveWF0YWc+IiksdC5wdXNoKCIiKSwoaS5kb21haW58fGkudmNhcmRVcmx8fGkucmVnaW9ufHxpLm1ldHJvfHxpLmdlb0Rpc3RhbmNlKSYmdC5wdXNoKCIiLHMuY29udGFjdHMoe2FkOmksc2hvd0Zhdmljb246ZS5mb3JtYXQuc2luZ2xlLGZvcm1hdDplLmZvcm1hdCxsYW5ndWFnZTplLmxhbmd1YWdlfSksIiIpLHQucHVzaCgiIikpLHQucHVzaCgiIiksaS53YXJuaW5nJiZ0LnB1c2goJzx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fd2FybmluZyI+PC95YXRhZz4nKSx0LnB1c2goIjwveWF0YWc+IiksZS5pc0N1cnJlbmN5WWFUaXRsZSYmMD09PW8mJnQucHVzaCgiIixzLmN1cnJlbmN5TG9nbyh7dGl0bGU6ZS55YVRpdGxlLHVybDplLnlhVXJsLHRvb2x0aXBUaXRsZTplLmxvZ29Ub29sdGlwVGl0bGV9KSwiIiksdC5wdXNoKCc8eWF0YWcgY2xhc3M9InlhcC1sYXlvdXRfX2FkdHVuZSI+PC95YXRhZz48L3lhdGFnPjx5YXRhZyBjbGFzcz0ieWFwLWxheW91dF9fYWR0dW5lLW1lc3NhZ2UiPjwveWF0YWc+PC95YXRhZz48L3RkPicpLChvPGUuYWRzLmxlbmd0aC0xJiZlLmZvcm1hdC50eXBlPT1uLkJsb2NrVHlwZXMuVkVSVElDQUx8fGUuZm9ybWF0LnR5cGU9PW4uQmxvY2tUeXBlcy5HUklEJiYxPT1vKSYmdC5wdXNoKCI8L3RyPjx0cj4iKSx0LnB1c2goIiIpfSksdC5wdXNoKCI8L3RyPjwvdGFibGU+PC95YXRhZz48L3lhdGFnPjwveWF0YWc+IiksdC5qb2luKCIiKX19O2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89WzEsMyw2XTt0LmdldFN0cmluZz1mdW5jdGlvbihlLHQscixhKXt2YXIgcztpZighcil0aHJvdyBuZXcgRXJyb3IoJ0kxOG46IFx1MDQzZlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2RcdTA0MzVcdTA0M2ZcdTA0M2VcdTA0MzRcdTA0MzRcdTA0MzVcdTA0NDBcdTA0MzZcdTA0MzhcdTA0MzJcdTA0MzBcdTA0MzVcdTA0M2NcdTA0NGJcdTA0MzkgXHUwNDNhXHUwNDNiXHUwNDRlXHUwNDQ3IFx1MDQ0Zlx1MDQzN1x1MDQ0Ylx1MDQzYVx1MDQzMDogIicrcisnIicpO2lmKHM9TnVtYmVyKHIpLC0xPT09aSgyMykuaW5kZXhPZihvLHMpJiYocz0xKSwhZVt0XXx8IWVbdF1bc10pdGhyb3cgbmV3IEVycm9yKCdJMThuOiBcdTA0M2RcdTA0MzVcdTA0NDIgXHUwNDRmXHUwNDM3XHUwNDRiXHUwNDNhXHUwNDNlXHUwNDMyXHUwNDNlXHUwNDM5IFx1MDQzY1x1MDQzNVx1MDQ0Mlx1MDQzYVx1MDQzOCAiJyt0KyciIFx1MDQzZFx1MDQzMCBcdTA0NGZcdTA0MzdcdTA0NGJcdTA0M2FcdTA0MzUgJytzKTt2YXIgbD1lW3RdW3NdO2lmKGkoNykuaXNGdW5jdGlvbihsKSl7aWYoIWkoMjcpLmlzT2JqZWN0KGEpKXRocm93IG5ldyBFcnJvcignSTE4bjogXHUwNDEyXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDQyXHUwNDNlIFx1MDQzZVx1MDQzMVx1MDQ0YVx1MDQzNVx1MDQzYVx1MDQ0Mlx1MDQzMCBcdTA0NDEgXHUwNDNmXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDNjXHUwNDM1XHUwNDQyXHUwNDQwXHUwNDMwXHUwNDNjXHUwNDM4IFx1MDQzZlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCAiJysodm9pZCAwPT09YT8idW5kZWZpbmVkIjpuKGEpKSsnIicpO3JldHVybiBsKGEpfXJldHVybiBsfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sYWJlbHM9e0FEVFVORV9USVRMRV9TTUFMTDp7MToiXHUwNDIxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDRjIiwzOiJIaWRlIiw2OiJHaXpsZSJ9LEFEVFVORV9USVRMRV9MQVJHRTp7MToiXHUwNDIxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDRjIFx1MDQ0MFx1MDQzNVx1MDQzYVx1MDQzYlx1MDQzMFx1MDQzY1x1MDQ0MzoiLDM6IkhpZGUgYWQ6Iiw2OiJSZWtsYW1sYXJcdTAxMzEgZ2l6bGU6In0sVEhBTktTX0FEX0hJRERFTjp7MToiXHUwNDIxXHUwNDNmXHUwNDMwXHUwNDQxXHUwNDM4XHUwNDMxXHUwNDNlLCBcdTA0M2VcdTA0MzFcdTA0NGFcdTA0NGZcdTA0MzJcdTA0M2JcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDNlLiIsMzoiVGhhbmsgeW91LCB0aGlzIGFkIGlzIGhpZGRlbiBub3cuIiw2OiJUZVx1MDE1ZmVra1x4ZmNybGVyLCByZWtsYW0ga2FwYXRcdTAxMzFsZFx1MDEzMS4ifSxISURFOnsxOiJcdTA0MjFcdTA0M2FcdTA0NDBcdTA0NGJcdTA0NDJcdTA0NGMiLDM6IkhpZGUiLDY6IkdpemxlIn0sSElERV9BRDp7MToiXHUwNDIxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDRjJm5ic3A7XHUwNDNlXHUwNDMxXHUwNDRhXHUwNDRmXHUwNDMyXHUwNDNiXHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM1IiwzOiJIaWRlJm5ic3A7YWQiLDY6IlJla2xhbWxhclx1MDEzMSZuYnNwO2dpemxlIn0sQUREUkVTU19BTkRfUEhPTkU6ezE6Ilx1MDQxMFx1MDQzNFx1MDQ0MFx1MDQzNVx1MDQ0MSZuYnNwO1x1MDQzOCZuYnNwO1x1MDQ0Mlx1MDQzNVx1MDQzYlx1MDQzNVx1MDQ0NFx1MDQzZVx1MDQzZCIsMzoiQWRyZXNzJm5ic3A7YW5kJm5ic3A7cGhvbmUiLDY6IkFkcmVzJm5ic3A7dmUmbmJzcDt0ZWxlZm9uIn0sQ09OVEFDVFM6ezE6Ilx1MDQxYVx1MDQzZVx1MDQzZFx1MDQ0Mlx1MDQzMFx1MDQzYVx1MDQ0Mlx1MDQ0YiIsMzoiQ29udGFjdHMiLDY6IkNvbnRhY3RzIn0sR0VPX0ZST006ezE6Ilx1MDQxZVx1MDQ0MiZuYnNwO1x1MDQzMlx1MDQzMFx1MDQ0MSJ9LE1FVFJPOnsxOiJcdTA0M2MuIiwzOiJtLiIsNjoibS4ifSxHTzp7MToiXHUwNDFmXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM5XHUwNDQyXHUwNDM4IiwzOiJHbyIsNjoiSGVtZW4gQWwifSxNT1JFOnsxOiJcdTA0MWZcdTA0M2VcdTA0MzRcdTA0NDBcdTA0M2VcdTA0MzFcdTA0M2RcdTA0MzVcdTA0MzUiLDM6Ik1vcmUiLDY6IkRldGF5bFx1MDEzMSJ9LExFQVJOX01PUkU6ezE6Ilx1MDQyM1x1MDQzN1x1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQ0YyBcdTA0MzFcdTA0M2VcdTA0M2JcdTA0NGNcdTA0NDhcdTA0MzUiLDM6IkZpbmQgb3V0IG1vcmUiLDY6IkF5clx1MDEzMW50XHUwMTMxbFx1MDEzMSBiaWxnaSJ9LE1PUkVfT046ezE6Ilx1MDQxMVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQ0OFx1MDQzNSBcdTA0M2RcdTA0MzAiLDM6Ik1vcmUgb24iLDY6IkF5clx1MDEzMW50XHUwMTMxbFx1MDEzMSBiaWxnaSJ9LE9OOnsxOiJcdTA0M2RcdTA0MzAiLDM6IiIsNjoiaWxlIn0sTE9PS19GVVJUSEVSOnsxOiJcdTA0NDFcdTA0M2NcdTA0M2VcdTA0NDJcdTA0NDBcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDQyXHUwNDMwXHUwNDNhXHUwNDM2XHUwNDM1IiwzOiJzZWUgYWxzbyIsNjoiXHUwMTVldW5sYXJhIGRhIGdceGY2eiBhdFx1MDEzMW4ifSxMRUdBTF9JTkZPOnsxOiJcdTA0MmVcdTA0NDAuXHUwNDM4XHUwNDNkXHUwNDQ0XHUwNDNlXHUwNDQwXHUwNDNjXHUwNDMwXHUwNDQ2XHUwNDM4XHUwNDRmIiwzOiJMZWdhbCBpbmZvIiw2OiJZYXNhbCBiaWxnaWxlciJ9LEFEVkVSVElTTUVOVDp7MToiXHUwNDIwXHUwNDM1XHUwNDNhXHUwNDNiXHUwNDMwXHUwNDNjXHUwNDMwIiwzOiJBZCIsNjoiUmVrbGFtIn0sSU5TVEFMTDp7MToiXHUwNDIzXHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDNlXHUwNDMyXHUwNDM4XHUwNDQyXHUwNDRjIiwzOiJJbnN0YWxsIiw2OiJLdXIifSxSRVZJRVc6ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY291bnQrIiAiK2koMzAyKS5nZXROb3VuRm9ybShlLmNvdW50LFsiXHUwNDNlXHUwNDQyXHUwNDM3XHUwNDRiXHUwNDMyIiwiXHUwNDNlXHUwNDQyXHUwNDM3XHUwNDRiXHUwNDMyXHUwNDMwIiwiXHUwNDNlXHUwNDQyXHUwNDM3XHUwNDRiXHUwNDMyXHUwNDNlXHUwNDMyIl0pfSwzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvdW50KyIgIitpKDMwMikuZ2V0Tm91bkZvcm0oZS5jb3VudCxbInJldmlldyIsInJldmlld3MiLCJyZXZpZXdzIl0pfX0sUkFUSU5HOnsxOiJcdTA0MjBcdTA0MzVcdTA0MzlcdTA0NDJcdTA0MzhcdTA0M2RcdTA0MzMiLDM6IlJhdGluZyIsNjoiRGVcdTAxMWZlcmxlbmRpcm1lIn0sU01BUlRfUkVBRF9NT1JFOnsxOiJcdTA0MjNcdTA0MzdcdTA0M2RcdTA0MzBcdTA0NDJcdTA0NGMgXHUwNDNmXHUwNDNlXHUwNDM0XHUwNDQwXHUwNDNlXHUwNDMxXHUwNDNkXHUwNDM1XHUwNDM1IiwzOiJGaW5kIG91dCBtb3JlIiw2OiJEYWhhIGZhemxhIGJpbGdpIn0sQURWX0NPTExBUFNFOnsxOiJcdTA0MjFcdTA0MzJcdTA0MzVcdTA0NDBcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGMiLDM6IkhpZGUiLDY6IkdpemxlIn0sQURWX01JTklNSVpFOnsxOiJcdTA0MjFcdTA0MzJcdTA0MzVcdTA0NDBcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGMiLDM6Ik1pbmltaXplIiw2OiJHaXpsZSJ9LEFEVl9FWFBBTkQ6ezE6Ilx1MDQyMFx1MDQzMFx1MDQzN1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0YyIsMzoiRXhwYW5kIiw2OiJHXHhmNnN0ZXIifSxBRFZfSVNfSElEREVOOnsxOiJcdTA0MWVcdTA0MzFcdTA0NGFcdTA0NGZcdTA0MzJcdTA0M2JcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDNlIiwzOiJBZHZlcnRpc2VtZW50IGhpZGRlbiIsNjoiUmVrbGFtIGdpemxlbmRpIn0sQ0FOQ0VMOnsxOiJcdTA0MWVcdTA0NDJcdTA0M2NcdTA0MzVcdTA0M2RcdTA0MzhcdTA0NDJcdTA0NGMiLDM6IkNhbmNlbCJ9LFpFTl9BRFZfSVNfSElEREVOOnsxOiJcdTA0MWVcdTA0MzFcdTA0NGFcdTA0NGZcdTA0MzJcdTA0M2JcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQyXHUwNDNlLiBcdTA0MjJcdTA0MzVcdTA0M2ZcdTA0MzVcdTA0NDBcdTA0NGMgXHUwNDMyXHUwNDRiIFx1MDQzMVx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzNSBcdTA0MzJcdTA0MzhcdTA0MzRcdTA0MzVcdTA0NDJcdTA0NGMgXHUwNDNjXHUwNDM1XHUwNDNkXHUwNDRjXHUwNDQ4XHUwNDM1IFx1MDQzZlx1MDQzZVx1MDQzNFx1MDQzZVx1MDQzMVx1MDQzZFx1MDQ0Ylx1MDQ0NSBcdTA0M2VcdTA0MzFcdTA0NGFcdTA0NGZcdTA0MzJcdTA0M2JcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzkuIn0sTE9HT19ESVJFQ1Q6ezE6Ilx1MDQxNFx1MDQzOFx1MDQ0MFx1MDQzNVx1MDQzYVx1MDQ0MiJ9LFNJTUlMQVJfT0ZGRVJTX1NIT1c6ezE6Ilx1MDQxZlx1MDQzZVx1MDQzYVx1MDQzMFx1MDQzN1x1MDQzMFx1MDQ0Mlx1MDQ0YyBcdTA0M2ZcdTA0M2VcdTA0NDVcdTA0M2VcdTA0MzZcdTA0MzhcdTA0MzUiLDM6IlNpbWlsYXIgb2ZmZXJzIiw2OiJCZW56ZXIgdGVrbGlmbGVyaSBnXHhmNnN0ZXIifSxXT1JLSU5HX1RJTUU6ezE6Ilx1MDQxMlx1MDQ0MFx1MDQzNVx1MDQzY1x1MDQ0ZiBcdTA0NDBcdTA0MzBcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NGIiLDM6IiIsNjoiIn0sQ0xPU0VfVE9fWU9VOnsxOiJcdTA0MjBcdTA0NGZcdTA0MzRcdTA0M2VcdTA0M2MgXHUwNDQxIFx1MDQzMlx1MDQzMFx1MDQzY1x1MDQzOCIsMzoiIiw2OiIifSxDTE9TRV9UT19ZT1VfU1BBQ0U6ezE6Ilx1MDQyMFx1MDQ0Zlx1MDQzNFx1MDQzZVx1MDQzY1xuXHUwNDQxIFx1MDQzMlx1MDQzMFx1MDQzY1x1MDQzOCIsMzoiIiw2OiIifSxQUklDRV9GUk9NOnsxOmZ1bmN0aW9uKGUpe3JldHVybiJcdTA0MWVcdTA0NDIgIitlLnByaWNlfSwzOmZ1bmN0aW9uKGUpe3JldHVybiJGcm9tICIrZS5wcmljZX0sNjpmdW5jdGlvbihlKXtyZXR1cm4iTWFrcy4gIitlLnByaWNlfX0sUFJJQ0VfVE86ezE6ZnVuY3Rpb24oZSl7cmV0dXJuIlx1MDQxNFx1MDQzZSAiK2UucHJpY2V9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIlVwIHRvICIrZS5wcmljZX0sNjpmdW5jdGlvbihlKXtyZXR1cm4iTWluLiAiK2UucHJpY2V9fSxSVUI6ezE6Ilx1MDQ0MFx1MDQ0M1x1MDQzMSIsMzoicnViIiw2OiJydWJsZSJ9LEJZUjp7MToiQnIiLDM6IkJyIn0sU0FMRTp7MTpmdW5jdGlvbihlKXtyZXR1cm4iXHUwNDQxXHUwNDNhXHUwNDM4XHUwNDM0XHUwNDNhXHUwNDMwICIrZS5kaXNjb3VudCsiJSJ9LDM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzY291bnQrIiUgb2ZmIHNhbGUifX0sVVpTOnsxOiJcdTA0NDFcdTA0NDNcdTA0M2MiLDM6InN1bSJ9LFlBTkRFWF9ESVJFQ1Q6ezE6Ilx1MDQyZlx1MDQzZFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQ0MSBcdTA0MTRcdTA0MzhcdTA0NDBcdTA0MzVcdTA0M2FcdTA0NDIiLDM6IllhbmRleCBEaXJlY3QifSxHT19UT19TSVRFOnsxOiJcdTA0MWZcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzlcdTA0NDJcdTA0MzggXHUwNDNkXHUwNDMwIFx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsMzoiR28gdG8gc2l0ZSIsNjoiU2l0ZXllIGdpdCJ9LENBTkNFTExBVElPTjp7MToiXHUwNDFlXHUwNDQyXHUwNDNjXHUwNDM1XHUwNDNkXHUwNDMwIiwzOiJDYW5jZWwiLDY6Ilx1MDEzMHB0YWwifX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zdGVwcz1lLHRoaXMuc3RvcmFnZT17fX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QmxvY2tEYXRhPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9yYWdlW2VdfHwodGhpcy5zdG9yYWdlW2VdPXt0aW1pbmc6e30sZGF0YTp7fSxjYW5Mb2c6ITB9KSx0aGlzLnN0b3JhZ2VbZV0uZGF0YT1uKG4oe30sdGhpcy5zdG9yYWdlW2VdLmRhdGEpLHQpfSxlLnByb3RvdHlwZS5sb2dSZW5kZXJMYWJlbD1mdW5jdGlvbihlLHQsaSl7dm9pZCAwPT09aSYmKGk9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLHRoaXMuc3RvcmFnZVtlXXx8KHRoaXMuc3RvcmFnZVtlXT17dGltaW5nOnt9LGRhdGE6e30sY2FuTG9nOiEwfSksdGhpcy5zdG9yYWdlW2VdLnRpbWluZ1t0XT1pfSxlLnByb3RvdHlwZS5zdG9wTG9nZ2luZ1RpbWU9ZnVuY3Rpb24oZSl7dGhpcy5zdG9yYWdlW2VdJiYodGhpcy5zdG9yYWdlW2VdLmNhbkxvZz0hMSl9LGUucHJvdG90eXBlLmNvbnRpbnVlTG9nZ2luZ1RpbWU9ZnVuY3Rpb24oZSl7dGhpcy5zdG9yYWdlW2VdJiYodGhpcy5zdG9yYWdlW2VdLmNhbkxvZz0hMCl9LGUucHJvdG90eXBlLmdldEluZm89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuU2VuZERhdGEodGhpcy5zdG9yYWdlW2VdKSYmZSBpbiB0aGlzLnN0b3JhZ2U/e3RpbWluZzp0aGlzLnByZXBhcmVUaW1pbmdzKHRoaXMuc3RvcmFnZVtlXSksZGF0YTp0aGlzLnN0b3JhZ2VbZV0uZGF0YX06bnVsbH0sZS5wcm90b3R5cGUuY2FuU2VuZERhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuY2FuTG9nfSxlLnByb3RvdHlwZS5wcmVwYXJlVGltaW5ncz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj17dG90YWxJbml0OjAsdG90YWxEYXRhOjAsdG90YWxSZW5kZXI6MCx0b3RhbDowfSxvPWkoNDYpLmdldE9iamVjdEtleXMoZS50aW1pbmcpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkscj0wO3I8by5sZW5ndGg7cisrKXt2YXIgYT1lLnRpbWluZ1tvW3JdXXx8MDtpZih0KXt2YXIgcz1hLXQ7dD1hLG5bb1tyXV09cyxvW3JdaW4gdGhpcy5zdGVwcy5pbml0U3RlcHM/bi50b3RhbEluaXQrPXM6b1tyXWluIHRoaXMuc3RlcHMuZGF0YVN0ZXBzP24udG90YWxEYXRhKz1zOm9bcl1pbiB0aGlzLnN0ZXBzLnJlbmRlclN0ZXBzJiYobi50b3RhbFJlbmRlcis9cyksbi50b3RhbCs9c31lbHNlIHQ9YX1yZXR1cm4gbn0sZX0oKTt0LlJlbmRlclBlcmZvbWFuY2VNYW5hZ2VyPW99LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPS8mXHcrOy9nO3QuSFRNTF9UT19VVEY4X01BUFBJTkdTPXsiJnF1b3Q7IjonIicsIiZsYXF1bzsiOiJceGFiIiwiJnJhcXVvOyI6Ilx4YmIiLCImYmRxdW87IjoiXHUyMDFlIiwiJm5kYXNoOyI6Ilx1MjAxMyIsIiZtZGFzaDsiOiJcdTIwMTQifSx0Lmh0bWxUb1V0Zj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9IiIpLGUucmVwbGFjZShuLGZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHQuSFRNTF9UT19VVEY4X01BUFBJTkdTP3QuSFRNTF9UT19VVEY4X01BUFBJTkdTW2VdOmV9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPS8oXHUyMGJkfFx1MjBiOHxcdTIwYjR8XHUyMGJhfFx1MjBiZXwmIzgzODE7fCYjODM3Njt8JiM4MzcyO3wmIzgzNzg7fCYjODM4MjspL2c7dC5maXhDdXJyZW5jeT1mdW5jdGlvbihlKXtyZXR1cm4gaSgxMDgpLmdldElzSU9TKCl8fGkoNDc4KS5nZXRJc01hYygpP2UucmVwbGFjZShuLCc8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0gIWltcG9ydGFudDsiPiQxPC9zcGFuPicpOmV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldElzTWFjPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXdpbmRvdyk7dmFyIHQ9aSg4MSkuZ2V0VXNlckFnZW50KGUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuL21hYy8udGVzdCh0KSYmIWkoMTA4KS5nZXRJc0lPUyhlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49dm9pZCAwLG89dm9pZCAwLHI9dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLGM9dm9pZCAwLHU9dm9pZCAwLGQ9dm9pZCAwO249aSg1MikoaSg0ODApKSxvPWkoNTIpKGkoNDgxKSkscj1pKDUyKShpKDQ4MikpLGE9aSg1MikoaSg0ODMpKSxzPWkoNTIpKGkoNDg0KSksbD1pKDUyKShpKDQ4NSkpLGM9aSg1MikoaSg0ODYpKSx1PWkoNTIpKGkoNDg3KSksZD1pKDUyKShpKDQ4OCkpLGUuZXhwb3J0cz17cmVzZXQ6aSg1MikoaSgxNjcpKSxkaXJlY3Q6aSg1MikoaSg0ODkpKSxhZHR1bmU6bix3YXJuaW5nOm8scGljdHVyZTpyLHBpY3R1cmVTdHViOmEsYmc6cyxidXR0b246bCxzd2l0Y2g6YyxpbnRlcnZpZXc6dSx0b29sdGlwOmR9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZHR1bmV7Y3Vyc29yOnBvaW50ZXI7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1hZHR1bmUsLiIsZS5pZCwiIC55YXAtYWR0dW5lX3RvdWNoX3RydWV7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwnIC55YXAtYWR0dW5lX3RvdWNoX3RydWU6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi01cHg7Ym90dG9tOi01cHg7cmlnaHQ6MH0uJyxlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYTphZnRlcntsZWZ0OjA7Ym90dG9tOjB9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudXt6LWluZGV4Oi0xO3RyYW5zaXRpb246ei1pbmRleCAwcyBsaW5lYXIgLjRzO2N1cnNvcjpkZWZhdWx0O2xpbmUtaGVpZ2h0OjEuMjU7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1mZWVkYmFjay1tZW51LC4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfX3NsaWRle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1mZWVkYmFjay1tZW51X19zbGlkZXttYXJnaW4tbGVmdDoxMDAlO3RyYW5zaXRpb246bWFyZ2luLWxlZnQgLjRzIGVhc2Utb3V0fS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfX2Zvcm17cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC45OCk7dHJhbnNpdGlvbjptYXJnaW4tbGVmdCAuNHMgZWFzZS1vdXR9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudV92aXNpYmxle3otaW5kZXg6MTA7dHJhbnNpdGlvbjp6LWluZGV4IDBzfS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfdmlzaWJsZSAueWFwLWZlZWRiYWNrLW1lbnVfX3NsaWRle21hcmdpbi1sZWZ0OjB9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb257cGFkZGluZzowIDAgNHB4IDRweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9fdG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7bWFyZ2luLXRvcDotOXB4O21hcmdpbi1yaWdodDo4cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjRweDtib3JkZXItcmFkaXVzOjAgMCAwIDIwJX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2Ugc3Zne2Rpc3BsYXk6YmxvY2s7bWF4LWhlaWdodDpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX19pbWFnZSBwb2x5Z29ue2ZpbGw6IixlLnNldHRpbmdzLnRleHRDb2xvcnx8IiMwMDAiLCJ9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fX2ltYWdlLWZhbGxiYWNre21hcmdpbjotM3B4O3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjFlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweH0uIixlLmlkLCcgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2UtYWRibG9ja3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0l4TURBbElpQm9aV2xuYUhROUlqRXdNQ1VpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJK1BIQnZiSGxuYjI0Z2NHOXBiblJ6UFNJeE5Dd3dMamNnTVRNdU15d3dJRGNzTmk0eU9Ua2dNQzQzTERBZ01Dd3dMamNnTmk0ekxEY2dNQ3d4TXk0eU9Ua2dNQzQzTERFMElEY3NOeTQzSURFekxqTXNNVFFnTVRRc01UTXVNams1SURjdU55dzNJajQ4TDNCdmJIbG5iMjQrUEM5emRtYysiKX0uJyxlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbjpob3ZlciAueWFwLWFkdHVuZS1pY29uX190b29sdGlwe3Zpc2liaWxpdHk6dmlzaWJsZX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9vcGVuOmhvdmVyIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3RvdWNoX3RydWV7dmlzaWJpbGl0eTp2aXNpYmxlfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3RvdWNoX3RydWUgLnlhcC1hZHR1bmUtaWNvbl9fdG9vbHRpcHtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fb2xkaWVfdHJ1ZSAueWFwLWFkdHVuZS1pY29uX190b29sdGlwe2hlaWdodDoxOXB4O2xpbmUtaGVpZ2h0OjE5cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fb2xkaWVfdHJ1ZSAueWFwLWFkdHVuZS1pY29uX190b29sdGlwLWFycm93e3RvcDoycHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fc2l6ZV9sIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntwYWRkaW5nOjVweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9zaXplX2wgLnlhcC1hZHR1bmUtaWNvbl9faW1hZ2UtZmFsbGJhY2t7bWFyZ2luOi01cHg7Zm9udC1zaXplOjI1cHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLWljb25fc2l6ZV9sIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7bWFyZ2luLXJpZ2h0OjlweDttYXJnaW4tdG9wOi0xMnB4O21heC13aWR0aDoxNjBweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4O2ZvbnQtc2l6ZToxM3B4fS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3NpemVfbCAueWFwLWFkdHVuZS1pY29uX190b29sdGlwLWFycm93e3JpZ2h0Oi03cHg7dG9wOjRweDtib3JkZXItd2lkdGg6N3B4IDAgN3B4IDdweH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9zaGFycCAueWFwLWFkdHVuZS1pY29uX19jb250YWluZXJ7Ym9yZGVyLXJhZGl1czowfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uLnlhcC1hZHR1bmUtaWNvbl9vcGVuIC55YXAtYWR0dW5lLWljb25fX3Rvb2x0aXB7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX2JsYWNrLXdoaXRlIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI1KX0uIixlLmlkLCIgLnlhcC1hZHR1bmUtaWNvbl9ibGFjay13aGl0ZSAueWFwLWFkdHVuZS1pY29uX19pbWFnZSBwb2x5Z29ue2ZpbGw6I2ZmZn0uIixlLmlkLCcgLnlhcC1hZHR1bmUtaWNvbl9ibGFjay13aGl0ZSAueWFwLWFkdHVuZS1pY29uX19pbWFnZS55YXAtYWR0dW5lLWljb25fX2ltYWdlLWFkYmxvY2t7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE1EQWxJaUJvWldsbmFIUTlJakV3TUNVaUlITjBlV3hsUFNKbWFXeHNPaUFqWm1abUlpQjJhV1YzUW05NFBTSXdJREFnTVRRZ01UUWlQanh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlNVFFzTUM0M0lERXpMak1zTUNBM0xEWXVNams1SURBdU55d3dJREFzTUM0M0lEWXVNeXczSURBc01UTXVNams1SURBdU55d3hOQ0EzTERjdU55QXhNeTR6TERFMElERTBMREV6TGpJNU9TQTNMamNzTnlJK1BDOXdiMng1WjI5dVBqd3ZjM1puUGc9PSIpfS4nLGUuaWQsIiAueWFwLWFkdHVuZS1pY29uX3JvdywuIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYSAueWFwLWFkdHVuZS1pY29ue3BhZGRpbmc6MH0uIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYS55YXAtYWR0dW5lX2JsYWNrLXdoaXRlLnlhcC1hZHZfX2FkdHVuZXt0b3A6M3B4O3JpZ2h0OjNweH0uIixlLmlkLCIgLnlhcC1hZHR1bmVfdG91Y2hfdHJ1ZS55YXAtYWR0dW5lX2Rpc2FibGUtY2xpY2stYXJlYS55YXAtYWR0dW5lX2JsYWNrLXdoaXRlLnlhcC1hZHZfX2FkdHVuZSAueWFwLWFkdHVuZS1pY29uX19jb250YWluZXJ7Ym9yZGVyLXJhZGl1czoyMCV9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjojMDAwO2ZvbnQtc2l6ZToxM3B4O3otaW5kZXg6LTE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2UsLiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2VfX2NvbnRhaW5lcntkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFkdHVuZS1tZXNzYWdlX190ZXh0e21hcmdpbi1sZWZ0OjEwcHh9LiIsZS5pZCwiIC55YXAtYWR0dW5lLW1lc3NhZ2VfX2ljb24gc3Zne2ZpbGw6IzAwMH0uIixlLmlkLCIgLnlhcC1hZHR1bmUtbWVzc2FnZV9iaWd7Zm9udC1zaXplOjE1cHh9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudV9yZWNlaXZlZCAueWFwLWFkdHVuZS1tZXNzYWdle29wYWNpdHk6MTt6LWluZGV4OjEwfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2V7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMCU7Zm9udC1zaXplOjEzcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZSwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnt3aWR0aDoxMDAlOy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MTBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6bm9uZTtmb250LXdlaWdodDo3MDB9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVyLC4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ29fc21hbGx7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludCwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1mbGV4LXNocmluazowOy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50ey13ZWJraXQtYWxpZ24tY29udGVudDpjZW50ZXI7LW1zLWZsZXgtbGluZS1wYWNrOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re3dpZHRoOjEwMCU7bWF4LXdpZHRoOjI1MHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTgwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTpibG9jaztwYWRkaW5nOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYzhjOGM4O2JvcmRlci1yYWRpdXM6NHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLGNvbG9yO3RyYW5zaXRpb24tZHVyYXRpb246LjJzO2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGluazpob3Zlcntjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojMzMzfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbToxNXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludCwuIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbTo1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX2NvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte21hcmdpbjoycHggMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7cGFkZGluZzozcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVye3BhZGRpbmctYm90dG9tOjE1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LC4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbF9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpzdHJldGNoOy1tcy1mbGV4LWFsaWduOnN0cmV0Y2g7YWxpZ24taXRlbXM6c3RyZXRjaH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9zbWFsbHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbTo1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6c3RyZXRjaDstbXMtZmxleC1hbGlnbjpzdHJldGNoO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte21hcmdpbjoycHggMH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsLWNvbmRlbnNlZCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX2xhcmdle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7cGFkZGluZzozcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4MiAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ28td3JhcHBlcntwYWRkaW5nLWJvdHRvbToxMHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbC0yeDIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC13cmFwOndyYXA7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwO21heC13aWR0aDo1NDBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17d2lkdGg6NTAlO21hcmdpbjowO3BhZGRpbmc6NXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC12ZXJ0aWNhbC0yeDJfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MTBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtd3JhcDp3cmFwOy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDttYXgtd2lkdGg6MzQwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVte3dpZHRoOjUwJTttYXJnaW46MDtwYWRkaW5nOjVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtdmVydGljYWwtMngyX3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXZlcnRpY2FsLTJ4Ml9zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX2xhcmdle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3cgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LXNocmluazoxOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MTtwYWRkaW5nLWxlZnQ6MjBweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17LXdlYmtpdC1mbGV4LWdyb3c6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxO21hcmdpbjowIDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdzstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtc2hyaW5rOjE7LW1zLWZsZXgtbmVnYXRpdmU6MTtmbGV4LXNocmluazoxO3BhZGRpbmctbGVmdDoxNXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW17LXdlYmtpdC1mbGV4LWdyb3c6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxO21hcmdpbjowIDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X21pZGRsZSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fbGFyZ2V7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfbWlkZGxlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWxpbmt7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29udGFpbmVyey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nb19zbWFsbHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3NtYWxsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjE7cGFkZGluZy1sZWZ0OjE1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MCA1cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc21hbGwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zbWFsbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55e2ZvbnQtc2l6ZToxMXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdzstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjRweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3RpbnkgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtcm93X3RpbnkgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtc2hyaW5rOjE7LW1zLWZsZXgtbmVnYXRpdmU6MTtmbGV4LXNocmluazoxO3BhZGRpbmctbGVmdDoxMHB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MCAxcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd190aW55IC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fbGFyZ2V7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfdGlueSAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1saW5re2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGV7Zm9udC1zaXplOjExcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3c7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nb3tkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dvX3NtYWxse2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjE7cGFkZGluZy1sZWZ0OjEwcHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXstd2Via2l0LWZsZXgtZ3JvdzoxOy1tcy1mbGV4LXBvc2l0aXZlOjE7ZmxleC1ncm93OjE7bWFyZ2luOjAgMnB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1yb3dfc3RyaXBlIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LXJvd19zdHJpcGUgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGlua3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWx7Zm9udC1zaXplOjEycHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb250YWluZXJ7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0cHh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19sb2dve3BhZGRpbmc6MnB4IDVweH0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtbWluaW1hbCAueWFwLWFidXNlLW1lc3NhZ2VfX2xvZ29fc21hbGx7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1taW5pbWFsIC55YXAtYWJ1c2UtbWVzc2FnZV9fbG9nby13cmFwcGVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnR7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LXdyYXA6d3JhcDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LXdlYmtpdC1mbGV4LXNocmluazoxOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MX0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlLnlhcC1hYnVzZS1tZXNzYWdlX19sYXlvdXQtbWluaW1hbCAueWFwLWFidXNlLW1lc3NhZ2VfX2NvbXBsYWludC1pdGVtey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTttYXJnaW46MXB4fS4iLGUuaWQsIiAueWFwLWFidXNlLW1lc3NhZ2UueWFwLWFidXNlLW1lc3NhZ2VfX2xheW91dC1taW5pbWFsIC55YXAtYWJ1c2UtbWVzc2FnZV9fY29tcGxhaW50LWl0ZW1fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbV9sYXJnZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWJ1c2UtbWVzc2FnZS55YXAtYWJ1c2UtbWVzc2FnZV9fbGF5b3V0LW1pbmltYWwgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGlua3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MnB4fS4iLGUuaWQsIiAueWFwLWZlZWRiYWNrLW1lbnVfcmVjZWl2ZWQgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtaXRlbXtvcGFjaXR5OjB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWxheW91dF9fd2FybmluZ3t6LWluZGV4OjEwMH0uIixlLmlkLCIgLnlhcC13YXJuaW5ne2ZvbnQtc2l6ZTo5cHg7bGluZS1oZWlnaHQ6MS4yO2JvcmRlcjoxcHggc29saWQgIixlLnNldHRpbmdzLmJnQ29sb3J8fGUuc2V0dGluZ3Muc2l0ZUJnQ29sb3I/bmV3IGUudXRpbHMuQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHxlLnNldHRpbmdzLnNpdGVCZ0NvbG9yKS50b1JlYWRhYmxlKCkuc2V0QWxwaGEoLjMpOm5ldyBlLnV0aWxzLkNvbG9yKCIjZGRkIikuc2V0QWxwaGEoMSksIjtib3JkZXItcmFkaXVzOjA7ei1pbmRleDoxMDtwb2ludGVyLWV2ZW50czphdXRvfS4iLGUuaWQsIiAueWFwLXdhcm5pbmcsLiIsZS5pZCwiIC55YXAtd2FybmluZ19fbGlua3tjb2xvcjoiLGUuc2V0dGluZ3MuYmdDb2xvcnx8ZS5zZXR0aW5ncy5zaXRlQmdDb2xvcj9uZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fGUuc2V0dGluZ3Muc2l0ZUJnQ29sb3IpLnRvUmVhZGFibGUoKS5zZXRBbHBoYSguNik6bmV3IGUudXRpbHMuQ29sb3IoIiM2NjYiKS5zZXRBbHBoYSgxKSwiO2ZvbnQtZmFtaWx5OnZlcmRhbmE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtoZWlnaHQ6MTdweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX190ZXh0e3RleHQtYWxpZ246Y2VudGVyfS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfX2xpbmt7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt3aGl0ZS1zcGFjZTpwcmV9LiIsZS5pZCwiIC55YXAtd2FybmluZ19fbGluazpob3Zlcntjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8ZS5zZXR0aW5ncy5zaXRlQmdDb2xvcnx8IiNGRkZGRkYiKS50b1JlYWRhYmxlKCkuc2V0QWxwaGEoLjUpLCJ9LiIsZS5pZCwiIC55YXAtd2FybmluZ19tZWRpY2Fse2Rpc3BsYXk6dGFibGV9LiIsZS5pZCwiIC55YXAtd2FybmluZ19tZWRpY2FsIC55YXAtd2FybmluZ19fdGV4dHtkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHh9LiIsZS5pZCwiIC55YXAtd2FybmluZ19sb25ne292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCU7Ym9yZGVyOm5vbmV9LiIsZS5pZCwiIC55YXAtd2FybmluZ19sb25nIC55YXAtd2FybmluZ19fdGV4dHtwYWRkaW5nLXRvcDozcHg7ei1pbmRleDotMTt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO3RleHQtYWxpZ246bGVmdDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowfS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfZG90c3tjb2xvcjoiLGUuc2V0dGluZ3Muc2l0ZWxpbmtzQ29sb3J8fGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwY2MiLCI7b3BhY2l0eTouNTtsaW5lLWhlaWdodDoxZW07Zm9udC1zaXplOjE0cHh9LiIsZS5pZCwiIC55YXAtd2FybmluZ19kb3RzLnlhcC13YXJuaW5nX21vdXNlLW9ue2ZvbnQtc2l6ZTowfS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfX2NvbnRhaW5lcntkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpyb3cgbm93cmFwOy1tcy1mbGV4LWZsb3c6cm93IG5vd3JhcDtmbGV4LWZsb3c6cm93IG5vd3JhcDt3aWR0aDoxMDAlfS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfZWxsaXBzaXN7LXdlYmtpdC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjF9LiIsZS5pZCwiIC55YXAtbGF5b3V0X193YXJuaW5nX2ludmlzaWJsZSAueWFwLXdhcm5pbmdfbG9uZ3t6LWluZGV4OjB9LiIsZS5pZCwiIC55YXAtd2FybmluZ19ncmFkaWVudF9fcmlnaHR7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgtOTBkZWcsaHNsYSgwLDAlLDEwMCUsMCksI2ZmZiAyNSUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZyxoc2xhKDAsMCUsMTAwJSwwKSwjZmZmIDI1JSk7LXdlYmtpdC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjF9LiIsZS5pZCwiIC55YXAtd2FybmluZ19fc3R5bGV7d2lkdGg6MTAwJTttYXgtd2lkdGg6NDAwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfZ3JhZGllbnRfX2xlZnR7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgtOTBkZWcsI2ZmZiA4NSUsaHNsYSgwLDAlLDEwMCUsMCkpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZywjZmZmIDg1JSxoc2xhKDAsMCUsMTAwJSwwKSl9LiIsZS5pZCwiIC55YXAtd2FybmluZ19ncmFkaWVudF9fbGVmdC55YXAtd2FybmluZ19ncmFkaWVudF9fcmlnaHR7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgtOTBkZWcsaHNsYSgwLDAlLDEwMCUsMCksI2ZmZiAxNSUsI2ZmZiA4NSUsaHNsYSgwLDAlLDEwMCUsMCkpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZyxoc2xhKDAsMCUsMTAwJSwwKSwjZmZmIDE1JSwjZmZmIDg1JSxoc2xhKDAsMCUsMTAwJSwwKSl9LiIsZS5pZCwiIC55YXAtd2FybmluZ19ncmFkaWVudF9fcmlnaHQ6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtsaW5lLWhlaWdodDoxLjdlbTtwYWRkaW5nLXJpZ2h0OjJweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjYwcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0IC55YXAtbGF5b3V0X193YXJuaW5nLWJ1dHRvbi10ZXh0e2Rpc3BsYXk6aW5saW5lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWxheW91dCAueWFwLWxheW91dF9fd2FybmluZy1idXR0b24tdGV4dDpob3Zlcntjb2xvcjoiLGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiLCJ9LiIsZS5pZCwiIC55YXAtd2FybmluZ190aGVtZV9yZXNwb25zaXZlLW1vYmlsZXtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MS4zZW07aGVpZ2h0OjEzcHg7d2lkdGg6MTAwJTttYXgtd2lkdGg6NDIwcHh9LiIsZS5pZCwiIC55YXAtd2FybmluZ190aGVtZV9yZXNwb25zaXZlLW1vYmlsZSAueWFwLXdhcm5pbmdfX3RleHR7cGFkZGluZzowIDRweDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2hlaWdodDppbmhlcml0fS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfdGhlbWVfcmVzcG9uc2l2ZS1tb2JpbGUueWFwLXdhcm5pbmdfbWVkaWNhbHtsaW5lLWhlaWdodDo2cHg7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zKTtjb2xvcjojZmZmO2JvcmRlcjowO2ZvbnQtc2l6ZTouOGVtO3BhZGRpbmc6MCAwIDFweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX3RoZW1lX2dob3N0e3dpZHRoOjEwMCU7Ym9yZGVyOm5vbmV9LiIsZS5pZCwiIC55YXAtd2FybmluZ190aGVtZV9naG9zdCAueWFwLXdhcm5pbmdfX3RleHR7bGluZS1oZWlnaHQ6MTdweDtmb250LXNpemU6OHB4O3BhZGRpbmc6MDtjb2xvcjojZmZmO3RleHQtaW5kZW50OjRweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX3RoZW1lX2dob3N0IC55YXAtd2FybmluZ19tZWRpY2FsIC55YXAtd2FybmluZ19fdGV4dHtwYWRkaW5nLXRvcDoxcHg7bGluZS1oZWlnaHQ6N3B4O3ZlcnRpY2FsLWFsaWduOnRvcH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtcGljdHVyZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1waWN0dXJlX19jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dGFwLWhpZ2hsaWdodC1jb2xvcjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uIixlLmlkLCIgLnlhcC1waWN0dXJlX19pbWd7ZGlzcGxheTpibG9jaztvcGFjaXR5OjE7d2lsbC1jaGFuZ2U6b3BhY2l0eTt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2V9LiIsZS5pZCwiIC55YXAtcGljdHVyZV90b3VjaF9mYWxzZSAueWFwLXBpY3R1cmVfX2ltZzpob3ZlcntvcGFjaXR5Oi44fSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDoiLGUudXRpbHMud2FybmluZy5nZXRCb3JkZXJDb2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fCIjRkZGRkZGIixlLnNldHRpbmdzLnRpdGxlQ29sb3J8fCIjMDAwMENDIiwuNSksIjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA3ZW07dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLnRpdGxlQ29sb3J8fCIjMDAwMENDIikudG9SZWFkYWJsZSgpLCJ9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1zdHViX193YWxse3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNTAlO2xlZnQ6LTUwJTt3aWR0aDoyMDAlO2hlaWdodDoyMDAlO3RleHQtYWxpZ246Y2VudGVyO29wYWNpdHk6LjQ7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC0zMGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgtMzBkZWcpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJfX3Jvd3twYWRkaW5nOjEwcHggMDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1zdHViX19jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2t9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1zdHViX190ZXh0e2Zsb2F0OmxlZnQ7cGFkZGluZzowIDE1cHh9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1zdHViX19yb3dfZXZlbiAueWFwLXBpY3R1cmUtc3R1Yl9fdGV4dHttYXJnaW4tbGVmdDotNTAlfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1iZ3twb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6IixlLnNldHRpbmdzLmJnQ29sb3J8fCIjZmZmIiwifS4iLGUuaWQsIiAueWFwLWJnX19iZywuIixlLmlkLCIgLnlhcC1iZ19fc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29wYWNpdHk6LjN9LiIsZS5pZCwiIC55YXAtYmdfX3N2ZyBzdmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjAwJTtoZWlnaHQ6MjAwJTtsZWZ0Oi01MCU7dG9wOi01MCV9LiIsZS5pZCwiIC55YXAtYmdfX2Jne2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJTtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDIpO3RyYW5zZm9ybTpzY2FsZSgyKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIDMwJTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciAzMCU7LXdlYmtpdC1maWx0ZXI6Ymx1cigiLGUuYmx1clNpemUsInB4KTtmaWx0ZXI6Ymx1cigiLGUuYmx1clNpemUsInB4KX0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYnV0dG9ue3otaW5kZXg6MDttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjFlbTtsaW5lLWhlaWdodDoxLjllbTtiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy50aXRsZUNvbG9yfHwiIzAwMDBDQyIsIjtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9LiIsZS5pZCwiIC55YXAtYnV0dG9uLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl9fdGV4dHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uIixlLmlkLCIgLnlhcC1idXR0b25fX3RleHR7ei1pbmRleDoyO21hcmdpbjowIGF1dG87cGFkZGluZzowIDFlbTtjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiKS50b1JlYWRhYmxlKCksIjtmb250LXdlaWdodDo0MDA7em9vbTowfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl9faWNvbiwuIixlLmlkLCIgLnlhcC1idXR0b25fX3RleHR7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1idXR0b246aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Y29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikudG9SZWFkYWJsZSgpLCI7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQ6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM2ODlmMzg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udDpub3JtYWwgLjllbS8xIFRhaG9tYSxzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6MS4yZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQ6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7cGFkZGluZzouOWVtIDEuMmVtIC44ZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQteCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC14OmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjg5ZjM4O2JvcmRlci1yYWRpdXM6M3B4O2ZvbnQ6bm9ybWFsIC45ZW0vMSBzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6MS4yZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQteCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC14OmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e3BhZGRpbmc6LjVlbSAxLjJlbX0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3M6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjMWY2NmIxO2NvbG9yOiMxZjY2YjE7ZmlsbDojMWY2NmIxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjFweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zIC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3M6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7dG9wOjA7cGFkZGluZy1sZWZ0Oi44ZW07cGFkZGluZy1yaWdodDouOGVtO2NvbG9yOmluaGVyaXQ7dmVydGljYWwtYWxpZ246dG9wfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3MteCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLXg6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjMDA3YWZmO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiMwMDdhZmY7ZmlsbDojMDA3YWZmO3N0cm9rZTojMDA3YWZmO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Zm9udC1mYW1pbHk6c3lzdGVtLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LEhlbHZldGljYSBOZXVlLEx1Y2lkYSBHcmFuZGUsQXJpYWwsc2Fucy1zZXJpZjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy14IC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3MteDpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHt0b3A6MDtwYWRkaW5nLWxlZnQ6LjdlbTtwYWRkaW5nLXJpZ2h0Oi43ZW07Y29sb3I6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC13ZWlnaHQ6NjAwfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9hbmRyb2lkLWFwcCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXJ7aGVpZ2h0OjM0cHg7bGluZS1oZWlnaHQ6MzRweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzEwOWQ1Nztib3JkZXItcmFkaXVzOjNweDtmb250LWZhbWlseTpUYWhvbWEsc2Fucy1zZXJpZjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MXB4O3RleHQtZGVjb3JhdGlvbjpub25lfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9hbmRyb2lkLWFwcCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDE0cHh9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQtYXBwLnlhcC1idXR0b25fc21hbGwsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQtYXBwOmhvdmVyLnlhcC1idXR0b25fc21hbGx7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHAueWFwLWJ1dHRvbl9zbWFsbCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXIueWFwLWJ1dHRvbl9zbWFsbCAueWFwLWJ1dHRvbl9fdGV4dHtmb250LXNpemU6MTJweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLWFwcCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLWFwcDpob3Zlcntib3JkZXI6MXB4IHNvbGlkICMxNThmZmY7aGVpZ2h0OjIxcHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjEycHg7Y29sb3I6I2ZmZjtmaWxsOiNmZmY7YmFja2dyb3VuZDojMTU4ZmZmO2ZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHh9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy1hcHAgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy1hcHA6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7dG9wOjA7cGFkZGluZy1sZWZ0Oi44ZW07cGFkZGluZy1yaWdodDouOGVtO2NvbG9yOmluaGVyaXQ7dmVydGljYWwtYWxpZ246dG9wfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9jb25zdGFudC1jb2xvcnN7Ym9yZGVyOjJweCBzb2xpZDtib3JkZXItY29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fCIjRkZGIikudG9SZWFkYWJsZSgpLCI7YmFja2dyb3VuZDoiLGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiLCJ9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9ycyAueWFwLWJ1dHRvbl9fdGV4dHtjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiKS50b1JlYWRhYmxlKCksIjtmb250LXNpemU6MS4xNWVtO2ZvbnQtd2VpZ2h0OjcwMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9ycyAueWFwLWJ1dHRvbl9faWNvbntib3JkZXItcmFkaXVzOjB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9yczpob3ZlcntiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfY29uc3RhbnQtY29sb3JzOmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e2NvbG9yOiIsbmV3IGUudXRpbHMuQ29sb3IoZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIpLnRvUmVhZGFibGUoKSwifS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV95ZWxsb3cgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdzpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHtjb2xvcjoiLGUudGV4dENvbG9yfHwiI2ZmZiIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfcmVzcG9uc2l2ZS1tb2JpbGUsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlOmhvdmVye2ZvbnQtc2l6ZToxLjJlbTtsaW5lLWhlaWdodDoxZW07cGFkZGluZzouM2VtIC45ZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlIC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9yZXNwb25zaXZlLW1vYmlsZTpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHtmb250LXdlaWdodDo3MDA7cGFkZGluZzowO2NvbG9yOiMwMDB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdywuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfeWVsbG93OmhvdmVye2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjFlbTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMnB4ICNmYzB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdyAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfeWVsbG93OmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi41ZW0gLjdlbTtjb2xvcjoiLGUudGV4dENvbG9yfHwiI2ZmZiIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfd2hpdGUsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3doaXRlOmhvdmVye2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MWVtO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDVweCAwIHJnYmEoMCwwLDAsLjMpfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV93aGl0ZSAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfd2hpdGU6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6LjVlbSAuN2VtO2NvbG9yOiMwMDB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLXN3aXRjaHtkaXNwbGF5OmlubGluZS1ibG9ja30iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3e2JhY2tncm91bmQ6I2ZjMDt3aWR0aDoxMDAlO29wYWNpdHk6MDtjb2xvcjojMDAwO2N1cnNvcjpkZWZhdWx0O2ZvbnQtc2l6ZToxM3B4fS4iLGUuaWQsIiAueWFwLWludGVydmlld19zaG93e29wYWNpdHk6MX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX2xlZ2Fse3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjI7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWwtaWNvbnt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MXB4IHNvbGlkICMwMDA7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MTRweDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MnB4O2xlZnQ6MnB4O2JvcmRlci1yYWRpdXM6NTAlfS4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWwtdmlld3BvcnR7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzoxZW07bWF4LXdpZHRoOjk1JTttYXgtaGVpZ2h0Ojk1JTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMnB4fS4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWw6aG92ZXIsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19sZWdhbF9zaG93e3RvcDowO3JpZ2h0OjA7YmFja2dyb3VuZDojMDAwO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuOCl9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19sZWdhbDpob3ZlciAueWFwLWludGVydmlld19fbGVnYWwtdmlld3BvcnQsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19sZWdhbF9zaG93IC55YXAtaW50ZXJ2aWV3X19sZWdhbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrfS4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWw6aG92ZXIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsLWljb24sLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19sZWdhbF9zaG93IC55YXAtaW50ZXJ2aWV3X19sZWdhbC1pY29ue2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX3ZpZXdwb3J0e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtanVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDstbXMtZmxleC1wYWNrOmRpc3RyaWJ1dGU7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDstd2Via2l0LWFsaWduLWl0ZW1zOmxlZnQ7LW1zLWZsZXgtYWxpZ246bGVmdDthbGlnbi1pdGVtczpsZWZ0O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzoxLjJlbSAxLjJlbSAxLjVlbTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19kZXNjcmlwdGlvbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Zm9udC1zaXplOjEuM2VtfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLWJ1dHRvbl90aGVtZV9pbnRlcnZpZXd7YmFja2dyb3VuZDojZmZmO3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3M7Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjEuMmVtO3BhZGRpbmc6LjZlbSAxZW07d2lkdGg6MTAwJTtvcGFjaXR5Oi41O2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXgtd2lkdGg6MzAwcHg7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Ym9yZGVyLXJhZGl1czozcHg7Y3Vyc29yOmRlZmF1bHR9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtYnV0dG9uX3RoZW1lX2ludGVydmlldzpiZWZvcmV7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLWJ1dHRvbl90aGVtZV9pbnRlcnZpZXcgLnlhcC1idXR0b25fX3RleHR7cGFkZGluZzowO21hcmdpbjowO2NvbG9yOiMwMDA7bGluZS1oZWlnaHQ6MS4yZW19LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtYnV0dG9uX3RoZW1lX2ludGVydmlldy55YXAtYnV0dG9uX2FjdGl2ZS1saW5re29wYWNpdHk6MTtjdXJzb3I6cG9pbnRlcn0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2NvbG9yOiMwMDA7Zm9udC1zaXplOjEuMmVtO21hcmdpbjouNWVtIDA7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX192aWV3cG9ydHttYXgtd2lkdGg6MTAwJX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2hfX2l0ZW17bWFyZ2luOi4xZW0gMS4yZW0gLjFlbSAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2N1cnNvcjpwb2ludGVyfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9faXRlbTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX19tYXJrZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MThweDtoZWlnaHQ6MThweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0Oi41ZW19LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX190ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvcGFjaXR5Oi44O2xpbmUtaGVpZ2h0OjFlbX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2ggLnlhcC1zd2l0Y2hfX3N2Zy1hY3RpdmUsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoIC55YXAtc3dpdGNoX19zdmctaW5hY3RpdmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9hY3RpdmV7Y29sb3I6IzAwMH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2ggLnlhcC1zd2l0Y2hfX3N2Zy1hY3RpdmUsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX2FjdGl2ZSAueWFwLXN3aXRjaF9fc3ZnLWluYWN0aXZle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2hfYWN0aXZlIC55YXAtc3dpdGNoX19zdmctYWN0aXZle2Rpc3BsYXk6YmxvY2t9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX19tYXJrZXItdmlld3BvcnQsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX190ZXh0LXZpZXdwb3J0e2Rpc3BsYXk6dGFibGUtY2VsbH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLWludGVydmlld19fdmlld3BvcnR7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3c7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc2l6ZToxLjFlbTstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWludGVydmlld190aGVtZS1ob3Jpem9udGFsIC55YXAtYnV0dG9uLC4iLGUuaWQsIiAueWFwLWludGVydmlld190aGVtZS1ob3Jpem9udGFsIC55YXAtaW50ZXJ2aWV3X19kZXNjcmlwdGlvbiwuIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLXN3aXRjaHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X3RoZW1lLWhvcml6b250YWwgLnlhcC1pbnRlcnZpZXdfX2Rlc2NyaXB0aW9ue21heC13aWR0aDozMDBweDttYXgtaGVpZ2h0OjYwcHg7Zm9udC1zaXplOjEuMmVtfS4iLGUuaWQsIiAueWFwLWludGVydmlld190aGVtZS1ob3Jpem9udGFsIC55YXAtc3dpdGNoe2ZvbnQtc2l6ZToxLjJlbTttYXJnaW46LjNlbSAwIDAgMWVtfS4iLGUuaWQsIiAueWFwLWludGVydmlld190aGVtZS1ob3Jpem9udGFsIC55YXAtYnV0dG9ue21heC13aWR0aDoxNDBweH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfZm9ybWF0LTcyOHg5MCAueWFwLWludGVydmlld19fdmlld3BvcnQsLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X2Zvcm1hdC05NzB4OTAgLnlhcC1pbnRlcnZpZXdfX3ZpZXdwb3J0e21heC1oZWlnaHQ6ODhweH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfZm9ybWF0LTI0MHg0MDAgLnlhcC1zd2l0Y2hfX2l0ZW17ZGlzcGxheTpibG9jazttYXJnaW46MWVtIDB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLXRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzowIDRweDttYXgtd2lkdGg6MTIwcHg7aGVpZ2h0OjE4cHg7bGluZS1oZWlnaHQ6MThweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjgpO2JvcmRlci1yYWRpdXM6MXB4O3Zpc2liaWxpdHk6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uIixlLmlkLCIgLnlhcC10b29sdGlwX19hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6M3B4O3JpZ2h0Oi02cHg7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjZweCAwIDZweCA2cHg7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMzMzM7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHJnYmEoMCwwLDAsLjgpfS4iLGUuaWQsIiAueWFwLXRvb2x0aXBfX3RleHR7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6I2ZmZjtsZXR0ZXItc3BhY2luZzouMDRlbTtmb250LXNpemU6MTFweDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjt0ZXh0LXRyYW5zZm9ybTpub25lfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIjIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfdmVydGljYWwgLnlhcC10aXRsZS1ibG9ja3tkaXNwbGF5OmJsb2NrfSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19wb3N0ZXIgLnlhcC10aXRsZS1ibG9jaywjIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtdGl0bGUtYmxvY2t7ZGlzcGxheTppbmxpbmV9IyIsZS5pZCwiIC55YXAtdHlwZS12ZXJ0aWNhbCAueWFwLWxvZ297cG9zaXRpb246c3RhdGljfSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19yb3cgLnlhcC1sb2dve3RvcDoxfS4iLGUuaWQsIntvdmVyZmxvdzp2aXNpYmxlO3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToiLGUuc2V0dGluZ3MuZm9udFNpemU/MTAwKmUuc2V0dGluZ3MuZm9udFNpemUrIiUiOiIiLCI7Y29sb3I6IixlLnNldHRpbmdzLnRleHRDb2xvcnx8IiMwMDAwMDAiLCI7Zm9udC1mYW1pbHk6IixlLnNldHRpbmdzLmZvbnRGYW1pbHl8fCJpbmhlcml0IiwifS4iLGUuaWQsIiwuIixlLmlkLCIgLnlhcC1sYXlvdXR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS4iLGUuaWQsIiAueWFwLWxheW91dHtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtY29udGFjdHNfX2l0ZW0tbGluazpob3ZlciwuIixlLmlkLCIgLnlhcC1kb21haW5fX3RleHQsLiIsZS5pZCwiIC55YXAtZG9tYWluX190ZXh0OmhvdmVyLC4iLGUuaWQsIiAueWFwLXNpdGVsaW5rc19fbGluayAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVyLC4iLGUuaWQsIiAueWFwLXRpdGxlLWJsb2NrX190ZXh0IC55YXAtdGl0bGUtYmxvY2tfX3RleHRfaW5uZXJ7dGV4dC1kZWNvcmF0aW9uOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZSYmZS51dGlsLmJyb3dzZXIuaXNRdWlya3M/InVuZGVybGluZSI6Im5vbmUiLCI7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmUmJmUudXRpbC5icm93c2VyLmlzUXVpcmtzPyJub25lIjplLnV0aWwuYnJvd3Nlci5pc1NhZmFyaT8iaW5zZXQiOiJzb2xpZCIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2l0ZW1ze3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkFEPyJzZXBhcmF0ZSI6ImNvbGxhcHNlIiwifS4iLGUuaWQsIiAueWFwLWxheW91dF9fb3V0ZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO3pvb206MTtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzEwMDB4MTIwIC55YXAtbGF5b3V0X19vdXRlciwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZ3JpZCAueWFwLWxheW91dF9fb3V0ZXIsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2hvcml6b250YWwgLnlhcC1sYXlvdXRfX291dGVye292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2lubmVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjt3aWR0aDoiLGUudXRpbC5icm93c2VyLmlzSUVRdWlya3M/IjEwMCUiOiJhdXRvIiwiO3BhZGRpbmc6LjdlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9tZWRpdW0gLnlhcC1sYXlvdXRfX2lubmVye3BhZGRpbmc6LjZlbSAuMWVtIC42ZW0gLjZlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9tZWRpdW0gLnlhcC1sYXlvdXRfX3dhcm5pbmd7bWFyZ2luLXJpZ2h0Oi40ZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X19ib2R5e21hcmdpbi10b3A6IixlLnNldHRpbmdzLmxpbmtzVW5kZXJsaW5lPyIwLjM4ZW0iOiIwLjIzZW0iLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19iZC1yYXRpbmd7bWFyZ2luOi40ZW0gMH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX3NjaGVkdWxlLC4iLGUuaWQsIiAueWFwLWxheW91dF9fc2l0ZWxpbmtzLC4iLGUuaWQsIiAueWFwLWxheW91dF9fd2FybmluZ3ttYXJnaW4tdG9wOi4yM2VtfS4iLGUuaWQsIiAueWFwLWxheW91dF9fYWR0dW5le2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTF9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19pdGVtOmhvdmVyIC55YXAtbGF5b3V0X19hZHR1bmUsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2FkdHVuZS1hbHdheXMtdmlzaWJsZSAueWFwLWxheW91dF9fYWR0dW5le2Rpc3BsYXk6YmxvY2t9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19hZHR1bmUtbWVzc2FnZXtsZWZ0Oi0xMDElO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2l0ZW1fYWJ1c2VkIC55YXAtbGF5b3V0X19pbm5lciwuIixlLmlkLCIgLnlhcC1sYXlvdXRfX2l0ZW1fYWJ1c2VkIC55YXAtbGF5b3V0X19pbm5lciAqe3Zpc2liaWxpdHk6aGlkZGVufS4iLGUuaWQsIiAueWFwLWxheW91dF9faXRlbV9hYnVzZWQgLnlhcC1sYXlvdXRfX2FkdHVuZS1tZXNzYWdle2xlZnQ6MDt0cmFuc2l0aW9uOmxlZnQgLjRzIGVhc2Utb3V0fS4iLGUuaWQsIiAueWFwLWxheW91dF9fcGljdHVyZS1yYXRpbmd7bWFyZ2luLXRvcDouMjNlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2FwcHttYXJnaW4tdG9wOi42ZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkIC55YXAtbGF5b3V0X19hcHB7bWFyZ2luLXRvcDouNGVtfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4NTAgLnlhcC1sYXlvdXRfX2FwcHttYXJnaW4tdG9wOjA7cGFkZGluZy1ib3R0b206LjJlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZV9hcHAgLnlhcC1sYXlvdXRfX2FwcHtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfdHlwZV9uYXJyb3cgLnlhcC1sYXlvdXRfX2FwcHtwYWRkaW5nLXJpZ2h0OiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLk5PTkU/NTo0LCJweDt0ZXh0LWFsaWduOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDUwIC55YXAtbGF5b3V0X19pdGVtX2FkdHVuZSAueWFwLWxheW91dF9fdGl0bGV7bWFyZ2luLXJpZ2h0OjE0cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHgxMDAgLnlhcC1sYXlvdXRfX2JvZHl7bWFyZ2luLXRvcDowfS4iLGUuaWQsIiAueWFwLWxheW91dF9fYXBwX3N0eWxlX2FuZHJvaWQsLiIsZS5pZCwiIC55YXAtbGF5b3V0X19hcHBfc3R5bGVfaW9ze3BhZGRpbmctdG9wOi4zZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X193cmFwcGVye2JhY2tncm91bmQ6IixlLnNldHRpbmdzLmJnQ29sb3ImJmUuc2V0dGluZ3MuYm9yZGVyVHlwZSE9ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD9lLnNldHRpbmdzLmJnQ29sb3I6InRyYW5zcGFyZW50IiwiO2JvcmRlcjoiLGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5CTE9DS3x8ZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkNPTExBUFNFPyIxcHgiOjAsIiBzb2xpZCAiLGUuc2V0dGluZ3MuYm9yZGVyQ29sb3J8fCIjRkVFQkM4IiwiO2JvcmRlci1yYWRpdXM6IixlLnNldHRpbmdzLmJvcmRlclJhZGl1cz8iNHB4IjowLCI7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19ob3Jpem9udGFsIC55YXAtbGF5b3V0X193cmFwcGVye21hcmdpbi1yaWdodDoiLGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD8iLTEwcHgiOiIiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2dyaWQgLnlhcC1sYXlvdXRfX3dyYXBwZXJ7bWFyZ2luLXJpZ2h0OiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkFEPyItMTBweCI6IiIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtdmVydGljYWwgLnlhcC1sYXlvdXRfX3dyYXBwZXJ7aGVpZ2h0OiIsZS5ibG9jay5oZWlnaHQtKGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5OT05FPzA6MiktMTYsInB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC1ob3Jpem9udGFsIC55YXAtbGF5b3V0X193cmFwcGVye21hcmdpbi1sZWZ0OjE3cHg7d2lkdGg6IixlLmJsb2NrLndpZHRoLShlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuTk9ORT8wOjIpLTE3LCJweDtoZWlnaHQ6IixlLmJsb2NrLmhlaWdodC0oZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLk5PTkU/MDoyKSwicHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHgxMDAueWFwLWxheW91dF9ibG9ja19maXhlZC1ob3Jpem9udGFsIC55YXAtbGF5b3V0X193cmFwcGVye21hcmdpbi1sZWZ0OjE1cHg7d2lkdGg6IixlLmJsb2NrLndpZHRoLShlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuTk9ORT8wOjIpLTE1LCJweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2xvZ297ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0Oi43ZW07Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6IixlLnNldHRpbmdzLmhlYWRlckJnQ29sb3J8fCJ0cmFuc3BhcmVudCIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9tZWRpdW0gLnlhcC1sYXlvdXRfX2xvZ297cGFkZGluZy1sZWZ0Oi42ZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLXZlcnRpY2FsIC55YXAtbGF5b3V0X19sb2dve3BhZGRpbmctbGVmdDo1cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLWhvcml6b250YWwgLnlhcC1sYXlvdXRfX2xvZ297b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxN3B4O2hlaWdodDoxMDAlO3BhZGRpbmc6MH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtbGF5b3V0X19sb2dve3BhZGRpbmc6LjRlbSAuOGVtO2ZvbnQtc2l6ZToxMjAlO2NvbG9yOiM2NjY7YmFja2dyb3VuZDpub25lfSMiLGUuaWQsInttYXJnaW46IixlLnNldHRpbmdzLmhvcml6b250YWxBbGlnbj8iYXV0byI6IjAiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19pdGVte3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/IjFweCI6MCwiIHNvbGlkICIsZS5zZXR0aW5ncy5ib3JkZXJDb2xvcnx8IiNGRUVCQzgiLCI7Ym9yZGVyLXJhZGl1czoiLGUuc2V0dGluZ3MuYm9yZGVyUmFkaXVzJiZlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/IjRweCI6MCwiO2JhY2tncm91bmQ6IixlLnNldHRpbmdzLmJnQ29sb3ImJmUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD9lLnNldHRpbmdzLmJnQ29sb3I6InRyYW5zcGFyZW50IiwifS4iLGUuaWQsIiAueWFwLWxheW91dF9faXRlbV9hYnVzZWR7YmFja2dyb3VuZDojZmZmfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja192ZXJ0aWNhbCAueWFwLWxheW91dF9faXRlbXtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkNPTExBUFNFfHxlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/IjFweCI6IiIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfdmVydGljYWwgdHI6bGFzdC1jaGlsZCAueWFwLWxheW91dF9faXRlbXtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkNPTExBUFNFPzA6IiIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfaG9yaXpvbnRhbCAueWFwLWxheW91dF9faXRlbXt3aWR0aDoiLCgxMDAvZS5ibG9jay5hZHZzLmxlbmd0aCkudG9GaXhlZCgyKSwiJTtib3JkZXItcmlnaHQtd2lkdGg6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQ09MTEFQU0V8fGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD8iMXB4IjowLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2hvcml6b250YWwgLnlhcC1sYXlvdXRfX2l0ZW06bGFzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQ09MTEFQU0U/MDoiIiwifS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19ncmlkIC55YXAtbGF5b3V0X19pdGVte3dpZHRoOiIsKDIwMC9lLmJsb2NrLmFkdnMubGVuZ3RoKS50b0ZpeGVkKDIpLCIlfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19ncmlkIC55YXAtbGF5b3V0X19pdGVtX250aF8xLC4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19ncmlkIC55YXAtbGF5b3V0X19pdGVtX250aF8ye2JvcmRlci1ib3R0b20td2lkdGg6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQ09MTEFQU0U/IjFweCI6IiIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZ3JpZCAueWFwLWxheW91dF9faXRlbV9udGhfMSwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZ3JpZCAueWFwLWxheW91dF9faXRlbV9udGhfM3tib3JkZXItcmlnaHQtd2lkdGg6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQ09MTEFQU0U/IjFweCI6IiIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtdmVydGljYWwgLnlhcC1sYXlvdXRfX2l0ZW17dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWxheW91dF90eXBlX2NvbXBhdGlibGUgLnlhcC1sYXlvdXRfX3BpY3R1cmUsLiIsZS5pZCwiIC55YXAtbGF5b3V0X3R5cGVfbWVkaXVtIC55YXAtbGF5b3V0X19waWN0dXJlLC4iLGUuaWQsIiAueWFwLWxheW91dF90eXBlX3dpZGUgLnlhcC1sYXlvdXRfX3BpY3R1cmV7ZmxvYXQ6bGVmdDtwYWRkaW5nLXJpZ2h0Oi43ZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X3R5cGVfbWVkaXVtIC55YXAtbGF5b3V0X19waWN0dXJle3BhZGRpbmctcmlnaHQ6LjZlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9uYXJyb3cgLnlhcC1sYXlvdXRfX3BpY3R1cmV7cGFkZGluZy1ib3R0b206LjdlbTttYXJnaW46MCBhdXRvfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X3R5cGVfY29tcGF0aWJsZSAueWFwLWxheW91dF9fcGljdHVyZSwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQueWFwLWxheW91dF90eXBlX21lZGl1bSAueWFwLWxheW91dF9fcGljdHVyZSwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQueWFwLWxheW91dF90eXBlX3dpZGUgLnlhcC1sYXlvdXRfX3BpY3R1cmV7cGFkZGluZy1yaWdodDo1cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfYWRhcHRpdmUgLnlhcC1sYXlvdXRfX3BpY3R1cmV7cGFkZGluZy1yaWdodDo2cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfdHlwZV9uYXJyb3cgLnlhcC1sYXlvdXRfX3BpY3R1cmV7cGFkZGluZy1ib3R0b206NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6LTJweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQueWFwLWxheW91dF9ibG9ja19hZGFwdGl2ZS55YXAtbGF5b3V0X3R5cGVfbmFycm93IC55YXAtbGF5b3V0X19waWN0dXJle3BhZGRpbmc6MCAwIDdweDtsZWZ0OjB9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfMzIweDUwIC55YXAtbGF5b3V0X19waWN0dXJle3BhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoiLGUuc2V0dGluZ3MuYm9yZGVyUmFkaXVzPyIzcHggMCAwIDNweCI6MCwifS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19wb3N0ZXIgLnlhcC1sYXlvdXRfX3BpY3R1cmV7ZmxvYXQ6bm9uZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXJpZ2h0OjA7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwwLDAsLjEpO2JvcmRlcjoiLGUudXRpbC5icm93c2VyLmlzSUVRdWlya3M/IjFweCBzb2xpZCAjZGRkIjoibm9uZSIsIjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjI7bGVmdDo1MCU7dG9wOjUwJX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfcG9zdGVyIC55YXAtbGF5b3V0X19waWN0dXJlX3BsYWlue2JvcmRlcjpub25lO2JveC1zaGFkb3c6bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtbGF5b3V0X19waWN0dXJle3BhZGRpbmctcmlnaHQ6LjZlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2ljb257ZGlzcGxheTpibG9ja30uIixlLmlkLCIgLnlhcC1sYXlvdXRfX2ljb24taW1ne2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6YXV0b30uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9tZWRpdW0gLnlhcC1sYXlvdXRfX2NvbnRlbnQsLiIsZS5pZCwiIC55YXAtbGF5b3V0X3R5cGVfd2lkZSAueWFwLWxheW91dF9fY29udGVudHtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtbGF5b3V0X19pdGVtX3BpY3R1cmVfZmFsc2UgLnlhcC1sYXlvdXRfX2NvbnRlbnR7b3ZlcmZsb3c6dmlzaWJsZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9tZWRpdW0gLnlhcC1sYXlvdXRfX2l0ZW1fYWdlIC55YXAtbGF5b3V0X19jb250ZW50LC4iLGUuaWQsIiAueWFwLWxheW91dF90eXBlX3dpZGUgLnlhcC1sYXlvdXRfX2l0ZW1fYWdlIC55YXAtbGF5b3V0X19jb250ZW50e3BhZGRpbmctYm90dG9tOjFweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfYWRhcHRpdmUgLnlhcC1sYXlvdXRfX2NvbnRlbnR7em9vbToxfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4NTAgLnlhcC1sYXlvdXRfX2NvbnRlbnR7cGFkZGluZzoycHggMXB4IDFweCA1cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLXNtYWxsIC55YXAtbGF5b3V0X19jb250ZW50e2xpbmUtaGVpZ2h0OjExcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19jb250YWN0c3ttYXJnaW4tdG9wOi4yM2VtfS4iLGUuaWQsIiAueWFwLWxheW91dF9oaWRlX2NvbnRhY3RzLnlhcC1sYXlvdXRfaGlkZV9kb21haW4gLnlhcC1sYXlvdXRfX2NvbnRhY3Rze2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDUwIC55YXAtbGF5b3V0X19jb250YWN0c3ttYXJnaW4tdG9wOjB9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX3Bvc3RlciAueWFwLWxheW91dF9fY29udGFjdHN7bWFyZ2luLXRvcDouNjNlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtbGF5b3V0X19jb250YWN0c3twYWRkaW5nLXRvcDouNmVtO21hcmdpbi10b3A6MDtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydS12ZXJ0aWNhbCAueWFwLWxheW91dF9fY29udGFjdHN7Y2xlYXI6Ym90aDt6b29tOjF9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19hZ2V7dmVydGljYWwtYWxpZ246dG9wO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS4iLGUuaWQsIiAueWFwLWxheW91dF9fYWRkcmVzc3t6b29tOjE7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7bWFyZ2luLXRvcDouMjNlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZV9hZGRyZXNzIC55YXAtbGF5b3V0X19hZGRyZXNze2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtbGF5b3V0X19hZGRyZXNze3dpZHRoOmF1dG99LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX3ZlcnRpY2FsIC55YXAtbGF5b3V0X19pdGVtc3tib3JkZXItc3BhY2luZzoiLGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD8iMCA1cHgiOiIwIDAiLCI7bWFyZ2luLXRvcDoiLGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD8iLTVweCI6MCwiO21hcmdpbi1ib3R0b206IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/Ii01cHgiOjAsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfaG9yaXpvbnRhbCAueWFwLWxheW91dF9faXRlbXN7Ym9yZGVyLXNwYWNpbmc6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/IjVweCAwIjoiIiwiO21hcmdpbi1sZWZ0OiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT1lLkNvbnN0LkJvcmRlclR5cGVzLkFEPyItNXB4IjoiIiwifS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19ncmlkIC55YXAtbGF5b3V0X19pdGVtc3tib3JkZXItc3BhY2luZzoiLGUuc2V0dGluZ3MuYm9yZGVyVHlwZT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5BRD8iNXB4IDVweCI6IiIsIjttYXJnaW46IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuQUQ/Ii01cHgiOiIiLCJ9LiIsZS5pZCwie3dpZHRoOiIsZS5ibG9jay53aWR0aD9lLmJsb2NrLndpZHRoKyJweCI6IiIsIjtoZWlnaHQ6IixlLmJsb2NrLmhlaWdodD9lLmJsb2NrLmhlaWdodCsicHgiOiIiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVke2ZvbnQtc2l6ZToxM3B4O3dpZHRoOiIsZS5ibG9jay53aWR0aCwicHg7aGVpZ2h0OiIsZS5ibG9jay5oZWlnaHQsInB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLW1lZGl1bXtmb250LXNpemU6MTFweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQueWFwLWxheW91dF9ibG9ja19maXhlZC1zbWFsbHtmb250LXNpemU6MTBweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQueWFwLWxheW91dF9pbnZpc2libGUsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfaW52aXNpYmxlICp7dmlzaWJpbGl0eTpoaWRkZW59LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkIC55YXAtbGF5b3V0X19pdGVtc3toZWlnaHQ6MTAwJX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQgLnlhcC1sYXlvdXRfX2lubmVye3BhZGRpbmc6NXB4IDFweCA1cHggNXB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X2Jsb2NrX2FkYXB0aXZlIC55YXAtbGF5b3V0X19pbm5lcntwYWRkaW5nOjVweCA2cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkIC55YXAtbGF5b3V0X193YXJuaW5ne21hcmdpbi1yaWdodDo0cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtc21hbGwgLnlhcC1sYXlvdXRfX3dhcm5pbmd7bWFyZ2luLXRvcDowfS4iLGUuaWQsIiAueWFwLWxheW91dF9oaWRlX3NjaGVkdWxlIC55YXAtbGF5b3V0X19zY2hlZHVsZSwuIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZV9zaXRlbGlua3MgLnlhcC1sYXlvdXRfX3NpdGVsaW5rcywuIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZV90aXRsZV9zZWNvbmQgLnlhcC10aXRsZSAueWFwLWFkdl9fdGl0bGVfc2Vjb25ke2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtaG9yaXpvbnRhbC55YXAtbGF5b3V0X3RleHQtaW5saW5lIC55YXAtbGF5b3V0X19ib2R5LC4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC1ob3Jpem9udGFsLnlhcC1sYXlvdXRfdGV4dC1pbmxpbmUgLnlhcC1sYXlvdXRfX3RpdGxle2Rpc3BsYXk6aW5saW5lfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC1ob3Jpem9udGFsLnlhcC1sYXlvdXRfdGV4dC1pbmxpbmUgLnlhcC1sYXlvdXRfX3RpdGxle21hcmdpbi1yaWdodDo1cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLWhvcml6b250YWwueWFwLWxheW91dF90ZXh0LWlubGluZSAueWFwLWxheW91dF9fYm9keXttYXJnaW4tdG9wOjB9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHgxMDAgLnlhcC1sYXlvdXRfX2lubmVye3BhZGRpbmc6IixlLnNldHRpbmdzLmJvcmRlclR5cGU9PWUuQ29uc3QuQm9yZGVyVHlwZXMuTk9ORT81OjQsInB4O3BhZGRpbmctcmlnaHQ6MXB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18xNjB4NjAwIC55YXAtbGF5b3V0X19pbm5lcntwYWRkaW5nLXJpZ2h0OjB9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MCAueWFwLWxheW91dF9faW5uZXJ7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4NTAgLnlhcC1sYXlvdXRfX2JvZHksLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MCAueWFwLWxheW91dF9fc2NoZWR1bGUsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MCAueWFwLWxheW91dF9fc2l0ZWxpbmtzLC4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4NTAgLnlhcC1sYXlvdXRfX3dhcm5pbmd7bWFyZ2luLXRvcDowfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtbGF5b3V0X193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3dpZHRoOmF1dG87aGVpZ2h0OiIsZS5zZXR0aW5ncy5ib3JkZXJUeXBlPT09ZS5Db25zdC5Cb3JkZXJUeXBlcy5OT05FPyIyNTBweCI6IjI0OHB4IiwiO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxheW91dF9faXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246dG9wfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtbGF5b3V0X19vdXRlcntwYWRkaW5nOjE0cHggMTRweCAxN3B4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtbGF5b3V0X19pbm5lcntwYWRkaW5nOjB9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAgLnlhcC1sYXlvdXRfX3RpdGxle3BhZGRpbmctYm90dG9tOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8iMC40OWVtIjoiMC4zOGVtIiwiO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MS4xO2ZvbnQtc2l6ZToyN3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxheW91dF9fY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAgLnlhcC1sYXlvdXRfX3dhcm5pbmd7bWFyZ2luOjA7cGFkZGluZy10b3A6NXB4O2NsZWFyOmJvdGh9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAgLnlhcC1sYXlvdXRfX3BpY3R1cmV7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowO21hcmdpbi1sZWZ0OjE0cHg7bWFyZ2luLWJvdHRvbToycHg7cGFkZGluZy1ib3R0b206MXB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOnJpZ2h0fSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtbGF5b3V0X19waWN0dXJlIGltZ3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxheW91dF9fYm9keXttYXJnaW4tdG9wOjA7b3ZlcmZsb3c6aGlkZGVuO2xpbmUtaGVpZ2h0OjEuMTt3b3JkLXdyYXA6YnJlYWstd29yZH0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxheW91dF9fYWdle21hcmdpbi1ib3R0b206MXB4O2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxheW91dF9fYXBwe21hcmdpbi10b3A6MTFweDtvdmVyZmxvdzpoaWRkZW59IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAueWFwLWxheW91dF90d28tYWRzIC55YXAtbGF5b3V0X19pdGVte21pbi1oZWlnaHQ6YXV0bzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAueWFwLWxheW91dF90d28tYWRzIC55YXAtbGF5b3V0X19pdGVtX250aF8ye3BhZGRpbmctYm90dG9tOjEycHh9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAueWFwLWxheW91dF90d28tYWRzIC55YXAtbGF5b3V0X19vdXRlcntwYWRkaW5nOjdweCAxNHB4fSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwLnlhcC1sYXlvdXRfdHdvLWFkcyAueWFwLWxheW91dF9fdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O2ZvbnQtc2l6ZToyMnB4fSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwLnlhcC1sYXlvdXRfdHdvLWFkcyAueWFwLWxheW91dF9fY29udGVudHtmb250LXNpemU6MTRweH0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MC55YXAtbGF5b3V0X3R3by1hZHMgLnlhcC1sYXlvdXRfX3dhcm5pbmd7cGFkZGluZy10b3A6M3B4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX291dGVye2ZvbnQtc2l6ZToxOXB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX3dyYXBwZXJ7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX2lubmVye3BhZGRpbmc6MTlweCAxOXB4IDIycHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxheW91dF9fY29udGVudHttYXJnaW4tYm90dG9tOjE0cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbGF5b3V0X19waWN0dXJle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxN3B4O3BhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxheW91dF9fd2FybmluZ3ttYXJnaW46MH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbGF5b3V0X190aXRsZXttYXJnaW46MH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbGF5b3V0X19ib2R5e2ZvbnQtc2l6ZTppbmhlcml0fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX2FwcCwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbGF5b3V0X19jb250YWN0c3ttYXJnaW4tdG9wOjE3cHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzQ4MHgzMjAgLnlhcC1sYXlvdXRfX2l0ZW17dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja180ODB4MzIwIC55YXAtbGF5b3V0X19waWN0dXJle2Zsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OjExcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxheW91dF9fdGl0bGUtd3JhcHtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tYm90dG9tOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8iMTdweCI6IjE0cHgiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxheW91dF9fdGl0bGUsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxheW91dF9fdGl0bGUtaWNvbntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX3RpdGxlLWljb257aGVpZ2h0OjgycHg7cGFkZGluZy1yaWdodDouNWVtfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX3RpdGxlLWljb24tbGlua3tkaXNwbGF5OmJsb2NrO2hlaWdodDo4MnB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sYXlvdXRfX3RpdGxlLWljb24taW1hZ2V7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbGF5b3V0X19hZHR1bmV7ei1pbmRleDo0O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjEwcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxvZ29fc3RhbXB7cmlnaHQ6NXB4O3RleHQtYWxpZ246cmlnaHR9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxvZ29fc3RhbXAgLnlhcC1sb2dvX3N0YW1wX190ZXh0e2JvcmRlci1ib3R0b206bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbG9nb19zdGFtcCAueWFwLWxheW91dF9fYWR0dW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW4tbGVmdDoxMHB4O3Bvc2l0aW9uOnN0YXRpY30uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtbG9nb19zdGFtcCAueWFwLWFkdHVuZV9fbGFiZWx7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMyk7Zm9udC1zaXplOjExcHg7Y29sb3I6IzAwMDtsaW5lLWhlaWdodDoxM3B4fS4iLGUuaWQsIiAueWFwLXZrLWJsb2NrLWVsZW1lbnQueWFwLXZrLWJsb2NrLWVsZW1lbnQtaW52aXNpYmxlIC55YXAtdmstbWFpbntvcGFjaXR5OiIsZS5zZXR0aW5ncy5lbmFibGVBbmltYXRpb24/MDoxLCI7dHJhbnNpdGlvbjouNHMgZWFzZS1pbi1vdXR9LiIsZS5pZCwiIC55YXAtdmstYmxvY2stZWxlbWVudCAueWFwLXZrLW1haW57b3BhY2l0eToxO3RyYW5zaXRpb246LjRzIGVhc2UtaW4tb3V0fS4iLGUuaWQsIiAueWFwLXZrLW1haW57Zm9udC1mYW1pbHk6VGFob21hLEFyaWFsLFZlcmRhbmEsTHVjaWRhIFNhbnMsc2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7d2lkdGg6MTE4cHg7cGFkZGluZzowO21hcmdpbjowfS4iLGUuaWQsIiAueWFwLXZrLW1haW4sLiIsZS5pZCwiIC55YXAtdmstbWFpbiB5YXRhZ3tkaXNwbGF5OmJsb2NrfS4iLGUuaWQsIiAueWFwLXZrLW1haW4gaW1ne2JvcmRlcjowO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS4iLGUuaWQsIiAueWFwLXZrLWxvZ28sLiIsZS5pZCwiIC55YXAtdmstbG9nbyAqe2NvbG9yOiM3Nzc7Zm9udC1zaXplOi45MWVtO2xpbmUtaGVpZ2h0OjExcHg7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsfS4iLGUuaWQsIiAueWFwLXZrLWxvZ297cGFkZGluZzozcHggMCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtdmstbWFpbiBhLnlhcC12ay1pdGVtLC4iLGUuaWQsIiAueWFwLXZrLW1haW4gYS55YXAtdmstaXRlbTpob3ZlciwuIixlLmlkLCIgLnlhcC12ay1tYWluIGEueWFwLXZrLWl0ZW06dmlzaXRlZHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDNweCAxMXB4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RjZTNlOX0uIixlLmlkLCIgLnlhcC12ay1tYWluIGEueWFwLXZrLWl0ZW0ueWFwLXZrLWl0ZW0tMXtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNlM2U5fS4iLGUuaWQsIiAueWFwLXZrLXRpdGxle2NvbG9yOiIsZS5zZXR0aW5ncy50aXRsZUNvbG9yLCI7Zm9udC13ZWlnaHQ6NzAwO3dvcmQtd3JhcDpicmVhay13b3JkfS4iLGUuaWQsIiAueWFwLXZrLWRvbWFpbntjb2xvcjojNzc3O2ZvbnQtc2l6ZTouOTFlbTtwYWRkaW5nLXRvcDozcHg7d29yZC13cmFwOmJyZWFrLXdvcmR9LiIsZS5pZCwiIC55YXAtdmstaW1hZ2V7cGFkZGluZy10b3A6OXB4fS4iLGUuaWQsIiAueWFwLXZrLWJvZHl7cGFkZGluZy10b3A6MTBweDt3b3JkLXdyYXA6YnJlYWstd29yZH0uIixlLmlkLCIgLnlhcC12ay1hZ2UsLiIsZS5pZCwiIC55YXAtdmstd2FybmluZ3tjb2xvcjojNzc3O2ZvbnQtc2l6ZTouODJlbTtsaW5lLWhlaWdodDoxMzAlO3BhZGRpbmctdG9wOjEwcHh9LiIsZS5pZCwiIC55YXAtdmstYXBwe21hcmdpbi10b3A6OXB4fS4iLGUuaWQsIiAueWFwLXZrLWJsb2NrLWVsZW1lbnQueWFwLXZrLWJsb2NrLWVsZW1lbnQtaW52aXNpYmxlIC55YXAtdmstbmV3LW1haW57b3BhY2l0eToiLGUuc2V0dGluZ3MuZW5hYmxlQW5pbWF0aW9uPzA6MSwiO3RyYW5zaXRpb246LjRzIGVhc2UtaW4tb3V0fS4iLGUuaWQsIiAueWFwLXZrLWJsb2NrLWVsZW1lbnQgLnlhcC12ay1uZXctbWFpbntvcGFjaXR5OjE7dHJhbnNpdGlvbjouNHMgZWFzZS1pbi1vdXR9LiIsZS5pZCwiIC55YXAtdmstbmV3LW1haW57d2lkdGg6MTQ1cHg7Zm9udC1zaXplOjEycHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LW1haW4gKntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0fS4iLGUuaWQsIiAueWFwLXZrLW5ldy1sb2dvLC4iLGUuaWQsIiAueWFwLXZrLW5ldy1sb2dvICp7Y29sb3I6IzkzOTY5OTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9LiIsZS5pZCwiIC55YXAtdmstbmV3LWxvZ297cGFkZGluZzozcHggMCA0cHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LW1haW4gYS55YXAtdmstbmV3LWl0ZW0sLiIsZS5pZCwiIC55YXAtdmstbmV3LW1haW4gYS55YXAtdmstbmV3LWl0ZW06aG92ZXIsLiIsZS5pZCwiIC55YXAtdmstbmV3LW1haW4gYS55YXAtdmstbmV3LWl0ZW06dmlzaXRlZHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTJlNmVkO3BhZGRpbmc6MTVweCAwIDEzcHg7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnR9LiIsZS5pZCwiIC55YXAtdmstbmV3LXBpY3R1cmV7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgMCA3cHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LXBpY3R1cmUtYm9yZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMDQpO3BvaW50ZXItZXZlbnRzOm5vbmV9LiIsZS5pZCwiIC55YXAtdmstbmV3LWltYWdle2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLXJhZGl1czoycHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LXRpdGxle2NvbG9yOiIsZS5zZXR0aW5ncy50aXRsZUNvbG9yLCI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH0uIixlLmlkLCIgLnlhcC12ay1uZXctZG9tYWlue3BhZGRpbmctdG9wOjFweDtjb2xvcjojOTM5Njk5O3dvcmQtd3JhcDpicmVhay13b3JkO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LWJvZHl7cGFkZGluZy10b3A6M3B4O2NvbG9yOiIsZS5zZXR0aW5ncy50ZXh0Q29sb3IsIjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNXB4fS4iLGUuaWQsIiAueWFwLXZrLW5ldy13YXJuaW5ne3BhZGRpbmctdG9wOjNweDtjb2xvcjojOTM5Njk5O2ZvbnQtc2l6ZTouODJlbTtsaW5lLWhlaWdodDoxLjNlbX0uIixlLmlkLCIgLnlhcC12ay1uZXctbWFpbiAueWFwLXZrLW5ldy1hZ2V7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjZweDtyaWdodDo2cHg7cGFkZGluZzowO21hcmdpbjowO3dpZHRoOjI0cHg7aGVpZ2h0OjE1cHg7Ym9yZGVyLXJhZGl1czo0MHB4O2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNyk7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDoxNXB4O2ZvbnQtc2l6ZTo5cHh9LiIsZS5pZCwiIC55YXAtdmstbmV3LWFwcHttYXJnaW4tdG9wOjVweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1e2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1sYXlvdXRfX2lubmVye3BhZGRpbmc6LjRlbSAuOGVtIDEuMmVtO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtbGF5b3V0X190aXRsZXttYXJnaW4tYm90dG9tOi41ZW19LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWxheW91dF9fYm9keXttYXJnaW4tdG9wOjA7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1sYXlvdXRfX3dhcm5pbmd7cGFkZGluZy10b3A6LjZlbTttYXJnaW4tdG9wOjA7b3ZlcmZsb3c6aGlkZGVuO2NsZWFyOmJvdGg7em9vbToxfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1sYXlvdXRfX2FkdHVuZXtyaWdodDozcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWxheW91dF9fYXBwe2Rpc3BsYXk6dGFibGUtY2VsbDttYXJnaW46MDtwYWRkaW5nLXRvcDouNGVtfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1ib2R5LXRleHQsLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWxheW91dF9fYXBwe2ZvbnQtc2l6ZToxMjAlfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1kb21haW57Zm9udC1zaXplOjExMCV9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLXdhcm5pbmd7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZToxMDAlfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC1kb21haW46aG92ZXJ7Y29sb3I6IixlLnNldHRpbmdzLnVybENvbG9yfHwiIzAwMDBDQyIsIn0uIixlLmlkLCIgLnlhcC1sb2dvLWJsb2Nre3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQgLnlhcC1sb2dvLWJsb2Nre2hlaWdodDoxNnB4fS4iLGUuaWQsIiAueWFwLWxvZ28tYmxvY2tfX3RleHR7Zm9udC1mYW1pbHk6QXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6ODclO3BhZGRpbmctcmlnaHQ6NHB4O2xpbmUtaGVpZ2h0OjEuNDtmb250LXdlaWdodDo0MDA7Y29sb3I6IixuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaGVhZGVyQmdDb2xvcnx8ZS5zZXR0aW5ncy5zaXRlQmdDb2xvcnx8IiNmZmZmZmYiKS50b1JlYWRhYmxlKCksIjt0ZXh0LWRlY29yYXRpb246IixlLnNldHRpbmdzLmJvcmRlclR5cGUhPWUuQ29uc3QuQm9yZGVyVHlwZXMuTk9ORXx8ZS5zZXR0aW5ncy5oZWFkZXJCZ0NvbG9yPyJub25lIjoidW5kZXJsaW5lIiwifS4iLGUuaWQsIiAueWFwLWxvZ28tYmxvY2tfX3RleHQgZW17Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS4iLGUuaWQsIiAueWFwLWxvZ28tYmxvY2tfX2Fycm93e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtyaWdodDotOXB4O3RvcDowO3dpZHRoOjlweDtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWltYWdlOiIsZS5zZXR0aW5ncy5oZWFkZXJCZ0NvbG9yPyd1cmwoImRhdGE6aW1hZ2UvZ2lmLEdJRjg5YSVDOCUwMCklMDAlODAlMDElMDAlJytuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaGVhZGVyQmdDb2xvcikudG9IZXhBcnJheSgpLmpvaW4oIiUiKSsiJUZGJUZGJUZGISVGOSUwNCUwMSUwMCUwMCUwMSUwMCUyQyUwMCUwMCUwMCUwMCVDOCUwMCklMDAlMDAlMDIlQUIlODQlOEYlQTklQ0IlRUQlMEYlQTMlOUMlQjQlREElMUIlQjIlREUlQjclRkIlMEYlODYlRTIlRThsZiU0MCVBNiVFQSVDQSVCNiVEMiVBOSVCOSVGMkwlRDclMTQlOUMlRDklRkElQ0UlQ0J4JTBGJTBDJTBBLSVCRiVBMSVGMSU4ODQlQzAlOTIlQ0MlRTZuJUU5JThDSlklQTclQTklRjUlMEElQUFiJUI3JURDJTE3JUE3JTBCJTBFJ0wlRTIlQjIlRjhrTmMlRDElRUElQjY0JUU2JThFJTNCJUUxJUYyJTNBMmclQ0YlMEYlRjElRkF+JTBGJUU1JTE3JUE4JTAzKFhoeGhGJTg4JUI4KCVBMiVDOCVGOCU4OCVFMSUwODklRTlFaSVFOSUyNXklQTklODklNDAlQjclRTklQTklRDQlRjklQjklQzklMjZ6SVYlM0FKJThBJTBBJUE5JUI1SiVEOSVFQSVGQSUwOCUxNSUyQiUwQkslN0JYdCU4QiU5OCVBQiU1QiU4OCU5MyVEOSVBQiVGNyUxQiVFQyUzQkwlMUMlRjglMUJQJTAwJTAwJTNCXCIpIjoibm9uZSIsIjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O21hcmdpbi10b3A6IixlLnV0aWwuYnJvd3Nlci5pc0lFUXVpcmtzPyItMXB4IjoiIiwifS4iLGUuaWQsIiAueWFwLWxvZ28tZmFsbGJhY2t7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWxvZ28tYmxvY2sueWFwLWxvZ28tYmxvY2tfdHlwZV92ZXJ0aWNhbHtkaXNwbGF5OiIsZS51dGlsLmJyb3dzZXIuc3VwcG9ydC5jc3NUcmFuc2Zvcm0/ImJsb2NrIjoibm9uZSIsIjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7bGVmdDowO2JvdHRvbTo2cHg7d2lkdGg6MDtoZWlnaHQ6MH0uIixlLmlkLCIgLnlhcC1sb2dvLWJsb2NrX3R5cGVfdmVydGljYWwgLnlhcC1sb2dvLWJsb2NrX190ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3A7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IHRvcDtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxN3B4O3BhZGRpbmc6MH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDEwMCAueWFwLWxvZ28tYmxvY2tfdHlwZV92ZXJ0aWNhbHtsZWZ0Oi0xcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHgxMDAgLnlhcC1sb2dvLWJsb2NrX3R5cGVfdmVydGljYWwgLnlhcC1sb2dvLWJsb2NrX190ZXh0e2xpbmUtaGVpZ2h0OjE2cHh9LiIsZS5pZCwiIC55YXAtbG9nby1ibG9ja190eXBlX3ZlcnRpY2FsIC55YXAtbG9nby1ibG9ja19fYXJyb3d7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWxvZ28tZmFsbGJhY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtib3R0b206NnB4O2xlZnQ6MDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFvQUFBQkZDQU1BQUFCRTRvYzJBQUFBZUZCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFWeUVpSUFBQUFKM1JTVGxNQUJ5UW9FQU1LWkJJTjM5UnNRUjhacDNvdEZlbFVtNDJBWDAwNnRUTHl4TDFZeks2VWlKOXpielFrQUFBQmEwbEVRVlFvejNXUldaTERJQXhFeFI0YlkvQVc3OWttR2QzL2hnTWlUdVZuK3NOK3BXcXBFUUFBcitDUWVIWGVlMEtPVWFWTTJEWWZnM2ZwbzhsUWVxajZnc3I3N2RFd29tNHdPTXlhc0RKM1UyVkRZZWExSTlKMkNrT3A4MXkxUVRoUmNDZ0N1eExDaEloSG9uRDFtNnBZSFhMdFdvQzNrakQ1QWczek9DMHZOQ1lGbTluTU1UcWlPaVhsTnNRSDlwTFkwYWdzMWx3NVFWMXVBUytTYXEwUVhLZ0lQS2srWTRqOXBMN1d3SzFLcnZNSnZsR2czVWJEZjJSc0V6VmZHN3c0Y2FSVTUrYklHNHVqcUV4RzNzTGNFWFhvNFA2K25Zcm01cE41eFczMkRvalJROVZaNldLa1B2MTRybGlwUEhTNWNQZzg0YkV4UzhybDNZNW1KWks5KzIxN21kUFU5a2tUUVpRNWJhRzBMRlVvUjQwY2s0YVVJaVltZGR5WThPdThQVTVXUTVaMmVCdlNmOS9iM2RVeUdiYUF2N0dOeE1MbktlU05zWCtQN3FmeDFZempzNGhabCtWZUxzdkNvdk1HYkFPU3VDcG0zNXRaM2VMN1JwNklhMmZ6UWo2ZGI1YndCN1ZBR3lwZlFwMVhBQUFBQUVsRlRrU3VRbUNDKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmJvdHRvbTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkIC55YXAtbG9nby1ibG9ja19fdGV4dHtmb250LXNpemU6MTFweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWxvZ28tYmxvY2tfX3RleHR7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWxvZ29fc3RhbXB7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7cmlnaHQ6MDt6LWluZGV4OjM7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6Ljc7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApO3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS4iLGUuaWQsIiAueWFwLWxvZ29fc3RhbXBfX3RleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MS4yZW07Y29sb3I6IixlLnNldHRpbmdzLnRleHRDb2xvcnx8IiMwMDAiLCI7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWxvZ29fc3RhbXBfX3RleHQgZW17Zm9udC1zdHlsZTpub3JtYWx9LiIsZS5pZCwiIC55YXAtbG9nb19zdGFtcDpob3ZlcntvcGFjaXR5OjE7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKX0uIixlLmlkLCIgLnlhcC1sb2dvX3N0YW1wOmhvdmVyIC55YXAtbG9nb19zdGFtcF9fdGV4dHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtbG9nb19zdGFtcHtyaWdodDoxNHB4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1sb2dvX3N0YW1we29wYWNpdHk6MTtwYWRkaW5nOjAgM3B4O2JvdHRvbToiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmU/NTozLCJweDtyaWdodDozcHh9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxvZ29fc3RhbXBfX3RleHR7Zm9udC1zaXplOjExcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy50ZXh0Q29sb3J8fCIjMDAwIikuc2V0QWxwaGEoLjMpLCI7Ym9yZGVyLWJvdHRvbS13aWR0aDoiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmU/MTowLCJweDtib3JkZXItYm90dG9tLXN0eWxlOiIsZS51dGlsLmJyb3dzZXIuaXNTYWZhcmk/Imluc2V0Ijoic29saWQiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWxvZ29fc3RhbXA6aG92ZXIgLnlhcC1sb2dvX3N0YW1wX190ZXh0e3RleHQtZGVjb3JhdGlvbjpub25lfS4iLGUuaWQsIiAueWFwLWN1cnJlbmN5LWxvZ297ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxN3B4O2hlaWdodDoxNnB4O3BhZGRpbmc6MCA2cHg7Zm9udC1mYW1pbHk6QXJpYWwsc2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxNnB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMDAwO3otaW5kZXg6MTtjdXJzb3I6cG9pbnRlcn0uIixlLmlkLCIgLnlhcC1jdXJyZW5jeS1sb2dvX190b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTttYXJnaW4tdG9wOi05cHg7bWFyZ2luLXJpZ2h0OjhweH0uIixlLmlkLCIgLnlhcC1jdXJyZW5jeS1sb2dvOmhvdmVyIC55YXAtY3VycmVuY3ktbG9nb19fdG9vbHRpcHt2aXNpYmlsaXR5OnZpc2libGV9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1ibG9ja3tvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtcGljdHVyZS1ibG9ja19faW1hZ2UsLiIsZS5pZCwiIC55YXAtcGljdHVyZS1ibG9ja19fbGlua3tkaXNwbGF5OmJsb2NrfS4iLGUuaWQsIiAueWFwLXBpY3R1cmUtYmxvY2tfX2xpbmt7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCU7b3BhY2l0eToxO3dpbGwtY2hhbmdlOm9wYWNpdHk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlfS4iLGUuaWQsIiAueWFwLXBpY3R1cmUtYmxvY2tfX2xpbms6aG92ZXJ7b3BhY2l0eTouOH0uIixlLmlkLCIgLnlhcC1mYXZpY29ue3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6IixlLnV0aWwuYnJvd3Nlci5pc0lFUXVpcmtzPyIwIjoiLTAuMmVtIiwiO21hcmdpbi1yaWdodDouM2VtO3dpZHRoOjFlbTtoZWlnaHQ6MWVtO21pbi13aWR0aDo4cHg7bWF4LXdpZHRoOjE2cHg7bWluLWhlaWdodDo4cHg7bWF4LWhlaWdodDoxNnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uIixlLmlkLCIgLnlhcC10aXRsZS1ibG9ja3tkaXNwbGF5OmlubGluZX0uIixlLmlkLCIgLnlhcC10aXRsZS1ibG9ja19oeXBoZW5ze292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstd2Via2l0LWh5cGhlbnM6YXV0bzstbXMtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0b30uIixlLmlkLCIgLnlhcC10aXRsZS1ibG9ja19fdGV4dHtjb2xvcjoiLGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiLCJ9LiIsZS5pZCwiIC55YXAtdGl0bGUtYmxvY2tfX3RleHQgLnlhcC10aXRsZS1ibG9ja19fdGV4dF9pbm5lcntib3JkZXItYm90dG9tLWNvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLnRpdGxlQ29sb3J8fCIjMDAwMENDIikuc2V0QWxwaGEoLjQpLCI7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmUmJmUudXRpbC5icm93c2VyLmlzUXVpcmtzPyJub25lIjplLnV0aWwuYnJvd3Nlci5pc1NhZmFyaT8iaW5zZXQiOiJzb2xpZCIsIjtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8xOjAsInB4O2ZvbnQtd2VpZ2h0OiIsMT09ZS5zZXR0aW5ncy50aXRsZUZvbnRTaXplPyJib2xkIjoibm9ybWFsIiwiO2Rpc3BsYXk6aW5saW5lfS4iLGUuaWQsIiAueWFwLXRpdGxlLWJsb2NrX190ZXh0IGJ7Y29sb3I6IixlLnNldHRpbmdzLnRpdGxlQ29sb3J8fCIjMDAwMENDIiwiO3RleHQtZGVjb3JhdGlvbjoiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmUmJmUudXRpbC5icm93c2VyLmlzUXVpcmtzPyJ1bmRlcmxpbmUiOiJub25lIiwiO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC10aXRsZS1ibG9ja19fdGV4dDpob3ZlciAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVyLC4iLGUuaWQsIiAueWFwLXRpdGxlLWJsb2NrX190ZXh0OmhvdmVyIGJ7Y29sb3I6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwiO2JvcmRlci1ib3R0b20tY29sb3I6IixuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiKS5zZXRBbHBoYSguNCksIn0uIixlLmlkLCIgLnlhcC10aXRsZS1ibG9ja19fdGV4dHtkaXNwbGF5OmlubGluZTtsaW5lLWhlaWdodDoxLjE7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9IyIsZS5pZCwiIC55YXAtdGl0bGUtYmxvY2tfX3RleHR7Zm9udC1zaXplOiIsZS5zZXR0aW5ncy50aXRsZUZvbnRTaXplUGVyY2VudHx8IiIsIn0jIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQgLnlhcC10aXRsZS1ibG9ja19fdGV4dHtmb250LXNpemU6IixlLmlzWWFuZGV4UGFnZSYmMz09ZS5zZXR0aW5ncy50aXRsZUZvbnRTaXplPyIxN3B4IjoiIiwifSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLW1lZGl1bSAueWFwLXRpdGxlLWJsb2NrX190ZXh0e2ZvbnQtc2l6ZToxNnB4fSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLXNtYWxsIC55YXAtdGl0bGUtYmxvY2tfX3RleHR7Zm9udC1zaXplOjEzcHh9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtc21hbGwgLnlhcC10aXRsZS1ibG9ja19fdGV4dCAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVyLCMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19hZGFwdGl2ZS55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtc21hbGwgLnlhcC10aXRsZS1ibG9ja19fdGV4dCAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVye2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgIyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MF9hZGFwdGl2ZSAueWFwLWxheW91dF9fdGl0bGV7bWFyZ2luLWJvdHRvbTozcHh9LiIsZS5pZCwiICMiLGUuaWQsIiAueWFwLWxheW91dF9oaWRlX3RpdGxlX3NlY29uZCAueWFwLWxheW91dF9fdGl0bGUgLnlhcC1hZHZfX3RpdGxlX3NlY29uZHtkaXNwbGF5Om5vbmV9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLXRpdGxlLWJsb2NrX190ZXh0e2ZvbnQtc2l6ZToxNTAlfSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tYWlscnUgLnlhcC10aXRsZS1ibG9ja19fdGV4dCAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpub25lfSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4NTAueWFwLWxheW91dF9ibG9ja19maXhlZC1zbWFsbCAueWFwLXRpdGxlLWJsb2NrX190ZXh0e2xpbmUtaGVpZ2h0OjExcHh9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAgLnlhcC10aXRsZS1ibG9ja19fdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTAwJTtsaW5lLWhlaWdodDppbmhlcml0fSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC10aXRsZS1ibG9ja19fdGV4dCAueWFwLXRpdGxlLWJsb2NrX190ZXh0X2lubmVye2ZvbnQtc2l6ZToyNnB4O2xpbmUtaGVpZ2h0OjEuMTt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tLWNvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLnRpdGxlQ29sb3J8fCIjMDAwMENDIikuc2V0QWxwaGEoLjMpLCI7Ym9yZGVyLWJvdHRvbS13aWR0aDoiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmU/MTowLCJweDtib3JkZXItYm90dG9tLXN0eWxlOiIsZS51dGlsLmJyb3dzZXIuaXNTYWZhcmk/Imluc2V0Ijoic29saWQiLCJ9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLXRpdGxlLWJsb2NrX190ZXh0IGJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLXRpdGxlLWJsb2NrX190ZXh0OmhvdmVyIC55YXAtdGl0bGUtYmxvY2tfX3RleHRfaW5uZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIpLnNldEFscGhhKC4zKSwifSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtdGl0bGUtYmxvY2tfX3RleHQgLnlhcC10aXRsZS1ibG9ja19fdGV4dF9pbm5lciwjIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLXRpdGxlLWJsb2NrX190ZXh0IGIsIyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLXRpdGxlLWJsb2NrX190ZXh0IC55YXAtdGl0bGUtYmxvY2tfX3RleHRfaW5uZXIsIyIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLXRpdGxlLWJsb2NrX190ZXh0IGJ7Zm9udC13ZWlnaHQ6NzAwfSMiLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMjB4MTAwIC55YXAtbGF5b3V0X190aXRsZXttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWJvdHRvbTozcHg7ZGlzcGxheTpibG9ja30uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDEwMCAueWFwLXRpdGxlLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6MTBweH0uIixlLmlkLCIgLnlhcC1ib2R5LXRleHQsLiIsZS5pZCwiIC55YXAtYm9keS10ZXh0IGJ7ZGlzcGxheTppbmxpbmU7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjoiLGUuc2V0dGluZ3MudGV4dENvbG9yfHwiIzAwMCIsIn0uIixlLmlkLCIgLnlhcC1ib2R5LXRleHRfaHlwaGVuc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LXdlYmtpdC1oeXBoZW5zOmF1dG87LW1zLWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG99LiIsZS5pZCwiIC55YXAtYm9keS10ZXh0IGJ7Zm9udC13ZWlnaHQ6NzAwfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtYm9keS10ZXh0e2xpbmUtaGVpZ2h0OjEuMX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDUwLnlhcC1sYXlvdXRfYmxvY2tfZml4ZWQtc21hbGwgLnlhcC1ib2R5LXRleHR7bGluZS1oZWlnaHQ6MTFweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDEwMC55YXAtbGF5b3V0X2Jsb2NrX2ZpeGVkLXNtYWxsIC55YXAtYm9keS10ZXh0e2ZvbnQtc2l6ZToiLGUudXRpbC5icm93c2VyLmlzUXVpcmtzPyI5cHgiOiIxMDAlIiwifS4iLGUuaWQsIiAucHJpY2V7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjcwMDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9ja30uIixlLmlkLCIgLnlhcC1jb250YWN0c19faXRlbXtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtwYWRkaW5nLXJpZ2h0OjFlbTtmb250LXNpemU6MTAwJTtsaW5lLWhlaWdodDoxLjF9LiIsZS5pZCwiIC55YXAtY29udGFjdHNfX2l0ZW06bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjB9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2hpZGVfY29udGFjdHMgLnlhcC1jb250YWN0c19faXRlbXtkaXNwbGF5Om5vbmV9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2hpZGVfY29udGFjdHMgLnlhcC1jb250YWN0c19faXRlbV9kb21haW57ZGlzcGxheTppbmxpbmUtYmxvY2t9IyIsZS5pZCwiIC55YXAtbGF5b3V0X2hpZGVfZG9tYWluIC55YXAtY29udGFjdHNfX2l0ZW1fZG9tYWlue2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1jb250YWN0c19fcGhvbmV7d2hpdGUtc3BhY2U6bm93cmFwfS4iLGUuaWQsIiAueWFwLWNvbnRhY3RzX19pdGVtLWxpbmssLiIsZS5pZCwiIC55YXAtY29udGFjdHNfX2l0ZW0tdGV4dHtkaXNwbGF5OmlubGluZTt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjoiLGUuc2V0dGluZ3MudXJsQ29sb3J8fCIjMDAwMENDIiwifS4iLGUuaWQsIiAueWFwLWNvbnRhY3RzX19pdGVtLWxpbms6aG92ZXJ7Y29sb3I6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwiO2JvcmRlci1ib3R0b20tY29sb3I6IixuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiKS5zZXRBbHBoYSguNCksIjtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8xOjAsInB4fS4iLGUuaWQsIiAueWFwLWNvbnRhY3RzX19pbmZvLWljb257bWFyZ2luOjA7Ym9yZGVyOjFweCBzb2xpZDtwYWRkaW5nOjFweDt3aWR0aDoxZW07bGluZS1oZWlnaHQ6MS4yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3MCU7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiIsZS51dGlsLndhcm5pbmcuZ2V0Qm9yZGVyQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHwiI0ZGRiIsZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiLC4xKSwiO2JvcmRlci1jb2xvcjoiLGUudXRpbC53YXJuaW5nLmdldEJvcmRlckNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiLGUuc2V0dGluZ3MudXJsQ29sb3J8fCIjMDAwMENDIiwuNyksIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfcG9zdGVyIC55YXAtY29udGFjdHNfX2RvbWFpbntkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWNvbnRhY3RzX19pdGVtLWxpbmssLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWNvbnRhY3RzX19pdGVtLXRleHR7Zm9udC1zaXplOjExMCV9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWNvbnRhY3RzX19pdGVtLWxpbms6aG92ZXJ7Y29sb3I6IixlLnNldHRpbmdzLnVybENvbG9yfHwiIzAwMDBDQyIsIjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JvcmRlci1ib3R0b206bm9uZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWNvbnRhY3Rze21hcmdpbi10b3A6N3B4fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwIC55YXAtY29udGFjdHNfX2l0ZW17bWFyZ2luLWJvdHRvbTozcHg7bGluZS1oZWlnaHQ6MS4zO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzAweDI1MCAueWFwLWNvbnRhY3RzX19pdGVtX2RvbWFpbntkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47d29yZC13cmFwOmJyZWFrLXdvcmR9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMwMHgyNTAgLnlhcC1pdGVtLWhhcy1waWN0dXJlIC55YXAtY29udGFjdHNfX2l0ZW17cGFkZGluZy1yaWdodDowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3dvcmQtd3JhcDpicmVhay13b3JkfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja18zMDB4MjUwLnlhcC1sYXlvdXRfaGlkZV9kb21haW4ueWFwLWxheW91dF9oaWRlX2NvbnRhY3RzIC55YXAtY29udGFjdHN7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1jb250YWN0c3ttYXJnaW4tdG9wOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8iOHB4IjoiMTBweCIsIjtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmU/IjEuNCI6IjEiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWNvbnRhY3RzX19pdGVte3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlLnlhcC1sYXlvdXRfaGlkZV9kb21haW4ueWFwLWxheW91dF9oaWRlX2NvbnRhY3RzIC55YXAtY29udGFjdHN7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1jb250YWN0c19faXRlbS10ZXh0e2NvbG9yOiIsZS5zZXR0aW5ncy50ZXh0Q29sb3I/ZS5zZXR0aW5ncy50ZXh0Q29sb3I6IiMwMDAiLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWNvbnRhY3RzX19pdGVtLWxpbmssLiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21vYmlsZSAueWFwLWNvbnRhY3RzX19pdGVtLWxpbms6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiKS5zZXRBbHBoYSguMyksIjtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8xOjAsInB4O2JvcmRlci1ib3R0b20tc3R5bGU6IixlLnV0aWwuYnJvd3Nlci5pc1NhZmFyaT8iaW5zZXQiOiJzb2xpZCIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtY29udGFjdHNfX2l0ZW0tbGluazpob3Zlcntib3JkZXItYm90dG9tLWNvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikuc2V0QWxwaGEoLjMpLCJ9LiIsZS5pZCwiIC55YXAtYWRkcmVzc3tmbG9hdDpsZWZ0O3dpZHRoOiIsZS51dGlsLmJyb3dzZXIuaXNGaXJlZm94PyIxMDAlIjoiYXV0byIsIjttYXgtd2lkdGg6MTAwJX0uIixlLmlkLCIgLnlhcC1hZGRyZXNzX190ZXh0e292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1hZGRyZXNzX190ZXh0LXdyYXB7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiIsZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiLCI7bGluZS1oZWlnaHQ6MTZweH0uIixlLmlkLCIgLnlhcC1hZGRyZXNzX190ZXh0LXdyYXA6aG92ZXJ7Y29sb3I6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwifS4iLGUuaWQsIiAueWFwLWFkZHJlc3NfX2dlb3tmbG9hdDpyaWdodDt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmc6MCAxcHggMCAxZW19LiIsZS5pZCwiIC55YXAtYWRkcmVzc19fZ2VvIC55YXAtY29udGFjdHNfX2l0ZW0tdGV4dHttYXJnaW4tcmlnaHQ6LjRlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9jb21wYXRpYmxlIC55YXAtYWRkcmVzc19fZ2VvLC4iLGUuaWQsIiAueWFwLWxheW91dF90eXBlX21lZGl1bSAueWFwLWFkZHJlc3NfX2dlbywuIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9uYXJyb3cgLnlhcC1hZGRyZXNzX19nZW97ZmxvYXQ6bm9uZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpsZWZ0fS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19maXhlZC55YXAtbGF5b3V0X3R5cGVfd2lkZSAueWFwLWFkZHJlc3NfX2dlb3twYWRkaW5nLXJpZ2h0OjVweH0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtYWRkcmVzc3tmbG9hdDpub25lfS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1hZGRyZXNzX19nZW97ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MDtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjoiLGUuc2V0dGluZ3MudGV4dENvbG9yfHwiIzAwMCIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtY29udGFjdHNfX2luZm8taWNvbntjb2xvcjoiLGUudXRpbC53YXJuaW5nLmdldEJvcmRlckNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiLGUuc2V0dGluZ3MudGV4dENvbG9yfHwiIzAwMCIsLjEpLCI7Ym9yZGVyLWNvbG9yOiIsZS51dGlsLndhcm5pbmcuZ2V0Qm9yZGVyQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHwiI0ZGRiIsZS5zZXR0aW5ncy50ZXh0Q29sb3J8fCIjMDAwIiwuNyksIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZS1nZW8gLnlhcC1hZGRyZXNzX19nZW97ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czozcHg7b3V0bGluZTowO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MS45ZW07YmFja2dyb3VuZDoiLGUudXRpbC53YXJuaW5nLmdldEJvcmRlckNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHwiI0ZGRiIpLnRvUmVhZGFibGUoKSwuOCksIjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9LiIsZS5pZCwiIC55YXAtYnV0dG9uX21vYmlsZXtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjEuN2VtO2xpbmUtaGVpZ2h0OjEuN2VtfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl9tb2JpbGUueWFwLWJ1dHRvbl9pY29uX3RydWV7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjJlbTtoZWlnaHQ6MmVtO2xpbmUtaGVpZ2h0OjJlbX0uIixlLmlkLCcgLnlhcC1idXR0b246YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7cmlnaHQ6MXB4O2JvdHRvbToxcHg7bGVmdDoxcHg7Y29udGVudDoiIjtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kOicsZS5zZXR0aW5ncy5iZ0NvbG9yfHwiI0ZGRiIsIn0uIixlLmlkLCIgLnlhcC1idXR0b246aG92ZXJ7YmFja2dyb3VuZDoiLGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiLCJ9LiIsZS5pZCwiIC55YXAtYnV0dG9uOmhvdmVyOmJlZm9yZXtiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fbW9iaWxlLnlhcC1idXR0b25faWNvbl90cnVlOmhvdmVye2JhY2tncm91bmQ6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwifS4iLGUuaWQsIiAueWFwLWJ1dHRvbi55YXAtYnV0dG9uX2ljb25fdHJ1ZTpob3ZlcjpiZWZvcmV7YmFja2dyb3VuZDoiLGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiLCJ9LiIsZS5pZCwiIC55YXAtYnV0dG9uX190ZXh0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowIDFlbTtkaXNwbGF5OmlubGluZS1ibG9jazt6b29tOjE7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fCIjRkZGIikudG9SZWFkYWJsZSgpLCJ9LiIsZS5pZCwiIC55YXAtYnV0dG9uOmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e2NvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikudG9SZWFkYWJsZSgpLCI7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LiIsZS5pZCwiIC55YXAtYnV0dG9uX21vYmlsZS55YXAtYnV0dG9uX2ljb25fdHJ1ZSAueWFwLWJ1dHRvbl9fdGV4dHttYXJnaW4tbGVmdDouM2VtO21hcmdpbi1yaWdodDoxZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX190ZXh0X2V4dHJhLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl9tb2JpbGUueWFwLWJ1dHRvbl9pY29uX3RydWUgLnlhcC1idXR0b25fX3RleHRfZXh0cmF7bWFyZ2luOjB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX21vYmlsZSAueWFwLWJ1dHRvbl9faWNvbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7cGFkZGluZzoycHg7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWJ1dHRvbl9tb2JpbGUgLnlhcC1idXR0b25fX2ljb24taW1hZ2V7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJX0uIixlLmlkLCIgLnlhcC1idXR0b25fc2l6ZV9ze2ZvbnQtc2l6ZToxLjFlbX0uIixlLmlkLCIgLnlhcC1idXR0b25fc2l6ZV9te2ZvbnQtc2l6ZToxLjJlbX0uIixlLmlkLCIgLnlhcC1idXR0b25fc3R5bGVfYW5kcm9pZCwuIixlLmlkLCIgLnlhcC1idXR0b25fc3R5bGVfYW5kcm9pZDpob3ZlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6YXV0bzttYXJnaW4tdG9wOi0uNGVtO3BhZGRpbmc6LjhlbSAxLjJlbSAuNzVlbTtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzY4OWYzODt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MXB4O2ZvbnQ6bm9ybWFsIC45ZW0vMSBUYWhvbWEsc2Fucy1zZXJpZjt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItcmFkaXVzOjNweH0uIixlLmlkLCIgLnlhcC1idXR0b25fc3R5bGVfYW5kcm9pZDpiZWZvcmV7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl9zdHlsZV9hbmRyb2lkIC55YXAtYnV0dG9uX190ZXh0e2Rpc3BsYXk6aW5saW5lO21hcmdpbjowO2NvbG9yOiNmZmZ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X19hcHBfc3R5bGVfaW9zIC55YXAtbW9iaWxlLWFwcHtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1idXR0b25fc3R5bGVfaW9zLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl9zdHlsZV9pb3M6aG92ZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDotLjVlbTtwYWRkaW5nOi41ZW0gLjllbSAuM2VtO2JvcmRlcjoxcHggc29saWQgIzAwODBmYztjb2xvcjojZmZmO2JhY2tncm91bmQ6IzAwODBmYztmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MXB4fS4iLGUuaWQsIiAueWFwLWJ1dHRvbi55YXAtYnV0dG9uX3N0eWxlX2lvczpiZWZvcmV7ZGlzcGxheTpub25lfS4iLGUuaWQsJyAueWFwLWJ1dHRvbl9zdHlsZV9pb3M6YWZ0ZXJ7Y29udGVudDoiKyI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHg7dG9wOi0uNWVtO2ZvbnQtc2l6ZToxMnB4fS4nLGUuaWQsIiAueWFwLWJ1dHRvbl9zdHlsZV9pb3MgLnlhcC1idXR0b25fX3RleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2ZmZn0uIixlLmlkLCIgLnlhcC1idXR0b25fc3R5bGVfaW9zIC55YXAtYnV0dG9uX190ZXh0X2V4dHJhe21hcmdpbjowfS4iLGUuaWQsIiAueWFwLWRvbWFpbntkaXNwbGF5OmlubGluZTtjb2xvcjoiLGUuc2V0dGluZ3MudXJsQ29sb3J8fCIjMDAwMENDIiwifS4iLGUuaWQsIiAueWFwLWRvbWFpbl9fdGV4dHtkaXNwbGF5OmlubGluZTt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20td2lkdGg6IixlLnNldHRpbmdzLmxpbmtzVW5kZXJsaW5lPzE6MCwicHg7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUudXRpbC5icm93c2VyLmlzU2FmYXJpPyJpbnNldCI6InNvbGlkIiwiO2xpbmUtaGVpZ2h0OjEuM30uIixlLmlkLCIgLnlhcC1kb21haW5fX3RleHQ6aG92ZXJ7Y29sb3I6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwiO2JvcmRlci1ib3R0b20tY29sb3I6IixuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiKS5zZXRBbHBoYSguNCksIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtZG9tYWluX190ZXh0LC4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1kb21haW5fX3RleHQ6aG92ZXJ7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUudXRpbC5icm93c2VyLmlzU2FmYXJpPyJpbnNldCI6InNvbGlkIiwifS4iLGUuaWQsIiAueWFwLWxheW91dF9ibG9ja19tb2JpbGUgLnlhcC1kb21haW5fX3RleHR7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiKS5zZXRBbHBoYSguMyksIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbW9iaWxlIC55YXAtZG9tYWluX190ZXh0OmhvdmVye2JvcmRlci1ib3R0b20tY29sb3I6IixuZXcgZS51dGlsLkNvbG9yKGUuc2V0dGluZ3MuaG92ZXJDb2xvcnx8IiMwMDg4Q0MiKS5zZXRBbHBoYSguMyksIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfbWFpbHJ1IC55YXAtZG9tYWluX190ZXh0OmhvdmVye2NvbG9yOiIsZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiLCI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtib3JkZXItYm90dG9tOm5vbmV9LiIsZS5pZCwiIC55YXAtYWdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6NzAlO2JvcmRlcjoxcHggc29saWQgI2RkZGNkYTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOi4xZW0gLjJlbSAuMDVlbTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDoxLjQ7Ym9yZGVyLWNvbG9yOiIsZS51dGlsLndhcm5pbmcuZ2V0Qm9yZGVyQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHxlLnNldHRpbmdzLnNpdGVCZ0NvbG9yfHwiI0ZGRkZGRiIsZS5zZXR0aW5ncy50ZXh0Q29sb3IpLCI7YmFja2dyb3VuZC1jb2xvcjoiLGUudXRpbC53YXJuaW5nLmdldEJnQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHxlLnNldHRpbmdzLnNpdGVCZ0NvbG9yfHwiI0ZGRkZGRiIpLCJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrXzMyMHg1MCAueWFwLWFnZSwuIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDEwMCAueWFwLWFnZXtsaW5lLWhlaWdodDoxLjJ9LiIsZS5pZCwiIC55YXAtbGF5b3V0X2Jsb2NrX21haWxydSAueWFwLWFnZXttYXJnaW46MDtwYWRkaW5nOjAgLjJlbTtsaW5lLWhlaWdodDoxLjQ7Zm9udC1zaXplOjEwNSU7Ym9yZGVyLXJhZGl1czowfS4iLGUuaWQsIiAueWFwLXNpdGVsaW5rc19fbGlua3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjFlbTtmb250LXdlaWdodDo0MDB9LiIsZS5pZCwiIC55YXAtc2l0ZWxpbmtzX19saW5rIC55YXAtc2l0ZWxpbmtzX19pbm5lcntjb2xvcjoiLGUuc2V0dGluZ3Muc2l0ZWxpbmtzQ29sb3J8fGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiLCI7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWwuQ29sb3IoZS5zZXR0aW5ncy5zaXRlbGlua3NDb2xvcnx8ZS5zZXR0aW5ncy50aXRsZUNvbG9yfHwiIzAwMDBDQyIpLnNldEFscGhhKC40KSwiO2JvcmRlci1ib3R0b20td2lkdGg6IixlLnNldHRpbmdzLmxpbmtzVW5kZXJsaW5lPzE6MCwicHg7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUuc2V0dGluZ3MubGlua3NVbmRlcmxpbmUmJmUudXRpbC5icm93c2VyLmlzUXVpcmtzPyJub25lIjplLnV0aWwuYnJvd3Nlci5pc1NhZmFyaT8iaW5zZXQiOiJzb2xpZCIsIjtkaXNwbGF5OmlubGluZX0uIixlLmlkLCIgLnlhcC1zaXRlbGlua3NfX2xpbms6aG92ZXIgLnlhcC1zaXRlbGlua3NfX2lubmVye2NvbG9yOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIjtib3JkZXItYm90dG9tLWNvbG9yOiIsbmV3IGUudXRpbC5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikuc2V0QWxwaGEoLjQpLCJ9LiIsZS5pZCwiIC55YXAtc2l0ZWxpbmtzX19saW5rOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LiIsZS5pZCwiIC55YXAtbW9iaWxlLWFwcF9pbmxpbmV7ZGlzcGxheTppbmxpbmU7bWFyZ2luLWxlZnQ6LjhlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfYmxvY2tfMzIweDUwIC55YXAtbW9iaWxlLWFwcF9pbmxpbmV7bWFyZ2luLWxlZnQ6MH0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX2lubGluZS55YXAtbW9iaWxlLWFwcF9pbnZpc2libGV7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLW1vYmlsZS1hcHBfX2J1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LjhlbX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfdHlwZV9uYXJyb3cgLnlhcC1tb2JpbGUtYXBwX19idXR0b24sLiIsZS5pZCwiIC55YXAtdmstbWFpbiAueWFwLW1vYmlsZS1hcHBfX2J1dHRvbnttYXJnaW4tcmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX19saW5re2NvbG9yOiIsZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiLCI7dGV4dC1kZWNvcmF0aW9uOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8idW5kZXJsaW5lIjoibm9uZSIsIn0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX19saW5rOmhvdmVye2NvbG9yOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1sYXlvdXRfaGlkZV9yYXRpbmcgLnlhcC1tb2JpbGUtYXBwX19yYXRpbmd7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLW1vYmlsZS1hcHBfX3JhdGluZ3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7Y3Vyc29yOmhlbHB9LiIsZS5pZCwiIC55YXAtbW9iaWxlLWFwcF9fcmF0aW5nX3dpZHRoX2Z1bGx7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjFweH0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX19yYXRpbmdfY29udGVudF9jZW50ZXJlZHt0ZXh0LWFsaWduOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX19yYXRpbmctdm90ZXN7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjouMmVtIDAgMCAuNWVtO2ZvbnQtc2l6ZTouOGVtO2NvbG9yOiIsZS50ZXh0Q29sb3J8fGUuc2V0dGluZ3MudGV4dENvbG9yfHwiIzAwMCIsIjtvcGFjaXR5Oi44fS4iLGUuaWQsIiAueWFwLW1vYmlsZS1hcHBfX3JhdGluZyAueWFwLW1vYmlsZS1hcHBfX3JhdGluZy1zdGFyc3tvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW07d2lkdGg6NWVtO3doaXRlLXNwYWNlOm5vd3JhcH0uIixlLmlkLCIgLnlhcC1tb2JpbGUtYXBwX19yYXRpbmctc3RhcnMtc2NhbGVfZmlsbGVke3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtbW9iaWxlLWFwcF9fcmF0aW5nIC55YXAtbW9iaWxlLWFwcF9fcmF0aW5nLXN0YXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO2ZpbGw6IixlLnRleHRDb2xvcnx8ZS5zZXR0aW5ncy50ZXh0Q29sb3J8fCIjMDAwIiwiO29wYWNpdHk6LjR9LiIsZS5pZCwiIC55YXAtbW9iaWxlLWFwcF9fcmF0aW5nLXN0YXJzLXNjYWxlX2ZpbGxlZCAueWFwLW1vYmlsZS1hcHBfX3JhdGluZy1zdGFye29wYWNpdHk6MTtmaWxsOiIsZS5zdGFyQ29sb3J8fCIjZmMwIiwifS4iLGUuaWQsIiAueWFwLW1vYmlsZS1hcHBfX3JhdGluZy1zdGFyIC55YXAtbW9iaWxlLWFwcF9fc3Rhci1zdmd7ZGlzcGxheTpibG9jaztoZWlnaHQ6MWVtO3dpZHRoOjFlbX0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49LzxcLz9bYS16XVtcc1xTXSo+fCYoI1xkK3xcdyspOy9pO3QuaXNIVE1MU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBuLnRlc3QoZSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LkV2ZW50cz12b2lkIDA7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJih0W2ldPWVbaV0pO3JldHVybiB0WyJkZWZhdWx0Il09ZSx0fShpKDY0KSk7dmFyIHI9dC5FdmVudHM9e29uOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gbCh0aGlzLCJvbiIsZSxbdCxpXSkmJnQ/KHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksKHRoaXMuX2V2ZW50c1tlXXx8KHRoaXMuX2V2ZW50c1tlXT1bXSkpLnB1c2goe2NhbGxiYWNrOnQsY29udGV4dDppLGN0eDppfHx0aGlzfSksdGhpcyk6dGhpc30sb25jZTpmdW5jdGlvbihlLHQsaSl7aWYoIWwodGhpcywib25jZSIsZSxbdCxpXSl8fCF0KXJldHVybiB0aGlzO3ZhciBuPXRoaXMscj1vLm9uY2UoZnVuY3Rpb24oKXtuLm9mZihlLHIpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7cmV0dXJuIHIuX2NhbGxiYWNrPXQsdGhpcy5vbihlLHIsaSl9LG9mZjpmdW5jdGlvbihlLHQsaSl7dmFyIG4scixhLHMsYyx1LGQscDtpZighdGhpcy5fZXZlbnRzfHwhbCh0aGlzLCJvZmYiLGUsW3QsaV0pKXJldHVybiB0aGlzO2lmKCFlJiYhdCYmIWkpcmV0dXJuIHRoaXMuX2V2ZW50cz17fSx0aGlzO2ZvcihjPTAsdT0ocz1lP1tlXTpvLmtleXModGhpcy5fZXZlbnRzKSkubGVuZ3RoO2M8dTtjKyspaWYoZT1zW2NdLGE9dGhpcy5fZXZlbnRzW2VdKXtpZih0aGlzLl9ldmVudHNbZV09bj1bXSx0fHxpKWZvcihkPTAscD1hLmxlbmd0aDtkPHA7ZCsrKXI9YVtkXSwodCYmdCE9PXIuY2FsbGJhY2smJnQhPT1yLmNhbGxiYWNrLl9jYWxsYmFja3x8aSYmaSE9PXIuY29udGV4dCkmJm4ucHVzaChyKTtuLmxlbmd0aHx8ZGVsZXRlIHRoaXMuX2V2ZW50c1tlXX1yZXR1cm4gdGhpc30sdHJpZ2dlcjpmdW5jdGlvbihlKXtpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO3ZhciB0PWEuY2FsbChhcmd1bWVudHMsMSk7aWYoIWwodGhpcywidHJpZ2dlciIsZSx0KSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9ldmVudHNbZV0sbj10aGlzLl9ldmVudHMuYWxsO3JldHVybiBpJiZjKGksdCksbiYmYyhuLGFyZ3VtZW50cyksdGhpc30sc3RvcExpc3RlbmluZzpmdW5jdGlvbihlLHQsaSl7dmFyIG89dGhpcy5fbGlzdGVuZXJzO2lmKCFvKXJldHVybiB0aGlzO3ZhciByPSF0JiYhaTtmb3IodmFyIGEgaW4ib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOm4odCkpJiYoaT10aGlzKSxlJiYoKG89e30pW2UuX2xpc3RlbmVySWRdPWUpLG8pb1thXS5vZmYodCxpLHRoaXMpLHImJmRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbYV07cmV0dXJuIHRoaXN9fSxhPUFycmF5LnByb3RvdHlwZS5zbGljZSxzPS9ccysvLGw9ZnVuY3Rpb24oZSx0LGksbyl7aWYoIWkpcmV0dXJuITA7aWYoIm9iamVjdCI9PT0odm9pZCAwPT09aT8idW5kZWZpbmVkIjpuKGkpKSl7Zm9yKHZhciByIGluIGkpZVt0XS5hcHBseShlLFtyLGlbcl1dLmNvbmNhdChvKSk7cmV0dXJuITF9aWYocy50ZXN0KGkpKXtmb3IodmFyIGE9aS5zcGxpdChzKSxsPTAsYz1hLmxlbmd0aDtsPGM7bCsrKWVbdF0uYXBwbHkoZSxbYVtsXV0uY29uY2F0KG8pKTtyZXR1cm4hMX1yZXR1cm4hMH0sYz1mdW5jdGlvbihlLHQpe3ZhciBpLG49LTEsbz1lLmxlbmd0aCxyPXRbMF0sYT10WzFdLHM9dFsyXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpmb3IoOysrbjxvOykoaT1lW25dKS5jYWxsYmFjay5jYWxsKGkuY3R4KTtyZXR1cm47Y2FzZSAxOmZvcig7KytuPG87KShpPWVbbl0pLmNhbGxiYWNrLmNhbGwoaS5jdHgscik7cmV0dXJuO2Nhc2UgMjpmb3IoOysrbjxvOykoaT1lW25dKS5jYWxsYmFjay5jYWxsKGkuY3R4LHIsYSk7cmV0dXJuO2Nhc2UgMzpmb3IoOysrbjxvOykoaT1lW25dKS5jYWxsYmFjay5jYWxsKGkuY3R4LHIsYSxzKTtyZXR1cm47ZGVmYXVsdDpmb3IoOysrbjxvOykoaT1lW25dKS5jYWxsYmFjay5hcHBseShpLmN0eCx0KX19O28uZm9yT3duKHtsaXN0ZW5Ubzoib24iLGxpc3RlblRvT25jZToib25jZSJ9LGZ1bmN0aW9uKGUsdCl7clt0XT1mdW5jdGlvbih0LGkscil7cmV0dXJuKHRoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz17fSkpW3QuX2xpc3RlbmVySWR8fCh0Ll9saXN0ZW5lcklkPW8uZ2VuUm5kKCJsIikpXT10LCJvYmplY3QiPT09KHZvaWQgMD09PWk/InVuZGVmaW5lZCI6bihpKSkmJihyPXRoaXMpLHRbZV0oaSxyLHRoaXMpLHRoaXN9fSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaWdub3JlSG9zdHM9Wy9tYWlsXC5ydS9pLC9kZXZtYWlsXC5ydS9pXX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuZXhwZXJpbWVudHM9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5leHBlcmltZW50cy5wdXNoKG5ldyhpKDQ5NCkuRXhwZXJpbWVudCkoZVt0XSkpfXJldHVybiBlLnByb3RvdHlwZS5pc0N1cnJlbnRWZXJzaW9uPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5leHBlcmltZW50cy5sZW5ndGg7dCsrKWlmKHRoaXMuZXhwZXJpbWVudHNbdF0uZ2V0SWQoKT09PWUpcmV0dXJuITA7cmV0dXJuITF9LGV9KCk7dC5Mb25nRXhwZXJpbWVudD1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb2luPXRoaXMuZmxpcENvaW4oKSx0aGlzLnZlcnNpb25zPWkoNDApLnByZXBhcmUoZSksdGhpcy5kZWZhdWx0VmVyc2lvbj1pKDQwKS5maW5kRGVmYXVsdChlKX1yZXR1cm4gZS5wcm90b3R5cGUuZmxpcENvaW49ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKX0sZS5wcm90b3R5cGUuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoImlkIil9LGUucHJvdG90eXBlLmdldEV4dHJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJleHRyYSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RXh0cmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0VmVyc2lvbiYmdGhpcy5kZWZhdWx0VmVyc2lvbi5leHRyYT90aGlzLmRlZmF1bHRWZXJzaW9uLmV4dHJhOm51bGx9LGUucHJvdG90eXBlLmdldERlZmF1bHRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRWZXJzaW9uJiZ0aGlzLmRlZmF1bHRWZXJzaW9uLmlkP3RoaXMuZGVmYXVsdFZlcnNpb24uaWQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2hvb3NlKCk7cmV0dXJuIHQmJnQuaGFzT3duUHJvcGVydHkoZSk/dFtlXTpudWxsfSxlLnByb3RvdHlwZS5jaG9vc2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bnVsbCx0PTA7dDx0aGlzLnZlcnNpb25zLmxlbmd0aDt0KyspaWYodGhpcy5jb2luPHRoaXMudmVyc2lvbnNbdF0udGhyZXNob2xkKXtlPXRoaXMudmVyc2lvbnNbdF07YnJlYWt9cmV0dXJuIGV9LGV9KCk7dC5FeHBlcmltZW50PW59LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWludGVydmlld3tiYWNrZ3JvdW5kOiNmYzA7d2lkdGg6MTAwJTtvcGFjaXR5OjA7Y29sb3I6IzAwMDtjdXJzb3I6ZGVmYXVsdDtmb250LXNpemU6MTNweH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfc2hvd3tvcGFjaXR5OjF9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X19sZWdhbHtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsLWljb257d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO2ZvbnQtc2l6ZToxMXB4O3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjE0cHg7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjJweDtsZWZ0OjJweDtib3JkZXItcmFkaXVzOjUwJX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsLXZpZXdwb3J0e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MWVtO21heC13aWR0aDo5NSU7bWF4LWhlaWdodDo5NSU7Y29sb3I6I2ZmZjtmb250LXNpemU6MTJweH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsOmhvdmVyLC4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWxfc2hvd3t0b3A6MDtyaWdodDowO2JhY2tncm91bmQ6IzAwMDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjgpfS4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWw6aG92ZXIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsLXZpZXdwb3J0LC4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWxfc2hvdyAueWFwLWludGVydmlld19fbGVnYWwtdmlld3BvcnR7ZGlzcGxheTpibG9ja30uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfX2xlZ2FsOmhvdmVyIC55YXAtaW50ZXJ2aWV3X19sZWdhbC1pY29uLC4iLGUuaWQsIiAueWFwLWludGVydmlld19fbGVnYWxfc2hvdyAueWFwLWludGVydmlld19fbGVnYWwtaWNvbntkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X192aWV3cG9ydHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjstd2Via2l0LWp1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7LW1zLWZsZXgtcGFjazpkaXN0cmlidXRlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7LXdlYmtpdC1hbGlnbi1pdGVtczpsZWZ0Oy1tcy1mbGV4LWFsaWduOmxlZnQ7YWxpZ24taXRlbXM6bGVmdDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MS4yZW0gMS4yZW0gMS41ZW07Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlfS4iLGUuaWQsIiAueWFwLWludGVydmlld19fZGVzY3JpcHRpb257cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2ZvbnQtc2l6ZToxLjNlbX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1idXR0b25fdGhlbWVfaW50ZXJ2aWV3e2JhY2tncm91bmQ6I2ZmZjt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzO2ZvbnQtc2l6ZToxLjJlbTtsaW5lLWhlaWdodDoxLjJlbTtwYWRkaW5nOi42ZW0gMWVtO3dpZHRoOjEwMCU7b3BhY2l0eTouNTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjMwMHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpkZWZhdWx0fS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLWJ1dHRvbl90aGVtZV9pbnRlcnZpZXc6YmVmb3Jle2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1idXR0b25fdGhlbWVfaW50ZXJ2aWV3IC55YXAtYnV0dG9uX190ZXh0e3BhZGRpbmc6MDttYXJnaW46MDtjb2xvcjojMDAwO2xpbmUtaGVpZ2h0OjEuMmVtfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLWJ1dHRvbl90aGVtZV9pbnRlcnZpZXcueWFwLWJ1dHRvbl9hY3RpdmUtbGlua3tvcGFjaXR5OjE7Y3Vyc29yOnBvaW50ZXJ9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoe3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtjb2xvcjojMDAwO2ZvbnQtc2l6ZToxLjJlbTttYXJnaW46LjVlbSAwO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9fdmlld3BvcnR7bWF4LXdpZHRoOjEwMCV9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX19pdGVte21hcmdpbjouMWVtIDEuMmVtIC4xZW0gMDtkaXNwbGF5OmlubGluZS1ibG9jaztjdXJzb3I6cG9pbnRlcn0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2hfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9fbWFya2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDouNWVtfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9fdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3BhY2l0eTouODtsaW5lLWhlaWdodDoxZW19LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoIC55YXAtc3dpdGNoX19zdmctYWN0aXZlLC4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaCAueWFwLXN3aXRjaF9fc3ZnLWluYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXcgLnlhcC1zd2l0Y2hfYWN0aXZle2NvbG9yOiMwMDB9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoIC55YXAtc3dpdGNoX19zdmctYWN0aXZlLC4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9hY3RpdmUgLnlhcC1zd2l0Y2hfX3N2Zy1pbmFjdGl2ZXtkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3IC55YXAtc3dpdGNoX2FjdGl2ZSAueWFwLXN3aXRjaF9fc3ZnLWFjdGl2ZXtkaXNwbGF5OmJsb2NrfS4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9fbWFya2VyLXZpZXdwb3J0LC4iLGUuaWQsIiAueWFwLWludGVydmlldyAueWFwLXN3aXRjaF9fdGV4dC12aWV3cG9ydHtkaXNwbGF5OnRhYmxlLWNlbGx9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X3RoZW1lLWhvcml6b250YWwgLnlhcC1pbnRlcnZpZXdfX3ZpZXdwb3J0ey13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6MS4xZW07LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLWJ1dHRvbiwuIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLWludGVydmlld19fZGVzY3JpcHRpb24sLiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X3RoZW1lLWhvcml6b250YWwgLnlhcC1zd2l0Y2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWludGVydmlld190aGVtZS1ob3Jpem9udGFsIC55YXAtaW50ZXJ2aWV3X19kZXNjcmlwdGlvbnttYXgtd2lkdGg6MzAwcHg7bWF4LWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxLjJlbX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLXN3aXRjaHtmb250LXNpemU6MS4yZW07bWFyZ2luOi4zZW0gMCAwIDFlbX0uIixlLmlkLCIgLnlhcC1pbnRlcnZpZXdfdGhlbWUtaG9yaXpvbnRhbCAueWFwLWJ1dHRvbnttYXgtd2lkdGg6MTQwcHh9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X2Zvcm1hdC03Mjh4OTAgLnlhcC1pbnRlcnZpZXdfX3ZpZXdwb3J0LC4iLGUuaWQsIiAueWFwLWludGVydmlld19mb3JtYXQtOTcweDkwIC55YXAtaW50ZXJ2aWV3X192aWV3cG9ydHttYXgtaGVpZ2h0Ojg4cHh9LiIsZS5pZCwiIC55YXAtaW50ZXJ2aWV3X2Zvcm1hdC0yNDB4NDAwIC55YXAtc3dpdGNoX19pdGVte2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjFlbSAwfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1beyJyZWFzb24taWQiOjMsImFjdGlvbi1pZCI6MiwidGFua2VyLWtleSI6Ik5PVF9JTlRFUkVTVElORyIsZGVzY3JpcHRpb246e2xhcmdlOnsxOiJcdTA0MWRcdTA0MzUgXHUwNDM4XHUwNDNkXHUwNDQyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDQzXHUwNDRlXHUwNDQxXHUwNDRjIFx1MDQ0ZFx1MDQ0Mlx1MDQzZVx1MDQzOSBcdTA0NDJcdTA0MzVcdTA0M2NcdTA0M2VcdTA0MzkiLDM6IlRoaXMgZG9lc24ndCBpbnRlcmVzdCBtZSIsNjoiQnVudW5sYSBpbGdpbGVubWl5b3J1bSJ9LHNtYWxsOnsxOiJcdTA0MWRcdTA0MzUgXHUwNDM4XHUwNDNkXHUwNDQyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDQzXHUwNDRlXHUwNDQxXHUwNDRjIiwzOiJOb3QgaW50ZXJlc3RlZCIsNjoiXHUwMTMwbGdpbGVubWl5b3J1bSJ9fX0seyJyZWFzb24taWQiOjE0LCJhY3Rpb24taWQiOjIsInRhbmtlci1rZXkiOiJBTFJFQURZX0JPVUdIVCIsZGVzY3JpcHRpb246e2xhcmdlOnsxOiJcdTA0MjJcdTA0M2VcdTA0MzJcdTA0MzBcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNmXHUwNDNiXHUwNDM1XHUwNDNkIFx1MDQzOFx1MDQzYlx1MDQzOCBcdTA0NDNcdTA0NDFcdTA0M2JcdTA0NDNcdTA0MzNcdTA0MzAgXHUwNDNkXHUwNDMwXHUwNDM5XHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIiwzOiJBbHJlYWR5IGZvdW5kIHByb2R1Y3Qgb3Igc2VydmljZSIsNjoiSGl6bWV0aSB2ZXlhIFx4ZmNyXHhmY25ceGZjIHNhdFx1MDEzMW4gYWxkXHUwMTMxbSJ9LHNtYWxsOnsxOiJcdTA0MjNcdTA0MzZcdTA0MzUgXHUwNDNhXHUwNDQzXHUwNDNmXHUwNDM4XHUwNDNiIiwzOiJBbHJlYWR5IHB1cmNoYXNlZCIsNjoiU2F0XHUwMTMxbiBhbGRcdTAxMzFtIn19fSx7InJlYXNvbi1pZCI6NSwiYWN0aW9uLWlkIjozLCJ0YW5rZXIta2V5IjoiU1BBTSIsZGVzY3JpcHRpb246e2xhcmdlOnsxOiJcdTA0MWRcdTA0MzBcdTA0NDBcdTA0NDNcdTA0NDhcdTA0MzBcdTA0MzVcdTA0NDIgXHUwNDM3XHUwNDMwXHUwNDNhXHUwNDNlXHUwNDNkIFx1MDQzOFx1MDQzYlx1MDQzOCBcdTA0NDFcdTA0M2ZcdTA0MzBcdTA0M2MiLDM6IklsbGVnYWwgb3Igc3BhbSIsNjoiWWFzYSBpaGxhbGkgdmV5YSBzcGFtIn0sc21hbGw6ezE6Ilx1MDQyMVx1MDQzZlx1MDQzMFx1MDQzYyIsMzoiU3BhbSIsNjoiU3BhbSJ9fX0seyJyZWFzb24taWQiOjksImFjdGlvbi1pZCI6MSwidGFua2VyLWtleSI6IlBSRVZFTlRTX0JST1dTSU5HIixkZXNjcmlwdGlvbjp7bGFyZ2U6ezE6Ilx1MDQxY1x1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzNVx1MDQ0MiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDFcdTA0M2NcdTA0M2VcdTA0NDJcdTA0NDBcdTA0NDMgXHUwNDNhXHUwNDNlXHUwNDNkXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDMwIiwzOiJJbnRlcmZlcmVzIHdpdGggY29udGVudCIsNjoiXHUwMTMwXHhlN2VyaVx1MDExZmkgZ1x4ZjZyXHhmY250XHhmY2xlbWV5aSBlbmdlbGxpeW9yIn0sc21hbGw6ezE6Ilx1MDQxY1x1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzNVx1MDQ0MiIsMzoiSW50cnVzaXZlIiw2OiJFbmdlbGxpeW9yIn19fV19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1saW5rX19vdmVybGF5e2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDowO2N1cnNvcjpwb2ludGVyfS4iLGUuaWQsIiAueWFwLWxpbmtfX3NlY29uZGFyeXt6LWluZGV4Ojk7cG9pbnRlci1ldmVudHM6YXV0bztjdXJzb3I6cG9pbnRlcn0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYnV0dG9ue3otaW5kZXg6MDttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjFlbTtsaW5lLWhlaWdodDoxLjllbTtiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy50aXRsZUNvbG9yfHwiIzAwMDBDQyIsIjtib3JkZXItcmFkaXVzOjNweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9LiIsZS5pZCwiIC55YXAtYnV0dG9uLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl9fdGV4dHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uIixlLmlkLCIgLnlhcC1idXR0b25fX3RleHR7ei1pbmRleDoyO21hcmdpbjowIGF1dG87cGFkZGluZzowIDFlbTtjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiKS50b1JlYWRhYmxlKCksIjtmb250LXdlaWdodDo0MDA7em9vbTowfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl9faWNvbiwuIixlLmlkLCIgLnlhcC1idXR0b25fX3RleHR7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiAueWFwLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1idXR0b246aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Y29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikudG9SZWFkYWJsZSgpLCI7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQ6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM2ODlmMzg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udDpub3JtYWwgLjllbS8xIFRhaG9tYSxzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6MS4yZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQ6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7cGFkZGluZzouOWVtIDEuMmVtIC44ZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQteCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC14OmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNjg5ZjM4O2JvcmRlci1yYWRpdXM6M3B4O2ZvbnQ6bm9ybWFsIC45ZW0vMSBzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6MS4yZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQteCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC14OmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e3BhZGRpbmc6LjVlbSAxLjJlbX0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3M6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjMWY2NmIxO2NvbG9yOiMxZjY2YjE7ZmlsbDojMWY2NmIxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjFweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zIC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3M6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7dG9wOjA7cGFkZGluZy1sZWZ0Oi44ZW07cGFkZGluZy1yaWdodDouOGVtO2NvbG9yOmluaGVyaXQ7dmVydGljYWwtYWxpZ246dG9wfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3MteCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLXg6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjMDA3YWZmO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiMwMDdhZmY7ZmlsbDojMDA3YWZmO3N0cm9rZTojMDA3YWZmO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Zm9udC1mYW1pbHk6c3lzdGVtLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LEhlbHZldGljYSBOZXVlLEx1Y2lkYSBHcmFuZGUsQXJpYWwsc2Fucy1zZXJpZjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy14IC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9pb3MteDpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHt0b3A6MDtwYWRkaW5nLWxlZnQ6LjdlbTtwYWRkaW5nLXJpZ2h0Oi43ZW07Y29sb3I6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC13ZWlnaHQ6NjAwfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9hbmRyb2lkLWFwcCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXJ7aGVpZ2h0OjM0cHg7bGluZS1oZWlnaHQ6MzRweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzEwOWQ1Nztib3JkZXItcmFkaXVzOjNweDtmb250LWZhbWlseTpUYWhvbWEsc2Fucy1zZXJpZjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MXB4O3RleHQtZGVjb3JhdGlvbjpub25lfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9hbmRyb2lkLWFwcCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDE0cHh9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQtYXBwLnlhcC1idXR0b25fc21hbGwsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2FuZHJvaWQtYXBwOmhvdmVyLnlhcC1idXR0b25fc21hbGx7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHAueWFwLWJ1dHRvbl9zbWFsbCAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfYW5kcm9pZC1hcHA6aG92ZXIueWFwLWJ1dHRvbl9zbWFsbCAueWFwLWJ1dHRvbl9fdGV4dHtmb250LXNpemU6MTJweH0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLWFwcCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfaW9zLWFwcDpob3Zlcntib3JkZXI6MXB4IHNvbGlkICMxNThmZmY7aGVpZ2h0OjIxcHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjEycHg7Y29sb3I6I2ZmZjtmaWxsOiNmZmY7YmFja2dyb3VuZDojMTU4ZmZmO2ZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHh9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy1hcHAgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2lvcy1hcHA6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7dG9wOjA7cGFkZGluZy1sZWZ0Oi44ZW07cGFkZGluZy1yaWdodDouOGVtO2NvbG9yOmluaGVyaXQ7dmVydGljYWwtYWxpZ246dG9wfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9jb25zdGFudC1jb2xvcnN7Ym9yZGVyOjJweCBzb2xpZDtib3JkZXItY29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fCIjRkZGIikudG9SZWFkYWJsZSgpLCI7YmFja2dyb3VuZDoiLGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiLCJ9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9ycyAueWFwLWJ1dHRvbl9fdGV4dHtjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkYiKS50b1JlYWRhYmxlKCksIjtmb250LXNpemU6MS4xNWVtO2ZvbnQtd2VpZ2h0OjcwMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9ycyAueWFwLWJ1dHRvbl9faWNvbntib3JkZXItcmFkaXVzOjB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX2NvbnN0YW50LWNvbG9yczpob3ZlcntiYWNrZ3JvdW5kOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfY29uc3RhbnQtY29sb3JzOmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e2NvbG9yOiIsbmV3IGUudXRpbHMuQ29sb3IoZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIpLnRvUmVhZGFibGUoKSwifS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV95ZWxsb3cgLnlhcC1idXR0b25fX3RleHQsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdzpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHtjb2xvcjoiLGUudGV4dENvbG9yfHwiI2ZmZiIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfcmVzcG9uc2l2ZS1tb2JpbGUsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlOmhvdmVye2ZvbnQtc2l6ZToxLjJlbTtsaW5lLWhlaWdodDoxZW07cGFkZGluZzouM2VtIC45ZW19LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlIC55YXAtYnV0dG9uX190ZXh0LC4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV9yZXNwb25zaXZlLW1vYmlsZTpob3ZlciAueWFwLWJ1dHRvbl9fdGV4dHtmb250LXdlaWdodDo3MDA7cGFkZGluZzowO2NvbG9yOiMwMDB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdywuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfeWVsbG93OmhvdmVye2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjFlbTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMnB4ICNmYzB9LiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3llbGxvdyAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfeWVsbG93OmhvdmVyIC55YXAtYnV0dG9uX190ZXh0e2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOi41ZW0gLjdlbTtjb2xvcjoiLGUudGV4dENvbG9yfHwiI2ZmZiIsIn0uIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfd2hpdGUsLiIsZS5pZCwiIC55YXAtYnV0dG9uX3RoZW1lX3doaXRlOmhvdmVye2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MWVtO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDVweCAwIHJnYmEoMCwwLDAsLjMpfS4iLGUuaWQsIiAueWFwLWJ1dHRvbl90aGVtZV93aGl0ZSAueWFwLWJ1dHRvbl9fdGV4dCwuIixlLmlkLCIgLnlhcC1idXR0b25fdGhlbWVfd2hpdGU6aG92ZXIgLnlhcC1idXR0b25fX3RleHR7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6LjVlbSAuN2VtO2NvbG9yOiMwMDB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWFwcC1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtib3JkZXItcmFkaXVzOjNweH0uIixlLmlkLCIgLnlhcC1hcHAtaWNvbl90aGVtZV9yb3VuZHtib3JkZXItcmFkaXVzOjhweDtib3gtc2hhZG93OjAgMCAwIDJweCAjZmZmfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSgzKSxyPShuPW8pJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxhPWkoMTQpLHM9aSg1KTt2YXIgbD1pKDEwKSxjPWkoNTAyKSx1PXJbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQobCx7bmFtZToieWFwLXN3aXRjaCIsb25Jbml0OmZ1bmN0aW9uKCl7dGhpcy5fX2Jhc2UoKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMoYyl9LGNob29zZUl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPWUuaXRlbSxuPXRoaXMucHJvcHMsbz1uLml0ZW1zLHI9bi5vbkNoYW5nZTsoMCxzLmZvckVhY2gpKG8sZnVuY3Rpb24oZSxuKXt2YXIgbz10LmdldFJlc291cmNlQnlJZCgibWFya2VyXyIrbikscj10LmJfKCJfYWN0aXZlIik7ZT09PWk/by5hZGRDbGFzcyhyKTpvLnJlbW92ZUNsYXNzKHIpfSksciYmcihpKX0sX3JlbmRlcjpmdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcyxvPXQuaXRlbXM7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSh0WyJjbGFzcyJdLGUoKSl9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX192aWV3cG9ydCIpfSwoMCxhLm1hcCkobyxmdW5jdGlvbih0LG8pe3ZhciBhPXQudGV4dCxzPXQuaXNBY3RpdmU7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19pdGVtIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuLmNob29zZUl0ZW0oe2l0ZW06dCxpbmRleDpvfSl9fSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fbWFya2VyLXZpZXdwb3J0Iil9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19tYXJrZXIiLHM/Il9hY3RpdmUiOiIiKSxyZXNvdXJjZUlkOiJtYXJrZXJfIitvfSxyWyJkZWZhdWx0Il0uY3JlYXRlKGkuQ29udGFpbmVyLG51bGwsclsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7Y2xhc3M6ZSgiX19zdmctYWN0aXZlIiksd2lkdGg6MTgsaGVpZ2h0OjE4LHZpZXdCb3g6IjAgMCAxOCAxOCIsZmlsbDoidHJhbnNwYXJlbnQifSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJjaXJjbGUiLHtjeDo5LGN5OjkscjoiN3B4IixzdHlsZToic3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZTogIzAwMCJ9KSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJjaXJjbGUiLHtjeDo5LGN5OjkscjoiNHB4IixzdHlsZToiZmlsbDogIzAwMCJ9KSksclsiZGVmYXVsdCJdLmNyZWF0ZSgic3ZnIix7Y2xhc3M6ZSgiX19zdmctaW5hY3RpdmUiKSx3aWR0aDoxOCxoZWlnaHQ6MTgsdmlld0JveDoiMCAwIDE4IDE4IixmaWxsOiJ0cmFuc3BhcmVudCJ9LHJbImRlZmF1bHQiXS5jcmVhdGUoImNpcmNsZSIse2N4OjksY3k6OSxyOiI3cHgiLHN0eWxlOiJzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlOiAjMDAwIn0pKSkpKSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fdGV4dC12aWV3cG9ydCIpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fdGV4dCIpfSxhKSkpfSkpKX19KTtlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtc3dpdGNoe2Rpc3BsYXk6aW5saW5lLWJsb2NrfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0yZTMsbz0zO3QucHJvdGVjdD1mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3ZhciB0PWkoMTEpLmNvbmZpZy50cmVlUHJvdGVjdGlvbnx8e307cmV0dXJuITA9PT10LmVuYWJsZWQmJighdC5pZHN8fC0xIT09aSgyMykuaW5kZXhPZih0LmlkcyxlLmlkKSl9KGUpKXt2YXIgcj1bXSxhPTA7IWZ1bmN0aW9uIHMoKXtpZihlJiZkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGUpKXt2YXIgbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10saT1lO2kmJmkhPT1kb2N1bWVudC5ib2R5Oyl0LnB1c2goaSksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIHR9KGUpOyFmdW5jdGlvbiBjKCl7dmFyIHU9bC5wb3AoKTtpZih1KXt2YXIgZD1mdW5jdGlvbigpe2lmKC0xPT09aSgyMykuaW5kZXhPZihyLHUpKXt2YXIgbj1pKDExOCkuY3JlYXRlUmFuZG9tRWxlbWVudFRyZWUoKTtpKDUwNSkud3JhcEVsZW1lbnQodSxuKSxpKDMwOCkud3JhcENoaWxkU2NyaXB0cyh1KTt2YXIgbyxhPWkoMTE4KS5jcmVhdGVSYW5kb21FbGVtZW50VHJlZSgpO3U9PT1lPyhvPWkoMzA5KS5yZWNyZWF0ZUVsZW1lbnQodSxhLHQpLGU9b3x8ZSk6bz1pKDMwOSkucmVjcmVhdGVFbGVtZW50KHUsYSksbz8ocj1pKDIyKS5maWx0ZXIocixmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXV9KSkucHVzaChvKTpyLnB1c2godSksci5jb25jYXQobiksci5jb25jYXQoYSl9fTtpKDIwNikuaXNDb21wdXRlZERpc3BsYXlOb25lKHUpP2koMjA2KS5pc1N0eWxlRGlzcGxheU5vbmUodSk/KGQoKSxjKCkpOmkoMjA2KS5jaGVja1N0eWxlQXBwbHlpbmcodSkudGhlbihmdW5jdGlvbihlKXtlfHxkKCksYygpfSk6YygpLHUucGFyZW50RWxlbWVudCYmaSgzMDgpLndyYXBDaGlsZFNjcmlwdHModS5wYXJlbnRFbGVtZW50KX1lbHNlIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsrK2E8byYmcygpfSxuKX0oKX19KCl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRSYW5kb21DaGFyPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09ZSYmKGU9ImEiKSx2b2lkIDA9PT10JiYodD0ieiIpO3ZhciBuPWkoNDgpLmdldFJhbmRvbUludChlLmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDApKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQud3JhcEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnBhcmVudEVsZW1lbnQ7biYmKG4uaW5zZXJ0QmVmb3JlKHRbMF0sZSksdFt0Lmxlbmd0aC0xXS5hcHBlbmRDaGlsZChlKSxpKDExOCkuYXBwZW5kUmFuZG9tU2libGluZ3MoZSkpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSg4MikuZ2V0UmFuZG9tU3RyaW5nKGkoNDgpLmdldFJhbmRvbUludCg1LDE1KSksbz13aW5kb3cuZG9jdW1lbnQscj0iaWQiLGE9aSgzMSkub25jZShmdW5jdGlvbigpe3ZhciBlPW8uZ2V0RWxlbWVudEJ5SWQ7by5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKG8sdCl8fG8ucXVlcnlTZWxlY3RvcigiWyIrbisiPSciK2koNTYpLmVuY29kZSh0KSsiJ10iKX19KTt0LnJlbW92ZUF0dHJpYnV0ZUlkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKHIpO2lmKGkoMTEpLmNvbmZpZy5yZW1vdmVBdHRyaWJ1dGVJZCYmZS5oYXNBdHRyaWJ1dGUocikmJnQpe2Uuc2V0QXR0cmlidXRlKG4saSg1NikuZW5jb2RlKHQpKTt2YXIgbz1lLmdldEF0dHJpYnV0ZTtlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXI/dDpvLmNhbGwoZSxpKX07dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pfWNhdGNoKGUpe31hKCksZS5yZW1vdmVBdHRyaWJ1dGUocil9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC55YW5kZXhUdj1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoIig/Oih0dnxuZXdzKVxcLnlhbmRleChcXC5cXHcrKSspIiksdC55YW5kZXhOZXdzPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86bmV3c1xcLnlhbmRleChcXC5cXHcrKSspIiksdC55YW5kZXhQb2dvZGE9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIoPzooPzp5YW5kZXgoXFwuXFx3KykrXFwvcG9nb2RhKXwoPzpwb2dvZGFcXC55YW5kZXgoXFwuXFx3KykrKSkiKSx0LnlhbmRleE1hcHM9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIoPzp5YW5kZXgoXFwuXFx3KykrXFwvbWFwcykiKSx0LnlhbmRleFZpZGVvPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86eWFuZGV4KFxcLlxcdyspK1xcL3ZpZGVvKSIpLHQueWFuZGV4SW1hZ2VzPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86eWFuZGV4KFxcLlxcdyspK1xcL2ltYWdlcykiKSx0LnlhbmRleFplbj1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoIig/OnplblxcLnlhbmRleChcXC5cXHcrKSspIiksdC55YW5kZXhNYWlsPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86bWFpbFxcLnlhbmRleChcXC5cXHcrKSspIiksdC55YW5kZXhSYXNwPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86cmFzcFxcLnlhbmRleChcXC5cXHcrKSspIiksdC55YW5kZXhBbGw9W10uY29uY2F0KHQueWFuZGV4VHYsdC55YW5kZXhOZXdzLHQueWFuZGV4UG9nb2RhLHQueWFuZGV4TWFwcyx0LnlhbmRleFZpZGVvLHQueWFuZGV4SW1hZ2VzLHQueWFuZGV4WmVuLHQueWFuZGV4TWFpbCksdC52az1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoInZrXFwuY29tIiksdC5vaz1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoIm9rXFwucnUiKSx0LnNwb3J0c01haWw9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCJzcG9ydG1haWxcXC5ydSIpLHQuY3liZXJTcG9ydD1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoImN5YmVyc3BvcnRcXC4ocnV8Y29tKSIpLHQud293U2FsZT1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoIndvd3NhbGVcXC5ydSIpLHQubWFpbFJ1PWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiKD86KD86ZGV2bWFpbFxcLnJ1KXwoPzptYWlsXFwucnUpKSIpLHQubWFpbFJ1QWxsPVt0LnZrLHQub2ssdC5zcG9ydHNNYWlsLHQubWFpbFJ1LHQud293U2FsZSx0LmN5YmVyU3BvcnRdLHQuYXV0aHdpZmk9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIoPzpcXHcrLSk/YXV0aFxcLndpLWZpXFwucnUiKSx0Lm1haW53aWZpPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigid2ktZmlcXC5ydSIpLHQud2lmaT1bXS5jb25jYXQodC5hdXRod2lmaSx0Lm1haW53aWZpKSx0Lmdpc21ldGVvPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiZ2lzbWV0ZW9cXC5ydSIpLHQuYXZpdG89aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCJeKChbXm1dfFxcd1xcdyspKFxcLmF2aXRvKXxhdml0bylcXC4oZGV2fHJ1KSIpLHQuYXZpdG9LPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiXFx3K1xcLmtcXC5hdml0b1xcLnJ1IiksdC5hdml0b01vYmlsZT1pKDE4KS5jcmVhdGVIb3N0QXNzZXJ0ZXIoIm1cXC5hdml0b1xcLihkZXZ8cnUpIiksdC55YWFuaUNvbVRyPWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigieWFhbmlcXC5jb21cXC50ciIpLHQueW91bGE9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCJ5b3VsYVxcLihpb3xydSkiKSx0LnJ1PWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiLipcXC5ydSIpLHQucmY9aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIuKlxcLnhuLS1wMWFpIiksdC5jb209aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIuKlxcLmNvbSIpLHQubmV0PWkoMTgpLmNyZWF0ZUhvc3RBc3NlcnRlcigiLipcXC5uZXQiKSx0LmluZm89aSgxOCkuY3JlYXRlSG9zdEFzc2VydGVyKCIuKlxcLmluZm8iKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0RpcmVjdD1mdW5jdGlvbihlKXtyZXR1cm4iRCI9PT1lfHwiZGlyZWN0Ij09PWV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDMxMyksbz1pKDMxNCkscj1pKDUxMSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUuZmFjdG9yeT1mdW5jdGlvbihlKXtyZXR1cm4gbi5BbGxPZlN0cmF0ZWd5LmZyb20oci5WaWV3cG9ydFN0cmF0ZWd5LmZhY3Rvcnksby5PdmVybGF5U3RyYXRlZ3kuZmFjdG9yeSkoZSl9LGV9KCk7dC5EaXNwbGF5U3RyYXRlZ3k9YX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc092ZXJsYXBwZWQ9ZnVuY3Rpb24oZSx0KXtpZihpKDMxNSkuaXNPcGVyYU1pbmkpcmV0dXJuITE7dmFyIG49aSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpLG89bi5sZWZ0LHI9bi5yaWdodCxhPW4udG9wLHM9bi5ib3R0b20sbD1yLW8sYz1zLWE7cmV0dXJuIWkoNDUpLnNvbWUodCxmdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxzPW8rKGwtMSkqKDErbikvMix1PWErKGMtMSkqKDErcikvMixkPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQocyx1KTtpZighZHx8ZT09PWR8fGUuY29udGFpbnMoZCkpcmV0dXJuITA7aWYoaSg3KS5pc0Z1bmN0aW9uKGUuZ2V0Um9vdE5vZGUpKXtpZihmdW5jdGlvbiBlKHQsaSl7dmFyIG49dC5nZXRSb290Tm9kZSgpO3JldHVybiEoIW58fCFuLmhvc3QpJiYoISFpLmNvbnRhaW5zKG4uaG9zdCl8fGUobi5ob3N0LGkpKX0oZCxlKSlyZXR1cm4hMDtpZihmdW5jdGlvbiBlKHQsaSl7dmFyIG49aS5nZXRSb290Tm9kZSgpO3JldHVybiEoIW58fCFuLmhvc3QpJiYodD09PW4uaG9zdHx8ZSh0LG4uaG9zdCkpfShkLGUpKXJldHVybiEwfXJldHVybiExfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDU1KSxhPWkoMzE3KSxzPWkoMzMpLGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgaT1lLmNhbGwodGhpcyx0KXx8dGhpcztpLmFyZ3M9dCxpLndpbmRvd0NoYWluPWEuZ2V0RnJpZW5kbHlXaW5kb3dzQ2hhaW4od2luZG93KS5yZXZlcnNlKCk7dHJ5e2kuaXNEZXRlcm1pbmVkPUJvb2xlYW4od2luZG93LnRvcC5sb2NhdGlvbi5ob3N0bmFtZSl9Y2F0Y2goZSl7aS5pc0RldGVybWluZWQ9ITF9cmV0dXJuIGl9cmV0dXJuIG8odCxlKSx0LmZhY3Rvcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD9uZXcgdChlKTpudWxsfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5hcmdzLmVsZW1lbnQpLGk9dC53aWR0aCp0LmhlaWdodDtpZihpPD0wKXJldHVybiExO3ZhciBuPXIucmVkdWNlKHRoaXMud2luZG93Q2hhaW4sZnVuY3Rpb24odCxpKXtyZXR1cm4gZS5nZXRGcmFtZVZpc2libGVQYXJ0KGksdCl9LHZvaWQgMCksbz1NYXRoLm1heCh0LmxlZnQsbi5sZWZ0KSxhPU1hdGgubWF4KHQudG9wLG4udG9wKTtyZXR1cm4oTWF0aC5taW4odC5yaWdodCxuLnJpZ2h0KS1vKSooTWF0aC5taW4odC5ib3R0b20sbi5ib3R0b20pLWEpPj1NYXRoLmZsb29yKGkqdGhpcy5hcmdzLnBvcnRpb24pfSx0LnByb3RvdHlwZS5nZXRGcmFtZVZpc2libGVQYXJ0PWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCFlLmZyYW1lRWxlbWVudClyZXR1cm57bGVmdDowLHJpZ2h0OmUuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206ZS5pbm5lckhlaWdodH07dmFyIGk9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoZS5mcmFtZUVsZW1lbnQpO3JldHVybntsZWZ0Ok1hdGgubWF4KHQubGVmdC1pLmxlZnQsMCkscmlnaHQ6ZS5pbm5lcldpZHRoLU1hdGgubWF4KGkucmlnaHQtdC5yaWdodCwwKSx0b3A6TWF0aC5tYXgodC50b3AtaS50b3AsMCksYm90dG9tOmUuaW5uZXJIZWlnaHQtTWF0aC5tYXgoaS5ib3R0b20tdC5ib3R0b20sMCl9fSx0fShpKDMxNikuSW50ZXJ2YWxTdHJhdGVneSk7dC5WaWV3cG9ydFN0cmF0ZWd5PWx9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMTcpLG89aSgxNDgpLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXM7dGhpcy5hcmdzPWUsdGhpcy5pc0RldGVybWluZWQ9ITAsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VDYWxsYmFjaz1mdW5jdGlvbigpe3QuYXJncy5jYWxsYmFjayh0LmdldElzVmlzaWJsZSgpKX19cmV0dXJuIGUuZmFjdG9yeT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9LGUucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5vblZpc2liaWxpdHlDaGFuZ2VDYWxsYmFjaygpLGUuc3Vic2NyaXB0aW9uPW4ub24oZG9jdW1lbnQsby5jaGFuZ2VFdmVudE5hbWUsZS5vblZpc2liaWxpdHlDaGFuZ2VDYWxsYmFjayl9KX0sZS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lciksbi51bih0aGlzLnN1YnNjcmlwdGlvbil9LGUucHJvdG90eXBlLmdldElzVmlzaWJsZT1mdW5jdGlvbigpe3JldHVybiFvLmlzSGlkZGVuKCl9LGV9KCk7dC5Eb2N1bWVudFN0cmF0ZWd5PXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT13aW5kb3cpLHRoaXMud2luZG93T2JqPWUsdGhpcy5pbml0WWFCcm93c2VyQXBpKCl9cmV0dXJuIGUucHJvdG90eXBlLmNhblVzZVlhQnJvQXBpPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy55YUJyb0FwaUluc3RhbmNlJiZ0aGlzLnlhQnJvQXBpSW5zdGFuY2UuaXNJbkN1c3RvUGFnZSl9LGUucHJvdG90eXBlLmlzUGFnZUhpZGRlbllhQnJvQXBpPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLnlhQnJvQXBpSW5zdGFuY2UmJnRoaXMueWFCcm9BcGlJbnN0YW5jZS5wYWdlVmlzaWJsZSl9LGUucHJvdG90eXBlLmluaXRZYUJyb3dzZXJBcGk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMud2luZG93T2JqLmJyb3dzZXImJnRoaXMud2luZG93T2JqLmJyb3dzZXIuQnJvd3NlckVtYmVkZGVkQXBpJiZ0aGlzLndpbmRvd09iai5icm93c2VyLkJyb3dzZXJFbWJlZGRlZEFwaS5nZXRJbnN0YW5jZSgpLnRoZW4oZnVuY3Rpb24odCl7ZS55YUJyb0FwaUluc3RhbmNlPXR9KX0sZX0oKTt0LllhQnJvd3NlclZpc2liaWxpdHlBcGlXcmFwcGVyPW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY3VycmVuY3lUaXRsZXM9WyImIzgzODE7Il19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49YShpKDEwMikpLG89YShpKDMpKSxyPWkoMTg0KTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgcz1pKDApLGw9aSg1MTYpLGM9aSgzNjgpLHU9aSgyNTEpLGQ9aSgyNTkpLHA9aSg2KTtlLmV4cG9ydHM9cy5hdWdtZW50KGwse2luaXQ6ZnVuY3Rpb24oZSx0LGkpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9hZD10LHRoaXMuX3BhcmVudD1pLHRoaXMuZGF0YVNvdXJjZT10aGlzLl9wYXJlbnQuZGF0YVNvdXJjZSx0aGlzLl9pbml0V2FybmluZyhlLHQpLHRoaXMuX2FkLmFidXNlVXJsJiYoMCxyLnNob3VsZFNob3dBZHR1bmUpKHRoaXMuZGF0YVNvdXJjZSkmJnRoaXMuX2luaXRBZHR1bmUoKSx0aGlzLmluaXRBZHR1bmVTU1BIYW5kbGVyKCl9LF9pbml0V2FybmluZzpmdW5jdGlvbihlLHQpe3ZhciBpPXMuZG9tLnF1ZXJ5U2VsZWN0b3IoIi55YXAtbGF5b3V0X193YXJuaW5nIixlKVswXTtpZihpKXt0aGlzLl9hZGRDbGFzc1NsaW1XYXJuaW5nKCk7dmFyIG49dGhpcy5fZWxlbWVudCxyPXRoaXMuX2dldENvbnRlbnRFbGVtZW50KCksYT10aGlzLl9pc1NsaW1XYXJuaW5nKCksbD10aGlzLl9nZXRTbGltV2FybmluZ1dpZHRoKCksdT1uZXcgYyh7YWR2OnQsY29udGVudEVsZW1lbnQ6cixhZEVsZW1lbnQ6bixzbGltV2FybmluZzphLHNsaW1XYXJuaW5nV2lkdGg6bH0pO29bImRlZmF1bHQiXS5yZW5kZXJUb05vZGUoaSx1KSx0aGlzLl9pbm5lckNvbXBvbmVudHMucHVzaCh1KX19LF9nZXRDb250ZW50RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiBzLmRvbS5xdWVyeVNlbGVjdG9yKCIueWFwLWxheW91dF9fY29udGVudCIsdGhpcy5fZWxlbWVudClbMF19LF9pc1NsaW1XYXJuaW5nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGFyZW50LmdldEZvcm1hdCgpLHQ9cy5kb20ucXVlcnlTZWxlY3RvcigiLnlhcC1sYXlvdXRfX3dhcm5pbmciLHRoaXMuX2VsZW1lbnQpWzBdO3JldHVybigicm93Ij09PWV8fCJjb21wYWN0Ij09PWUpJiZ0fSxfYWRkQ2xhc3NTbGltV2FybmluZzpmdW5jdGlvbigpe3RoaXMuX2lzU2xpbVdhcm5pbmcoKSYmblsiZGVmYXVsdCJdLmFkZENsYXNzKHRoaXMuX2VsZW1lbnQsInlhcC1sYXlvdXRfX2l0ZW1fd2FybmluZ19sb25nIil9LF9nZXRTbGltV2FybmluZ1dpZHRoOmZ1bmN0aW9uKCl7aWYodGhpcy5fYWQud2FybmluZy5sZW5ndGg+cC5sb25nV2FybmluZ0xlbmd0aCYmdGhpcy5faXNTbGltV2FybmluZygpKXt2YXIgZT10aGlzLl9wYXJlbnQuZ2V0Rm9ybWF0KCksdD1zLmRvbS5xdWVyeVNlbGVjdG9yKCIueWFwLWxheW91dF9fYm9keSIsdGhpcy5fZWxlbWVudClbMF0saT1zLmRvbS5xdWVyeVNlbGVjdG9yKCIueWFwLWxheW91dF9fd2FybmluZy1idXR0b24iLHRoaXMuX2VsZW1lbnQpWzBdO2lmKCJjb21wYWN0Ij09PWUpcmV0dXJuIHQub2Zmc2V0V2lkdGgtaS5vZmZzZXRXaWR0aDtpZigicm93Ij09PWUpcmV0dXJuIHQub2Zmc2V0V2lkdGh9fSxpbml0QWR0dW5lU1NQSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMub24ocy5kb20ucXVlcnlTZWxlY3RvcigiLnlhcC1hZHR1bmVfX2xpbmsiLHRoaXMuX2VsZW1lbnQpLCJjbGljayIsdGhpcy5vbkNsaWNrVG9BZHR1bmUpfSxnbzpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5faW5uZXJDb21wb25lbnRzLmxlbmd0aDtlKyspe3ZhciB0PXRoaXMuX2lubmVyQ29tcG9uZW50c1tlXSxpPXRbIm9uR28iXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaSlpZighMT09PWkuYXBwbHkodCxhcmd1bWVudHMpKXJldHVybiExfXJldHVybiB0aGlzLm9uR28uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvbkdvOmZ1bmN0aW9uKCl7cmV0dXJuITB9LF9pbml0QWR0dW5lOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYWQsdD10aGlzLl9wYXJlbnQuZ2V0QWR0dW5lQ29udGFpbmVyKHRoaXMuX2VsZW1lbnQpWzBdO2lmKHQpe3ZhciBpPW5ldyB1KHRoaXMuX2dldEFkdHVuZUNvbmZpZyhlKSk7b1siZGVmYXVsdCJdLnJlbmRlclRvTm9kZSh0LGkpLGkub24oImNsaWNrOmFkdHVuZSIsdGhpcy5fb25DbGlja0FkdHVuZSx0aGlzKSx0aGlzLl9pbm5lckNvbXBvbmVudHMucHVzaChpKSx0aGlzLl9hZHR1bmVDb21wb25lbnQ9aX19LF9nZXRBZHR1bmVDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcGFyZW50LmdldEFkdHVuZUNvbmZpZygpO3JldHVybiBzLmV4dGVuZCh7bm9ybWFsOiEwLGxhbmd1YWdlOnRoaXMuZGF0YVNvdXJjZS5nZXRMYW5ndWFnZSgpLGlzT2xkSUU6cy5icm93c2VyLmlzSUVRdWlya3MsYWRJZDplLmFkSWR9LHQpfSxfb25DbGlja0FkdHVuZTpmdW5jdGlvbigpe3RoaXMuX3BhcmVudC5maXJlSW5uZXJDb21wb25lbnRzKCJvcGVuQWR0dW5lV2luZG93IiksdGhpcy5fZmVlZGJhY2tDb21wb25lbnQ/dGhpcy5fZmVlZGJhY2tDb21wb25lbnQuaXNWaXNpYmxlKCk/KHRoaXMuX2ZlZWRiYWNrQ29tcG9uZW50LmhpZGUoKSx0aGlzLl9hZHR1bmVDb21wb25lbnQuZW5hYmxlVG9vbHRpcCgpKToodGhpcy5fZmVlZGJhY2tDb21wb25lbnQuc2hvdygpLHRoaXMuX2FkdHVuZUNvbXBvbmVudC5kaXNhYmxlVG9vbHRpcCgpKToodGhpcy5faW5pdEZlZWRiYWNrTWVudSgpLHRoaXMuX2ZlZWRiYWNrQ29tcG9uZW50LnNob3coKSx0aGlzLl9hZHR1bmVDb21wb25lbnQuZGlzYWJsZVRvb2x0aXAoKSl9LF9pbml0RmVlZGJhY2tNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZWxlbWVudCx0PXRoaXMuX3BhcmVudC5fZ2V0QWRDb250YWluZXIodGhpcy5fZWxlbWVudCksaT1uZXcgZCh7bGFuZ3VhZ2U6dGhpcy5kYXRhU291cmNlLmdldExhbmd1YWdlKCksYWJ1c2VVcmw6dGhpcy5fYWQuYWJ1c2VVcmwsaGVpZ2h0OmUuY2xpZW50SGVpZ2h0LHdpZHRoOmUuY2xpZW50V2lkdGgsb25SZWNlaXZlZEZlZWRiYWNrOnMuYmluZCh0aGlzLl9vblJlY2VpdmVkRmVlZGJhY2ssdGhpcyl9KTt0LmFwcGVuZENoaWxkKG9bImRlZmF1bHQiXS5yZW5kZXIoaSkpLGkuZml0U2l6ZSgpLHRoaXMuX2lubmVyQ29tcG9uZW50cy5wdXNoKGkpLHRoaXMuX2ZlZWRiYWNrQ29tcG9uZW50PWl9LF9vblJlY2VpdmVkRmVlZGJhY2s6ZnVuY3Rpb24oKXt2YXIgZTsoZT10aGlzLl9wYXJlbnQpLm9uUmVjZWl2ZWRGZWVkYmFjay5hcHBseShlLGFyZ3VtZW50cyksdGhpcy5fYWR0dW5lQ29tcG9uZW50LmRlc3Ryb3koKX19KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1pKDApO2Z1bmN0aW9uIG8oKXt0aGlzLl9ldmVudHM9W10sdGhpcy5faW5uZXJDb21wb25lbnRzPVtdLHRoaXMuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9by5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oKXt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckV2ZW50cygpLHRoaXMuX2NsZWFySW5uZXJDb21wb25lbnRzKCksdGhpcy5kZXN0cm95KCl9LF9jbGVhcklubmVyQ29tcG9uZW50czpmdW5jdGlvbigpe24uZWFjaCh0aGlzLl9pbm5lckNvbXBvbmVudHMsZnVuY3Rpb24oZSl7ZS5kZXN0cnVjdG9yP2UuZGVzdHJ1Y3RvcigpOmUuZGVzdHJveSYmZS5kZXN0cm95KCl9KSx0aGlzLl9pbm5lckNvbXBvbmVudHM9W119LF9jbGVhckV2ZW50czpmdW5jdGlvbigpe24uZWFjaCh0aGlzLl9ldmVudHMsZnVuY3Rpb24oZSl7ZS51bigpfSksdGhpcy5fZXZlbnRzPVtdfSxhZGRDb21wb25lbnQ6ZnVuY3Rpb24oZSl7dGhpcy5faW5uZXJDb21wb25lbnRzLnB1c2goZSl9LG9uOmZ1bmN0aW9uKGUsdCxpKXtuLmlzQXJyYXkoZSk/bi5lYWNoKGUsZnVuY3Rpb24oZSl7dGhpcy5fZXZlbnRzLnB1c2gobi5kb21FdmVudC5vbihlLHQsaSx0aGlzKSl9LHRoaXMpOnRoaXMub24oW2VdLHQsaSl9fSxlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtbGF5b3V0X193YXJuaW5ne3otaW5kZXg6MTAwfS4iLGUuaWQsIiAueWFwLXdhcm5pbmd7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDoxLjI7Ym9yZGVyOjFweCBzb2xpZCAiLGUuc2V0dGluZ3MuYmdDb2xvcnx8ZS5zZXR0aW5ncy5zaXRlQmdDb2xvcj9uZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmJnQ29sb3J8fGUuc2V0dGluZ3Muc2l0ZUJnQ29sb3IpLnRvUmVhZGFibGUoKS5zZXRBbHBoYSguMyk6bmV3IGUudXRpbHMuQ29sb3IoIiNkZGQiKS5zZXRBbHBoYSgxKSwiO2JvcmRlci1yYWRpdXM6MDt6LWluZGV4OjEwO3BvaW50ZXItZXZlbnRzOmF1dG99LiIsZS5pZCwiIC55YXAtd2FybmluZywuIixlLmlkLCIgLnlhcC13YXJuaW5nX19saW5re2NvbG9yOiIsZS5zZXR0aW5ncy5iZ0NvbG9yfHxlLnNldHRpbmdzLnNpdGVCZ0NvbG9yP25ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8ZS5zZXR0aW5ncy5zaXRlQmdDb2xvcikudG9SZWFkYWJsZSgpLnNldEFscGhhKC42KTpuZXcgZS51dGlscy5Db2xvcigiIzY2NiIpLnNldEFscGhhKDEpLCI7Zm9udC1mYW1pbHk6dmVyZGFuYTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2hlaWdodDoxN3B4fS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfX3RleHR7dGV4dC1hbGlnbjpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtd2FybmluZ19fbGlua3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX19saW5rOmhvdmVye2NvbG9yOiIsbmV3IGUudXRpbHMuQ29sb3IoZS5zZXR0aW5ncy5iZ0NvbG9yfHxlLnNldHRpbmdzLnNpdGVCZ0NvbG9yfHwiI0ZGRkZGRiIpLnRvUmVhZGFibGUoKS5zZXRBbHBoYSguNSksIn0uIixlLmlkLCIgLnlhcC13YXJuaW5nX21lZGljYWx7ZGlzcGxheTp0YWJsZX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX21lZGljYWwgLnlhcC13YXJuaW5nX190ZXh0e2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2xvbmd7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTttYXgtd2lkdGg6NDAwcHg7d2lkdGg6MTAwJTtib3JkZXI6bm9uZX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2xvbmcgLnlhcC13YXJuaW5nX190ZXh0e3BhZGRpbmctdG9wOjNweDt6LWluZGV4Oi0xO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjA7dGV4dC1hbGlnbjpsZWZ0O21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjB9LiIsZS5pZCwiIC55YXAtd2FybmluZ19kb3Rze2NvbG9yOiIsZS5zZXR0aW5ncy5zaXRlbGlua3NDb2xvcnx8ZS5zZXR0aW5ncy50aXRsZUNvbG9yfHwiIzAwMDBjYyIsIjtvcGFjaXR5Oi41O2xpbmUtaGVpZ2h0OjFlbTtmb250LXNpemU6MTRweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2RvdHMueWFwLXdhcm5pbmdfbW91c2Utb257Zm9udC1zaXplOjB9LiIsZS5pZCwiIC55YXAtd2FybmluZ19fY29udGFpbmVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OnJvdyBub3dyYXA7LW1zLWZsZXgtZmxvdzpyb3cgbm93cmFwO2ZsZXgtZmxvdzpyb3cgbm93cmFwO3dpZHRoOjEwMCV9LiIsZS5pZCwiIC55YXAtd2FybmluZ19lbGxpcHNpc3std2Via2l0LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MX0uIixlLmlkLCIgLnlhcC1sYXlvdXRfX3dhcm5pbmdfaW52aXNpYmxlIC55YXAtd2FybmluZ19sb25ne3otaW5kZXg6MH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2dyYWRpZW50X19yaWdodHstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZyxoc2xhKDAsMCUsMTAwJSwwKSwjZmZmIDI1JSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQoLTkwZGVnLGhzbGEoMCwwJSwxMDAlLDApLCNmZmYgMjUlKTstd2Via2l0LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX19zdHlsZXt3aWR0aDoxMDAlO21heC13aWR0aDo0MDBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtd2FybmluZ19ncmFkaWVudF9fbGVmdHstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZywjZmZmIDg1JSxoc2xhKDAsMCUsMTAwJSwwKSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCNmZmYgODUlLGhzbGEoMCwwJSwxMDAlLDApKX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2dyYWRpZW50X19sZWZ0LnlhcC13YXJuaW5nX2dyYWRpZW50X19yaWdodHstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KC05MGRlZyxoc2xhKDAsMCUsMTAwJSwwKSwjZmZmIDE1JSwjZmZmIDg1JSxoc2xhKDAsMCUsMTAwJSwwKSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQoLTkwZGVnLGhzbGEoMCwwJSwxMDAlLDApLCNmZmYgMTUlLCNmZmYgODUlLGhzbGEoMCwwJSwxMDAlLDApKX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX2dyYWRpZW50X19yaWdodDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO2JvdHRvbTowO2xpbmUtaGVpZ2h0OjEuN2VtO3BhZGRpbmctcmlnaHQ6MnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6NjBweH0uIixlLmlkLCIgLnlhcC1sYXlvdXQgLnlhcC1sYXlvdXRfX3dhcm5pbmctYnV0dG9uLXRleHR7ZGlzcGxheTppbmxpbmU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LiIsZS5pZCwiIC55YXAtbGF5b3V0IC55YXAtbGF5b3V0X193YXJuaW5nLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiIsZS5zZXR0aW5ncy5ob3ZlckNvbG9yfHwiIzAwODhDQyIsIn0uIixlLmlkLCIgLnlhcC13YXJuaW5nX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxle2NvbG9yOiNmZmY7Zm9udC1zaXplOjFlbTtsaW5lLWhlaWdodDoxLjNlbTtoZWlnaHQ6MTNweDt3aWR0aDoxMDAlO21heC13aWR0aDo0MjBweH0uIixlLmlkLCIgLnlhcC13YXJuaW5nX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlIC55YXAtd2FybmluZ19fdGV4dHtwYWRkaW5nOjAgNHB4O2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7aGVpZ2h0OmluaGVyaXR9LiIsZS5pZCwiIC55YXAtd2FybmluZ190aGVtZV9yZXNwb25zaXZlLW1vYmlsZS55YXAtd2FybmluZ19tZWRpY2Fse2xpbmUtaGVpZ2h0OjZweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjMpO2NvbG9yOiNmZmY7Ym9yZGVyOjA7Zm9udC1zaXplOi44ZW07cGFkZGluZzowIDAgMXB4fS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfdGhlbWVfZ2hvc3R7d2lkdGg6MTAwJTtib3JkZXI6bm9uZX0uIixlLmlkLCIgLnlhcC13YXJuaW5nX3RoZW1lX2dob3N0IC55YXAtd2FybmluZ19fdGV4dHtsaW5lLWhlaWdodDoxN3B4O2ZvbnQtc2l6ZTo4cHg7cGFkZGluZzowO2NvbG9yOiNmZmY7dGV4dC1pbmRlbnQ6NHB4fS4iLGUuaWQsIiAueWFwLXdhcm5pbmdfdGhlbWVfZ2hvc3QgLnlhcC13YXJuaW5nX21lZGljYWwgLnlhcC13YXJuaW5nX190ZXh0e3BhZGRpbmctdG9wOjFweDtsaW5lLWhlaWdodDo3cHg7dmVydGljYWwtYWxpZ246dG9wfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1FVFJJS0FfQ09VTlRFUj0yMjU5Njg3N30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9KGkoMzIwKSxpKDEwKSkscz1pKDMyMSksbD1pKDMwKSxjPXtTOjcsTTo4LEw6OSxYTDoxMixYWEw6MTR9LHU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1hZHR1bmUtaWNvbiIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyksdGhpcy5pY29uU2l6ZXM9Yyx0aGlzLmljb25TaXplPXRoaXMuZ2V0SWNvblNpemUoKX0sdC5wcm90b3R5cGUuZ2V0U2l6ZU1vZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc2l6ZTtyZXR1cm4gZSYmZSBpbiB0aGlzLmljb25TaXplcz9lOiJNIn0sdC5wcm90b3R5cGUuZ2V0SWNvblNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uU2l6ZXNbdGhpcy5nZXRTaXplTW9kKCldfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMsaT10aGlzLmdldFNpemVNb2QoKS50b0xvd2VyQ2FzZSgpLG49dC5pc1RvdWNoLG89ZShlKCksdGhpcy5wcm9wcy5tb2QsIl90b3VjaF8iK24sIl9zaXplXyIraSk7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6b30sclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2NvbnRhaW5lciIpfSx0aGlzLnJlbmRlckljb24oKSxyWyJkZWZhdWx0Il0uY3JlYXRlKHMuVG9vbHRpcCx7YmVtRm9ybWF0dGVyOmUsdGV4dDp0aGlzLmdldFRvb2x0aXBUZXh0KCl9KSkpfSx0LnByb3RvdHlwZS5yZW5kZXJJY29uPWZ1bmN0aW9uKCl7dmFyIGU9e3dpZHRoOnRoaXMuaWNvblNpemUsaGVpZ2h0OnRoaXMuaWNvblNpemV9O3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3N0eWxlOmUsY2xhc3M6dGhpcy5iXygiX19pbWFnZSIsIl9faW1hZ2UtYWRibG9jayIpfSxudWxsKX0sdC5wcm90b3R5cGUuZ2V0VG9vbHRpcFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbC5pMThuKCJISURFX0FEIix0aGlzLnByb3BzLmxhbmd1YWdlKX0sdH0oYSk7dC5BZHR1bmVJY29uPXV9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHIsYSxzLGw9aSgzKSxjPWkoMTQpLHU9aSg0NSksZD1pKDI0MikscD1pKDUyMSksZj1pKDEwKSxoPWkoMTMwKSxnPWkoMTY4KTshZnVuY3Rpb24oZSl7ZVtlWyJob3Jpem9udGFsIl09MF09Imhvcml6b250YWwiLGVbZVsidmVydGljYWwiXT0xXT0idmVydGljYWwiLGVbZVsicm93Il09Ml09InJvdyJ9KHJ8fChyPXt9KSksZnVuY3Rpb24oZSl7ZVsidmVydGljYWwiXT0iX19sYXlvdXQtdmVydGljYWwiLGVbInZlcnRpY2FsX2NvbmRlbnNlZCJdPSJfX2xheW91dC12ZXJ0aWNhbF9jb25kZW5zZWQiLGVbInZlcnRpY2FsX3NtYWxsIl09Il9fbGF5b3V0LXZlcnRpY2FsX3NtYWxsIixlWyJ2ZXJ0aWNhbF9zbWFsbF9jb25kZW5zZWQiXT0iX19sYXlvdXQtdmVydGljYWxfc21hbGwtY29uZGVuc2VkIixlWyJ2ZXJ0aWNhbF8yeDIiXT0iX19sYXlvdXQtdmVydGljYWwtMngyIixlWyJ2ZXJ0aWNhbF8yeDJfc21hbGwiXT0iX19sYXlvdXQtdmVydGljYWwtMngyX3NtYWxsIixlWyJob3Jpem9udGFsX3JvdyJdPSJfX2xheW91dC1yb3ciLGVbImhvcml6b250YWxfcm93X21pZGRsZSJdPSJfX2xheW91dC1yb3dfbWlkZGxlIixlWyJob3Jpem9udGFsX3Jvd19zbWFsbCJdPSJfX2xheW91dC1yb3dfc21hbGwiLGVbImhvcml6b250YWxfcm93X3RpbnkiXT0iX19sYXlvdXQtcm93X3RpbnkiLGVbImhvcml6b250YWxfcm93X3N0cmlwZSJdPSJfX2xheW91dC1yb3dfc3RyaXBlIixlWyJtaW5pbWFsIl09Il9fbGF5b3V0LW1pbmltYWwifShhfHwoYT17fSkpLGZ1bmN0aW9uKGUpe2VbInNtYWxsIl09InNtYWxsIixlWyJsYXJnZSJdPSJsYXJnZSJ9KHN8fChzPXt9KSk7dmFyIF89e3ZlcnRpY2FsOntjbGFzc05hbWU6YS52ZXJ0aWNhbCxvcHRpb25TaXplOnMubGFyZ2V9LHZlcnRpY2FsX2NvbmRlbnNlZDp7Y2xhc3NOYW1lOmEudmVydGljYWxfY29uZGVuc2VkLG9wdGlvblNpemU6cy5sYXJnZX0sdmVydGljYWxfc21hbGw6e2NsYXNzTmFtZTphLnZlcnRpY2FsX3NtYWxsLG9wdGlvblNpemU6cy5zbWFsbH0sdmVydGljYWxfc21hbGxfY29uZGVuc2VkOntjbGFzc05hbWU6YS52ZXJ0aWNhbF9zbWFsbF9jb25kZW5zZWQsb3B0aW9uU2l6ZTpzLnNtYWxsfSx2ZXJ0aWNhbF8yeDI6e2NsYXNzTmFtZTphLnZlcnRpY2FsXzJ4MixvcHRpb25TaXplOnMubGFyZ2V9LHZlcnRpY2FsXzJ4Ml9zbWFsbDp7Y2xhc3NOYW1lOmEudmVydGljYWxfMngyX3NtYWxsLG9wdGlvblNpemU6cy5zbWFsbH0saG9yaXpvbnRhbF9yb3c6e2NsYXNzTmFtZTphLmhvcml6b250YWxfcm93LG9wdGlvblNpemU6cy5sYXJnZX0saG9yaXpvbnRhbF9yb3dfbWlkZGxlOntjbGFzc05hbWU6YS5ob3Jpem9udGFsX3Jvd19taWRkbGUsb3B0aW9uU2l6ZTpzLnNtYWxsfSxob3Jpem9udGFsX3Jvd19zbWFsbDp7Y2xhc3NOYW1lOmEuaG9yaXpvbnRhbF9yb3dfc21hbGwsb3B0aW9uU2l6ZTpzLnNtYWxsfSxob3Jpem9udGFsX3Jvd190aW55OntjbGFzc05hbWU6YS5ob3Jpem9udGFsX3Jvd190aW55LG9wdGlvblNpemU6cy5zbWFsbH0saG9yaXpvbnRhbF9yb3dfc3RyaXBlOntjbGFzc05hbWU6YS5ob3Jpem9udGFsX3Jvd19zdHJpcGUsb3B0aW9uU2l6ZTpzLnNtYWxsfSxtaW5pbWFsOntjbGFzc05hbWU6YS5taW5pbWFsLG9wdGlvblNpemU6cy5zbWFsbH19LHk9e3ZlcnRpY2FsOltfLnZlcnRpY2FsLF8udmVydGljYWxfY29uZGVuc2VkLF8udmVydGljYWxfc21hbGwsXy52ZXJ0aWNhbF9zbWFsbF9jb25kZW5zZWQsXy52ZXJ0aWNhbF8yeDIsXy52ZXJ0aWNhbF8yeDJfc21hbGwsXy5taW5pbWFsXSxob3Jpem9udGFsOltfLnZlcnRpY2FsLF8udmVydGljYWxfY29uZGVuc2VkLF8udmVydGljYWxfc21hbGwsXy52ZXJ0aWNhbF8yeDIsXy52ZXJ0aWNhbF8yeDJfc21hbGwsXy52ZXJ0aWNhbF9zbWFsbF9jb25kZW5zZWQsXy5ob3Jpem9udGFsX3JvdyxfLmhvcml6b250YWxfcm93X21pZGRsZSxfLmhvcml6b250YWxfcm93X3NtYWxsLF8uaG9yaXpvbnRhbF9yb3dfdGlueSxfLm1pbmltYWxdLHJvdzpbXy5ob3Jpem9udGFsX3JvdyxfLmhvcml6b250YWxfcm93X21pZGRsZSxfLmhvcml6b250YWxfcm93X3NtYWxsLF8uaG9yaXpvbnRhbF9yb3dfdGlueSxfLmhvcml6b250YWxfcm93X3N0cmlwZSxfLm1pbmltYWxdLGRlZmF1bHQ6W18udmVydGljYWwsXy52ZXJ0aWNhbF9zbWFsbCxfLnZlcnRpY2FsXzJ4MixfLnZlcnRpY2FsXzJ4Ml9zbWFsbCxfLmhvcml6b250YWxfcm93LF8uaG9yaXpvbnRhbF9yb3dfbWlkZGxlLF8uaG9yaXpvbnRhbF9yb3dfc21hbGwsXy5ob3Jpem9udGFsX3Jvd190aW55LF8ubWluaW1hbF19LG09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LmdldE9yaWVudGF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xpZW50V2lkdGgsaT1lLmNsaWVudEhlaWdodCxuPXIudmVydGljYWw7cmV0dXJuIHQvaT4xJiYobj1yLmhvcml6b250YWwpLHQvaT4xLjUmJmk8MTAwJiYobj1yLnJvdyksbn0sdC5oYXNIb3Jpem9udGFsU2Nyb2xsPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNjcm9sbFdpZHRoLWUuY2xpZW50V2lkdGg+Mn0sdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5pbml0U3RhdGUoKSx0aGlzLnNlbGVjdGVkTGF5b3V0PXtjbGFzc05hbWU6YS52ZXJ0aWNhbCxvcHRpb25TaXplOnMubGFyZ2V9LHRoaXMucmVuZGVyZWRPcHRpb25zPSgodD17fSlbcy5zbWFsbF09W10sdFtzLmxhcmdlXT1bXSx0KSx0aGlzLm5hbWU9InlhcC1hYnVzZS1tZXNzYWdlIix0aGlzLnZpc2liaWxpdHlDbGFzcz0ieWFwLWFidXNlLW1lc3NhZ2VfdmlzaWJsZSIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLm9uTW91bnQ9ZnVuY3Rpb24oKXsodGhpcy5hYnVzZT10aGlzLmdldFJlc291cmNlQnlJZCgiYWJ1c2UiKSx0aGlzLmFidXNlRWxlbWVudD10aGlzLmFidXNlJiZ0aGlzLmFidXNlLmdldEVsZW1lbnQoKSx0aGlzLmNvbnRhaW5lcj10aGlzLmdldFJlc291cmNlQnlJZCgiY29udGFpbmVyIiksdGhpcy5jb250YWluZXJFbGVtZW50PXRoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50KCksdGhpcy5hYnVzZUVsZW1lbnQmJnRoaXMuY29udGFpbmVyRWxlbWVudCYmdGhpcy5zdGF0ZS53YXNPcGVuZWRGZWVkYmFjaykmJih0aGlzLnNldE9yaWVudGF0aW9uKCksdGhpcy5zZWxlY3RMYXlvdXQoKSl9LHQucHJvdG90eXBlLnVwZGF0ZUZvclNpemU9ZnVuY3Rpb24oZSl7ZXx8KHRoaXMuc3RhdGUud2FzT3BlbmVkRmVlZGJhY2s9ITAsdGhpcy51cGRhdGUoKSl9LHQucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLnJvb3RDb21wb25lbnQuYWRkQ2xhc3ModGhpcy52aXNpYmlsaXR5Q2xhc3MpfSx0LnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7dGhpcy5yb290Q29tcG9uZW50LnJlbW92ZUNsYXNzKHRoaXMudmlzaWJpbGl0eUNsYXNzKX0sdC5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5oYXNDbGFzcyh0aGlzLnZpc2liaWxpdHlDbGFzcyl9LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS53YXNPcGVuZWRGZWVkYmFjaz9sWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImFidXNlIixjbGFzczp0aGlzLmJfKCl9LGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiY29udGFpbmVyIixjbGFzczp0aGlzLmJfKCJfX2NvbnRhaW5lciIpfSx0aGlzLnJlbmRlckhpZGUoKSxsWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnRoaXMuYl8oIl9fY29tcGxhaW50Iil9LHRoaXMucmVuZGVyT3B0aW9ucyhzLnNtYWxsKSx0aGlzLnJlbmRlck9wdGlvbnMocy5sYXJnZSksbFsiZGVmYXVsdCJdLmNyZWF0ZShwLkFkdHVuZU1lc3NhZ2Use2xhbmd1YWdlOnRoaXMucHJvcHMubGFuZ3VhZ2UsaXNCaWc6dGhpcy5wcm9wcy5pc0JpZ30pKSkpOmxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiYWJ1c2UifSl9LHQucHJvdG90eXBlLmluaXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuc3RhdGU9e3dhc09wZW5lZEZlZWRiYWNrOiExLG9yaWVudGF0aW9uOnIudmVydGljYWx9fSx0LnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UGFyZW50Q29tcG9uZW50KCksaT1lJiZlLmdldEVsZW1lbnQoKTtpJiYodGhpcy5zdGF0ZS5vcmllbnRhdGlvbj10LmdldE9yaWVudGF0aW9uKGkpKX0sdC5wcm90b3R5cGUuc2VsZWN0TGF5b3V0PWZ1bmN0aW9uKCl7dmFyIGU9W107c3dpdGNoKHRoaXMuc3RhdGUub3JpZW50YXRpb24pe2Nhc2Ugci52ZXJ0aWNhbDplPXkudmVydGljYWw7YnJlYWs7Y2FzZSByLmhvcml6b250YWw6ZT15Lmhvcml6b250YWw7YnJlYWs7Y2FzZSByLnJvdzplPXkucm93O2JyZWFrO2RlZmF1bHQ6ZT15WyJkZWZhdWx0Il19dGhpcy50cnlMYXlvdXRzKGUpfSx0LnByb3RvdHlwZS50cnlMYXlvdXRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgaT1lW3RdLG49ZVt0LTFdLG89biYmbi5vcHRpb25TaXplO2lmKDA9PT10JiYobz1pLm9wdGlvblNpemUsdGhpcy5hYnVzZS5hZGRDbGFzcyh0aGlzLmJfKGkuY2xhc3NOYW1lKSkpLCF0aGlzLmlzTGF5b3V0T3ZlcmZsb3dzKG8pKXtpZigwPT09dCl7dGhpcy5zZWxlY3RlZExheW91dD1pLHRoaXMuYWJ1c2UuYWRkQ2xhc3ModGhpcy5iXyhpLmNsYXNzTmFtZSkpO2JyZWFrfXRoaXMuc2VsZWN0ZWRMYXlvdXQ9aTticmVha31uJiZ0aGlzLmFidXNlLnJlbW92ZUNsYXNzKHRoaXMuYl8obi5jbGFzc05hbWUpKSx0aGlzLmFidXNlLmFkZENsYXNzKHRoaXMuYl8oaS5jbGFzc05hbWUpKX19LHQucHJvdG90eXBlLmlzTGF5b3V0T3ZlcmZsb3dzPWZ1bmN0aW9uKGUpe3JldHVybiBoLmhhc1Njcm9sbEluUGFyZW50RWxlbWVudCh0aGlzLmFidXNlRWxlbWVudCl8fGguaGFzU2Nyb2xsSW5QYXJlbnRFbGVtZW50KHRoaXMuY29udGFpbmVyRWxlbWVudCl8fHQuaGFzSG9yaXpvbnRhbFNjcm9sbCh0aGlzLmNvbnRhaW5lckVsZW1lbnQpfHx0aGlzLmhhc1Njcm9sbEluT3B0aW9ucyhlKX0sdC5wcm90b3R5cGUuaGFzU2Nyb2xsSW5PcHRpb25zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVuZGVyZWRPcHRpb25zW2VdO3JldHVybiB1LnNvbWUodCxmdW5jdGlvbihlKXtyZXR1cm4gaC5oYXNTY3JvbGxJbkVsZW1lbnQoZS5nZXRFbGVtZW50KCkpfSl9LHQucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGcub3B0aW9ucyh0aGlzLnByb3BzLmxhbmd1YWdlKVtlXX0sdC5wcm90b3R5cGUuY2hvb3NlT3B0aW9uSW1wPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcyxuPWUudGFyZ2V0LG89biYmbi5nZXRBdHRyaWJ1dGUoImRhdGEtb3B0aW9uLWlkIik7byYmZC5jaG9vc2VPcHRpb24obyx0aGlzLnByb3BzLmFidXNlVXJsLHQsZnVuY3Rpb24oKXtyZXR1cm4gaS5nZXRPcHRpb25zKHQpfSxmdW5jdGlvbigpe2kuaGlkZSgpLGkuZmlyZUV2ZW50KCJyZWNlaXZlZDpmZWVkYmFjayIsbyl9KX0sdC5wcm90b3R5cGUucmVuZGVyT3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLnJlbmRlcmVkT3B0aW9uc1tlXT1bXSxjLm1hcCh0aGlzLmdldE9wdGlvbnMoZSksZnVuY3Rpb24oaSxuKXt2YXIgbz1sWyJkZWZhdWx0Il0uY3JlYXRlKCJhIix7cmVzb3VyY2VJZDoiIixjbGFzczp0LmJfKCJfX2NvbXBsYWludC1saW5rIiksImRhdGEtb3B0aW9uLWlkIjppLmlkLG9uQ2xpY2s6ZnVuY3Rpb24oaSl7cmV0dXJuIHQuY2hvb3NlT3B0aW9uSW1wKGksZSl9fSxpLnRleHQpO3JldHVybiB0LnJlbmRlcmVkT3B0aW9uc1tlXS5wdXNoKG8pLGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dC5iXygiX19jb21wbGFpbnQtaXRlbSIsIl9fY29tcGxhaW50LWl0ZW1fIitlKX0sbyl9LHRoaXMpfSx0LnByb3RvdHlwZS5yZW5kZXJIaWRlPWZ1bmN0aW9uKCl7dmFyIGU9Zy50aXRsZXModGhpcy5wcm9wcy5sYW5ndWFnZSk7cmV0dXJuIGxbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dGhpcy5iXygiX19sb2dvLXdyYXBwZXIiKX0sbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0aGlzLmJfKCJfX2xvZ29fc21hbGwiKX0sZS5zbWFsbCksbFsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0aGlzLmJfKCJfX2xvZ28iKX0sZS5sYXJnZSkpfSx0fShmKTt0LkFidXNlTWVzc2FnZT1tfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDMyMCkscz1pKDEwKSxsPWkoMzApLGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9InlhcC1hZHR1bmUtbWVzc2FnZSIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfLHQ9dGhpcy5wcm9wcyxpPXQuaXNCaWc/Il9iaWciOiIiO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoZSgpLGkpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fY29udGFpbmVyIil9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19pY29uIil9LGEucmVuZGVyRG9uZUljb24oKSksclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX3RleHQiKX0sbC5pMThuKCJUSEFOS1NfQURfSElEREVOIix0Lmxhbmd1YWdlKSkpKX0sdH0ocyk7dC5BZHR1bmVNZXNzYWdlPWN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNUZXN0aW5nUGFnZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09dCYmKHQ9d2luZG93KSxpKDgzKS5pc0luSWZyYW1lKHQpJiYoL15wYXJ0bmVyLWNvZGVcLnlhbmRleFwucnUvaS50ZXN0KGxvY2F0aW9uLmhvc3QpfHwvXig/OjEwNjcxMil8KD86MTA2NzEzKSQvLnRlc3QoZSkpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtcGljdHVyZS1iZ3t6LWluZGV4OjE7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyfS4iLGUuaWQsIiAueWFwLXBpY3R1cmUtYmcsLiIsZS5pZCwiIC55YXAtcGljdHVyZS1iZ19fcGljdHVyZXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1iZ19fcGljdHVyZXt6LWluZGV4OjN9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1iZyAueWFwLXBpY3R1cmVfX2ltZ3twb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1waWN0dXJlLWJnX19waWN0dXJlX2Z1bGwtd2lkdGhfZmFsc2V7ZGlzcGxheTppbmxpbmUtYmxvY2t9LiIsZS5pZCwiIC55YXAtcGljdHVyZS1iZ19fbGlua3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjM7dG9wOjA7bGVmdDowO3dpZHRoOjIwMHB4O2hlaWdodDoyMDBweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1pbmRlbnQ6LTQwMDBweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYmd7cG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bGVmdDowO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiIsZS5zZXR0aW5ncy5iZ0NvbG9yfHwiI2ZmZiIsIn0uIixlLmlkLCIgLnlhcC1iZ19fYmcsLiIsZS5pZCwiIC55YXAtYmdfX3N2Z3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvcGFjaXR5Oi4zfS4iLGUuaWQsIiAueWFwLWJnX19zdmcgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjIwMCU7aGVpZ2h0OjIwMCU7bGVmdDotNTAlO3RvcDotNTAlfS4iLGUuaWQsIiAueWFwLWJnX19iZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgyKTt0cmFuc2Zvcm06c2NhbGUoMik7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciAzMCU7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgMzAlOy13ZWJraXQtZmlsdGVyOmJsdXIoIixlLmJsdXJTaXplLCJweCk7ZmlsdGVyOmJsdXIoIixlLmJsdXJTaXplLCJweCl9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3RbImRlZmF1bHQiXT1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDA9PT1lP3t9OmUsaT10LndpZHRoLG49dC5oZWlnaHQsbz10LnZpZXdwb3J0V2lkdGgscj10LnZpZXdwb3J0SGVpZ2h0LGE9dC5zdHJldGNoLHM9aS9uPm8vcixsPW88aXx8YT9vOmksYz1yPG58fGE/cjpuLHU9aSooYy9uKSxkPW4qKGwvaSk7cmV0dXJue3dpZHRoOnM/bDp1LGhlaWdodDpzP2Q6Yyxib3g6ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwPT09ZT97fTplLGk9dC5pc1dpZHRoT3JpZW50YWwsbj10LnZpZXdwb3J0V2lkdGgsbz10LnZpZXdwb3J0SGVpZ2h0LHI9dC5uZXdXaWR0aCxhPXQubmV3SGVpZ2h0LHM9dC53aWR0aCxsPXQuaGVpZ2h0LGM9aT9yOm4sdT1pP286YTtyZXR1cm57d2lkdGg6YyxoZWlnaHQ6dSx0b3A6aT8wOihsLXUpLzIsbGVmdDppPyhzLWMpLzI6MH19KHtpc1dpZHRoT3JpZW50YWw6cyx2aWV3cG9ydFdpZHRoOmwsdmlld3BvcnRIZWlnaHQ6YyxuZXdXaWR0aDp1LG5ld0hlaWdodDpkLHdpZHRoOm8saGVpZ2h0OnJ9KX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuZ2V0SnNUcmFjZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5ld0VudHJpZXMoKTtyZXR1cm4gZT97dGFnczplfTpudWxsfSx0fShpKDUyNykuTmV0d29ya1BlcmZvbWFuY2VNYW5hZ2VyKTt0Lm5ldHdvcmtQZXJmb21hY2VNYW5hZ2VyPW5ldyByKFt7cHJlZml4OiJDIixyZTovXC9jb250ZXh0XC5qcyQvaX0se3ByZWZpeDoiQ1MiLHJlOi9cL2NvbnRleHRfc3RhdGljW1xkXHddKlwuanMkL2l9LHtwcmVmaXg6IlAiLHJlOi9cL2FuXC55YW5kZXhcLnJ1XC9wYWdlXC8vaX0se3ByZWZpeDoiTSIscmU6L1wvYW5cLnlhbmRleFwucnVcL21ldGFcLy9pfSx7cHJlZml4OiJJIixyZTovXC9hdmF0YXJzXC5tZHNcLnlhbmRleFwubmV0XC8vaX1dKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPWZ1bmN0aW9uKCl7cmV0dXJuKG89T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVsiV2FpdCJdPSIwMTAiLGVbIkROUyJdPSIwMjAiLGVbIlRDUCJdPSIwMzAiLGVbIlNTTCJdPSIwNDAiLGVbIlRURkIiXT0iMDUwIixlWyJSZXNwb25zZSJdPSIwNjAifShufHwobj17fSkpO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ+MCYmZT4wP01hdGgucm91bmQoZS10KTowfSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PXdpbmRvdyksdGhpcy5wcmVmaXhlcz1lLHRoaXMuY2FjaGU9W10sdGhpcy53aW5kb3dzPVtdLHRoaXMucmVnaXN0ZXJXaW4odCl9cmV0dXJuIGUucHJvdG90eXBlLnJlZ2lzdGVyV2luPWZ1bmN0aW9uKGUpe3RoaXMud2luZG93cy5wdXNoKGUpfSxlLnByb3RvdHlwZS5nZXROZXdFbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0UGVyZm9ybWFuY2VFbnRyaWVzKCksbj17fTtyZXR1cm4gaSg1KS5mb3JFYWNoKHQsZnVuY3Rpb24odCl7aWYodCYmLTE9PT1pKDIzKS5pbmRleE9mKGUuY2FjaGUsdCkpe2UuY2FjaGUucHVzaCh0KTt2YXIgcj1lLmdldFByZWZpeCh0Lm5hbWUpO249byhvKHt9LG4pLGUuZ2V0TmV0d29ya09iamVjdCh0LHIpKX19KSxPYmplY3Qua2V5cyhuKS5sZW5ndGg/bjpudWxsfSxlLnByb3RvdHlwZS5nZXRQZXJmb3JtYW5jZUVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGkoNSkuZm9yRWFjaCh0aGlzLndpbmRvd3MsZnVuY3Rpb24oZSl7dHJ5e3Q9dC5jb25jYXQoZS5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzKCkpfWNhdGNoKGUpe319KSxpKDIyKS5maWx0ZXIodCxmdW5jdGlvbih0KXtyZXR1cm4gaSgyNykuaXNPYmplY3QodCkmJmkoNDUpLnNvbWUoZS5wcmVmaXhlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZS50ZXN0KHQubmFtZSl9KX0pfSxlLnByb3RvdHlwZS5nZXRQcmVmaXg9ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuIGkoNSkuZm9yRWFjaCh0aGlzLnByZWZpeGVzLGZ1bmN0aW9uKGkpe2kucmUudGVzdChlKSYmKHQ9aS5wcmVmaXgpfSksdH0sZS5wcm90b3R5cGUuZ2V0TmV0d29ya09iamVjdD1mdW5jdGlvbihlLHQpe3ZhciBpPXt9LG89cihlLmRvbWFpbkxvb2t1cFN0YXJ0LGUuc3RhcnRUaW1lKTtvJiYoaVt0KyJfIituLldhaXRdPW8pO3ZhciBhPXIoZS5kb21haW5Mb29rdXBFbmQsZS5kb21haW5Mb29rdXBTdGFydCk7YSYmKGlbdCsiXyIrbi5ETlNdPWEpO3ZhciBzPXIoZS5jb25uZWN0RW5kLGUuY29ubmVjdFN0YXJ0KTtzJiYoaVt0KyJfIituLlRDUF09cyk7dmFyIGw9cihlLmNvbm5lY3RFbmQsZS5zZWN1cmVDb25uZWN0aW9uU3RhcnQpO2wmJihpW3QrIl8iK24uU1NMXT1sKTt2YXIgYz1yKGUucmVzcG9uc2VTdGFydCxlLnJlcXVlc3RTdGFydCk7YyYmKGlbdCsiXyIrbi5UVEZCXT1jKTt2YXIgdT1yKGUucmVzcG9uc2VFbmQsZS5yZXNwb25zZVN0YXJ0KTtyZXR1cm4gdSYmKGlbdCsiXyIrbi5SZXNwb25zZV09dSksaX0sZX0oKTt0Lk5ldHdvcmtQZXJmb21hbmNlTWFuYWdlcj1hfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1waWN0dXJle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLXBpY3R1cmVfX2NvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0YXAtaGlnaGxpZ2h0LWNvbG9yOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS4iLGUuaWQsIiAueWFwLXBpY3R1cmVfX2ltZ3tkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTt3aWxsLWNoYW5nZTpvcGFjaXR5O3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZX0uIixlLmlkLCIgLnlhcC1waWN0dXJlX3RvdWNoX2ZhbHNlIC55YXAtcGljdHVyZV9faW1nOmhvdmVye29wYWNpdHk6Ljh9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz1pKDMpLHI9KG49bykmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciBhPWkoMTApLHM9aSgwKSxsPWkoNTMwKSxjPXJbImRlZmF1bHQiXS5jcmVhdGVDb21wb25lbnQoYSx7bmFtZToieWFwLXBpY3R1cmUtc3R1YiIsYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdHlsZXMobCl9LGdldERvbWFpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BzLmFkdi5kb21haW59LGdldER1bW15U2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmZpdENvbnRhaW5lcixpPWUuc2l6ZTtyZXR1cm57d2lkdGg6aS53aWR0aD09PTEvMHx8dD8iMTAwJSI6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHQ9PT0xLzB8fHQ/IjEwMCUiOmkuaGVpZ2h0fX0sX3JlbmRlcjpmdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5nZXREb21haW4oKSxvPXRoaXMucHJvcHMuYWR2O3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKGkuTGluayx7Y2xhc3M6ZShlKCksdFsiY2xhc3MiXSx0aGlzLm1vZCksaHJlZjpvLnVybCx0eXBlOiJwaWN0dXJlLXN0dWIiLHRhcmdldDoiX2JsYW5rIixzdHlsZTp0aGlzLmdldER1bW15U2l6ZSgpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fd2FsbCIpfSxzLmxvb3AoMjAsZnVuY3Rpb24odCl7dmFyIGk9dCUyPT0wPyJvZGQiOiJldmVuIjtyZXR1cm4gclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX3JvdyIsIl9fcm93XyIraSl9LHMubG9vcCgyMCxmdW5jdGlvbigpe3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fY29sdW1uIil9LHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX190ZXh0Iil9LG4pKX0pKX0pKSl9fSk7ZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLXBpY3R1cmUtc3R1Yntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiIsZS51dGlscy53YXJuaW5nLmdldEJvcmRlckNvbG9yKGUuc2V0dGluZ3MuYmdDb2xvcnx8IiNGRkZGRkYiLGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiLC41KSwiO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDdlbTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MudGl0bGVDb2xvcnx8IiMwMDAwQ0MiKS50b1JlYWRhYmxlKCksIn0uIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJfX3dhbGx7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01MCU7bGVmdDotNTAlO3dpZHRoOjIwMCU7aGVpZ2h0OjIwMCU7dGV4dC1hbGlnbjpjZW50ZXI7b3BhY2l0eTouNDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTMwZGVnKTt0cmFuc2Zvcm06cm90YXRlKC0zMGRlZyk7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS4iLGUuaWQsIiAueWFwLXBpY3R1cmUtc3R1Yl9fcm93e3BhZGRpbmc6MTBweCAwO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJfX2NvbHVtbntkaXNwbGF5OmlubGluZS1ibG9ja30uIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJfX3RleHR7ZmxvYXQ6bGVmdDtwYWRkaW5nOjAgMTVweH0uIixlLmlkLCIgLnlhcC1waWN0dXJlLXN0dWJfX3Jvd19ldmVuIC55YXAtcGljdHVyZS1zdHViX190ZXh0e21hcmdpbi1sZWZ0Oi01MCV9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG89ZnVuY3Rpb24oZSx0KXt2YXIgaT17fTtmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdC5pbmRleE9mKG4pPDAmJihpW25dPWVbbl0pO2lmKG51bGwhPWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7bzxuLmxlbmd0aDtvKyspdC5pbmRleE9mKG5bb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG5bb10pJiYoaVtuW29dXT1lW25bb11dKX1yZXR1cm4gaX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU0VQQVJBVEVfU0lHTj0iXyIsdC5DUkVBVEVfVEFHU19GT1JfU1RBVFNfREVGQVVMVD1mdW5jdGlvbihlKXt2YXIgbyxyPWUuZXZlbnRUeXBlLGE9ZS5ldmVudE5hbWUscz1lLnZhbHVlLGw9ZS52YWx1ZXMsYz17fTtyZXR1cm4gaSg0NykuZm9yT3duKGwsZnVuY3Rpb24oZSxpKXtjWyIiK3IrdC5TRVBBUkFURV9TSUdOK2ErdC5TRVBBUkFURV9TSUdOK2ldPWV9KSxuKCgobz17fSlbIiIrcit0LlNFUEFSQVRFX1NJR04rYV09cyxvKSxjKX07dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNGYXRhbD9pKDQxKS5TdGF0c0V2ZW50VHlwZS5mYXRhbDppKDQxKS5TdGF0c0V2ZW50VHlwZS5lcnJvcn0sYT0vXlx3KFwtfF98Onxcc3xcLnxcdyl7MSwyMH0kLyxzPS9eXHcoXC18X3w6fFxzfFwufFx3KXswLDcwfSQvLGw9L15cdyhcLXxffDp8XHN8XC58XHcpezEsNzB9JC8sYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIGE9dGhpczt0aGlzLnJvb3RGaWVsZHM9e30sdGhpcy5sYWJlbHM9e30sdGhpcy5ldmVudD1mdW5jdGlvbihlKXt2YXIgdD1lLm5hbWUsbj1lLmRhdGEsbz1lLmxhYmVscyxyPWUucHJvYmFiaWxpdHkscz1lLmV4dHJhUm9vdEZpZWxkczthLnB1c2goe2V2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS5ldmVudCxldmVudE5hbWU6dCxkYXRhOm4sYWRkaXRpb25hbFN0YXRzTGFiZWxzOm8scHJvYmFiaWxpdHk6cixleHRyYVJvb3RGaWVsZHM6c30pfSx0aGlzLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZXJyb3Isbj1lLmxhYmVscyxvPWUucHJvYmFiaWxpdHkscz1lLmV4dHJhUm9vdEZpZWxkcyxsPW5ldyhpKDEyMSkuQ3VzdG9tRXJyb3IpKHQpO2EucHVzaCh7ZXZlbnROYW1lOlN0cmluZyhsLmNvZGUpLGV2ZW50VHlwZTpyKGwpLGRhdGE6bCxhZGRpdGlvbmFsU3RhdHNMYWJlbHM6bixwcm9iYWJpbGl0eTpvLGV4dHJhUm9vdEZpZWxkczpzfSl9LHRoaXMudmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS52YWx1ZSxvPWUuZGF0YSxyPWUubGFiZWxzLHM9ZS5wcm9iYWJpbGl0eSxsPWUuZXh0cmFSb290RmllbGRzO2EucHVzaCh7ZXZlbnROYW1lOnQsdmFsdWU6bixldmVudFR5cGU6aSg0MSkuU3RhdHNFdmVudFR5cGUudmFsdWUsZGF0YTpvLGFkZGl0aW9uYWxTdGF0c0xhYmVsczpyLHByb2JhYmlsaXR5OnMsZXh0cmFSb290RmllbGRzOmx9KX0sdGhpcy52YWx1ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS52YWx1ZXMsbz1lLmRhdGEscj1lLmxhYmVscyxzPWUucHJvYmFiaWxpdHksbD1lLmV4dHJhUm9vdEZpZWxkczthLnB1c2goe2V2ZW50TmFtZTp0LGV2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS52YWx1ZXMsZGF0YTpvLGFkZGl0aW9uYWxTdGF0c0xhYmVsczpyLHByb2JhYmlsaXR5OnMsdmFsdWVzOm4sZXh0cmFSb290RmllbGRzOmx9KX0sdGhpcy53YXJuaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxuPWUubWVzc2FnZSxvPWUucHJvYmFiaWxpdHkscj1lLmV4dHJhUm9vdEZpZWxkcztpKDI3KS5pc09iamVjdChjb25zb2xlKSYmaSg3KS5pc0Z1bmN0aW9uKGNvbnNvbGUud2FybikmJmNvbnNvbGUud2FybihuKSxhLnB1c2goe2V2ZW50TmFtZTp0LGV2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS53YXJuaW5nLGRhdGE6e21lc3NhZ2U6bn0scHJvYmFiaWxpdHk6byxleHRyYVJvb3RGaWVsZHM6cn0pfSx0aGlzLmdldFBhcmFtcz1mdW5jdGlvbigpe3ZhciBlPWEucGFyYW1zO2Uub25Mb2dFcnJvcjtyZXR1cm4gbyhlLFsib25Mb2dFcnJvciJdKX0sdGhpcy5zZXRSb290RmllbGRzPWZ1bmN0aW9uKGUpe2koMTIyKS5nZXRPYmplY3RFbnRyaWVzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxpPWVbMV07dm9pZCAwPT09aT9kZWxldGUgYS5yb290RmllbGRzW3RdOmEucm9vdEZpZWxkc1t0XT1pfSl9LHRoaXMuc2V0TGFiZWxzPWZ1bmN0aW9uKGUpe2koMTIyKS5nZXRPYmplY3RFbnRyaWVzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxpPWVbMV07dm9pZCAwPT09aT9kZWxldGUgYS5sYWJlbHNbdF06YS5sYWJlbHNbdF09aX0pfSx0aGlzLmV2ZW50VG9TdGF0cz1mdW5jdGlvbihlLHQsbixvKXthLnB1c2goe2V2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS5ldmVudCxldmVudE5hbWU6ZSxkYXRhOnQsYWRkaXRpb25hbFN0YXRzTGFiZWxzOm4sZXh0cmFSb290RmllbGRzOm99KX0sdGhpcy5lcnJvclRvU3RhdHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW5ldyhpKDEyMSkuQ3VzdG9tRXJyb3IpKGUpO2EucHVzaCh7ZXZlbnROYW1lOlN0cmluZyhvLmNvZGUpLGV2ZW50VHlwZTpyKG8pLGRhdGE6byxhZGRpdGlvbmFsU3RhdHNMYWJlbHM6dCxleHRyYVJvb3RGaWVsZHM6bn0pfSx0aGlzLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oZSx0KXtpKDI3KS5pc09iamVjdChjb25zb2xlKSYmaSg3KS5pc0Z1bmN0aW9uKGNvbnNvbGUud2FybikmJmNvbnNvbGUud2Fybih0KSxhLnB1c2goe2V2ZW50TmFtZTplLGV2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS5kZXByZWNhdGVkLGRhdGE6e21lc3NhZ2U6dH19KX0sdGhpcy52YWx1ZVRvU3RhdHM9ZnVuY3Rpb24oZSx0LG4sbyl7YS5wdXNoKHtldmVudE5hbWU6ZSx2YWx1ZTp0LGV2ZW50VHlwZTppKDQxKS5TdGF0c0V2ZW50VHlwZS52YWx1ZSxkYXRhOm4sYWRkaXRpb25hbFN0YXRzTGFiZWxzOm99KX07dmFyIHM9dC5vbkxvZ0Vycm9yO3RoaXMucGFyYW1zPW4obih7fSx0KSx7c2lkOnQuc2lkfHxpKDcwKS5nZW5lcmF0ZUhleFN0cmluZyhpKDMyNCkuREVGQVVMVF9TSURfTEVOR1RIKSxvbkxvZ0Vycm9yOnM/ZnVuY3Rpb24oZSl7dHJ5e3MoZSl9Y2F0Y2goZSl7aSgxOTcpLnJldGhyb3dFcnJvcihlKX19OmkoMTk3KS5yZXRocm93RXJyb3J9KSx0aGlzLmxvZ1VybD1lLmdldExvZ1VybCh0KSx0aGlzLmlzU3RybUxvZ1VybD10aGlzLmxvZ1VybD09PWkoMTQwKS5TVFJNX0xPR1NfVVJMfXJldHVybiBlLmdldExvZ1VybD1mdW5jdGlvbihlKXtyZXR1cm4gZS5sb2dVcmw/ZS5sb2dVcmw6ITA9PT1lLnVzZUFsaWFzP2koMTQwKS5QQ09ERV9MT0dTX1VSTF9BTElBUzppKDE0MCkuUENPREVfTE9HU19VUkx9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dmFyIG8scj10LmV2ZW50TmFtZSxhPXQuZXZlbnRUeXBlLHM9dC5kYXRhLGw9dm9pZCAwPT09cz97fTpzLGM9dC5hZGRpdGlvbmFsU3RhdHNMYWJlbHMsdT10LnZhbHVlLGQ9dm9pZCAwPT09dT8xOnUscD10LnByb2JhYmlsaXR5LGY9dm9pZCAwPT09cD8xOnAsaD10LnZhbHVlcyxnPXZvaWQgMD09PWg/e306aCxfPXQuZXh0cmFSb290RmllbGRzLHk9dm9pZCAwPT09Xz97fTpfO2lmKGkoNTM0KS5wb3J0aW9uKGYpKXt2YXIgbT10aGlzLnBhcmFtcyxiPW0uc2VydmljZSx2PW0udmVyc2lvbix3PXtzZXJ2aWNlOmIsdmVyc2lvbjp2LGRhdGE6bCxldmVudE5hbWU6cixldmVudFR5cGU6YSxhZGRpdGlvbmFsU3RhdHNMYWJlbHM6Yyx2YWx1ZTpkLHZhbHVlczpnfTtpZihlLmlzU2VuZGluZ0RhdGEpdGhyb3cgbmV3KGkoMTIxKS5DdXN0b21FcnJvcikoe21lc3NhZ2U6IlJlY3Vyc2l2ZVN0YXRzUmVxdWVzdHMiLGRldGFpbHM6e3NlcnZpY2U6Yix2ZXJzaW9uOnYsZXZlbnRUeXBlOmEsZXZlbnROYW1lOnJ9fSk7ZS5pc1NlbmRpbmdEYXRhPSEwO3RyeXt2YXIgeD10aGlzLmxvZ1VybDt0aGlzLnBhcmFtcy5zZW5kT25seVByaW1hcnlQYXJhbXN8fCh4PWkoNDIpLmFkZFBhcmFtc1RvVXJsKHRoaXMubG9nVXJsLG4oKChvPXt9KVtiXT12LG9bYV09cixvKSxjKSkpO3ZhciBrPXRoaXMuY3JlYXRlRnVsbFN0YXRzT2JqZWN0KHcseSksQz15LnJvdXRlVG9KU1RyYWNlcixTPXZvaWQgMD09PUN8fEM7dGhpcy5pc1N0cm1Mb2dVcmwmJlMmJihrLnJvdXRlVG9KU1RyYWNlcj0hMCksdGhpcy5zZW5kRGF0YSh4LGkoMzIyKS5qc29uU3RyaW5naWZ5Q2lyY3VsYXIoaykpfWNhdGNoKHQpe2UuaXNTZW5kaW5nRGF0YT0hMSx0aGlzLnBhcmFtcy5vbkxvZ0Vycm9yKG5ldyhpKDEyMSkuQ3VzdG9tRXJyb3IpKHQse2RldGFpbHM6e3NlcnZpY2U6Yix2ZXJzaW9uOnYsZXZlbnRUeXBlOmEsZXZlbnROYW1lOnJ9fSkpfWUuaXNTZW5kaW5nRGF0YT0hMX19LGUucHJvdG90eXBlLnNlbmREYXRhPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5wYXJhbXMudXNlU2VuZEJlYWNvbiYmaSg1MzUpLnNlbmRCZWFjb25TaGltKGUsdCkpcmV0dXJuO2koOTMpLnJlcXVlc3Qoe3VybDplLGRhdGE6dCxtZXRob2Q6IlBPU1QiLG9uQmVmb3JlU2VuZDp0aGlzLnBhcmFtcy5vbkJlZm9yZVNlbmR9KX0sZS5wcm90b3R5cGUuY3JlYXRlRnVsbFN0YXRzT2JqZWN0PWZ1bmN0aW9uKGUsbyl7dmFyIHI9ZS5zZXJ2aWNlLGM9ZS52ZXJzaW9uLHU9ZS5ldmVudE5hbWUsZD1lLmV2ZW50VHlwZSxwPWUuZGF0YSxmPWUuYWRkaXRpb25hbFN0YXRzTGFiZWxzLGg9ZS52YWx1ZSxnPSh0aGlzLnBhcmFtcy5jcmVhdGVUYWdzRnVuY3Rpb258fHQuQ1JFQVRFX1RBR1NfRk9SX1NUQVRTX0RFRkFVTFQpKGUpLF89bihuKG4oe30sdGhpcy5sYWJlbHMpLGYpLHt2ZXJzaW9uOnRoaXMucGFyYW1zLnZlcnNpb259KSx5PXtzZXJ2aWNlOnIsdGFnczppKDMyNikuZW50cmllc1RvT2JqZWN0KGkoMTIyKS5nZXRPYmplY3RFbnRyaWVzKGcpLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLG49ZVsxXTtyZXR1cm4gbC50ZXN0KHQpP1t0LG5dOltpKDIxNikuUkVDT1ZFUl9QQVJBTVMuc2Vuc29yTmFtZSxuXX0pKSxsYWJlbHM6aSgzMjYpLmVudHJpZXNUb09iamVjdChpKDEyMikuZ2V0T2JqZWN0RW50cmllcyhfKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXSxuPWVbMV07cmV0dXJuIGEudGVzdCh0KXx8KHQ9aSgyMTYpLlJFQ09WRVJfUEFSQU1TLmxhYmVsS2V5KSxzLnRlc3Qobil8fChuPWkoMjE2KS5SRUNPVkVSX1BBUkFNUy5sYWJlbFZhbHVlKSxbdCxuXX0pKX0sbT1pKDIxNykuZ2V0VG9wTG9jYXRpb25EYXRhKGRvY3VtZW50KSxiPW0ubG9jYXRpb24sdj1tLnJlZmVycmVyO3JldHVybiBuKG4obihuKHt9LG8pLHRoaXMucm9vdEZpZWxkcykseSkse3RpbWVzdGFtcDpEYXRlLm5vdygpLGV2ZW50VHlwZTpkLGV2ZW50TmFtZTp1LGRhdGE6cCxzaWQ6dGhpcy5wYXJhbXMuc2lkLHZlcnNpb246Yyxsb2NhdGlvbjppKDIwNykuZ2V0V2luZG93TG9jYXRpb24od2luZG93KSx0b3BMb2NhdGlvbjpiLHRvcEFuY2VzdG9yOmkoMzI4KS5UT1BfQU5DRVNUT1IsaXNUb3BBbmNlc3RvclVuZGV0ZXJtaW5lZDohaSgzMjgpLklTX1RPUF9BTkNFU1RPUl9UUlVTVEVEfHx2b2lkIDAsYW5jZXN0b3JPcmlnaW5zOmkoNTQyKS5BTkNFU1RPUl9PUklHSU5TLGRvY3VtZW50SXNWaXNpYmxlOmkoNTQzKS5nZXREb2N1bWVudFZpc2liaWxpdHkoZG9jdW1lbnQpLHJlZmVycmVyOndpbmRvdy5kb2N1bWVudC5yZWZlcnJlcix0b3BSZWZlcnJlcjp2LGN1cnJlbnRTY3JpcHRTcmM6aSg1NDUpLkNVUlJFTlRfU0NSSVBUX1NSQyxzZWN1cmVJRnJhbWU6aSgyMTgpLmlzSW5TZWN1cmVJRnJhbWUsaXNWaWRlb0FEQjppKDcpLmlzRnVuY3Rpb24oaSg1NDcpLnZpZGVvRW5jb2RlKSx2YWx1ZTpoLHJuZDppKDMyNSkuUkFORE9NLHRvcERvY3VtZW50Rm9jdXM6aSg1NDkpLmdldFRvcERvY3VtZW50Rm9jdXMoKX0pfSxlLmlzU2VuZGluZ0RhdGE9ITEsZX0oKTt0LlN0YXRzPWMsdC5zdGF0cz1uZXcgYyh7c2VydmljZTppKDU1MCkuQ09NTU9OX0xPQ0FMX1NUQVRTX1NFUlZJQ0VfTkFNRSx2ZXJzaW9uOiIwIixzaWQ6aSg3MCkuZ2VuZXJhdGVIZXhTdHJpbmcoaSgzMjQpLkRFRkFVTFRfU0lEX0xFTkdUSCl9KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoe19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5P2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX06ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCllLmhhc093blByb3BlcnR5KGkpfHwoZVtpXT10W2ldKTtyZXR1cm4gZX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEZpcnN0RGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gaSgyMikuZmlsdGVyKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9KVswXX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucG9ydGlvbj1mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz0hMSk7dmFyIHI9KG8/aSgxMTQpLnJhbmRvbSgpOmkoMzI1KS5SQU5ET00pPGUsYT1yP3Q6bjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSgpLHJ9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDIxNSkuaXNOYXRpdmVTZW5kQmVhY29uU3VwcG9ydGVkKHdpbmRvdyk7dC5zZW5kQmVhY29uU2hpbT1mdW5jdGlvbihlLHQpe3JldHVybiEhbiYmd2luZG93Lm5hdmlnYXRvci5zZW5kQmVhY29uKGUsdCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFBhcmVudExvY2F0aW9uc0RhdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aSgzMjcpLmdldFBhcmVudEZyaWVuZGx5SUZyYW1lcyhlLmRvY3VtZW50RWxlbWVudCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnR9KTtyZXR1cm4gdC51bnNoaWZ0KGUpLHQubWFwKGZ1bmN0aW9uKGUpe3JldHVybntsb2NhdGlvbjppKDIwNykuZ2V0V2luZG93TG9jYXRpb24oZS5kZWZhdWx0VmlldykscmVmZXJyZXI6ZS5yZWZlcnJlcn19KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0VG9wQW5jZXN0b3I9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9d2luZG93KTt2YXIgdD1pKDMyOSkuZ2V0QW5jZXN0b3JPcmlnaW5zKGUpO2lmKHQubGVuZ3RoPjApcmV0dXJue3RvcEFuY2VzdG9yOnRbdC5sZW5ndGgtMV0saXNUcnVzdGVkOiEwfTt2YXIgbj1pKDIxNykuZ2V0VG9wTG9jYXRpb25EYXRhKGUuZG9jdW1lbnQpLG89bi5sb2NhdGlvbixyPW4ucmVmZXJyZXIsYT1pKDIxOCkuaXNJblNlY3VyZUlGcmFtZT9yOm8scz0haSgyMTgpLmlzSW5TZWN1cmVJRnJhbWV8fGkoNTQxKS5nZXRXaW5kb3dzQ2hhaW4oaSgxMjMpLlRPUF9GUklFTkRMWV9XSU5ET1cpLmxlbmd0aDwyLGw9aSg0MikucGFyc2VVcmwoYSksYz1sLnByb3RvY29sLHU9bC5ob3N0bmFtZSxkPWwuaG9zdCxwPWwucG9ydDtyZXR1cm57dG9wQW5jZXN0b3I6aSg0MikudXJsRnJvbVVybE9iamVjdCh7cHJvdG9jb2w6Yyxob3N0bmFtZTp1LGhvc3Q6ZCxwb3J0OnAsb3JpZ2luYWxQYXRoOiIiLGhyZWY6IiIscGF0aG5hbWU6IiIsc2VhcmNoOiIiLGhhc2g6IiJ9KSxpc1RydXN0ZWQ6c319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzQW5jZXN0b3JPcmlnaW5zU3VwcG9ydGVkPWkoNTM5KS5nZXRJc0FuY2VzdG9yT3JpZ2luc1N1cHBvcnRlZCgpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldElzQW5jZXN0b3JPcmlnaW5zU3VwcG9ydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4od2luZG93LmxvY2F0aW9uLmFuY2VzdG9yT3JpZ2lucyl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzSW5TZWN1cmVJRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT1pKDE0KS5tYXAoaSgyMTkpLnBhcmVudEZyaWVuZGx5SUZyYW1lcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50fSksdD1lLmxlbmd0aCxuPSh0P2VbdC0xXTpkb2N1bWVudCkuZGVmYXVsdFZpZXc7cmV0dXJuISFuJiZuLnNlbGYhPT1uLnBhcmVudH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0V2luZG93c0NoYWluPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLGk9W2VdLG49ZS50b3A7dCE9PW47KXQ9dC5wYXJlbnQsaS5wdXNoKHQpO3JldHVybiBpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BTkNFU1RPUl9PUklHSU5TPWkoMzI5KS5nZXRBbmNlc3Rvck9yaWdpbnMod2luZG93KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXREb2N1bWVudFZpc2liaWxpdHk9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIG49aSg1NDQpLmdldERvY3VtZW50SGlkZGVuUHJvcGVydHkoZSk7cmV0dXJuIG4/IWVbbl06dH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RG9jdW1lbnRIaWRkZW5Qcm9wZXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4iaGlkZGVuImluIGU/ImhpZGRlbiI6IndlYmtpdEhpZGRlbiJpbiBlPyJ3ZWJraXRIaWRkZW4iOnZvaWQgMH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoNTQ2KS5nZXRDdXJyZW50U2NyaXB0KCk7dC5DVVJSRU5UX1NDUklQVF9TUkM9bj9uLnNyYzoiIn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRDdXJyZW50U2NyaXB0PWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09ZSYmKGU9ZG9jdW1lbnQpO3ZhciBpPWUuY3VycmVudFNjcmlwdDtpZihpKXJldHVybiBpO2Zvcih2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxvPVtdLHI9MDtyPG4ubGVuZ3RoO3IrKylvLnB1c2gobltyXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpe3ZhciBhPW8uZmlsdGVyKHQpO3JldHVybiBhW2EubGVuZ3RoLTFdfXJldHVybiBvW28ubGVuZ3RoLTFdfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC52aWRlb0VuY29kZT1pKDU0OCkuZ2V0VmlkZW9FbmNvZGUod2luZG93KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRWaWRlb0VuY29kZT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lJiYoZT13aW5kb3cpLGkoMzMwKS5lbmNvZGVVcmwpcmV0dXJuIGkoMzMwKS5lbmNvZGVVcmw7Zm9yKHZhciB0PWkoMzE3KS5nZXRGcmllbmRseVdpbmRvd3NDaGFpbihlKTt0Lmxlbmd0aDspe3ZhciBuPXQucG9wKCk7aWYobil7dmFyIG89aSg3MSkuZ2V0KG4sInlhLnZpZGVvQWQuZW5jb2RlVXJsIik7aWYoaSg3KS5pc0Z1bmN0aW9uKG8pKXJldHVybiBvfX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRvcERvY3VtZW50Rm9jdXM9ZnVuY3Rpb24oKXtpZihpKDEyMykuVE9QX0ZSSUVORExZX1dJTkRPVyYmaSgxMjMpLlRPUF9GUklFTkRMWV9XSU5ET1cuZG9jdW1lbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBpKDEyMykuVE9QX0ZSSUVORExZX1dJTkRPVy5kb2N1bWVudC5oYXNGb2N1cyl0cnl7cmV0dXJuIGkoMTIzKS5UT1BfRlJJRU5ETFlfV0lORE9XLmRvY3VtZW50Lmhhc0ZvY3VzKCl9Y2F0Y2goZSl7fX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ09NTU9OX0xPQ0FMX1NUQVRTX1NFUlZJQ0VfTkFNRT0iQ29tbW9uUGNvZGUifSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSg1NikuZW5jb2RlKCJhYWJfY29udGV4dCIpLHI9ZChkKHdpbmRvdywiWWEiKSxvKSxhPWkoNTYpLmVuY29kZSgiYW50aWFkYl9jYWxsYmFjayIpLHM9aSg1NikuZW5jb2RlKCJhbnRpYWRiX2RldGVjdGVkIiksbD1pKDU2KS5lbmNvZGUoImFudGlhZGJfcnVubmluZyIpLGM9aSg1NikuZW5jb2RlKCJhbnRpYWRiX2Jsb2NrZXIiKSx1PSJibGNybSI7ZnVuY3Rpb24gZChlLHQpe3ZhciBpPXtfX3Byb3RvX186bnVsbCxoYXNPd25Qcm9wZXJ0eTpPYmplY3QuaGFzT3duUHJvcGVydHl9O3RyeXt2YXIgbz1lW3RdPWVbdF18fGk7cmV0dXJuIG8mJiJvYmplY3QiPT09KHZvaWQgMD09PW8/InVuZGVmaW5lZCI6bihvKSl8fChvPWkpLG99Y2F0Y2goZSl7fXJldHVybiBpfWZ1bmN0aW9uIHAoKXtyZXR1cm4gciYmcltsXX1mdW5jdGlvbiBmKGUpe3JbYV0ucHVzaChlKX1mdW5jdGlvbiBoKCl7dmFyIGU9W2koMzMxKS5UZXN0SW5zdGFudF07ImJvb2xlYW4iPT10eXBlb2YgX19kaXNhYmxlTmV0d29ya0RldGVjdGlvbl9fJiZfX2Rpc2FibGVOZXR3b3JrRGV0ZWN0aW9uX198fGUucHVzaChpKDU1MikuVGVzdFhociksbShlLGZ1bmN0aW9uKGUpe3ZhciB0O2UuYmxvY2tlcj09PWkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUQ/KHQ9XywiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZXx8ImludGVyYWN0aXZlIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/dCgpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGZ1bmN0aW9uKCl7dCgpfSkpOnkoZSl9KX1mdW5jdGlvbiBnKGUpe3ZhciB0PXtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9O3RyeXtyZXR1cm4gZSgpfWNhdGNoKGUpe3Q9e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5VTktOT1dOLHJlc291cmNlOnt0eXBlOmkoNCkuQmxvY2tlZFJlc291cmNlVHlwZS5FWENFUFRJT04sZGF0YTp7bWVzc2FnZTplJiZlLm1lc3NhZ2V9fX19cmV0dXJuIHR9ZnVuY3Rpb24gXygpe3ZhciBlPVtpKDMzMSkuVGVzdEluc3RhbnQsaSg1NTcpLlRlc3RMYXlvdXRdOyJib29sZWFuIj09dHlwZW9mIF9fZGlzYWJsZU5ldHdvcmtEZXRlY3Rpb25fXyYmX19kaXNhYmxlTmV0d29ya0RldGVjdGlvbl9ffHxlLnB1c2goaSg1NTgpLlRlc3RTY3JpcHQpLCJib29sZWFuIj09dHlwZW9mIF9fZGlzYWJsZUlmcmFtZURldGVjdGlvbl9fJiZfX2Rpc2FibGVJZnJhbWVEZXRlY3Rpb25fX3x8ZS5wdXNoKGkoNTYwKS5UZXN0SWZyYW1lcyksbShlLGZ1bmN0aW9uKGUpe3koZSl9KX1mdW5jdGlvbiB5KGUpe2lmKGUuYmxvY2tlcj09PWkoNCkuQkxPQ0tFUlMuVU5LTk9XTil7dmFyIHQ9W2koNTApLlRlc3RCYXNlXTsiYm9vbGVhbiI9PXR5cGVvZiBfX2Rpc2FibGVUeXBlRGV0ZWN0aW9uX18mJl9fZGlzYWJsZVR5cGVEZXRlY3Rpb25fX3x8KHQ9W2koNTYxKS5UZXN0R2hvc3RlcnksaSg1NjIpLlRlc3RBZGJsb2NrLGkoNTYzKS5UZXN0S0lTLGkoNTY0KS5UZXN0VWJsb2NrLGkoNTY1KS5UZXN0QWRndWFyZCxpKDU2NikuVGVzdEZGVHJhY2tpbmdQcm90ZWN0aW9uLGkoNTY3KS5UZXN0VWtyYWluZV0pLG0odCxmdW5jdGlvbih0KXtiKHtibG9ja2VyOnQuYmxvY2tlcixibG9ja2VkOnQuYmxvY2tlciE9PWkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9LGUucmVzb3VyY2UpfSxpKDQpLkJMT0NLRVJTLlVOS05PV04sZS5yZXNvdXJjZSl9ZWxzZSBiKHtibG9ja2VyOmUuYmxvY2tlcixibG9ja2VkOmUuYmxvY2tlciE9PWkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9LGUucmVzb3VyY2UpfWZ1bmN0aW9uIG0oZSx0LG8scil7dm9pZCAwPT09byYmKG89aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRCk7Zm9yKHZhciBhPXtibG9ja2VyOm99LHM9W10sbD1mdW5jdGlvbihuKXt2YXIgbz1uZXcgZVtuXTtpZihzLnB1c2gobyksKGE9ZyhmdW5jdGlvbigpe3JldHVybiBvLmxpZ2h0KHIpfSkpLmJsb2NrZXIhPT1pKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEKXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLnRlYXJkb3duKCl9KHMpLHQoYSkse3ZhbHVlOnZvaWQgMH19LGM9MDtjPGUubGVuZ3RoO2MrKyl7dmFyIHU9bChjKTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT11PyJ1bmRlZmluZWQiOm4odSkpKXJldHVybiB1LnZhbHVlfXZhciBkPTAscD0hMSxmPWZ1bmN0aW9uKG4pe2coZnVuY3Rpb24oKXtyZXR1cm4gc1tuXS5oZWF2eShmdW5jdGlvbihyKXtpZihkKyssc1tuXS50ZWFyZG93bigpLCFwKXtpZihyLmJsb2NrZXIhPT1pKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEKXJldHVybiBwPSEwLHZvaWQgdChyKTtlLmxlbmd0aD09PWQmJihwPSEwLHQoe2Jsb2NrZXI6b30pKX19LHIpfSl9O2ZvcihjPTA7YzxzLmxlbmd0aDtjKyspZihjKX1mdW5jdGlvbiBiKGUsdCl7cltjXT1pKDU2KS5lbmNvZGUoZS5ibG9ja2VyKSxyW3NdPSEwO2Zvcih2YXIgbj0wO248clthXS5sZW5ndGg7bisrKXJbYV1bbl0oZSx0KTtyW2FdPVtdLHJbbF09ITF9cltjXXx8KHJbY109aSg1NikuZW5jb2RlKGkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUQpKSxyW2FdfHwoclthXT1bXSksdC5yZXNldFlhQWRiPWZ1bmN0aW9uKCl7clthXT1bXSxyW2xdPSExLHJbc109ITEscltjXT1pKDU2KS5lbmNvZGUoaSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRCl9LHQuaXNSdW5uaW5nPXAsdC5pc0RldGVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHImJnJbc119LHQuYWRkQ2FsbGJhY2tUb1F1ZXVlPWYsdC5kZXRlY3Q9ZnVuY3Rpb24oZSl7aWYoLTE9PT1yW2FdLmluZGV4T2YoZSkpe2YoZSk7dmFyIHQ9e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRCxibG9ja2VkOiExfTtpZihpKDE3MikuZ2V0Q29va2llKGRvY3VtZW50LHUpKWIoe2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5BREdVQVJELGJsb2NrZWQ6ITAsZmFrZURldGVjdDohMH0pO2Vsc2UgaWYoIWkoNTU1KS5pc1VzZXJDcmF3bGVyKCkmJiFpKDU1NikuaXNCeVBhc3MoKSYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZCl7aWYoIWkoMTEpLmNvbmZpZy5mb3JjZSl7aWYocltzXSl7dmFyIG49aSg1NikuZGVjb2RlKHJbY10pO3JldHVybiBuIT09aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRCYmKHQ9e2Jsb2NrZXI6bixibG9ja2VkOiEwLGZha2VEZXRlY3Q6ITF9KSx2b2lkIGIodCl9aWYocCgpKXJldHVybn1yW2xdPSEwLGgoKX1lbHNlIGIodCl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnRlc3RMaW5rPWZ1bmN0aW9uKGUsdCxuLG8scil7dmFyIGE9dGhpcyxzPURhdGUubm93KCk7c3dpdGNoKGUudHlwZSl7Y2FzZSJoZWFkIjpjYXNlInBvc3QiOmNhc2UiZ2V0IjppKDU1MykueGhyUmVxdWVzdChlLnR5cGUudG9VcHBlckNhc2UoKSxlLnNyYywhMSxvLGZ1bmN0aW9uKGkpe2lmKG4+MSlyZXR1cm4gYS50ZXN0TGluayhlLHQsbi0xLG8scik7dmFyIGw9aT9pLnN0YXR1czowLGM9aT9pLnN0YXR1c1RleHQ6IiI7cihlLHMse3N0YXR1czpsLHN0YXR1c1RleHQ6Y30pfSk7YnJlYWs7ZGVmYXVsdDpvKCl9fSx0fShpKDMzMikuVGVzdE5ldHdvcmspO3QuVGVzdFhocj1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LnhoclJlcXVlc3Q9ZnVuY3Rpb24oZSx0LGksbixvKXt2YXIgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7ci5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbiYmbihyKX0sci5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG8mJm8ocil9O3RyeXtyLm9wZW4oZSx0KSxyLndpdGhDcmVkZW50aWFscz1pLHIuc2VuZCgpfWNhdGNoKGUpe28mJm8ocil9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlfHwiRGF0ZSI9PT1pKDE3MCkuZ2V0SW50ZXJuYWxDbGFzcyhlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuaXNVc2VyQ3Jhd2xlcj1mdW5jdGlvbigpe3JldHVybiExfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0J5UGFzcz1mdW5jdGlvbigpe3JldHVybiEhaSgxMSkuY29uZmlnLmRibHRzciYmTWF0aC5hYnMoTnVtYmVyKG5ldyBEYXRlKGkoMTEpLmNvbmZpZy5kYmx0c3IpKS1OdW1iZXIobmV3IERhdGUpKTw3MmU1fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1bIlNDUklQVCIsIlRJVExFIiwiTUVUQSIsIkhFQUQiLCJTVFlMRSJdLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gdC5kaXZzPVtdLHQuZGl2cz10LmNyZWF0ZURpdnMoKSx0fXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpKDg1KS5yZW1vdmVFbGVtZW50cyh0aGlzLmRpdnMpLHRoaXMuZGl2cz1bXX0sdC5wcm90b3R5cGUubGlnaHQ9ZnVuY3Rpb24oZSl7aWYoaSg4MykuaXNJbklmcmFtZSh3aW5kb3cpKXJldHVybntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9O3ZhciB0PXRoaXMuY2hlY2tIaWRkZW4odGhpcy5kaXZzKTtyZXR1cm4gdD97YmxvY2tlcjppKDQpLkJMT0NLRVJTLlVOS05PV04scmVzb3VyY2U6e3R5cGU6aSg0KS5CbG9ja2VkUmVzb3VyY2VUeXBlLkVMRU1FTlQsZGF0YTp7ZWxlbWVudDp0LHN0eWxlczp0aGlzLmdldFN0eWxlc09iamVjdCh0KSxzaGVldHM6dGhpcy5nZXRTdHlsZVNoZWV0cyh0KX0saW5kZXg6MH19OntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9fSx0LnByb3RvdHlwZS5oZWF2eT1mdW5jdGlvbihlLHQpeyFpKDgzKS5pc0luSWZyYW1lKHdpbmRvdykmJnRoaXMuZGl2cy5sZW5ndGg/dGhpcy5jaGVja0hpZGRlbkhlYXZ5KHRoaXMuZGl2cyxlKTplKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KX0sdC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjIpLmZpbHRlcihBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkcmVuKSxmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSl9LHQucHJvdG90eXBlLmNyZWF0ZURpdnM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9aSgxMSkuY29uZmlnLmRldGVjdC5jdXN0b20sdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKGkoODUpLmNyZWF0ZURpdldpdGhDb250ZW50KGVbbl0pKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUuY2hlY2tIaWRkZW5IZWF2eT1mdW5jdGlvbihlLHQsbil7dmFyIG89dGhpczt2b2lkIDA9PT1uJiYobj1OdW1iZXIobmV3IERhdGUpKTt2YXIgcj10aGlzLmNoZWNrSGlkZGVuKGUpO3I/dCh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLlVOS05PV04scmVzb3VyY2U6e3R5cGU6aSg0KS5CbG9ja2VkUmVzb3VyY2VUeXBlLkVMRU1FTlQsZGF0YTp7ZWxlbWVudDpyLHN0eWxlczp0aGlzLmdldFN0eWxlc09iamVjdChyKSxzaGVldHM6dGhpcy5nZXRTdHlsZVNoZWV0cyhyKX0saW5kZXg6MH19KTpOdW1iZXIobmV3IERhdGUpLW48M2UzP3NldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmNoZWNrSGlkZGVuSGVhdnkoZSx0LG4pfSw1MDApOnQoe2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH0pfSx0LnByb3RvdHlwZS5jaGVja0hpZGRlbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBpKDU1KS5yZWR1Y2UoZSxmdW5jdGlvbihlLGksbil7cmV0dXJuIGV8fChlPXQuZ2V0SGlkZGVuRWxlbWVudCh0LmdldENoaWxkcmVuKGkpWzBdKSksZX0sdm9pZCAwKX0sdC5wcm90b3R5cGUuZ2V0SGlkZGVuRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKC0xPT09ci5pbmRleE9mKGUudGFnTmFtZSkpe3ZhciBuLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksYT1vLmRpc3BsYXkscz1vLmxlZnQsbD1vLnRvcCxjPW8ub3BhY2l0eSx1PW8udmlzaWJpbGl0eSxkPW8udHJhbnNmb3JtLHA9ZS5zdHlsZS5sZWZ0LGY9ZS5zdHlsZS50b3A7cmV0dXJuKCJub25lIj09PWF8fCIxIiE9PWN8fCJ2aXNpYmxlIiE9PXV8fCJhdXRvIiE9PXMmJiIwcHgiIT09cyYmcyE9PXB8fCJhdXRvIiE9PWwmJiIwcHgiIT09bCYmbCE9PWZ8fCJtYXRyaXgoMCwgMCwgMCwgMCwgMCwgMCkiPT09ZCkmJihuPWUpLG49bnx8aSg1NSkucmVkdWNlKHRoaXMuZ2V0Q2hpbGRyZW4oZSksZnVuY3Rpb24oZSxpKXtyZXR1cm4gZXx8dC5nZXRIaWRkZW5FbGVtZW50KGkpfSx2b2lkIDApfX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVzT2JqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3RyeXtmb3IodmFyIGk9WyJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJsZWZ0IiwidG9wIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJ0cmFuc2Zvcm0iXSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHI9aVtvXTt0W3JdPW5bcl19fWNhdGNoKGUpe31yZXR1cm4gdH0sdC5wcm90b3R5cGUubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3ZhciBuPUVsZW1lbnQucHJvdG90eXBlLG89bi5tYXRjaGVzfHxuLm1hdGNoZXNTZWxlY3Rvcnx8bi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG4ubW96TWF0Y2hlc1NlbGVjdG9yfHxuLm1zTWF0Y2hlc1NlbGVjdG9yfHxuLm9NYXRjaGVzU2VsZWN0b3I7aWYoIW8pe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCk7cmV0dXJuIGkoNDUpLnNvbWUocixmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KX1yZXR1cm4gby5jYWxsKGUsdCl9LHQucHJvdG90eXBlLmdldFN0eWxlU2hlZXRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3RyeXt2YXIgaT1kb2N1bWVudC5zdHlsZVNoZWV0cztpZighaSlyZXR1cm5bXTtmb3IodmFyIG4gaW4gaSl0cnl7dmFyIG89aVtuXS5ydWxlc3x8aVtuXS5jc3NSdWxlc3x8W107Zm9yKHZhciByIGluIG8paWYodGhpcy5tYXRjaGVzKGUsb1tyXS5zZWxlY3RvclRleHQpKXt0LnB1c2goe25vZGU6aVtuXS5vd25lck5vZGUscnVsZTpvW3JdLmNzc1RleHR9KTticmVha319Y2F0Y2goZSl7fX1jYXRjaChlKXt9cmV0dXJuIHR9LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RMYXlvdXQ9YX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LmlmcmFtZT1pKDg1KS5jcmVhdGVUZXN0SWZyYW1lKDEsMSksdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUudGVhcmRvd24uY2FsbCh0aGlzKSxpKDg1KS5yZW1vdmVFbGVtZW50KHRoaXMuaWZyYW1lKX0sdC5wcm90b3R5cGUuZ2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pZnJhbWU7aWYodCl7dmFyIGk9dC5jb250ZW50RG9jdW1lbnQ7cmV0dXJuIWkmJnQuY29udGVudFdpbmRvdyYmKGk9dC5jb250ZW50V2luZG93LmRvY3VtZW50KSwhaXx8ImNvbXBsZXRlIiE9PWkucmVhZHlTdGF0ZSYmImludGVyYWN0aXZlIiE9PWkucmVhZHlTdGF0ZT90Lm9ubG9hZD1mdW5jdGlvbigpe3Qub25sb2FkPW51bGwsIShpPXQuY29udGVudERvY3VtZW50KSYmdC5jb250ZW50V2luZG93JiYoaT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLGkud3JpdGU9ZnVuY3Rpb24oKXt9LGUoaSl9OihpLndyaXRlPWZ1bmN0aW9uKCl7fSxlKGkpKSxpfWUoKX0sdC5wcm90b3R5cGUudGVzdExpbms9ZnVuY3Rpb24oZSx0LG4sbyxyKXt2YXIgYT10aGlzLHM9RGF0ZS5ub3coKTtzd2l0Y2goZS50eXBlKXtjYXNlImltZyI6Y2FzZSJzY3JpcHQiOmkoNTU5KS5zY3JpcHRSZXF1ZXN0KGUudHlwZSxlLnNyYyx0LG8sZnVuY3Rpb24oaSl7aWYobj4xKXJldHVybiBhLnRlc3RMaW5rKGUsdCxuLTEsbyxyKTt2YXIgbD1pP2kuc3RhdHVzOjAsYz1pP2kuc3RhdHVzVGV4dDoiIjtyKGUscyx7c3RhdHVzOmwsc3RhdHVzVGV4dDpjfSl9KTticmVhaztkZWZhdWx0Om8oKX19LHR9KGkoMzMyKS5UZXN0TmV0d29yayk7dC5UZXN0U2NyaXB0PXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2NyaXB0UmVxdWVzdD1mdW5jdGlvbihlLHQsaSxuLG8pe3ZhciByPWkuY3JlYXRlRWxlbWVudChlKTtyLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiBuJiZuKCl9LHIub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBvJiZvKCl9LHIuc3JjPXQsaS5ib2R5LmFwcGVuZENoaWxkKHIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDcyKS5nZXROYXRpdmVKU09OKHdpbmRvdyksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LmlmcmFtZXM9aSgxMSkuY29uZmlnLmRldGVjdC5pZnJhbWVzLHR9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5oZWF2eT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5pZnJhbWVzLmxlbmd0aClpZihpKDgzKS5pc0luSWZyYW1lKHdpbmRvdykpZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfSk7ZWxzZXt2YXIgbyxhPWkoMTQpLm1hcCh0aGlzLmlmcmFtZXMsZnVuY3Rpb24oZSl7dmFyIHQ9aSg3MCkuZ2VuZXJhdGVIZXhTdHJpbmcoOCk7cmV0dXJue2VsZW1lbnQ6bi5jcmVhdGVJZnJhbWUoZSx0LGkoMTEpLmNvbmZpZy5waWQpLGlzSGFuZGxlZDohMSx1cmw6ZSxzaWduOnR9fSkscz1mdW5jdGlvbigpe2koNSkuZm9yRWFjaChhLGZ1bmN0aW9uKGUpe3JldHVybiBpKDg1KS5yZW1vdmVFbGVtZW50KGUuZWxlbWVudCl9KX0sbD1mdW5jdGlvbiB0KGwpe3ZhciBjLHU9KGM9bC5vcmlnaW4saSgzMjMpLmZpbmQoYSxmdW5jdGlvbihlKXtyZXR1cm4gMD09PWUudXJsLmluZGV4T2YoYyl9KSk7aWYodSl7dmFyIGQ7dHJ5e2Q9bC5kYXRhJiZyLnBhcnNlKGwuZGF0YSl8fG51bGx9Y2F0Y2goZSl7ZD1udWxsfWQmJmQuc2lnbj09PXUuc2lnbiYmKHUuaXNIYW5kbGVkPSEwLChkLmJsb2NrZWR8fGkoMjIxKS5ldmVyeShhLGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzSGFuZGxlZH0pKSYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0KSxzKCksY2xlYXJUaW1lb3V0KG8pLGQuYmxvY2tlZD9lKHtibG9ja2VyOmQuYmxvY2tlcixyZXNvdXJjZTp7dHlwZTppKDQpLkJsb2NrZWRSZXNvdXJjZVR5cGUuSU5fSUZSQU1FLGRhdGE6e3VybDp1LmVsZW1lbnQuc3JjfSxpbmRleDppKDIzKS5pbmRleE9mKG4uaWZyYW1lcyx1LDAsZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PWUuaW5kZXhPZih0LnVybCl9KX19KTplKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KSkpfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGwpLG89d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbCkscygpLGUoe2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH0pfSw1ZTMpfWVsc2UgZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfSl9LHQucHJvdG90eXBlLmNyZWF0ZUlmcmFtZT1mdW5jdGlvbihlLHQsbil7dmFyIG89ZSsiIyIraSgyOSkuZW5jb2RlKCJwaWQ9IituKyImc2lnbj0iK3QpO3JldHVybiBpKDg1KS5jcmVhdGVUZXN0SWZyYW1lKDEwMCwxMDAsbyl9LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RJZnJhbWVzPWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9WyJwdXJwbGUtYm94IiwiZ2hvc3RlcnktYm94IiwiZ2hvc3RlcnktY291bnQiLCJnaG9zdGVyeS10aXRsZSJdLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5saWdodD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50ZXN0U2VsZWN0b3JzKCk/e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5HSE9TVEVSWX06e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LHQucHJvdG90eXBlLmhlYXZ5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi50ZXN0U2VsZWN0b3JzKCk/ZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLkdIT1NURVJZfSk6ZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLk5PVF9CTE9DS0VEfSl9LDc1MCl9LHQucHJvdG90eXBlLnRlc3RTZWxlY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4gaSg0NSkuc29tZShyLGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaG9zdGVyeS0iK2UpO3JldHVybiBCb29sZWFuKHQpfSl9LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RHaG9zdGVyeT1hfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUubGlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMjAxKS5nZXRJc1NhZmFyaSgpJiZ0aGlzLnRlc3RXZWJTb2NrZXQoKXx8dGhpcy50ZXN0UlRDUGVlckNvbm5lY3Rpb25Gb3JGaXJlZm94KCl8fGkoMjIyKS5pc0luamVjdEluRnJhbWVzKCJpbmplY3RJbnRvQ29udGVudFdpbmRvdyIpfHx0aGlzLnRlc3RTaGFkb3coKXx8dGhpcy50ZXN0T2xkT3BlcmEoKT97YmxvY2tlcjppKDQpLkJMT0NLRVJTLkFEQkxPQ0t9OntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9fSx0LnByb3RvdHlwZS5oZWF2eT1mdW5jdGlvbihlLHQpe3ZhciBuPWkoODUpLmNyZWF0ZVRlc3RJZnJhbWUoMTAwLDEwMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2koMjIyKS5pc0luamVjdEluRnJhbWVzKCJpbmplY3RJbnRvQ29udGVudFdpbmRvdyIsbi5jb250ZW50V2luZG93KT9lKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuQURCTE9DS30pOmUoe2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH0pLGkoNjMpLnJlbW92ZU5vZGVGcm9tUGFyZW50KG4pfSwxZTMpfSx0LnByb3RvdHlwZS50ZXN0V2ViU29ja2V0PWZ1bmN0aW9uKCl7dmFyIGU9aSg3MSkuZ2V0KHdpbmRvdywiV2ViU29ja2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciIpO3JldHVybiBlJiYtMSE9PWUudG9TdHJpbmcoKS5pbmRleE9mKCJXcmFwcGVkV2ViU29ja2V0Iil9LHQucHJvdG90eXBlLnRlc3RSVENQZWVyQ29ubmVjdGlvbkZvckZpcmVmb3g9ZnVuY3Rpb24oKXt2YXIgZT1pKDcxKS5nZXQod2luZG93LCJSVENQZWVyQ29ubmVjdGlvbi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbiIpO3JldHVybiEhKGUmJmUudG9TdHJpbmcmJi0xIT09ZS50b1N0cmluZygpLmluZGV4T2YoImNoZWNrUmVxdWVzdCIpfHx3aW5kb3cuUlRDUGVlckNvbm5lY3Rpb24mJlJUQ1BlZXJDb25uZWN0aW9uLnRvU291cmNlJiYtMSE9PVJUQ1BlZXJDb25uZWN0aW9uLnRvU291cmNlKCkuaW5kZXhPZigiV3JhcHBlZFJUQ1BlZXJDb25uZWN0aW9uIikpfSx0LnByb3RvdHlwZS50ZXN0U2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1pKDIyMCkuZ2V0U2hhZG93Um9vdFRleHQoKS5pbmRleE9mKCJnZXQoKSIpfHwhKCFFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3d8fC0xPT09RWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93LnRvU3RyaW5nKCkuaW5kZXhPZigiTXV0YXRpb25PYnNlcnZlciIpKX0sdC5wcm90b3R5cGUudGVzdE9sZE9wZXJhPWZ1bmN0aW9uKCl7aWYoISh3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS52ZXJzaW9uKCk8MTMpKXJldHVybiExO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksdD1pKDE1MikuY2hlY2tJZlN0eWxlQmxvY2tlcihlLDIwKTtyZXR1cm4gaSgxNTIpLmNoZWNrSWZTdHlsZUJsb2NrZXIoZSwwKXx8dH0sdH0oaSg1MCkuVGVzdEJhc2UpO3QuVGVzdEFkYmxvY2s9cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17ZGlzcGxheTovbm9uZS9pLGNvbG9yOi8uKy9pLCJiYWNrZ3JvdW5kLWNvbG9yIjovLisvaX0sYT0ve1xzKmRpc3BsYXlccyo6XHMqbm9uZVxzKiFpbXBvcnRhbnQ7XHMqY29sb3I6XHMqIz9bXHdcKFwpLFxzXSshaW1wb3J0YW50O1xzKmJhY2tncm91bmQtY29sb3I6XHMqIz9bXHdcKFwpLFxzXSshaW1wb3J0YW50O1xzKn0vZ2kscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmxpZ2h0PWZ1bmN0aW9uKGUpe2lmKGUmJmUudHlwZT09PWkoNCkuQmxvY2tlZFJlc291cmNlVHlwZS5FTEVNRU5UJiZlLmRhdGEmJmUuZGF0YS5zaGVldHMpe3ZhciB0PWUuZGF0YS5zaGVldHM7Zm9yKHZhciBuIGluIHQpe3ZhciBvPXRbbl0ubm9kZS5zaGVldDtpZihvJiZ0aGlzLnRlc3RCbG9ja2VkKG8pfHwhbyYmdGhpcy50ZXN0QmxvY2tlZElFKHRbbl0pKXJldHVybntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuS0lTfX19cmV0dXJue2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LHQucHJvdG90eXBlLnRlc3RCbG9ja2VkPWZ1bmN0aW9uKGUpe3ZhciB0PWUucnVsZXN8fGUuY3NzUnVsZXN8fFtdO3JldHVybiAxPT09dC5sZW5ndGgmJjM9PT10WzBdLnN0eWxlLmxlbmd0aCYmaSg1NSkucmVkdWNlKHRbMF0uc3R5bGUsZnVuY3Rpb24oZSx0LGksbil7cmV0dXJuIGUmJnJbdF0udGVzdChuW3RdKX0sITApfSx0LnByb3RvdHlwZS50ZXN0QmxvY2tlZElFPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5uZXJIVE1MO3JldHVybiEoIXR8fDE9PT10Lm1hdGNoKGEpLmxlbmd0aCkmJi0xPT09dC5yZXBsYWNlKGEsIiIpLmluZGV4T2YoInsiKX0sdH0oaSg1MCkuVGVzdEJhc2UpO3QuVGVzdEtJUz1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUubGlnaHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2hlYWQ+c3R5bGVbdHlwZT0idGV4dC9jc3MiXScpLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXS5pbm5lckhUTUw7aWYoby5pbmRleE9mKCI6cm9vdCIpPi0xJiZvLmluZGV4T2YoImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsiKT4tMSlyZXR1cm57YmxvY2tlcjppKDQpLkJMT0NLRVJTLlVCTE9DS319cmV0dXJue2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RVYmxvY2s9cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmxpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzU2hhZG93Um9vdCgpfHx0aGlzLmlzTW9kZXJuQWRndWFyZCgpfHx0aGlzLmlzT2xkQWRndWFyZCgpfHx0aGlzLmlzU3R5bGVMaW5rKCl8fHRoaXMuaXNBZGd1YXJkSW5DU1MoKXx8aSgyMjIpLmlzSW5qZWN0SW5GcmFtZXMoImluamVjdFBhZ2VTY3JpcHRBUElJbldpbmRvdyIpP3tibG9ja2VyOmkoNCkuQkxPQ0tFUlMuQURHVUFSRH06e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LHQucHJvdG90eXBlLmhlYXZ5PWZ1bmN0aW9uKGUsdCl7aWYod2luZG93LnBvc3RNZXNzYWdlJiZ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7dmFyIG4sbz1mdW5jdGlvbih0KXt0LnNvdXJjZT09PXdpbmRvdyYmdC5kYXRhLmRpcmVjdGlvbiYmInRvLXBhZ2Utc2NyaXB0QGFkZ3VhcmQiPT09dC5kYXRhLmRpcmVjdGlvbiYmKHIoKSxjbGVhclRpbWVvdXQobiksZSh7YmxvY2tlcjppKDQpLkJMT0NLRVJTLkFER1VBUkR9KSl9LHI9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8sITEpfTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbywhMSksbj13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3IoKSxlKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KX0sNTAwKSx3aW5kb3cucG9zdE1lc3NhZ2Uoe2RpcmVjdGlvbjoiZnJvbS1wYWdlLXNjcmlwdEBhZGd1YXJkIixlbGVtZW50VXJsOmkoODIpLmdldFJhbmRvbVN0cmluZygxMCksZG9jdW1lbnRVcmw6ZG9jdW1lbnQubG9jYXRpb24uaHJlZixibG9jazppKDgyKS5nZXRSYW5kb21TdHJpbmcoMTApLHJlcXVlc3RUeXBlOiJET0NVTUVOVCIscmVxdWVzdElkOmkoODIpLmdldFJhbmRvbVN0cmluZygxMCl9LCIqIil9ZWxzZSBlKHtibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9KX0sdC5wcm90b3R5cGUuaXNTaGFkb3dSb290PWZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1pKDIyMCkuZ2V0U2hhZG93Um9vdFRleHQoKS5pbmRleE9mKCJmdW5jdGlvbiAoKSB7Iil9LHQucHJvdG90eXBlLmlzTW9kZXJuQWRndWFyZD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT13aW5kb3cuQUdfb25Mb2FkfSx0LnByb3RvdHlwZS5pc09sZEFkZ3VhcmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09d2luZG93LmFkZ3VhcmR9LHQucHJvdG90eXBlLmlzU3R5bGVMaW5rPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2hlYWQ+bGlua1tyZWw9InN0eWxlc2hlZXQiXScpLHQ9MDt0PGUubGVuZ3RoO3QrKyl7aWYoZVt0XS5ocmVmLmluZGV4T2YoImFkZ3VhcmQiKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaXNBZGd1YXJkSW5DU1M9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2hhZG93Um9vdDtpZihlKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7aWYoaSgxNTIpLmNoZWNrSWZTdHlsZUJsb2NrZXIodCw1MCkpcmV0dXJuITB9cmV0dXJuIGkoMTUyKS5jaGVja0lmU3R5bGVCbG9ja2VyKGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSw1MCl9LHR9KGkoNTApLlRlc3RCYXNlKTt0LlRlc3RBZGd1YXJkPXJ9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5saWdodD1mdW5jdGlvbihlKXtyZXR1cm4gaSgyODkpLmlzRmlyZWZveCgpJiZ3aW5kb3cuSW1hZ2VCaXRtYXAmJiFuYXZpZ2F0b3Iuc2VydmljZVdvcmtlcj97YmxvY2tlcjppKDQpLkJMT0NLRVJTLkZGX1BSSVZBVEV9OntibG9ja2VyOmkoNCkuQkxPQ0tFUlMuTk9UX0JMT0NLRUR9fSx0fShpKDUwKS5UZXN0QmFzZSk7dC5UZXN0RkZUcmFja2luZ1Byb3RlY3Rpb249cn0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmxpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzVWtyYWluaWFuTG9jYWxlKCk/e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5VS306e2Jsb2NrZXI6aSg0KS5CTE9DS0VSUy5OT1RfQkxPQ0tFRH19LHQucHJvdG90eXBlLmlzVWtyYWluaWFuTG9jYWxlPWZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLHQ9W2UubGFuZ3VhZ2UsZS5icm93c2VyTGFuZ3VhZ2UsZS5zeXN0ZW1MYW5ndWFnZSxlLnVzZXJMYW5ndWFnZV07cmV0dXJuIGkoNDUpLnNvbWUodCxmdW5jdGlvbihlKXtyZXR1cm4gQm9vbGVhbihlKSYmInVrIj09PWUudG9Mb3dlckNhc2UoKX0pfSx0fShpKDUwKS5UZXN0QmFzZSk7dC5UZXN0VWtyYWluZT1yfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWkoMjIzKS5wcm90b3R5cGUucmVuZGVyO2koMjIzKS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwhdGhpcy5faXNBc3luYyYmdGhpcy5pc09sZEJsb2NrfHx0aGlzLmdldFJlYWxCbG9jayhmdW5jdGlvbih0KXt2YXIgbj0oMCxpKDUxKS5nZXRWaXNpYmlsaXR5Q29udGFpbmVyKShlLmdldE1haW5Db250KCkpLG89e2V2ZW50OmkoNDkpLkVWRU5UUy5CTE9DS19DT05GSVJNQVRJT04sZGF0YTp7YWN0aW9uOmkoNDkpLkVWRU5UUy5DT05GSVJNX0JMT0NLLHBhZ2VJZDplLmRhdGFTb3VyY2UuX3BhZ2VJZCxibG9ja05hbWU6dC5zZXR0aW5ncy5mb3JtYXQubmFtZSxibG9ja0lkOnQuYmxvY2tJZCxyZW5kZXJUbzplLnJlbmRlclRvLHR5cGU6IkQifX07aSgyMTQpKG4sbyksbiYmKDAsaSgzMzMpLnN0YXJ0V2F0Y2hpbmcpKG4sZnVuY3Rpb24oKXtyZXR1cm4gdC51cGRhdGUoKX0pfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Z2V0QmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9aSg2NSlbZS5uYW1lXTtyZXR1cm57YXN5bmM6dC5hc3luYyxpc09sZDp0LmlzT2xkLG1vZHVsZTp0Lm1vZHVsZSgpfX19fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDUzKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgwMikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubG9hZFNjcmlwdD1mdW5jdGlvbihlKXt2YXIgdD1lLndpbixvPXZvaWQgMD09PXQ/d2luZG93OnQscj1lLnNyYyxhPWUucmV0cmllcyxzPXZvaWQgMD09PWE/MDphLGw9ZS5vbkVycm9yLGM9dm9pZCAwPT09bD9pKDEzKS5ub29wOmwsdT1uZXcoaSgxMjEpLkN1c3RvbUVycm9yKSh7aWQ6aSg1NzIpLkNvbW1vbkVycm9yLkxPQURfU0NSSVBUX0VSUk9SLG1lc3NhZ2U6IkZhaWxlZCB0byBsb2FkIHNjcmlwdCBbIityKyJdIixkZXRhaWxzOntzcmM6cixpc1NlbGZXaW5kb3c6bz09PXdpbmRvdyxvbkJlZm9yZUxvYWQ6Qm9vbGVhbihlLm9uQmVmb3JlTG9hZCkscmV0cmllczpzfX0pO2koNDAxKS5sb2FkU2NyaXB0TGl0ZShuKG4oe30sZSkse3dpbjpvLG9uRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYyh1KX19KSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlWyJMT0FEX1NDUklQVF9FUlJPUiJdPSJMT0FEX1NDUklQVF9FUlJPUiIsZVsiU1RBVFNfU0VOU09SX05BTUVfRVJST1IiXT0iU1RBVFNfU0VOU09SX05BTUVfRVJST1IiLGVbIlNUQVRTX0xBQkVMX0tFWV9FUlJPUiJdPSJTVEFUU19MQUJFTF9LRVlfRVJST1IiLGVbIlNUQVRTX0xBQkVMX1ZBTFVFX0VSUk9SIl09IlNUQVRTX0xBQkVMX1ZBTFVFX0VSUk9SIn0odC5Db21tb25FcnJvcnx8KHQuQ29tbW9uRXJyb3I9e30pKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DSEFSU0VUX1VURl84PSJ1dGYtOCJ9LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNTApLnRoZW4oZnVuY3Rpb24oKXtlKGkoODAzKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDUxKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgwNCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg1MikudGhlbihmdW5jdGlvbigpe2UoaSg3OTcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNDcpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODA1KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDY0KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDc5NSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg2MCkudGhlbihmdW5jdGlvbigpe2UoaSg4MDYpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNDkpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODA3KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDQ4KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgwOCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg1OSkudGhlbihmdW5jdGlvbigpe2UoaSg3OTgpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNTgpLnRoZW4oZnVuY3Rpb24oKXtlKGkoNzk5KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDYxKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgwOSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg2MikudGhlbihmdW5jdGlvbigpe2UoaSg4MTApKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNDUpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODExKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBpPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxuKSYmKGVbbl09aVtuXSl9cmV0dXJuIGV9LG89aSgxOTUpLHI9by5CbG9ja1R5cGVzLGE9by5Cb3JkZXJUeXBlcyxzPVt7aWQ6MCxuYW1lOnIuVkVSVElDQUwsZml4ZWQ6ITEsdHlwZTpyLlZFUlRJQ0FMLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXSx1c2VFbGFzdGljUGljdHVyZTohMH0se2lkOjEsbmFtZToiZmxhdCIsZml4ZWQ6ITEsdHlwZTpyLlZFUlRJQ0FMLGxpbWl0OjQsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdLHVzZUVsYXN0aWNQaWN0dXJlOiEwfSx7aWQ6MixuYW1lOnIuSE9SSVpPTlRBTCxmaXhlZDohMSx0eXBlOnIuSE9SSVpPTlRBTCxsaW1pdDo2LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXX0se2lkOjMsbmFtZToiMTYweDYwMCIsZml4ZWQ6ITAsdHlwZTpyLlZFUlRJQ0FMLGxpbWl0OjUsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkNPTExBUFNFXX0se2lkOjQsbmFtZToiMjQweDQwMCIsc2luZ2xlOiEwLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDo1LG5hbWU6IjIwMHgzMDAiLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDozLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDo2LG5hbWU6IjMwMHgzMDAiLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDo0LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDo3LG5hbWU6IjMwMHgyNTAiLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDoyLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDo4LG5hbWU6IjI1MHgyNTAiLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDozLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDo5LG5hbWU6IjcyOHg5MCIsc2luZ2xlOiEwLGZpeGVkOiEwLHR5cGU6ci5IT1JJWk9OVEFMLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkNPTExBUFNFXX0se2lkOjEwLG5hbWU6IjEwMDB4MTIwIixmaXhlZDohMCx0eXBlOnIuSE9SSVpPTlRBTCxsaW1pdDo0LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDoxMSxuYW1lOnIuUk9XLGZpeGVkOiExLHR5cGU6ci5ST1csbGltaXQ6MSxza2lwV2FybmluZ3M6ITEsc2tpcFBpY3R1cmVzOiEwLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6MTIsbmFtZToibW9iaWxlIixjbGFzc05hbWU6ci5WRVJUSUNBTCxmaXhlZDohMSx0eXBlOnIuVkVSVElDQUwsbGltaXQ6MSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLXX0se2lkOjEzLG5hbWU6ci5HUklELGZpeGVkOiExLHR5cGU6ci5HUklELGxpbWl0OjQsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6MTQsbmFtZTpyLlZLLGZpeGVkOiExLHR5cGU6ci5WSyxib3JkZXI6W2EuTk9ORV19LHtpZDoxNSxuYW1lOiIzMjB4NTAiLGZpeGVkOiEwLHR5cGU6ci5IT1JJWk9OVEFMLGxpbWl0OjEsc2tpcFdhcm5pbmdzOiEwLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6MTYsbmFtZTpyLkNPTVBBQ1QsZml4ZWQ6ITEsdHlwZTpyLkNPTVBBQ1QsbGltaXQ6MSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLXX0se2lkOjE3LG5hbWU6InBvc3RlclZlcnRpY2FsIix0eXBlOnIuVkVSVElDQUwsYm9yZGVyOlthLkFEXX0se2lkOjE4LG5hbWU6Im5ld1Bvc3RlclZlcnRpY2FsIix0eXBlOnIuVkVSVElDQUwsYm9yZGVyOlthLkFEXX0se2lkOjE5LG5hbWU6Im5ld1Bvc3Rlckhvcml6b250YWwiLHR5cGU6ci5IT1JJWk9OVEFMLGxpbWl0OjksYm9yZGVyOlthLkFEXX0se2lkOjIwLG5hbWU6Im1haWxydVZlcnRpY2FsIix0eXBlOnIuVkVSVElDQUwsYm9yZGVyOlthLk5PTkVdfSx7aWQ6MjEsbmFtZToibWFpbHJ1SG9yaXpvbnRhbCIsdHlwZTpyLkhPUklaT05UQUwsbGltaXQ6Mixib3JkZXI6W2EuTk9ORV19LHtpZDoyMixuYW1lOiJwb3N0ZXJIb3Jpem9udGFsIix0eXBlOnIuSE9SSVpPTlRBTCxsaW1pdDo5LGJvcmRlcjpbYS5BRF19LHtpZDoyMyxuYW1lOiIzMjB4MTAwIixmaXhlZDohMCx0eXBlOnIuSE9SSVpPTlRBTCxsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6MjQsbmFtZToiYWRhcHRpdmUiLGZpeGVkOiEwLHR5cGU6ci5GSVhFRCxib3JkZXI6W2EuTk9ORSxhLkJMT0NLLGEuQ09MTEFQU0VdLHVzZUVsYXN0aWNQaWN0dXJlOiEwfSx7aWQ6MjUsbmFtZToiNDAweDI0MCIsZml4ZWQ6ITAsdHlwZTpyLkZJWEVELGxpbWl0OjQsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkNPTExBUFNFXX0se2lkOjI2LG5hbWU6ci5JTlRFUk5BTH0se2lkOjI3LG5hbWU6IjB4NTAiLGZpeGVkOiEwLHR5cGU6ci5DT01QQUNULGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDoyOCxuYW1lOiIzMjB4NDgwIixmaXhlZDohMCx0eXBlOnIuVkVSVElDQUwsbGltaXQ6MSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLXX0se2lkOjI5LG5hbWU6IjQ4MHgzMjAiLGZpeGVkOiEwLHR5cGU6ci5IT1JJWk9OVEFMLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDozMCxuYW1lOiJuZXdWayIsZml4ZWQ6ITEsdHlwZTpyLlZLLGJvcmRlcjpbYS5OT05FXX0se2lkOjMxLG5hbWU6IjMzNngyODAiLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxsaW1pdDoyLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDozMixuYW1lOiI3Mjh4OTAtZGVzaWduIixmaXhlZDohMCx0eXBlOnIuSE9SSVpPTlRBTCxsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDozMyxuYW1lOiIzMDB4NjAwIixsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6MzQsbmFtZToiMzAweDUwMCIsbGltaXQ6MSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLXX0se2lkOjM1LG5hbWU6Ijk3MHgyNTAiLGZpeGVkOiEwLHR5cGU6ci5GSVhFRCxsaW1pdDo0LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDozNixuYW1lOiI5NzB4OTAiLGZpeGVkOiEwLHR5cGU6ci5GSVhFRCxsaW1pdDozLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDozNyxuYW1lOiIweDkwIixsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5DT0xMQVBTRV19LHtpZDozOCxuYW1lOiIweDkwLWdpc21ldGVvIn0se2lkOjM5LG5hbWU6Im5ld1ZlcnRpY2FsIixmaXhlZDohMSx0eXBlOnIuVkVSVElDQUwsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6NDAsbmFtZToibmV3SG9yaXpvbnRhbCIsZml4ZWQ6ITEsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6NDEsbmFtZToibmV3R3JpZCIsZml4ZWQ6ITEsbGltaXQ6NCx0eXBlOnIuR1JJRCxib3JkZXI6W2EuTk9ORSxhLkJMT0NLLGEuQUQsYS5DT0xMQVBTRV19LHtpZDo0MixuYW1lOiJuZXdBZGFwdGl2ZSIsdHlwZTpyLkZJWEVELGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXX0se2lkOjQzLG5hbWU6ImV4dGVuc2libGVNb2JpbGUiLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo0NCxuYW1lOiJtYWlscnVFeHRlbnNpYmxlTW9iaWxlIn0se2lkOjQ1LG5hbWU6Im1haWxydVdlYiJ9LHtpZDo0NixuYW1lOiJvbGRWZXJ0aWNhbCIsY2xhc3NOYW1lOnIuVkVSVElDQUwsdHlwZTpyLlZFUlRJQ0FMLHNob3dMb2dvT25Ub3A6ITAsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6NDcsbmFtZToib2xkSG9yaXpvbnRhbCIsdHlwZTpyLkhPUklaT05UQUwsbGltaXQ6NCxzaG93TG9nb09uVG9wOiEwLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXX0se2lkOjQ4LG5hbWU6IjB4OTAteWFuZXdzIixsaW1pdDoxLGJvcmRlcjpbYS5OT05FXX0se2lkOjQ5LG5hbWU6InBvc3RlclZlcnRpY2FsWWFuZXdzIix0eXBlOnIuVkVSVElDQUwsYm9yZGVyOlthLkFEXX0se2lkOjUwLG5hbWU6InlhVmVydGljYWwiLHR5cGU6ci5WRVJUSUNBTCxzaG93TG9nb09uVG9wOiEwLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXX0se2lkOjUxLG5hbWU6InlhUG9nb2RhSG9yaXpvbnRhbDMiLGZpeGVkOiExLHR5cGU6ci5WRVJUSUNBTCxib3JkZXI6W2EuTk9ORV0sc2hvd0xvZ29PblRvcDohMH0se2lkOjUyLG5hbWU6InlhUG9nb2RhSG9yaXpvbnRhbDQiLGZpeGVkOiExLHR5cGU6ci5WRVJUSUNBTCxib3JkZXI6W2EuTk9ORV0sc2hvd0xvZ29PblRvcDohMH0se2lkOjUzLG5hbWU6InlhUG9nb2RhR3JpZCIsZml4ZWQ6ITEsdHlwZTpyLlZFUlRJQ0FMLGJvcmRlcjpbYS5OT05FXSxzaG93TG9nb09uVG9wOiEwfSx7aWQ6NTQsbmFtZToibW9kZXJuQWRhcHRpdmUiLGZpeGVkOiExLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6NTUsbmFtZToibW9yZGFBcHAiLHR5cGU6ci5IT1JJWk9OVEFMLGxpbWl0OjksYm9yZGVyOlthLk5PTkVdfSx7aWQ6NTZ9LHtpZDo1NyxuYW1lOiJ5YU1vYmlsZU1haWxUb3AifSx7aWQ6NTgsbmFtZToieWFNb2JpbGVNYWlsTWlkZGxlIn0se2lkOjU5LG5hbWU6InJtcFZpZGVvIixmaXhlZDohMSx0eXBlOnIuSE9SSVpPTlRBTCxib3JkZXI6W2EuTk9ORSxhLkJMT0NLLGEuQUQsYS5DT0xMQVBTRV19LHtpZDo2MCxuYW1lOiJtYWlscnVQbHVnaW4iLGZpeGVkOiEwLHR5cGU6ci5WRVJUSUNBTCxib3JkZXI6W2EuQkxPQ0tdfSx7aWQ6NjEsbmFtZToiYW5pbWF0ZWRTY3JvbGxhYmxlTW9iaWxlIixsaW1pdDo0LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6NjIsbmFtZToicGljdHVyZVNlYXJjaCIsZml4ZWQ6ITEsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6NjMsbmFtZToiY3VzdG9tQmxvY2siLGZpeGVkOiEwLHR5cGU6ImN1c3RvbSIsbGltaXQ6OSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLLGEuQ09MTEFQU0VdfSx7aWQ6NjQsbmFtZToicGljdHVyZVNlYXJjaDMiLHR5cGU6ci5IT1JJWk9OVEFMLGJvcmRlcjpbYS5OT05FXX0se2lkOjY1LG5hbWU6InplbiIsdHlwZTpyLkZJWEVELGJvcmRlcjpbYS5OT05FXX0se2lkOjY2LG5hbWU6InJlc3BvbnNpdmVNb2JpbGUiLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo2NyxuYW1lOiIzMjB4NjciLGxpbWl0OjcsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo2OCxuYW1lOiJyZWxhcElvIn0se2lkOjY5LG5hbWU6InJlY29tbWVuZGF0aW9uIn0se2lkOjcwLG5hbWU6InBsaXN0YSJ9LHtpZDo3MSxuYW1lOiJtb3Rpb24iLGxpbWl0OjEsYm9yZGVyOlthLk5PTkVdfSx7aWQ6NzIsbmFtZToib2xkUG9zdGVySG9yaXpvbnRhbCIsdHlwZTpyLkhPUklaT05UQUwsbGltaXQ6NCxib3JkZXI6W2EuQURdfSx7aWQ6NzMsbmFtZToib2xkUG9zdGVyVmVydGljYWwiLHR5cGU6ci5WRVJUSUNBTCxib3JkZXI6W2EuQURdfSx7aWQ6NzQsbmFtZToibmV3Um93IixmaXhlZDohMSx0eXBlOnIuUk9XLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo3NSxuYW1lOiJvbGRNb3Rpb24iLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo3NixuYW1lOiJob3Jpem9udGFsMDMxOCIsZml4ZWQ6ITEsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLkFEXX0se2lkOjc3LG5hbWU6ImFkYXB0aXZlMDQxOCIsYm9yZGVyOlthLk5PTkUsYS5CTE9DSyxhLkFELGEuQ09MTEFQU0VdfSx7aWQ6NzgsbmFtZToic2Nyb2xsU2xpZGVyIn0se2lkOjc5LG5hbWU6Im1lZGlhIixsaW1pdDoxLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6ODAsbmFtZToibXVsdGlJbnRlcnN0aXRpYWwiLGxpbWl0OjI3LGJvcmRlcjpbYS5OT05FXX0se2lkOjgxLG5hbWU6InZlcnRpY2FsMDMxOCIsZml4ZWQ6ITEsdHlwZTpyLlZFUlRJQ0FMLGJvcmRlcjpbYS5BRF19LHtpZDo4MixuYW1lOiJyb3dNYWlsUnUiLGZpeGVkOiExLHR5cGU6ci5ST1csbGltaXQ6MSxib3JkZXI6W2EuTk9ORSxhLkJMT0NLXX0se2lkOjgzLG5hbWU6InJvd01haWxSdU9jdGF2aXVzIixmaXhlZDohMSx0eXBlOnIuUk9XLGxpbWl0OjEsYm9yZGVyOlthLk5PTkUsYS5CTE9DS119LHtpZDo4NCxuYW1lOiJtYWlscnVWZXJ0aWNhbDIiLHR5cGU6ci5WRVJUSUNBTCxib3JkZXI6W2EuTk9ORV19LHtpZDo4NSxuYW1lOiJtYWlscnVIb3Jpem9udGFsMiIsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkVdfSx7aWQ6ODYsbmFtZToicG9zdGVyVmVydGljYWwyIixjbGFzc05hbWU6ImFkYXB0ZXJDb21wb25lbnRCbG9jayIsdHlwZTpyLlZFUlRJQ0FMLGJvcmRlcjpbYS5OT05FXX0se2lkOjg3LG5hbWU6InBvc3Rlckhvcml6b250YWwyIixjbGFzc05hbWU6ImFkYXB0ZXJDb21wb25lbnRCbG9jayIsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkVdfSx7aWQ6ODgsbmFtZToic2ltcGxlIixjbGFzc05hbWU6ImFkYXB0ZXJDb21wb25lbnRCbG9jayIsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkVdfSx7aWQ6ODksbmFtZToiYmlsbGJvYXJkIixsaW1pdDoxLHR5cGU6ci5IT1JJWk9OVEFMLGJvcmRlcjpbYS5OT05FLGEuQkxPQ0tdfSx7aWQ6OTAsbmFtZToiemVuQ2Fyb3VzZWwiLGNsYXNzTmFtZToiYWRhcHRlckNvbXBvbmVudEJsb2NrIix0eXBlOnIuSE9SSVpPTlRBTCxib3JkZXI6W2EuTk9ORSxhLkFEXX0se2lkOjkxLG5hbWU6InBvc3RlckNhcm91c2VsIixjbGFzc05hbWU6ImFkYXB0ZXJDb21wb25lbnRCbG9jayIsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkUsYS5BRF19LHtpZDo5MixuYW1lOiJhZGFwdGl2ZUNhcm91c2VsIixjbGFzc05hbWU6ImFkYXB0ZXJDb21wb25lbnRCbG9jayIsdHlwZTpyLkhPUklaT05UQUwsYm9yZGVyOlthLk5PTkUsYS5BRF19XTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdylmb3IodmFyIGw9aSg5OCkuYWRhcHRpdmUwNDE4QmxvY2tzLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXSxkPXUubmFtZTtpZihkIGluIGwpbih1LHtsaW1pdDpsW2RdLmxpbWl0LGJvcmRlcjpbYS5OT05FLGEuQkxPQ0ssYS5BRCxhLkNPTExBUFNFXX0pfWUuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDMpLnRoZW4oZnVuY3Rpb24oKXtlKGkoMzc0KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDIpLnRoZW4oZnVuY3Rpb24oKXtlKGkoMzczKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDY1KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgxMikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg1NikudGhlbihmdW5jdGlvbigpe2UoaSg4MTMpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNTUpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODE0KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDU0KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgxNSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg1NykudGhlbihmdW5jdGlvbigpe2UoaSg4MTYpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMikudGhlbihmdW5jdGlvbigpe2UoaSgzNzMpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMykudGhlbihmdW5jdGlvbigpe2UoaSgzNzQpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMjcpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODE3KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0wO3QuZ2V0VW5pcXVlSW50PWZ1bmN0aW9uKCl7cmV0dXJuIG4rK319LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQubGlzdGVuZXJzPXQuRGlzcGxheU9ic2VydmVyPXQuSU5URVJWQUw9dm9pZCAwO3ZhciBuPXQuSU5URVJWQUw9MzAwLG89bnVsbDt0LkRpc3BsYXlPYnNlcnZlcj0oMCxpKDE3NykuYXVnbWVudCkoT2JqZWN0LHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihlKXt0aGlzLmhhbmRsZXI9ZX0sb2JzZXJ2ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXNjb25uZWN0KCksdGhpcy5lbGVtZW50PWUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5lbGVtZW50LGk9YSh0KTtpfHwoaT1uZXcgZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PWUsdGhpcy5vYnNlcnZlcnM9W119KHQpLHIucHVzaChpKSk7aS5vYnNlcnZlcnMucHVzaChlKSxzKGkpLHIubGVuZ3RoJiYhbyYmKG89d2luZG93LnNldEludGVydmFsKGMsbikpfSh0aGlzKSx0aGlzfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7dmFyIGUsdDtyZXR1cm4odD1hKChlPXRoaXMpLmVsZW1lbnQpKSYmKHUodC5vYnNlcnZlcnMsZSksdC5vYnNlcnZlcnMubGVuZ3RofHx1KHIsdCksIXIubGVuZ3RoJiZvJiZsKCkpLHRoaXN9fSk7dmFyIHI9dC5saXN0ZW5lcnM9W107ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoO3QrKyl7dmFyIGk9clt0XTtpZihpLmVsZW1lbnQ9PT1lKXJldHVybiBpfXJldHVybiBudWxsfWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5lbGVtZW50LG49KDAsaSg0MDIpLmhhc0RpbWVuc2lvbnMpKHQpOygwLGkoNSkuZm9yRWFjaCkoZS5vYnNlcnZlcnMuY29uY2F0KCksZnVuY3Rpb24oZSl7ZS5oYW5kbGVyKG4sdCl9KX1mdW5jdGlvbiBsKCl7d2luZG93LmNsZWFySW50ZXJ2YWwobyksbz1udWxsfWZ1bmN0aW9uIGMoKXsoMCxpKDUpLmZvckVhY2gpKHIuY29uY2F0KCkscyl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPSgwLGkoMjMpLmluZGV4T2YpKGUsdCk7bj4tMSYmZS5zcGxpY2UobiwxKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIiMiLGUuaWQsIiAuZGlzcGxheS1kZXRlY3Rvcntwb3NpdGlvbjpmaXhlZDtsZWZ0Oi0xMDAwcHg7dG9wOi0xMDAwcHg7d2lkdGg6MXB4O2hlaWdodDoxcHg7ZGlzcGxheTpibG9ja30iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbz1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxpPWFyZ3VtZW50cy5sZW5ndGg7dDxpO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBuPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8aTt0KyspZm9yKHZhciByPWFyZ3VtZW50c1t0XSxhPTAscz1yLmxlbmd0aDthPHM7YSsrLG8rKyluW29dPXJbYV07cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LGkpe3ZvaWQgMD09PWkmJihpPTApLHRoaXMubmFtZT1lLHRoaXMuc3RhcnRUaW1lPXQsdGhpcy5kdXJhdGlvbj1pfXJldHVybiBlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bmFtZTp0aGlzLm5hbWUsc3RhcnRUaW1lOnRoaXMuc3RhcnRUaW1lLGR1cmF0aW9uOnRoaXMuZHVyYXRpb259fSxlfSgpO2Z1bmN0aW9uIGEoZSx0KXt2YXIgcj1sKGUsaSgyNSkuUmVuZGVyTWFya3MuU3RhcnREb21SZW5kZXJpbmcsaSgyNSkuUmVuZGVyTWFya3MuTW91bnRlZCwiZG9tUmVuZGVyaW5nIiksYT1sKGUsaSgyNSkuUmVuZGVyTWFya3MuTW91bnRlZCxpKDI1KS5SZW5kZXJNYXJrcy5EaXNwbGF5ZWQsIndhaXRpbmdMYXlvdXQiKSxjPWwoZSxpKDI1KS5SZW5kZXJNYXJrcy5Qb3N0UmVuZGVyaW5nLGkoMjUpLlJlbmRlck1hcmtzLlJlYWR5LCJwb3N0UmVuZGVyaW5nIiksdT1sKGUsaSgyNSkuUmVuZGVyTWFya3MuU3RhcnREb21SZW5kZXJpbmcsaSgyNSkuUmVuZGVyTWFya3MuUmVhZHksInRvdGFsUmVuZGVyaW5nIiksZD1zKGUsaSgyNSkuUmVuZGVyTWFya3MuQWR2TWFuYWdlckxvYWRlcikscD1zKGUsaSgyNSkuUmVuZGVyTWFya3MuQWR2TWFuYWdlclJlbmRlciksZj0tMSxoPWkoMjUpLlJlbmRlck1hcmtzLkFkdk1hbmFnZXJMb2FkZXI7ZD9mPWQuc3RhcnRUaW1lOnAmJihoPWkoMjUpLlJlbmRlck1hcmtzLkFkdk1hbmFnZXJSZW5kZXIsZj1wLnN0YXJ0VGltZSk7dmFyIGc9bChlLGgsaSgyNSkuUmVuZGVyTWFya3MuUmVhZHlGb3JSZW5kZXJpbmcsImxvYWRpbmciKSxfPWwoZSxoLGkoMjUpLlJlbmRlck1hcmtzLlJlYWR5LCJ0b3RhbCIpLHk9byhnLHIsYSxjLHUsXyk7eS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc3RhcnRUaW1lK2UuZHVyYXRpb24tKHQuc3RhcnRUaW1lK3QuZHVyYXRpb24pfSk7dmFyIG09e307aSg1KS5mb3JFYWNoKHksZnVuY3Rpb24oZSl7bVtlLm5hbWVdPWUuZHVyYXRpb259KSxtPW4obihuKHt9LG0pLHQpLHtzdGFydFRpbWU6ZixidW5kbGU6ImFkYmxvY2sifSksaSgyNSkuY2xlYXJNYXJrcyhlKSxtLnRvdGFsUmVuZGVyaW5nJiZpKDI0NikubG9nZ2VyLmxvZyhtLCJyZW5kZXJNYXJrcyIsMyl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWUrIl8iK3Qsbz1pKDI1KS5nZXRNYXJrc0J5TmFtZShuKTtyZXR1cm4gby5sZW5ndGg/b1tvLmxlbmd0aC0xXTpudWxsfWZ1bmN0aW9uIGwoZSx0LG4sbyl7dm9pZCAwPT09byYmKG89dCsiIC0gIituKTt2YXIgYT1lKyJfIit0LHM9ZSsiXyIrbixsPWkoMjUpLmdldE1hcmtzQnlOYW1lKGEpLGM9aSgyNSkuZ2V0TWFya3NCeU5hbWUocyksdT1bXTtpZihsLmxlbmd0aCYmYy5sZW5ndGgpe3ZhciBkPWwuY29uY2F0KGMpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydFRpbWUtdC5zdGFydFRpbWV9KSxwPTA7aSg1KS5mb3JFYWNoKGQsZnVuY3Rpb24oZSl7aWYoZS5uYW1lPT09YSlwPWUuc3RhcnRUaW1lO2Vsc2UgaWYocDw9ZS5zdGFydFRpbWUpe3ZhciB0PW5ldyByKG8scCxlLnN0YXJ0VGltZS1wKTt1LnB1c2godCl9fSl9cmV0dXJuIHV9dC5jb2xsZWN0TWFya3M9YSx0LmFzeW5jQ29sbGVjdE1hcmtzPWZ1bmN0aW9uKGUsdCl7aSgxKS5wcm90ZWN0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gYShlLHQpfSwwKX0sdC5tZWFzdXJlUmVuZGVyUGhhc2U9bCx0LmdldExhc3RNZWFzdXJlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD9lW2UubGVuZ3RoLTFdOm51bGx9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSgzKSxyPShuPW8pJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTt2YXIgYT1pKDEwKSxzPXZvaWQgMDtzPWkoNjAzKTt2YXIgbD1pKDYwNCksYz1yWyJkZWZhdWx0Il0uY3JlYXRlQ29tcG9uZW50KGEse25hbWU6InlhcC1sYXlvdXQiLGJlZm9yZVJlbmRlcjpmdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyhzLHRoaXMucHJvcHMpLHRoaXMucHVzaFN0eWxlcyhsKX0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlc291cmNlQnlJZCgicm9vdCIpfSxnZXRMYXlvdXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSZXNvdXJjZUJ5SWQoIm1haW4iKX0sX3JlbmRlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMucHJvcHMsbj1pLmlkLG89KGkubGFuZyx7Y2xhc3M6ZShuLCJ5YXAtcmVzZXQiKSxyZXNvdXJjZUlkOiJyb290IixpZDpufSk7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIixvLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSh0WyJjbGFzcyJdLGUoKSx0aGlzLm1vZCkscmVzb3VyY2VJZDoibWFpbiJ9LHRoaXMuZ2V0Q2hpbGRyZW4oKSkpfX0pO2UuZXhwb3J0cz1jfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCJ7b3BhY2l0eToiLGUub3BhY2l0eSwiO3doaXRlLXNwYWNlOm5vcm1hbDt2aXNpYmlsaXR5OnZpc2libGV9LiIsZS5pZCwiLC4iLGUuaWQsIiB5YXRhZ3tkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OmluaGVyaXR9LiIsZS5pZCwiLC4iLGUuaWQsIiwuIixlLmlkLCIgYSwuIixlLmlkLCIgYiwuIixlLmlkLCIgZW0sLiIsZS5pZCwiIGlmcmFtZSwuIixlLmlkLCIgaW1nLC4iLGUuaWQsIiB0YWJsZSwuIixlLmlkLCIgdGJvZHksLiIsZS5pZCwiIHRkLC4iLGUuaWQsIiB0ciwuIixlLmlkLCIgeWF0YWd7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7LXdlYmtpdC1oeXBoZW5zOm1hbnVhbDstbXMtaHlwaGVuczptYW51YWw7aHlwaGVuczptYW51YWx9LiIsZS5pZCwiLC4iLGUuaWQsIiBhLC4iLGUuaWQsIiBiLC4iLGUuaWQsIiBlbSwuIixlLmlkLCIgaWZyYW1lLC4iLGUuaWQsIiBpbWcsLiIsZS5pZCwiIHRhYmxlLC4iLGUuaWQsIiB0Ym9keSwuIixlLmlkLCIgdGQsLiIsZS5pZCwiIHRye2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXNwYWNpbmc6MDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Y2xlYXI6bm9uZTtmbG9hdDpub25lO2ZvbnQtdmFyaWFudDpub3JtYWw7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MDttYXgtaGVpZ2h0Om5vbmU7bWF4LXdpZHRoOm5vbmU7bWluLWhlaWdodDowO21pbi13aWR0aDowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWluZGVudDowO3RleHQtdHJhbnNmb3JtOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dmlzaWJpbGl0eTppbmhlcml0O3dvcmQtc3BhY2luZzpub3JtYWx9LiIsZS5pZCwiLC4iLGUuaWQsIiBhLC4iLGUuaWQsIiBiLC4iLGUuaWQsIiBlbSwuIixlLmlkLCIgaW1nLC4iLGUuaWQsIiB0YWJsZSwuIixlLmlkLCIgdGJvZHksLiIsZS5pZCwiIHRkLC4iLGUuaWQsIiB0cntoZWlnaHQ6YXV0b30uIixlLmlkLCIgdGFibGV7ZGlzcGxheTp0YWJsZTtlbXB0eS1jZWxsczpoaWRlO3RhYmxlLWxheW91dDpmaXhlZH0uIixlLmlkLCIgdGFibGUsLiIsZS5pZCwiIHRke2ZvbnQtc2l6ZToxMDAlfS4iLGUuaWQsIiB0ZHtkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsInt3aWR0aDoiLGUuaG9uZXlXaWR0aCwiO2hlaWdodDoiLGUuaG9uZXlIZWlnaHQsIjtvdmVyZmxvdzoiLGUudmlzaWJpbGl0eSwifSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmV9LiIsZS5pZCwiIC55YXAtbGluaywuIixlLmlkLCIgLnlhcC1saW5rOmhvdmVyLC4iLGUuaWQsIiAueWFwLWxpbms6aG92ZXIgYiwuIixlLmlkLCIgLnlhcC1saW5rIGJ7ZGlzcGxheTppbmxpbmU7Y29sb3I6IixlLnNldHRpbmdzLnVybENvbG9yfHwiIzAwMDBDQyIsIjt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tLWNvbG9yOiIsbmV3IGUudXRpbHMuQ29sb3IoZS5zZXR0aW5ncy51cmxDb2xvcnx8IiMwMDAwQ0MiKS5zZXRBbHBoYSguNCksIjtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8xOjAsInB4O2JvcmRlci1ib3R0b20tc3R5bGU6IixlLnV0aWxzLmJyb3dzZXIuaXNTYWZhcmk/Imluc2V0Ijoic29saWQiLCJ9LiIsZS5pZCwiIC55YXAtbGluazpob3ZlciwuIixlLmlkLCIgLnlhcC1saW5rOmhvdmVyIGJ7Y29sb3I6IixlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIiwiO2JvcmRlci1ib3R0b20tY29sb3I6IixuZXcgZS51dGlscy5Db2xvcihlLnNldHRpbmdzLmhvdmVyQ29sb3J8fCIjMDA4OENDIikuc2V0QWxwaGEoLjQpLCJ9LiIsZS5pZCwiIGE6Zm9jdXN7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS4iLGUuaWQsIiAueWFwLWxpbmtfX3BvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAudGV4dC1vYmZ1c2NhdG9ye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtbG9nb3tkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjExcHg7b3BhY2l0eTouNztmaWx0ZXI6YWxwaGEob3BhY2l0eT03MCk7Y3Vyc29yOnBvaW50ZXJ9LiIsZS5pZCwiIC55YXAtbG9nb19fdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiIsZS5zZXR0aW5ncy50ZXh0Q29sb3J8fCIjMDAwIiwiO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20td2lkdGg6IixlLnNldHRpbmdzLmxpbmtzVW5kZXJsaW5lPzE6MCwicHg7Ym9yZGVyLWJvdHRvbS1zdHlsZToiLGUudXRpbHMuYnJvd3Nlci5pc1NhZmFyaT8iaW5zZXQiOiJzb2xpZCIsIn0uIixlLmlkLCIgLnlhcC1sb2dvX190ZXh0IGVte2ZvbnQtc3R5bGU6bm9ybWFsfS4iLGUuaWQsIiAueWFwLWxvZ286aG92ZXJ7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCl9LiIsZS5pZCwiIC55YXAtbG9nbzpob3ZlciAueWFwLWxvZ29fX3RleHR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjoiLG5ldyBlLnV0aWxzLkNvbG9yKGUuc2V0dGluZ3MudGV4dENvbG9yfHwiIzAwMDAiKS5zZXRBbHBoYSguNCksIjtib3JkZXItYm90dG9tLXdpZHRoOiIsZS5zZXR0aW5ncy5saW5rc1VuZGVybGluZT8xOjAsInB4O2JvcmRlci1ib3R0b20tc3R5bGU6IixlLnV0aWxzLmJyb3dzZXIuaXNTYWZhcmk/Imluc2V0Ijoic29saWQiLCJ9LiIsZS5pZCwiIC55YXAtbG9nb190aGVtZV9yZXNwb25zaXZlLW1vYmlsZXtvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKTtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuM2VtO2hlaWdodDoxLjNlbX0uIixlLmlkLCIgLnlhcC1sb2dvX3RoZW1lX3Jlc3BvbnNpdmUtbW9iaWxlIC55YXAtbG9nb19fdGV4dHtjb2xvcjojZmZmO2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7cGFkZGluZzowIDJweH0uIixlLmlkLCIgLnlhcC1sb2dvX19iZ3tkaXNwbGF5Om5vbmV9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzKSxhPWkoNjYpLHM9aSg1NyksbD1pKDEwKSxjPWkoMzApLHU9aSgxODEpLGQ9aSg2MDkpLHA9YS5iZW1DbGFzc05hbWVzRmFjdG9yeSgiY2xpY2stY29uZmlybWF0aW9uIixkKSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndhc09wZW5lZD9yWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6Imhvc3QiLGNsYXNzOnAoKX0sclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczpwKCJfX2NvbnRhaW5lciIpfSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImxpbmsiLG9uQ2xpY2s6dGhpcy5vbkNsaWNrTGluayxjbGFzczpwKCJfX2J1dHRvbiBfX2J1dHRvbl9nbyIpfSxjLmkxOG4oIkdPX1RPX1NJVEUiLHRoaXMucHJvcHMubGFuZ3x8MSkpLHJbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7b25DbGljazp0aGlzLm9uQ2xpY2tDbG9zZSxjbGFzczpwKCJfX2J1dHRvbiBfX2J1dHRvbl9jYW5jZWwiKX0sYy5pMThuKCJDQU5DRUxMQVRJT04iLHRoaXMucHJvcHMubGFuZ3x8MSkpKSk6bnVsbH0sdC5wcm90b3R5cGUuYWZ0ZXJSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLmhvc3Q9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImhvc3QiKSx0aGlzLnB1c2hTdHlsZXMoZCl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oZSl7dGhpcy53YXNPcGVuZWR8fCh0aGlzLndhc09wZW5lZD0hMCx0aGlzLnVwZGF0ZSgpKTt2YXIgdD1lLmhyZWYsaT1zLmdldEVsZW1lbnRJbm5lclNpemUodGhpcy5ob3N0LmdldEVsZW1lbnQoKSk7dCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0SHJlZih0KSx0aGlzLnNldE1vZChwKCJfb3BlbiIsaS5oZWlnaHQ8MTIwPyJfbGFuZHNjYXBlIjoiX3BvcnRyYWl0IixpLmhlaWdodCppLmhlaWdodDw9MzJlMz8iX3NpemVfcyI6IiIpKSl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5zZXRIcmVmKCIiKSx0aGlzLmRlbE1vZChwKCJfb3BlbiIpKX0sdC5wcm90b3R5cGUuc2V0SHJlZj1mdW5jdGlvbihlKXt0aGlzLmhyZWY9ZX0sdC5wcm90b3R5cGUub25DbGlja0xpbms9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdD10aGlzLnByb3BzLmNsaWNrQ2FsbGJhY2s7dCYmdCgpLHUub3Blbih0aGlzLmhyZWYpLHRoaXMuY2xvc2UoKX0sdC5wcm90b3R5cGUub25DbGlja0Nsb3NlPWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKX0sdH0obCk7dC5DbGlja0NvbmZpcm1hdGlvbj1mfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFN0eWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXdpbmRvdyksKCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldENvbXB1dGVkU3R5bGU/dC5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk6ZS5jdXJyZW50U3R5bGUpfHx7fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAuY2xpY2stY29uZmlybWF0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpkZWZhdWx0O2xpbmUtaGVpZ2h0OjEuMjU7dmlzaWJpbGl0eTpoaWRkZW47Zm9udC1zaXplOjE2cHg7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9LiIsZS5pZCwiIC5jbGljay1jb25maXJtYXRpb25fX2NvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEwMCU7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtYWxpZ246Y2VudGVyOy13ZWJraXQtYWxpZ24tY29udGVudDpjZW50ZXI7LW1zLWZsZXgtbGluZS1wYWNrOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjdweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjc1KX0uIixlLmlkLCIgLmNsaWNrLWNvbmZpcm1hdGlvbl9fYnV0dG9uLC4iLGUuaWQsIiAuY2xpY2stY29uZmlybWF0aW9uX19jb250YWluZXJ7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLmNsaWNrLWNvbmZpcm1hdGlvbl9fYnV0dG9ue21hcmdpbjo3cHg7cGFkZGluZzowIDdweDtjb2xvcjojZmZmO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjdweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjRweDt3aWR0aDo4MCU7bWF4LXdpZHRoOjI0MHB4O2hlaWdodDo1MnB4O21heC1oZWlnaHQ6NzUlO21pbi1oZWlnaHQ6MzJweDtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWZsZXg7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstbXMtZmxleC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LiIsZS5pZCwiIC5jbGljay1jb25maXJtYXRpb25fX2J1dHRvbl9nby5jbGljay1jb25maXJtYXRpb25fX2J1dHRvbntiYWNrZ3JvdW5kOiMwMDZhZmY7Ym9yZGVyOjB9LiIsZS5pZCwiIC5jbGljay1jb25maXJtYXRpb25fX2J1dHRvbl9jYW5jZWwuY2xpY2stY29uZmlybWF0aW9uX19idXR0b257YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MXB4IHNvbGlkIGhzbGEoMCwwJSwxMDAlLC41KX0uIixlLmlkLCIgLmNsaWNrLWNvbmZpcm1hdGlvbl9vcGVuLmNsaWNrLWNvbmZpcm1hdGlvbnt6LWluZGV4OjI2O3Zpc2liaWxpdHk6dmlzaWJsZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfS4iLGUuaWQsIiAuY2xpY2stY29uZmlybWF0aW9uX29wZW4gLmNsaWNrLWNvbmZpcm1hdGlvbl9fY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LiIsZS5pZCwiIC5jbGljay1jb25maXJtYXRpb25fbGFuZHNjYXBlIC5jbGljay1jb25maXJtYXRpb25fX2NvbnRhaW5lcnstd2Via2l0LWZsZXgtZmxvdzpyb3ctcmV2ZXJzZTstbXMtZmxleC1mbG93OnJvdy1yZXZlcnNlO2ZsZXgtZmxvdzpyb3ctcmV2ZXJzZX0uIixlLmlkLCIgLmNsaWNrLWNvbmZpcm1hdGlvbl9sYW5kc2NhcGUgLmNsaWNrLWNvbmZpcm1hdGlvbl9fYnV0dG9ue21heC13aWR0aDoyNDBweDstd2Via2l0LWZsZXgtZ3JvdzoxOy1tcy1mbGV4LXBvc2l0aXZlOjE7ZmxleC1ncm93OjF9LiIsZS5pZCwiIC5jbGljay1jb25maXJtYXRpb25fbGFuZHNjYXBlIC5jbGljay1jb25maXJtYXRpb25fX2J1dHRvbl9nb3std2Via2l0LWZsZXgtYmFzaXM6NTAlOy1tcy1mbGV4LXByZWZlcnJlZC1zaXplOjUwJTtmbGV4LWJhc2lzOjUwJTstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS4iLGUuaWQsIiAuY2xpY2stY29uZmlybWF0aW9uX3NpemVfc3tmb250LXNpemU6MTNweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X19hZHR1bmV7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMTtyaWdodDowO3RvcDowfS4iLGUuaWQsIiAueWFwLWFkdl9fYWR0dW5lLW1lc3NhZ2V7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTAxJTt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9IyIsZS5pZCwiIC55YXAtYWR2X2FidXNlZF90cnVlIC55YXAtYWR2X19tYWluLCMiLGUuaWQsIiAueWFwLWFkdl9hYnVzZWRfdHJ1ZSAueWFwLWFkdl9fcm93e2Rpc3BsYXk6bm9uZX0jIixlLmlkLCIgLnlhcC1hZHZfYWJ1c2VkX3RydWUgLnlhcC1hZHZfX2FkdHVuZS1tZXNzYWdle2xlZnQ6MDt0cmFuc2l0aW9uOmxlZnQgLjRzIGVhc2Utb3V0fSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnB1Ymxpc2hlcnMtdGV4dHtkaXNwbGF5OmlubGluZX0uIixlLmlkLCIgLnB1Ymxpc2hlcnMtdGV4dF9oeXBoZW5ze292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstd2Via2l0LWh5cGhlbnM6YXV0bzstbXMtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0b30iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIGltZy55YXAtZmF2aWNvbntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOiIsZS51dGlscy5icm93c2VyLmlzSUVRdWlya3M/IjAiOiItMC4yZW0iLCI7bWFyZ2luLXJpZ2h0Oi4zZW07d2lkdGg6MWVtO2hlaWdodDoxZW07bWluLXdpZHRoOjhweDttYXgtd2lkdGg6MTZweDttaW4taGVpZ2h0OjhweDttYXgtaGVpZ2h0OjE2cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS4iLGUuaWQsIiBpbWcueWFwLWZhdmljb25fc2l6ZV9mdWxse3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LiIsZS5pZCwiIGltZy55YXAtZmF2aWNvbl90cmFuc3BhcmVudF9ub25le2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjJweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyNSkudGhlbihmdW5jdGlvbigpe2UoaSg4MTgpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWN1cnJlbmN5LWxvZ297cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjE2cHg7cGFkZGluZzowIDZweDstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjE2cHg7Y3Vyc29yOnBvaW50ZXI7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1jdXJyZW5jeS1sb2dvX2hhcy1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI1KTtib3JkZXItcmFkaXVzOjAgMCAwIDJweDtjb2xvcjojZmZmfS4iLGUuaWQsIiAueWFwLWN1cnJlbmN5LWxvZ29fX3RleHR7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJX0uIixlLmlkLCIgLnlhcC1jdXJyZW5jeS1sb2dvX190b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTttYXJnaW4tdG9wOi05cHg7bWFyZ2luLXJpZ2h0OjhweH0uIixlLmlkLCIgLnlhcC1jdXJyZW5jeS1sb2dvOmhvdmVyIC55YXAtY3VycmVuY3ktbG9nb19fdG9vbHRpcHt2aXNpYmlsaXR5OnZpc2libGV9LiIsZS5pZCwiIC55YXAtY3VycmVuY3ktbG9nb19fYmd7ZGlzcGxheTpub25lfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDM0KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDc5NCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyOSkudGhlbihmdW5jdGlvbigpe2UoaSg4MTkpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMzApLnRoZW4oZnVuY3Rpb24oKXtlKGkoODAwKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDI4KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyMCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg3KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyMSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyNikudGhlbihmdW5jdGlvbigpe2UoaSg3OTMpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMTIpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODIyKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZSQU1FX1RJTUU9MWUzLzYwLHQuZ2V0UkFGPWZ1bmN0aW9uKGUpe3ZhciBpPWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxlLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZTtpZihpKXJldHVybiBpLmJpbmQoZSk7dmFyIG49MDtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89RGF0ZS5ub3coKSxyPU1hdGgubWF4KDAsdC5GUkFNRV9USU1FLShvLW4pKTtuPW8rcixlLnNldFRpbWVvdXQoaSxyKX19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsaSl7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9aX0pfX0oKTt0LkRlZmVycmVkPW59LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAuc2Nyb2xse292ZXJmbG93OnZpc2libGU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCAwLCMwMDAgMmVtKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCAwLCMwMDAgMmVtKTstd2Via2l0LW1hc2stcG9zaXRpb246LTJlbTttYXNrLXBvc2l0aW9uOi0yZW19LiIsZS5pZCwiIC5zY3JvbGwsLiIsZS5pZCwiIC5zY3JvbGxfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LW1hc2stc2l6ZTpjYWxjKDEwMCUgKyAyZW0pO21hc2stc2l6ZTpjYWxjKDEwMCUgKyAyZW0pO3RyYW5zaXRpb246LXdlYmtpdC1tYXNrLXBvc2l0aW9uIC4zcyBlYXNlO3RyYW5zaXRpb246bWFzay1wb3NpdGlvbiAuM3MgZWFzZTt0cmFuc2l0aW9uOm1hc2stcG9zaXRpb24gLjNzIGVhc2UsLXdlYmtpdC1tYXNrLXBvc2l0aW9uIC4zcyBlYXNlfS4iLGUuaWQsIiAuc2Nyb2xsX19jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMjcwZGVnLHRyYW5zcGFyZW50IDAsIzAwMCAyZW0pO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KDI3MGRlZyx0cmFuc3BhcmVudCAwLCMwMDAgMmVtKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2FsYygxMDAlICsgMmVtKTttYXNrLXBvc2l0aW9uOmNhbGMoMTAwJSArIDJlbSl9LiIsZS5pZCwiIC5zY3JvbGxfZm9nLXJpZ2h0LnNjcm9sbCAuc2Nyb2xsX19jb250YWluZXJ7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOjEwMCU7bWFzay1wb3NpdGlvbjoxMDAlfS4iLGUuaWQsIiAuc2Nyb2xsX2ZvZy1sZWZ0LnNjcm9sbHstd2Via2l0LW1hc2stcG9zaXRpb246MDttYXNrLXBvc2l0aW9uOjB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMTcpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODIzKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDE2KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyNCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg5KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyNSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg4KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyNikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgxMSkudGhlbihmdW5jdGlvbigpe2UoaSg4MjcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMTgpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODAxKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSx0LGksbil7dmFyIG89KHQtbikvKGUtaSkscj10LW8qZTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG8qZStyfX1mdW5jdGlvbiBvKGUsdCxpKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRMaW5lYXJGdW5jdGlvbj1uLHQuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uPWZ1bmN0aW9uKGUsdCxpLHIpe3ZhciBhPW4oZSx0LGkscik7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKGEoZSksdCxyKX19LHQuZ2V0TGltaXQ9b30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49LjQ7ZnVuY3Rpb24gbyhlLHQsbil7dm9pZCAwPT09biYmKG49MSk7dmFyIG8scj10LmlzQ292ZXIsYT0iYXV0byI9PT10LndpZHRoLHM9ImF1dG8iPT09dC5oZWlnaHQsbD10LndpZHRoKm4sYz10LmhlaWdodCpuLHU9ZVswXSxkPWVbMV0scD1lWzJdLGY9ZVszXSxoPU51bWJlcigoZC9wKS50b0ZpeGVkKDIpKTtpZihhJiZzKW89aSgxNTQpLnNjYWxlKGQscCxoLCEwKTtlbHNlIGlmKHMmJiFhKW89aSgxNTQpLnNjYWxlKGwsYyxoLCEwKTtlbHNlIGlmKGEmJiFzKW89aSgxNTQpLnNjYWxlKGwsYyxoLCExKTtlbHNle3ZhciBnPXI9PT1oPD1sL2M7bz1pKDE1NCkuc2NhbGUobCxjLGgsZyl9dmFyIF89by53aWR0aCx5PW8uaGVpZ2h0O3JldHVybntzcmM6dSxvcmlnaW5XaWR0aDpkLG9yaWdpbkhlaWdodDpwLHJhdGlvOmgsY29udGFpbmVyV2lkdGg6bCxjb250YWluZXJIZWlnaHQ6Yyx3aWR0aDpfLGhlaWdodDp5LGFyZWE6TWF0aC5taW4oXyxkKSpNYXRoLm1pbih5LHApLG9yaWdpbkFyZWE6ZCpwLG9wdGlvbnM6Zn19ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlLmFyZWE+dC5hcmVhfHxlLmFyZWE9PT10LmFyZWEmJmUub3JpZ2luQXJlYTx0Lm9yaWdpbkFyZWF9dC5hcHBseUltYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIGE9aSgyMjYpLmdldERvd25saW5rKCkscz0tMSE9PWEmJmE8bj8uNjY6MTtpKDMzNikuaXNIRFBJU2NyZWVuJiYocyo9Mik7Zm9yKHZhciBsPW51bGwsYz1udWxsLHU9MCxkPWU7dTxkLmxlbmd0aDt1Kyspe3ZhciBwPWRbdV0sZj1wWzBdLGg9cFsxXSxnPXBbMl07aWYoaCYmZyYmZil7dmFyIF89byhwLHQscyk7KG51bGw9PT1sfHxyKF8sbCkpJiYobD1fLGM9cCl9fXJldHVybiBjJiZvKGMsdCl9LHQuaXNGaXR0aW5nQmV0dGVyPXJ9LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMTMpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODI4KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDE5KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgyOSkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgzOSkudGhlbihmdW5jdGlvbigpe2UoaSg4MzApKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMzYpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODMxKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDMzKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgzMikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyMSkudGhlbihmdW5jdGlvbigpe2UoaSg4MzMpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0VGVzdERpdj1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9d2luZG93KSxufHwobj1lLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxufX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgxMCkudGhlbihmdW5jdGlvbigpe2UoaSg4MzQpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMzUpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODM1KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDMxKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDgzNikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgxNCkudGhlbihmdW5jdGlvbigpe2UoaSg4MzcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMzIpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODM4KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDQpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODM5KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDQ2KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDg0MCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC5wdWJsaXNoZXJzLXJ1Ymxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDouNzJlbX0uIixlLmlkLCIgLnB1Ymxpc2hlcnMtcnVibGUgc3Zne2hlaWdodDppbmhlcml0O3dpZHRoOi42ZW19IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSc8c3ZnIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgNzIuNSAxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUgMGg0MGEyNy41IDI3LjUgMCAwIDEgMCA1NUgxNXY2aDM4djEwSDE1djI5SDVWNzFIMFY2MWg1di02SDBWNDVoNXptMTAgMTBoMzBhMTcuNSAxNy41IDAgMCAxIDAgMzVIMTV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4nfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDE0KSxzPWkoMTApLGw9aSg4OSksYz1pKDY1MCksdT1pKDY1MSksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubmFtZT0icHVibGlzaGVycy1zdGFycyIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLnByb3BzLGk9dC52YWx1ZSxuPXQudG90YWwsbz12b2lkIDA9PT1uPzU6bixzPWEubWFwKEFycmF5KG8pLGZ1bmN0aW9uKCl7cmV0dXJuIHJbImRlZmF1bHQiXS5jcmVhdGUobC5IdG1sLHt0ZXh0OnV9KX0pO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoKX0sclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2xpbmUiLCJfX2xpbmVfZmlsbGVkIiksc3R5bGU6e3dpZHRoOjEwMCppL28rIiUifX0scyksclsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2xpbmUiKX0scykpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3RoaXMucHVzaFN0eWxlcyhjKX0sdH0ocyk7dC5TdGFycz1kfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnB1Ymxpc2hlcnMtc3RhcnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjFlbX0uIixlLmlkLCIgLnB1Ymxpc2hlcnMtc3RhcnNfX2xpbmV7ZmlsbDpoc2xhKDAsMCUsODQlLC44KTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAucHVibGlzaGVycy1zdGFyc19fbGluZSBzdmd7aGVpZ2h0OjFlbTt3aWR0aDoxZW07bWFyZ2luOjAgLjFlbX0uIixlLmlkLCIgLnB1Ymxpc2hlcnMtc3RhcnNfX2xpbmVfZmlsbGVke3Bvc2l0aW9uOmFic29sdXRlO2ZpbGw6I2ZjMH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9JzxzdmcgaGVpZ2h0PSIxZW0iIHZpZXdCb3g9IjAgMCAxNSAxNSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIuMTM1IDE0LjE2N2wtMS4yMy01LjI0MkwxNSA1LjM5OGwtNS4zOTMtLjQ2Mkw3LjUgMCA1LjM5MyA0LjkzNiAwIDUuMzk4bDQuMDg4IDMuNTI3LTEuMjIzIDUuMjQyTDcuNSAxMS4zODZ6Ii8+PC9zdmc+J30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYWRMZWZ0PWZ1bmN0aW9uKGUsdCxpKXt2b2lkIDA9PT1pJiYoaT0iICIpO3ZhciBuPXQtZS5sZW5ndGg7aWYobj4wKXtmb3IodmFyIG89aTtvLmxlbmd0aDxuOylvKz1vO3JldHVybihvLmxlbmd0aD5uP28uc3Vic3RyKDAsbik6bykrZX1yZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAuc2ltaWxhci1idXR0b257bWluLWhlaWdodDoiLGUubWluSGVpZ2h0LCJweDt3aWR0aDoxMDAlO21pbi13aWR0aDoxNjBweDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IsY29sb3Isc3Ryb2tlO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dH0uIixlLmlkLCIgLnNpbWlsYXItYnV0dG9uLC4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fX2J1dHRvbntkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpyb3c7LW1zLWZsZXgtZmxvdzpyb3c7ZmxleC1mbG93OnJvdzstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fX2J1dHRvbnttYXJnaW46M3B4IGF1dG87cGFkZGluZzowIDVweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MWVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LiIsZS5pZCwiIC5zaW1pbGFyLWJ1dHRvbl9fdGV4dHtkaXNwbGF5OmlubGluZTtwYWRkaW5nOjVweCAwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fX2J7Zm9udC13ZWlnaHQ6NzAwO2Rpc3BsYXk6aW5saW5lfS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fX2ljb257ZGlzcGxheTppbmxpbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc2l6ZToxMXB4O21hcmdpbi10b3A6LTJweH0uIixlLmlkLCIgLnNpbWlsYXItYnV0dG9uX19pY29uX2xlZnQ6YWZ0ZXIsLiIsZS5pZCwnIC5zaW1pbGFyLWJ1dHRvbl9faWNvbl9sZWZ0OmJlZm9yZXtjb250ZW50OiIgIjtkaXNwbGF5OmlubGluZX0uJyxlLmlkLCIgLnNpbWlsYXItYnV0dG9uX3RoZW1lX3RhYntiYWNrZ3JvdW5kLWNvbG9yOiIsZS5iZ0NvbG9yLCI7Y29sb3I6IixlLnRleHRDb2xvciwiO3N0cm9rZToiLGUudGV4dENvbG9yLCJ9LiIsZS5pZCwiIC5zaW1pbGFyLWJ1dHRvbl90aGVtZV90YWIgLnNpbWlsYXItYnV0dG9uX19idXR0b257bWFyZ2luOjNweCA1cHg7cGFkZGluZzowIDIwcHg7bWF4LXdpZHRoOjM0MHB4O21pbi1oZWlnaHQ6MjhweDtib3JkZXI6MXB4IHNvbGlkICIsZS5ib3JkZXJDb2xvciwiO2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvcixjb2xvcixzdHJva2U7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b246aG92ZXIuc2ltaWxhci1idXR0b25fdGhlbWVfdGFiIC5zaW1pbGFyLWJ1dHRvbl9fYnV0dG9ue2JvcmRlci1jb2xvcjoiLGUubGlua0JnQ29sb3IsIjtiYWNrZ3JvdW5kLWNvbG9yOiIsZS5saW5rQmdDb2xvciwiO2NvbG9yOiIsZS5saW5rVGV4dENvbG9yLCI7c3Ryb2tlOiIsZS5saW5rVGV4dENvbG9yLCJ9LiIsZS5pZCwiIC5zaW1pbGFyLWJ1dHRvbl90aGVtZV9iYXNle2JhY2tncm91bmQtY29sb3I6IixlLmxpbmtCZ0NvbG9yLCI7Y29sb3I6IixlLmxpbmtUZXh0Q29sb3IsIjtzdHJva2U6IixlLmxpbmtUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnNpbWlsYXItYnV0dG9uX3RoZW1lX2Jhc2U6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjoiLGUuaG92ZXJMaW5rQmdDb2xvciwiO2NvbG9yOiIsZS5ob3ZlckxpbmtUZXh0Q29sb3IsIjtzdHJva2U6IixlLmhvdmVyTGlua1RleHRDb2xvciwifS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fdGhlbWVfYmFzZS10YWJ7YmFja2dyb3VuZC1jb2xvcjoiLGUuYnV0dG9uQmdDb2xvciwiO2NvbG9yOiIsZS5idXR0b25UZXh0Q29sb3IsIjtzdHJva2U6IixlLmJ1dHRvblRleHRDb2xvciwiO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCBoc2xhKDAsMCUsMTAwJSwuMik7Zm9udC1zaXplOjEzcHg7bGV0dGVyLXNwYWNpbmc6M3B4fS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fdGhlbWVfYmFzZS10YWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjoiLGUuaG92ZXJCdXR0b25CZ0NvbG9yLCI7Y29sb3I6IixlLmhvdmVyQnV0dG9uVGV4dENvbG9yLCI7c3Ryb2tlOiIsZS5ob3ZlckJ1dHRvblRleHRDb2xvciwifS4iLGUuaWQsIiAuc2ltaWxhci1idXR0b25fdGhlbWVfYmFzZS10YWJfc2l6ZS5zaW1pbGFyLWJ1dHRvbl90aGVtZV9iYXNlLXRhYntmb250LXNpemU6MTFweDtsZXR0ZXItc3BhY2luZzoycHh9LiIsZS5pZCwiIC5zaW1pbGFyLWJ1dHRvbl90aGVtZV9iYXNlLXRhYiAuc2ltaWxhci1idXR0b25fX2J1dHRvbnttYXJnaW46NXB4O3BhZGRpbmc6MCAyMHB4O21pbi1oZWlnaHQ6MjNweDtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC4zKTtib3JkZXItcmFkaXVzOjRweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LiIsZS5pZCwiIC5zaW1pbGFyLWJ1dHRvbl9zaXplX3MgLnNpbWlsYXItYnV0dG9uX19pY29ue2Rpc3BsYXk6bm9uZX0uIixlLmlkLCIgLnNpbWlsYXItYnV0dG9uX3NpemVfcyAuc2ltaWxhci1idXR0b25fX2J1dHRvbntmb250LXNpemU6MTJweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtbG9nb3tmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtjdXJzb3I6cG9pbnRlcn0uIixlLmlkLCIgLnlhcC1sb2dvX19iZ3tkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtbG9nb19maXgtb2Zmc2V0e21hcmdpbi10b3A6LTFweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2e2ZvbnQtZmFtaWx5OiIsZS5mb250RmFtaWx5LCIgSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Ym9yZGVyOmluaGVyaXQ7Ym9yZGVyLXJhZGl1czppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiIsZS50ZXh0Q29sb3IsIjtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNX0uIixlLmlkLCIgLnlhcC1hZHYsLiIsZS5pZCwiIC55YXAtYWR2X19hZHYtY29udGFpbmVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1hZHZfX2Fkdi1jb250YWluZXJ7YmFja2dyb3VuZDoiLGUuYmdDb2xvciwiO3BvaW50ZXItZXZlbnRzOm5vbmV9LiIsZS5pZCwiIC55YXAtYWR2X19zaXRlbGluay13cmFwcGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiIsZS5zaXRlTGlua3NDb2xvciwiOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiIsZS5zaXRlTGlua3NVbmRlcmxpbmVDb2xvciwiO3RleHQtZGVjb3JhdGlvbi1jb2xvcjoiLGUuc2l0ZUxpbmtzVW5kZXJsaW5lQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmt7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9LiIsZS5pZCwiIC55YXAtYWR2X19saW5rX3RpdGxlOmhvdmVye2NvbG9yOiIsZS50aXRsZUhvdmVyQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfYm9keTpob3Zlcntjb2xvcjoiLGUuaG92ZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19zaXRlLWxpbms6aG92ZXJ7Y29sb3I6IixlLnNpdGVMaW5rc0hvdmVyQ29sb3IsIjstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvcjoiLGUuc2l0ZUxpbmtzVW5kZXJsaW5lSG92ZXJDb2xvciwiO3RleHQtZGVjb3JhdGlvbi1jb2xvcjoiLGUuc2l0ZUxpbmtzVW5kZXJsaW5lSG92ZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19idXR0b24tYWN0aW9uOmhvdmVye2JvcmRlci1jb2xvcjoiLGUuYnV0dG9uQm9yZGVySG92ZXJDb2xvciwiO2NvbG9yOiIsZS5idXR0b25Ib3ZlckNvbG9yLCI7ZmlsbDoiLGUuYnV0dG9uSG92ZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19idXR0b24tYWN0aW9uOmhvdmVyIC55YXAtYWR2X19idXR0b24tY2hldnJvbntib3JkZXItY29sb3I6IixlLmJ1dHRvbkhvdmVyQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfYnV0dG9uLWFjdGlvbjpob3ZlciAueWFwLWFkdl9fY3VycmVuY3ktc3ltYm9se2ZpbGw6IixlLmJ1dHRvbkhvdmVyQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfYnV0dG9uLWV4dHJhe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19idXR0b24tZXh0cmE6aG92ZXJ7Y29sb3I6IixlLmJ1dHRvbkV4dHJhSG92ZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19vbGQtcHJpY2V7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwnIC55YXAtYWR2X19saW5rX29sZC1wcmljZTphZnRlcntjb250ZW50OiIiO3dpZHRoOjEwMCU7aGVpZ2h0OjFweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSg1ZGVnKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDVkZWcpO2JhY2tncm91bmQtY29sb3I6JyxlLmJ1dHRvbkV4dHJhQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfb2xkLXByaWNlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6IixlLmJ1dHRvbkV4dHJhSG92ZXJDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua19vbGQtcHJpY2U6aG92ZXJfX2N1cnJlbmN5LXN5bWJvbF9leHRyYXtmaWxsOiIsZS5idXR0b25FeHRyYUhvdmVyQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfb2xkLXByaWNlOmhvdmVyIC55YXAtYWR2X19jdXJyZW5jeS1zeW1ib2x7ZmlsbDoiLGUuYnV0dG9uRXh0cmFIb3ZlckNvbG9yLCJ9LiIsZS5pZCwiIC55YXAtYWR2X19saW5re2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7LXdlYmtpdC1mbGV4LWJhc2lzOnVuc2V0Oy1tcy1mbGV4LXByZWZlcnJlZC1zaXplOnVuc2V0O2ZsZXgtYmFzaXM6dW5zZXR9LiIsZS5pZCwiIC55YXAtYWR2X19sb2dve3otaW5kZXg6MTA7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1hZHZfX2FnZSwuIixlLmlkLCIgLnlhcC1hZHZfX2xvZ297ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToiLGUuaGVhZGVyRm9udFNpemUsInB4O2xpbmUtaGVpZ2h0OjEwcHg7aGVpZ2h0OjEwcHg7Zm9udC1mYW1pbHk6VmVyZGFuYSxzYW5zLXNlcmlmO2NvbG9yOiIsZS5sb2dvUm93Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ297Y3Vyc29yOnBvaW50ZXJ9LiIsZS5pZCwiIC55YXAtYWR2X19sb2dvX2RlZmF1bHR7YmFja2dyb3VuZDoiLGUubG9nb0JnQ29sb3IsIjtjb2xvcjoiLGUubG9nb1RleHRDb2xvciwiO2JvcmRlci1yYWRpdXM6MCAwIDRweCA0cHh9LiIsZS5pZCwiIC55YXAtYWR2X19sb2dvX2RlZmF1bHQsLiIsZS5pZCwiIC55YXAtYWR2X19sb2dvX3N1YnRsZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToiLGUuaGVhZGVyRm9udFNpemUsInB4O2xpbmUtaGVpZ2h0OjE4cHg7aGVpZ2h0OjE4cHg7cGFkZGluZzowIDZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ29fc3VidGxle2JhY2tncm91bmQ6bm9uZTtjb2xvcjoiLGUud2FybmluZ1RleHRDb2xvciwiO2JvcmRlci1yYWRpdXM6MH0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ28tc2hhZG93LWJnIC55YXAtYWR2X19sb2dve2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMCwwLDAsLjI1KX0uIixlLmlkLCcgLnlhcC1hZHZfX2xvZ28tc2hhZG93LWJne2xlZnQ6MDtiYWNrZ3JvdW5kOnVuc2V0O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeE1qQWlJR2hsYVdkb2REMGlPVEFpUGp4a1pXWnpQanhtYVd4MFpYSWdlRDBpTFRRNExqQWxJaUI1UFNJdE9EQXVNQ1VpSUhkcFpIUm9QU0l4T1RZdU1DVWlJR2hsYVdkb2REMGlNall3TGpBbElpQnBaRDBpUVNJK1BHWmxSMkYxYzNOcFlXNUNiSFZ5SUhOMFpFUmxkbWxoZEdsdmJqMGlNVFlpSUdsdVBTSlRiM1Z5WTJWSGNtRndhR2xqSWk4K1BDOW1hV3gwWlhJK1BDOWtaV1p6UGp4eVpXTjBJR1pwYkd3OUlpTXdNREFpSUdacGJIUmxjajBpZFhKc0tDTkJLU0lnZUQwaUxUTXlJaUI1UFNJdE5EQWlJSGRwWkhSb1BTSXhNREFpSUdobGFXZG9kRDBpTmpBaUlISjRQU0l5TUNJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQnZjR0ZqYVhSNVBTSXVNalV3SWk4K1BDOXpkbWMrIik7d2lkdGg6MTIwcHg7aGVpZ2h0OjkwcHg7cG9pbnRlci1ldmVudHM6bm9uZTtjdXJzb3I6cG9pbnRlcn0uJyxlLmlkLCIgLnlhcC1hZHZfX2N1cnJlbmN5LWxvZ28sLiIsZS5pZCwiIC55YXAtYWR2X19sb2dvLXNoYWRvdy1iZ3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt6LWluZGV4OjEwfS4iLGUuaWQsIiAueWFwLWFkdl9fY3VycmVuY3ktbG9nb3tyaWdodDoxN3B4fS4iLGUuaWQsIiAueWFwLWFkdl9fY3VycmVuY3ktbG9nb19uby1vZmZzZXR7cmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfX2FnZV9kZWZhdWx0e2Rpc3BsYXk6YmxvY2s7Y29sb3I6IixlLndhcm5pbmdUZXh0Q29sb3IsIjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206M3B4O3JpZ2h0OjNweH0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ28tc3R1YntoZWlnaHQ6MThweDt3aWR0aDowfS4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZ3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7LW1zLWZsZXgtcGFjazpzdGFydDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6MDt6LWluZGV4OjEwO3BvaW50ZXItZXZlbnRzOmF1dG99LiIsZS5pZCwiIC55YXAtYWR2X193YXJuaW5nLC4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZyAuc2Nyb2xse3dpZHRoOjEwMCV9LiIsZS5pZCwiIC55YXAtYWR2X193YXJuaW5nIC5zY3JvbGxfX2NvbnRhaW5lcntwYWRkaW5nOjFweCAwfS4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZy10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtZmFtaWx5OlZlcmRhbmEsc2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxLjJlbTtwYWRkaW5nOjAgLjRlbX0uIixlLmlkLCIgLnlhcC1hZHZfX3dhcm5pbmdfbm9ybWFse2N1cnNvcjpkZWZhdWx0fS4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZ19ub3JtYWwgLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtmb250LXNpemU6MTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9LiIsZS5pZCwiIC55YXAtYWR2X193YXJuaW5nX2ltcG9ydGFudCAueWFwLWFkdl9fd2FybmluZy10ZXh0e2ZvbnQtc2l6ZTouOGVtfS4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZy1zdHVie21pbi1oZWlnaHQ6IixlLm1pbldhcm5pbmdIZWlnaHQsInB4fS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGV7Y29sb3I6IixlLnRpdGxlQ29sb3IsIjtmb250LXNpemU6IixlLnRpdGxlRm9udFNpemUsImVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nLWJvdHRvbTouNmVtO2xpbmUtaGVpZ2h0OjEuMjVlbTt6LWluZGV4OjEwfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc2l6ZV8xe2ZvbnQtc2l6ZToxZW19LiIsZS5pZCwiIC55YXAtYWR2X190aXRsZV9zaXplXzJ7Zm9udC1zaXplOjEuMWVtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc2l6ZV8ze2ZvbnQtc2l6ZToxLjJlbX0uIixlLmlkLCIgLnlhcC1hZHZfX3RpdGxlX3NpemVfNHtmb250LXNpemU6MS4zZW19LiIsZS5pZCwiIC55YXAtYWR2X190aXRsZV9zaXplXzV7Zm9udC1zaXplOjEuNGVtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc2l6ZV82e2ZvbnQtc2l6ZToxLjVlbX0uIixlLmlkLCIgLnlhcC1hZHZfX3RpdGxlX3NpemVfN3tmb250LXNpemU6MS42ZW19LiIsZS5pZCwiIC55YXAtYWR2X190aXRsZV9zaXplXzh7Zm9udC1zaXplOjEuN2VtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc2l6ZV85e2ZvbnQtc2l6ZToxLjhlbX0uIixlLmlkLCIgLnlhcC1hZHZfX3RpdGxlX3NpemVfMTB7Zm9udC1zaXplOjEuOWVtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc2l6ZV8xMXtmb250LXNpemU6MmVtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfY2xpcHBlZHtwYWRkaW5nLXJpZ2h0OjIwcHh9LiIsZS5pZCwiIC55YXAtYWR2X19pbWFnZXtib3JkZXItcmFkaXVzOiIsZS5pbWFnZVJhZGl1cywicHg7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl9fYm9keSwuIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbntwYWRkaW5nLWJvdHRvbToxZW19LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b25fYmlne21heC13aWR0aDozMDBweH0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbl9tZWRpdW17LXdlYmtpdC1mbGV4LWZsb3c6cm93IHdyYXA7LW1zLWZsZXgtZmxvdzpyb3cgd3JhcDtmbGV4LWZsb3c6cm93IHdyYXA7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbl9tZWRpdW0sLiIsZS5pZCwiIC55YXAtYWR2X19idXR0b25fc21hbGx7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDstbXMtZmxleC1wYWNrOnN0YXJ0O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uLWFjdGlvbiwuIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbl9zbWFsbHstd2Via2l0LWZsZXgtZmxvdzpyb3cgbm93cmFwOy1tcy1mbGV4LWZsb3c6cm93IG5vd3JhcDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbi1hY3Rpb257ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOjFweCBzb2xpZCAiLGUuYnV0dG9uQm9yZGVyQ29sb3IsIjtiYWNrZ3JvdW5kOiIsZS5idXR0b25CZ0NvbG9yLCI7cGFkZGluZzouNGVtIC44ZW07Y29sb3I6IixlLmJ1dHRvbkNvbG9yLCI7Ym9yZGVyLXJhZGl1czo0cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZmlsbDoiLGUuYnV0dG9uQ29sb3IsIjtmb250LXNpemU6IixlLmJ1dHRvbkZvbnRTaXplLCJ9LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b24tY29udGVudHtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjEuNGVtO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b24tdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7bGluZS1oZWlnaHQ6MS40ZW07aGVpZ2h0OjEuNGVtfS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uLXRleHRfcHJpY2V7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwfS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uLWNoZXZyb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O2xpbmUtaGVpZ2h0Oi40NWVtO2hlaWdodDouNDVlbTt3aWR0aDouNDVlbTtib3JkZXI6c29saWQgIixlLmJ1dHRvbkNvbG9yLCI7Ym9yZGVyLXdpZHRoOjFweCAxcHggMCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgcm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKSByb3RhdGUoNDVkZWcpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b25fc21hbGwgLnlhcC1hZHZfX2J1dHRvbi1hY3Rpb257ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOiIsZS5idXR0b25TbWFsbEZvbnRTaXplLCI7Ym9yZGVyLXJhZGl1czouMjVlbX0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbi1leHRyYXtkaXNwbGF5OmJsb2NrO2NvbG9yOiIsZS5idXR0b25FeHRyYUNvbG9yLCI7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbi1leHRyYV9kb21haW57Zm9udC1zaXplOiIsZS5idXR0b25Eb21haW5Gb250U2l6ZSwifS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uX2JpZyAueWFwLWFkdl9fYnV0dG9uLWV4dHJhe3BhZGRpbmctdG9wOi41ZW19LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b25fYmlnIC55YXAtYWR2X19idXR0b24tZXh0cmFfZG9tYWlue3BhZGRpbmctdG9wOi40ZW19LiIsZS5pZCwiIC55YXAtYWR2X19idXR0b25fbWVkaXVtIC55YXAtYWR2X19idXR0b24tZXh0cmF7cGFkZGluZy1sZWZ0Oi44ZW07cGFkZGluZy1yaWdodDouNmVtfS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uX21lZGl1bSAueWFwLWFkdl9fYnV0dG9uLWV4dHJhX2RvbWFpbntwYWRkaW5nLWxlZnQ6LjhlbTtwYWRkaW5nLXJpZ2h0OjFlbX0uIixlLmlkLCIgLnlhcC1hZHZfX3NpdGUtbGlua3N7cGFkZGluZy1ib3R0b206MWVtfS4iLGUuaWQsIiAueWFwLWFkdl9fc2l0ZS1saW5rcy1pdGVte2Rpc3BsYXk6YmxvY2s7Y29sb3I6IixlLnNpdGVMaW5rc0NvbG9yLCI7bGluZS1oZWlnaHQ6MS43ZW07dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uIixlLmlkLCIgLnlhcC1hZHZfX2NhbGxvdXRze3BhZGRpbmctYm90dG9tOjFlbTtvcGFjaXR5Oi41fS4iLGUuaWQsIiAueWFwLWFkdl9fY2FsbG91dHMtaXRlbXtsaW5lLWhlaWdodDoxLjZlbX0uIixlLmlkLCIgLnlhcC1hZHZfX2FwcC1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjUpO2JvcmRlci1yYWRpdXM6LjVlbX0uIixlLmlkLCIgLnlhcC1hZHZfX2N1cnJlbmN5LXN5bWJvbHtmaWxsOiIsZS5idXR0b25Db2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fY3VycmVuY3ktc3ltYm9sX2V4dHJhe2ZpbGw6IixlLmJ1dHRvbkV4dHJhQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2NvbXBhY3Qtd2FybmluZyAueWFwLWFkdl9fd2FybmluZ3t3aWR0aDoxMDAlO2NvbG9yOiNmZmY7Ym9yZGVyLXRvcDpub25lO3otaW5kZXg6MTA7cG9pbnRlci1ldmVudHM6YXV0b30uIixlLmlkLCIgLnlhcC1hZHZfX2NvbXBhY3Qtd2FybmluZyAueWFwLWFkdl9fd2FybmluZ19kZWZhdWx0e2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpfS4iLGUuaWQsIiAueWFwLWFkdl9fY29tcGFjdC13YXJuaW5nIC55YXAtYWR2X193YXJuaW5nX3N1YnRsZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgMCxyZ2JhKDAsMCwwLC42KSl9LiIsZS5pZCwiIC55YXAtZmVlZGJhY2stbWVudV9fZm9ybXtiYWNrZ3JvdW5kOiIsZS5mZWVkYmFja0JnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hYnVzZS1tZXNzYWdlX19jb21wbGFpbnQtbGlua3tiYWNrZ3JvdW5kOiIsZS5mZWVkYmFja0JnQ29sb3IsIjtjb2xvcjoiLGUuZmVlZGJhY2tGb250Q29sb3IsIn0uIixlLmlkLCIgLnB1Ymxpc2hlcnMtdGV4dHtwb3NpdGlvbjpyZWxhdGl2ZX0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X19ib2R5IC55YXAtYWR2X19saW5re2JhY2tncm91bmQtY29sb3I6IixlLnBpVGhlbWUuYWRkaXRpb25CZ0NvbG9yLCJ9LiIsZS5pZCwiIC55YXAtYWR2X19saW5rX2JvZHl7Y29sb3I6IixlLnBpVGhlbWUuYm9keVRleHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fbGlua190aXRsZXtiYWNrZ3JvdW5kOiIsZS5waVRoZW1lLnRpdGxlQmdDb2xvciwiO2NvbG9yOiIsZS5waVRoZW1lLnRpdGxlVGV4dENvbG9yLCciIn0uJyxlLmlkLCIgLnlhcC1hZHZfX2xpbmtfYnV0dG9uLWV4dHJhe2JhY2tncm91bmQ6IixlLnBpVGhlbWUuZXh0cmFCZ0NvbG9yLCI7Y29sb3I6IixlLnBpVGhlbWUuZXh0cmFUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2xpbmtfc2l0ZS1saW5re2JhY2tncm91bmQ6IixlLnBpVGhlbWUuc2l0ZUxpbmtCZ0NvbG9yLCI7Y29sb3I6IixlLnBpVGhlbWUuc2l0ZWxpbmtzQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX3NpdGUtbGlua3N7YmFja2dyb3VuZDoiLGUucGlUaGVtZS5zaXRlTGlua0JnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2J1dHRvbi1leHRyYXtiYWNrZ3JvdW5kOiIsZS5waVRoZW1lLmV4dHJhQmdDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9fYnV0dG9uLWFjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiIsZS5waVRoZW1lLmJ1dHRvbkluc2lkZUJnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2xpbmtfYm9keXtjb2xvcjoiLGUucGlUaGVtZS5ib2R5VGV4dENvbG9yLCJ9LiIsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X19saW5rX2J1dHRvbi1leHRyYXtjb2xvcjoiLGUucGlUaGVtZS5leHRyYVRleHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fbGlua190aXRsZXtjb2xvcjoiLGUucGlUaGVtZS50aXRsZVRleHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fYnV0dG9uLWFjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiIsZS5waVRoZW1lLmJ1dHRvbkluc2lkZUJnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXIueWFwLWFkdiAueWFwLWFkdl9fbGlua190aXRsZXtjb2xvcjoiLGUucGlUaGVtZS50aXRsZVRleHRDb2xvciwifSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLmltYWdlLWFkYXB0aXZlLC4iLGUuaWQsIiAuaW1hZ2UtYWRhcHRpdmVfX3BpY3R1cmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAuaW1hZ2UtYWRhcHRpdmVfX3BpY3R1cmU6YWZ0ZXJ7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHRyYW5zcGFyZW50LHJnYmEoMCwwLDAsLjAxKSxyZ2JhKDAsMCwwLC4wNSkpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LiIsZS5pZCwiIC5pbWFnZS1hZGFwdGl2ZV9fcGljdHVyZTphZnRlciwuIixlLmlkLCcgLmltYWdlLWFkYXB0aXZlX2ZhZGU6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS4nLGUuaWQsIiAuaW1hZ2UtYWRhcHRpdmVfZmFkZTphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgMCxyZ2JhKDAsMCwwLC4wMDYpIDkuNCUscmdiYSgwLDAsMCwuMDI0KSAxNy42JSxyZ2JhKDAsMCwwLC4wNTIpIDI0LjglLHJnYmEoMCwwLDAsLjA4OCkgMzEuMiUscmdiYSgwLDAsMCwuMTMpIDM3JSxyZ2JhKDAsMCwwLC4xNzYpIDQyLjQlLHJnYmEoMCwwLDAsLjIyNSkgNDcuNSUscmdiYSgwLDAsMCwuMjc1KSA1Mi41JSxyZ2JhKDAsMCwwLC4zMjQpIDU3LjYlLHJnYmEoMCwwLDAsLjM3KSA2MyUscmdiYSgwLDAsMCwuNDEyKSA2OC44JSxyZ2JhKDAsMCwwLC40NDgpIDc1LjIlLHJnYmEoMCwwLDAsLjQ3NikgODIuNCUscmdiYSgwLDAsMCwuNDk0KSA5MC42JSxyZ2JhKDAsMCwwLC41KSl9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoNDMpLG89aSgxODApO3QuZ2V0UElUaGVtZUZpZWxkcz1mdW5jdGlvbihlKXt2YXIgdD1lLnBpU2V0dGluZ3N8fHt9O2Z1bmN0aW9uIGkoZSl7dmFyIGk9by5ub3JtYWxpemVDb2xvckhhc2godFtlXSk7cmV0dXJuIG51bGwhPT1pP24uY3JlYXRlQ29sb3IoaSkudG9TdHJpbmcoKToiSU5WQUxJRCJ9dmFyIHI9aSgiYWRkaXRpb25fYmdfY29sb3IiKSxhPWkoImV4dHJhX2JnX2NvbG9yIikscz1pKCJ0aXRsZV9iZ19jb2xvciIpLGw9aSgiYWRkaXRpb25fYmdfY29sb3IiKSxjPWkoImJvZHlfdGV4dF9jb2xvciIpLHU9aSgiZXh0cmFfdGV4dF9jb2xvciIpLGQ9aSgidGl0bGVfdGV4dF9jb2xvciIpO3JldHVybnthZGRpdGlvbkJnQ29sb3I6bCxidXR0b25JbnNpZGVCZ0NvbG9yOmkoImJ1dHRvbl9iZ19jb2xvciIpLGV4dHJhQmdDb2xvcjphLGV4dHJhVGV4dENvbG9yOnUsYm9keVRleHRDb2xvcjpjLHNpdGVMaW5rQmdDb2xvcjpyLHNpdGVsaW5rc0NvbG9yOmkoInNpdGVsaW5rc19jb2xvciIpLHRpdGxlQmdDb2xvcjpzLHRpdGxlVGV4dENvbG9yOmR9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49aSgxNCksbz1pKDU1KSxyPWkoMTA2KTt0LmN1dEJsb2NrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuYWR2TGlzdCxpPWUuZ2V0QmxvY2tTaXplLGE9ZS5pc0hvcml6b250YWwscz1lLmFkdk1pblNxdWFyZSxsPWUuYWR2U3BhY2luZyxjPWUuYWR2TWluV2lkdGgsdT1lLmFkdk1pbkhlaWdodCxkPWUuZ3Jvd3MscD1pKCksZj1wLndpZHRoLGg9cC5oZWlnaHQsZz1NYXRoLm1heChzLE1hdGgubWF4KGYsYykqTWF0aC5tYXgoaCx1KSksXz1NYXRoLmZsb29yKE1hdGgubWF4KDEsTWF0aC5taW4oZy9zLGE/ci5nZXRTZWN0aW9uTGltaXQoZCxmK2wsYytsKTpyLmdldFNlY3Rpb25MaW1pdChkLGgrbCx1K2wpKSkpOzAhPT10WzBdLmdlb1NraW5WZXImJihfPTEpO3ZhciB5PShkPWQuc2xpY2UoMCxfKSkubGVuZ3RoLG09by5yZWR1Y2UoZCxmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9LDApO3JldHVybiBuLm1hcChkLGZ1bmN0aW9uKGUsbil7cmV0dXJue2Fkdjp0W25dLGdldEFkdlNpemU6ZnVuY3Rpb24oKXt2YXIgdD1pKCksbj10LndpZHRoLG89dC5oZWlnaHQscj1mdW5jdGlvbih0KXtyZXR1cm4gdCplL20tbCooeS0xKS95fTtyZXR1cm4gYT9uPXIobik6bz1yKG8pLHt3aWR0aDpuLGhlaWdodDpvfX19fSl9LHQuY2FsY0dyaWQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9TWF0aC5jZWlsKE1hdGgubWluKE1hdGguc3FydChlKSx0KSksbj1lJWksbz0oZS1uKS9pLHI9W10sYT0wO2E8aTthKyspci5wdXNoKG8rKGE8bj8xOjApKTtyZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoNjYxKSxvPWkoNjYyKSxyPWkoNjYzKSxhPWkoNjY0KSxzPWkoNjY1KSxsPWkoNjY2KSxjPWkoNjY3KSx1PWkoNjgpLGQ9aSg2NjgpLHA9aSg2NzApO3QuY3JlYXRlU2l6ZU1ldGVyPWZ1bmN0aW9uKGUsdCxpKXtzd2l0Y2godC5tZWFzdXJlcil7Y2FzZSJhZGFwdGl2ZSI6cmV0dXJuIG5ldyBuLkFkYXB0aXZlU2l6ZU1lYXN1cmVyKGUsdCk7Y2FzZSJtb2Rlcm5BZGFwdGl2ZSI6cmV0dXJuIG5ldyBsLk1vZGVybkFkYXB0aXZlTWVhc3VyZXIoZSx0KTtjYXNlImdyaWQiOnJldHVybiBuZXcgci5HcmlkTWVhc3VyZXIoZSk7Y2FzZSJob3Jpem9udGFsIjpyZXR1cm4gbmV3IGEuSG9yaXpvbnRhbFNpemVNZWFzdXJlcihlLHQsaSk7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuIG5ldyBkLlZlcnRpY2FsU2l6ZU1lYXN1cmVyKGUsdCk7Y2FzZSJwb3N0ZXIiOnJldHVybiBuZXcgYy5Qb3N0ZXJTaXplTWVhc3VyZXIoZSx0KTtjYXNlImludGVyc2Nyb2xsZXIiOnJldHVybiBuZXcgcy5JbnRlcnNjcm9sbGVyU2l6ZU1lYXN1cmVyKGUsdCk7Y2FzZSJ6ZW4iOnJldHVybiBuZXcgcC5aZW5TaXplTWVhc3VyZXIoZSx0KTtjYXNlImJpbGxib2FyZCI6cmV0dXJuIG5ldyBvLkJpbGxib2FyZFNpemVNZWFzdXJlcihlLHQpO2RlZmF1bHQ6cmV0dXJuIG5ldyB1LlNpemVNZWFzdXJlcihlLHQpfX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KSxyPWZ1bmN0aW9uKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9aSg1Nykscz1pKDE1MyksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsaSl7dmFyIG49aS53aWR0aCxvPWkuaGVpZ2h0LHI9ZS5jYWxsKHRoaXMsdCl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFNpemU9e3dpZHRoOnMubm9ybWFsaXplVmFsdWUobiksaGVpZ2h0OnMubm9ybWFsaXplVmFsdWUobyl9LHJ9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIGU9YS5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCksdD1lLndpZHRoKmUuaGVpZ2h0PT0wP3RoaXMuZGVmYXVsdFNpemU6ZTtyZXR1cm4odGhpcy5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHIoe30sdCl9KSgpfSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe30sdH0ocy5TaXplTWV0ZXJCYXNlKTt0LkFkYXB0aXZlU2l6ZU1lYXN1cmVyPWx9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzNCksYT03MDAscz0xODAsbD0zMDAsYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsaSl7dmFyIG49ZS5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gbi5jb2VyY2VXaWR0aD1yLmdldExpbWl0RnVuY3Rpb24oYSwxLzApLG4uY29lcmNlSGVpZ2h0PXIuZ2V0TGltaXRGdW5jdGlvbihzLGwpLG59cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wcm90b3R5cGUuZ2V0U2l6ZS5jYWxsKHRoaXMpO3JldHVybnt3aWR0aDp0aGlzLmNvZXJjZVdpZHRoKHQud2lkdGgpLGhlaWdodDp0aGlzLmNvZXJjZUhlaWdodCh0LmhlaWdodCl9fSx0fShpKDY4KS5TaXplTWVhc3VyZXIpO3QuQmlsbGJvYXJkU2l6ZU1lYXN1cmVyPWN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSg1NyksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgxNjAsci5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCkud2lkdGgpO3JldHVybnt3aWR0aDplLGhlaWdodDpNYXRoLnJvdW5kKDI2ZTQvZSl9fSx0fShpKDE1MykuU2l6ZU1ldGVyQmFzZSk7dC5HcmlkTWVhc3VyZXI9YX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDM0KSxhPWkoMjIxKSxzPWkoNTcpLGw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LGksbil7dmFyIG89ZS5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gby5ub1NpdGVsaW5rcz1pLm5vU2l0ZWxpbmtzLG8uY3V0QmxvY2s9bixvfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUuZ2V0U2l6ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMud2lkdGgsdD10aGlzLmhlaWdodCxpPXIuZ2V0TGltaXRGdW5jdGlvbihlLm1pbixlLm1heCksbj1yLmdldExpbWl0RnVuY3Rpb24odC5taW4sdC5tYXgpLG89cy5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCksbD1pKG8ud2lkdGgpLGM9bihvLmhlaWdodCksdT17d2lkdGg6bCxoZWlnaHQ6dGhpcy5ub1NpdGVsaW5rcz8yOTA6MzIwfSxkPXRoaXMuY3V0QmxvY2soITAsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO2lmKGQpe3ZhciBwPWwvZC5sZW5ndGgsZj1hLmV2ZXJ5KGQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hZHY7cmV0dXJuIHQuc2tpcFBpY3R1cmVzfHwhdC5pbWFnZX0pO3AmJnA+MzE4JiYodS5oZWlnaHQ9MjEwKSxmJiYodS5oZWlnaHQ9MTI1KX1yZXR1cm4gdC5taW49PT10Lm1heCYmMCE9PXQubWluJiYwIT09dC5tYXgmJih1LmhlaWdodD1jKSx1fSx0fShpKDY4KS5TaXplTWVhc3VyZXIpO3QuSG9yaXpvbnRhbFNpemVNZWFzdXJlcj1sfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMTA3KSxhPWkoMzkxKSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxpKXt2YXIgbj1lLmNhbGwodGhpcyx0LGkpfHx0aGlzO3JldHVybiBuLnNldHRpbmdzPWksbi5tYXhBZHZJblJvdz1pLmxpbWl0P01hdGgubWF4KGkubGltaXQvMiwxKToxLG59cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRNb2JpbGVTaXplPWZ1bmN0aW9uKCl7dmFyIGUsdD1hLklOVEVSU0NST0xMRVJfTU9CSUxFX1NFVFRJTkdTLm91dGVyUGFkZGluZyxpPWEuSU5URVJTQ1JPTExFUl9NT0JJTEVfU0VUVElOR1MuYXNwZWN0UmF0aW8sbj1hLklOVEVSU0NST0xMRVJfTU9CSUxFX1NFVFRJTkdTLmlubmVyQWRQYWRkaW5nLG89dGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoLTIqdDt0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0PnRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aD9lPTIqKG8vaSkrbjplPXRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQtMip0O3JldHVybnt3aWR0aDpvLGhlaWdodDpNYXRoLm1pbihlLHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQtMip0KX19LHQucHJvdG90eXBlLmdldERlc2t0b3BTaXplPWZ1bmN0aW9uKCl7dmFyIGU9YS5JTlRFUlNDUk9MTEVSX0RFU0tUT1BfU0VUVElOR1MuYWRIZWlnaHQsdD1hLklOVEVSU0NST0xMRVJfREVTS1RPUF9TRVRUSU5HUy5taW5Bc3BlY3RSYXRpbyxpPWEuSU5URVJTQ1JPTExFUl9ERVNLVE9QX1NFVFRJTkdTLm1heEFzcGVjdFJhdGlvLG49YS5JTlRFUlNDUk9MTEVSX0RFU0tUT1BfU0VUVElOR1MubWluSG9yaXpvbnRhbFBhZGRpbmcsbz1hLklOVEVSU0NST0xMRVJfREVTS1RPUF9TRVRUSU5HUy5pbnRlckFkUGFkZGluZyxyPWEuSU5URVJTQ1JPTExFUl9ERVNLVE9QX1NFVFRJTkdTLnZlcnRpY2FsUGFkZGluZyxzPWUqdCxsPWUqaSxjPXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aC0yKm4rbyx1PU1hdGguZmxvb3IoYy8ocytvKSksZD1NYXRoLm1pbih1LHRoaXMubWF4QWR2SW5Sb3cpLHA9Yy9kLW87cmV0dXJue3dpZHRoOk1hdGgubWluKHAsbCkqZCtvKihkLTEpLGhlaWdodDp0aGlzLnNldHRpbmdzLmxpbWl0JiZ0aGlzLnNldHRpbmdzLmxpbWl0PjE/dGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodC0yKnI6ZX19LHQucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gci5pc01vYmlsZT90aGlzLmdldE1vYmlsZVNpemUoKTp0aGlzLmdldERlc2t0b3BTaXplKCl9LHR9KGkoNjgpLlNpemVNZWFzdXJlcik7dC5JbnRlcnNjcm9sbGVyU2l6ZU1lYXN1cmVyPXN9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KSxyPWZ1bmN0aW9uKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGE9aSg1Nykscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsaSl7dmFyIG49ZS5jYWxsKHRoaXMsdCl8fHRoaXM7c3dpdGNoKGkuYWRhcHRpdmVUeXBlKXtjYXNlImwiOm4uZm9yY2VkSGVpZ2h0PTMwMDticmVhaztjYXNlInMiOm4uZm9yY2VkSGVpZ2h0PTkwO2JyZWFrO2RlZmF1bHQ6bi5mb3JjZWRIZWlnaHQ9MH1yZXR1cm4gbn1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLmdldFNpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNpemUsdD1hLmdldEVsZW1lbnRJbm5lclNpemUodGhpcy5lbGVtZW50KTtpZihlJiZlLndpZHRoPT09dC53aWR0aClyZXR1cm4gcih7fSxlKTtpZih0aGlzLmZvcmNlZEhlaWdodCl0LmhlaWdodD10aGlzLmZvcmNlZEhlaWdodDtlbHNlIGlmKHQud2lkdGg+PTcyOCl0LmhlaWdodD05MDtlbHNlIGlmKHQud2lkdGg+PTQyMCl0LmhlaWdodD0xNTA7ZWxzZXt2YXIgaT1NYXRoLm1heCgxNjAsYS5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCkud2lkdGgpO3QuaGVpZ2h0PU1hdGguZmxvb3IoTWF0aC5tYXgodC5oZWlnaHQsOWU0L2kpKX1yZXR1cm4gdGhpcy5zaXplPXIoe30sdCksdH0sdH0oaSgxNTMpLlNpemVNZXRlckJhc2UpO3QuTW9kZXJuQWRhcHRpdmVNZWFzdXJlcj1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMzQpLGE9aSg1Nykscz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsaSl7dmFyIG49ZS5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gbi5zZXR0aW5ncz1pLG59cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCx0PXRoaXMuaGVpZ2h0LGk9dGhpcy5zZXR0aW5ncyxuPWkubGltaXQsbz12b2lkIDA9PT1uPzE6bixzPWkuYWR2U3BhY2luZyxsPXZvaWQgMD09PXM/MDpzLGM9aS5sYXlvdXQsdT10Lm1pbj09PXQubWF4JiYwIT09dC5taW4mJjAhPT10Lm1heCxkPXIuZ2V0TGltaXRGdW5jdGlvbihlLm1pbixlLm1heCkscD1yLmdldExpbWl0RnVuY3Rpb24odC5taW4sdC5tYXgpLGY9YS5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCksaD1kKGYud2lkdGgpLGc9cChmLmhlaWdodCk7cmV0dXJuInZlcnRpY2FsIj09PWM/Zz0oMjkwK2wpKm8tbDoiaG9yaXpvbnRhbCIhPT1jfHx1fHwoZz0yOTApLHt3aWR0aDpoLGhlaWdodDpnfX0sdH0oaSg2OCkuU2l6ZU1lYXN1cmVyKTt0LlBvc3RlclNpemVNZWFzdXJlcj1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMzQpLGE9aSg1Nykscz1pKDY2OSksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsaSl7dmFyIG49ZS5jYWxsKHRoaXMsdCxpKXx8dGhpcztyZXR1cm4gbi5zZXR0aW5ncz1pLG59cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCx0PXRoaXMuc2V0dGluZ3MsaT10LmFkdk1pbkhlaWdodCxuPXZvaWQgMD09PWk/MTUwOmksbz10LmxpbWl0LHM9dm9pZCAwPT09bz85Om8sbD10LmFkdlNwYWNpbmcsYz12b2lkIDA9PT1sPzA6bCx1PXIuZ2V0TGltaXRGdW5jdGlvbihlLm1pbixlLm1heCkoYS5nZXRFbGVtZW50SW5uZXJTaXplKHRoaXMuZWxlbWVudCkud2lkdGgpO3JldHVybnt3aWR0aDp1LGhlaWdodDpzKnRoaXMuZ2V0VmVydGljYWwwMzE4QWR2SGVpZ2h0KHUsbisyKStjKnN9fSx0LnByb3RvdHlwZS5nZXRWZXJ0aWNhbDAzMThBZHZIZWlnaHQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT0zMjA7aWYoZT49MzAwKXt2YXIgbj1NYXRoLm1heCh0LDE2MCk7aT1NYXRoLmNlaWwoTWF0aC5tYXgoTWF0aC5taW4oMTNlNC9lLDIzMCksbikpfXJldHVybiBzLm5lZWRDdXRWZXJ0aWNhbEFkdih3aW5kb3cpJiZpPjE3MCYmKGk9MTcwKSxpfSx0fShpKDY4KS5TaXplTWVhc3VyZXIpO3QuVmVydGljYWxTaXplTWVhc3VyZXI9bH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5uZWVkQ3V0VmVydGljYWxBZHY9aSgzMSkub25jZShmdW5jdGlvbihlKXtyZXR1cm4gaSgyMSkuaXNIb3N0SW5MaXN0KGUsWyJ5YWFuaUNvbVRyIl0pfSl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5wcm90b3R5cGUuZ2V0U2l6ZS5jYWxsKHRoaXMpO3JldHVybiAwPT09dC5oZWlnaHQmJih0LmhlaWdodD0zMjApLHR9LHR9KGkoNjgpLlNpemVNZWFzdXJlcik7dC5aZW5TaXplTWVhc3VyZXI9cn0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyNCkudGhlbihmdW5jdGlvbigpe2UoaSg4NDEpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMjIpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODQyKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDE1KS50aGVuKGZ1bmN0aW9uKCl7ZShpKDg0MykpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19hZHYtY29udGFpbmVyey13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjF9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19jb250ZW50e2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdzstd2Via2l0LWZsZXgtZ3JvdzoxOy1tcy1mbGV4LXBvc2l0aXZlOjE7ZmxleC1ncm93OjF9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19pbWFnZXtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fYXBwLWljb257dG9wOjEuOGVtO2xlZnQ6NSV9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19hZ2UsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19sb2dvX25vcm1hbHtwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6MWVtO2hlaWdodDphdXRvfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fbG9nb19ub3JtYWx7cGFkZGluZy1yaWdodDouN2VtfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fZGV0YWlsc3ttYXJnaW46MTBweDtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtZmxleC1zaHJpbms6MTstbXMtZmxleC1uZWdhdGl2ZToxO2ZsZXgtc2hyaW5rOjE7LXdlYmtpdC1hbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy1tcy1mbGV4LWFsaWduOnN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19kZXRhaWxzLC4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fZGV0YWlscy13cmFwcGVyey13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MTtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2RldGFpbHMtd3JhcHBlcnt3aWR0aDoxMDAlOy13ZWJraXQtZmxleC1zaHJpbms6MDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5Oy1tcy1mbGV4LXBhY2s6c3BhY2UtZXZlbmx5O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHl9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19jb250ZW50LWZvb3RlciwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2NvbnRlbnQtd3JhcHBlcnstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1ufS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fY29udGVudC1mb290ZXJ7LXdlYmtpdC1mbGV4LWdyb3c6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmZsZXgtZW5kOy1tcy1mbGV4LXBhY2s6ZW5kO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nLXRvcDouM2VtfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MS4xNmVtO3BhZGRpbmctYm90dG9tOi4zM2VtfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fdGl0bGU6bGFzdC1jaGlsZHtwYWRkaW5nLWJvdHRvbTowfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fdGl0bGVfc2l6ZV8xe2ZvbnQtc2l6ZToxLjE3ZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X190aXRsZV9zaXplXzJ7Zm9udC1zaXplOjEuMzdlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX3RpdGxlX3NpemVfM3tmb250LXNpemU6MS42ZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X190aXRsZV9zaXplXzR7Zm9udC1zaXplOjEuOGVtfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fYm9keXtwYWRkaW5nLWJvdHRvbTouNmVtO2xpbmUtaGVpZ2h0OjEuMjVlbTtmb250LXNpemU6MWVtOy13ZWJraXQtZmxleC1zaHJpbms6MDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19zaXRlLWxpbmtze2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OjcwMDstd2Via2l0LWZsZXgtZ3JvdzozOy1tcy1mbGV4LXBvc2l0aXZlOjM7ZmxleC1ncm93OjN9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19kb21haW57ZGlzcGxheTpibG9jaztmb250LXNpemU6LjllbTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19kb21haW4tdGV4dHtkaXNwbGF5OmlubGluZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fZG9tYWluLWJ1dHRvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTouOWVtO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouNGVtIC41ZW07Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAiLGUuZG9tYWluQnV0dG9uQm9yZGVyQ29sb3IsIjtiYWNrZ3JvdW5kLWNvbG9yOiIsZS5kb21haW5CdXR0b25CZ0NvbG9yLCI7Y29sb3I6IixlLmRvbWFpbkJ1dHRvblRleHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fZG9tYWluLWJ1dHRvbjpob3Zlcntib3JkZXItY29sb3I6IixlLmRvbWFpbkJ1dHRvbkhvdmVyQm9yZGVyQ29sb3IsIjtiYWNrZ3JvdW5kLWNvbG9yOiIsZS5kb21haW5CdXR0b25Ib3ZlckJnQ29sb3IsIjtjb2xvcjoiLGUuZG9tYWluQnV0dG9uSG92ZXJUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2RvbWFpbi1jb21wYWN0e2NvbG9yOiIsZS5kb21haW5UZXh0Q29sb3IsIjtmb250LXNpemU6LjhlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2RvbWFpbi1jb21wYWN0OmhvdmVye2NvbG9yOiIsZS5kb21haW5Ib3ZlclRleHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fYWN0aW9uLWNvbnRhaW5lciwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2RvbWFpbi1jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LXNocmluazowOy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2FjdGlvbi1jb250YWluZXJ7cGFkZGluZzowOy13ZWJraXQtZmxleC1kaXJlY3Rpb246cm93Oy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtZmxleC13cmFwOm5vd3JhcDstbXMtZmxleC13cmFwOm5vd3JhcDtmbGV4LXdyYXA6bm93cmFwOy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19hY3Rpb24tYnV0dG9ue2ZvbnQtc2l6ZTouOWVtO3BhZGRpbmc6LjU1ZW0gLjY0ZW07Ym9yZGVyLXJhZGl1czo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2JvcmRlcjoxcHggc29saWQgIixlLmRvbWFpbkJ1dHRvbkJvcmRlckNvbG9yLCI7YmFja2dyb3VuZC1jb2xvcjoiLGUuZG9tYWluQnV0dG9uQmdDb2xvciwiO2NvbG9yOiIsZS5hY3Rpb25CdXR0b25UZXh0Q29sb3IsIjstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fYWN0aW9uLWJ1dHRvbjpob3Zlcntib3JkZXItY29sb3I6IixlLmRvbWFpbkJ1dHRvbkhvdmVyQm9yZGVyQ29sb3IsIjtiYWNrZ3JvdW5kLWNvbG9yOiIsZS5kb21haW5CdXR0b25Ib3ZlckJnQ29sb3IsIjtjb2xvcjoiLGUuZG9tYWluQnV0dG9uSG92ZXJUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX2FjdGlvbi1idXR0b24tdGV4dHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7bGV0dGVyLXNwYWNpbmc6MXB4fS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12MyAueWFwLWFkdl9fYWN0aW9uLWJ1dHRvbi1kb21haW57cGFkZGluZy1sZWZ0OjFlbTtjb2xvcjoiLGUuZG9tYWluVGV4dENvbG9yLCJ9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzIC55YXAtYWR2X19hY3Rpb24tYnV0dG9uLWRvbWFpbjpob3Zlcntjb2xvcjoiLGUuZG9tYWluSG92ZXJUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMgLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtmb250LXNpemU6Ljc4ZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfaGFzLWltYWdlIC55YXAtYWR2X19sb2dvLWFuZC1hZ2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RvcDoycHg7bGVmdDo1cHh9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfaGFzLWltYWdlIC55YXAtYWR2X19hZ2UsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfaGFzLWltYWdlIC55YXAtYWR2X19sb2dvX25vcm1hbHt0ZXh0LXNoYWRvdzoxcHggMXB4IDFweCByZ2JhKDAsMCwwLC41KTtjb2xvcjojZmZmfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2hhcy1pbWFnZSAueWFwLWFkdl9fYWdle3BhZGRpbmc6M3B4IDRweDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2hhcy1pbWFnZSAueWFwLWFkdl9fd2FybmluZ3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9uby1pbWFnZSAueWFwLWFkdl9fbG9nby1hbmQtYWdle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbToycHg7cmlnaHQ6NXB4fS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X25vLWltYWdlIC55YXAtYWR2X193YXJuaW5nLWNvbnRhaW5lcnstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X25vLWltYWdlIC55YXAtYWR2X193YXJuaW5ne3BhZGRpbmc6LjJlbSAwO2JvcmRlci1yYWRpdXM6IixlLmJvcmRlclJhZGl1cywiO2JhY2tncm91bmQtY29sb3I6IixlLndhcm5pbmdCZ0NvbG9yLCJ9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbm8taW1hZ2UgLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtib3gtc2l6aW5nOmJvcmRlci1ib3h9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbGF5b3V0X3Rvd2VyIC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1ufS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2xheW91dF90b3dlciAueWFwLWFkdl9faW1hZ2V7LXdlYmtpdC1mbGV4LWdyb3c6MzstbXMtZmxleC1wb3NpdGl2ZTozO2ZsZXgtZ3JvdzozfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2xheW91dF90b3dlciAueWFwLWFkdl9fZGV0YWlsc3ttYXJnaW4tdG9wOi44ZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbGF5b3V0X3Rvd2VyIC55YXAtYWR2X19sb2dvLXN0dWJ7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2xheW91dF9sZWFkZXJib2FyZC1sZWZ0IC55YXAtYWR2X190aXRsZSwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9sYXlvdXRfbGVhZGVyYm9hcmQtcmlnaHQgLnlhcC1hZHZfX3RpdGxle3RvcDotLjExZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbGF5b3V0X2xlYWRlcmJvYXJkLWxlZnQgLnlhcC1hZHZfX2NvbnRlbnR7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3c7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3d9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbGF5b3V0X2xlYWRlcmJvYXJkLWxlZnQgLnlhcC1hZHZfX2xvZ28tc3R1YntkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbGF5b3V0X2xlYWRlcmJvYXJkLWxlZnQgLnlhcC1hZHZfX3RpdGxle3BhZGRpbmctcmlnaHQ6MTZweH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9sYXlvdXRfbGVhZGVyYm9hcmQtcmlnaHQgLnlhcC1hZHZfX2RldGFpbHMtd3JhcHBlcnstd2Via2l0LWp1c3RpZnktY29udGVudDpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9sYXlvdXRfbGVhZGVyYm9hcmQtcmlnaHQgLnlhcC1hZHZfX2NvbnRlbnR7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTstbXMtZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfc2l6ZV9iaWcgLnlhcC1hZHZfX2RldGFpbHN7bWFyZ2luOjIwcHggMTBweH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaXplX2JpZyAueWFwLWFkdl9fZG9tYWluLWJ1dHRvbntwYWRkaW5nOi41ZW0gLjdlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaXplX2JpZyAueWFwLWFkdl9fYWN0aW9uLWJ1dHRvbntwYWRkaW5nOi44NWVtIDFlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaXplX2NvbXBhY3QgLnlhcC1hZHZfX3RpdGxlX3NpemVfMSwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaXplX2NvbXBhY3QgLnlhcC1hZHZfX3RpdGxlX3NpemVfM3tmb250LXNpemU6MS4xN2VtfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X3NpemVfY29tcGFjdCAueWFwLWFkdl9fdGl0bGVfc2l6ZV8yLC4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X3NpemVfY29tcGFjdCAueWFwLWFkdl9fdGl0bGVfc2l6ZV80e2ZvbnQtc2l6ZToxLjM3ZW19LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfc2l6ZV9jb21wYWN0IC55YXAtYWR2X190aXRsZV9zaXplXzMsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfc2l6ZV9jb21wYWN0IC55YXAtYWR2X190aXRsZV9zaXplXzR7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X3NpemVfY29tcGFjdCAueWFwLWFkdl9fdGl0bGVfc2l6ZV8xLC4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X3NpemVfY29tcGFjdCAueWFwLWFkdl9fdGl0bGVfc2l6ZV8yLC4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X3NpemVfY29tcGFjdCAueWFwLWFkdl9fdGl0bGVfc2l6ZV8ze21heC1oZWlnaHQ6My40OGVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaXplX2NvbXBhY3QgLnlhcC1hZHZfX2xpbmtfdGl0bGV7ZGlzcGxheTppbmxpbmV9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfc2l6ZV9jb21wYWN0IC55YXAtYWR2X19hY3Rpb24tYnV0dG9ue3BhZGRpbmc6LjRlbSAuNWVtO2JvcmRlci1yYWRpdXM6MnB4fS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2luLWNvbHVtbiAueWFwLWFkdl9fY29udGVudC1mb290ZXIsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfaW4tY29sdW1uLnlhcC1hZHZfbGF5b3V0X2xlYWRlcmJvYXJkLWxlZnQgLnlhcC1hZHZfX2ltYWdlLC4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2luLWNvbHVtbi55YXAtYWR2X2xheW91dF9sZWFkZXJib2FyZC1yaWdodCAueWFwLWFkdl9faW1hZ2UsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfaW4tcm93IC55YXAtYWR2X19pbWFnZSwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9zaW5nbGUgLnlhcC1hZHZfX2NvbnRlbnQtZm9vdGVyey13ZWJraXQtZmxleC1ncm93OjA7LW1zLWZsZXgtcG9zaXRpdmU6MDtmbGV4LWdyb3c6MH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9hZCAueWFwLWFkdl9fZGV0YWlscywuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9ibG9jayAueWFwLWFkdl9fZGV0YWlscywuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9ub25lIC55YXAtYWR2X19kZXRhaWxze21hcmdpbjouOGVtIDFlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9hZCAueWFwLWFkdl9fbG9nb19jdXJyZW5jeSwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9ibG9jayAueWFwLWFkdl9fbG9nb19jdXJyZW5jeSwuIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9ub25lIC55YXAtYWR2X19sb2dvX2N1cnJlbmN5e3JpZ2h0OjE3cHh9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfc2l6ZV9jb21wYWN0IC55YXAtYWR2X19kZXRhaWxze21hcmdpbjouN2VtIDFlbX0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9hZCAueWFwLWFkdl9faW1hZ2V7Ym9yZGVyLXJhZGl1czowfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2JvcmRlci10eXBlX25vbmUgLnlhcC1hZHZfX2Fkdi1jb250YWluZXJ7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uIixlLmlkLCIgLnlhcC1hZHZfYWRhcHRpdmUtdjMueWFwLWFkdl9ib3JkZXItdHlwZV9jb2xsYXBzZSAueWFwLWFkdl9fYWR0dW5le3RvcDo2cHg7cmlnaHQ6NnB4O3BhZGRpbmc6NHB4fS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2JvcmRlci10eXBlX2NvbGxhcHNlIC55YXAtYWR2X19hZHR1bmUgLnlhcC1hZHR1bmUtaWNvbl9fY29udGFpbmVye2JvcmRlci1yYWRpdXM6MCAiLGUuaW1hZ2VSYWRpdXMsInB4IDAgMjAlfS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2JvcmRlci10eXBlX2NvbGxhcHNlIC55YXAtYWR2X19sb2dvX2N1cnJlbmN5e3RvcDoxMHB4O3JpZ2h0OjI3cHh9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfYm9yZGVyLXR5cGVfY29sbGFwc2UueWFwLWFkdl9sYXlvdXRfbGVhZGVyYm9hcmQtbGVmdCAueWFwLWFkdl9faW1hZ2UsLiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfYm9yZGVyLXR5cGVfY29sbGFwc2UueWFwLWFkdl9sYXlvdXRfbGVhZGVyYm9hcmQtcmlnaHQgLnlhcC1hZHZfX2ltYWdle21hcmdpbjoxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl9hZGFwdGl2ZS12My55YXAtYWR2X2JvcmRlci10eXBlX2NvbGxhcHNlLnlhcC1hZHZfbGF5b3V0X3Rvd2VyIC55YXAtYWR2X19pbWFnZXttYXJnaW46MTBweCAxMHB4IDB9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbG9nb19jdXJyZW5jeSAueWFwLWFkdl9fYWR0dW5lIC55YXAtYWR0dW5lLWljb25fX2NvbnRhaW5lcntib3JkZXItcmFkaXVzOjB9LiIsZS5pZCwiIC55YXAtYWR2X2FkYXB0aXZlLXYzLnlhcC1hZHZfbG9nb19jdXJyZW5jeS55YXAtYWR2X2JvcmRlci10eXBlX2NvbGxhcHNlIC55YXAtYWR2X19hZHR1bmUgLnlhcC1hZHR1bmUtaWNvbl9fY29udGFpbmVye2JvcmRlci1yYWRpdXM6MCAiLGUuaW1hZ2VSYWRpdXMsInB4IDAgMH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDM0KSxhPWkoNDQpLHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5vbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5pbml0SW1hZ2U9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNhbGNGb250U2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJuIHIuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDNlNCwxMiwzNWU0LDI4KSh0KmkpfSx0LmNvZXJjZVNpemU9YS5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoxNTgsbWF4OjEvMH0saGVpZ2h0OnttaW46NjMsbWF4OjEvMH0scmF0aW86e21pbjouMjUsbWF4OjEvMH19KSx0fShpKDIyOCkuQWR2VG93ZXIpO3QuQWR2Tm9JbWFnZT1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSkscj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MCxpPWFyZ3VtZW50cy5sZW5ndGg7dDxpO3QrKyllKz1hcmd1bWVudHNbdF0ubGVuZ3RoO3ZhciBuPUFycmF5KGUpLG89MDtmb3IodD0wO3Q8aTt0KyspZm9yKHZhciByPWFyZ3VtZW50c1t0XSxhPTAscz1yLmxlbmd0aDthPHM7YSsrLG8rKyluW29dPXJbYV07cmV0dXJuIG59O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYT1pKDM0KSxzPWkoMyksbD1pKDY5KSxjPWkoNjEpLHU9aSg0NCksZD1pKDczKSxwPWkoMzUpLGY9aSg2NzcpLGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5yZW5kZXJQcmljZUJ1dHRvbnM9ITEsdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubW9kPSJyb3ciLHRoaXMuY29lcmNlU2l6ZT10LmNvZXJjZVNpemUsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyksdGhpcy5pbml0SW1hZ2UoKX0sdC5wcm90b3R5cGUuZ2V0U3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuW2ZdfSx0LnByb3RvdHlwZS5nZXRBZHR1bmVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkucGljdHVyZUZsb2F0LHQ9dGhpcy5pbWFnZVNpemUsaT10aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGU7cmV0dXJue21vZDpbdCYmInJpZ2h0Ij09PWU/Il9ibGFjay13aGl0ZSI6IiIsaT8iX3NoYXJwIjoiIl0uam9pbigiICIpfX0sdC5wcm90b3R5cGUuaW5pdEltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCx0PXRoaXMubWluSGVpZ2h0LXRoaXMuZ2V0V2FybmluZ01pbkhlaWdodCgpO3RoaXMuZ2V0SW1hZ2VTaXplPWZ1bmN0aW9uKCl7cmV0dXJue3dpZHRoOnQqdS5NQVhfSU1BR0VfUkFUSU8saGVpZ2h0OnR9fTt2YXIgaT10aGlzLmdldFBpY3R1cmUoKTtpZihpKXt2YXIgbj1pLndpZHRoLG89aS5oZWlnaHQscj11LmNvZXJjZUltYWdlUmF0aW8oTWF0aC5taW4obi9vLGUvKDMuNSp0KSkpO3RoaXMucHJvcHMuY29udGV4dC5zZXRQYXJhbXMoe2ltYWdlTWluV2lkdGg6dCpyfSl9fSx0LnByb3RvdHlwZS5jYWxjRm9udFNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxpPWUuaGVpZ2h0O3JldHVybiBhLmdldExpbWl0ZWRMaW5lYXJGdW5jdGlvbigxMWUzLDksMTJlNCwyMCkodCooaS0yMCkpfSx0LnByb3RvdHlwZS5jcmVhdGVSZXNvdXJjZVRyZWU9ZnVuY3Rpb24oKXtyZXR1cm5bWyJkZXRhaWxzLWwiLDRdLFsiZGV0YWlscy1tIiwzXSxbImRldGFpbHMtcyIsMl0sWyJkZXRhaWxzLXhzIiwxXV19LHQucHJvdG90eXBlLndyYXBEZXRhaWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLmlzQnV0dG9uVmlzaWJsZT9lOnNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dGhpcy5iXygiX19kZXRhaWwtd3JhcHBlciIpfSxlKX0sdC5wcm90b3R5cGUucmVuZGVyQ29udGVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJfLGk9dGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlLG49dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuaXNCdXR0b25WaXNpYmxlLG89eyJwYWRkaW5nLWJvdHRvbSI6dGhpcy5pc0NvbXBhY3RXYXJuaW5nKCk/MDp0aGlzLmdldFdhcm5pbmdNaW5IZWlnaHQoKX0sYT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5waWN0dXJlRmxvYXQsYz1hPyJfX3BpY3R1cmUtcmlnaHQiOiIiO3JldHVybiBzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ZSxjbGFzczp0LmFwcGx5KHZvaWQgMCxyKFsiX19jb250ZW50Il0sdGhpcy5yZXNvbHZlTW9kcygpLFtjXSkpfSxpP3RoaXMucmVuZGVyQ3VycmVuY3lMb2dvKCk6bnVsbCxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImRldGFpbHMtbCIsY2xhc3M6dCgiX19kZXRhaWxzIiksc3R5bGU6b30sYT9udWxsOnRoaXMucmVuZGVySW1hZ2UoKSx0aGlzLndyYXBEZXRhaWwoc1siZGVmYXVsdCJdLmNyZWF0ZShsLkNvbnRhaW5lcixudWxsLGE/dGhpcy5yZW5kZXJCdXR0b24oKTpudWxsLHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19lTTlXYVdfV1A1dyIpfSx0aGlzLnJlbmRlclRpdGxlKCksdGhpcy5yZW5kZXJCb2R5KCkpLGE/bnVsbDp0aGlzLnJlbmRlckJ1dHRvbigpKSksYT90aGlzLnJlbmRlckltYWdlKCk6bnVsbCksc1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJkZXRhaWxzLW0iLGNsYXNzOnQoIl9fZGV0YWlscyIpLHN0eWxlOm99LGE/bnVsbDp0aGlzLnJlbmRlckltYWdlKCksdGhpcy53cmFwRGV0YWlsKHNbImRlZmF1bHQiXS5jcmVhdGUobC5Db250YWluZXIsbnVsbCx0aGlzLnJlbmRlclRpdGxlKCksbj9udWxsOnRoaXMucmVuZGVyQm9keSgpLHRoaXMucmVuZGVyQnV0dG9uKCkpKSxhP3RoaXMucmVuZGVySW1hZ2UoKTpudWxsKSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImRldGFpbHMtcyIsY2xhc3M6dCgiX19kZXRhaWxzIiksc3R5bGU6b30sYT9udWxsOnRoaXMucmVuZGVySW1hZ2UoKSx0aGlzLndyYXBEZXRhaWwoc1siZGVmYXVsdCJdLmNyZWF0ZShsLkNvbnRhaW5lcixudWxsLHRoaXMucmVuZGVyVGl0bGUoKSxuP251bGw6dGhpcy5yZW5kZXJCdXR0b24oKSkpLGE/dGhpcy5yZW5kZXJJbWFnZSgpOm51bGwpLHNbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoiZGV0YWlscy14cyIsY2xhc3M6dCgiX19kZXRhaWxzIiksc3R5bGU6b30sdGhpcy53cmFwRGV0YWlsKHNbImRlZmF1bHQiXS5jcmVhdGUobC5Db250YWluZXIsbnVsbCx0aGlzLnJlbmRlclRpdGxlKCksdGhpcy5yZW5kZXJCdXR0b24oKSkpKSx0aGlzLnJlbmRlckZvb3RlcigpKX0sdC5wcm90b3R5cGUucmVuZGVyVGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJfLGk9dGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlO3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJUaXRsZS5jYWxsKHRoaXMse2NsYXNzOnQoIl9fdGl0bGUiLGk/Il9fdGl0bGVfY2xpcHBlZCI6IiIpfSl9LHQucHJvdG90eXBlLnJlbmRlckltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuaW1hZ2VTaXplLGk9dGhpcy5wcm9wcy5hZHYsbj1pLmltYWdlcyxvPWkuYWRkSW5mbztpZighdClyZXR1cm4gbnVsbDt2YXIgcj10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKSxhPXIuYW5pbWF0ZWQsbD1yLmFuaW1hdGlvbkNvdW50LGM9eyJtaW4td2lkdGgiOnQubWluV2lkdGgsIm1heC13aWR0aCI6dC5tYXhXaWR0aH07cmV0dXJuIHNbImRlZmF1bHQiXS5jcmVhdGUocC5OZXdMaW5rLHtyZXNvdXJjZUlkOiJpbWFnZSIsaHJlZjp0aGlzLnByb3BzLmFkdi51cmwsY2xhc3M6ZSgiX19saW5rIiwiX19pbWFnZSIpLHN0eWxlOmN9LHNbImRlZmF1bHQiXS5jcmVhdGUoZC5JbWFnZUFkYXB0aXZlLHtpbWFnZXM6bnx8by5pY29uLGNvbnRleHQ6dGhpcy5wcm9wcy5jb250ZXh0LHNtYXJ0Q2VudGVyOiEwLGFuaW1hdGlvbjphLGFuaW1hdGlvbkNvdW50Omx9KSxzWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9faW1hZ2UtaXRlbXMiKSxyZXNvdXJjZUlkOiJpbWFnZS1pdGVtcyJ9LHRoaXMuaXNDb21wYWN0V2FybmluZygpP3RoaXMucmVuZGVyV2FybmluZygic3VidGxlIik6bnVsbCkpfSx0LnByb3RvdHlwZS5yZW5kZXJCdXR0b249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkuaXNCdXR0b25WaXNpYmxlPzYqdGhpcy5mb250U2l6ZT50aGlzLm1pbkhlaWdodD90aGlzLnJlbmRlclByaWNlQnV0dG9ucz90aGlzLnJlbmRlckJ1dHRvblNtYWxsUHJpY2UoKTp0aGlzLnJlbmRlckJ1dHRvblNtYWxsKCk6dGhpcy5yZW5kZXJQcmljZUJ1dHRvbnM/dGhpcy5yZW5kZXJCdXR0b25CaWdQcmljZSgpOnRoaXMucmVuZGVyQnV0dG9uQmlnKCk6dGhpcy5yZW5kZXJCdXR0b25Eb21haW4oKX0sdC5wcm90b3R5cGUucmVuZGVyRm9vdGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMud2FybmluZztyZXR1cm4gdGhpcy5pc0NvbXBhY3RXYXJuaW5nKCk/c1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2NvbXBhY3QtaW5mbyIpfSx0aGlzLnJlbmRlckxvZ29BbmRBZ2UoKSk6c1siZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2Zvb3RlciIsIl9fZm9vdGVyXyIrKHQ/ImhhcyI6Im5vIikrIi13YXJuaW5nIil9LHRoaXMucmVuZGVyV2FybmluZygpLHRoaXMucmVuZGVyTG9nb0FuZEFnZSgpKX0sdC5wcm90b3R5cGUucmVuZGVyTG9nb0FuZEFnZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaXNDdXJyZW5jeUxvZ29UaXRsZTtyZXR1cm4gc1siZGVmYXVsdCJdLmNyZWF0ZShsLkNvbnRhaW5lcixudWxsLGU/bnVsbDp0aGlzLnJlbmRlckxvZ28oInJvdyIpLHRoaXMucmVuZGVyQWdlKCJyb3ciKSl9LHQucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcHMuYWR2LmFidXNlVXJsLGk9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkucGljdHVyZUZsb2F0LG49dGhpcy5pbWFnZVNpemUmJmksbz1bdD8iIjoibm8tb2Zmc2V0Il0scj17aGFzQmc6Qm9vbGVhbihuKX07cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nby5jYWxsKHRoaXMsbyxyKX0sdC5wcm90b3R5cGUuYWZ0ZXJFeGNsdXNpb249ZnVuY3Rpb24oKXt0aGlzLmNoZWNrUHJpY2VsYWJlbCgpfSx0LnByb3RvdHlwZS5jaGVja1ByaWNlbGFiZWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmFkdi5wcmljZUxhYmVsO2UmJmUucHJpY2UmJiF0aGlzLnJlbmRlclByaWNlQnV0dG9ucyYmKHRoaXMucmVuZGVyUHJpY2VCdXR0b25zPSEwLHRoaXMudXBkYXRlKCkpfSx0LmNvZXJjZVNpemU9dS5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoxOTgsbWF4OjEvMH0saGVpZ2h0OnttaW46NDgsbWF4OjEvMH0scmF0aW86e21pbjo5LzIuMixtYXg6MS8wfX0pLHR9KGMuQWR2QWRhcHRpdmVCYXNlKTt0LkFkdlJvdz1ofSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvOy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO21pbi1oZWlnaHQ6aW5oZXJpdDtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19jb250ZW50LC4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2RldGFpbC13cmFwcGVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2RldGFpbC13cmFwcGVye3dpZHRoOjEwMCU7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47LXdlYmtpdC1hbGlnbi1zZWxmOnN0cmV0Y2g7LW1zLWZsZXgtaXRlbS1hbGlnbjpzdHJldGNoO2FsaWduLXNlbGY6c3RyZXRjaH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19kZXRhaWwtd3JhcHBlciAueWFwLWFkdl9fYnV0dG9ue21hcmdpbi10b3A6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDotMWVtO21heC13aWR0aDpjYWxjKDEwMCUgLSA3cHgpO3BhZGRpbmctYm90dG9tOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19kZXRhaWwtd3JhcHBlciAueWFwLWFkdl9fYnV0dG9uLWNvbnRlbnR7Zm9udC1zaXplOjExcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NzAwO2JhY2tncm91bmQ6IixlLmJ1dHRvbkJnQ29sb3IsIjtoZWlnaHQ6dW5zZXR9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fZGV0YWlsLXdyYXBwZXIgLnlhcC1hZHZfX2ltYWdle21hcmdpbi1yaWdodDowfS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2RldGFpbC13cmFwcGVyIC55YXAtYWR2X19saW5rX2J1dHRvbi1leHRyYXtkaXNwbGF5OmlubGluZS1ibG9ja30uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19kZXRhaWwtd3JhcHBlciAueWFwLWFkdl9fZU05V2FXX1dQNXcsLiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fZGV0YWlsLXdyYXBwZXIgLnlhcC1hZHZfX2JvZHksLiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fZGV0YWlsLXdyYXBwZXIgLnlhcC1hZHZfX3RpdGxley13ZWJraXQtZmxleDpub25lOy1tcy1mbGV4Om5vbmU7ZmxleDpub25lfS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX3BpY3R1cmUtcmlnaHQgLnlhcC1hZHZfX2RldGFpbHN7LXdlYmtpdC1mbGV4OjEgMCBhdXRvOy1tcy1mbGV4OjEgMCBhdXRvO2ZsZXg6MSAwIGF1dG87ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWZsb3c6cm93IG5vd3JhcDstbXMtZmxleC1mbG93OnJvdyBub3dyYXA7ZmxleC1mbG93OnJvdyBub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6aW5oZXJpdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDstbXMtZmxleC1wYWNrOnN0YXJ0O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0Oy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxZW19LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fcGljdHVyZS1yaWdodCAueWFwLWFkdl9faW1hZ2V7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpICIsZS5pbWFnZVBvc2l0aW9uLCI7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoiLGUuaW1hZ2VQYWRkaW5nTGVmdCwiOy13ZWJraXQtYWxpZ24tc2VsZjpzdHJldGNoOy1tcy1mbGV4LWl0ZW0tYWxpZ246c3RyZXRjaDstbXMtZ3JpZC1yb3ctYWxpZ246c3RyZXRjaDthbGlnbi1zZWxmOnN0cmV0Y2g7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fcGljdHVyZS1yaWdodCAueWFwLWFkdl9fZm9vdGVyX25vLXdhcm5pbmd7bGVmdDowO2JvdHRvbTozcHh9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fZm9vdGVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OnJvdyBub3dyYXA7LW1zLWZsZXgtZmxvdzpyb3cgbm93cmFwO2ZsZXgtZmxvdzpyb3cgbm93cmFwOy13ZWJraXQtYWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7Y29sb3I6IixlLndhcm5pbmdUZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19mb290ZXJfaGFzLXdhcm5pbmd7Ym9yZGVyLXRvcDoxcHggc29saWQgIixlLmJvcmRlckNvbG9yLCI7YmFja2dyb3VuZDoiLGUud2FybmluZ0JnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19mb290ZXJfbm8td2FybmluZ3tsZWZ0OmF1dG87Ym90dG9tOjNweH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19hZ2Vfcm93LC4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2xvZ29fcm93e3BhZGRpbmc6MCAzcHh9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fd2FybmluZ3std2Via2l0LWZsZXg6MSAwOy1tcy1mbGV4OjEgMDtmbGV4OjEgMDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXRvcDoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luLXRvcDotMXB4fS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtwYWRkaW5nOjAgMWVtO3doaXRlLXNwYWNlOm5vd3JhcH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19kZXRhaWxzey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OnJvdyBub3dyYXA7LW1zLWZsZXgtZmxvdzpyb3cgbm93cmFwO2ZsZXgtZmxvdzpyb3cgbm93cmFwO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OmluaGVyaXQ7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtanVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7LW1zLWZsZXgtcGFjazpzdGFydDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MWVtfS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2ltYWdle2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xKSAiLGUuaW1hZ2VQb3NpdGlvbiwiO2JhY2tncm91bmQtc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7bWFyZ2luLXJpZ2h0OiIsZS5pbWFnZVBhZGRpbmdMZWZ0LCI7bWFyZ2luLWxlZnQ6LTFlbTstd2Via2l0LWFsaWduLXNlbGY6c3RyZXRjaDstbXMtZmxleC1pdGVtLWFsaWduOnN0cmV0Y2g7LW1zLWdyaWQtcm93LWFsaWduOnN0cmV0Y2g7YWxpZ24tc2VsZjpzdHJldGNoO3Bvc2l0aW9uOnJlbGF0aXZlfS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX2VNOVdhV19XUDV3ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO3dpZHRoOjB9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fdGl0bGV7LXdlYmtpdC1mbGV4OjEgMDstbXMtZmxleDoxIDA7ZmxleDoxIDA7cGFkZGluZzouMWVtIDFlbSAuMWVtIDB9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fYm9keXstd2Via2l0LWZsZXg6MSAwOy1tcy1mbGV4OjEgMDtmbGV4OjEgMDtwYWRkaW5nOi4zZW0gMWVtIC4xZW0gMH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19idXR0b257cGFkZGluZzouM2VtIDFlbSAuM2VtIDA7bWFyZ2luLWxlZnQ6YXV0bzttaW4td2lkdGg6MTUlO21heC13aWR0aDozMCV9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fYnV0dG9uLWV4dHJhX3ByaWNle2ZvbnQtc2l6ZToiLGUuYnV0dG9uRG9tYWluRm9udFNpemUsIn0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19pbWFnZS1pdGVtc3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19pbWFnZS1pdGVtcyAueWFwLWFkdl9fd2FybmluZ3twb3NpdGlvbjpzdGF0aWN9LiIsZS5pZCwiIC55YXAtYWR2X3JvdyAueWFwLWFkdl9fcHJpY2Vfc2tld3ttYXJnaW4tYm90dG9tOjVweDttYXJnaW4tbGVmdDotMTBweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoLTVkZWcpfS4iLGUuaWQsIiAueWFwLWFkdl9yb3cgLnlhcC1hZHZfX3ByaWNlX2ZsYXR7bWFyZ2luLWxlZnQ6NHB4fS4iLGUuaWQsIiAueWFwLWFkdl9yb3cueWFwLWFkdl9sb2dvX2N1cnJlbmN5IC55YXAtYWR2X19kZXRhaWxze3BhZGRpbmctcmlnaHQ6MzBweH0uIixlLmlkLCIgLnlhcC1hZHZfcm93IC55YXAtYWR2X19waWN0dXJlLXJpZ2h0IC55YXAtYWR2X19kZXRhaWxze3BhZGRpbmctcmlnaHQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfX2NvbXBhY3Qtd2FybmluZyAueWFwLWFkdl9fY29tcGFjdC1pbmZve3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjB9LiIsZS5pZCwiIC55YXAtYWR2X19jb21wYWN0LXdhcm5pbmcgLnlhcC1hZHZfX3dhcm5pbmd7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJTtjb2xvcjojZmZmfS4iLGUuaWQsIiAueWFwLWFkdl9fY29tcGFjdC13YXJuaW5nIC55YXAtYWR2X193YXJuaW5nX3N1YnRsZXtib3JkZXItdG9wOjA7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLHRyYW5zcGFyZW50IDAscmdiYSgwLDAsMCwuNikpfS4iLGUuaWQsIiAueWFwLWFkdl9fY29tcGFjdC13YXJuaW5nIC55YXAtYWR2X19hZ2Vfcm93LC4iLGUuaWQsIiAueWFwLWFkdl9fY29tcGFjdC13YXJuaW5nIC55YXAtYWR2X19sb2dvX3Jvd3tjb2xvcjpoc2xhKDAsMCUsNjAlLC43KTtmb250LXNpemU6MTBweH0iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmZsZXgtZW5kOy1tcy1mbGV4LXBhY2s6ZW5kO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjoiLGUuaW1hZ2VQb3NpdGlvbiwiO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDttaW4taGVpZ2h0OmluaGVyaXQ7Y29sb3I6I2ZmZn0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2xpbmtfYm9keSwuIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2xpbmtfdGl0bGV7Y29sb3I6aW5oZXJpdH0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2xpbmtfb2xkLXByaWNlOmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2xvZ297bGVmdDo1JX0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2FnZXtjb2xvcjppbmhlcml0fS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZ3tjb2xvcjojZTBlMGUwfS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZyAuc2Nyb2xsX19jb250YWluZXJ7cGFkZGluZzouNWVtIDB9LiIsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X193YXJuaW5nX25vcm1hbCAuc2Nyb2xse3RvcDotLjVlbX0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX3dhcm5pbmdfbm9ybWFsIC5zY3JvbGxfX2NvbnRhaW5lcnttYXJnaW46LS41ZW0gMH0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX3dhcm5pbmdfaW1wb3J0YW50e2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpfS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZy10ZXh0e3BhZGRpbmc6MCA1JX0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2RldGFpbHN7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDstbXMtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cGFkZGluZzouOGVtIDUlIDB9LiIsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X190aXRsZXtmb250LXNpemU6Y2FsYygiLGUudGl0bGVGb250U2l6ZSwiZW0gKyA2cHgpfS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fdGl0bGUgLnB1Ymxpc2hlcnMtdGV4dHtsaW5lLWhlaWdodDpjYWxjKDFlbSArIDRweCl9LiIsZS5pZCwnIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X190aXRsZSAucHVibGlzaGVycy10ZXh0OmFmdGVye2NvbnRlbnQ6IlxcMDBhMFx1MjAzYSI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWZ9LicsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X19ib2R5LC4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fdGl0bGV7Y29sb3I6aW5oZXJpdDt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwuMjUpLDAgMnB4IDJweCByZ2JhKDAsMCwwLC4yNSksMCA0cHggMzJweCByZ2JhKDAsMCwwLC4yNSl9LiIsZS5pZCwiIC55YXAtYWR2X3NxdWFyZS55YXAtYWR2IC55YXAtYWR2X19hcHAtaWNvbnt0b3A6MS44ZW07bGVmdDo1JX0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2N1cnJlbmN5LXN5bWJvbHtmaWxsOiIsZS5idXR0b25BbHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWFkdl9zcXVhcmUueWFwLWFkdiAueWFwLWFkdl9fY3VycmVuY3ktc3ltYm9sX2V4dHJhe2ZpbGw6I2ZmZn0uIixlLmlkLCIgLnlhcC1hZHZfc3F1YXJlLnlhcC1hZHYgLnlhcC1hZHZfX2N1cnJlbmN5LXN5bWJvbF9zbWFsbHtmaWxsOiIsZS5idXR0b25BbHRDb2xvciwifS4iLGUuaWQsIiAueWFwLWxpbmtfX3NlY29uZGFyeXtkaXNwbGF5OmJsb2NrfS4iLGUuaWQsIiAueWFwLWxpbmtfX292ZXJsYXl7cG9pbnRlci1ldmVudHM6YXV0b30iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDM0KSxhPWkoMykscz1pKDYxKSxsPWkoNDQpLGM9aSg3MyksdT1pKDM1KSxkPWkoNjgwKSxwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5tb2Q9ImxlYWRlcmJvYXJkLWF2aXRvIix0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplLGUucHJvdG90eXBlLm9uSW5pdC5jYWxsKHRoaXMpLHRoaXMuaW5pdEltYWdlKCksdGhpcy53YXJuaW5nV2lkdGg9dGhpcy53aWR0aC8yfSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bZF19LHQucHJvdG90eXBlLmluaXRJbWFnZT1mdW5jdGlvbigpe3RoaXMucHJvcHMuY29udGV4dC5zZXRQYXJhbXMoe2ltYWdlTWluV2lkdGg6dGhpcy53aWR0aC8yfSl9LHQucHJvdG90eXBlLmNhbGNGb250U2l6ZT1mdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJuIHIuZ2V0TGltaXRlZExpbmVhckZ1bmN0aW9uKDJlNCwxMSwyNGU0LDE4KSh0KmkpfSx0LnByb3RvdHlwZS5jcmVhdGVSZXNvdXJjZVRyZWU9ZnVuY3Rpb24oKXt2YXIgZT1bWyJib2R5IiwzXV07cmV0dXJuW1sidGl0bGUiLDEsW1siYnV0dG9uLW1lZGl1bS1wcmljZSIsNCxlXSxbImJ1dHRvbi1zbWFsbC1wcmljZSIsMyxlXSxbImJ1dHRvbi1tZWRpdW0iLDIsZV0sWyJidXR0b24tc21hbGwiLDEsZV1dXV19LHQucHJvdG90eXBlLmdldEFkdHVuZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKS5waWN0dXJlRmxvYXQ7cmV0dXJue21vZDpbdGhpcy5pbWFnZVNpemUmJmU/Il9ibGFjay13aGl0ZSI6IiIsdGhpcy5pc0N1cnJlbmN5TG9nb1RpdGxlPyJfc2hhcnAiOiIiXS5qb2luKCIgIil9fSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYl8saT10aGlzLmlzQ3VycmVuY3lMb2dvVGl0bGU7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDplLGNsYXNzOnQoIl9fY29udGVudCIpfSxpP3RoaXMucmVuZGVyQ3VycmVuY3lMb2dvKCk6dGhpcy5yZW5kZXJMb2dvKCksdGhpcy5yZW5kZXJJbWFnZSgpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19kZXRhaWxzIil9LHRoaXMucmVuZGVyVGl0bGUoKSx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlckJ1dHRvbk1lZGl1bSgpLHRoaXMucmVuZGVyQnV0dG9uU21hbGwoKSx0aGlzLnJlbmRlckJ1dHRvbk1lZGl1bVByaWNlKCksdGhpcy5yZW5kZXJCdXR0b25TbWFsbFByaWNlKCksdGhpcy5yZW5kZXJBZ2UoKSkpfSx0LnByb3RvdHlwZS5yZW5kZXJJbWFnZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl8sdD10aGlzLmltYWdlU2l6ZSxpPXRoaXMucHJvcHMuYWR2LG49aS5pbWFnZXMsbz1pLmFkZEluZm8scj10aGlzLnByb3BzLmNvbnRleHQuZ2V0VGhlbWUoKSxzPXIuYW5pbWF0ZWQsbD1yLmFuaW1hdGlvbkNvdW50LGQ9e3dpZHRoOnQubWluV2lkdGh9O3JldHVybiBhWyJkZWZhdWx0Il0uY3JlYXRlKHUuTmV3TGluayx7cmVzb3VyY2VJZDoiaW1hZ2UiLGhyZWY6dGhpcy5wcm9wcy5hZHYudXJsLGNsYXNzOmUoIl9fbGluayIsIl9faW1hZ2UiKSxzdHlsZTpkfSxhWyJkZWZhdWx0Il0uY3JlYXRlKGMuSW1hZ2VBZGFwdGl2ZSx7aW1hZ2VzOm58fG8uaWNvbixjb250ZXh0OnRoaXMucHJvcHMuY29udGV4dCxzbWFydENlbnRlcjohMCxhbmltYXRpb246cyxhbmltYXRpb25Db3VudDpsfSksdGhpcy5yZW5kZXJBcHBJY29uKCksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2ltYWdlLWl0ZW1zIikscmVzb3VyY2VJZDoiaW1hZ2UtaXRlbXMifSx0aGlzLnJlbmRlcldhcm5pbmcoKSkpfSx0LnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByb3BzLmFkdi5hYnVzZVVybCxpPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLnBpY3R1cmVGbG9hdCxuPXRoaXMuaW1hZ2VTaXplJiZpLG89W3Q/IiI6Im5vLW9mZnNldCJdLHI9e2hhc0JnOkJvb2xlYW4obil9O3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJDdXJyZW5jeUxvZ28uY2FsbCh0aGlzLG8scil9LHQuY29lcmNlU2l6ZT1sLmNyZWF0ZVNpemVDb2VyY2VyKHt3aWR0aDp7bWluOjIzOCxtYXg6MS8wfSxoZWlnaHQ6e21pbjo3OCxtYXg6MS8wfSxyYXRpbzp7bWluOjEuNixtYXg6MS8wfX0pLHR9KHMuQWR2QWRhcHRpdmVCYXNlKTt0LkFkdkxlYWRlcmJvYXJkQXZpdG89cH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OnJvdyBub3dyYXA7LW1zLWZsZXgtZmxvdzpyb3cgbm93cmFwO2ZsZXgtZmxvdzpyb3cgbm93cmFwO21pbi1oZWlnaHQ6aW5oZXJpdDtwb3NpdGlvbjpyZWxhdGl2ZX0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQtYXZpdG8gLnlhcC1hZHZfX2xvZ297bGVmdDoxZW19LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X19saW5rX29sZC1wcmljZXtvcGFjaXR5Oi41fS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZC1hdml0byAueWFwLWFkdl9fbGlua19vbGQtcHJpY2U6YWZ0ZXJ7Ym94LXNoYWRvdzowIC0xcHggMXB4ICNmZmZ9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X193YXJuaW5ne2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjUpO2NvbG9yOiNmZmZ9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X193YXJuaW5nLXRleHR7cGFkZGluZzouNGVtIDFlbX0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQtYXZpdG8gLnlhcC1hZHZfX2RldGFpbHN7LXdlYmtpdC1mbGV4OjEgMDstbXMtZmxleDoxIDA7ZmxleDoxIDA7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDstbXMtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cGFkZGluZzouOGVtIDFlbSAwICIsZS5pbWFnZVBhZGRpbmdMZWZ0LCI7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZC1hdml0byAueWFwLWFkdl9faW1hZ2V7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpIHRvcDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZC1hdml0byAueWFwLWFkdl9fdGl0bGV7cGFkZGluZy1ib3R0b206LjNlbX0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQtYXZpdG8gLnlhcC1hZHZfX2JvZHl7cGFkZGluZy1ib3R0b206MH0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQtYXZpdG8gLnlhcC1hZHZfX2J1dHRvbnttYXJnaW4tdG9wOmF1dG99LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X19hcHAtaWNvbnt0b3A6MmVtO2xlZnQ6MWVtfS4iLGUuaWQsIiAueWFwLWFkdl9sZWFkZXJib2FyZC1hdml0byAueWFwLWFkdl9faW1hZ2UtaXRlbXN7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjB9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X19wcmljZV9za2V3e21hcmdpbi1ib3R0b206NXB4O21hcmdpbi1sZWZ0Oi0xMHB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtNWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgtNWRlZyl9LiIsZS5pZCwiIC55YXAtYWR2X2xlYWRlcmJvYXJkLWF2aXRvIC55YXAtYWR2X19wcmljZV9mbGF0e21hcmdpbi1sZWZ0OjRweH0uIixlLmlkLCIgLnlhcC1hZHZfbGVhZGVyYm9hcmQtYXZpdG8ueWFwLWFkdl9uby1wYWRkaW5ncyAueWFwLWFkdl9fZGV0YWlsc3twYWRkaW5nOjAgMTBweCAwICIsZS5pbWFnZVBhZGRpbmdMZWZ0LCJ9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzNCksYT1pKDMpLHM9aSg2MSksbD1pKDQ0KSxjPWkoNzMpLHU9aSgzNSksZD1pKDY4MikscD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMubW9kPSJ0b3dlci1hdml0byIsdGhpcy5jb2VyY2VTaXplPXQuY29lcmNlU2l6ZSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKSx0aGlzLmluaXRJbWFnZSgpfSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5bZF19LHQucHJvdG90eXBlLmluaXRJbWFnZT1mdW5jdGlvbigpe3RoaXMucHJvcHMuY29udGV4dC5zZXRQYXJhbXMoe2ltYWdlTWluSGVpZ2h0OnRoaXMubWluSGVpZ2h0LzJ9KX0sdC5wcm90b3R5cGUuZ2V0QWR0dW5lT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybnttb2Q6WyJfYmxhY2std2hpdGUiLHRoaXMuaXNDdXJyZW5jeUxvZ29UaXRsZT8iX3NoYXJwIjoiIl0uam9pbigiICIpfX0sdC5wcm90b3R5cGUuY2FsY0ZvbnRTaXplPWZ1bmN0aW9uKGUpe3ZhciB0PWUud2lkdGgsaT1lLmhlaWdodDtyZXR1cm4gci5nZXRMaW1pdGVkTGluZWFyRnVuY3Rpb24oMmU0LDExLDI0ZTQsMTgpKHQqaSl9LHQucHJvdG90eXBlLmNyZWF0ZVJlc291cmNlVHJlZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLm11bHRpcGxlLHQ9Qm9vbGVhbih0aGlzLmFwcCksaT1bWyJib2R5IiwxXV0sbj1lJiYhdD8yOjE7cmV0dXJuW1sidGl0bGUiLDEsW1siYnV0dG9uLXNtYWxsLXByaWNlIixuKzEsaV0sWyJidXR0b24tc21hbGwiLG4saV1dXV19LHQucHJvdG90eXBlLnJlbmRlckNvbnRlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5iXyxpPXRoaXMuaXNDdXJyZW5jeUxvZ29UaXRsZTtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOmUsY2xhc3M6dCgiX19jb250ZW50Iil9LGk/dGhpcy5yZW5kZXJDdXJyZW5jeUxvZ28oKTp0aGlzLnJlbmRlckxvZ28oKSx0aGlzLnJlbmRlckltYWdlKCksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2RldGFpbHMiKX0sdGhpcy5yZW5kZXJUaXRsZSgpLHRoaXMucmVuZGVyQm9keSgpLHRoaXMucmVuZGVyQnV0dG9uU21hbGwoKSx0aGlzLnJlbmRlckJ1dHRvblNtYWxsUHJpY2UoKSx0aGlzLnJlbmRlckFnZSgpKSl9LHQucHJvdG90eXBlLnJlbmRlckltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuaW1hZ2VTaXplLGk9dGhpcy5wcm9wcy5hZHYsbj1pLmltYWdlcyxvPWkuYWRkSW5mbyxyPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLHM9ci5hbmltYXRlZCxsPXIuYW5pbWF0aW9uQ291bnQsZD17aGVpZ2h0OnQubWluSGVpZ2h0fTtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZSh1Lk5ld0xpbmsse3Jlc291cmNlSWQ6ImltYWdlIixocmVmOnRoaXMucHJvcHMuYWR2LnVybCxjbGFzczplKCJfX2xpbmsiLCJfX2ltYWdlIiksc3R5bGU6ZH0sYVsiZGVmYXVsdCJdLmNyZWF0ZShjLkltYWdlQWRhcHRpdmUse2ltYWdlczpufHxvLmljb24sY29udGV4dDp0aGlzLnByb3BzLmNvbnRleHQsc21hcnRDZW50ZXI6ITAsYW5pbWF0aW9uOnMsYW5pbWF0aW9uQ291bnQ6bH0pLHRoaXMucmVuZGVyQXBwSWNvbigpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19pbWFnZS1pdGVtcyIpLHJlc291cmNlSWQ6ImltYWdlLWl0ZW1zIn0sdGhpcy5yZW5kZXJXYXJuaW5nKCkpKX0sdC5wcm90b3R5cGUucmVuZGVyQ3VycmVuY3lMb2dvPWZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMucHJvcHMuYWR2LmFidXNlVXJsPyIiOiJuby1vZmZzZXQiXSxpPXtoYXNCZzpCb29sZWFuKHRoaXMuaW1hZ2VTaXplKX07cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckN1cnJlbmN5TG9nby5jYWxsKHRoaXMsdCxpKX0sdC5jb2VyY2VTaXplPWwuY3JlYXRlU2l6ZUNvZXJjZXIoe3dpZHRoOnttaW46MTU4LG1heDoxLzB9LGhlaWdodDp7bWluOjE1OCxtYXg6MS8wfSxyYXRpbzp7bWluOi4yNSxtYXg6bC5NQVhfSU1BR0VfUkFUSU99fSksdH0ocy5BZHZBZGFwdGl2ZUJhc2UpO3QuQWR2VG93ZXJBdml0bz1wfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItYXZpdG8gLnlhcC1hZHZfX2NvbnRlbnR7LXdlYmtpdC1mbGV4OjEgMCBhdXRvOy1tcy1mbGV4OjEgMCBhdXRvO2ZsZXg6MSAwIGF1dG87ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDstbXMtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7bWluLWhlaWdodDppbmhlcml0O3Bvc2l0aW9uOnJlbGF0aXZlfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fbG9nb3tsZWZ0OjFlbX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItYXZpdG8gLnlhcC1hZHZfX3dhcm5pbmd7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNSk7Y29sb3I6I2ZmZn0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItYXZpdG8gLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtwYWRkaW5nOi40ZW0gMWVtfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fZGV0YWlsc3std2Via2l0LWZsZXg6MSAwIGF1dG87LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0bztkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwOy1tcy1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDstd2Via2l0LWp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOi44ZW0gMWVtIDA7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWF2aXRvIC55YXAtYWR2X19ib2R5LC4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fdGl0bGV7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fYnV0dG9uX3NtYWxse2ZvbnQtc2l6ZToxLjFlbX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItYXZpdG8gLnlhcC1hZHZfX2J1dHRvbi1leHRyYV9kb21haW57Zm9udC1zaXplOi45ZW19LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWF2aXRvIC55YXAtYWR2X19pbWFnZXtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSkgdG9wO2JhY2tncm91bmQtc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fYXBwLWljb257dG9wOjJlbTtsZWZ0OjFlbX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItYXZpdG8gLnlhcC1hZHZfX2ltYWdlLWl0ZW1ze3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fcHJpY2Vfc2tld3ttYXJnaW4tYm90dG9tOjVweDttYXJnaW4tbGVmdDpjYWxjKC44ZW0gLSAyM3B4KTstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoLTVkZWcpfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0byAueWFwLWFkdl9fcHJpY2VfZmxhdHttYXJnaW4tbGVmdDouOGVtfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1hdml0by55YXAtYWR2X25vLXBhZGRpbmdzIC55YXAtYWR2X19kZXRhaWxze3BhZGRpbmc6LjhlbSAwIDB9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSgzNCksYT1pKDMpLHM9aSg2OSksbD1pKDE0KSxjPWkoMTkpLHU9aSg2MSksZD1pKDQ0KSxwPWkoNzMpLGY9aSgzMDYpLGg9aSgzMzgpLGc9aSg4NiksXz1pKDMwKSx5PWkoNjg0KSxtPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5tb2Q9InRvd2VyLWdlbyB0b3dlci1nZW8tdiIrTnVtYmVyKHRoaXMucHJvcHMuYWR2Lmdlb1NraW5WZXIpLnRvU3RyaW5nKCksdGhpcy5jb2VyY2VTaXplPXQuY29lcmNlU2l6ZSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKSx0aGlzLmluaXRJbWFnZSgpfSx0LnByb3RvdHlwZS5nZXRTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm5beV19LHQucHJvdG90eXBlLmluaXRJbWFnZT1mdW5jdGlvbigpe3RoaXMucHJvcHMuY29udGV4dC5zZXRQYXJhbXMoe2ltYWdlTWluSGVpZ2h0OjE3MCxpbWFnZU1heEhlaWdodDoxNzB9KX0sdC5wcm90b3R5cGUuZ2V0QWR0dW5lT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybnttb2Q6Il9ibGFjay13aGl0ZSJ9fSx0LnByb3RvdHlwZS5jYWxjRm9udFNpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxpPWUuaGVpZ2h0O3JldHVybiByLmdldExpbWl0ZWRMaW5lYXJGdW5jdGlvbigyZTQsMTEsMjRlNCwxOCkodCppKX0sdC5wcm90b3R5cGUuY3JlYXRlUmVzb3VyY2VUcmVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jb250ZXh0LmdldFRoZW1lKCkubXVsdGlwbGUsdD1Cb29sZWFuKHRoaXMuYXBwKSxpPXRoaXMucHJvcHMuYWR2Lmdlb1NraW5WZXIsbj1lJiYhdD8yOjE7aWYoMj09PWkpcmV0dXJuW1sidGl0bGUiLDEsW1siYnV0dG9uLWdlbyIsMixbWyJzaW1wbGUtZG9tYWluIiwxLFtbImJvZHkiLDFdXV1dXSxbImJ1dHRvbi1zbWFsbCIsbixbWyJnZW9pbmZvLWxhcmdlIiwxLFtbImJvZHkiLDFdXV1dXV1dXTtpZigzPT09aSl7dmFyIG89W1siZ2VvaW5mbyIsMSxbWyJ3b3JraW5nLXRpbWUiLDEsW1siYm9keSIsMV1dXV1dXTtyZXR1cm5bWyJ0aXRsZSIsMSxbWyJidXR0b24tbWVkaXVtIiwxLG9dLFsiYnV0dG9uLXNtYWxsIixuLG9dXV1dfXZhciByPVtbImdlb2luZm8tc21hbGwiLDEsW1siYm9keSIsMV1dXSxbImdlb2luZm8tbGFyZ2UiLDEsW1siYm9keSIsMV1dXV07cmV0dXJuW1sidGl0bGUiLDEsW1siYnV0dG9uLW1lZGl1bSIsMSxyXSxbImJ1dHRvbi1zbWFsbCIsbixyXV1dXX0sdC5wcm90b3R5cGUucmVuZGVyRG9tYWluPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuYWN0aW9uLGk9dGhpcy5wcm9wcy5hZHYuZG9tYWluO3JldHVybiBhWyJkZWZhdWx0Il0uY3JlYXRlKGYse2hyZWY6dC51cmwsY2xhc3M6ZSgiX19saW5rIiwiX19saW5rLWRvbWFpbiIpLHJlc291cmNlSWQ6InNpbXBsZS1kb21haW4ifSxhWyJkZWZhdWx0Il0uY3JlYXRlKGcuVGV4dCx7dGV4dDppfSkpfSx0LnByb3RvdHlwZS5yZW5kZXJXb3JraW5nVGltZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmJfLGk9dGhpcy5wcm9wcy5hZHYsbj1pLndvcmtpbmdUaW1lLG89aS51cmwscj1uJiYxPT09bi5sZW5ndGg/Il9fd29ya2luZy10aW1lLXNpbmdsZSI6IiI7cmV0dXJuIG4/Yy5pc1N0cmluZyhuKT9hWyJkZWZhdWx0Il0uY3JlYXRlKGYse2hyZWY6byxjbGFzczp0KCJfX3dvcmtpbmctdGltZS1mdWxsIikscmVzb3VyY2VJZDoid29ya2luZy10aW1lIn0sYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2Nsb2NrIil9LGFbImRlZmF1bHQiXS5jcmVhdGUoaC5HZW9Mb2dvLHtiZW06dCx0eXBlOiJyb3VuZHNpZ24ifSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX190ZXh0LWNvbnRhaW5lciIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fdGV4dCIpfSxfLmkxOG4oIldPUktJTkdfVElNRSIsdGhpcy5nZXREYXRhU291cmNlKCkuZ2V0TGFuZ3VhZ2UoKSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19kYXlzIil9LG4pKSk6YVsiZGVmYXVsdCJdLmNyZWF0ZShmLHtocmVmOm8sY2xhc3M6dCgiX193b3JraW5nLXRpbWUiLHIpLHJlc291cmNlSWQ6IndvcmtpbmctdGltZSJ9LGwubWFwKG4sZnVuY3Rpb24oaSl7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUocy5Db250YWluZXIsbnVsbCxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fd29ya2luZy10aW1lLWl0ZW0iKX0sYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2xlZnQtY29udGFpbmVyIil9LGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19jbG9jayIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOnQsdHlwZToicm91bmRzaWduIn0pKSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fZGF5LWNvbnRhaW5lciIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fdGV4dCIpfSxfLmkxOG4oIldPUktJTkdfVElNRSIsInJ1IikpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19kYXlzIil9LGkuZGF5cykpKSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fbGluZSIpfSksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX3JpZ2h0LWNvbnRhaW5lciIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fc2lnbiIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOnQsdHlwZToidHJpbmdsZXNpZ24ifSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19ob3VyLWNvbnRhaW5lciIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnQoIl9fdGV4dCIpfSxfLmkxOG4oIldPUktJTkdfVElNRSIsZS5nZXREYXRhU291cmNlKCkuZ2V0TGFuZ3VhZ2UoKSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19ob3VyIil9LGkuaG91cnMpKSkpKX0pKTpudWxsfSx0LnByb3RvdHlwZS5yZW5kZXJDb250ZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYl8saT10aGlzLnByb3BzLmFkdixuPWkudXJsLG89aS53YXJuaW5nLHI9aS5nZW9Ta2luVmVyLHM9bz8iX19jb21wYWN0LXdhcm5pbmciOiIiO3JldHVybiAxPT09cj9hWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ZSxjbGFzczp0KCJfX2NvbnRlbnQiLCJfX2NvbXBhY3Qtd2FybmluZyIpfSx0aGlzLnJlbmRlckxvZ28oKSx0aGlzLnJlbmRlckltYWdlKCksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczp0KCJfX2RldGFpbHMiKX0sdGhpcy5yZW5kZXJUaXRsZSgpLGFbImRlZmF1bHQiXS5jcmVhdGUoZix7aHJlZjpuLHRhZzoiYSIsY2xhc3M6dCgiX19nZW8tY29udGFpbmVyIil9LHRoaXMucmVuZGVyR2VvSW5mb3JtYXRpb25TbWFsbCgpLHRoaXMucmVuZGVyR2VvSW5mb3JtYXRpb25MYXJnZSgpKSx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlckJ1dHRvbk1lZGl1bSgpLHRoaXMucmVuZGVyQnV0dG9uU21hbGwoKSx0aGlzLnJlbmRlckFnZSgpKSk6Mj09PXI/YVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOmUsY2xhc3M6dCgiX19jb250ZW50IixzKX0sdGhpcy5yZW5kZXJMb2dvKCksdGhpcy5yZW5kZXJJbWFnZSgpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19kZXRhaWxzIil9LHRoaXMucmVuZGVyVGl0bGUoKSx0aGlzLnJlbmRlckJvZHkoKSx0aGlzLnJlbmRlckRvbWFpbigpLHRoaXMucmVuZGVyR2VvSW5mb3JtYXRpb25MYXJnZSgpLHRoaXMucmVuZGVyQnV0dG9uR2VvKCksdGhpcy5yZW5kZXJCdXR0b25TbWFsbCgpLHRoaXMucmVuZGVyV2FybmluZygpKSk6YVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOmUsY2xhc3M6dCgiX19jb250ZW50IiwiX19jb21wYWN0LXdhcm5pbmciKX0sdGhpcy5yZW5kZXJJbWFnZSgpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6dCgiX19kZXRhaWxzIil9LHRoaXMucmVuZGVyVGl0bGUoKSx0aGlzLnJlbmRlcldvcmtpbmdUaW1lKCksdGhpcy5yZW5kZXJCb2R5KCksdGhpcy5yZW5kZXJCdXR0b25NZWRpdW0oKSx0aGlzLnJlbmRlckJ1dHRvblNtYWxsKCksdGhpcy5yZW5kZXJMb2dvKCJyb3ciKSkpfSx0LnByb3RvdHlwZS5yZW5kZXJHZW9JbmZvcm1hdGlvblNtYWxsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMuYWR2LmFkZHJlc3M7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19nZW8taW5mbyIpLHJlc291cmNlSWQ6Imdlb2luZm8tc21hbGwifSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fbG9jYXRpb24iKX0sYVsiZGVmYXVsdCJdLmNyZWF0ZShoLkdlb0xvZ28se2JlbTplLHR5cGU6IndhbGtpbmdodW1hbiJ9KSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZGVzYyIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKGcuVGV4dCx7dGV4dDpfLmkxOG4oIkNMT1NFX1RPX1lPVV9TUEFDRSIsdGhpcy5nZXREYXRhU291cmNlKCkuZ2V0TGFuZ3VhZ2UoKSl9KSkpLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19hZGRyZXNzIil9LGFbImRlZmF1bHQiXS5jcmVhdGUoaC5HZW9Mb2dvLHtiZW06ZSx0eXBlOiJnZW9tYXJrIn0pLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19kZXNjIil9LHQpKSl9LHQucHJvdG90eXBlLnJlbmRlckdlb0luZm9ybWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMuYWR2LmFkZHJlc3M7cmV0dXJuIGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19nZW8taW5mbyIpLHJlc291cmNlSWQ6Imdlb2luZm8ifSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOmUsdHlwZToiZ2VvbWFyayJ9KSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fYWRkcmVzcyIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZGVzYyIpfSx0KSkpfSx0LnByb3RvdHlwZS5yZW5kZXJHZW9JbmZvcm1hdGlvbkxhcmdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMuYWR2LGk9dC5hZGRyZXNzLG49dC51cmw7cmV0dXJuIDI9PT10Lmdlb1NraW5WZXI/YVsiZGVmYXVsdCJdLmNyZWF0ZShmLHtocmVmOm4sY2xhc3M6ZSgiX19nZW8taW5mby1sYXJnZSIpLHJlc291cmNlSWQ6Imdlb2luZm8tbGFyZ2UifSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOmUsdHlwZToiZ2VvbWFyayJ9KSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fYWRkcmVzcyIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZGVzYyIpfSxpKSkpOmFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19nZW8taW5mby1sYXJnZSIpLHJlc291cmNlSWQ6Imdlb2luZm8tbGFyZ2UifSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOmUsdHlwZToiZ2VvbWFyayJ9KSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fYWRkcmVzcyIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fbG9jYXRpb24iKX0sYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2Rlc2MiKX0sXy5pMThuKCJDTE9TRV9UT19ZT1UiLHRoaXMuZ2V0RGF0YVNvdXJjZSgpLmdldExhbmd1YWdlKCkpKSksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtjbGFzczplKCJfX2Rlc2MiKX0saSkpKX0sdC5wcm90b3R5cGUucmVuZGVyR2VvTG9nbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYl87cmV0dXJuIDM9PT10aGlzLnByb3BzLmFkdi5nZW9Ta2luVmVyP2FbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19jbG9zZSIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fY2xvc2VfdGV4dCIpfSxfLmkxOG4oIkNMT1NFX1RPX1lPVSIsdGhpcy5nZXREYXRhU291cmNlKCkuZ2V0TGFuZ3VhZ2UoKSkpKTphWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOmUoIl9fZ2VvbG9nbyIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKGguR2VvTG9nbyx7YmVtOmUsdHlwZToid2Fsa2luZ2h1bWFuIn0pLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7Y2xhc3M6ZSgiX19nZW9sb2dvLXRleHQiKX0sXy5pMThuKCJDTE9TRV9UT19ZT1UiLHRoaXMuZ2V0RGF0YVNvdXJjZSgpLmdldExhbmd1YWdlKCkpKSl9LHQucHJvdG90eXBlLnJlbmRlckltYWdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMuaW1hZ2VTaXplLGk9dGhpcy5wcm9wcy5hZHYsbj1pLmltYWdlcyxvPWkuYWRkSW5mbyxyPWkuZ2VvU2tpblZlcixsPXRoaXMucHJvcHMuY29udGV4dC5nZXRUaGVtZSgpLGM9bC5hbmltYXRlZCx1PWwuYW5pbWF0aW9uQ291bnQsZD17aGVpZ2h0OnQubWluSGVpZ2h0fTtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShmLHtyZXNvdXJjZUlkOiJpbWFnZSIsaHJlZjp0aGlzLnByb3BzLmFkdi51cmwsY2xhc3M6ZSgiX19saW5rIiwiX19pbWFnZSIpLHN0eWxlOmR9LGFbImRlZmF1bHQiXS5jcmVhdGUocC5JbWFnZUFkYXB0aXZlLHtpbWFnZXM6bnx8by5pY29uLGNvbnRleHQ6dGhpcy5wcm9wcy5jb250ZXh0LHNtYXJ0Q2VudGVyOiEwLGFuaW1hdGlvbjpjLGFuaW1hdGlvbkNvdW50OnV9KSwzPT09cj9hWyJkZWZhdWx0Il0uY3JlYXRlKHMuQ29udGFpbmVyLG51bGwsdGhpcy5yZW5kZXJHZW9Mb2dvKCksdGhpcy5yZW5kZXJHZW9JbmZvcm1hdGlvbigpLHRoaXMucmVuZGVyV2FybmluZygpKTpudWxsLDI9PT1yP3RoaXMucmVuZGVyR2VvTG9nbygpOm51bGwsMj09PXJ8fDM9PT1yP3RoaXMucmVuZGVyQWdlKCk6bnVsbCx0aGlzLnJlbmRlckFwcEljb24oKSwxPT09cj90aGlzLnJlbmRlcldhcm5pbmcoKTpudWxsKX0sdC5jb2VyY2VTaXplPWQuY3JlYXRlU2l6ZUNvZXJjZXIoe3dpZHRoOnttaW46MTcyLG1heDoxLzB9LGhlaWdodDp7bWluOjE1OCxtYXg6MS8wfSxyYXRpbzp7bWluOi4yNSxtYXg6ZC5NQVhfSU1BR0VfUkFUSU99fSksdH0odS5BZHZBZGFwdGl2ZUJhc2UpO3QuQWR2VG93ZXJHZW89bX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlbyAueWFwLWFkdl9fY29udGVudHstd2Via2l0LWZsZXg6MSAwIGF1dG87LW1zLWZsZXg6MSAwIGF1dG87ZmxleDoxIDAgYXV0bztkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwOy1tcy1mbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDttaW4taGVpZ2h0OmluaGVyaXQ7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlbyAueWFwLWFkdl9fd2FybmluZ3tiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI1KTtjb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8gLnlhcC1hZHZfX3dhcm5pbmctdGV4dHtwYWRkaW5nOi40ZW0gMWVtfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8gLnlhcC1hZHZfX3RpdGxlX2Zsb2F0e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSk7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwuNSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQscmdiYSgwLDAsMCwuMSkgMjAlLHJnYmEoMCwwLDAsLjMpIDUwJSxyZ2JhKDAsMCwwLC43KSk7bGVmdDowO3JpZ2h0OjA7dG9wOjA7cGFkZGluZy1sZWZ0OjUlO3BhZGRpbmctcmlnaHQ6NSU7cGFkZGluZy10b3A6LjhlbTtwb2ludGVyLWV2ZW50czpub25lfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8gLnlhcC1hZHZfX3RpdGxlX2Zsb2F0OmZpcnN0LWNoaWxke2Rpc3BsYXk6YmxvY2t9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlbyAueWFwLWFkdl9fdGl0bGVfZmxvYXQgLnlhcC1hZHZfX2xpbmt7Y29sb3I6aW5oZXJpdH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvIC55YXAtYWR2X19hcHAtaWNvbnt0b3A6MS44ZW07bGVmdDo1JX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvIC55YXAtYWR2X19kZXRhaWxzey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6LjhlbSA1JSAwfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8gLnlhcC1hZHZfX2RldGFpbHMsLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlbyAueWFwLWFkdl9faW1hZ2V7cG9zaXRpb246cmVsYXRpdmV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlbyAueWFwLWFkdl9faW1hZ2V7LXdlYmtpdC1mbGV4OjMgMCBhdXRvOy1tcy1mbGV4OjMgMCBhdXRvO2ZsZXg6MyAwIGF1dG87ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpICIsZS5pbWFnZVBvc2l0aW9uLCI7YmFja2dyb3VuZC1zaXplOmNvdmVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtvdmVyZmxvdzpoaWRkZW47bWF4LWhlaWdodDoxNzBweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLnlhcC1hZHZfbm8tcGFkZGluZ3MgLnlhcC1hZHZfX2RldGFpbHN7cGFkZGluZzouOGVtIDAgMH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X190aXRsZXtwYWRkaW5nLWJvdHRvbTozcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fYm9keXtwYWRkaW5nLWJvdHRvbTo0cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fZ2VvbG9nb3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXg6MSAwOy1tcy1mbGV4OjEgMDtmbGV4OjEgMDstd2Via2l0LWZsZXgtZGlyZWN0aW9uOnJvdzstbXMtZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZGlyZWN0aW9uOnJvdztoZWlnaHQ6MjVweDt3aWR0aDoxMjBweDt6LWluZGV4OjE7YmFja2dyb3VuZDpyZ2JhKDQyLDQ2LDU0LC43OSk7Y29sb3I6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCA4cHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX2dlb2xvZ28tdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOjFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fZ2VvbG9nbyBzdmd7Zm9udC1zaXplOjE2cHg7ZmlsbDojZmZmfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX3dhbGtpbmdodW1hbntoZWlnaHQ6MjVweDtwYWRkaW5nLXRvcDoxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX2NvbXBhY3Qtd2FybmluZyAueWFwLWFkdl9fYnV0dG9ue3BhZGRpbmctYm90dG9tOjMwcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fbG9jYXRpb257ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7d2lkdGg6NTAlO3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19kZXNje3doaXRlLXNwYWNlOm5vcm1hbDtmb250LXdlaWdodDo3MDA7LXdlYmtpdC1oeXBoZW5zOmF1dG87LW1zLWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG99LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fbGluay1kb21haW57Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmctdG9wOjRweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19leHRyYXt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWZsb3c6cm93IG5vd3JhcDstbXMtZmxleC1mbG93OnJvdyBub3dyYXA7ZmxleC1mbG93OnJvdyBub3dyYXA7cGFkZGluZy1sZWZ0OjhweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19leHRyYSAueWFwLWFkdl9fbG9nb3tmb250LXNpemU6MjdweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19sb2dve3BhZGRpbmctcmlnaHQ6NXB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX2dlb21hcmt7d2lkdGg6MjNweDtwYWRkaW5nLXJpZ2h0OjZweDtwYWRkaW5nLXRvcDo0cHg7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX2J1dHRvbnttYXJnaW4tdG9wOmF1dG87LXdlYmtpdC1mbGV4LWZsb3c6cm93IG5vd3JhcDstbXMtZmxleC1mbG93OnJvdyBub3dyYXA7ZmxleC1mbG93OnJvdyBub3dyYXB9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fYnV0dG9uLWV4dHJhe292ZXJmbG93OmhpZGRlbn0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19idXR0b24tZXh0cmEgLnlhcC1hZHZfX2xvZ297ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjIzcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fYnV0dG9uLWV4dHJhIC55YXAtYWR2X19hZGRyZXNze2ZvbnQtc2l6ZToxMHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzoxcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fYnV0dG9uLWV4dHJhIC55YXAtYWR2X19kZXNje3dpZHRoOjcwcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fYnV0dG9uX21lZGl1bSwuIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19idXR0b25fbWVkaXVtIC55YXAtYWR2X19saW5rey13ZWJraXQtZmxleC1zaHJpbms6MDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MiAueWFwLWFkdl9fZ2VvLWluZm8tbGFyZ2V7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19nZW8taW5mby1sYXJnZSAueWFwLWFkdl9fYWRkcmVzc3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjIgLnlhcC1hZHZfX2dlby1pbmZvLWxhcmdlIC55YXAtYWR2X19sb2dve2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctdG9wOjNweDtoZWlnaHQ6MzJweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYyIC55YXAtYWR2X19nZW8taW5mby1sYXJnZSAueWFwLWFkdl9fbG9jYXRpb257d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmctbGVmdDowfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjEgLnlhcC1hZHZfX3RpdGxle3BhZGRpbmctYm90dG9tOjB9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MSAueWFwLWFkdl9fZ2VvLWNvbnRhaW5lcntwYWRkaW5nOjEycHggMCAxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjEgLnlhcC1hZHZfX2dlby1pbmZve21hcmdpbi10b3A6YXV0bztkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OjMwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOjFweDtmb250LXNpemU6MTBweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19nZW8taW5mbyAueWFwLWFkdl9fbG9nb3twYWRkaW5nLXRvcDo0cHg7Zm9udC1zaXplOjI0cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MSAueWFwLWFkdl9fZ2VvLWluZm8gLnlhcC1hZHZfX2Rlc2N7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO3BhZGRpbmctdG9wOjRweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19hZGRyZXNzLC4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjEgLnlhcC1hZHZfX2xvY2F0aW9ue2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19hZGRyZXNze3BhZGRpbmctbGVmdDoxNnB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjEgLnlhcC1hZHZfX2xvZ297cGFkZGluZy1yaWdodDo1cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MSAueWFwLWFkdl9fYnV0dG9ue21hcmdpbi10b3A6YXV0b30uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19idXR0b24tZXh0cmF7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjEgLnlhcC1hZHZfX2dlby1pbmZvLWxhcmdle2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6YXV0b30uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19nZW8taW5mby1sYXJnZSAueWFwLWFkdl9fYWRkcmVzc3tkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2ZvbnQtd2VpZ2h0OjQwMDtwYWRkaW5nLWxlZnQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYxIC55YXAtYWR2X19nZW8taW5mby1sYXJnZSAueWFwLWFkdl9fbG9nb3tmb250LXNpemU6MjRweDtwYWRkaW5nLXRvcDozcHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MSAueWFwLWFkdl9fZ2VvLWluZm8tbGFyZ2UgLnlhcC1hZHZfX2xvY2F0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nLWxlZnQ6MH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193YXJuaW5ne2JvdHRvbTo0MHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2J1dHRvbnttYXJnaW4tdG9wOmF1dG87cGFkZGluZy1ib3R0b206MjBweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19sb2dvX3Jvd3tmb250LXNpemU6MTBweDtjb2xvcjojNjQ2NDY0O3RleHQtYWxpZ246cmlnaHQ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7cmlnaHQ6MDtoZWlnaHQ6MTdweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19hZ2V7dG9wOjNweDtyaWdodDoxN3B4O2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2FnZSwuIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19jbG9zZXtjb2xvcjojZmZmfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2Nsb3Nle2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O3otaW5kZXg6MTtiYWNrZ3JvdW5kOnJnYmEoNDIsNDYsNTQsLjc5KTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjI2cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fY2xvc2VfdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXB9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fZGVzY3t3aGl0ZS1zcGFjZTpub3JtYWw7LXdlYmtpdC1oeXBoZW5zOmF1dG87LW1zLWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2Rlc2MsLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fbGluay1kb21haW57Zm9udC13ZWlnaHQ6NzAwfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2V4dHJhe3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWZsZXgtZmxvdzpyb3cgbm93cmFwOy1tcy1mbGV4LWZsb3c6cm93IG5vd3JhcDtmbGV4LWZsb3c6cm93IG5vd3JhcDtwYWRkaW5nLWxlZnQ6OHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2V4dHJhIC55YXAtYWR2X19sb2dve2ZvbnQtc2l6ZToyN3B4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2xvZ297cGFkZGluZy1yaWdodDo1cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fYnV0dG9uey13ZWJraXQtZmxleC1mbG93OnJvdyBub3dyYXA7LW1zLWZsZXgtZmxvdzpyb3cgbm93cmFwO2ZsZXgtZmxvdzpyb3cgbm93cmFwfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2J1dHRvbi1leHRyYXtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fYnV0dG9uLWV4dHJhIC55YXAtYWR2X19sb2dve2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToyNXB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2J1dHRvbl9tZWRpdW0gLnlhcC1hZHZfX2xpbmt7d2lkdGg6MTAwJX0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19nZW8taW5mb3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgMTJweDstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO29wYWNpdHk6Ljg7YmFja2dyb3VuZDojMmEyZTM2O2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7bGV0dGVyLXNwYWNpbmc6MDtsaW5lLWhlaWdodDoxNnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19nZW8taW5mbywuIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19nZW8taW5mbyAueWFwLWFkdl9fYWRkcmVzc3t3aWR0aDoxMDAlO2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2dlby1pbmZvIC55YXAtYWR2X19sb2dve2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctdG9wOjNweDtoZWlnaHQ6MjNweDt3aWRvd3M6MTRweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193b3JraW5nLXRpbWV7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpjb2x1bW47LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Y29sb3I6IzAwMDtwYWRkaW5nLWJvdHRvbTo2cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLWl0ZW17ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7cGFkZGluZzozcHggMH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193b3JraW5nLXRpbWUtaXRlbTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlM2UzZTN9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lIC55YXAtYWR2X190ZXh0e2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX3dvcmtpbmctdGltZSAueWFwLWFkdl9fcm91bmRzaWduLC4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX3dvcmtpbmctdGltZSAueWFwLWFkdl9fdHJpbmdsZXNpZ257cGFkZGluZzozcHggNnB4IDAgMDtmb250LXNpemU6MTRweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193b3JraW5nLXRpbWUgLnlhcC1hZHZfX2RheXMsLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lIC55YXAtYWR2X19ob3Vye2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193b3JraW5nLXRpbWUtc2luZ2xlIC55YXAtYWR2X193b3JraW5nLXRpbWUtaXRlbTpudGgtY2hpbGQob2RkKXtib3JkZXItYm90dG9tOm5vbmV9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLXNpbmdsZSAueWFwLWFkdl9fZGF5cywuIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X193b3JraW5nLXRpbWUtc2luZ2xlIC55YXAtYWR2X19ob3Vye2ZvbnQtc2l6ZToxM3B4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX3dvcmtpbmctdGltZS1zaW5nbGUgLnlhcC1hZHZfX2xpbmV7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlM2UzZTN9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLWZ1bGx7cGFkZGluZy1ib3R0b206NnB4O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX3dvcmtpbmctdGltZS1mdWxsIC55YXAtYWR2X190ZXh0e2ZvbnQtc2l6ZToxMHB4fS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX3dvcmtpbmctdGltZS1mdWxsIC55YXAtYWR2X19yb3VuZHNpZ24sLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLWZ1bGwgLnlhcC1hZHZfX3RyaW5nbGVzaWdue3BhZGRpbmc6M3B4IDZweCAwIDA7Zm9udC1zaXplOjE0cHh9LiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLWZ1bGwgLnlhcC1hZHZfX2RheXMsLiIsZS5pZCwiIC55YXAtYWR2X3Rvd2VyLWdlby12MyAueWFwLWFkdl9fd29ya2luZy10aW1lLWZ1bGwgLnlhcC1hZHZfX2hvdXJ7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwfS4iLGUuaWQsIiAueWFwLWFkdl90b3dlci1nZW8tdjMgLnlhcC1hZHZfX2xlZnQtY29udGFpbmVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmctcmlnaHQ6MTBweH0uIixlLmlkLCIgLnlhcC1hZHZfdG93ZXItZ2VvLXYzIC55YXAtYWR2X19yaWdodC1jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7cGFkZGluZy1sZWZ0OjEwcHh9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1mdW5jdGlvbihlLHQpe3JldHVybihuPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihlW2ldPXRbaV0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfW4oZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihpLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgaSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9aSg0NCksYT1pKDM0NCkscz1pKDM0NSksbD1pKDY4NiksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLnNldENvZXJjZXI9ZnVuY3Rpb24oKXt0aGlzLmNvZXJjZVNpemU9dC5jb2VyY2VTaXplfSx0LnByb3RvdHlwZS5zZXRBZHZNb2Q9ZnVuY3Rpb24oKXt0aGlzLm1vZD0ibGVhZGVyYm9hcmRWZXJ0aWNhbDAzMTggbGVhZGVyYm9hcmQifSx0LnByb3RvdHlwZS5pbml0SW1hZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFBpY3R1cmUoKSx0PS41KnRoaXMud2lkdGg7ZSYmdGhpcy5wcm9wcy5jb250ZXh0LnNldFBhcmFtcyh7aW1hZ2VNaW5XaWR0aDp0PjM0MD8zNDA6dCxpbWFnZU1heFdpZHRoOnQ+MzQwPzM0MDp0fSl9LHQucHJvdG90eXBlLmdldFN0eWxlcz1mdW5jdGlvbigpe3JldHVybltzLGxdfSx0LmNvZXJjZVNpemU9ci5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjozMzgsbWF4OjEvMH0saGVpZ2h0OnttaW46MTI1LG1heDozMjB9LHJhdGlvOnttaW46ci5NSU5fSU1BR0VfUkFUSU8sbWF4OjEvMH19KSx0fShhLkFkdkxlYWRlcmJvYXJkKTt0LkFkdkxlYWRlcmJvYXJkVmVydGljYWwwMzE4PWN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIiIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoNDQpLGE9aSgyMjgpLHM9aSgzNDYpLGw9aSg2ODgpLGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5zZXRDb2VyY2VyPWZ1bmN0aW9uKCl7dGhpcy5jb2VyY2VTaXplfHwodGhpcy5jb2VyY2VTaXplPXQuY29lcmNlU2l6ZSl9LHQucHJvdG90eXBlLnNldEFkdk1vZD1mdW5jdGlvbigpe3RoaXMubW9kPSJ0b3dlclZlcnRpY2FsMDMxOCB0b3dlciJ9LHQucHJvdG90eXBlLmdldFN0eWxlcz1mdW5jdGlvbigpe3JldHVybltzLGxdfSx0LmNvZXJjZVNpemU9ci5jcmVhdGVTaXplQ29lcmNlcih7d2lkdGg6e21pbjoxNjAsbWF4OjMzOH0saGVpZ2h0OnttaW46MTI1LG1heDozMjB9LHJhdGlvOnttaW46LjI1LG1heDoxLzB9fSksdH0oYS5BZHZUb3dlcik7dC5BZHZUb3dlclZlcnRpY2FsMDMxOD1jfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIiKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pLHI9ZnVuY3Rpb24oKXtyZXR1cm4ocj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGE9aSgzKSxzPWkoNSksbD1pKDQ1KSxjPWkoNDEwKSx1PWkoMjU1KSxkPWkoMjQwKSxwPWkoMjYxKSxmPWkoNjkzKSxoPW5ldyBkLkFkdlJlbmRlcmVyc1NldCh7bmFtZToicG9zdGVyVjMiLGNvZXJjZVNpemU6Yy5BZHZQb3N0ZXJWMy5jb2VyY2VTaXplLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShjLkFkdlBvc3RlclYzLHIoe30sZSx7cmVzb3VyY2VJZDoiYWR2LXBvc3Rlci12MyJ9KSl9fSksZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LnN5bmNUaXRsZXNJbnZvY2F0aW9uQ291bnQ9MCx0Lm9uRm9udFNpemVzU3luY2VkQ2FsbGJhY2tzPVtdLHR9cmV0dXJuIG8odCxlKSx0LnByb3RvdHlwZS5nZXRBZHZSZW5kZXJlcnNTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaH0sdC5wcm90b3R5cGUucHVzaENzcz1mdW5jdGlvbigpe2UucHJvdG90eXBlLnB1c2hDc3MuY2FsbCh0aGlzKSx0aGlzLnB1c2hTdHlsZXMocCx0aGlzLmdldFRoZW1lKCkpLHRoaXMucHVzaFN0eWxlcyhmKX0sdC5wcm90b3R5cGUuc2V0UG9zdGVyVGl0bGVGb250U2l6ZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZpbmRFbWJlZGRlZFJlc291cmNlcygiYWR2LXBvc3Rlci12MyIpO2lmKHRoaXMuc3luY1RpdGxlc0ludm9jYXRpb25Db3VudCsrLCEodGhpcy5zeW5jVGl0bGVzSW52b2NhdGlvbkNvdW50PGUubGVuZ3RoKSl7dmFyIHQ9ZVswXS5nZXRIZWFkZXJIZWlnaHQoKTtpZih0KXMuZm9yRWFjaChlLGZ1bmN0aW9uKGUpe2Uuc2V0VGl0bGVGb250U2l6ZSh0LzQuNSl9KSxsLnNvbWUoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1RpdGxlT3ZlcmZsb3dpbmcoKX0pJiZzLmZvckVhY2goZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRUaXRsZUZvbnRTaXplKHQvNSl9KSxzLmZvckVhY2godGhpcy5vbkZvbnRTaXplc1N5bmNlZENhbGxiYWNrcyxmdW5jdGlvbihlKXtlKCl9KX19LHQucHJvdG90eXBlLm9uQWxsUG9zdGVyc1RpdGxlRm9udFNpemVzU3luY2VkPWZ1bmN0aW9uKGUpe3RoaXMub25Gb250U2l6ZXNTeW5jZWRDYWxsYmFja3MucHVzaChlKX0sdH0odS5CbG9ja0FkYXB0aXZlQmFzZSk7ZS5leHBvcnRzPWd9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQubWFrZUVuZ2xpc2hXb3Jkc0xpbmVCcmVha2FibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iaHR0cHM6Ly95YW5kZXgucnUvdHVyYm8vYWFiL3BHVEg5NzM2OS9jNjQ3ODRPdE8tUXUvWFpyYWdaRjYyamN2cnNnU3pXbDVWVUxja0hsU1VwanFhazVMZC0wS3RsNEc2bkYxSVE3Z2RFVjZxSFVHU3hVNEZ1aXgzYkJZdWdYbUlSTURTVy1GYXZnTHEzUzB5MzZuTHd2OXg2a3BXSFd4WDhNcEVZSGFiN2hNNlJZYktqYzl0SnZoOXRWWkJaRnhqMXdIc2t6V2Y4RXVOazZYRzYxSFlfU2xjUTFMTm8ySkhhd1RRSXdJcEU0ZnlET2E2dXFpa01fd0d6S1N1N19KVGhzSGFScG5IZGVhMHJSMGlaYlJrcHlOSi1LUEY0OVRmT1ROeDdrOU5aSW10Wk51cUJYUEs1MFA4T0Z0T1hSZEhscHlLMW5iTWRQc0Fta2lVNmlzeWwySmx1bGFKVzkwYXRIbkpKaTFRREU5cjdVeGZpWU1nQzRXUC1RNUwxVWg5YVlnVGR1SFBScU1YekZUSE52M3IzLTRZaHI0bUhBeFRSTzdRZE9iWGdxdVdwUzdhUlY4QmVwajFzWElwVktCUHAyRmtqN2tmdkV2VkQ0bUtyMTE0X1lWc0s4WkJ4ejdiVjl4d3QxTHg1NXZ1b042aUtyeThjeXdhWktTU3J3YUxidG15NnZHUHZiYUFFU0hleVVTZ3UxdVozQXM5UnlBYjRhdlJWaE1GSkExQkZIdXltWHVXYnh0QVJBZUM5VXZuaHJRU2JxWXMtRHNvOHV3WTFtTm1FdzRWUGtMOS14RXVOSDA5U3RYVS1JZGpRVXp6Z2V2bzh6MlBJZXI3c2V5bG9heGpRdlY3bmxOckFNRGJGbDNfZng0MENqNkNuRnpycU42TUhLcHJmc2VhMGZMU0JRX3RlblFKcWQ1QnpQQ3ZHMkZrTHpsXzlCOXQxd0gyaXowSXhTbFFad2FoTDM3dkkxVG9kMWJaaDI4bW9ITC0xbFRNNDJ3U25MRHlYeUxILXBXeXJyWHo1YTU4UVpXeVNkVFFNOXQ1akF1bG0teERkWGRseXJjNXJQbTVnQTktX1o4U0J4TzhWRHRXelplM3lsRGkzZ0xnVE5Oc19oaTRDcnVtRzg3QlBtcDVTM1ZDaENHTm9ua1E1RHV2aGRSN3FTTlktOEdyeWRiejZXU05zZUR6SWowZnpzLV8zQVJYeW5HUEU1YklZdHJPRUtpdk9BWk1xT1lqX2xjNjBjNHljUXVSeW5SQnVTcHA4TmlfcjRub2Z5M0xTSWRScS1scXkyR01mY25ZZzFxaFEyb1hTM1F3ODdMNWk4LXVzRG9xaGh6SWF4QUtrS1QtYTViWE5vSG8ifSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdC5wdXNoKCIuIixlLmlkLCIgLnlhcC1hZHZ7Zm9udC1mYW1pbHk6U0YsUm9ib3RvLEhlbHZldGljYSxzYW5zLXNlcmlmOy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2JvcmRlcjppbmhlcml0O2JvcmRlci1yYWRpdXM6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNWVtO2N1cnNvcjpwb2ludGVyO21heC13aWR0aDo1MTVweDttaW4td2lkdGg6MTYwcHh9LiIsZS5pZCwiIC55YXAtYWR2LC4iLGUuaWQsIiAueWFwLWFkdl9fY29udGVudHtkaXNwbGF5Oi13ZWJraXQtZmxleDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC55YXAtYWR2X19jb250ZW50ey13ZWJraXQtZmxleDoxIDAgYXV0bzstbXMtZmxleDoxIDAgYXV0bztmbGV4OjEgMCBhdXRvOy13ZWJraXQtZmxleC1mbG93OmNvbHVtbiBub3dyYXA7LW1zLWZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO21pbi1oZWlnaHQ6aW5oZXJpdDtmb250LXNpemU6IixlLmZvbnRTaXplLCJweH0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ297bGVmdDoyMnB4fS4iLGUuaWQsIiAueWFwLWFkdl9fbG9nb19zdWJ0bGV7bGVmdDo1JX0uIixlLmlkLCIgLnlhcC1hZHZfX2xvZ29fY3VycmVuY3l7bGVmdDphdXRvfS4iLGUuaWQsIiAueWFwLWFkdl9faW1hZ2Utc3R1Yntmb250LXNpemU6LjhlbTtiYWNrZ3JvdW5kLWltYWdlOiIsZS5ncmFkaWVudE1lc2hVcmwsIjtiYWNrZ3JvdW5kLXNpemU6MTkwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCV9LiIsZS5pZCwiIC55YXAtYWR2X19pbWFnZS1zdHViLC4iLGUuaWQsIiAueWFwLWFkdl9fcGljdHVyZS13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS4iLGUuaWQsIiAueWFwLWFkdl9fcGljdHVyZS13cmFwcGVye2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BvaW50ZXItZXZlbnRzOm5vbmV9LiIsZS5pZCwiIC55YXAtYWR2X19waWN0dXJle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDo3MCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLHRyYW5zcGFyZW50LCMwMDAgMTAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLHRyYW5zcGFyZW50LCMwMDAgMTAlKX0uIixlLmlkLCIgLnlhcC1hZHZfX2Jhc2V7dG9wOiIsZS5oZWFkZXJUb3BPZmZzZXQsInB4O2JvdHRvbToiLGUucGFkZGluZywicHg7ei1pbmRleDoxfS4iLGUuaWQsIiAueWFwLWFkdl9fYmFzZSwuIixlLmlkLCIgLnlhcC1hZHZfX21haW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7cmlnaHQ6OHB4fS4iLGUuaWQsIiAueWFwLWFkdl9fbWFpbnt0b3A6IixlLmhlYWRlclRvcE9mZnNldCwicHg7Ym90dG9tOiIsZS5wYWRkaW5nLCJweDt6LWluZGV4OjI7cGFkZGluZzowIDE2cHh9LiIsZS5pZCwiIC55YXAtYWR2X193YXJuaW5ne2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOjExcHh9LiIsZS5pZCwiIC55YXAtYWR2X193YXJuaW5nLXRleHR7cGFkZGluZzoycHggMTZweDtmbG9hdDpsZWZ0O29wYWNpdHk6Ljg3fS4iLGUuaWQsIiAueWFwLWFkdl9fd2FybmluZ19tYWluLnlhcC1hZHZfX3dhcm5pbmd7d2lkdGg6MTAwJTtib3JkZXI6MCBzb2xpZCB0cmFuc3BhcmVudH0uIixlLmlkLCIgLnlhcC1hZHZfX2hlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1mbGV4LWRpcmVjdGlvbjpyb3c7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3d9LiIsZS5pZCwiIC55YXAtYWR2X19oZWFkZXItY29udGFpbmVyLC4iLGUuaWQsIiAueWFwLWFkdl9faGVhZGVyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtZmxleC1ncm93OjE7LW1zLWZsZXgtcG9zaXRpdmU6MTtmbGV4LWdyb3c6MX0uIixlLmlkLCIgLnlhcC1hZHZfX2hlYWRlci1jb250ZW50e2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1kaXJlY3Rpb246Y29sdW1uOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtanVzdGlmeS1jb250ZW50OmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToiLGUudGl0bGVGb250U2l6ZSwicHg7bWluLWhlaWdodDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246bGVmdH0uIixlLmlkLCIgLnlhcC1hZHZfX2hlYWRlci1jb250ZW50X3NtYWxse2ZvbnQtc2l6ZToiLGUudGl0bGVGb250U2l6ZVNtYWxsLCJweH0uIixlLmlkLCIgLnlhcC1hZHZfX2hlYWRlci1jb250ZW50X3NtYWxsIC55YXAtYWR2X19kb21haW57Zm9udC1zaXplOi45M2VtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGV7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6IixlLnRpdGxlTGluZUhlaWdodCwiZW07LXdlYmtpdC1mbGV4LXNocmluazowOy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MH0uIixlLmlkLCIgLnlhcC1hZHZfX3RpdGxlIC5wdWJsaXNoZXJzLXRleHR7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7dmlzaWJpbGl0eTp2aXNpYmxlOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO2xpbmUtaGVpZ2h0OjEuMWVtfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfbm9ybWFse3dvcmQtd3JhcDpicmVhay13b3JkfS4iLGUuaWQsIiAueWFwLWFkdl9fdGl0bGVfc21hbGx7bWF4LWhlaWdodDoiLGUudGl0bGVNYXhIZWlnaHQsImVtO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LiIsZS5pZCwiIC55YXAtYWR2X19kb21haW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7cmlnaHQ6OHB4O3RvcDoyMHB4O3otaW5kZXg6MTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LiIsZS5pZCwiIC55YXAtYWR2X19kb21haW4tdGV4dHtjb2xvcjojZmZmO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOjFweDtwYWRkaW5nOi40ZW0gMWVtO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czozcHh9LiIsZS5pZCwiIGltZy55YXAtYWR2X19mYXZpY29ue3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotLjVweDttYXJnaW46MCAuM2VtIDAgMDtoZWlnaHQ6LjhlbTt3aWR0aDouOGVtO21heC13aWR0aDoxNnB4O21heC1oZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1jb2xvcjojZmZmfS4iLGUuaWQsIiAueWFwLWFkdl9fYWdle2ZvbnQtc2l6ZToxMnB4O3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTozcHg7cmlnaHQ6NHB4O2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNX0uIixlLmlkLCIgLnlhcC1hZHZfX2JvZHl7cGFkZGluZzowfS4iLGUuaWQsIiAueWFwLWFkdl9fYm9keV9zbWFsbHtmb250LXNpemU6LjllbX0uIixlLmlkLCIgLnlhcC1hZHZfX2FwcC1pY29uLC4iLGUuaWQsIiAueWFwLWFkdl9fZ28tYnV0dG9uLWNvbnRhaW5lciwuIixlLmlkLCIgLnlhcC1hZHZfX2dvLWJ1dHRvbi1zdHVie2ZvbnQtc2l6ZToiLGUuZ29CdXR0b25TaXplLCJweDt3aWR0aDoxZW07aGVpZ2h0OjFlbTstd2Via2l0LWZsZXgtc2hyaW5rOjA7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS4iLGUuaWQsIiAueWFwLWFkdl9fZ28tYnV0dG9uLXN0dWJ7bWFyZ2luLWxlZnQ6NnB4fS4iLGUuaWQsIiAueWFwLWFkdl9fZ28tYnV0dG9uLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjQ7cmlnaHQ6MTJweDtib3R0b206IixlLnBhZGRpbmcsInB4Oy13ZWJraXQtYWxpZ24tc2VsZjpjZW50ZXI7LW1zLWZsZXgtaXRlbS1hbGlnbjpjZW50ZXI7LW1zLWdyaWQtcm93LWFsaWduOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcjtwYWRkaW5nOjAgMTJweDttaW4taGVpZ2h0OiIsZS5oZWFkZXJIZWlnaHQsInB4fS4iLGUuaWQsIiAueWFwLWFkdl9fZ28tYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LS41ZW07bWFyZ2luLXRvcDotLjVlbTtmb250LXNpemU6aW5oZXJpdDtzdHJva2Utd2lkdGg6MDtib3gtc2hhZG93Om5vbmU7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2V9LiIsZS5pZCwiIC55YXAtYWR2X19nby1idXR0b246aG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KX0uIixlLmlkLCIgLnlhcC1hZHZfX2dvLWJ1dHRvbi1hcnJvdywuIixlLmlkLCIgLnlhcC1hZHZfX2dvLWJ1dHRvbi1iZ3t0cmFuc2l0aW9uOmZpbGwgLjRzIGVhc2UgLjJzfS4iLGUuaWQsIiAueWFwLWFkdl9fZ28tYnV0dG9uLWJne2ZpbGw6IixlLmJ1dHRvbkJnQ29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2dvLWJ1dHRvbi1hcnJvd3tmaWxsOiIsZS5idXR0b25UZXh0Q29sb3IsIn0uIixlLmlkLCIgLnlhcC1hZHZfX2FwcC1pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czoxMiU7Ym94LXNoYWRvdzpub25lOy13ZWJraXQtYWxpZ24tc2VsZjpjZW50ZXI7LW1zLWZsZXgtaXRlbS1hbGlnbjpjZW50ZXI7LW1zLWdyaWQtcm93LWFsaWduOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcn0uIixlLmlkLCIgLnlhcC1hZHZfc21hbGwtaGVhZGVyIC55YXAtYWR2X19jb250ZW50e2ZvbnQtc2l6ZToiLGUuZm9udFNpemVTbWFsbCwicHh9LiIsZS5pZCwiIC55YXAtYWR2X3NtYWxsLWhlYWRlciAueWFwLWFkdl9fYm9keV9zbWFsbHtmb250LXNpemU6MTJweH0uIixlLmlkLCIgLnlhcC1hZHZfaGFzLXdhcm5pbmdfdHJ1ZSAueWFwLWFkdl9fd2FybmluZ19tYWlue2JvcmRlci1yYWRpdXM6OHB4IDhweCAwIDB9LiIsZS5pZCwiIC55YXAtYWR2X2hhcy13YXJuaW5nX3RydWUgLnlhcC1hZHZfX2Jhc2V7Ym9yZGVyLXJhZGl1czowIDAgOHB4IDhweH0uIixlLmlkLCIgLnlhcC1hZHZfaGFzLXdhcm5pbmdfZmFsc2UgLnlhcC1hZHZfX2Jhc2V7Ym9yZGVyLXJhZGl1czo4cHh9LiIsZS5pZCwiIC55YXAtYWR2X3dpdGgtZ28tYnV0dG9uX2ZhbHNlIC55YXAtYWR2X19nby1idXR0b24sLiIsZS5pZCwiIC55YXAtYWR2X3dpdGgtZ28tYnV0dG9uX3RydWUgLnlhcC1hZHZfX2RvbWFpbi1hcnJvd3tkaXNwbGF5Om5vbmV9LiIsZS5pZCwiIC55YXAtYWR2X3RoZW1lX2xpZ2h0LnlhcC1hZHYgLnlhcC1hZHZfX2NvbnRlbnR7Y29sb3I6IzAwMH0uIixlLmlkLCIgLnlhcC1hZHZfdGhlbWVfbGlnaHQueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZ3tib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTUpO2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpfS4iLGUuaWQsIiAueWFwLWFkdl90aGVtZV9saWdodC55YXAtYWR2IC55YXAtYWR2X19zZWUtbW9yZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTUpfS4iLGUuaWQsIiAueWFwLWFkdl90aGVtZV9saWdodC55YXAtYWR2IC55YXAtYWR2X19iYXNle29wYWNpdHk6MTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxODBkZWcsI2ZmZiwjZmZmKTtib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLC4wOCksMCAtMXB4IDNweCByZ2JhKDAsMCwwLC4wOCl9LiIsZS5pZCwiIC55YXAtYWR2X3RoZW1lX2xpZ2h0LnlhcC1hZHZfaGVhZGVyLXBvc2l0aW9uX2JvdHRvbSAueWFwLWFkdl9fYmFzZSwuIixlLmlkLCIgLnlhcC1hZHZfdGhlbWVfbGlnaHQueWFwLWFkdl9oZWFkZXItcG9zaXRpb25fdG9wIC55YXAtYWR2X19iYXNle2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsI2ZmZiwjZmZmKX0uIixlLmlkLCIgLnlhcC1hZHZfdGhlbWVfZGFyay55YXAtYWR2IC55YXAtYWR2X19jb250ZW50e2NvbG9yOiNmZmZ9LiIsZS5pZCwiIC55YXAtYWR2X3RoZW1lX2RhcmsueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZ3tib3JkZXItY29sb3I6aHNsYSgwLDAlLDEwMCUsLjIpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNzUpfS4iLGUuaWQsIiAueWFwLWFkdl90aGVtZV9kYXJrLnlhcC1hZHYgLnlhcC1hZHZfX2Jhc2V7YmFja2dyb3VuZDojMzMzO2JveC1zaGFkb3c6MCAxMHB4IDEwMHB4IGhzbGEoMCwwJSwxMDAlLC4yKTtvcGFjaXR5Oi44fS4iLGUuaWQsIiAueWFwLWFkdl9oZWFkZXItcG9zaXRpb25fdG9wLnlhcC1hZHYgLnlhcC1hZHZfX3BpY3R1cmV7dG9wOmF1dG87Ym90dG9tOjB9LiIsZS5pZCwiIC55YXAtYWR2X2hlYWRlci1wb3NpdGlvbl90b3AueWFwLWFkdiAueWFwLWFkdl9fcGljdHVyZS1pbWd7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQsIzAwMCAxMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KDE4MGRlZyx0cmFuc3BhcmVudCwjMDAwIDEwJSl9LiIsZS5pZCwiIC55YXAtYWR2X2hlYWRlci1wb3NpdGlvbl90b3AueWFwLWFkdiAueWFwLWFkdl9fYmFzZSwuIixlLmlkLCIgLnlhcC1hZHZfaGVhZGVyLXBvc2l0aW9uX3RvcC55YXAtYWR2IC55YXAtYWR2X19tYWlue2JvdHRvbToiLGUuaGVhZGVyVG9wT2Zmc2V0LCJweDt0b3A6IixlLnBhZGRpbmcsInB4fS4iLGUuaWQsIiAueWFwLWFkdl9oZWFkZXItcG9zaXRpb25fdG9wLnlhcC1hZHYgLnlhcC1hZHZfX3dhcm5pbmd7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LiIsZS5pZCwiIC55YXAtYWR2X2hlYWRlci1wb3NpdGlvbl90b3AueWFwLWFkdiAueWFwLWFkdl9fd2FybmluZ19tYWlue2JvcmRlci1yYWRpdXM6MCAwIDhweCA4cHg7dG9wOjEwMCU7Ym90dG9tOmF1dG99LiIsZS5pZCwiIC55YXAtYWR2X2hlYWRlci1wb3NpdGlvbl90b3AueWFwLWFkdl9oYXMtd2FybmluZ190cnVlIC55YXAtYWR2X19iYXNle2JvcmRlci1yYWRpdXM6OHB4IDhweCAwIDB9LiIsZS5pZCwiIC55YXAtYWR2X2hlYWRlci1wb3NpdGlvbl9ib3R0b20ueWFwLWFkdiAueWFwLWFkdl9fcGljdHVyZXt0b3A6MDtib3R0b206YXV0b30uIixlLmlkLCIgLnlhcC1hZHZfaGVhZGVyLXBvc2l0aW9uX2JvdHRvbS55YXAtYWR2IC55YXAtYWR2X193YXJuaW5ne2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS4iLGUuaWQsIiAueWFwLWFkdl9oZWFkZXItcG9zaXRpb25fYm90dG9tLnlhcC1hZHYgLnlhcC1hZHZfX3dhcm5pbmdfbWFpbnt0b3A6YXV0bztib3R0b206MTAwJX0uIixlLmlkLCIgLnlhcC1hZHZfYW5pbWF0ZSAueWFwLWFkdl9fcGljdHVyZS1pbWd7LXdlYmtpdC1hbmltYXRpb24tbmFtZTphZjthbmltYXRpb24tbmFtZTphZjstd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjoiLGUuYW5pbWF0aW9uRHVyYXRpb24sIm1zO2FuaW1hdGlvbi1kdXJhdGlvbjoiLGUuYW5pbWF0aW9uRHVyYXRpb24sIm1zOy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjphbHRlcm5hdGU7YW5pbWF0aW9uLWRpcmVjdGlvbjphbHRlcm5hdGU7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmJvdGg7YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RofS4iLGUuaWQsIiAueWFwLWFkdl9fYmFzZS1pdGVtc3twb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MTAwJTt3aWR0aDoxMDAlfUAtd2Via2l0LWtleWZyYW1lcyBhZnswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9MzAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMik7dHJhbnNmb3JtOnNjYWxlKDEuMik7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOnRvcDt0cmFuc2Zvcm0tb3JpZ2luOnRvcH03MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4yKTt0cmFuc2Zvcm06c2NhbGUoMS4yKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46Ym90dG9tO3RyYW5zZm9ybS1vcmlnaW46Ym90dG9tfXRvey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBhZnswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9MzAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMik7dHJhbnNmb3JtOnNjYWxlKDEuMik7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOnRvcDt0cmFuc2Zvcm0tb3JpZ2luOnRvcH03MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4yKTt0cmFuc2Zvcm06c2NhbGUoMS4yKTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46Ym90dG9tO3RyYW5zZm9ybS1vcmlnaW46Ym90dG9tfXRvey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKX19IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goIi4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2NvbHVtbnstd2Via2l0LWFsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS4iLGUuaWQsIiAueWFwLWFkYXB0aXZlX19ib2R5X2NvbHVtbi55YXAtYWRhcHRpdmVfX2JvZHlfYWRzX2NvdW50XzF7LXdlYmtpdC1hbGlnbi1pdGVtczpmbGV4LXN0YXJ0Oy1tcy1mbGV4LWFsaWduOnN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMSkudGhlbihmdW5jdGlvbigpe2UoaSgxODcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMSkudGhlbihmdW5jdGlvbigpe2UoaSgxODcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMSkudGhlbihmdW5jdGlvbigpe2UoaSgxODcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMSkudGhlbihmdW5jdGlvbigpe2UoaSgxODcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNikudGhlbihmdW5jdGlvbigpe2UoaSg4NDQpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNSkudGhlbihmdW5jdGlvbigpe2UoaSg4NDUpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMzcpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODQ2KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDIzKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDg0NykpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgyMCkudGhlbihmdW5jdGlvbigpe2UoaSg4NDgpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNjYpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODQ5KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDQwKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDg1MCkpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSg0MykudGhlbihmdW5jdGlvbigpe2UoaSg4NTEpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoNDQpLnRoZW4oZnVuY3Rpb24oKXtlKGkoODUyKSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0haSgyMSkuaXNIb3N0SW5MaXN0KHdpbmRvdyxpKDIxKS5leGNsdWRlSG9zdHMoWyJ5YW5kZXhBbGwiLCJnaXNtZXRlbyJdLGkoMjEpLnRvcFBhcnRuZXJzKSkmJiEwO3QuTUVESUFfMjQweDQwMF9JU19ORVdfMjQweDQwMD1ufSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSg2NSkuQURBUFRJVkVfMDQxOCxyPWkoNjUpLk9MRF9PTERfVkVSVElDQUwsYT1pKDY1KS5PTERfT0xEX0hPUklaT05UQUwscz1pKDY1KS5NT1RJT047dC5zd2l0Y2hGb3JtYXQ9ZnVuY3Rpb24oZSx0LGwpe3ZhciBjPWUuYmxvY2tOYW1lLHU9ZS5ibG9ja0lkLGQ9ZS5ibG9ja1NldHRpbmdzLHA9ZS5pc1R1cmJvLGY9aSgyMjkpLkFTU09DSUFURURfQkxPQ0tTW2NdWzBdLGg9bih7fSxkKTtzd2l0Y2goYyBpbiBpKDk4KS5hZGFwdGl2ZTA0MThCbG9ja3M/IiI6Yyl7Y2FzZSJvbGRIb3Jpem9udGFsIjppKDEwMykuaXNIb3N0SW5Ub3BQYXJ0bmVyTGlzdCh3aW5kb3cpJiYoZj1hKTticmVhaztjYXNlImhvcml6b250YWwiOmkoNzA5KS5pc05ld0hvcml6b250YWwodSl8fChmPWEpO2JyZWFrO2Nhc2UidmVydGljYWwiOmNhc2UiZmxhdCI6Y2FzZSJuZXdWZXJ0aWNhbCI6aSg3MTEpLmlzTmV3VmVydGljYWwoYyl8fChmPXIpO2JyZWFrO2Nhc2UiZXh0ZW5zaWJsZU1vYmlsZSI6aWYodC5pc1NTUCgpJiYoZj1vLGgubWluSGVpZ2h0PTI1MCksIWkoMTAzKS5pc0hvc3RJblRvcFBhcnRuZXJMaXN0KHdpbmRvdyl8fHApe2Y9czticmVha31icmVhaztjYXNlIm9sZE1vdGlvbiI6dC5pc1ByZXZpZXdQYWdlKCl8fChpKDM2KS5pc0FuZHJvaWQ/aSgzNikuYW5kcm9pZFZlcnNpb24+PTQuNDppKDM2KS5pc0lPUyYmaSgzNikuaU9TVmVyc2lvbj49OSl8fChsLmZvcm1hdC5uYW1lPSJuZXdWZXJ0aWNhbCIpO2JyZWFrO2Nhc2UiMzAweDI1MCI6Zj1pKDcxMikuc2VsZWN0QmxvY2szMDB4MjUwKHQpO2JyZWFrO2Nhc2UiMzIweDQ4MCI6dC5pc1NTUCgpJiYoZj1vKX1yZXR1cm57c2VsZWN0ZWRCbG9jazpmLG5ld0Jsb2NrU2V0dGluZ3M6aH19fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1uZXcgUmVnRXhwKFsiMTc1MTQyIiwiNTQwNjEiXS5qb2luKCJ8IiksImkiKSxvPW5ldyBSZWdFeHAoWyI0OTY4OC0yMCJdLmpvaW4oInwiKSwiaSIpO3QuaXNOZXdIb3Jpem9udGFsPWZ1bmN0aW9uKGUpe3JldHVybiEhbi50ZXN0KGUpfHwhby50ZXN0KGUpJiZpKDcxMCkuaXNIb3N0SW5MaXN0TmV3SG9yaXpvbnRhbCh3aW5kb3cpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0hvc3RJbkxpc3ROZXdIb3Jpem9udGFsPWZ1bmN0aW9uKGUpe3JldHVybiFpKDIxKS5pc0hvc3RJbkxpc3QoZSxbIm1haWxSdSIsImF2aXRvIiwib2siLCJnaXNtZXRlbyIsInlhbmRleFR2IiwieWFuZGV4TmV3cyJdKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNOZXdWZXJ0aWNhbD1mdW5jdGlvbihlKXtyZXR1cm4ibmV3VmVydGljYWwiPT09ZXx8IWkoMTAzKS5pc0hvc3RJblRvcFBhcnRuZXJMaXN0KHdpbmRvdyl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDY1KSxvPW4uUElDVFVSRV9TRUFSQ0hfRklYRUQscj1uLk9MRF8zMDB4MjUwO3Quc2VsZWN0QmxvY2szMDB4MjUwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RnJlZUFkcygpWzBdLG49ISghdHx8IXQuaW1hZ2VzKSYmdC5pbWFnZXMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4iIiE9PWVbMF19KTtyZXR1cm4gaSg3MTMpLmlzSG9zdEluTGlzdDMyMHg1MCh3aW5kb3cpJiZuP286cn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNIb3N0SW5MaXN0MzIweDUwPWZ1bmN0aW9uKGUpe3JldHVybiFpKDIxKS5pc0hvc3RJbkxpc3QoZSxbImF2aXRvIiwib2siLCJ2ayIsIm1haWxSdSIsImdpc21ldGVvIl0pfX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuLG8scj0hMTtmdW5jdGlvbiBhKCl7bj1bXSxpLmUoNDEpLnRoZW4oZnVuY3Rpb24oKXtvPWkoODUzKTtmb3IodmFyIGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5zdWNjZXNzKG8pO3I9ITEsbj1udWxsfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5lcnJvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj0hMCxuPW51bGx9KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxvP2Uobyk6KHImJmEoKSxuLnB1c2goe3N1Y2Nlc3M6ZSxlcnJvcjp0fSkpfSxhKCl9LGZ1bmN0aW9uKGUsdCxpKXt2YXIgbixvLHI9ITE7ZnVuY3Rpb24gYSgpe249W10saS5lKDQyKS50aGVuKGZ1bmN0aW9uKCl7bz1pKDg1NCk7Zm9yKHZhciBlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0uc3VjY2VzcyhvKTtyPSExLG49bnVsbH0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0uZXJyb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9ITAsbj1udWxsfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dD10fHxmdW5jdGlvbigpe30sbz9lKG8pOihyJiZhKCksbi5wdXNoKHtzdWNjZXNzOmUsZXJyb3I6dH0pKX0sYSgpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDMpLG89aSg1KSxyPWkoMTMpLGE9aSgzNDgpLHM9aSg5KSxsPWkoMTU3KSxjPWkoMTI1KSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzLGk9ZS5kZXBlbmRlbmNpZXMsbj1lLmlzT2xkLHI9dm9pZCAwIT09biYmbixsPWUuZGF0YVNvdXJjZSx1PWUuc2V0dGluZ3MsZD1lLmJsb2NrSWQscD1lLm5vbmNlLGY9ZS5wYWdlTnVtYmVyLGg9ZS5yZW5kZXJQYXJhbXMsZz1lLnJlbmRlclRvO3RoaXMuY2FsbGJhY2tzPVtdLHRoaXMuc2V0dGluZ3M9dSx0aGlzLmlzT2xkQmxvY2s9cjt2YXIgXz10aGlzLmdldEFkc0J5TGltaXQobC5nZXRGcmVlQWRzKCkpO28uZm9yRWFjaChfLGZ1bmN0aW9uKGUpe3JldHVybiBsLmNhcHR1cmVBZChlLmFkSWQpfSksdGhpcy5hZHM9XyxhLmxvYWREZXBlbmRlbmNpZXMoaSkudGhlbihmdW5jdGlvbihpKXt2YXIgbj1pWzBdLHI9aVsxXTtpZihvLmZvckVhY2goXyxmdW5jdGlvbihlKXtyZXR1cm4gbC5yZWxlYXNlQWQoZS5hZElkKX0pLHIpaWYobC5pc0ludGVyc2Nyb2xsZXIoKSl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZykscz1yO3MudmFsaWRhdGVTbG90KGEpJiYodC5pbnRlcnNjcm9sbGVyU2xvdD1zLmNyZWF0ZVNsb3Qoe25vZGU6YSxiZ0NvbG9yOnUuaW50ZXJzY3JvbGxlckJnQ29sb3IsYW5pbWF0ZWQ6dS5pbnRlcnNjcm9sbGVyQW5pbWF0aW9ufSkscy5wcmVwYXJlSW50ZXJzY3JvbGxlck9wdGlvbnMobCxhLHQuc2V0dGluZ3MpLGc9dC5pbnRlcnNjcm9sbGVyU2xvdC5ub2RlSWQsZS5yZW5kZXJUb05vZGU9dC5pbnRlcnNjcm9sbGVyU2xvdC5ub2RlKX1lbHNle3ZhciB5PWMuZ2V0RnVsbHNjcmVlblNldHRpbmdzKHQuc2V0dGluZ3MpO3QuZnVsbHNjcmVlblNsb3Q9ci5jcmVhdGVTbG90KHtjbG9zZUJ1dHRvblZpc2liaWxpdHlUaW1lb3V0OnkuY2xvc2VCdXR0b25WaXNpYmlsaXR5VGltZW91dH0pLGc9dC5mdWxsc2NyZWVuU2xvdC5ub2RlSWQsZS5yZW5kZXJUb05vZGU9dC5mdWxsc2NyZWVuU2xvdC5ub2RlfXQuYmxvY2s9dC5pc09sZEJsb2NrP25ldyBuKGwsdSxnLGQscCxmLGgpOm5ldyBuKGUpLHQubGF5b3V0PXQuYmxvY2subGF5b3V0LG8uZm9yRWFjaCh0LmNhbGxiYWNrcyxmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSksdC5jYWxsYmFja3M9W119KVsiY2F0Y2giXShmdW5jdGlvbihlKXtyZXR1cm4gcy5sb2dnZXIuZXJyb3IoZSwiQnVuZGxlIGxvYWRpbmcgZXJyb3IiKX0pfXJldHVybiBlLnByb3RvdHlwZS5nZXRSZWFsQmxvY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmJsb2NrP2UodGhpcy5ibG9jayk6dGhpcy5jYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiBlKHQuYmxvY2spfSl9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpczt0aGlzLmJsb2NrP3RoaXMucmVuZGVyQmxvY2soZSx0KTp0aGlzLmNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7aS5yZW5kZXJCbG9jayhlLHQpfSl9LGUucHJvdG90eXBlLmluaXRWaXNpYmlsaXR5Q2hlY2tlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuYmxvY2s/dGhpcy5ibG9jay5pbml0VmlzaWJpbGl0eUNoZWNrZXIoZSk6dGhpcy5jYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB0LmJsb2NrJiZ0LmJsb2NrLmluaXRWaXNpYmlsaXR5Q2hlY2tlcihlKX0pfSxlLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95KCl9LGUucHJvdG90eXBlLnNsaWRlVXA9ZnVuY3Rpb24oZSl7dGhpcy5ibG9jay5zbGlkZVVwKGUpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZnVsbHNjcmVlblNsb3Q7dD90LmNsb3NlKCk6dGhpcy5ibG9jaz90aGlzLmRlc3Ryb3lCbG9jayh0aGlzLmJsb2NrKTp0aGlzLmNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveUJsb2NrKGUuYmxvY2spfSl9LGUucHJvdG90eXBlLmdldFVzZWRBZHZzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmxvY2s/dGhpcy5ibG9jay5nZXRVc2VkQWR2cygpOnRoaXMuYWRzfHxbXX0sZS5wcm90b3R5cGUuaXNJblZpZXdwb3J0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmJsb2NrJiZ0aGlzLmJsb2NrLmlzSW5WaWV3cG9ydCgpfSxlLnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYmxvY2smJnRoaXMuYmxvY2suaXNWaXNpYmxlKCl9LGUucHJvdG90eXBlLmlzVmlzaWJpbGl0eUNvbmZpcm1lZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5ibG9jayYmdGhpcy5ibG9jay5pc1Zpc2liaWxpdHlDb25maXJtZWQoKX0sZS5wcm90b3R5cGUuZ2V0QWRzQnlMaW1pdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgwLHRoaXMuc2V0dGluZ3MubGltaXQpfSxlLnByb3RvdHlwZS5yZW5kZXJCbG9jaz1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMsbz10aGlzLmZ1bGxzY3JlZW5TbG90LGE9dGhpcy5pbnRlcnNjcm9sbGVyU2xvdDtpZihvKXt2YXIgcz1jLmdldEZ1bGxzY3JlZW5TZXR0aW5ncyh0aGlzLnNldHRpbmdzKSx1PXQsZD1yLm5vb3A7ZT1vLm5vZGUsby5vblNob3c9ZnVuY3Rpb24oKXtkPWwuYWRkRnVsbHNjcmVlbkxpc3RlbmVycyhvLm5vZGUsImRpcmVjdCIpLG8uc3RhcnRDb3VudGRvd24ocy5kdXJhdGlvbixmdW5jdGlvbigpe28uY2xvc2UoKX0pLGwuc2VuZFRvRnVsbHNjcmVlbkxvZyh7ZXZlbnQ6InNob3ciLHR5cGU6ImRpcmVjdCJ9KX0sby5vbkNsb3NlPWZ1bmN0aW9uKCl7aS5ibG9jayYmKGQoKSxpLmRlc3Ryb3lCbG9jayhpLmJsb2NrKSl9LG8ub25DbGlja0Nsb3NlPWZ1bmN0aW9uKCl7bC5zZW5kVG9GdWxsc2NyZWVuTG9nKHtldmVudDoiY2xpY2stY2xvc2UiLHR5cGU6ImRpcmVjdCJ9KX0sdD1mdW5jdGlvbigpe28uc2hvdygpLHUoKX19YSYmKGU9YS5ub2RlKSx0aGlzLmlzT2xkQmxvY2smJnRoaXMuYmxvY2smJnRoaXMuYmxvY2sucmVuZGVyP3RoaXMuYmxvY2sucmVuZGVyKCk6blsiZGVmYXVsdCJdLnJlbmRlclRvTm9kZShlLHRoaXMuYmxvY2spLHQoKX0sZS5wcm90b3R5cGUuZGVzdHJveUJsb2NrPWZ1bmN0aW9uKGUpe2UuZGVzdHJveT9lLmRlc3Ryb3koKTplLmRlc3RydWN0b3ImJmUuZGVzdHJ1Y3RvcigpLHRoaXMuaW50ZXJzY3JvbGxlclNsb3QmJnRoaXMuaW50ZXJzY3JvbGxlclNsb3QuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmJsb2NrfSxlfSgpO3QuQXN5bmNCbG9jaz11fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRlZmF1bHRTdHJhdGVneT1pKDEyMCkuR2VuZXJhbFN0cmF0ZWd5LHQuVmlzaWJpbGl0eUNoZWNrZXI9aSg3MTgpLmNyZWF0ZVZDQ2xhc3MoaSgxMjApLkdlbmVyYWxTdHJhdGVneS5mYWN0b3J5KX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jcmVhdGVWQ0NsYXNzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LG4sbyl7dm9pZCAwPT09byYmKG89e30pO3ZhciByPWkoMTE5KS52aXNpYmlsaXR5T2JzZXJ2ZXIoZSxvKSxhPWkoMTMpLm5vb3A7dGhpcy5zdGFydD1mdW5jdGlvbigpe2EoKSxhPXIodCxuKX0sdGhpcy5zdG9wPWZ1bmN0aW9uKCl7YSgpfSxvLmRpc2FibGVBdXRvU3RhcnR8fHRoaXMuc3RhcnQoKX19KCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWkoMjMxKS5wcm90b3R5cGUuX29uUmVuZGVyO2koMjMxKS5wcm90b3R5cGUuX29uUmVuZGVyPWZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGU9e2V2ZW50OmkoNDkpLkVWRU5UUy5CTE9DS19DT05GSVJNQVRJT04sZGF0YTp7YWN0aW9uOmkoNDkpLkVWRU5UUy5DT05GSVJNX0JMT0NLLHBhZ2VJZDppKDE1KS5wYXJzZUJsb2NrSWQodGhpcy5ibG9ja0lkKS5wYWdlSWQsYmxvY2tOYW1lOiIiLGJsb2NrSWQ6dGhpcy5ibG9ja0lkLHJlbmRlclRvOnRoaXMuX21haW5Db250SWQsdHlwZToiUiJ9fTtpKDIxNCkodGhpcy5fY29udGFpbmVyLGUpfX0sZnVuY3Rpb24oZSx0LGkpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2kuZSgwKS50aGVuKGZ1bmN0aW9uKCl7ZShpKDc5NikpfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXt0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixvPShuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG49T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbaV09dFtpXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9bihlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KGkucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBpKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1pKDMpLGE9aSgxNykscz1pKDIxMSksbD1pKDIxMyksYz1pKDEwKSx1PWkoMTY2KSxkPWkoNzIyKSxwPWkoMjgpLGY9W2koMTY3KSxpKDE3NCksaSg3MjMpLGkoMjEyKV0saD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmFidXNlZD0hMSx0fXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5pZD10aGlzLnByb3BzLmlkfHx0aGlzLnByb3BzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSx0aGlzLmNvbnRhaW5lcklkPXRoaXMuaWQrIi1pbmxpbmUiLHRoaXMubmFtZT0icnRiLWlubGluZSIsZS5wcm90b3R5cGUub25Jbml0LmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJfLHQ9dGhpcy5pZCxpPXRoaXMucHJvcHMsbj1pLm5vbmNlLG89aS5kYXRhU291cmNlLGE9by5nZXRMYW5ndWFnZSgpO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2NsYXNzOnRoaXMuY29udGFpbmVySWR9LHJbImRlZmF1bHQiXS5jcmVhdGUodS5TdHlsZSx7cmVzb3VyY2VJZDoic3R5bGUiLHN0eWxlczpmLHZhcmlhYmxlczp0aGlzLmdldENzc1ZhcmlhYmxlcygpLG5vbmNlOm59KSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJvZHkiLGlkOiIhYm9keSIsY2xhc3M6ZSgiX19ib2R5Iil9KSxyWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse2lkOiIhIit0LGNsYXNzOmUoInlhcC1yZXNldCIsdCl9LHJbImRlZmF1bHQiXS5jcmVhdGUocy5BZHR1bmUse3Jlc291cmNlSWQ6ImFkdHVuZSIsYWRJZDowLGxhbmd1YWdlOmEsbW9kOiJfYmxhY2std2hpdGUiLGNsYXNzOmUoIl9fYWR0dW5lIil9KSxyWyJkZWZhdWx0Il0uY3JlYXRlKGwuRmVlZGJhY2tNZW51LHtyZXNvdXJjZUlkOiJmZWVkYmFjayIsbGFuZ3VhZ2U6by5nZXRMYW5ndWFnZSgpLGFidXNlVXJsOm8uZ2V0QWJ1c2VVcmwoKSxjbGFzczplKCJfX2ZlZWRiYWNrIil9KSkpfSx0LnByb3RvdHlwZS5hZnRlclJlbmRlcj1mdW5jdGlvbigpe3RoaXMuZmVlZGJhY2s9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImZlZWRiYWNrIiksdGhpcy5hZHR1bmU9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImFkdHVuZSIpLHRoaXMuaW5pdEJhc2VQYXRoKCl9LHQucHJvdG90eXBlLmdldENzc1ZhcmlhYmxlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJue2lkOnRoaXMuaWQsY29udGFpbmVySWQ6cC5nZXRBbGlhcyh0aGlzLmNvbnRhaW5lcklkKSx3aWR0aDp0LGhlaWdodDppLHNldHRpbmdzOntiZ0NvbG9yOiIjZmZmIn19fSx0LnByb3RvdHlwZS5pbml0QmFzZVBhdGg9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuZG9jdW1lbnQsdD1lLmhlYWQucXVlcnlTZWxlY3RvcigiYmFzZSIpO3R8fCh0PWUuY3JlYXRlRWxlbWVudCgiYmFzZSIpLGUuaGVhZC5hcHBlbmRDaGlsZCh0KSksdC5ocmVmPXRoaXMucHJvcHMuYmFzZVBhdGh9LHQucHJvdG90eXBlLm9uTW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFJlc291cmNlQnlJZCgiYm9keSIpLmdldEVsZW1lbnQoKTt0aGlzLmVycm9yRGVzY3JpcHRvcj1hLm9uKHdpbmRvdywiZXJyb3IiLHRoaXMub25FcnJvcix0aGlzKSxkLnNldElubmVySFRNTChlLHRoaXMucHJvcHMuaHRtbCx0aGlzLnByb3BzLm5vbmNlKX0sdC5wcm90b3R5cGUub25Vbm1vdW50PWZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuZXJyb3JEZXNjcmlwdG9yJiZ0aGlzLmVycm9yRGVzY3JpcHRvci51bigpLGUucHJvdG90eXBlLm9uVW5tb3VudC5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5vbkNsaWNrQWR0dW5lPWZ1bmN0aW9uKCl7dGhpcy5mZWVkYmFjay5pc1Zpc2libGUoKT90aGlzLmNsb3NlRmVlZGJhY2soKToodGhpcy5mZWVkYmFjay5maXRTaXplKCksdGhpcy5vcGVuRmVlZGJhY2soKSl9LHQucHJvdG90eXBlLm9uUmVjZWl2ZWRGZWVkYmFjaz1mdW5jdGlvbigpe3RoaXMuYWJ1c2VkPSEwLHRoaXMuYWR0dW5lLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUub3BlbkZlZWRiYWNrPWZ1bmN0aW9uKCl7dGhpcy5hYnVzZWR8fCh0aGlzLmZlZWRiYWNrLnNob3coKSx0aGlzLmFkdHVuZS5kaXNhYmxlVG9vbHRpcCgpKX0sdC5wcm90b3R5cGUuY2xvc2VGZWVkYmFjaz1mdW5jdGlvbigpe3RoaXMuYWJ1c2VkfHwodGhpcy5mZWVkYmFjay5oaWRlKCksdGhpcy5hZHR1bmUuZW5hYmxlVG9vbHRpcCgpKX0sdC5wcm90b3R5cGUub25FcnJvcj1mdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uRXJyb3IoZS5lcnJvcil9LHR9KGMpO3QuUnRiSW5saW5lPWh9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuc2V0SW5uZXJIVE1MPWZ1bmN0aW9uIGUodCxpLG4pe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uaW5uZXJIVE1MPWk7Zm9yKHZhciByPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGE9W10scz0wO3M8ci5sZW5ndGg7cysrKWEucHVzaChyW3NdKTtmb3IoO28uZmlyc3RDaGlsZDspdC5hcHBlbmRDaGlsZChvLmZpcnN0Q2hpbGQpO3ZhciBsPWRvY3VtZW50LndyaXRlLGM9ZG9jdW1lbnQud3JpdGVsbjshZnVuY3Rpb24gaSgpe3RyeXtpZihkb2N1bWVudC53cml0ZT1mdW5jdGlvbihpKXtlKHQsaSxuKX0sZG9jdW1lbnQud3JpdGVsbj1mdW5jdGlvbihlKXtkb2N1bWVudC53cml0ZShlKyI8YnIvPiIpfSxhLmxlbmd0aCl7dmFyIG89YS5zaGlmdCgpO28mJmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG89MDtvPGUuYXR0cmlidXRlcy5sZW5ndGg7bysrKXt2YXIgcj1lLmF0dHJpYnV0ZXNbb107aS5zZXRBdHRyaWJ1dGUoci5uYW1lLHIudmFsdWUpfW4mJmkuc2V0QXR0cmlidXRlKCJub25jZSIsbiksZS5zcmM/KGkuc2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIsImFub255bW91cyIpLGkuYXN5bmM9ITAsaS5zcmM9ZS5zcmMsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtpLm9ubG9hZD1mdW5jdGlvbigpe30sdCgpfSxlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGksZSkpOihpLmlubmVySFRNTD1lLnRleHQsZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpLGUpLHQoKSl9KG8saSl9fWZpbmFsbHl7ZG9jdW1lbnQud3JpdGU9bCxkb2N1bWVudC53cml0ZWxuPWN9fSgpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5jb250YWluZXJJZCwie3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuY29udGFpbmVySWQsIiAucnRiLWlubGluZV9fYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6IixlLndpZHRoLCJweDtoZWlnaHQ6IixlLmhlaWdodCwicHh9LiIsZS5pZCwiIC5ydGItaW5saW5lX19hZHR1bmV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt6LWluZGV4OjIwfSIpLHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSkscj1mdW5jdGlvbigpe3JldHVybihyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPWkoMykscz1pKDY5KSxsPWkoNjcpLGM9aSg3MjUpLHU9aSg0MDUpLGQ9aSgzMykscD1pKDEpLGY9aSgxMDQpLGg9aSgyMTEpLGc9aSgyMTMpLF89aSgxMCkseT1pKDI1NCksbT1pKDI1MyksYj1pKDE2Niksdj1pKDcyNiksdz1pKDM0OSkseD1pKDE4NCksaz1pKDcyNyksQz1pKDE2KSxTPWkoMTQ3KSxPPWkoMTgyKSxJPWkoNzI4KSxBPVtpKDE2NyksaSgxNzQpLGkoNzI5KSxpKDIxMildLFQ9ezA6Im5vbmUiLDE6ImludmlzaWJsZSIsMjoib25lLXBpeGVsIn0sRT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmFidXNlZD0hMSx0fXJldHVybiBvKHQsZSksdC5wcm90b3R5cGUub25Jbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcm9wcyxpPXQuZGF0YVNvdXJjZSxuPXQudGVzdHRhZyxvPXQubm9uY2U7dGhpcy5pZD10aGlzLnByb3BzLmlkfHx0aGlzLnByb3BzLmRhdGFTb3VyY2UuZ2V0VW5pcXVlSWQoKSx0aGlzLm5hbWU9InJ0Yi1ibG9jayIsdGhpcy5ub25jZT1vLHRoaXMuaXNJbnRlcnN0aXRpYWw9aS5pc0ludGVyc3RpdGlhbCx0aGlzLmlzRnVsbHNjcmVlbj0hMSx0aGlzLmlzTWVkaWFBZGFwdGl2ZT1pLmlzTWVkaWFBZGFwdGl2ZSgpLGkuaXNGdWxsc2NyZWVuKCkmJih0aGlzLmlzRnVsbHNjcmVlbj0hMCx0aGlzLmlzSW50ZXJzdGl0aWFsPSEwKSx0aGlzLmhvbmV5cG90PWkuZ2V0SG9uZXlwb3QoKSxuLnNldFByb3BzKHtpc0Z1bGxzY3JlZW46dGhpcy5pc0Z1bGxzY3JlZW59KTt2YXIgcj1uZXcgay5EZWZlcnJlZDtyLnByb21pc2UudGhlbihwLnByb3RlY3QoIlJUQkJhbm5lci5vblJlYWR5Iix0aGlzLm9uUmVhZHksdGhpcykpLHRoaXMucmVzb2x2ZURvbVJlYWR5PXIucmVzb2x2ZSxlLnByb3RvdHlwZS5vbkluaXQuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuYmVmb3JlUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsU2l6ZXM9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5wcm9wcy5yZW5kZXJUb05vZGUpfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuYl8saT10aGlzLmlkLG49dGhpcy5pc0ludGVyc3RpdGlhbCxvPXRoaXMucHJvcHMscz1vLmh0bWwsbD1vLmRhdGFTb3VyY2UsYz1vLm5vbmNlLHU9by5ob3Jpem9udGFsQWxpZ24sZD12b2lkIDAhPT11JiZ1LHA9by5hbHRlcm5hdGl2ZUNvZGUsZj1sLmdldFBvc3RlclNyYygpLGg9bC5nZXRTaXplKCksZz1oWzBdLF89aFsxXSx3PUJvb2xlYW4ocyk7cmV0dXJuIHMmJnAmJihTLmlzVHVyYm9QYWdlKHdpbmRvdyksdz0hMSksYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJyb290IixjbGFzczp0KCJ5YXAtcmVzZXQiLGkpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKHkuQ29tcG9zaXRlRGV0ZWN0b3Ise29uUmVhZHk6dGhpcy5yZXNvbHZlRG9tUmVhZHl9LGFbImRlZmF1bHQiXS5jcmVhdGUobS5EaXNwbGF5RGV0ZWN0b3Ise25vbmNlOnRoaXMucHJvcHMubm9uY2V9KSksYVsiZGVmYXVsdCJdLmNyZWF0ZShiLlN0eWxlLHtyZXNvdXJjZUlkOiJzdHlsZSIsc3R5bGVzOkEsdmFyaWFibGVzOnRoaXMuZ2V0Q3NzVmFyaWFibGVzKCksbm9uY2U6Y30pLGFbImRlZmF1bHQiXS5jcmVhdGUoInlhdGFnIix7cmVzb3VyY2VJZDoibWFpbiIsY2xhc3M6dCh0KCksIl9ob3Jpem9udGFsLWFsaWduXyIrKGR8fG4pLG4mJiJfaW50ZXJzdGl0aWFsIiwiX2hvbmV5cG90XyIrVFt0aGlzLmhvbmV5cG90XSl9LG4mJmY/YVsiZGVmYXVsdCJdLmNyZWF0ZSh2LkJnSW1hZ2Use3Jlc291cmNlSWQ6ImJnLWltYWdlIixwb3N0ZXJTcmM6ZixnZXRJbWFnZURhdGE6ZnVuY3Rpb24odCl7cmV0dXJuIGUub25HZXRJbWFnZURhdGEodCl9LGNsYXNzTmFtZXM6eyI6Omhvc3QiOnQoIl9fcGFyYW5qYS1pbWFnZSIpfX0pOm51bGwsbj9hWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJnLWNvbG9yIixjbGFzczp0KCJfX3BhcmFuamEtYmciKX0pOm51bGwsYVsiZGVmYXVsdCJdLmNyZWF0ZSgieWF0YWciLHtyZXNvdXJjZUlkOiJjb250YWluZXIiLHN0eWxlOnt3aWR0aDpnLGhlaWdodDpffSxjbGFzczp0KCJfX2NvbnRhaW5lciIpfSxhWyJkZWZhdWx0Il0uY3JlYXRlKCJ5YXRhZyIse3Jlc291cmNlSWQ6ImJvZHkiLGlkOiIhIitpLHN0eWxlOnt3aWR0aDpnLGhlaWdodDpffSxjbGFzczp0KCJfX2JvZHkiKX0sdz9udWxsOmFbImRlZmF1bHQiXS5jcmVhdGUoImlmcmFtZSIscih7cmVzb3VyY2VJZDoiaWZyYW1lIixzY3JvbGxpbmc6Im5vIn0se21hcmdpbldpZHRoOjAsbWFyZ2luSGVpZ2h0OjAsZnJhbWVCb3JkZXI6MCx2c3BhY2U6MCxoc3BhY2U6MCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSkpLHRoaXMucmVuZGVyQWR0dW5lQW5kRmVlZGJhY2soKSkpKSl9LHQucHJvdG90eXBlLnJlbmRlckFkdHVuZUFuZEZlZWRiYWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iXyx0PXRoaXMucHJvcHMuZGF0YVNvdXJjZSxpPXQuZ2V0QWJ1c2VVcmwoKSxuPXQuZ2V0TGFuZ3VhZ2UoKTtpZihpJiZ4LnNob3VsZFNob3dBZHR1bmUodCkmJiF0aGlzLmlzRnVsbHNjcmVlbiYmdy5jYW5Vc2VBZHR1bmUod2luZG93KSl7dmFyIG89dC5nZXRTaXplKCkscj1vWzBdKm9bMV0+PTc1ZTM/IkwiOiJNIjtyZXR1cm4gYVsiZGVmYXVsdCJdLmNyZWF0ZShzLkNvbnRhaW5lcixudWxsLGFbImRlZmF1bHQiXS5jcmVhdGUoaC5BZHR1bmUse3Jlc291cmNlSWQ6ImFkdHVuZSIsYWRJZDowLGxhbmd1YWdlOm4sbW9kOiJfYmxhY2std2hpdGUiLHNpemU6cixjbGFzczplKCJfX2FkdHVuZSIpfSksYVsiZGVmYXVsdCJdLmNyZWF0ZShnLkZlZWRiYWNrTWVudSx7cmVzb3VyY2VJZDoiZmVlZGJhY2siLGxhbmd1YWdlOm4sYWJ1c2VVcmw6aSxjbGFzczplKCJfX2ZlZWRiYWNrIil9KSl9fSx0LnByb3RvdHlwZS5nZXRDc3NWYXJpYWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm57aWQ6dGhpcy5pZCxob25leVdpZHRoOiJhdXRvIixob25leUhlaWdodDoiYXV0byIsdmlzaWJpbGl0eToidmlzaWJsZSIsc2V0dGluZ3M6e2JnQ29sb3I6IiNmZmYifX19LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5mZWVkYmFjaz10aGlzLmdldFJlc291cmNlQnlJZCgiZmVlZGJhY2siKSx0aGlzLmFkdHVuZT10aGlzLmdldFJlc291cmNlQnlJZCgiYWR0dW5lIiksdGhpcy5iZ0ltYWdlPXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJiZy1pbWFnZSIpLHRoaXMuYmdDb2xvcj10aGlzLmdldFJlc291cmNlQnlJZCgiYmctY29sb3IiKSx0aGlzLm1haW49dGhpcy5nZXRSZXNvdXJjZUJ5SWQoIm1haW4iKSx0aGlzLmNvbnRhaW5lcj10aGlzLmdldFJlc291cmNlQnlJZCgiY29udGFpbmVyIiksdGhpcy5ib2R5PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJib2R5IiksdGhpcy5pZnJhbWU9dGhpcy5nZXRSZXNvdXJjZUJ5SWQoImlmcmFtZSIpfSx0LnByb3RvdHlwZS5vblJlYWR5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnNldEJhbm5lclNpemVzKCksKHRoaXMuaXNJbnRlcnN0aXRpYWx8fHRoaXMuaXNNZWRpYUFkYXB0aXZlKSYmdGhpcy5iaW5kKHdpbmRvdywicmVzaXplIixmdW5jdGlvbigpe3JldHVybiBlLnNldEJhbm5lclNpemVzKCl9KSx0aGlzLnByb3BzLm9uUmVhZHkoKSx0aGlzLmlmcmFtZT90aGlzLmluaXRGcmllbmRseUZyYW1lKCk6dGhpcy5pbml0U2FmZUZyYW1lKCl9LHQucHJvdG90eXBlLnNldEJhbm5lclNpemVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuZGF0YVNvdXJjZSxpPWUucmVuZGVyVG9Ob2RlLG49ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoaSksbz10LmdldFNpemUoKSxyPW9bMF0sYT1vWzFdLHM9MTtpZih0aGlzLmlzTWVkaWFBZGFwdGl2ZSl7dmFyIGw9MD09PXRoaXMuaW5pdGlhbFNpemVzLndpZHRofHwwPT09dGhpcy5pbml0aWFsU2l6ZXMuaGVpZ2h0LHU9e3dpZHRoOmw/cjoiMTAwJSIsaGVpZ2h0Omw/YToiMTAwJSIsIm1pbi13aWR0aCI6IjE2MHB4IiwibWluLWhlaWdodCI6IjUwcHgifTtyZXR1cm4gdGhpcy5jb250YWluZXIuc2V0U3R5bGUodSksdGhpcy5ib2R5LnNldFN0eWxlKHUpLHRoaXMubWFpbi5zZXRTdHlsZSh1KSx2b2lkIHRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJyb290Iikuc2V0U3R5bGUodSl9dGhpcy5pc0ludGVyc3RpdGlhbCYmKHRoaXMubWFpbi5zZXRTdHlsZSh7d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9KSx0aGlzLmJnSW1hZ2UmJnRoaXMuYmdJbWFnZS5yZXNpemUobi53aWR0aCxuLmhlaWdodCkscz1jLmdldFNjYWxlKG4se3dpZHRoOnIsaGVpZ2h0OmF9KSksdGhpcy5ib2R5LnNldFN0eWxlKHt3aWR0aDpyLGhlaWdodDphLHRyYW5zZm9ybTpzPDE/InNjYWxlKCIrcysiKSI6Im5vbmUifSl9LHQucHJvdG90eXBlLm9uR2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXUuZ2V0QXZlcmFnZUNvbG9yKGUuZGF0YSk7aWYodCl7dmFyIGk9bC5yZ2JUb0hzdi5hcHBseSh2b2lkIDAsdCksbj1pWzBdLG89aVsxXTt0aGlzLmJnQ29sb3Iuc2V0U3R5bGUoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiaHNsYSgiK24rIiwiK28rIiUsMTUlLCAwLjkpIn0pfX19LHQucHJvdG90eXBlLmluaXRGcmllbmRseUZyYW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRUZW1wbGF0ZURhdGEoKSx0PUkoZSk7dHJ5e3ZhciBpPXRoaXMuaWZyYW1lLmdldEVsZW1lbnQoKS5jb250ZW50RG9jdW1lbnQ7aS5vcGVuKCksaS53cml0ZSh0KSxpLmNsb3NlKCksdGhpcy5vblJlbmRlcigpfWNhdGNoKGUpe2UubmFtZT0iUlRCQmFubmVyLmluaXRGcmllbmRseUZyYW1lIixlLnN0YWNrPWUuc3RhY2srIjpIVE1MOlxuIit0LHRoaXMub25FcnJvcihlKX19LHQucHJvdG90eXBlLmdldFRlbXBsYXRlRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnVybCxpPWUuaHRtbCxuPWUubm9uY2Usbz12b2lkIDA9PT1uPyIiOm4sYT1lLmJhc2VQYXRoLHM9e2Jhc2VVUkw6IiIsbm9uY2U6b30sbD1Cb29sZWFuKHQpJiYhMHx8IUJvb2xlYW4oaSk/e3VybDp0fTp7aHRtbDppLHVybDpudWxsLGJhc2VVUkw6YX07cmV0dXJuIHIocih7fSxzKSxsKX0sdC5wcm90b3R5cGUuaW5pdFNhZmVGcmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnByb3BzLGk9dC5iYXNlUGF0aCxuPXQubm9uY2Usbz10LnByb3RlY3Qscj10aGlzLmJvZHkuZ2V0RWxlbWVudCgpLGE9dGhpcy5nZXRTYWZlZnJhbWVTYW5kYm94QXR0cigpLHM9IiIrTy5nZXRQcmV2ZW50TWlzc0NsaWNrc1NjcmlwdCgpK3RoaXMucHJvcHMuaHRtbDtmLmluaXRTYWZlZnJhbWUod2luZG93LHIse2lkOnRoaXMuaWQsaHRtbDpzLGJhc2VQYXRoOmksd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsbm9uY2U6bixzYW5kYm94OmEscHJvdGVjdGVkOm99LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBlLm9uUmVuZGVyKCl9LGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUub25BY3Rpb25TYWZlRnJhbWUodCxpLHMpfSl9LHQucHJvdG90eXBlLmdldFNhZmVmcmFtZVNhbmRib3hBdHRyPWZ1bmN0aW9uKCl7aWYodGhpcy5wcm9wcy5wcm90ZWN0JiYoQy5jaGVja0J1bmRsZVR5cGUoQy5idW5kbGVUeXBlcy5TU1ApfHxDLmNoZWNrQnVuZGxlVHlwZShDLmJ1bmRsZVR5cGVzLm1vYmlsZVNkaykpKXJldHVybnsiYWxsb3ctdG9wLW5hdmlnYXRpb24iOiEwfX0sdC5wcm90b3R5cGUub25BY3Rpb25TYWZlRnJhbWU9ZnVuY3Rpb24oZSx0LGkpe2lmKCJlcnJvciI9PT1lKXt2YXIgbj12b2lkIDA7dHJ5e3ZhciBvPUpTT04ucGFyc2UodCk7bj1yKHIoe30sbykse25hbWU6by50eXBlfSksIlJlZmVyZW5jZUVycm9yIj09PW8udHlwZSYmKG4uc3RhY2s9by5saW5lKyI6SFRNTDpcbiIraSl9Y2F0Y2goZSl7KG49ZSkubmFtZT0iVW5rbm93blNhZmVmcmFtZUVycm9yOiIrbi5uYW1lLG4uc3RhY2s9bi5zdGFjaysiOkhUTUw6XG4iK2l9dGhpcy5vbkVycm9yKG4pfX0sdC5wcm90b3R5cGUub25FcnJvcj1mdW5jdGlvbihlKXt0aGlzLnByb3BzLm9uRXJyb3IoZSl9LHQucHJvdG90eXBlLm9uUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5vblJlbmRlcigpfSx0LnByb3RvdHlwZS5vblVubW91bnQ9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5vblVubW91bnQuY2FsbCh0aGlzKSx0aGlzLmlmcmFtZXx8Zi5udWtlU2FmZWZyYW1lKHdpbmRvdyx0aGlzLmlkKX0sdC5wcm90b3R5cGUub25DbGlja0FkdHVuZT1mdW5jdGlvbigpe3RoaXMuZmVlZGJhY2suaXNWaXNpYmxlKCk/dGhpcy5jbG9zZUZlZWRiYWNrKCk6KHRoaXMuZmVlZGJhY2suZml0U2l6ZSgpLHRoaXMub3BlbkZlZWRiYWNrKCkpfSx0LnByb3RvdHlwZS5vblJlY2VpdmVkRmVlZGJhY2s9ZnVuY3Rpb24oZSl7dGhpcy5hYnVzZWQ9ITAsdGhpcy5hZHR1bmUuZGVzdHJveSgpLHRoaXMucHJvcHMuZGF0YVNvdXJjZS5hYnVzZUFkKGUpfSx0LnByb3RvdHlwZS5vcGVuRmVlZGJhY2s9ZnVuY3Rpb24oKXt0aGlzLmFidXNlZHx8KHRoaXMuZmVlZGJhY2suc2hvdygpLHRoaXMuYWR0dW5lLmRpc2FibGVUb29sdGlwKCkpfSx0LnByb3RvdHlwZS5jbG9zZUZlZWRiYWNrPWZ1bmN0aW9uKCl7dGhpcy5hYnVzZWR8fCh0aGlzLmZlZWRiYWNrLmhpZGUoKSx0aGlzLmFkdHVuZS5lbmFibGVUb29sdGlwKCkpfSx0fShfKTt0LlJ0YkJhbm5lcj1FfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybigxZTMtKChpPShlLXQpLyguMDAxKmUpKT4wP01hdGguY2VpbChpKTpNYXRoLmZsb29yKGkpKSkvMWUzO3ZhciBpfTt0LmdldFNjYWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2lkdGgvZS53aWR0aD50LmhlaWdodC9lLmhlaWdodD9uKHQud2lkdGgsZS53aWR0aCk6bih0LmhlaWdodCxlLmhlaWdodCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89KG49ZnVuY3Rpb24oZSx0KXtyZXR1cm4obj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYoZVtpXT10W2ldKX0pKGUsdCl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9ZX1uKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooaS5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IGkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWkoMyksYT1pKDY2KSxzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQucmVhZHk9ITEsdC53aWR0aD0wLHQuaGVpZ2h0PTAsdH1yZXR1cm4gbyh0LGUpLHQucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNsYXNzTmFtZXMsdD1hLmNsYXNzTmFtZXNGYWN0b3J5KGUpO3JldHVybiByWyJkZWZhdWx0Il0uY3JlYXRlKCJjYW52YXMiLHtyZXNvdXJjZUlkOiJjYW52YXMiLGNsYXNzOnQoIjo6aG9zdCIpfSl9LHQucHJvdG90eXBlLmFmdGVyUmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZ2V0UmVzb3VyY2VCeUlkKCJjYW52YXMiKTt0aGlzLmNhbnZhcz10LmdldEVsZW1lbnQoKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmltYWdlPW5ldyBJbWFnZTt2YXIgaT10aGlzLmltYWdlO2kuY3Jvc3NPcmlnaW49InVzZS1jcmVkZW50aWFscyIsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtlLnJlYWR5PSEwLGUuZHJhd0ltYWdlKCl9LGkub25lcnJvcj1mdW5jdGlvbigpe30saS5zcmM9dGhpcy5wcm9wcy5wb3N0ZXJTcmN9LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuY2FudmFzO2kud2lkdGg9ZSxpLmhlaWdodD10LHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD10LHRoaXMucmVhZHkmJnRoaXMuZHJhd0ltYWdlKCl9LHQucHJvdG90eXBlLmRyYXdJbWFnZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCx0PXRoaXMuaW1hZ2UsaT10aGlzLndpZHRoLG49dGhpcy5oZWlnaHQsbz1OdW1iZXIoKHQud2lkdGgvdC5oZWlnaHQpLnRvRml4ZWQoMikpLHI9aSxhPW47bzw9aS9uP2E9ci9vOnI9YSpvO3ZhciBzPXQud2lkdGgvcixsPU1hdGguYWJzKC41KihyLWkpKnMpLGM9TWF0aC5hYnMoLjUqKGEtbikqcyksdT1NYXRoLmNlaWwoaSpzKSxkPU1hdGguY2VpbChuKnMpO2lmKGUuZHJhd0ltYWdlKHQsbCxjLHUsZCwwLDAsaSxuKSx2b2lkIDA9PT10aGlzLmltYWdlRGF0YSl7dHJ5e3RoaXMuaW1hZ2VEYXRhPWUuZ2V0SW1hZ2VEYXRhKDAsMCxpLG4pfWNhdGNoKGUpe3RoaXMuaW1hZ2VEYXRhPW51bGx9dGhpcy5wcm9wcy5nZXRJbWFnZURhdGEodGhpcy5pbWFnZURhdGEpfX0sdH0oaSgxMCkpO3QuQmdJbWFnZT1zfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsaSl7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9aX0pfX0oKTt0LkRlZmVycmVkPW59LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiB0LnB1c2goJzwhRE9DVFlQRSBodG1sPjxodG1sIGxhbmc9ImVuIj48aGVhZD48bWV0YSBjaGFyc2V0PSJVVEYtOCI+PGJhc2UgaHJlZj0iJyxlLmJhc2VVUkwsJyIgdGFyZ2V0PSJfYmxhbmsiLz48L2hlYWQ+PGJvZHk+JyksZS51cmw/dC5wdXNoKCc8c2NyaXB0IG5vbmNlPSInLGUubm9uY2UsJyI+d2luZG93LmxvY2F0aW9uID0gIicsZS51cmwsJyI7PFwvc2NyaXB0PicpOnQucHVzaCgiIixlLmh0bWwsIiIpLHQucHVzaCgiPC9ib2R5PjwvaHRtbD4iKSx0LmpvaW4oIiIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQucHVzaCgiLiIsZS5pZCwiIC5ydGItYmxvY2t7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOmF1dG87ZGlzcGxheTotd2Via2l0LWZsZXg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1hbGlnbi1pdGVtczpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW59LiIsZS5pZCwiIC5ydGItYmxvY2tfX3BhcmFuamEtYmcsLiIsZS5pZCwiIC5ydGItYmxvY2tfX3BhcmFuamEtaW1hZ2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25lfS4iLGUuaWQsIiAucnRiLWJsb2NrX19jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyfS4iLGUuaWQsIiAucnRiLWJsb2NrX19ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS4iLGUuaWQsIiAucnRiLWJsb2NrX19hZHR1bmV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt6LWluZGV4OjIwfS4iLGUuaWQsIiAucnRiLWJsb2NrX19mZWVkYmFja3tib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym94LXNpemluZzpib3JkZXItYm94fS4iLGUuaWQsIiAucnRiLWJsb2NrX2ludGVyc3RpdGlhbHttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LiIsZS5pZCwiIC5ydGItYmxvY2tfaW50ZXJzdGl0aWFsIC5ydGItYmxvY2tfX3BhcmFuamEtYmcsLiIsZS5pZCwiIC5ydGItYmxvY2tfaW50ZXJzdGl0aWFsIC5ydGItYmxvY2tfX3BhcmFuamEtaW1hZ2V7ZGlzcGxheTpibG9ja30uIixlLmlkLCIgLnJ0Yi1ibG9ja19pbnRlcnN0aXRpYWwgLnJ0Yi1ibG9ja19fcGFyYW5qYS1pbWFnZXstd2Via2l0LWZpbHRlcjpibHVyKDEwcHgpIHNhdHVyYXRlKDApIGNvbnRyYXN0KDQwMCUpO2ZpbHRlcjpibHVyKDEwcHgpIHNhdHVyYXRlKDApIGNvbnRyYXN0KDQwMCUpfS4iLGUuaWQsIiAucnRiLWJsb2NrX2ludGVyc3RpdGlhbCAucnRiLWJsb2NrX19wYXJhbmphLWJne2JhY2tncm91bmQtY29sb3I6cmdiYSgzOCwzOCwzOCwuOSl9LiIsZS5pZCwiIC5ydGItYmxvY2tfaG9yaXpvbnRhbC1hbGlnbl9mYWxzZXstd2Via2l0LWp1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0Oy1tcy1mbGV4LXBhY2s6c3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LiIsZS5pZCwiIC5ydGItYmxvY2tfaG9uZXlwb3RfaW52aXNpYmxlLC4iLGUuaWQsIiAucnRiLWJsb2NrX2hvbmV5cG90X29uZS1waXhlbHt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LiIsZS5pZCwiIC5ydGItYmxvY2tfaG9uZXlwb3Rfb25lLXBpeGVse21heC13aWR0aDoxcHg7bWF4LWhlaWdodDoxcHh9IiksdC5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSJhZG1ldHJpY2EiLG89WyJtb2F0IiwiYWRsb294Iiwid2Vib3JhbWEiXTt0Lm1lYXN1cmVCbG9jaz1mdW5jdGlvbihlKXtpKDUpLmZvckVhY2goaSg0NikuZ2V0T2JqZWN0S2V5cyhlLmNvbmZpZyksZnVuY3Rpb24odCl7dmFyIHI7dD09PW4/aSg3MzEpLmFkbWV0cmljYShlLmNvbnRhaW5lcixlLmNvbmZpZ1t0XSk6KHI9dCxpKDIzKS5pbmRleE9mKG8scik+LTE/aSg3MzYpLmxvYWRNZWFzdXJlcih0LGUubm9uY2UpLnRoZW4oZnVuY3Rpb24oaSl7aShlLmNvbnRhaW5lcixlLmNvbmZpZ1t0XSl9KTppKDE1OSkubG9nRXJyb3IoaSgxNTkpLldST05HX1ZFUklGSUVSX05BTUUsdCkpfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmFkbWV0cmljYT1mdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlKXt2YXIgdD1pKDQ2KS5nZXRPYmplY3RLZXlzKGUpLG49aSgyMzIpLmRpZmZlcmVuY2UoWyJjYW1wYWlnbklkIiwicGxhY2VtZW50SWQiLCJjcmVhdGl2ZUlkIiwic2Vzc2lvbklkIl0sdCk7cmV0dXJue2lzVmFsaWQ6MD09PW4ubGVuZ3RoLGZpZWxkczpufX0odCkuaXNWYWxpZD9pKDE1OSkubG9nRXJyb3IoaSgxNTkpLkVNUFRZX0FNQ19QQVJBTUVURVIsdCk6bmV3KGkoNzMyKS5BZG1ldHJpY2FCYW5uZXIpKHtjYW1wYWlnbklkOlN0cmluZyh0LmNhbXBhaWduSWQpLHBsYWNlbWVudElkOlN0cmluZyh0LnBsYWNlbWVudElkKSxjcmVhdGl2ZUlkOlN0cmluZyh0LmNyZWF0aXZlSWQpLHNlc3Npb25JZDpTdHJpbmcodC5zZXNzaW9uSWQpLGNyaXRlcmlhOmkoOTcpLlZJU0lCSUxJVFlfQ1JJVEVSSUEuTVJDfSxlKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkVWRU5UUz17SU1QUkVTU0lPTjoiaW1wcmVzc2lvbiIsVU5NRUFTVVJBQkxFOiJ1bm1lYXN1cmFibGUiLFJFTkRFUjoicmVuZGVyIn07dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsbil7dmFyIG89dGhpczt0aGlzLmNvbmZpZz1lO3ZhciByPWkoNzMzKS5nZXROb2RlKG4pO2lmKCFyKXRocm93IG5ldyBFcnJvcigiW0FNQ10gcmVuZGVyVG8gc2hvdWxkIGJlIHNwZWNpZmllZCIpO3RoaXMucmVuZGVyTm9kZT1yLHRoaXMuc2VuZEV2ZW50KHQuRVZFTlRTLlJFTkRFUiksdGhpcy52Yz1pKDczNCkuY3JlYXRlVmlzaWJpbGl0eUNvbmZpcm1lcih7ZWxlbWVudDpyLG9uQ29uZmlybTpmdW5jdGlvbigpe3JldHVybiBvLnNlbmRFdmVudCh0LkVWRU5UUy5JTVBSRVNTSU9OKX0sb25WaXNpYmlsaXR5Q2hhbmdlSGFuZGxlcjppKDEzKS5ub29wLGNyaXRlcmlhOnRoaXMuY29uZmlnLmNyaXRlcmlhfSksbnVsbD09PXRoaXMudmMmJnRoaXMuc2VuZEV2ZW50KHQuRVZFTlRTLlVOTUVBU1VSQUJMRSl9cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnZjJiZ0aGlzLnZjLnN0b3AoITApfSxlLnByb3RvdHlwZS5zZW5kRXZlbnQ9ZnVuY3Rpb24oZSl7aSg3MzUpLnNlbmRUcmFja2VyKG4obih7fSx0aGlzLmdldFRyYWNrZXJQYXJhbXMoKSkse2V2dF90OmV9KSl9LGUucHJvdG90eXBlLmdldFRyYWNrZXJQYXJhbXM9ZnVuY3Rpb24oKXt2YXIgZT17Y21uX2lkOnRoaXMuY29uZmlnLmNhbXBhaWduSWQscGx0X2lkOnRoaXMuY29uZmlnLnBsYWNlbWVudElkLGNydl9pZDp0aGlzLmNvbmZpZy5jcmVhdGl2ZUlkLGFkX3R5cGU6IkJBTk5FUiIsdnZfY3JpdDp0aGlzLmNvbmZpZy5jcml0ZXJpYSxjX2lkOnRoaXMuY29uZmlnLnNlc3Npb25JZCx0b3BfbG9jYXRpb246aSgyMTcpLmdldFRvcExvY2F0aW9uRGF0YShkb2N1bWVudCkubG9jYXRpb259O3JldHVybiBuKG4oe30sZSksdGhpcy5nZXREaXNwbGF5UGFyYW1zKCkpfSxlLnByb3RvdHlwZS5nZXREaXNwbGF5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIGU9aSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHRoaXMucmVuZGVyTm9kZSksdD1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJue2FkX3c6U3RyaW5nKHQpLGFkX2g6U3RyaW5nKG4pfX0sZX0oKTt0LkFkbWV0cmljYUJhbm5lcj1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoMTkpLmlzU3RyaW5nKGUpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpOmV9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVZpc2liaWxpdHlDb25maXJtZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoODcpLlZpc2liaWxpdHlDb25maXJtZXIuZmFjdG9yeShlLmVsZW1lbnQse2ZhY3Rvcnk6aSgxMjApLkdlbmVyYWxTdHJhdGVneS5mYWN0b3J5LGZhY3RvcnlPcHRpb25zOntwb3J0aW9uOmkoMzEyKS5nZXRQb3J0aW9uKGUuY3JpdGVyaWEsZS5lbGVtZW50KX0sZGVsYXk6aSgyMTApLmdldERlbGF5KGUuY3JpdGVyaWEpLHByZXZlbnRTdG9wOiEwLG9uVmlzaWJpbGl0eUNoYW5nZTplLm9uVmlzaWJpbGl0eUNoYW5nZUhhbmRsZXIsb25Db25maXJtOmUub25Db25maXJtfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iaHR0cHM6Ly9tYy5hZG1ldHJpY2EucnUvc2hvdyI7dC5zZW5kVHJhY2tlcj1mdW5jdGlvbihlKXt2YXIgdD1pKDQyKS5mb3JtYXRRdWVyeVN0cmluZyhlKSxvPSIiK24rdDtpKDkzKS5yZXF1ZXN0KHt1cmw6byxtZXRob2Q6IkdFVCIsd2l0aENyZWRlbnRpYWxzOiEwfSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0xMjt0LmxvYWRNZWFzdXJlcj1mdW5jdGlvbihlLHQpe3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiJodHRwczovL3lhbmRleC5ydS90dXJiby9hYWIvcEdUSDk3MzY5L2M2NDc4NE90Ty1RdS9YWnJhZ0JHUEN1Y3VEaGgzcVdnSlJVTGNzYWhTNWhqXy1tXzdwNDBxUjE3M20tQUVSTnJCaFNLc3Z2UkFIUWFza1ZfR19DZVlENmJ4QlhiQjdOaFZ6em1lanZOd19QalZiUTBxMEZ2N1d0TnpIQUk2TTROYWJGdGRPVlY0eUtRTmxfdnhWTWFaUjlJRFBJM0dZdzVuZk9CZE5PMVZxRi1Ha2dSRmcwMEl4b19halZfVElEODVKZjlmLUZNTFdjcWhnczRTMkZCZ2VTNzUzWnEyMlNtVjNZVDZZeFYzS25aQlFCOV90SFBQZEdfalRxWjgxZWdkOURIMFJ0QWRHZVVlZVN4OVFmUE9DS1lzRFFxaEtObll3VEVkQVd0ekUtdmN5TXpLZDJ0WWQxNTJtNEVGUm9zMUFLSy1ibVlRVDBlZEk3MTFmb2ZiTGVkQWRQVGhfRW4xRE1rdlQzRlFqc3JVWFF4SW9PcktTdUh6SHJMN2tkRnJfU2t0eWpmNm1lZHVSNHVENUNiN0I0SmlQODIwd3c2V2Z6TS1sSXozR2Y2bHMwU1hjNzc2ZFV6S19MeVRzcHpidGl4TW1qR0p1THVBZ04yakd0QUNDUS1MX1BoSEtGcW5mUFo2STdjVnlUWERjeF9lRnVIX2hVNnhYeGUteGJuUGR3RW1Sc1BNcWdjTnFneGY4ZkYtS1FVUDctcWlTMHNaVTZKLUlmcXp3N2tQcXcwNVJUc285ZDRrR0VHM2RJbW5BZUJkM3FkaDduVnUwZzFFcmZmNkxLVHdkMGNSbnZoWGJZcXR2M0ZTRE10VmZGNnJ3c3M2MjJBel9BSUtvdExvWENuOEdCV1ptZmZQeEZpajVwZUk5Q09nZnMyWEkxOFZ2NklNeGJ6MkNPOVUweWRtTVc5SWR3MEkzcjhTOHA2NHhSMHV5VU5ieWl0eW93NUJTd016bXAyYVhOdTNhS24zbjRjN0VDVFhDNmJ4b0w3T0pUTjg5aTJ4ZkJUdXhSdmR0cENVaDdFUENMUWQyUDlzNDVOZWlpZlB6Qm94NjdzNE1ZTGVZTWp5UUppZTZYNXFOaWtiaFdfbHFtSkcxeGlWTWpGUG5jUmpQMFJNMEVfRXJRUjdfTFVDdDBZeDNTajNuU3J2Yk5OalRKbUhqajVhTVdsTDJoSWhINEFwTTZMcDdIb2R1SmI3aW1kUDl0cURwN1RadFFPeVh6MzNFdzhsYlhKUDllMlZpWl9Wc1NWSHNSMVl0QXhZelkxenNVMExWeTd1Q3JFS2lBa3d3TDhnQzNDVHFaNWFIeXQxSS8iK24rIi9tZWRpYS8iK2UrIi5qcyJ9KGUpLHI9aSgxMikuZ2V0WWEoKTtpZihyLm1lYXN1cmVycyYmci5tZWFzdXJlcnNbZV0pcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3Qoci5tZWFzdXJlcnNbZV0pfSk7dmFyIGE9TnVtYmVyKG5ldyBEYXRlKTtyZXR1cm4gaSgxNTApLnNlbmRUb1NvbG9tb24oe2V2ZW50TmFtZToibG9hZF9tZWFzdXJlcl9zdGFydCIsZGF0YTp7bWVhc3VyZXI6ZX19LCEwKSxuZXcgUHJvbWlzZShmdW5jdGlvbihuKXtpKDEzNykubG9hZEN1c3RvbVNjcmlwdCh7d2luOndpbmRvdyxzcmM6byxub25jZTp0LG9uTG9hZDpmdW5jdGlvbigpe2koMTUwKS5zZW5kVG9Tb2xvbW9uKHtldmVudE5hbWU6ImxvYWRfbWVhc3VyZXJfZW5kIixkYXRhOnttZWFzdXJlcjplLHRpbWU6TnVtYmVyKG5ldyBEYXRlKS1hfX0sITApLG4oci5tZWFzdXJlcnNbZV0pfSxoYXNDb3JzOiExfSl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucHJvZHVjdHM9e0RpcmVjdDoiRCIsSW50ZXJuYWw6IkkiLElucGFnZToiVkkiLEZ1bGxzY3JlZW46IlZGIixQcmVtaXVtOiJQIixTdHJpcGU6IlMiLERpc3RyaWJ1dGlvbjoiWSIsUnRiOiJSIn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG4sbz0obj1pKDE1MSkpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTt2YXIgcj1pKDEyNikucHJvdG90eXBlLnJlbmRlcixhPWkoMTI2KS5wcm90b3R5cGUucmVuZGVyRGlyZWN0OygwLGkoMTIpLnNldEdsb2JhbFZhcmlhYmxlKSgiX19jb25maXJtQmxvY2tzIix7fSk7dmFyIHM9KDAsaSgzMSkub25jZSkoZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDtyZXR1cm4oaSg3ODkpLmlzQ2hyb21lfHxpKDc5MCkuaXNZYUJyb3dzZXIpJiYodD1uZXcoaSg3OTEpLkltZ0hpZGVyKShlKSkuc3RhcnRXYXRjaGluZygpLHR9KTtpKDEyNikucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1pKDE1KS5nZXRSZW5kZXJJZChlKSxuPSgwLGkoMTIpLmdldEdsb2JhbFZhcmlhYmxlKSgiX19jb25maXJtQmxvY2tzIik7aWYoIW5bdF0pe3ZhciBhPXthY3Rpb246aSg0OSkuRVZFTlRTLlRSWV9UT19MT0FELGJsb2NrSWQ6ZS5ibG9ja0lkLHJlbmRlclRvOmUucmVuZGVyVG99OygwLG9bImRlZmF1bHQiXSkoe2V2ZW50OmkoNDkpLkVWRU5UUy5CTE9DS19DT05GSVJNQVRJT04sZGF0YTphfSl9blt0XT0hMSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmhpZGVyPXMoZS5ub25jZSl9LGkoMTI2KS5wcm90b3R5cGUucmVuZGVyRGlyZWN0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17YWN0aW9uOmkoNDkpLkVWRU5UUy5UUllfVE9fTE9BRCxwYWdlSWQ6ZSxyZW5kZXJUbzp0LGJsb2NrTmFtZTpmdW5jdGlvbihlKXt2YXIgdD0iIjtlJiZlLm5hbWU/dD1lLm5hbWU6ZSYmZS50eXBlJiYodD1lLnR5cGUpO3JldHVybiB0fShuKSxzdGF0SWQ6bj9uLnN0YXRfaWQ6IiJ9OygwLG9bImRlZmF1bHQiXSkoe2V2ZW50OmkoNDkpLkVWRU5UUy5PTERfQkxPQ0tfQ09ORklSTUFUSU9OLGRhdGE6cn0pO3ZhciBzPWkoMTUpLmdldFJlbmRlcklkKHtibG9ja0lkOiJELSIrZSsiLSIrKDAsaSg3OTIpLmdlbmVyYXRlSW1wSWQpKHQpLHJlbmRlclRvOnQscGFnZU51bWJlcjpuWyJwYWdlX251bWJlciJdfSk7KDAsaSgxMikuZ2V0R2xvYmFsVmFyaWFibGUpKCJfX2NvbmZpcm1CbG9ja3MiKVtzXT0hMCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMCkudGhlbihmdW5jdGlvbigpe2UoaSg4NTUpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0QWRVc2FnZVN0b3JhZ2VWYXJzPWZ1bmN0aW9uKCl7aWYoIWkoMTIpLmdldEdsb2JhbFZhcmlhYmxlKCJhZFVzYWdlU3RvcmFnZVZhcnMiKSl7dmFyIGU9e2FkczpuZXcoaSgzNTIpLkFkTGlzdCksYWxsQWRzOmkoMTYwKS5pc1NraXBUb2tlblRlc3RFbmFibGVkKCk/W106bmV3KGkoMzUyKS5BZExpc3QpLGFkRmlsdGVyRGF0YTpuZXcoaSg3NDEpLkFkRmlsdGVyRGF0YSl9O2koMTIpLnNldEdsb2JhbFZhcmlhYmxlKCJhZFVzYWdlU3RvcmFnZVZhcnMiLGUpfXJldHVybiBpKDEyKS5nZXRHbG9iYWxWYXJpYWJsZSgiYWRVc2FnZVN0b3JhZ2VWYXJzIil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5maWx0ZXJEYXRhPXthd2FwczoiIix5YWJzOltdfX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0QWRGaWx0ZXJEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyRGF0YX0sZS5wcm90b3R5cGUuc2V0RW1wdHlBZEZpbHRlcj1mdW5jdGlvbigpe3RoaXMuZmlsdGVyRGF0YT17YXdhcHM6IiIseWFiczpbXX19LGUucHJvdG90eXBlLnNldEFkRmlsdGVyRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBpO3RoaXMuZmlsdGVyRGF0YT1uKG4oe30sdGhpcy5maWx0ZXJEYXRhKSwoKGk9e30pW2VdPXQsaSkpfSxlLnByb3RvdHlwZS5nZXRFbXB0eUFkRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJue2F3YXBzOiIiLHlhYnM6W119fSxlfSgpO3QuQWRGaWx0ZXJEYXRhPW99LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgaT1bXSxuPXt9LG89MCxyPWU7bzxyLmxlbmd0aDtvKyspe3ZhciBhPXJbb107IW5bYS5hZElkXSYmdChhKSYmKGkucHVzaChhLmFkSWQpLG5bYS5hZElkXT0hMCl9cmV0dXJuIGl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiAwIT0oZS50b3B8ZS5ib3R0b218ZS5yaWdodHxlLmxlZnQpfTt0LmdldFN1cnJvdW5kaW5nQWRzPWZ1bmN0aW9uKGUsdCxyLGEpe3ZvaWQgMD09PWEmJihhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSk7dmFyIHM9aSgxNDUpLmdldFdpbmRvd1NpemUoKS5oZWlnaHQqdDtpZighcilyZXR1cm4gbihlLGZ1bmN0aW9uKGUpe3JldHVybiEwfSk7dmFyIGw9aSgxNDQpLmdldEVsZW1lbnRCeUlkKHIucmVuZGVyVG8pLGM9bCYmaSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGwpO2lmKCFjfHwhbyhjKSlyZXR1cm4gbihlLGZ1bmN0aW9uKGUpe3JldHVybiBhKHIucGFnZU51bWJlcixlLnBhZ2VOdW1iZXIpfSk7dmFyIHU9Yy50b3AtcyxkPWMuYm90dG9tK3M7cmV0dXJuIG4oZSxmdW5jdGlvbihlKXtpZighYShyLnBhZ2VOdW1iZXIsZS5wYWdlTnVtYmVyKSlyZXR1cm4hMTt2YXIgdD1pKDE0NCkuZ2V0RWxlbWVudEJ5SWQoZS5yZW5kZXJUbyk7aWYoIXQpcmV0dXJuITE7dmFyIG49aSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHQpO3JldHVybiBuLnRvcDxkJiZuLmJvdHRvbT51fHwhbyhuKX0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5wYXJzZUNvbmZpZz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShfX1VBQVNfQ0ZHX18pfWNhdGNoKGUpe3JldHVybnt0ZXN0SWRzOiIiLGZsYWdzOnt9fX19LHQuZ2V0VWFhc0NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBpKDMxKS5vbmNlKHQucGFyc2VDb25maWcpKCl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1pKDExKS5jb25maWcuZXh0dWlkQ29va2llczt0LmdldENvb2tpZUlkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciB0PWkoMTcyKS5nZXRDb29raWUoZG9jdW1lbnQsbltlXSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0fXJldHVybiIifX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0xvbmdVcmxzU3VwcG9ydGVkPWkoMjk2KS5nZXRJc0xvbmdVcmxTdXBwb3J0ZWQoKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49MDt0LmdldExheW91dENvbmZpZ1BhcmFtZXRlcj1mdW5jdGlvbihlKXtpZihlLmxheW91dENvbmZpZyl7ZS5sYXlvdXRDb25maWcuc2V0KCJyZXFfbm8iLG4rKyk7dmFyIHQ9ZS5sYXlvdXRDb25maWcudG9TdHJpbmcoKTtpZih0KXJldHVybnsibGF5b3V0LWNvbmZpZyI6dH19cmV0dXJue319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuLG89aSg3NDgpLmdyYWI7bj1mdW5jdGlvbihlLHQsbixyKXsoMCxpKDc0OSkuY2FuVXNlR3JhYikod2luZG93LHIpP24obyhlLHQpKTpuKCIiKX0sZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPSJ5YW5kZXgucnUgeWFuZGV4LmNvbSB5YW5kZXgudWEgeWFuZGV4LmJ5IHlhbmRleC5reiB5YW5kZXguY29tLnRyIjtmdW5jdGlvbiBvKGUsdCl7dmFyIG89d2luZG93LGE9by5kb2N1bWVudDtpZih0KXt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NhdGlvbi5ob3N0fShhKTtpZigoIiAiK24rIiAiKS5pbmRleE9mKCIgIitzKyIgIik+LTEpcmV0dXJuIHR9dmFyIGw9cihlLGEpO2lmKCJ0XG4iPT09bCYmby50b3AhPT1vLnNlbGYpdHJ5e2w9cihlLG8ucGFyZW50LmRvY3VtZW50KX1jYXRjaChlKXt9cmV0dXJuIGkoMjkpLmVuY29kZShsLGUpfWZ1bmN0aW9uIHIoZSx0KXt2YXIgaT1bXSxuPTA7aS5wdXNoKCJ0IisodC50aXRsZXx8IiIpKSxuKz1pWzBdLmxlbmd0aDtmb3IodmFyIG89MTtvPDQmJm48ZTtvKyspZm9yKHZhciByPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImgiK28pLHM9ci5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWEocltsXSk7bis9Yy5sZW5ndGgsaS5wdXNoKCIiK28rYyl9cmV0dXJuIGkuam9pbigiXG4iKSsiXG4ifWZ1bmN0aW9uIGEoZSl7dmFyIHQ9W10saT0iIjtpZighZSlyZXR1cm4gaTtmb3IodC5wdXNoKGUpO3QubGVuZ3RoPjA7KXtpZigzPT09KGU9dC5wb3AoKSkubm9kZVR5cGUpaSs9ZS5ub2RlVmFsdWUrIiAiO2Vsc2UgaWYoZS5jaGlsZE5vZGVzJiZlLmNoaWxkTm9kZXMubGVuZ3RoPjApZm9yKHZhciBuPWUuY2hpbGROb2RlcyxvPW4ubGVuZ3RoLTE7bz49MDtvLS0pdC5wdXNoKG5bb10pfXJldHVybiBpLnJlcGxhY2UoL1xzKy9nLCIgIil9dC5ncmFiPW8sdC5vbGRHcmFiPWZ1bmN0aW9uKGUsdCl7dmFyIG49byhlLHQpO3JldHVybiBpKDI5KS5kZWNvZGUobil9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNhblVzZUdyYWI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4haSgyMSkuaXNIb3N0SW5MaXN0KGUsWyJtYWlsUnVBbGwiXSkmJiFpKDc1MCkuaXNQYWdlSWRCbGFja2xpc3RlZCh0KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ3JhYlBhZ2VJZEJsYWNrbGlzdD1bIjE1OTI5NCIsIjQxOTAzNiJdLHQuaXNQYWdlSWRCbGFja2xpc3RlZD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJnQuZ3JhYlBhZ2VJZEJsYWNrbGlzdC5pbmRleE9mKGUpPj0wfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0lFPWkoMjk3KS5nZXRJc0lFKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNFZGdlPWkoMjY2KS5nZXRJc0VkZ2UoKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgaT1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksbikmJihlW25dPWlbbl0pfXJldHVybiBlfSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhLHMsbD0oMCxpKDQ4KS5nZXRSYW5kb21JbnQpKDFlMTIsMmUxMiksYz0oMCxpKDEpLnByb3RlY3QpKCJKU09OUCBvbkxvYWRFcnJvciIsZnVuY3Rpb24oKXtZYVtsXSYmKFlhW2xdKCJ7fSIpLFlhW2xdPWkoMTMpLm5vb3ApfSksdT1pKDEpLnByb3RlY3Quc2V0VGltZW91dChjLDE1ZTMpO1lhW2xdPWZ1bmN0aW9uKGUpe3M9ITAsd2luZG93LmNsZWFyVGltZW91dCh1KTt2YXIgdD17Y29tbW9uOnt9fSxjPW51bGw7dHJ5e2M9Im9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpvKGUpKT9lOkpTT04ucGFyc2UoZSl9Y2F0Y2godCl7aSg5KS5sb2dnZXIuZXJyb3Ioe25hbWU6dC5uYW1lLG1lc3NhZ2U6dC5tZXNzYWdlKyI6OiIrZSxzdGFjazp0LnN0YWNrfSwiTmF0aXZlSlNPTlBhcnNlXyIrdC5uYW1lKX10cnl7ZGVsZXRlIFlhW2xdLGN8fChjPW5ldyBGdW5jdGlvbigicmV0dXJuICIrZSkoKSksdD1uKHt9LHQsYyl9Y2F0Y2godCl7aSg5KS5sb2dnZXIuZXJyb3Ioe25hbWU6dC5uYW1lLG1lc3NhZ2U6dC5tZXNzYWdlKyI6OiIrZSxzdGFjazp0LnN0YWNrfSwiSlNPTlBQYXJzZV8iK3QubmFtZSl9KDAsaSgxKS5wcm90ZWN0KSgiSlNPTlAgY2FsbGJhY2siLGZ1bmN0aW9uKCl7cih0KSwoMCxpKDg0KS5zZW5kUmVzb3VyY2VJbmZvKSgpLGEmJigwLGkoNjMpLnJlbW92ZU5vZGVGcm9tUGFyZW50KShhKX0pKCl9LGUuYXBwZW5kUGFyYW1zKCJjYWxsYmFjaz1ZYVsiK2wrIl0iKTt2YXIgZD17c3JjOmUuZ2V0VXJsKCksaGFzQ29yczohMSx3aW46d2luZG93fTsoYT0oMCxpKDEzNykubG9hZEN1c3RvbVNjcmlwdCkoZCkpJiYoYS5vbmVycm9yPWMsYS5vbmxvYWQ9ZnVuY3Rpb24oKXtzfHwod2luZG93LmNsZWFyVGltZW91dCh1KSx1PWkoMSkucHJvdGVjdC5zZXRUaW1lb3V0KGMsMWUzKSl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQsaT0xLG49YXJndW1lbnRzLmxlbmd0aDtpPG47aSsrKWZvcih2YXIgbyBpbiB0PWFyZ3VtZW50c1tpXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1pKDc1NSkucGF0aFNocmlua2luZyxyPWkoNDIpLmdldFBhcmFtc0Zyb21VcmwsYT1pKDQyKS5wYXJzZVVybCxzPVsyMDBdLGw9MjAwLGM9MjAwO3QuTkFNRVNQQUNFPSJsb2FkX2RhdGEiLHQuRVJST1JfQ09ERT17WEhSX0VSUk9SOiJ4aHJfZXJyb3IiLEVNUFRZX0FOU1dFUjoiZW1wdHlfYW5zd2VyIixUT09fU0hPUlRfQU5TV0VSOiJ0b29fc2hvcnRfYW5zd2VyIixCQURfQU5TV0VSOiJiYWRfYW5zd2VyIixUT09fTUFOWV9BVFRFTVBUUzoidG9vX21hbnlfYXR0ZW1wdHMifSx0LlNVQ0NFU1NfQ09ERT17U1VDQ0VTUzoic3VjY2VzcyIsU1VDQ0VTU19BRlRFUl9GQUlMOiJzdWNjZXNzX2FmdGVyX2ZhaWwifTt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHM9dGhpczt0aGlzLmxvYWQ9ZnVuY3Rpb24oKXtzLnVybD1zLmNvbmZpZy51cmwuY2xvbmUoKSxzLmNhbGxiYWNrSWQ9aSg0OCkuZ2V0UmFuZG9tSW50KDFlMTIsMWUxMyksMTAxNjQ9PT1pKDUzKS5nZXRDb2RlVmVyc2lvbigpJiZzLnVybC5nZXRVcmwoKS5pbmRleE9mKCIvbWV0YS8iKT4tMT9zLnVybC5hcHBlbmRQYXJhbXMoe2NhbGxiYWNrOiJqc29uIn0pOnMudXJsLmFwcGVuZFBhcmFtcyh7Y2FsbGJhY2s6IllhWyIrcy5jYWxsYmFja0lkKyJdIn0pLHMueGhyU3RhdHVzZXMmJnMueGhyU3RhdHVzZXMubGVuZ3RoJiYocy51cmwuYXBwZW5kUGFyYW1zKHsiWC1ZYW5kZXgtUmV0cnkiOnMueGhyU3RhdHVzZXMubGVuZ3RofSkscy51cmwuYXBwZW5kUGFyYW1zKHsiWC1ZYW5kZXgtQmFsYW5jZXItUmV0cnkiOnMueGhyU3RhdHVzZXMubGVuZ3RofSkpO3ZhciBlPW4oeyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSxzLmNvbmZpZy5oZWFkZXJzKSx0PXMudXJsLmdldFJhd1VybCgpLGw9cih0KSxjPW8obCxhKHQpLm9yaWdpbmFsUGF0aCk7ZT1uKG4oe30sZSksYy5oZWFkZXJzKSxzLnVybD1uZXcoaSgyNCkuVXJsKSh7aG9zdDpjLnVybH0pO3ZhciB1PXMudXJsLmdldFVybCgpO2koMTM0KS5yZXF1ZXN0KHt1cmw6dSxtZXRob2Q6ImdldCIscmV0cmllczowLGhlYWRlcnM6ZSxvblN1Y2Nlc3M6cy5zdWNjZXNzSGFuZGxlcixvbkVycm9yOnMuZXJyb3JIYW5kbGVyfSl9LHRoaXMuc3VjY2Vzc0hhbmRsZXI9ZnVuY3Rpb24oZSl7dmFyIG89ZS5yZXNwb25zZXx8ZS5yZXNwb25zZVRleHQ7dmFyIHI9aSg3NikuZ2V0RW1wdHlSZXNwb25zZSgpO2lmKGkoMTkpLmlzU3RyaW5nKG8pKXt0cnl7cj1pKDc1NikucGFyc2VTdHJpbmcobyxzLmNhbGxiYWNrSWQscy5jb25maWcubm9uY2UpfWNhdGNoKGUpe3JldHVybiBzLnNlbmRFcnJvcih0LkVSUk9SX0NPREUuQkFEX0FOU1dFUisiXyIrZS5uYW1lLGkoMjkpLmVuY29kZShvKSxlLm1lc3NhZ2UpLHZvaWQgaSgxKS5wcm90ZWN0KCJCYWQgcmVzcG9uc2UiLGZ1bmN0aW9uKCl7cy5jb25maWcuY2FsbGJhY2soaSg3NikuZ2V0RW1wdHlSZXNwb25zZSgpKX0pKCl9aWYoci5jb21tb24mJnIuY29tbW9uLmNhblJldHJ5KXJldHVybiB2b2lkIHMucmV0cnlMb2FkaW5nKGwpO2lmKG8ubGVuZ3RoPGMpcmV0dXJuIGkoNDApLmlzUGVyY2VudCgxKSYmcy5zZW5kRXJyb3IodC5FUlJPUl9DT0RFLlRPT19TSE9SVF9BTlNXRVIsbyksdm9pZCBpKDEpLnByb3RlY3QoIlNob3J0IHJlc3BvbnNlIixmdW5jdGlvbigpe3MuY29uZmlnLmNhbGxiYWNrKGkoNzYpLmdldEVtcHR5UmVzcG9uc2UoKSl9KSgpfWVsc2UgaSgyNykuaXNPYmplY3QobykmJihyPW4obih7fSxyKSxvKSk7cy5zZW5kU3VjY2VzcygpLGkoMSkucHJvdGVjdCgiSlNPTlAgY2FsbGJhY2siLGZ1bmN0aW9uKCl7cy5jb25maWcuY2FsbGJhY2socil9KSgpLGkoODQpLnNlbmRSZXNvdXJjZUluZm8oKX0sdGhpcy5lcnJvckhhbmRsZXI9ZnVuY3Rpb24oZSxuKXt2YXIgbz0yMDQ9PT1uLnN0YXR1cz90LkVSUk9SX0NPREUuRU1QVFlfQU5TV0VSOnQuRVJST1JfQ09ERS5YSFJfRVJST1I7cy54aHJTdGF0dXNlcy5wdXNoKG4uc3RhdHVzKSxzLnNlbmRFcnJvcihvLG4ucmVzcG9uc2UpLGkoMSkucHJvdGVjdCgiQWpheCBlcnJvciIsZnVuY3Rpb24oKXtzLmNvbmZpZy5jYWxsYmFjayhpKDc2KS5nZXRFbXB0eVJlc3BvbnNlKCkpfSkoKX0sdGhpcy5jb25maWc9ZSx0aGlzLnhoclN0YXR1c2VzPVtdfXJldHVybiBlLnByb3RvdHlwZS5yZXRyeUxvYWRpbmc9ZnVuY3Rpb24oZSl7dmFyIG49dGhpczt0aGlzLnhoclN0YXR1c2VzLnB1c2goZSk7dmFyIG89dGhpcy54aHJTdGF0dXNlcy5sZW5ndGg7bzw9cy5sZW5ndGg/c2V0VGltZW91dCh0aGlzLmxvYWQsc1tvLTFdKToodGhpcy5zZW5kRXJyb3IodC5FUlJPUl9DT0RFLlRPT19NQU5ZX0FUVEVNUFRTKSxpKDEpLnByb3RlY3QoIlRvbyBtYW55IGF0dGVtcHRzIixmdW5jdGlvbigpe24uY29uZmlnLmNhbGxiYWNrKGkoNzYpLmdldEVtcHR5UmVzcG9uc2UoKSl9KSgpKX0sZS5wcm90b3R5cGUuc2VuZEVycm9yPWZ1bmN0aW9uKGUsbixvKXt2YXIgcj1bZV07dGhpcy54aHJTdGF0dXNlcy5sZW5ndGgmJnIucHVzaChTdHJpbmcodGhpcy54aHJTdGF0dXNlc1t0aGlzLnhoclN0YXR1c2VzLmxlbmd0aC0xXSkpO3ZhciBhPXtuYW1lOnIuam9pbigiXyIpLHBhZ2VJZDp0aGlzLmNvbmZpZy5wYWdlSWQsaXNSZWZyZXNoOkJvb2xlYW4odGhpcy5jb25maWcuaXNSZWZyZXNoKSxzdGF0dXNlczp0aGlzLnhoclN0YXR1c2VzLHJlc3BvbnNlOm4sbWVzc2FnZTpvfTtpKDkpLmxvZ2dlci5sb2coYSx0Lk5BTUVTUEFDRSksZChhKX0sZS5wcm90b3R5cGUuc2VuZFN1Y2Nlc3M9ZnVuY3Rpb24oKXt2YXIgZT0wPT09dGhpcy54aHJTdGF0dXNlcy5sZW5ndGgsbj17bmFtZTplP3QuU1VDQ0VTU19DT0RFLlNVQ0NFU1M6dC5TVUNDRVNTX0NPREUuU1VDQ0VTU19BRlRFUl9GQUlMLHBhZ2VJZDp0aGlzLmNvbmZpZy5wYWdlSWQsaXNSZWZyZXNoOkJvb2xlYW4odGhpcy5jb25maWcuaXNSZWZyZXNoKSxzdGF0dXNlczp0aGlzLnhoclN0YXR1c2VzfTtpKDkpLmxvZ2dlci5sb2cobix0Lk5BTUVTUEFDRSksZXx8ZChuKX0sZX0oKTtmdW5jdGlvbiBkKGUpe3ZhciBuPSJbcGFnZS0iK2UucGFnZUlkKyJdW3JlZnJlc2gtIitlLmlzUmVmcmVzaCsiXVtzdGF0dXNlcy0oIitlLnN0YXR1c2VzKyIpXSI7ZS5yZXNwb25zZSYmKG4rPSJbcmVzcC0oIitlLnJlc3BvbnNlKyIpXSIpLGUubWVzc2FnZSYmKG4rPSJbbWVzc2FnZS0oIitlLm1lc3NhZ2UrIildIik7dmFyIG89bmV3IEVycm9yKG4pO28ubmFtZT1lLm5hbWUsaSg5KS5sb2dnZXIuZXJyb3Iobyx0Lk5BTUVTUEFDRSl9dC5BZExvYWRlcj11fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89WyJza2lwLXRva2VuIiwiZ3JhYiJdO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9aSg0MikuZ2V0UG9zdFByb3RvY29sSW5kZXgoZSksbj10K2Uuc3Vic3RyaW5nKHQpLmluZGV4T2YoIi8iKSxvPS0xPT09bj90K2Uuc3Vic3RyaW5nKHQpLmluZGV4T2YoIj8iKS0xOm47cmV0dXJuIE1hdGgubWF4KGUubGVuZ3RoLWkoMTEpLmNvbmZpZy5oaWRlTWV0YUFyZ3NIZWFkZXJNYXhTaXplLG8pfXQuZ2V0U3BsaXRJbmRleD1yLHQucGF0aFNocmlua2luZz1mdW5jdGlvbihlLHQpe3ZhciBhPXt9O2lmKCFpKDExKS5jb25maWcuaGlkZVVyaVBhdGhIZWFkZXJ8fCFpKDExKS5jb25maWcuaGlkZU1ldGFBcmdzSGVhZGVyTWF4U2l6ZXx8IWkoMTEpLmNvbmZpZy5oaWRlTWV0YUFyZ3NVcmxNYXhTaXplfHxpKDExKS5jb25maWcuaGlkZU1ldGFBcmdzSGVhZGVyTWF4U2l6ZTwwKXJldHVybntoZWFkZXJzOmEsdXJsOmkoNDIpLmFkZFBhcmFtc1RvVXJsKHQsZSx7b3ZlcnJpZGU6ITEsc2F2ZU9yaWdpbmFsUGF0aDohMH0pfTt2YXIgcz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXt9KTt2YXIgYSxzLGwsYyx1PW4oe30sdCksZD0wO2Rve2wmJihkZWxldGUgdVtvW2RdXSxkKyspLHM9cihhPWkoNDIpLmFkZFBhcmFtc1RvVXJsKGUsdSx7c2F2ZU9yaWdpbmFsUGF0aDohMH0pKSxsPWEuc3Vic3RyaW5nKHMpLGM9YS5zdWJzdHJpbmcoMCxzKX13aGlsZShkPG8ubGVuZ3RoJiYobC5sZW5ndGg+aSgxMSkuY29uZmlnLmhpZGVNZXRhQXJnc0hlYWRlck1heFNpemV8fGMubGVuZ3RoPmkoMTEpLmNvbmZpZy5oaWRlTWV0YUFyZ3NVcmxNYXhTaXplKSk7cmV0dXJue3Zpc2libGVVcmw6YyxoaWRkZW5Vcmw6bH19KHQsZSk7cmV0dXJuIGFbaSgxMSkuY29uZmlnLmhpZGVVcmlQYXRoSGVhZGVyXT1zLmhpZGRlblVybCx7aGVhZGVyczphLHVybDpzLnZpc2libGVVcmx9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspZm9yKHZhciBvIGluIHQ9YXJndW1lbnRzW2ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG8pJiYoZVtvXT10W29dKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gbyhlKXsiU3ludGF4RXJyb3IiPT09ZS5lcnJvci5uYW1lJiZlLnByZXZlbnREZWZhdWx0KCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucGFyc2VTdHJpbmc9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiJ7Ij09PWUuY2hhckF0KDApJiYifSI9PT1lLnNsaWNlKC0xKS5jaGFyQXQoMCk/ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PWkoNzIpLmdldE5hdGl2ZUpTT04od2luZG93KSxvPXQucGFyc2UoZSk7cmV0dXJuIG4obih7fSxpKDc2KS5nZXRFbXB0eVJlc3BvbnNlKCkpLG8pfWNhdGNoKGUpe3ZhciByPW5ldyBFcnJvcigiSW52YWxpZCBKU09OICgiK2UubWVzc2FnZSsiKSIpO3Rocm93IHIubmFtZT0iTmF0aXZlSlNPTlBhcnNlXyIrZS5uYW1lLHJ9fShlKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aSg3NikuZ2V0RW1wdHlSZXNwb25zZSgpO3RyeXtyZXR1cm4gaSg3NTcpLmlzSG9tZVBhZ2Uod2luZG93KXx8aSg3NTgpLmlzQ29sbGVjdGlvbnNQYWdlKCl8fGkoNzU5KS5pc1puYXRva2lQYWdlKHdpbmRvdyk/ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIHM9aSgxMykubm9vcDt0cnl7dmFyIGw9L1lhXFtcZCtdXCgnKC4rKSdcKSQvLmV4ZWModCksYz1sJiZsWzFdfHx0LHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLHUudGV4dD0iWWFbIityKyJdID0gZnVuY3Rpb24oKSB7IHJldHVybiAiK2MrIiB9Iix1LmFzeW5jPSExLEJvb2xlYW4oYSkmJnUuc2V0QXR0cmlidXRlKCJub25jZSIsYXx8IiIpO3ZhciBkPWkoMTcpLm9uKHdpbmRvdywiZXJyb3IiLG8se29wdGlvbnM6ITB9KTtkJiYocz1kLnVuKSxpKDgwKS5nZXRIZWFkKHdpbmRvdykuYXBwZW5kQ2hpbGQodSksZT1uKG4oe30sZSksWWFbcl0oKSl9ZmluYWxseXtkZWxldGUgWWFbcl0scygpfXJldHVybiBlfShhLGUsdCxyKTpmdW5jdGlvbihlLHQsbyl7dmFyIHI9aSg3NikuZ2V0RW1wdHlSZXNwb25zZSgpO3RyeXtZYVtvXT1mdW5jdGlvbihlKXtkZWxldGUgWWFbb107dmFyIHQ9bmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitlKSgpO3I9bihuKHt9LHIpLHQpfTt2YXIgYT1uZXcgRnVuY3Rpb24oInJldHVybiAiK3QpKCk7cmV0dXJuIGEmJihkZWxldGUgWWFbb10scj1uKG4oe30sciksYSkpLHJ9ZmluYWxseXtkZWxldGUgWWFbb119fSgwLGUsdCl9Y2F0Y2goZSl7ZGVsZXRlIFlhW3RdO3ZhciBzPW5ldyBFcnJvcigiSW52YWxpZCBKU09OUCAoIitlLm1lc3NhZ2UrIikiKTt0aHJvdyBzLm5hbWU9IkpTT05QUGFyc2VfIitlLm5hbWUsc319KGUsdCxyKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmlzSG9tZVBhZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1lLmxvY2F0aW9uLmhvc3RuYW1lLmluZGV4T2YoInlhbmRleCIpJiYib2JqZWN0Ij09PW4oZS5ob21lKSYmQm9vbGVhbihlLmhvbWVbImV4cG9ydCJdKX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNDb2xsZWN0aW9uc1BhZ2U9ZnVuY3Rpb24oKXt2YXIgZT1pKDEyKS5nZXRZYSgpO3JldHVybiBCb29sZWFuKGUuQ29sbGVjdGlvbnMpfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1puYXRva2lQYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKGUuWWEuWm5hdG9raSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldEdlb1NraW5FeHA9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFsZ0lkLG89ZS5hZGRyZXNzLHI9ZS5pbWFnZTtyZXR1cm4gbj09PWkoNzYxKS5BbGdJZC5HRU9CQU5ORVImJm8mJiIyNDB4NDAwIj09PXQmJnI/aSgyNikuaXNMb25nRXhwZXJpbWVudChpKDgpLmV4cGVyaW1lbnRJZHMuZ2VvU2tpbi5WMSk/MTppKDI2KS5pc0xvbmdFeHBlcmltZW50KGkoOCkuZXhwZXJpbWVudElkcy5nZW9Ta2luLlYyKT8yOmkoMjYpLmlzTG9uZ0V4cGVyaW1lbnQoaSg4KS5leHBlcmltZW50SWRzLmdlb1NraW4uVjMpPzM6MDowfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24oZSl7ZVsiR0VPQkFOTkVSIl09IjQ2In0odC5BbGdJZHx8KHQuQWxnSWQ9e30pKX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc0F1dGhXaWZpPWZ1bmN0aW9uKGUpe3JldHVybiBpKDIxKS5pc0hvc3RJbkxpc3QoZSxbImF1dGh3aWZpIl0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49WzAsMiwzLDQsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxOSwyMiwyMywyNCwyNywyOCwyOSwzMSwzMiwzMywzOCw0Miw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2Miw2Myw2NCw2NSw2Niw2OCw3MSw3Ml07dC5nZXRUaXRsZT1mdW5jdGlvbihlLG4sYSxzKXt2YXIgbD1pKDU4KS5NcmFpZEhlbHBlcnMuaXNBdmFpbGFibGUoKSxjPWkoMzApLmkxOG4oIkFEVkVSVElTTUVOVCIsYSk7cmV0dXJuIGkoMTY0KS5pc0N1cnJlbmN5VGl0bGUobikmJnQuaXNEZWZhdWx0VGl0bGUoZSkmJm8ocykmJiFyKCk/bjplJiYhbD9lOmN9O3ZhciBvPWZ1bmN0aW9uKGUpe3JldHVybiFpKDEzMykuaW5jbHVkZXMobixlKX07dC5pc0RlZmF1bHRUaXRsZT1mdW5jdGlvbihlKXtyZXR1cm4iXHUwNDJmXHUwNDNkXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDQxLlx1MDQxNFx1MDQzOFx1MDQ0MFx1MDQzNVx1MDQzYVx1MDQ0MiI9PT1lfTt2YXIgcj1mdW5jdGlvbigpe3JldHVybiEwfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC50cmFja0NsaWNrPWkoNzY1KS50cmFja0NsaWNrfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVRyYWNrQ2xpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UoITEsM2U0LGZ1bmN0aW9uKG4pe3QoaSgxNjEpLkNsaWNrUGl4ZWwuVFJBTlNJVElPTixuKSxlKCEwLDI0ZTQsZnVuY3Rpb24oZSl7dChpKDE2MSkuQ2xpY2tQaXhlbC5SRVRVUk4sZSl9KX0pfX0sdC50cmFja0NsaWNrPXQuY3JlYXRlVHJhY2tDbGljayhpKDc2Nikud2FpdFZpc2liaWxpdHkpfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVdhaXRWaXNpYmlsaXR5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sbyl7dmFyIHI9bmV3IERhdGUsYT1pKDE3KS5vbihkb2N1bWVudCxlLmNoYW5nZUV2ZW50TmFtZSxmdW5jdGlvbigpe2UuaXNIaWRkZW4oKSE9PXQmJihpKDE3KS51bihhKSxjbGVhclRpbWVvdXQocyksbyhOdW1iZXIobmV3IERhdGUpLU51bWJlcihyKSkpfSkscz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aSgxNykudW4oYSl9LG4pfX0sdC53YWl0VmlzaWJpbGl0eT10LmNyZWF0ZVdhaXRWaXNpYmlsaXR5KGkoMTQ4KSl9LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMCkudGhlbihmdW5jdGlvbigpe2UoaSg4NTYpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpLmUoMCkudGhlbihmdW5jdGlvbigpe2UoaSg4NTcpKX0uYmluZCh1bmRlZmluZWQsaSkpLmNhdGNoKGZ1bmN0aW9uKCl7dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2xvYmFsPXdpbmRvdyx0LllhPWkoMTIpLmdldFlhKCksdC5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlSW50KHQuWWEuY29kZVZlcil9LHQuZ2V0RXhwPWZ1bmN0aW9uKCl7cmV0dXJuIHQuWWEuX2V4cH0sdC5nZXRDb25maXJtVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIHQuWWEuY29uZmlybVVybH19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWkoMjEpLmlzSG9zdEluTGlzdCh3aW5kb3csaSgyMSkuZXhjbHVkZUhvc3RzKFsieWFuZGV4QWxsIiwidmsiLCJvayIsImF2aXRvIiwiZ2lzbWV0ZW8iXSxpKDIxKS50b3BQYXJ0bmVycykpLG89WzkzODMwLDkzNTExLDQ5Njg4LDkyNTUwLDEwNDIyMCwxMTMwMTEsMTI5NzQ0LDEzNzc0MCwxNDE3NjksMTQzMTU2LDE0NDIwNCw4NDM3NSw4Nzk0MCw5NzY5MywxMDE4MzMsMTI2MjkxXSxyPSExO3QuZGlzYWJsZVJ0YkluT2xkRGlyZWN0RXhwZXJpbWVudD1mdW5jdGlvbigpe3I9ITB9LHQuaXNSdGJJbk9sZERpcmVjdEV4cGVyaW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdCYmIXImJiFufSx0Lm5lZWRSdGJTaGFkb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIWZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG49InN0cmluZyI9PXR5cGVvZiB0P3BhcnNlSW50KHQpOnQsaSgxMzMpLmluY2x1ZGVzKGUsbil9KG8sZSl9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7dGhpcy5fYWR2TWFuYWdlcj1lLHRoaXMuX21hbmFnZXJzPXt9LHRoaXMuX3NldHRpbmdzQ2FjaGU9e30sdGhpcy5fcmVmcmVzaD0hMX1uLnByb3RvdHlwZT17cmVuZGVyOmZ1bmN0aW9uKGUsdCxuLG8peygwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkRpcmVjdFJlbmRlciksbyYmKHRoaXMuX3JlZnJlc2g9byk7dmFyIHI9dGhpcy5fZ2V0TWFuYWdlcihlKTtlLmZvcmNlZFN5bmNNb2RlfHxpKDc5KS5pc1NzU2tpcFRva2VuP3RoaXMuX3JlbmRlclN5bmMocixlLHQsbik6dGhpcy5fcmVuZGVyQXN5bmMocixlLHQsbiksaSgyNjIpLmhpdE9uY2UoZS5wYWdlSWQsZS5idW5kbGUpfSxfZ2V0TWFuYWdlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRNYW5hZ2VyS2V5KGUpO3JldHVybiB0IGluIHRoaXMuX21hbmFnZXJzfHwodGhpcy5fbWFuYWdlcnNbdF09bmV3KGkoMzU2KSkoITAse29uQWRBYnVzZWQ6dGhpcy5faGFuZGxlQWRBYnVzZWQuYmluZCh0aGlzKX0pKSx0aGlzLl9tYW5hZ2Vyc1t0XX0sX2dldE1hbmFnZXJLZXk6ZnVuY3Rpb24oZSl7dmFyIHQ9W2Uuc2VhcmNoUGFnZU51bWJlcnx8IiIsZS5zZWFyY2hUZXh0fHwiIl0uam9pbigiIyIpO3JldHVybiJjb21tb246IisoZS5ibG9ja0lkfHxlLnJlbmRlclRvKSsiIyIrdCsiIyIrKGUucGFnZU51bWJlcj9lLnBhZ2VOdW1iZXI6IiIpfSxnZXRCbG9ja3NUb1JlcmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGkoMCkuZm9yT3duKHRoaXMuX21hbmFnZXJzLGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QmxvY2tzVG9SZXJlbmRlcigpO2kubGVuZ3RoPjAmJihlPWUuY29uY2F0KGkpLHQucmVzZXRUaW1lb3V0KCkpfSksZX0sX3JlbmRlckFzeW5jOmZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBvPXRoaXM7dC5pc0luUXVldWU9ITAsdGhpcy5fYWR2TWFuYWdlci5xdWV1ZS5hZGQoZnVuY3Rpb24ocil7by5fbG9hZERhdGEoZSx0LGksbixyKX0pfSxfcmVuZGVyU3luYzpmdW5jdGlvbihlLHQsbixvKXt3aW5kb3cuZUs4YWtWdk9iM2VZY19pc19kaXNwbGF5ZWQ9ITAsdC5pc0luUXVldWU9ITEsdGhpcy5fbG9hZERhdGEoZSx0LG4sZnVuY3Rpb24oKXt3aW5kb3cuZUs4YWtWdk9iM2VZY19pc19kaXNwbGF5ZWQ9ITEsbygpfSxpKDEzKS5ub29wKX0sX2xvYWREYXRhOmZ1bmN0aW9uKGUsdCxuLG8scil7aWYodC5kYXRhKXJldHVybigwLGkoMTYpLnNhdmVCdW5kbGVUeXBlKSh0LmRhdGEpLHZvaWQgdGhpcy5fcGFyc2VEYXRhKHQuZGF0YSxlLHQsbixvLHIpO2lmKCFlLmRhdGFDYW5SZWxvYWQoKSYmInN0cmlwZSIhPT10LnByb2R1Y3QpcmV0dXJuKDAsaSgxNikuc2F2ZUJ1bmRsZVR5cGUpKHQuYnVuZGxlKSx2b2lkIHRoaXMuX3JlbmRlcihlLHQsbixvLHIpOygwLGkoMikubG9nUmVuZGVyTGFiZWwpKHQudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkxvYWRJbml0KTt2YXIgYT10aGlzLHM9aSgxNSkuZ2V0UmVuZGVySWQodCksbD0oMCxpKDYyKS5nZXRBZFVzYWdlU3RvcmFnZSkodCksYz1uZXcoaSgxMzUpLkRpcmVjdFRlc3R0YWcpKHthZGZveGV4cDp0LmFkZm94ZXhwfSksdT10aGlzLl9nZXRMYXlvdXRDb25maWcodCxuKTsoMCxpKDIpLnNldEJsb2NrRGF0YSkodC51bmlxdWVJZCx7aXNGaXJzdFNjcmVlbjpCb29sZWFuKHUpJiZ1LmdldElzRmlyc3RTY3JlZW4oKX0pLCgwLGkoNDEyKS5sb2FkRGlyZWN0KSh7dGVzdHRhZzpjLnRvU3RyaW5nKCkscGFnZUlkOnQucGFnZUlkLGJsb2NrSW1wSWQ6dC5ibG9ja0ltcElkLHNraXBCYW5uZXI6bC5nZXRTa2lwQmFubmVyKHQsZS5nZXRVc2VkSWRzKHMpKSxzc1NraXBUb2tlbkxlbmd0aDpsLnNzU2tpcFRva2VuTGVuZ3RoLHN0YXRJZDp0LnN0YXRJZCxwYXJ0bmVyU3RhdElkOnQucGFydG5lclN0YXRJZCxncmFiOnQuZ3JhYixzZWFyY2hUZXh0OnQuc2VhcmNoVGV4dCxzZWFyY2hQYWdlTnVtYmVyOnQuc2VhcmNoUGFnZU51bWJlcnx8MSxsYW5nOnQubGFuZyxnZW86dC5nZW8sZGlzYWJsZUhpZ2hsaWdodDp0LmRpc2FibGVIaWdobGlnaHQsZXh0UGFyYW1zOnQuZXh0UGFyYW1zLGxheW91dENvbmZpZzp1LGFkZGl0aW9uYWxCYW5uZXJzOigwLGkoNTQpLmdldEFkZGl0aW9uYWxCYW5uZXJzKSgpfHx0LmFkZGl0aW9uYWxCYW5uZXJzfHx0Lm9sZERpcmVjdFNldHRpbmdzJiZ0Lm9sZERpcmVjdFNldHRpbmdzLmFkZGl0aW9uYWxfYmFubmVyc3x8IiIsZXhwZXJpbWVudElkOigwLGkoMTg5KS5nZXRFeHBlcmltZW50SWQpKCl8fGkoNzkpLnNzU2tpcFRva2VuRXhwSWQscmVmcmVzaDp0aGlzLl9yZWZyZXNofSxmdW5jdGlvbihzKXsoMCxpKDIpLmxvZ1JlbmRlckxhYmVsKSh0LnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5Mb2FkRG9uZSksaSg5KS5sb2dnZXIubG9nKHtpc0luUXVldWU6dC5pc0luUXVldWUsdGVzdHRhZzpjfSksKDAsaSgxNikuc2F2ZUJ1bmRsZVR5cGUpKHMpLGEuX3JlZnJlc2g9ITEsYS5fcGFyc2VEYXRhKHMsZSx0LG4sbyxyKX0pfSxfcGFyc2VEYXRhOmZ1bmN0aW9uKGUsdCxpLG4sbyxyKXsic3RyaXBlIj09PWkucHJvZHVjdD9yKCk6KHQuc2V0RGF0YShlKSxufHwobj1lLnNldHRpbmdzJiZlLnNldHRpbmdzW2kuYmxvY2tJbXBJZF0/ZS5zZXR0aW5nc1tpLmJsb2NrSW1wSWRdOnt9LHRoaXMuX3NldHRpbmdzQ2FjaGVbaS5ibG9ja0lkXT1uKSx0aGlzLl9yZW5kZXIodCxpLG4sbyxyKSl9LF9yZW5kZXI6ZnVuY3Rpb24oZSx0LGksbixvKXt0aGlzLl9nZXRTZXR0aW5ncyh0LGksZnVuY3Rpb24oaSl7ZS5yZW5kZXIodCxpLG4se30pLG8oKX0pfSxfZ2V0U2V0dGluZ3M6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpbih0KTtlbHNlIGlmKHRoaXMuX3NldHRpbmdzQ2FjaGVbZS5ibG9ja0lkXSluKHRoaXMuX3NldHRpbmdzQ2FjaGVbZS5ibG9ja0lkXSk7ZWxzZXt2YXIgbz10aGlzOygwLGkoNzc3KS5sb2FkRGlyZWN0U2V0dGluZ3MpKHtwYWdlSWQ6ZS5wYWdlSWQsYmxvY2tJbXBJZDplLmJsb2NrSW1wSWR9LGZ1bmN0aW9uKHQpe3ZhciBpPXRbZS5ibG9ja0ltcElkXTtvLl9zZXR0aW5nc0NhY2hlW2UuYmxvY2tJZF09aSxuKGkpfSl9fSxfZ2V0TGF5b3V0Q29uZmlnOmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3KGkoMzYyKS5MYXlvdXRDb25maWcpKGkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK2UucmVuZGVyVG8pKTtpZihuLnNldCgiYWRfbm8iLCgwLGkoNjIpLmdldEFkVXNhZ2VTdG9yYWdlKShlKS5nZXRDYXB0dXJlZENvdW50KCkpLHQpe3ZhciBvPWkoMjUyKS5nZXRGb3JtYXRCeU5hbWUodC5uYW1lKTtpZihvKXtuLnNldCgibGltaXQiLGkoMjM0KS5nZXRMaW1pdChvLHQpKSxuLnNldCgiYmxvY2siLG8uaW5kZXgpO3ZhciByPS0xIT09aSgwKS5pbkFycmF5KFtpKDYpLkJsb2NrVHlwZXMuSE9SSVpPTlRBTCxpKDYpLkJsb2NrVHlwZXMuVkVSVElDQUwsaSg2KS5CbG9ja1R5cGVzLkdSSURdLG8udHlwZSk7aWYoIW8uZml4ZWQmJnIpe3ZhciBhPWkoMjM0KS5wYXJzZShvLGkoMCkuZXh0ZW5kKHQpKTtuLnNldFRpdGxlKHtmb250OmEuZm9udFNpemUsdGl0bGVQZXJjZW50OmEudGl0bGVGb250U2l6ZVBlcmNlbnQsdGl0bGVCb2xkOjE9PT1hLnRpdGxlRm9udFNpemV9KX19fXJldHVybiBufSxfaGFuZGxlQWRBYnVzZWQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXRoaXM7aWYoKDAsaSgxMTApLnNob3VsZFNsaWRlVXApKHQsbikpe3ZhciByPWkoMTUpLmdldFJlbmRlcklkKHQpO2Uuc2xpZGVVcChyLGZ1bmN0aW9uKCl7dmFyIG49dC5yZW5kZXJUbyxyPXQub25IaWRlOzA9PT1lLmdldEJsb2NrcygpLmxlbmd0aCYmaSgwKS5mb3JPd24oby5fbWFuYWdlcnMsZnVuY3Rpb24odCxpKXt0PT09ZSYmKGRlbGV0ZSBvLl9tYW5hZ2Vyc1tpXSx0LmRlc3RydWN0b3IoKSl9KTt2YXIgYT1pKDApLmRvbS5xdWVyeVNlbGVjdG9yKCIjIituKTthJiYoMCxpKDE3OCkuY2xlYXJIVE1MKShhKSxyJiYoMCxpKDcpLmlzRnVuY3Rpb24pKHIpJiZyLmNhbGwod2luZG93LG4pfSl9fX0sZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNIb3N0SW5BbmltYXRpb25MaXN0PWZ1bmN0aW9uKGUpe3JldHVybiFpKDIxKS5pc0hvc3RJbkxpc3QoZSxbIm1haWxSdSIsInZrIl0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5hYnVzZWQ9e319cmV0dXJuIGUucHJvdG90eXBlLmlzTm90Q29uZmlybWVkPWZ1bmN0aW9uKHQpe3JldHVybiFlLmNvbmZpcm1lZFt0XX0sZS5wcm90b3R5cGUuY29uZmlybT1mdW5jdGlvbih0KXtlLmNvbmZpcm1lZFt0XT0hMH0sZS5wcm90b3R5cGUuY29uZmlybVJ0Yj1mdW5jdGlvbihlLHQpe3RoaXMucnRiVmlzaWJpbGl0eU1hbmFnZXJ8fCh0aGlzLnJ0YlZpc2liaWxpdHlNYW5hZ2VyPWkoMzU3KS5SdGJWaXNpYmlsaXR5TWFuYWdlci5nZXRNYW5hZ2VyKHtsaW5rVGFpbDplLmxpbmtUYWlsfSksdGhpcy5ydGJWaXNpYmlsaXR5TWFuYWdlci5jb25maXJtKHQpKX0sZS5wcm90b3R5cGUuYWJ1c2U9ZnVuY3Rpb24oZSl7dGhpcy5hYnVzZWRbZV09ITB9LGUucHJvdG90eXBlLmlzQWJ1c2VkPWZ1bmN0aW9uKGUpe3JldHVybiBCb29sZWFuKHRoaXMuYWJ1c2VkW2VdKX0sZS5jb25maXJtZWQ9e30sZX0oKTt0LkRpcmVjdFZpc2liaWxpdHlNYW5hZ2VyPW59LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNDb29raWVIb3N0SWdub3JlZD1mdW5jdGlvbihlKXtyZXR1cm4gaSgyMSkuaXNIb3N0SW5MaXN0KGUsWyJtYWlsUnVBbGwiXSl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0nInVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQodCxlLG4pe3ZhciBzPXQrIj0xIjtpZigtMT09PWRvY3VtZW50LmNvb2tpZS5pbmRleE9mKHMpKXt2YXIgYT04NjQwMCplKjFlMyxjPW5ldyBEYXRlLHI9bmV3IERhdGUoTnVtYmVyKGMpK2EpLnRvVVRDU3RyaW5nKCk7ZG9jdW1lbnQuY29va2llPXMrIjsgZXhwaXJlcz0iK3IsbigpfX1mdW5jdGlvbiBlKHQpeyhuZXcgSW1hZ2UpLnNyYz10fWlmKGNvbmZpZy5ydGIpe3ZhciBuPWNvbmZpZy5ydGIubWF0Y2hVcmxzO2NvbmZpZy5pbml0UnN5YVRhZ1VzZXImJnQoInBjczMiLDEsZnVuY3Rpb24oKXt2YXIgdCxlO3Q9Imh0dHBzOi8veWFuZGV4LnJ1L3R1cmJvL2FhYi9wR1RIOTczNjkvYzY0Nzg0T3RPLVF1L1hacmFnQkdQQ3VjdURoaDNxV2dKUlVMSWNHaEQ5amo2UzEtS3A2MEwxeDZTZS1BVVJOckJnUUZfSE1XRGV2V3NwMjhYbl9Scm5JWUNOaFJCRGRoVmoxdHNIeUZUWHBsWDN4OG80OHQ1T3NMQmpzTDZnYUM2ekdpLWU3VGItNmFkUkV1U3BuYzY1MElqWHEzRk1fMTN2ekJPaDZ6R1NJX24wa2NXc3h5cVpkOTdEeDRTRWY5SnhKXzhPekxyS2ZrRE1SeVFLQUx3R0Z3YVQ2bWtPWmhGdmdicEVnV1Vtd1p6ODAyc1YzSk14STZqRGFSZXRGaE85TUZFQlNHTktpV2RDYXp1RVVLdldPY09YNW9RZWZvSU1yTFB3dHJ3MDVoT2V2eDZ0NHE3Tml6MDJBTlZWU2wza1hDX3piVmlmV1hONHU4RlQyWTd6c2N6aFBieWozZ1dyUnJkYnFOelRnajNITy1aSWtsWlNQREF2c09ZOFJHTDNGby1lUVFhV2ZTczFUbmlWUlc0dGdGQWp0MjNneDBWXzJBdmhPeTA2SThXMFpSMUUzMEkxSDVZTGw3QTRReTdkMXpzU3RHcnUxcmhvcy1EU21CeS1TMDdUYm9WLXhnbnppZWJNMmRsYW5WQlVqOHNGOUF1SjgwaFBxVF9Gc3AtQmVBV0ZKQlBPblJQaXB3OEVWRi02d1VkakxveXlmaTRFeEhzSURyenNBcVA2RzhabHh0NzVuNG51OEttWjNrSEVfRHRUblhRVDJkZjQ2M21fNmRLYl9YQWRVYkRYQWczckZsdGJSQ0RMTGxWZmF3YjBrbGJ5dkZCbjVGN2t6QjdUZHYtbTdUcmF2Y3ZkRGt6aHpmYnRoSGhEUTZYZ2F4bURNSHR4ZXlYQ042VkVRVkhRazBKeFctcFRqMHhvOTBKZFIwdWFOSXEtMWlDMGY3aEdSS2dpNzNKYm1uM3Fzc1dYYldLazBTVktvWVJzVTV0SkVQczVWNFQ3UVh2SlJqOWRvTVdONU1mT3RaZFN3Mk8wQ085U2JZTl9ra0IyNXFZc0RNc0E4cGdFUHF1aWstNTFpazZaVi0yLWJIMUZHczBZMEVzX0ZZaDdQWnQwSHowdk1SSXZzVGlkd1JEWFB1MmZFaWZyUkdqYjJuMWpReFpBZXRxaXFPVGJmR0tZSklLVEtuc2VEYkktNGN1eEdyU0o3UzVwWUZoUDR5M3dJODNUZUhfNUJ6M09JNmx3OVVFY2h4cVJCOG9MRDhRSTY4WnRoeC1lLUJMdUlzeFE4MGgydUR4eVotTERkaVc0IiwoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSkuc3JjPXQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKX0pLHM9LjIsTWF0aC5yYW5kb20oKTxzJiZ0KCJwY3Nzc3BiIiwxNCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKWUoblt0XSl9KSxlKCJodHRwczovL3lzYS1zdGF0aWMucGFzc3BvcnQueWFuZGV4LnJ1L3N0YXRpYy8xL2Q5NTlkN2UzOWQ1MDY3ZmFkMzBkOWMwNjIwNDg2NmU5L2QucG5nP2V4PXllcyIpfXZhciBzOyd9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49eyIxMDI0eDc2OCI6IjQ4MHgzMjAiLCI3Njh4MTAyNCI6IjMyMHg0ODAifTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCsieCIrZS5oZWlnaHQ7cmV0dXJuIG5bdF18fHR9fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmxvYWREaXJlY3RTZXR0aW5ncz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyhpKDI0KS5VcmwpKHtob3N0OmkoNikuVVJMUy5kaXJlY3RTZXR0aW5ncyxwYXRoOmUucGFnZUlkLHBhcmFtczppKDIzMykuZ2V0Q29tbW9uUGFyYW1zKGUpfSk7aSgxNzUpLmxvYWRBZCh7dXJsOm4scGFnZUlkOmUucGFnZUlkLGlzUmVmcmVzaDplLnJlZnJlc2gsY2FsbGJhY2s6dH0pfX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49LjUsbz1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKGUpKX0scj1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKX0sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksdGhpcy5NSU5fVklTSUJMRV9BUkVBPW4sZSl7dGhpcy5jb25maWc9e307dmFyIHI9aSgxNDUpLmdldFdpbmRvd1NpemUoKTt0aGlzLnNldCgid2luX3dpZHRoIixvKHIud2lkdGgpKSx0aGlzLnNldCgid2luX2hlaWdodCIsbyhyLmhlaWdodCkpO3ZhciBhPWkoMzMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdChlKTt0aGlzLnNldExheW91dChhKSx0aGlzLnNldFZpc2libGUoYSxyKSx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnNpemU9YSx0aGlzLndpblNpemU9cn1lbHNle2lmKCF0KXRocm93IG5ldyBFcnJvcigid3JvbmcgTGF5b3V0Q29uZmlnIGNvbnN0cnVjdG9yIHBhcmFtcyIpO3RoaXMuY29uZmlnPXR9fXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbmZpZ1tlXT10fSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyl9LGUucHJvdG90eXBlLnNldExheW91dD1mdW5jdGlvbihlKXt2YXIgdD1pKDQxMSkuZ2V0V2luZG93U2Nyb2xsKCk7dGhpcy5zZXQoIndpZHRoIixvKGUud2lkdGgpKSx0aGlzLnNldCgiaGVpZ2h0IixvKGUuaGVpZ2h0KSksdGhpcy5zZXQoImxlZnQiLHIoZS5sZWZ0K3QubGVmdCkpLHRoaXMuc2V0KCJ0b3AiLHIoZS50b3ArdC50b3ApKX0sZS5wcm90b3R5cGUuc2V0VmlzaWJsZT1mdW5jdGlvbihlLHQpe3ZhciBpPWUud2lkdGgsbj1lLmhlaWdodCxvPWUudG9wLHI9ZS5sZWZ0LGE9ZS5yaWdodCxzPWUuYm90dG9tLGw9MSxjPU1hdGgubWF4KE1hdGgubWluKGEsdC53aWR0aCktTWF0aC5tYXgociwwKSwwKSx1PU1hdGgubWF4KE1hdGgubWluKHMsdC5oZWlnaHQpLU1hdGgubWF4KG8sMCksMCk7aT9sKj1jL2k6KHI8MHx8YT50LndpZHRoKSYmKGw9MCksbj9sKj11L246KG88MHx8cz50LmhlaWdodCkmJihsPTApLHRoaXMuc2V0KCJ2aXNpYmxlIixsPj10aGlzLk1JTl9WSVNJQkxFX0FSRUE/MTowKSx0aGlzLmlzRmlyc3RTY3JlZW49MD09PWkmJjA9PT1uJiYwPT09byYmMD09PXImJjA9PT1hJiYwPT09c3x8dGhpcy5jb25maWcudG9wPHQuaGVpZ2h0fSxlfSgpO3QuTGF5b3V0Q29uZmlnPWF9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUoaSg3ODApKX07ZnVuY3Rpb24gbygpe3RoaXMuX21hbmFnZXJzPXt9fW8ucHJvdG90eXBlPXtyZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPSgwLGkoMSkucHJvdGVjdCkoaSgxKS5Qcm90ZWN0ZWROYW1lcy5SdGIrIi5yZW5kZXIiLGZ1bmN0aW9uKHQpeygwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLlJ0YkRhdGFQYXJzZWQpLHRoaXMucmVuZGVyQnlEYXRhKHQse2lzUmVmcmVzaDpufSl9LHRoaXMpLHI9KDAsaSgxKS5wcm90ZWN0KShpKDEpLlByb3RlY3RlZE5hbWVzLlJ0YisiLnJlbmRlciIsdGhpcy5fcmVuZGVyV2l0aG91dFJlbG9hZCx0aGlzKTt0aGlzLl9sb2FkKGUsdCxvLHIpfSxnZXRCaWQ6ZnVuY3Rpb24oZSx0LGksbil7dGhpcy5fbG9hZChlLGksdCxuKX0scmVuZGVyQnlEYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5ydGJNYW5hZ2VyLG89ZS5kYXRhLHI9ZS5jZmc7aWYoby5zZXR0aW5ncyl7dmFyIGE9ci5ibG9ja0ltcElkLHM9by5zZXR0aW5nc1thXXx8e307KDAsaSg2MikuZ2V0QWRVc2FnZVN0b3JhZ2UpKHIpLnNhdmVBZEZpbHRlcihzLmFkRmlsdGVyLEJvb2xlYW4oby5ydGIpKX1uLnNldERhdGEobyksbi5yZW5kZXIocixlLmFsdENhbGxiYWNrLHQpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldE1hbmFnZXJLZXkoZSk7dGhpcy5fbWFuYWdlcnNbdF0mJih0aGlzLl9tYW5hZ2Vyc1t0XS5kZXN0cnVjdG9yKCksZGVsZXRlIHRoaXMuX21hbmFnZXJzW3RdKX0sX3JlbmRlcldpdGhvdXRSZWxvYWQ6ZnVuY3Rpb24oZSx0LGkpe2UucmVuZGVyKHQsaSx7fSl9LF9nZXRNYW5hZ2VyS2V5OmZ1bmN0aW9uKGUpe3JldHVybiBlLmJsb2NrSWQrIiMiKyhlLnBhZ2VOdW1iZXI/ZS5wYWdlTnVtYmVyOiIiKX0sX2dldE1hbmFnZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0TWFuYWdlcktleShlKTtyZXR1cm4gdCBpbiB0aGlzLl9tYW5hZ2Vyc3x8KHRoaXMuX21hbmFnZXJzW3RdPW5ldyhpKDc4MykpKHtvbkFkQWJ1c2VkOnRoaXMuaGFuZGxlQWRBYnVzZWQuYmluZCh0aGlzKX0pKSx0aGlzLl9tYW5hZ2Vyc1t0XX0sX2xvYWQ6ZnVuY3Rpb24oZSx0LG4sbyl7dGhpcy5fbG9hZERhdGEodGhpcy5fZ2V0TWFuYWdlcihlKSxlLHQsIVlhLmVFY2lrUnZPYjlnLl9hc3luY01vZGVPbixuLG8pLGkoMjYyKS5oaXRPbmNlKGUucGFnZUlkLGUuYnVuZGxlKX0sX2xvYWREYXRhOmZ1bmN0aW9uKGUsdCxvLHIsYSxzKXtyZXR1cm4gdC5kYXRhPygoMCxpKDE2KS5zYXZlQnVuZGxlVHlwZSkodC5kYXRhKSx2b2lkIGEoe2NmZzp0LGRhdGE6dC5kYXRhLHJ0Yk1hbmFnZXI6ZSxhbHRDYWxsYmFjazpvLGRhdGFGcm9tUGFyYW1zOiEwfSkpOmUuZGF0YUNhblJlbG9hZCgpPyhlLnNldExhc3RSZW5kZXJDYWxsKCksdm9pZCBuKGZ1bmN0aW9uKGkpe3ZhciBuPW5ldygwLGkuUnRiRGF0YUxvYWRlcik7bi5zZXRDb25maWcodCksbi5sb2FkRGF0YShmdW5jdGlvbih0KXtyZXR1cm4gYSh7Y2ZnOnQsZGF0YTp0LmRhdGEscnRiTWFuYWdlcjplLGFsdENhbGxiYWNrOm99KX0pfSkpOigoMCxpKDE2KS5zYXZlQnVuZGxlVHlwZSkodC5idW5kbGUpLHZvaWQgcyhlLHQsbykpfSxnZXRCbG9ja3NUb1JlcmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGkoMCkuZm9yT3duKHRoaXMuX21hbmFnZXJzLGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QmxvY2tzVG9SZXJlbmRlcigpO2kubGVuZ3RoPjAmJihlPWUuY29uY2F0KGkpLHQucmVzZXRUaW1lb3V0KCkpfSksZX0sZ2V0QmxvY2tzOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGkoMCkuZm9yT3duKHRoaXMuX21hbmFnZXJzLGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QmxvY2tzKCk7aS5sZW5ndGg+MCYmKGU9ZS5jb25jYXQoaSkpfSksZX0sZ2V0QmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRCbG9ja3MoKTtyZXR1cm4gaSgwKS5maWx0ZXIodCxmdW5jdGlvbih0KXtyZXR1cm4gdC5ibG9ja0lkPT09ZX0pWzBdfSxjbGVhckJsb2NrVGltZW91dDpmdW5jdGlvbihlKXt0aGlzLl9nZXRNYW5hZ2VyKGUpLnJlc2V0VGltZW91dCgpfSxnZXRTa2lwVG9rZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxlJiZ0aGlzLl9nZXRNYW5hZ2VyKGUpO3JldHVybigwLGkoNjIpLmdldEFkVXNhZ2VTdG9yYWdlKShlKS5nZXRTa2lwVG9rZW4oZSxuJiZuLmdldFVzZWRJZHMoKSl9LGdldENhcHR1cmVkQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpKDYyKS5nZXRBZFVzYWdlU3RvcmFnZSkoKS5nZXRDYXB0dXJlZENvdW50KCl9LGdldFNraXBCYW5uZXI6ZnVuY3Rpb24oZSx0KXtpZighZS5vbGREaXJlY3RTZXR0aW5ncylyZXR1cm4iIjt2YXIgbj10fHxlJiZ0aGlzLl9nZXRNYW5hZ2VyKGUpO3JldHVybigwLGkoNjIpLmdldEFkVXNhZ2VTdG9yYWdlKShlKS5nZXRTa2lwQmFubmVyKGUsbiYmbi5nZXRVc2VkSWRzKGUucmVuZGVyVG8pKX0saGFuZGxlQWRBYnVzZWQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPXRoaXM7KDAsaSgxMTApLnNob3VsZFNsaWRlVXApKHQsbikmJmUuc2xpZGVVcChmdW5jdGlvbigpe3ZhciBuPXQucmVuZGVyVG8scj10Lm9uSGlkZSxhPW8uX2dldE1hbmFnZXJLZXkodCk7ZGVsZXRlIG8uX21hbmFnZXJzW2FdLGUuZGVzdHJ1Y3RvcigpO3ZhciBzPWkoMCkuZG9tLnF1ZXJ5U2VsZWN0b3IoIiMiK24pO3MmJigwLGkoMTc4KS5jbGVhckhUTUwpKHMpLHImJigwLGkoNykuaXNGdW5jdGlvbikocikmJnIuY2FsbCh3aW5kb3csbil9KX19LGUuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9MSxuPWFyZ3VtZW50cy5sZW5ndGg7aTxuO2krKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbaV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5kYXRhUmVxdWVzdFRpbWU9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oZSx0KXtpZihlLnVuaXF1ZUlkfHwoZS51bmlxdWVJZD1pKDcwKS5nZW5lcmF0ZUhleFN0cmluZygxMCkpLHRoaXMuY29uZmlnPWkoMTUpLnByZXBhcmVSdGJDb25maWcoZSksdGhpcy5yZWxvYWRUaW1lb3V0PXRoaXMucmVsb2FkVGltZW91dHx8aSg2KS5ERUZBVUxUX1JFTE9BRF9USU1FT1VULEJvb2xlYW4odCkmJmkoMikubG9nUmVuZGVyTGFiZWwodGhpcy5jb25maWcudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkFkdk1hbmFnZXJMb2FkZXJSZW5kZXIsdCksaSg5KS5sb2dnZXIuY29uZmlndXJlKHtsYWJlbHM6e3BhZ2VJZDppKDM2MykuZ2V0U2VydmljZU5hbWUoKX0sZGF0YTp7cGFnZUlkOmUucGFnZUlkfX0pLHRoaXMuY29uZmlnLmRhdGEpcmV0dXJuIHRoaXMuY29uZmlnLmRhdGEuY29tbW9uJiZ0aGlzLmNvbmZpZy5kYXRhLmNvbW1vbi5yZWxvYWRUaW1lb3V0JiYodGhpcy5yZWxvYWRUaW1lb3V0PU51bWJlcih0aGlzLmNvbmZpZy5kYXRhLmNvbW1vbi5yZWxvYWRUaW1lb3V0KSksaSgyKS5zdG9wTG9nZ2luZ1RpbWUoZS51bmlxdWVJZCksaSgxNikuc2F2ZUJ1bmRsZVR5cGUoZS5kYXRhKSx2b2lkKHRoaXMuZGF0YT10aGlzLmNvbmZpZy5kYXRhKTt0aGlzLmNvbmZpZy5pbml0VGltZSYmZGVsZXRlIHRoaXMuY29uZmlnLmluaXRUaW1lO3ZhciBuPWkoMzY0KS5xdWVyeVNlbGVjdG9yKCIjIitlLnJlbmRlclRvKTt0aGlzLmxheW91dENvbmZpZz1uZXcoaSgzNjIpLkxheW91dENvbmZpZykobiksdGhpcy5hZFVzYWdlU3RvcmFnZT1pKDYyKS5nZXRBZFVzYWdlU3RvcmFnZSh0aGlzLmNvbmZpZyksdGhpcy5sYXlvdXRDb25maWcuc2V0KCJhZF9ubyIsdGhpcy5hZFVzYWdlU3RvcmFnZS5nZXRDYXB0dXJlZENvdW50KCkpfSxlLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbih0KXt2YXIgbz10aGlzO2lmKHRoaXMuY29uZmlnLmRhdGEpcmV0dXJuIGkoMikuc2V0QmxvY2tEYXRhKHRoaXMuY29uZmlnLnVuaXF1ZUlkLHtjb250YWluc0RhdGE6ITB9KSx2b2lkIHQodGhpcy5jb25maWcpO2lmKHRoaXMuY2FuUmVsb2FkRGF0YSgpfHx0aGlzLmNvbmZpZy5yZWZyZXNoKXt0aGlzLnNldERhdGFSZXF1ZXN0VGltZSgpO3ZhciByLGE9e2FkZm94ZXhwOnRoaXMuY29uZmlnLmFkZm94ZXhwfTtyPSJEIj09PWkoMTUpLnBhcnNlQmxvY2tJZCh0aGlzLmNvbmZpZy5ibG9ja0lkKS5wcm9kdWN0P25ldyhpKDEzNSkuRGlyZWN0VGVzdHRhZykoYSk6bmV3KGkoMTg4KS5SdGJUZXN0dGFnKShhKTt2YXIgcz1pKDc4MSkuZ2V0Q29udGFpbmVyU2l6ZSh0aGlzLmNvbmZpZy5yZW5kZXJUbyksbD1zLndpZHRoLGM9cy5oZWlnaHQ7aSgyKS5zZXRCbG9ja0RhdGEodGhpcy5jb25maWcudW5pcXVlSWQse2lzRmlyc3RTY3JlZW46Qm9vbGVhbih0aGlzLmxheW91dENvbmZpZykmJnRoaXMubGF5b3V0Q29uZmlnLmdldElzRmlyc3RTY3JlZW4oKX0pO3ZhciB1PXtwcm9kdWN0OmkoMTUpLnBhcnNlQmxvY2tJZCh0aGlzLmNvbmZpZy5ibG9ja0lkKS5wcm9kdWN0LHRlc3R0YWc6ci50b1N0cmluZygpLHBhZ2VJZDp0aGlzLmNvbmZpZy5wYWdlSWQsYmxvY2tJbXBJZDp0aGlzLmNvbmZpZy5ibG9ja0ltcElkLGdyYWI6dGhpcy5jb25maWcuZ3JhYixleHRQYXJhbXM6dGhpcy5jb25maWcuZXh0UGFyYW1zLGV4dFBhcmFtOnRoaXMuY29uZmlnLmV4dFBhcmFtLHNzU2tpcFRva2VuTGVuZ3RoOnRoaXMuYWRVc2FnZVN0b3JhZ2Uuc3NTa2lwVG9rZW5MZW5ndGgsYXZhaWxhYmxlV2lkdGg6bCxhdmFpbGFibGVIZWlnaHQ6YyxzZWFyY2hUZXh0OnRoaXMuY29uZmlnLnNlYXJjaFRleHQsbGFuZzp0aGlzLmNvbmZpZy5sYW5nLGdlbzp0aGlzLmNvbmZpZy5nZW8sZGlzYWJsZUhpZ2hsaWdodDp0aGlzLmNvbmZpZy5kaXNhYmxlSGlnaGxpZ2h0LGxheW91dENvbmZpZzp0aGlzLmxheW91dENvbmZpZyxhZGRpdGlvbmFsQmFubmVyczppKDU0KS5nZXRBZGRpdGlvbmFsQmFubmVycygpfHx0aGlzLmNvbmZpZy5hZGRpdGlvbmFsQmFubmVyc3x8dGhpcy5jb25maWcub2xkRGlyZWN0U2V0dGluZ3MmJnRoaXMuY29uZmlnLm9sZERpcmVjdFNldHRpbmdzLmFkZGl0aW9uYWxfYmFubmVyc3x8IiIsZXhwZXJpbWVudElkOmkoMTg5KS5nZXRFeHBlcmltZW50SWQoKXx8aSg3OSkuc3NTa2lwVG9rZW5FeHBJZCxwYXJ0bmVyU3RhdElkOnRoaXMuY29uZmlnLnBhcnRuZXJTdGF0SWQscmVmcmVzaDpCb29sZWFuKHRoaXMuY29uZmlnLnJlZnJlc2gpLHJ0YkluRGlyZWN0OnRoaXMuY29uZmlnLnJ0YkluRGlyZWN0LG5vbmNlOnRoaXMuY29uZmlnLmNzcE5vbmNlLGNhY2hlSWQ6dGhpcy5jb25maWcuY2FjaGVJZCx1c2VTc3I6Qm9vbGVhbih0aGlzLmNvbmZpZy51c2VTc3IpfTtpKDc5KS5pc1NzU2tpcFRva2VuPyhpKDIpLmxvZ1JlbmRlckxhYmVsKHRoaXMuY29uZmlnLnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5BZHZRdWV1ZVRpbWUpLGkoMjY0KS5sb2FkUnRiKHUsZnVuY3Rpb24oZSl7cmV0dXJuIG8ucGFyc2VTZXJ2ZXJEYXRhRnVuY3Rpb24oZSx0KX0pKTplLnF1ZXVlLmFkZChmdW5jdGlvbihlKXtyZXR1cm4gby5nZXRTa2lwVG9rZW4oZnVuY3Rpb24ocil7aSgyKS5sb2dSZW5kZXJMYWJlbChvLmNvbmZpZy51bmlxdWVJZCxpKDIpLkJsb2NrUmVuZGVyU3RlcHMuQWR2UXVldWVUaW1lKSxpKDI2NCkubG9hZFJ0YihuKG4oe30sdSksciksZnVuY3Rpb24oaSl7cmV0dXJuIG8ucGFyc2VTZXJ2ZXJEYXRhRnVuY3Rpb24oaSxmdW5jdGlvbihpKXt0KGkpLGUoKX0pfSl9KX0pfWVsc2UgdChuKG4oe2lzRGF0YVJlZnJlc2hlZDohMH0sdGhpcy5jb25maWcpLHtkYXRhOnRoaXMuZGF0YX0pKX0sZS5wcm90b3R5cGUucGFyc2VTZXJ2ZXJEYXRhRnVuY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgbz1wYXJzZUludCh0aGlzLmNvbmZpZy5wYWdlSWQsMTApLHI9cGFyc2VJbnQodGhpcy5jb25maWcuYmxvY2tJbXBJZHx8IjAiLDEwKTtpKDc4MikubG9nQWRmb3hDb250cm9sVGltZShvLHIpLGkoMikubG9nUmVuZGVyTGFiZWwodGhpcy5jb25maWcudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLkFkdkxvYWREb25lKSxlLmNvbW1vbiYmZS5jb21tb24ucmVsb2FkVGltZW91dCYmKHRoaXMucmVsb2FkVGltZW91dD1OdW1iZXIoZS5jb21tb24ucmVsb2FkVGltZW91dCkpLGkoMTYpLnNhdmVCdW5kbGVUeXBlKGUpLHRoaXMuZGF0YT1lLHQobihuKHtpc0RhdGFSZWZyZXNoZWQ6ITB9LHRoaXMuY29uZmlnKSx7ZGF0YTp0aGlzLmRhdGF9KSl9LGUucHJvdG90eXBlLnNldERhdGFSZXF1ZXN0VGltZT1mdW5jdGlvbigpe3RoaXMuZGF0YVJlcXVlc3RUaW1lPU51bWJlcihuZXcgRGF0ZSl9LGUucHJvdG90eXBlLmNhblJlbG9hZERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kYXRhUmVxdWVzdFRpbWV8fE51bWJlcihuZXcgRGF0ZSktdGhpcy5kYXRhUmVxdWVzdFRpbWU+MWUzKnRoaXMucmVsb2FkVGltZW91dH0sZS5wcm90b3R5cGUuZ2V0U2tpcFRva2VuPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7aWYoZS5pc0ZpcnN0QmFubmVyfHxpKDc5KS5pc1NzU2tpcFRva2VuKXJldHVybiBlLmlzRmlyc3RCYW5uZXI9ITEsdm9pZCB0KHt9KTt2YXIgbz1pKDEyKS5nZXRZYUNvbnRleHQoKTtvLkFkdk1hbmFnZXJTdGF0aWM/dCh7c2tpcFRva2VuOm8uQWR2TWFuYWdlclN0YXRpYy5nZXRTa2lwVG9rZW4odGhpcy5jb25maWcpLHNraXBCYW5uZXI6by5BZHZNYW5hZ2VyU3RhdGljLmdldFNraXBCYW5uZXIodGhpcy5jb25maWcpfSk6by5fY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt2YXIgZT1pKDEyKS5nZXRZYUNvbnRleHQoKTtlLkFkdk1hbmFnZXJTdGF0aWM/dCh7c2tpcFRva2VuOmUuQWR2TWFuYWdlclN0YXRpYy5nZXRTa2lwVG9rZW4obi5jb25maWcpLHNraXBCYW5uZXI6ZS5BZHZNYW5hZ2VyU3RhdGljLmdldFNraXBCYW5uZXIobi5jb25maWcpfSk6aSg5KS5sb2dnZXIuZXJyb3IobmV3IEVycm9yKCJhZHZNYW5hZ2VyU3RhdGljIGlzIG1pc3NpbmciKSwiTm9BTVNfZ2V0U2tpcFRva2VuIil9KX0sZS5pc0ZpcnN0QmFubmVyPSEwLGUucXVldWU9bmV3KGkoMjU4KS5RdWV1ZSksZX0oKTt0LlJ0YkRhdGFMb2FkZXI9b30sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRDb250YWluZXJTaXplPWkoMTc2KS5tZW1vaXplKGZ1bmN0aW9uKGUpe3ZhciB0PWkoMzY0KS5xdWVyeVNlbGVjdG9yKCIjIitlKTtyZXR1cm4gdD9pKDU3KS5nZXRFbGVtZW50SW5uZXJTaXplKHQpOnt3aWR0aDowLGhlaWdodDowfX0pfSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1be3BhZ2VJZDoxMDYyNTMsaW1wSWQ6MTEzfSx7cGFnZUlkOjEzNDYyNSxpbXBJZDo3Mn1dO2Z1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0KyspaWYocihlLG5bdF0ucGFnZUlkLG5bdF0uaW1wSWQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiEhaSgxOSkuaXNTdHJpbmcoZSkmJihlLmluZGV4T2YoIi9tZXRhLyIrdCk+LTEmJmUuaW5kZXhPZigiaW1wLWlkPSIrbik+LTEpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZT4wJiZ0PjA/TWF0aC5yb3VuZCh0LWUpOjB9dC5sb2dBZGZveENvbnRyb2xUaW1lPWZ1bmN0aW9uKGUsdCl7aWYoZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldLnBhZ2VJZD09PWUmJm5baV0uaW1wSWQ9PT10KXJldHVybiEwO3JldHVybiExfShlLHQpKWZvcih2YXIgcj1wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKCJyZXNvdXJjZSIpLHM9ci5sZW5ndGgtMTtzPj0wO3MtLSlpZihvKHJbc10ubmFtZSkpe3ZhciBsPXJbc10sYz17dGNwSGFuZHNoYWtlOmEobC5jb25uZWN0U3RhcnQsbC5jb25uZWN0RW5kKSxkbnNMb29rdXA6YShsLmRvbWFpbkxvb2t1cFN0YXJ0LGwuZG9tYWluTG9va3VwRW5kKSx0dGZiOmEobC5yZXF1ZXN0U3RhcnQsbC5yZXNwb25zZVN0YXJ0KSxyZXNwb25zZTphKGwucmVzcG9uc2VTdGFydCxsLnJlc3BvbnNlRW5kKSxkdXJhdGlvbjpNYXRoLnJvdW5kKGwuZHVyYXRpb24pfTtpKDkpLmxvZ2dlci5pbmZvKGMsIkFERk9YX0NUUkxfVElNRSIsMTAwKTticmVha319fSxmdW5jdGlvbihlLHQsaSl7InVzZSBzdHJpY3QiO3ZhciBuPXZvaWQgMCxvPXZvaWQgMDtuPWkoNDkpLkVWRU5UUyxvPWkoMTUxKVsiZGVmYXVsdCJdLGUuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyLGEscyxsLGMsdSxkPXRoaXMscD1udWxsLGY9bnVsbCxoPW5ldyhpKDM1NikpKCExLHtvbkFkQWJ1c2VkOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkodD4xP3QtMTowKSxuPTE7bjx0O24rKylpW24tMV09YXJndW1lbnRzW25dO3kuYXBwbHkodm9pZCAwLGkpfX0pLGc9bnVsbCxfPWUub25BZEFidXNlZDtmdW5jdGlvbiB5KCl7aWYoXyYmKDAsaSg3KS5pc0Z1bmN0aW9uKShfKSl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtfLmFwcGx5KHZvaWQgMCxbZF0uY29uY2F0KHQpKX19dGhpcy5zZXREYXRhPWZ1bmN0aW9uKGUpe3Q9ZSxyPW5ldyBEYXRlLGM9bnVsbCx1PW51bGwsaC5zZXREYXRhKHQpLHM9dC5jb21tb24mJnQuY29tbW9uLnJlbG9hZFRpbWVvdXQ/TnVtYmVyKHQuY29tbW9uLnJlbG9hZFRpbWVvdXQpOmkoNikuZGVmYXVsdFJlbG9hZFRpbWVvdXR9LHRoaXMuc2V0TGFzdFJlbmRlckNhbGw9ZnVuY3Rpb24oKXthPURhdGUubm93KCl9LHRoaXMuZ2V0QmxvY2tzVG9SZXJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBsJiZsLmlzVmlzaWJsZT9sLmlzVmlzaWJpbGl0eUNvbmZpcm1lZCgpJiZsLmlzVmlzaWJsZSgpP1tnXTpbXTpoLmdldEJsb2Nrc1RvUmVyZW5kZXIoKX0sdGhpcy5nZXRCbG9ja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbCYmbC5pc0luVmlld3BvcnQ/W2xdOmguZ2V0QmxvY2tzKCl9LHRoaXMucmVzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7aCYmaC5yZXNldFRpbWVvdXQoKSxyPW51bGwsYT1udWxsfSx0aGlzLmdldFVzZWRJZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGguZ2V0VXNlZElkcyhlKX0sdGhpcy5kYXRhQ2FuUmVsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuKDAsaSgyMSkuaXNIb3N0SW5MaXN0KSh3aW5kb3csWyJ5YW5kZXhNYWlsIl0pPyFhfHxuZXcgRGF0ZS1hPjFlMypzOiFyfHxuZXcgRGF0ZS1yPjFlMypzfSx0aGlzLnJlbmRlcj1mdW5jdGlvbihlLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTsoMCxpKDIpLmxvZ1JlbmRlckxhYmVsKShlLnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJNYW5hZ2VyU3RhcnQpLHMuaG9yaXpvbnRhbEFsaWdufHwocy5ob3Jpem9udGFsQWxpZ249Qm9vbGVhbihlLmhvcml6b250YWxBbGlnbikpO3ZhciBkPUJvb2xlYW4oaSgzOCkucXVlcnlTZWxlY3RvcigiIyIrZS5yZW5kZXJUbykpO2lmKGR8fGkoOSkubG9nZ2VyLndhcm4obmV3IEVycm9yKCJSZW5kZXIgdG8gbm9kZSBpcyBudWxsICgiK2UucGFnZUlkKyIpKCIrZS5ibG9ja0lkKyIpIiksIlJ0Yk1hbmFnZXI6OnJlbmRlciIpLGc9bnVsbCxkJiZ0LnJ0YilvKHtldmVudDpuLkJMT0NLX0NPTkZJUk1BVElPTixkYXRhOnthY3Rpb246bi5UUllfVE9fUkVOREVSLHBhZ2VJZDplLnBhZ2VJZCxibG9ja0lkOmUuYmxvY2tJZCxyZW5kZXJUbzplLnJlbmRlclRvfX0pLCgwLGkoMikuc2V0QmxvY2tEYXRhKShlLnVuaXF1ZUlkLHtwcm9kdWN0OmkoMikuQmxvY2tSZW5kZXJQcm9kdWN0cy5SVEIscGFnZUlkOmUucGFnZUlkLGltcElkOmUuYmxvY2tJbXBJZH0pLGZ1bmN0aW9uKGUsbil7KDAsaSgyKS5sb2dSZW5kZXJMYWJlbCkoZS51bmlxdWVJZCxpKDIpLkJsb2NrUmVuZGVyU3RlcHMuUnRiTWFuYWdlckJlZm9yZVJlbmRlclJ0Yik7dmFyIG89aSgwKS5kb20ucXVlcnlTZWxlY3RvcigiIyIrZS5yZW5kZXJUbyk7aWYoIW8pcmV0dXJuIGY9bnVsbCxwPW51bGwsdm9pZChsJiYobC5kZXN0cnVjdG9yKCksbD1udWxsKSk7aWYobz09PWYmJnA9PT1yKXJldHVybjt2YXIgYT1lLmRhdGEmJmUuZGF0YS5ydGImJmUuZGF0YS5ydGIud2lkdGg7KDAsaSgzMykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KShvKS53aWR0aDxhJiYoby5zdHlsZS53aWR0aD1hKyJweCIpO2Y9byxwPXIsbCYmbC5kZXN0cnVjdG9yKCk7aWYoIWMpe3ZhciBzPXZvaWQgMDtpZih0LnNldHRpbmdzKXt2YXIgZD1lLmJsb2NrSW1wSWQ7cz10LnNldHRpbmdzW2RdfWVsc2Ugcz17fTtjPW5ldyhpKDc4NCkpKHQscyxlKSx1PWkoMzU3KS5SdGJWaXNpYmlsaXR5TWFuYWdlci5nZXRNYW5hZ2VyKHtub25jZTplLmNzcE5vbmNlLGxpbmtUYWlsOmMuZ2V0TGlua1RhaWwoKSx2aWV3Tm90aWNlczpjLmdldFZpZXdOb3RpY2VzKCksd2luTm90aWNlOmMuZ2V0V2luTm90aWNlKCksc2FmZWZyYW1lOiFjLmlzSW5saW5lU1NQKCl9KSxjLnNldEFidXNlSGFuZGxlcihmdW5jdGlvbih0KXt5KGUsdCl9KX0oMCxpKDIpLmxvZ1JlbmRlckxhYmVsKShlLnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJNYW5hZ2VyRGF0YVByZXBhcmVkUnRiKTt2YXIgaD1mdW5jdGlvbigpe2lmKCgwLGkoMikubG9nUmVuZGVyTGFiZWwpKGUudW5pcXVlSWQsaSgyKS5CbG9ja1JlbmRlclN0ZXBzLlJ0Yk1hbmFnZXJCbG9ja1JlbmRlcmVkUnRiKSxlLm9uUmVuZGVyKXt2YXIgdD17bGFuZzpsLmRhdGFTb3VyY2UuZ2V0TGFuZ3VhZ2UoKSxwcm9kdWN0OmkoNikuUHJvZHVjdHMuUlRCLGNvbmZpcm1WaXNpYmlsaXR5OmZ1bmN0aW9uKCl7Im1hbnVhbCI9PT1lLmNoZWNrVmlzaWJpbGl0eSYmbC5jb25maXJtVmlzaWJpbGl0eSgpfX07bC5kYXRhU291cmNlLmlzQXBwKCkmJih0LnRlc3RUYWc9bC5nZXRUZXN0dGFnKCkpLGUub25SZW5kZXIodCl9fSxnPShsPW5ldyhpKDIzMSkpKHtkYXRhU291cmNlOmMsZGF0YTp0LGJsb2NrSWQ6ZS5ibG9ja0lkLHZpc2liaWxpdHlNYW5hZ2VyOnUsY2hlY2tWaXNpYmlsaXR5OmUuY2hlY2tWaXNpYmlsaXR5LG5vbmNlOmUuY3NwTm9uY2UscGFnZU51bWJlcjplLnBhZ2VOdW1iZXIsbmFucHVTZXR0aW5nczplLm5hbnB1U2V0dGluZ3MscmVuZGVyUGFyYW1zOm4sYWRVc2FnZVN0b3JhZ2U6KDAsaSg2MikuZ2V0QWRVc2FnZVN0b3JhZ2UpKGUpfSkpLnJlbmRlcihvKTtnJiYoMCxpKDcpLmlzRnVuY3Rpb24pKGcudGhlbik/Zy50aGVuKGgpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe2koOSkubG9nZ2VyLmVycm9yKGUsIlJ0YkJsb2NrX3JlbmRlcl9hc3luYyIpfSk6aCgpfShlLHMpLGc9aSgxNSkuZ2V0UmVuZGVySWQoZSxzKSwoMCxpKDEyNykuc3RhcnRDb29raWVNYXRjaGluZykoe25vbmNlOmUuY3NwTm9uY2Usc2VydmljZU5hbWU6aSgxMjcpLkNPT0tJRV9NQVRDSElOR19GT1IuUlRCX0RTUCxjb21tb25EYXRhOnQuY29tbW9uLG1hdGNoVXJsczp0Lm1hdGNoVXJscyxidW5kbGU6ZS5idW5kbGV9KTtlbHNlIGlmKGQmJnQuZGlyZWN0KSgwLGkoMikuc2V0QmxvY2tEYXRhKShlLnVuaXF1ZUlkLHtwcm9kdWN0OmkoMikuQmxvY2tSZW5kZXJQcm9kdWN0cy5Db21wb25lbnREaXJlY3RBc3luYyxwYWdlSWQ6ZS5wYWdlSWQsaW1wSWQ6ZS5ibG9ja0ltcElkfSksZnVuY3Rpb24oZSxuKXsoMCxpKDIpLmxvZ1JlbmRlckxhYmVsKShlLnVuaXF1ZUlkLGkoMikuQmxvY2tSZW5kZXJTdGVwcy5SdGJNYW5hZ2VyQmVmb3JlUmVuZGVyRGlyZWN0KSxsJiZsLmRlc3RydWN0b3IoKTt2YXIgbz1pKDApLmV4dGVuZChlLHtwcm9kdWN0OmkoNikuUHJvZHVjdHMuRElSRUNULGluUlRCOiEwfSkscj10LnNldHRpbmdzW2UuYmxvY2tJbXBJZF07ZS5pbWFnZXNGaXJzdCYmKHIuaW1hZ2VzRmlyc3Q9ITApO2gucmVuZGVyKG8scixpKDEzKS5ub29wLG4pLGw9e2Rlc3RydWN0b3I6ZnVuY3Rpb24oKXt0LmRpcmVjdHx8aC5yZW5kZXIobyxyKX19fShlLHMpO2Vsc2V7aWYocy5pc1JlZnJlc2gpcmV0dXJuO2wmJihsLmRlc3RydWN0b3IoKSxsPW51bGwpLChhfHxpKDEzKS5ub29wKSgpfX0sdGhpcy5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7bCYmbC5kZXN0cnVjdG9yJiZsLmRlc3RydWN0b3IoKSxoLmRlc3RydWN0b3IoKSxoPW51bGwsZj1udWxsfSx0aGlzLnNsaWRlVXA9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDtpZihsLnNsaWRlVXApdD1sO2Vsc2UgaWYoaCl7dmFyIG49aC5nZXRCbG9ja3MoKTtuLmxlbmd0aD4xJiZpKDkpLmxvZ2dlci53YXJuKG5ldyBFcnJvcigiRGlyZWN0TWFuYWdlciByZXR1cm5lZCBibG9jayBjb3VudCBvZiAiK24sIlJ0Yk1hbmFnZXI6OnNsaWRlVXAiKSksdD1uWzBdfXQuc2xpZGVVcCYmdC5zbGlkZVVwKGZ1bmN0aW9uKCl7ZSgpfSl9fX0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvOyFlLnJ0Yi52YXN0QmFzZTY0JiZCb29sZWFuKGUucnRiLnZpZGVvKSYmKGUucnRiLnZhc3RCYXNlNjQ9ZS5ydGIudmlkZW8pLHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdHx8e319LHRoaXMuX29uQWRBYnVzZWQ9bnVsbCx0aGlzLnNldEFidXNlSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLl9vbkFkQWJ1c2VkPWV9LHRoaXMuYWJ1c2VBZD1mdW5jdGlvbihlKXt0aGlzLl9vbkFkQWJ1c2VkJiYoMCxpKDcpLmlzRnVuY3Rpb24pKHRoaXMuX29uQWRBYnVzZWQpJiZ0aGlzLl9vbkFkQWJ1c2VkKGUpfSx0aGlzLmhhc1NlYXJjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5zZWFyY2hUZXh0fSx0aGlzLmdldFNpemU9ZnVuY3Rpb24oKXt2YXIgdD1lLnJ0YixpPXQud2lkdGgsbj10LmhlaWdodDtyZXR1cm5bMD09aT8iMTAwJSI6aSxuXX0sdGhpcy5nZXRVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5ydGIudXJsfSx0aGlzLmdldEh0bWw9ZnVuY3Rpb24oKXtyZXR1cm4hbyYmZSYmZS5ydGImJmUucnRiLmh0bWwmJihvPSgwLGkoMjkpLmRlY29kZSkoZS5ydGIuaHRtbCkpLG99LHRoaXMuaXNBcHA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21tb24mJiIxIj09ZS5jb21tb24uaXNNb2JpbGVTZGt9LHRoaXMuZ2V0TGlua1RhaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTZXR0aW5ncygpLmxpbmtUYWlsfSx0aGlzLmdldFZpZXdOb3RpY2VzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmdldFNldHRpbmdzKCk7cmV0dXJuIHQudmlld05vdGljZXMmJnQudmlld05vdGljZXMubGVuZ3RoJiYoZT1lLmNvbmNhdCh0LnZpZXdOb3RpY2VzKSksInN0cmluZyI9PXR5cGVvZiB0LnZpZXdOb3RpY2UmJiIiIT09dC52aWV3Tm90aWNlJiZlLnB1c2godC52aWV3Tm90aWNlKSxlPSgwLGkoMTQpLm1hcCkoZSxmdW5jdGlvbihlKXtyZXR1cm4gbmV3KGkoMjQpLlVybCkoe2hvc3Q6ZX0pLmdldFVybCgpfSksKDAsaSgyODQpLnVuaXF1ZSkoZSl9LHRoaXMuZ2V0V2luTm90aWNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZXR0aW5ncygpLndpbk5vdGljZTtyZXR1cm4gbmV3KGkoMjQpLlVybCkoe2hvc3Q6ZX0pLmdldFVybCgpfSx0aGlzLmdldExhbmd1YWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tbW9uJiZlLmNvbW1vbi5wYWdlTGFuZ3x8IjEifSx0aGlzLmlzU1NQPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5jb21tb24mJmUuY29tbW9uLnNzcElkO3JldHVybiBudWxsIT10JiYwIT10fSx0aGlzLmdldFNTUElkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbDtyZXR1cm4gZS5jb21tb24mJmUuY29tbW9uLnNzcElkJiYodD1lLmNvbW1vbi5zc3BJZCksdH0sbi5jbGlja01hY3JvJiYoMCxpKDE5KS5pc1N0cmluZykobi5jbGlja01hY3JvKSYmIXQuY2xpY2tNYWNybyYmKCgwLGkoMzU0KS5jYW5Vc2VDbGlja01hY3JvKSh3aW5kb3cpfHx0aGlzLmlzU1NQKCkpJiYodC5jbGlja01hY3JvPW4uY2xpY2tNYWNybyksdGhpcy5nZXRBYnVzZVVybD1mdW5jdGlvbigpe3JldHVybiBuLmlzSW5PdmVybGF5P251bGw6ZS5ydGIuYWJ1c2VMaW5rfSx0aGlzLmdldFVuaXF1ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIG4udW5pcXVlSWR9LHRoaXMuX3Zpc2liaWxpdHlUaW1lPSgwLGkoMjYzKS5jYWxjVmlzaWJpbGl0eVRpbWUpKHRoaXMuZ2V0U2V0dGluZ3MoKSksdGhpcy5sb2FkSHRtbD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7KDAsaSgxMzQpLnJlcXVlc3QpKHt1cmw6ZS5nZXRVcmwoKSxtZXRob2Q6ImdldCIscmV0cmllczowLHdpdGhDcmVkZW50aWFsczohMSxvblN1Y2Nlc3M6ZnVuY3Rpb24oZSl7bz1lLnJlc3BvbnNlLHQoKX0sb25FcnJvcjpmdW5jdGlvbigpe3JldHVybiBuKCl9fSl9KX0sdGhpcy5nZXRWaXNpYmlsaXR5VGltZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92aXNpYmlsaXR5VGltZX0sdGhpcy5nZXRIb25leXBvdD1mdW5jdGlvbigpe3ZhciB0PWUudmlzaWJpbGl0eVNldHRpbmdzO3JldHVybiB0JiZ0LmV4cFNob3d8fDB9LHRoaXMuZ2V0QmFzZVBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0hUTUw1KCk/ZS5ydGIuYmFzZVBhdGg6bnVsbH0sdGhpcy5pc01lZGlhQWRhcHRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihOdW1iZXIoZS5ydGIuZmxleGlibGUpKX0sdGhpcy5pc0ludGVyc3RpdGlhbD0oMCxpKDE1OCkuaXNOYW5wdUludGVyc3RpdGlhbCkobiksdGhpcy5nZXRQb3N0ZXJTcmM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5ydGImJmUucnRiLnBvc3RlclNyY30sdGhpcy5pc0hUTUw1PWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oZS5ydGIuaHRtbDUpfSx0aGlzLm5lZWRMb2FkaW5nU1NQPWZ1bmN0aW9uKCl7cmV0dXJuIWUucnRiLmh0bWwmJnRoaXMuZ2V0VXJsKCkmJigoMCxpKDE2KS5jaGVja0J1bmRsZVR5cGUpKGkoMTYpLmJ1bmRsZVR5cGVzLlNTUCkmJnRoaXMuaXNIVE1MNSgpfHx0aGlzLmlzSW5saW5lU1NQKCkpfSx0aGlzLmlzSW5saW5lU1NQPWZ1bmN0aW9uKCl7cmV0dXJuKDAsaSgxNikuY2hlY2tCdW5kbGVUeXBlKShpKDE2KS5idW5kbGVUeXBlcy5TU1ApJiZCb29sZWFuKG4uc3NwSW5saW5lKX0sdGhpcy5pc0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4oMCxpKDEyNSkuaXNGdWxsc2NyZWVuKSh0aGlzLmdldFNldHRpbmdzKCkpfSx0aGlzLmlzSW50ZXJzY3JvbGxlcj1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuZ2V0U2V0dGluZ3MoKS5pbnRlcnNjcm9sbGVyKX0sdGhpcy5nZXRTbG90SW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbi5zbG90SW5kZXh9LHRoaXMuaXNSZWZyZXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZWZyZXNofHwhMX19fSxmdW5jdGlvbihlLHQsaSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aS5lKDApLnRoZW4oZnVuY3Rpb24oKXtlKGkoODU4KSl9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe3QmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fSxmdW5jdGlvbihlLHQsaSl7dmFyIG4sbyxyPSExO2Z1bmN0aW9uIGEoKXtuPVtdLGkuZSgzOCkudGhlbihmdW5jdGlvbigpe289aSg4NTkpO2Zvcih2YXIgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyluW2VdLnN1Y2Nlc3Mobyk7cj0hMSxuPW51bGx9LmJpbmQodW5kZWZpbmVkLGkpKS5jYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyluW2VdLmVycm9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPSEwLG49bnVsbH0pfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3Q9dHx8ZnVuY3Rpb24oKXt9LG8/ZShvKToociYmYSgpLG4ucHVzaCh7c3VjY2VzczplLGVycm9yOnR9KSl9LGEoKX0sZnVuY3Rpb24oZSx0LGkpe3ZhciBuLG8scj0hMTtmdW5jdGlvbiBhKCl7bj1bXSxpLmUoNjMpLnRoZW4oZnVuY3Rpb24oKXtvPWkoODYwKTtmb3IodmFyIGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5zdWNjZXNzKG8pO3I9ITEsbj1udWxsfS5iaW5kKHVuZGVmaW5lZCxpKSkuY2F0Y2goZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5lcnJvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj0hMCxuPW51bGx9KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxvP2Uobyk6KHImJmEoKSxuLnB1c2goe3N1Y2Nlc3M6ZSxlcnJvcjp0fSkpfSxhKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0T2JqZWN0VmFsdWVzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC52YWx1ZXM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQoZSk7dmFyIG49W107Zm9yKHZhciBvIGluIGUpaSgxMzkpLmhhc093blByb3BlcnR5KGUsbykmJm4ucHVzaChlW29dKTtyZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNDaHJvbWU9aSgyOTApLmdldElzQ2hyb21lKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNZYUJyb3dzZXI9aSgyMDIpLmdldElzWWFCcm93c2VyKCl9LGZ1bmN0aW9uKGUsdCxpKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTAsaT1hcmd1bWVudHMubGVuZ3RoO3Q8aTt0KyspZSs9YXJndW1lbnRzW3RdLmxlbmd0aDt2YXIgbj1BcnJheShlKSxvPTA7Zm9yKHQ9MDt0PGk7dCsrKWZvcih2YXIgcj1hcmd1bWVudHNbdF0sYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyxvKyspbltvXT1yW2FdO3JldHVybiBufTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89aSgzOCkscj1vLnJlbW92ZSxhPW8uYXBwZW5kU3R5bGUscz0zZTMsbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9dGhpczt0aGlzLnRocm90dGxpbmdDYWxsYmFjaz1pKDI0NykudGhyb3R0bGUoZnVuY3Rpb24oKXt0LmhpZGVJbWdzKCl9LHMsdGhpcyksdGhpcy5ub25jZT1lLHRoaXMub2JzZXJ2ZXI9e2Rpc2Nvbm5lY3Q6ZnVuY3Rpb24oKXt9fX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRXYXRjaGluZz1mdW5jdGlvbigpe3RoaXMuc3RvcFdhdGNoaW5nKCksdGhpcy50aHJvdHRsaW5nQ2FsbGJhY2soKTt2YXIgZT1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnRocm90dGxpbmdDYWxsYmFjayk7ZS5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5vYnNlcnZlcj1lfSxlLnByb3RvdHlwZS5zdG9wV2F0Y2hpbmc9ZnVuY3Rpb24oKXt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKX0sZS5wcm90b3R5cGUuZ2V0SW1ncz1mdW5jdGlvbigpe3JldHVybiBpKDExNSkubGlzdFRvQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nW2RhdGEtc3JjKj0iI0RTRCJdLGltZ1tzcmMqPSIjRFNEIl0nKSl9LGUucHJvdG90eXBlLmdldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0PWUuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cmJmUuY29udGVudFdpbmRvdy5kb2N1bWVudH1jYXRjaChlKXt9cmV0dXJuIHR9LGUucHJvdG90eXBlLnVwZGF0ZVN0eWxlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldERvY3VtZW50KGUpO2lmKHQpe3ZhciBpPXQuaGVhZHx8dC5ib2R5LG49dC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QuaXNEZWZhdWx0TmFtZXNwYWNlJiZ0LmlzRGVmYXVsdE5hbWVzcGFjZSgiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKSYmKGk9dC5kb2N1bWVudEVsZW1lbnQsbj10LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdHlsZSIpKSxuJiZpJiYobi5pbm5lckhUTUw9InN2ZywgaW1nIHt3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlfSIsaS5hcHBlbmRDaGlsZChuKSl9fSxlLnByb3RvdHlwZS5jcmVhdGVJZnJhbWU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7aSg0NykuZm9yT3duKGUsZnVuY3Rpb24oZSx0KXtvLnNldEF0dHJpYnV0ZSh0LGUpfSk7dmFyIHI9dGhpcy5nZXREb2N1bWVudChvKTtyZXR1cm4hcnx8ImNvbXBsZXRlIiE9PXIucmVhZHlTdGF0ZSYmImludGVyYWN0aXZlIiE9PXIucmVhZHlTdGF0ZT9vLm9ubG9hZD1mdW5jdGlvbigpe24udXBkYXRlU3R5bGVzKG8pLHQoKX06KHRoaXMudXBkYXRlU3R5bGVzKG8pLHQoKSksb30sZS5wcm90b3R5cGUuZGlmZk9iamVjdHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dO2Vbb10hPT10W29dJiYoaVtvXT1lW29dKX1yZXR1cm4gaX0sZS5wcm90b3R5cGUuaGlkZUNodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbz1bXTtpKDUpLmZvckVhY2goZSxmdW5jdGlvbihlKXt2YXIgYT1lLnBhcmVudEVsZW1lbnQscz1pKDE0NikuaWRlbnRpZnkoKSxsPXtzcmM6KGUuZGF0YXNldC5zcmN8fGUuZ2V0QXR0cmlidXRlKCJzcmMiKXx8IiIpLnJlcGxhY2UoIiNEU0QiLCIiKSxpZDplLmlkfHxpKDE0NikuaWRlbnRpZnkoKSxjbGFzczooZS5jbGFzc05hbWV8fCIiKSsiICIraSgyOCkuZ2V0QWxpYXMocyksc2Nyb2xsaW5nOiJubyIsdGFiSW5kZXg6LTEsbWFyZ2luSGVpZ2h0OiIwIixtYXJnaW5XaWR0aDoiMCIsaGlkZUZvY3VzOiEwLGFsbG93VHJhbnNwYXJlbmN5OiEwLGZyYW1lQm9yZGVyOiJubyIsc3R5bGU6ImRpc3BsYXk6IG5vbmUiLHNhbmRib3g6ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXBvcHVwcyBhbGxvdy1zY3JpcHRzIGFsbG93LWZvcm1zIn0sYz10LmNyZWF0ZUlmcmFtZShsLGZ1bmN0aW9uKCl7cihlKSxjLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKX0pO2EuaW5zZXJ0QmVmb3JlKGMsZSk7dmFyIHU9dC5kaWZmT2JqZWN0cyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKSksZD1uKGkoMTQpLm1hcChpKDEyMikuZ2V0T2JqZWN0RW50cmllcyh1KSxmdW5jdGlvbihlKXtyZXR1cm4gZS5qb2luKCI6Iil9KSxbInBvaW50ZXItZXZlbnRzOiBub25lIl0pO2Uud2lkdGgmJmQucHVzaCgid2lkdGg6ICIrZS53aWR0aCsicHggIWltcG9ydGFudCIpLGUuaGVpZ2h0JiZkLnB1c2goImhlaWdodDogIitlLmhlaWdodCsicHggIWltcG9ydGFudCIpLG8ucHVzaCgiLiIrcysiIHsiK2Quam9pbigiOyIpKyJ9IiksZS5zcmM9ZS5zcmMucmVwbGFjZSgiI0RTRCIsIiIpfSksYShvLmpvaW4oIiAiKSx0aGlzLm5vbmNlKX0sZS5wcm90b3R5cGUuaGlkZUltZ3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEltZ3MoKTtpZihlLmxlbmd0aCl7dmFyIHQ9aSgyMikuZmlsdGVyKGUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBCb29sZWFuKHQpfSk7dGhpcy5oaWRlQ2h1bmsodC5zbGljZSgwLDEwKSl9fSxlfSgpO3QuSW1nSGlkZXI9bH0sZnVuY3Rpb24oZSx0LGkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49W107ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMD09PWUuaW5kZXhPZih0LkZBS0VfSU1QX0lEKX10LkZBS0VfSU1QX0lEPSIxMDA1MDAiLHQuZ2VuZXJhdGVJbXBJZD1mdW5jdGlvbihlKXt2YXIgaT1uLmluZGV4T2YoZSk7cmV0dXJuLTE9PT1pJiYoaT1uLmxlbmd0aCxuLnB1c2goZSkpLHQuRkFLRV9JTVBfSUQrIl8iK2l9LHQuaXNGYWtlSW1wSWQ9byx0LmdldFJlYWxJbXBJZD1mdW5jdGlvbihlKXtyZXR1cm4gbyhlKT90LkZBS0VfSU1QX0lEOmV9fV0pLGZ1bmN0aW9uKCl7aWYod2luZG93LllhJiZZYS5SdW0mJndpbmRvdy5ZYS5lRWNpa1J2T2I5Zy5SdW1Mb2dnaW5nKXt2YXIgZT1kb2N1bWVudC5jdXJyZW50U2NyaXB0O2UmJllhLlJ1bS5zZW5kUmVzVGltaW5nKCI2MC4yMzM1IixlLnNyYyksWWEuUnVtLnNlbmRUaW1lTWFyaygiNjAuMjMzNS4xNDI4Iil9fSgpOw==" alt="">

Всё-всем спокойной ночи)))!!!

Обезумевший в обороне сержант ВСУ призывает всё взрывать и не бояться российского ядерного оружия

????Об этом в интервью украинской телеведущей-нацистке Янине Соколовой заявил убеждённый бандеровец, главный сержант батальона БПЛА 47 бригады ВСУ Рустам Мустафаев с позывным «Легион».?...

Киев жалуется на российские дроны в тылу, которые наводят ракеты

Украинские эксперты отмечают, что ВСУ все чаще стали жаловаться на присутствие российских дронов разведчиков, в глубоком тылу. Порой, возникают странные ассоциации, заявляют эксперты, эти дроны летают...

Обзор движения фронта с 15 по 21 апреля. Карты

Предупрежу, карта не отражает в точности реальную границу и всех ударов на фронте. Она для наглядности, насколько изменилась обстановка в СВО на апрель 2024-го года.У ВС РФ сохраняется стратегическая ...