Hong Kong Sevens 2027 · 9 to 11 Apr 2027
Asia’s most iconic rugby weekend. The Cathay/HSBC Hong Kong Sevens returns to Kai Tak Stadium from 9 to 11 April 2027 as the opening event of the HSBC SVNS World Championship. Three-day tickets, hospitality, flights and hotels from the UAE, arranged through ES Sport.
Dates 9 to 11 Apr 2027, Friday to Sunday, confirmed by the organisers
Stadium 50,000 Seats at Kai Tak, with a retractable roof and cooling
Since 1976 The premier tournament on the sevens circuit
Teams 30 Fifteen men’s and fifteen women’s sides
Hong Kong Sevens 2027 · 9 to 11 Apr 2027 · Kai Tak Stadium, Hong Kong · Register Interest
The event
The One They AllWant To Win.
Every sevens player wants to win Hong Kong. Founded in 1976 and now the first leg of the HSBC SVNS World Championship, it is the tournament every player measures themselves against, with the world’s leading men’s and women’s teams on the same three-day bill.
Since 2025 the Sevens has lived at Kai Tak Stadium: 50,000 seats, a soundproof retractable roof, in-stadium cooling and a Fan Village open until 10.30 pm, ten minutes’ walk from two MTR stations. The South Stand remains the South Stand.
From the UAE it is a long weekend: overnight flights out, three days of rugby and the city, and home for Monday. ES Sport arranges the tickets, the hospitality, the flights and the hotel as one booking.
Kai Tak Stadium, Hong Kong
Tickets and packages · Through ES Sport Choose Your Weekend. Three-day tickets, hospitality and travel from the UAE. Availability and pricing confirmed on enquiry.
← →
✓ The opening leg of the HSBC SVNS World Championship, so every side arrives with something to prove✓ Men’s and women’s tournaments on the same three days, 64 matches across the weekend✓ Kai Tak Stadium : 50,000 seats, retractable roof, cooling and a Fan Village until 10.30 pm✓ The South Stand , the most famous crowd in sevens rugby✓ The city : Victoria Harbour, the Peak, Kowloon dining, all within thirty minutes of the ground✓ One booking from the UAE: flights, hotel, transfers and seats together, through ES Sport
Friday Pool matches begin. The crowd builds through the day; the Fan Village runs into the evening.
Saturday The busiest day: remaining pool games and the first knockouts, and the South Stand in full costume.
Sunday Quarter-finals through to the cup finals for both the men’s and women’s tournaments.
Getting There Ten minutes’ walk from Kai Tak or Sung Wong Toi MTR. The stadium is fully cashless. ES Sport transfers available.
The venue
Kai Tak Stadium,Kowloon.
Built on the site of the old Kai Tak Airport, the 50,000-seat main stadium of Kai Tak Sports Park hosted its first Sevens in March 2025.
A retractable roof, in-stadium cooling and a 30-minute catchment covering Central, Tsim Sha Tsui and Kowloon East, so hotels on either side of the harbour work.
Kai Tak Sports Park
Dates When is the Hong Kong Sevens 2027?
Friday 9 to Sunday 11 April 2027 at Kai Tak Stadium, Kai Tak Sports Park, confirmed by the organisers.
Tickets Can I buy a single day?
The organisers release three-day tickets first, with single-day tickets following through official partners. Tell us which days and how many seats and we will confirm what is available.
Hospitality Is there corporate hospitality?
Yes. Premium seating with food and drink is available for groups and client hosting. ES Sport confirms the options and pricing on enquiry.
Travel Can you arrange flights and hotels from the UAE?
Yes. Fly, Stay And Play packages combine flights from Dubai or Abu Dhabi, a hotel, transfers and tickets in one booking. Kai Tak is about an hour from the airport by MTR.
Booking How do I book?
Register your interest with the number of seats, whether you want hospitality and whether you need flights and a hotel. ES Sport confirms availability and pricing by email.
×
Enquire
Hong Kong Sevens 2027.
We’ll get back to you.
IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzLXBhZ2UiKTswLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0PW51bGw7dHJ5e3Q9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImVzVGhlbWUiKX1jYXRjaChTKXt9ImxpZ2h0Ij09PXR8fCJkYXJrIj09PXQ/ZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLHQpOndpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiKS5tYXRjaGVzJiZlLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsImxpZ2h0Iik7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZW1lQnRuIiksYT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcztmdW5jdGlvbiBvKHQpe2Uuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIix0KTt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImVzVGhlbWUiLHQpfWNhdGNoKFMpe319bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgdD0ibGlnaHQiPT09ZS5nZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiKT8iZGFyayI6ImxpZ2h0IjtpZihuLmNsYXNzTGlzdC5hZGQoInNwaW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJzcGluIil9LDUyMCksIWEmJmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pe3ZhciBpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1pLmxlZnQraS53aWR0aC8yLHI9aS50b3AraS5oZWlnaHQvMixzPU1hdGguaHlwb3QoTWF0aC5tYXgoYyx3aW5kb3cuaW5uZXJXaWR0aC1jKSxNYXRoLm1heChyLHdpbmRvdy5pbm5lckhlaWdodC1yKSk7ZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihmdW5jdGlvbigpe28odCl9KS5yZWFkeS50aGVuKGZ1bmN0aW9uKCl7ZS5hbmltYXRlKHtjbGlwUGF0aDpbImNpcmNsZSgwcHggYXQgIitjKyJweCAiK3IrInB4KSIsImNpcmNsZSgiK3MrInB4IGF0ICIrYysicHggIityKyJweCkiXX0se2R1cmF0aW9uOjYyMCxlYXNpbmc6ImN1YmljLWJlemllciguNCwwLC4yLDEpIixwc2V1ZG9FbGVtZW50OiI6OnZpZXctdHJhbnNpdGlvbi1uZXcocm9vdCkifSl9KS5jYXRjaChmdW5jdGlvbigpe30pfWVsc2UhZnVuY3Rpb24odCl7ZS5jbGFzc0xpc3QuYWRkKCJ0aGVtaW5nIiksbyh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5jbGFzc0xpc3QucmVtb3ZlKCJ0aGVtaW5nIil9LDU2MCl9KHQpfSk7dmFyIGk9ZnVuY3Rpb24oKXt9OyFmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoZXJvVGl0bGUiKSx0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5oZXJvLXBpbGxhcnMiKTtpZihlJiZ0JiYhYSYmZS5hbmltYXRlKXt2YXIgbj0yNDAsbz1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5jaGlsZE5vZGVzKTtmdW5jdGlvbiBvKGUsYSl7ZS5zcGxpdCgvKFxzKykvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUpaWYoL15ccyskLy50ZXN0KGUpKWEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7ZWxzZXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7by5jbGFzc05hbWU9InciLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZSxmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7dC5jbGFzc05hbWU9ImMiLHQudGV4dENvbnRlbnQ9ZSxvLmFwcGVuZENoaWxkKHQpLG4ucHVzaCh0KX0pLGEuYXBwZW5kQ2hpbGQobyksdC5wdXNoKG8pfX0pfXJldHVybiBlLmlubmVySFRNTD0iIixhLmZvckVhY2goZnVuY3Rpb24odCl7aWYoMz09PXQubm9kZVR5cGUpbyh0LnRleHRDb250ZW50LGUpO2Vsc2V7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7bi5jbGFzc05hbWU9dC5jbGFzc05hbWUsZS5hcHBlbmRDaGlsZChuKSxvKHQudGV4dENvbnRlbnQsbil9fSkse3dvcmRzOnQsY2hhcnM6bn19KGUpLGM9dC5xdWVyeVNlbGVjdG9yQWxsKCJhIik7dC5jbGFzc0xpc3QuYWRkKCJsaWZ0IiksQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUpe2Uuc3R5bGUub3BhY2l0eT0iMCJ9KSxpPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLnJlYWR5P2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4ocikuY2F0Y2gocik6cigpfX1mdW5jdGlvbiByKCl7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoImVtIik7aWYoIXQpcmV0dXJuIG51bGw7dmFyIG49dC5xdWVyeVNlbGVjdG9yQWxsKCIudyIpO2lmKG4ubGVuZ3RoPDIpcmV0dXJuIG51bGw7Zm9yKHZhciBhPW5bMF0ucXVlcnlTZWxlY3RvckFsbCgiLmMiKSxvPW5bMV0ucXVlcnlTZWxlY3RvckFsbCgiLmMiKSxpPW51bGwsYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKWlmKCJ0Ij09PW9bY10udGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKSl7aT1vW2NdO2JyZWFrfXJldHVybiBhWzBdJiZhWzFdJiZpP1thWzBdLGFbMV0saV06bnVsbH0oKTtpZighYXx8Yy5sZW5ndGg8MylyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUpe2Uuc3R5bGUub3BhY2l0eT0iIn0pLHZvaWQgdC5jbGFzc0xpc3QucmVtb3ZlKCJsaWZ0Iik7by5jaGFycy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5hbmltYXRlKFt7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDQ2cHgpIixvcGFjaXR5OjB9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkiLG9wYWNpdHk6MX1dLHtkdXJhdGlvbjo4NjAsZGVsYXk6MjQqdCxlYXNpbmc6ImN1YmljLWJlemllciguMTYsMSwuMywxKSIsZmlsbDoiYm90aCJ9KX0pO3ZhciBpPVtdO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYyxmdW5jdGlvbihlLHQpe3ZhciBuPWFbdF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2kucHVzaCh7ZWw6ZSxkeDpuLmxlZnQtby5sZWZ0LGR5Om4udG9wLW8udG9wfSl9KTt2YXIgcj0xMTgwLHM9MDtpLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbz0xZTMrMzgwKnQ7cz1NYXRoLm1heChzLG8rNTArcik7dmFyIGk9Z2V0Q29tcHV0ZWRTdHlsZShhW3RdKS5jb2xvcjthW3RdLmFuaW1hdGUoW3t0cmFuc2Zvcm06InNjYWxlKDEpIixjb2xvcjppfSx7dHJhbnNmb3JtOiJzY2FsZSgxLjMpIixjb2xvcjoiI0VCQjQ0NiIsb2Zmc2V0Oi4zMyxlYXNpbmc6ImN1YmljLWJlemllciguMjUsLjQ2LC40NSwuOTQpIn0se3RyYW5zZm9ybToic2NhbGUoMSkiLGNvbG9yOmksZWFzaW5nOiJjdWJpYy1iZXppZXIoLjM0LDEuNTYsLjY0LDEpIn1dLHtkdXJhdGlvbjo0NTAsZGVsYXk6byxmaWxsOiJub25lIn0pO3ZhciBjPSJ0cmFuc2xhdGUoIitlLmR4KyJweCwiK2UuZHkrInB4KSBzY2FsZSgxLjQsMS40KSI7ZS5lbC5hbmltYXRlKFt7dHJhbnNmb3JtOmMsb3BhY2l0eTowLG9mZnNldDowfSx7dHJhbnNmb3JtOmMsb3BhY2l0eToxLG9mZnNldDoxMzAvcn0se3RyYW5zZm9ybTpjLG9wYWNpdHk6MSxvZmZzZXQ6bi9yLGVhc2luZzoiY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpIn0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMSkiLG9wYWNpdHk6MSxvZmZzZXQ6ODgwL3IsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDAuODUpIixvcGFjaXR5OjEsb2Zmc2V0Ojk3MC9yLGVhc2luZzoiZWFzZS1vdXQifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDoxfV0se2R1cmF0aW9uOnIsZGVsYXk6bys1MCxmaWxsOiJib3RoIn0pfSksc2V0VGltZW91dChmdW5jdGlvbigpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYyxmdW5jdGlvbihlKXtlLmdldEFuaW1hdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2FuY2VsKCl9KSxlLnN0eWxlLm9wYWNpdHk9IiIsZS5zdHlsZS50cmFuc2Zvcm09IiJ9KSx0LmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKX0scys0MCl9fSgpO3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc0xvYWRlciIpLHI9ZG9jdW1lbnQuYm9keSxzPSEwO3RyeXtzPSEwfWNhdGNoKFMpe31mdW5jdGlvbiBsKCl7Yy5jbGFzc0xpc3QuYWRkKCJpcy1vdXQiKSxyLmNsYXNzTGlzdC5yZW1vdmUoImVzbC1sb2NrIiksc2V0VGltZW91dChmdW5jdGlvbigpe2MuaGlkZGVuPSEwfSw3MDApO3RyeXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCJlc1NlZW5Mb2FkZXIiLCIxIil9Y2F0Y2goUyl7fXNldFRpbWVvdXQoaSwzMDApfXM/KGMuaGlkZGVuPSEwLHIuY2xhc3NMaXN0LnJlbW92ZSgiZXNsLWxvY2siKSxzZXRUaW1lb3V0KGksMjYwKSk6KHNldFRpbWVvdXQobCwyMDUwKSxjLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixsKSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmNhci1idG4iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5kYXRhc2V0LnRhcmdldCk7aWYodCl7dmFyIG49dC5maXJzdEVsZW1lbnRDaGlsZCxhPW4/bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCs0Oi44KnQuY2xpZW50V2lkdGg7dC5zY3JvbGxCeSh7bGVmdDphKitlLmRhdGFzZXQuZGlyLGJlaGF2aW9yOiJzbW9vdGgifSl9fSl9KSxmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5mY2hpcCIpLGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm5jYXJkW2RhdGEtc3BvcnRdIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2F0RW1wdHkiKTtpZih0Lmxlbmd0aCYmYS5sZW5ndGgpe3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciBvPWUuZGF0YXNldC5maWx0ZXIsaT0wO2EuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0iYWxsIj09PW98fGUuZGF0YXNldC5zcG9ydD09PW87ZS5jbGFzc0xpc3QudG9nZ2xlKCJpcy1oaWRkZW4iLCF0KSx0JiYoaSs9MSxlLmNsYXNzTGlzdC5hZGQoInYiKSl9KSxuJiYobi5oaWRkZW49aT4wKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIucm93LC5jYXRhbG9ndWUtd3JhcCIpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGM9ci5xdWVyeVNlbGVjdG9yQWxsKCIubmNhcmQiKTtpZihjLmxlbmd0aCl7dmFyIHY9ci5xdWVyeVNlbGVjdG9yQWxsKCIubmNhcmQ6bm90KC5pcy1oaWRkZW4pIikubGVuZ3RoO3IuY2xhc3NMaXN0LnRvZ2dsZSgiaXMtZW1wdHkiLHY9PT0wKX19KSx0LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhc2V0LmZpbHRlcj09PW87ZS5jbGFzc0xpc3QudG9nZ2xlKCJpcy1vbiIsdCksZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLHQ/InRydWUiOiJmYWxzZSIpfSl9KX0pfX0oKTt2YXIgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmZpTW9kYWwiKSx1PWQucXVlcnlTZWxlY3RvcigiLnJmaS1kbGciKSxmPW51bGwsbT1udWxsLGg9MDtmdW5jdGlvbiBwKCl7aWYoIShoKys+MCkpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtlPjAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1lKyJweCIpLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9fWZ1bmN0aW9uIHkoKXsoaD1NYXRoLm1heCgwLGgtMSkpPjB8fChkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSIiLGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PSIiKX1mdW5jdGlvbiB2KCl7ZC5oaWRkZW58fChkLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxkLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKSxjbGVhclRpbWVvdXQobSksbT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5oaWRkZW49ITAsZC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpLGYmJmYuZm9jdXMmJmYuZm9jdXMoKSxmPW51bGx9LGE/MDoyNDApKX1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcGVuLXJmaV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgbixvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZQYW5lbCIpO2lmKG8mJiFvLmhpZGRlbil7by5jbGFzc0xpc3QucmVtb3ZlKCJpcy1vcGVuIiksby5jbGFzc0xpc3QuYWRkKCJpcy1jbG9zaW5nIik7dmFyIGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdkJ1cmdlciIpO2kmJihpLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksaS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUiKSksc2V0VGltZW91dChmdW5jdGlvbigpe28uaGlkZGVuPSEwLG8uY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLHkoKX0sYT8wOjI2MCl9bj1lLGNsZWFyVGltZW91dChtKSxmPW58fG51bGwsZC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIiksZC5oaWRkZW49ITEscCgpLGQub2Zmc2V0V2lkdGgsZC5jbGFzc0xpc3QuYWRkKCJpcy1vcGVuIiksc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmLWZpcnN0Iik7aWYoZSl0cnl7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfWNhdGNoKFMpe2UuZm9jdXMoKX19LGE/MDoyNjApfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1jbG9zZS1yZmldIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3YoKX0pfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7IkVzY2FwZSIhPT1lLmtleXx8ZC5oaWRkZW58fHYoKX0pLGQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7aWYoIlRhYiI9PT1lLmtleSl7Zm9yKHZhciB0PXUucXVlcnlTZWxlY3RvckFsbCgiYVtocmVmXSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEiKSxuPVtdLGE9MDthPHQubGVuZ3RoO2ErKyludWxsIT09dFthXS5vZmZzZXRQYXJlbnQmJm4ucHVzaCh0W2FdKTtpZihuLmxlbmd0aCl7dmFyIG89blswXSxpPW5bbi5sZW5ndGgtMV07ZS5zaGlmdEtleSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW8/KGUucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCkpOmUuc2hpZnRLZXl8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1pfHwoZS5wcmV2ZW50RGVmYXVsdCgpLG8uZm9jdXMoKSl9fX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0uZm9ybSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgdD1lLnRhcmdldDtpZih0LmNoZWNrVmFsaWRpdHkoKSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCIuc2VudCIpfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VudCIpLGE9dC5kYXRhc2V0LmVuZHBvaW50LG89ZnVuY3Rpb24oKXt2YXIgcz1uO24mJnMuY2xhc3NMaXN0LmFkZCgib24iKTt0LnJlc2V0KCk7c2V0VGltZW91dChmdW5jdGlvbigpe24mJnMuY2xhc3NMaXN0LnJlbW92ZSgib24iKX0sNzAwMCl9O2E/ZmV0Y2goYSx7bWV0aG9kOiJQT1NUIixib2R5Om5ldyBGb3JtRGF0YSh0KX0pLnRoZW4obykuY2F0Y2gobyk6bygpfWVsc2UgdC5yZXBvcnRWYWxpZGl0eSgpfSl9KTt2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2QnVyZ2VyIiksRT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2UGFuZWwiKSxiPW51bGw7ZnVuY3Rpb24gTCgpe0UuaGlkZGVufHwoRS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1vcGVuIiksRS5jbGFzc0xpc3QuYWRkKCJpcy1jbG9zaW5nIiksZy5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiT3BlbiBtZW51IiksY2xlYXJUaW1lb3V0KGIpLGI9c2V0VGltZW91dChmdW5jdGlvbigpe0UuaGlkZGVuPSEwLEUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLHkoKX0sYT8wOjI2MCkpfWcuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7RS5oaWRkZW4/KGNsZWFyVGltZW91dChiKSxFLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSxFLmhpZGRlbj0hMSxwKCksRS5vZmZzZXRXaWR0aCxFLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxnLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsInRydWUiKSxnLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkNsb3NlIG1lbnUiKSk6TCgpfSksRS5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1jbG9zZS1tZW51XSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtMKCl9KX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGUpeyJFc2NhcGUiIT09ZS5rZXl8fEUuaGlkZGVufHwoTCgpLGcuZm9jdXMoKSl9KTt2YXIgdz13aW5kb3cubWF0Y2hNZWRpYSgiKG1pbi13aWR0aDogMTAwMXB4KSIpLHg9ZnVuY3Rpb24oZSl7ZS5tYXRjaGVzJiZMKCl9O3cuYWRkRXZlbnRMaXN0ZW5lcj93LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIseCk6dy5hZGRMaXN0ZW5lciYmdy5hZGRMaXN0ZW5lcih4KTt2YXIgQT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Iik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZnVuY3Rpb24oKXtBLmNsYXNzTGlzdC50b2dnbGUoInNjcm9sbGVkIix3aW5kb3cuc2Nyb2xsWT42MCl9KTt2YXIgcT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaXNJbnRlcnNlY3RpbmcmJihlLnRhcmdldC5jbGFzc0xpc3QuYWRkKCJ2IikscS51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7dGhyZXNob2xkOi4wOH0pO2UmJmUuY2xhc3NMaXN0LmFkZCgianMiKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuciwgLnNlY3Rpb24taGVhZGVyIikuZm9yRWFjaChmdW5jdGlvbihlKXtxLm9ic2VydmUoZSl9KX0oKSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc3hUaXRsZSIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzeFBpbGxhcnMiKTtpZih0JiZuJiYhZSYmdC5hbmltYXRlKXt2YXIgYT0yNDAsbz1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuY2hpbGROb2Rlcyk7ZnVuY3Rpb24gYShlLG4pe2Uuc3BsaXQoLyhccyspLykuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlKWlmKC9eXHMrJC8udGVzdChlKSluLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpO2Vsc2V7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2EuY2xhc3NOYW1lPSJ3IixBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO24uY2xhc3NOYW1lPSJjIixuLnRleHRDb250ZW50PWUsYS5hcHBlbmRDaGlsZChuKSx0LnB1c2gobil9KSxuLmFwcGVuZENoaWxkKGEpfX0pfXJldHVybiBlLmlubmVySFRNTD0iIixuLmZvckVhY2goZnVuY3Rpb24odCl7aWYoMz09PXQubm9kZVR5cGUpYSh0LnRleHRDb250ZW50LGUpO2Vsc2V7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7bi5jbGFzc05hbWU9dC5jbGFzc05hbWUsZS5hcHBlbmRDaGlsZChuKSxhKHQudGV4dENvbnRlbnQsbil9fSksdH0odCksaT1uLnF1ZXJ5U2VsZWN0b3IoImEiKTtuLmNsYXNzTGlzdC5hZGQoImxpZnQiKSxpJiYoaS5zdHlsZS5vcGFjaXR5PSIwIik7dmFyIGVzeFRhZz1uLnF1ZXJ5U2VsZWN0b3IoImxpOm50aC1jaGlsZCgyKSIpO2VzeFRhZyYmZXN4VGFnLmNsYXNzTGlzdC5hZGQoInRhZy13YWl0Iik7dmFyIGM9ITA7dHJ5e2M9ITB9Y2F0Y2gocyl7fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVhZHk/ZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihyKS5jYXRjaChyKTpyKCl9LGM/MjYwOjIzNTApfWZ1bmN0aW9uIHIoKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlPXQucXVlcnlTZWxlY3RvcigiZW0iKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIi53Iik7aWYoIWEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBvPXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJkYXRhLXNyYy1pbmRleCIpfHwiMCIsMTApfHwwLGk9YVswXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpO3JldHVybiBpW29dfHxpWzBdfHxudWxsfSgpO2lmKCFlfHwhaSlyZXR1cm4gaSYmKGkuc3R5bGUub3BhY2l0eT0iIiksZXN4VGFnJiZlc3hUYWcuY2xhc3NMaXN0LnJlbW92ZSgidGFnLXdhaXQiKSx2b2lkIG4uY2xhc3NMaXN0LnJlbW92ZSgibGlmdCIpO28uZm9yRWFjaChmdW5jdGlvbihlLHQpe2UuYW5pbWF0ZShbe3RyYW5zZm9ybToidHJhbnNsYXRlWSg0NnB4KSIsb3BhY2l0eTowfSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIixvcGFjaXR5OjF9XSx7ZHVyYXRpb246ODYwLGRlbGF5OjI0KnQsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjE2LDEsLjMsMSkiLGZpbGw6ImJvdGgifSl9KTt2YXIgYz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPU1hdGgubWluKDEuNCxNYXRoLm1heCguMixjLmhlaWdodC9yLmhlaWdodCoxLjE1KSksbD1jLmxlZnQtci5sZWZ0LGQ9Yy5ib3R0b20tci5ib3R0b20sdT0xMTgwLGY9MWUzLG09Z2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InNjYWxlKDEpIixjb2xvcjptfSx7dHJhbnNmb3JtOiJzY2FsZSgxLjMpIixjb2xvcjoiI0VCQjQ0NiIsb2Zmc2V0Oi4zMyxlYXNpbmc6ImN1YmljLWJlemllciguMjUsLjQ2LC40NSwuOTQpIn0se3RyYW5zZm9ybToic2NhbGUoMSkiLGNvbG9yOm0sZWFzaW5nOiJjdWJpYy1iZXppZXIoLjM0LDEuNTYsLjY0LDEpIn1dLHtkdXJhdGlvbjo0NTAsZGVsYXk6ZixmaWxsOiJub25lIn0pO3ZhciBoPSJ0cmFuc2xhdGUoIitsKyJweCwiK2QrInB4KSBzY2FsZSgiK3MrIiwiK3MrIikiO2kuYW5pbWF0ZShbe3RyYW5zZm9ybTpoLG9wYWNpdHk6MCxvZmZzZXQ6MH0se3RyYW5zZm9ybTpoLG9wYWNpdHk6MSxvZmZzZXQ6MTMwL3V9LHt0cmFuc2Zvcm06aCxvcGFjaXR5OjEsb2Zmc2V0OmEvdSxlYXNpbmc6ImN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKSJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0Ojg4MC91LGVhc2luZzoiZWFzZS1vdXQifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwwLjg1KSIsb3BhY2l0eToxLG9mZnNldDo5NzAvdSxlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMSkiLG9wYWNpdHk6MSxvZmZzZXQ6MX1dLHtkdXJhdGlvbjp1LGRlbGF5OjEwNTAsZmlsbDoiYm90aCJ9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5nZXRBbmltYXRpb25zKCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNhbmNlbCgpfSksaS5zdHlsZS5vcGFjaXR5PSIiLGkuc3R5bGUudHJhbnNmb3JtPSIiLG4uY2xhc3NMaXN0LnJlbW92ZSgibGlmdCIpLGVzeFRhZyYmKGVzeFRhZy5jbGFzc0xpc3QucmVtb3ZlKCJ0YWctd2FpdCIpLGVzeFRhZy5jbGFzc0xpc3QuYWRkKCJ0YWctaW4iKSl9LDIyNzApfX0oKSxmdW5jdGlvbigpe2lmKCghd2luZG93Lm1hdGNoTWVkaWF8fCF3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzKSYmIkludGVyc2VjdGlvbk9ic2VydmVyImluIHdpbmRvdyl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1vIik7dmFyIGU9WyIuc3RhY2sgPiAuaXRlbSIsIi5hY2MtaXRlbSIsIi5mYXEtaXRlbSIsIi5ib3V0IiwiLnZzdG9yeSIsIi50a2JveCIsIi5hYi1mcmFtZSIsIi5jbXAgdGJvZHkgdGQiLCIuY21wIHRoZWFkIHRoIiwiLnRhcGUtY2VsbCIsIi52cy1yb3ciLCIudmVudWUtc3BlY3MgPiAqIiwiLnpwLXRpZXIiLCIudGtncmlkIHRkIiwiLnN0YXRzID4gLnN0YXQiLCIuc3RhdHMgPiAuc3QiLCIudml0YWxzID4gLnZpdGFsIiwiLmhlcm8tbWV0YSA+IC5obSIsIi50aWVycyA+IC50aWVyIiwiLnZncmlkID4gLnZibG9jayIsIi5rYy1jYXJkIiwiLmFiLXNwZWMiLCIuaW5jLWxpc3QgPiBsaSIsIi5hcnRzID4gLmFydCIsIi5mb3JrID4gLnJvdXRlIiwiLmNhdGFsb2d1ZSAubmNhcmQiLCIub2NhcmQiLCIucGNhcmQiLCIuYmNhcmQiLCIucGNhcmRwIiwiLmZpdmV3LWdyaWQgPiAqIiwiLmxvZ29zID4gLmxvZ28iLCIuZXNtLWJhbmQiLCIubWFwLWNoaXAiLCIudGFwZS1ncmlkID4gLnRhcGUtY2VsbCIsIi5nY2FyZCJdLHQ9ZS5qb2luKCIsIik7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtbW9dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLm1hdGNoZXModCl8fGUucmVtb3ZlQXR0cmlidXRlKCJkYXRhLW1vIil9KTt2YXIgbj1bXTtpZihlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQsYT1udWxsLG89MDt0cnl7dD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfWNhdGNoKGkpe3JldHVybn10LmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuaGFzQXR0cmlidXRlKCJkYXRhLW1vIikpe3ZhciB0PWUucGFyZW50Tm9kZTtvPXQ9PT1hP28rMTowLGE9dCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1tbyIsIiIpLGUuc3R5bGUuc2V0UHJvcGVydHkoIi0tbW8tZCIsTWF0aC5taW4oNTAqbywzMDApKyJtcyIpLG4ucHVzaChlKX19KX0pLG4ubGVuZ3RoKXt2YXIgYT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuaXNJbnRlcnNlY3RpbmcmJihlLnRhcmdldC5jbGFzc0xpc3QuYWRkKCJtby1saXQiKSxhLnVub2JzZXJ2ZShlLnRhcmdldCkpfSl9LHtyb290TWFyZ2luOiIwcHggMHB4IC02JSAwcHgiLHRocmVzaG9sZDouMDV9KTtuLmZvckVhY2goZnVuY3Rpb24oZSl7YS5vYnNlcnZlKGUpfSksc2V0VGltZW91dChmdW5jdGlvbigpe24uZm9yRWFjaChmdW5jdGlvbihlKXtpZighZS5jbGFzc0xpc3QuY29udGFpbnMoIm1vLWxpdCIpKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QudG9wPGlubmVySGVpZ2h0JiZ0LmJvdHRvbT4wJiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw0ZTMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmdC5oZWlnaHQmJmUuY2xhc3NMaXN0LmFkZCgibW8tbGl0Iil9fSl9LDYwKX0pfX19KCksZnVuY3Rpb24oKXtbInhxRm9ybSIsInJmaSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dCYmdC5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe3QuY2hlY2tWYWxpZGl0eSgpJiYoKHQuZ2V0QXR0cmlidXRlKCJkYXRhLWVuZHBvaW50Iil8fCIiKS50cmltKCl8fCh3aW5kb3cubG9jYXRpb24uaHJlZj1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPWUucXVlcnlTZWxlY3RvcigiW25hbWU9ZXZlbnQtbmFtZV0iKTtyZXR1cm4gbiYmdC5wdXNoKCJFbnF1aXJ5OiAiK24udmFsdWUpLGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQ6bm90KFt0eXBlPWhpZGRlbl0pLHNlbGVjdCx0ZXh0YXJlYSIpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKCdsYWJlbFtmb3I9Iicrbi5pZCsnIl0nKSxvPWE/YS50ZXh0Q29udGVudC50cmltKCk6bi5uYW1lfHxuLmlkO24udmFsdWUmJnQucHVzaChvKyI6ICIrbi52YWx1ZSl9KSwibWFpbHRvOmluZm9AZXMtc3BvcnQuYWU/c3ViamVjdD0iK2VuY29kZVVSSUNvbXBvbmVudCgobj9uLnZhbHVlOiJXZWJzaXRlIGVucXVpcnkiKSsiIC0gZW5xdWlyeSIpKyImYm9keT0iK2VuY29kZVVSSUNvbXBvbmVudCh0LmpvaW4oIlxuIikpfSh0KSkpfSwhMCl9KTt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFNb2RhbCIpO2lmKGUmJiFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGF0YS14cS1uYXRpdmUiKSl7dmFyIHQsbj13aW5kb3cubWF0Y2hNZWRpYSYmbWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzLGE9bnVsbDtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcGVuLXhxXSIpLmZvckVhY2goZnVuY3Rpb24obyl7by5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oaSl7aS5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKG8pe2NsZWFyVGltZW91dCh0KSxhPW8sZS5oaWRkZW49ITEsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixlLm9mZnNldFdpZHRoLGUuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSIpO3QmJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sbj8wOjI2MCl9KG8pfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1jbG9zZS14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGkpfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24odCl7IkVzY2FwZSIhPT10LmtleXx8ZS5oaWRkZW58fGkoKX0pO3ZhciBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cUZvcm0iKTtvJiZvLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLG8uY2hlY2tWYWxpZGl0eSgpKXt2YXIgdD1vLmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxU2VudCIpLGE9ZnVuY3Rpb24oKXtuJiZuLmNsYXNzTGlzdC5hZGQoIm9uIik7by5yZXNldCgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiZuLmNsYXNzTGlzdC5yZW1vdmUoIm9uIil9LDcwMDApfTt0P2ZldGNoKHQse21ldGhvZDoiUE9TVCIsYm9keTpuZXcgRm9ybURhdGEobyl9KS50aGVuKGEpLmNhdGNoKGEpOmEoKX1lbHNlIG8ucmVwb3J0VmFsaWRpdHkoKX0pfWZ1bmN0aW9uIGkoKXtlLmhpZGRlbnx8KGUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGNsZWFyVGltZW91dCh0KSx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmhpZGRlbj0hMCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSIiLGEmJmEuZm9jdXMmJmEuZm9jdXMoKSxhPW51bGx9LG4/MDozNjApKX19KCl9KCk7CjsoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Iik7aWYoIW4pcmV0dXJuO3ZhciBmPWZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QudG9nZ2xlKCJzY3JvbGxlZCIsd2luZG93LnNjcm9sbFk+NjApfTtmKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VzaG93IixmKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZik7fSkoKTsKLyogZXZlbnQtZXh0cmFzLmpzOiBiZWhhdmlvdXJzIGZvciBhcmNoZXR5cGUgQyBldmVudCBwYWdlcywgYXBwZW5kZWQgYWZ0ZXIgbWFpbi1qcy5kZWNvZGVkLmpzCiAgIDEuIC5hY2MtaXRlbSBhY2NvcmRpb24gKEZBUSkgICAgICAgICAgMi4gLmVzLWRkIGV4cGFuZGFibGUgcGFuZWxzCiAgIDMuIGhlcm8gc3RhdCBjb3VudC11cCAocmVkdWNlZC1tb3Rpb24gc2FmZSkgICA0LiBwYWNrYWdlIGNhcmQgLT4gZW5xdWlyeSBtb2RhbCBwcmUtZmlsbAogICBSdWxlczogbm8gcmVnZXggbGl0ZXJhbHMsIG5vIC0tIGRlY3JlbWVudCAoTGl0ZVNwZWVkIG1pbmlmaWVyLWhvc3RpbGUgdG9rZW5zKS4gKi8KKGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiOwp2YXIgcmVkdWNlPXdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzOwovKiAxICsgMjogb25lIGFjY29yZGlvbiBtZWNoYW5pYyAqLwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYWNjLWl0ZW0iKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe3ZhciBxPWl0ZW0ucXVlcnlTZWxlY3RvcigiLmFjYy1xIik7aWYoIXEpcmV0dXJuO3EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG9wZW49aXRlbS5jbGFzc0xpc3QudG9nZ2xlKCJvcGVuIik7cS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG9wZW4/InRydWUiOiJmYWxzZSIpO30pO30pOwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZXMtZGQiKS5mb3JFYWNoKGZ1bmN0aW9uKGRkKXt2YXIgaGVhZD1kZC5xdWVyeVNlbGVjdG9yKCIuZXMtZGRfX2hlYWQiKTtpZighaGVhZClyZXR1cm47aGVhZC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgb3Blbj1kZC5nZXRBdHRyaWJ1dGUoImRhdGEtb3BlbiIpPT09InRydWUiO2RkLnNldEF0dHJpYnV0ZSgiZGF0YS1vcGVuIixvcGVuPyJmYWxzZSI6InRydWUiKTtoZWFkLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsb3Blbj8iZmFsc2UiOiJ0cnVlIik7fSk7fSk7Ci8qIDM6IHN0YXQgY291bnQtdXAgKi8KdmFyIG51bXM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnN0YXRzIC5zdGF0IC5uIik7CmlmKG51bXMubGVuZ3RoKXsKICB2YXIgcnVuPWZ1bmN0aW9uKGVsKXt2YXIgc3JjPWVsLnRleHRDb250ZW50LnRyaW0oKTt2YXIgaT0wLHByZT0iIixkaWdpdHM9IiIsc3VmPSIiO3doaWxlKGk8c3JjLmxlbmd0aCYmKHNyYy5jaGFyQXQoaSk8IjAifHxzcmMuY2hhckF0KGkpPiI5Iikpe3ByZSs9c3JjLmNoYXJBdChpKTtpKz0xO313aGlsZShpPHNyYy5sZW5ndGgmJigoc3JjLmNoYXJBdChpKT49IjAiJiZzcmMuY2hhckF0KGkpPD0iOSIpfHxzcmMuY2hhckF0KGkpPT09IiwiKSl7aWYoc3JjLmNoYXJBdChpKSE9PSIsIilkaWdpdHMrPXNyYy5jaGFyQXQoaSk7aSs9MTt9c3VmPXNyYy5zbGljZShpKTtpZighZGlnaXRzKXtyZXR1cm47fXZhciB0YXJnZXQ9cGFyc2VJbnQoZGlnaXRzLDEwKSxwYWQ9ZGlnaXRzLmxlbmd0aCx1c2VDb21tYT1zcmMuaW5kZXhPZigiLCIpPi0xO3ZhciBmbXQ9ZnVuY3Rpb24obil7dmFyIHM9U3RyaW5nKG4pO3doaWxlKHMubGVuZ3RoPHBhZCYmZGlnaXRzLmNoYXJBdCgwKT09PSIwIilzPSIwIitzO2lmKHVzZUNvbW1hKXt2YXIgb3V0PSIiLGM9MCxqPXMubGVuZ3RoLTE7d2hpbGUoaj49MCl7b3V0PXMuY2hhckF0KGopK291dDtjKz0xO2lmKGMlMz09PTAmJmo+MClvdXQ9IiwiK291dDtqLT0xO31zPW91dDt9cmV0dXJuIHByZStzK3N1Zjt9O2lmKHJlZHVjZXx8dGFyZ2V0Pjk5OTkpe2VsLnRleHRDb250ZW50PXNyYztyZXR1cm47fXZhciB0MD1udWxsLGR1cj0xNDAwO3ZhciBzdGVwPWZ1bmN0aW9uKHRzKXtpZih0MD09PW51bGwpdDA9dHM7dmFyIHA9TWF0aC5taW4oMSwodHMtdDApL2R1cik7dmFyIGU9MS1NYXRoLnBvdygxLXAsMyk7ZWwudGV4dENvbnRlbnQ9Zm10KE1hdGgucm91bmQodGFyZ2V0KmUpKTtpZihwPDEpcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO2Vsc2UgZWwudGV4dENvbnRlbnQ9c3JjO307cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO307CiAgaWYoIkludGVyc2VjdGlvbk9ic2VydmVyImluIHdpbmRvdyYmIXJlZHVjZSl7dmFyIGlvPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlbnRyaWVzKXtlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW4pe2lmKGVuLmlzSW50ZXJzZWN0aW5nKXtydW4oZW4udGFyZ2V0KTtpby51bm9ic2VydmUoZW4udGFyZ2V0KTt9fSk7fSx7dGhyZXNob2xkOi40fSk7bnVtcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lvLm9ic2VydmUobik7fSk7fQp9Ci8qIDQ6IHBhY2thZ2UgY2FyZHMgYW5kIENUQXMgY2FycnlpbmcgZGF0YS1jYXQgcHJlLWZpbGwgdGhlIGVucXVpcnkgZm9ybSAqLwpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcGVuLXJmaV1bZGF0YS1jYXRdIikuZm9yRWFjaChmdW5jdGlvbihidG4pe2J0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgY2F0PWJ0bi5nZXRBdHRyaWJ1dGUoImRhdGEtY2F0Iil8fCIiO3ZhciBzZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYtY2F0Iik7aWYoc2VsKXtmb3IodmFyIGs9MDtrPHNlbC5vcHRpb25zLmxlbmd0aDtrKz0xKXtpZihzZWwub3B0aW9uc1trXS50ZXh0PT09Y2F0KXtzZWwuc2VsZWN0ZWRJbmRleD1rO2JyZWFrO319fXZhciBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZmkgaW5wdXRbbmFtZT1lZWJfY2F0ZWdvcnldIik7aWYoaCloLnZhbHVlPWNhdDt9LHRydWUpO30pOwp9KSgp
Owo=
LyogZXNDYXJKczogY2Fyb3VzZWwgYXJyb3dzIGZvbGxvdyB0aGUgRXhwZXJpZW5jZXMgc3RhbmRhcmQgb24gZXZlcnkgcGFnZSAoQ0wtMjAyNjEwMDUtMDMs
IDUgT2N0IDIwMjYpLgogICBBIGNhcm91c2VsIHdob3NlIGNhcmRzIGFsbCBmaXQgc2hvd3Mgbm8gYXJyb3dzOiBlYWNoIC5jYXItbmF2IGdldHMgLm5vLXNj
cm9sbCB3aGlsZSB0aGUgdHJhY2sgaXRzIGJ1dHRvbnMgcG9pbnQgYXQKICAgKGRhdGEtdGFyZ2V0KSBoYXMgbm90aGluZyB0byBzY3JvbGwuIFJlLWNoZWNr
ZWQgd2hlbiB0aGUgdHJhY2sgb3IgYSBjYXJkIGNoYW5nZXMgc2l6ZSAod2luZG93IHJlc2l6ZSwgdGhlCiAgIEV4cGVyaWVuY2VzIGZpbHRlciBjaGlwcyBo
aWRpbmcgY2FyZHMpIGFuZCBvbiBsb2FkLCB3aGVuIGxhdGUgZm9udHMgYW5kIGltYWdlcyBoYXZlIHNldHRsZWQuCiAgIFNvdXJjZSBvZiB0cnV0aDogdGVt
cGxhdGUvZnJhZ21lbnRzL2Nhcm91c2VsLWpzLmpzLCBzaGlwcGVkIGJ5IHNjcmlwdHMvY2Fyb3VzZWxfYXJyb3dzXzIwMjYtMTAtMDUucHkuICovCihmdW5j
dGlvbiAoKSB7CiAgdmFyIG5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyLW5hdicpOwogIGlmICghbmF2cy5sZW5ndGgpIHJldHVybjsK
ICBmdW5jdGlvbiB3YXRjaChuYXYpIHsKICAgIHZhciBidG4gPSBuYXYucXVlcnlTZWxlY3RvcignLmNhci1idG5bZGF0YS10YXJnZXRdJyk7CiAgICB2YXIg
dHJhY2sgPSBidG4gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpKSA6IG51bGw7CiAgICBpZiAoIXRy
YWNrKSByZXR1cm47CiAgICBmdW5jdGlvbiBzeW5jKCkgeyBuYXYuY2xhc3NMaXN0LnRvZ2dsZSgnbm8tc2Nyb2xsJywgdHJhY2suc2Nyb2xsV2lkdGggLSB0
cmFjay5jbGllbnRXaWR0aCA8PSA0KTsgfQogICAgc3luYygpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN5bmMpOwogICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzeW5jKTsKICAgIGlmICh3aW5kb3cuUmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgdmFyIHJvID0gbmV3IFJl
c2l6ZU9ic2VydmVyKHN5bmMpOwogICAgICByby5vYnNlcnZlKHRyYWNrKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFjay5jaGlsZHJlbi5sZW5n
dGg7IGkrKykgcm8ub2JzZXJ2ZSh0cmFjay5jaGlsZHJlbltpXSk7CiAgICB9CiAgfQogIGZvciAodmFyIGkgPSAwOyBpIDwgbmF2cy5sZW5ndGg7IGkrKykg
d2F0Y2gobmF2c1tpXSk7Cn0pKCk7Cg==
LyogZXNGb3JtSnM6IGVucXVpcnkgZm9ybXMgZGVsaXZlciBzb21ld2hlcmUgYW5kIHRlbGwgdGhlIHRydXRoIChDTC0yMDI2MTAwMi0xMiwgMiBPY3QgMjAy
Njsgc3RhdHVzIG5hbWVzIGZpeGVkIGluCiAgIENMLTIwMjYxMDAyLTE0IHRoZSBzYW1lIG5pZ2h0KS4KICAgVGFrZXMgdGhlIHN1Ym1pdCBvZiAjcmZpIGFu
ZCAjeHFGb3JtIGF0IHRoZSBjYXB0dXJlIHBoYXNlLCBhaGVhZCBvZiB0aGUgb2xkZXIgaGFuZGxlcnMgaW4gdGhlIG1haW4gYW5kIGV2ZW50CiAgIHBheWxv
YWRzICh3aGljaCBzaG93ZWQgUmVjZWl2ZWQgd2l0aCBubyBkZWxpdmVyeSwgb3IgaGFuZGVkIGEgbWFpbHRvOiBsaW5rIHRvIHRoZSBtYWlsIGNsaWVudCku
CiAgIFJvdXRlIDE6IGRhdGEtZW5kcG9pbnQgc2V0IChhbiBodHRwcyBVUkwsIGUuZy4gdGhlIG44biB3ZWJob29rKTogUE9TVCB0aGUgRm9ybURhdGEgdGhl
cmUsIHN1Y2Nlc3Mgb24gYSAyeHguCiAgIFJvdXRlIDI6IG5vIGVuZHBvaW50OiBoYW5kIHRoZSBlbnF1aXJ5IHRvIHRoZSBzaXRlJ3Mgb3duIENvbnRhY3Qg
Rm9ybSA3IGZvcm0gODY3LCB3aGljaCBpcyBpbiB0aGUgcGFnZSAodGhlIG9sZAogICB0aGVtZSdzIGVucXVpcnkgcG9wdXApLCB3aXRoIENGNydzIHJlQ0FQ
VENIQSB2MyBhbmQgQWtpc21ldCBjaGVja3MsIGFuZCByZWFkIENGNydzIG91dGNvbWUuCiAgIENGNyByZXBvcnRzIHRoZSBvdXRjb21lIHR3aWNlOiB0aGUg
d3BjZjdzdWJtaXQgZXZlbnQgb24gdGhlIGZvcm0ncyB3cmFwcGVyIGNhcnJpZXMgdGhlIEFQSSBzdGF0dXMgKG1haWxfc2VudCwKICAgbWFpbF9mYWlsZWQs
IHZhbGlkYXRpb25fZmFpbGVkLCBhY2NlcHRhbmNlX21pc3NpbmcsIHNwYW0sIGFib3J0ZWQpLCBhbmQgdGhlIHdwY2Y3c3RhdHVzY2hhbmdlZCBldmVudCBv
biB0aGUgZm9ybQogICBjYXJyaWVzIHRoZSBzaG9ydCBmb3JtIChzZW50LCBmYWlsZWQsIGludmFsaWQsIHVuYWNjZXB0ZWQsIHNwYW0sIGFib3J0ZWQpLiBC
b3RoIGFyZSBhY2NlcHRlZCBoZXJlOyB0aGUgZmlyc3QKICAgdmVyc2lvbiBsaXN0ZW5lZCBmb3IgdGhlIGxvbmcgbmFtZXMgb24gdGhlIHNlY29uZCBldmVu
dCwgc28gc2VudCBhbmQgZmFpbGVkIHdlcmUgbmV2ZXIgc2VlbiBhbmQgdGhlIGZvcm0gd2FpdGVkCiAgIGZvciB0aGUgdGltZW91dC4gQW55dGhpbmcgYnV0
IHN1Y2Nlc3Mgc2hvd3MgYW4gZXJyb3Igd2l0aCB0aGUgb2ZmaWNlIGVtYWlsIGFuZCBwaG9uZSBhbmQga2VlcHMgdGhlIHZhbHVlcy4gKi8KKGZ1bmN0aW9u
ICgpIHsKICB2YXIgRk9STVMgPSAnZm9ybSNyZmksIGZvcm0jeHFGb3JtJzsKICB2YXIgRU1BSUwgPSAnaW5mb0Blcy1zcG9ydC5hZScsIFBIT05FID0gJys5
NzEgNCA0MzUgNjYxMicsIENGN19JRCA9ICc4NjcnLCBXQUlUID0gNDUwMDA7CiAgdmFyIE9LID0geyBtYWlsX3NlbnQ6IDEsIHNlbnQ6IDEgfTsKICB2YXIg
QkFEID0geyBtYWlsX2ZhaWxlZDogMSwgZmFpbGVkOiAxLCBzcGFtOiAxLCB2YWxpZGF0aW9uX2ZhaWxlZDogMSwgaW52YWxpZDogMSwgYWNjZXB0YW5jZV9t
aXNzaW5nOiAxLCB1bmFjY2VwdGVkOiAxLCBhYm9ydGVkOiAxLCBwYXltZW50X3JlcXVpcmVkOiAxLCAncGF5bWVudC1yZXF1aXJlZCc6IDEgfTsKICB2YXIg
TE9ORyA9IHsgc2VudDogJ21haWxfc2VudCcsIGZhaWxlZDogJ21haWxfZmFpbGVkJywgaW52YWxpZDogJ3ZhbGlkYXRpb25fZmFpbGVkJywgdW5hY2NlcHRl
ZDogJ2FjY2VwdGFuY2VfbWlzc2luZycsICdwYXltZW50LXJlcXVpcmVkJzogJ3BheW1lbnRfcmVxdWlyZWQnIH07CiAgdmFyIFJFQVNPTiA9IHsgdmFsaWRh
dGlvbl9mYWlsZWQ6ICdhIGZpZWxkIHdhcyByZWplY3RlZCcsIHNwYW06ICd0aGUgc3BhbSBmaWx0ZXIgYmxvY2tlZCBpdCcsIG1haWxfZmFpbGVkOiAndGhl
IG1haWwgc2VydmVyIGRpZCBub3QgYWNjZXB0IGl0JywKICAgICAgICAgICAgICAgICBhY2NlcHRhbmNlX21pc3Npbmc6ICdjb25zZW50IHdhcyBtaXNzaW5n
JywgYWJvcnRlZDogJ2l0IHdhcyBpbnRlcnJ1cHRlZCcsIHBheW1lbnRfcmVxdWlyZWQ6ICdwYXltZW50IHdhcyByZXF1ZXN0ZWQnLCB0aW1lb3V0OiAnbm8g
cmVwbHkgaW4gdGltZScsCiAgICAgICAgICAgICAgICAgbmV0d29yazogJ2EgY29ubmVjdGlvbiBwcm9ibGVtJywgZXhjZXB0aW9uOiAnYSBzY3JpcHQgZXJy
b3InLCAnbm8gZGVzdGluYXRpb24nOiAndGhlIGZvcm0gaGFzIG5vd2hlcmUgdG8gc2VuZCcgfTsKICB2YXIgRklFTEQgPSB7ICd5b3VyLW5hbWUnOiAnZmly
c3QgbmFtZScsICdsYXN0LW5hbWUnOiAnbGFzdCBuYW1lJywgJ3RleHQtOTk4JzogJ2NvbXBhbnknLCAneW91ci1lbWFpbCc6ICdlbWFpbCcsICd5b3VyLXRl
bCc6ICdwaG9uZScsICd5b3VyLW1lc3NhZ2UnOiAnbWVzc2FnZScgfTsKICBmdW5jdGlvbiBsb2coeCkgeyB0cnkgeyAod2luZG93LmVzRm9ybUxvZyA9IHdp
bmRvdy5lc0Zvcm1Mb2cgfHwgW10pLnB1c2goeCk7IH0gY2F0Y2ggKGVycikge30gfQogIGZ1bmN0aW9uIHNlbnRFbChmKSB7IHJldHVybiBmLnF1ZXJ5U2Vs
ZWN0b3IoJy5zZW50JykgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbnQnKTsgfQogIGZ1bmN0aW9uIHNob3coZiwgb2ssIG1zZykgewogICAgdmFy
IHMgPSBzZW50RWwoZik7IGlmICghcykgcmV0dXJuOwogICAgaWYgKCFzLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnJykpIHMuc2V0QXR0cmlidXRlKCdkYXRh
LW9yaWcnLCBzLnRleHRDb250ZW50KTsKICAgIHMudGV4dENvbnRlbnQgPSBvayA/IHMuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWcnKSA6IG1zZzsKICAgIHMu
Y2xhc3NMaXN0LnRvZ2dsZSgnaXMtZXJyJywgIW9rKTsgcy5jbGFzc0xpc3QuYWRkKCdvbicpOwogICAgY2xlYXJUaW1lb3V0KHMuX2VzVCk7CiAgICBzLl9l
c1QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdvbicpOyBzLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWVycicpOyBzLnRl
eHRDb250ZW50ID0gcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZycpOyB9LCBvayA/IDcwMDAgOiAyNTAwMCk7CiAgfQogIGZ1bmN0aW9uIGJ1c3koZiwgb24p
IHsKICAgIHZhciBiID0gZi5xdWVyeVNlbGVjdG9yKCdbdHlwZT0ic3VibWl0Il0nKTsgaWYgKCFiKSByZXR1cm47CiAgICBiLmRpc2FibGVkID0gb247CiAg
ICBpZiAob24pIHsgaWYgKCFiLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpKSBiLnNldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcsIGIudGV4dENvbnRlbnQp
OyBiLnRleHRDb250ZW50ID0gJ1NlbmRpbmcnOyB9CiAgICBlbHNlIGlmIChiLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpKSBiLnRleHRDb250ZW50ID0g
Yi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKTsKICB9CiAgZnVuY3Rpb24gdmFsKGYsIG4pIHsgdmFyIGUgPSBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSIn
ICsgbiArICciXScpOyByZXR1cm4gZSA/IFN0cmluZyhlLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpIDogJyc7IH0KICBmdW5jdGlv
biBjb25zZW50KGYpIHsgdmFyIGMgPSBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjb25zZW50Il0nKTsgcmV0dXJuIGMgJiYgYy5jaGVja2VkID8gJ3llcycg
OiAnbm8nOyB9CiAgZnVuY3Rpb24gY2Y3Zm9ybSgpIHsgdmFyIGkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJfd3BjZjciXVt2YWx1
ZT0iJyArIENGN19JRCArICciXScpOyByZXR1cm4gaSA/IGkuY2xvc2VzdCgnZm9ybScpIDogbnVsbDsgfQogIGZ1bmN0aW9uIHZpYUNmNyhmLCBkb25lKSB7
CiAgICB2YXIgYyA9IGNmN2Zvcm0oKTsKICAgIGlmICghYyB8fCAhd2luZG93LndwY2Y3IHx8IHR5cGVvZiB3aW5kb3cud3BjZjcuc3VibWl0ICE9PSAnZnVu
Y3Rpb24nKSByZXR1cm4gZmFsc2U7CiAgICBmdW5jdGlvbiBzZXQobiwgdikgeyB2YXIgZSA9IGMucXVlcnlTZWxlY3RvcignW25hbWU9IicgKyBuICsgJyJd
Jyk7IGlmIChlKSBlLnZhbHVlID0gdjsgfQogICAgdmFyIGludGVyZXN0ID0gdmFsKGYsICdpbnRlcmVzdCcpLCBldiA9IHZhbChmLCAnZXZlbnQtbmFtZScp
IHx8ICdXZWJzaXRlIGVucXVpcnknOwogICAgc2V0KCd5b3VyLW5hbWUnLCB2YWwoZiwgJ2ZpcnN0LW5hbWUnKSB8fCAnV2Vic2l0ZScpOyBzZXQoJ2xhc3Qt
bmFtZScsIHZhbChmLCAnbGFzdC1uYW1lJykgfHwgJ0VucXVpcnknKTsKICAgIHNldCgndGV4dC05OTgnLCB2YWwoZiwgJ2NvbXBhbnknKSB8fCAnTm90IGdp
dmVuJyk7IHNldCgneW91ci1lbWFpbCcsIHZhbChmLCAnZW1haWwnKSk7IHNldCgneW91ci10ZWwnLCB2YWwoZiwgJ3Bob25lJykpOwogICAgc2V0KCdpbnRl
cmVzdGVkLWluJywgaW50ZXJlc3QpOyBzZXQoJ2V2ZW50LW5hbWUnLCBldik7CiAgICBzZXQoJ3lvdXItbWVzc2FnZScsIFt2YWwoZiwgJ21lc3NhZ2UnKSB8
fCAnTm8gbWVzc2FnZSBsZWZ0LicsICcnLCAnSW50ZXJlc3RlZCBpbjogJyArIGludGVyZXN0LCAnRXZlbnQ6ICcgKyBldiwKICAgICAgJ1JvdXRpbmc6ICcg
KyB2YWwoZiwgJ2VlYl9ldmVudCcpICsgJyAvICcgKyB2YWwoZiwgJ2VlYl9jYXRlZ29yeScpICsgJyAvICcgKyB2YWwoZiwgJ2VlYl9yZWFzb24nKSwKICAg
ICAgJ0NvbnNlbnQgdG8gY29udGFjdDogJyArIGNvbnNlbnQoZiksICdTZW50IGZyb206ICcgKyBsb2NhdGlvbi5ocmVmXS5qb2luKCdcbicpKTsKICAgIHZh
ciBzZXR0bGVkID0gZmFsc2UsIHQ7CiAgICBmdW5jdGlvbiBmaW5pc2gob2ssIHN0YXR1cywgZXh0cmEpIHsKICAgICAgaWYgKHNldHRsZWQpIHJldHVybjsg
c2V0dGxlZCA9IHRydWU7IGNsZWFyVGltZW91dCh0KTsKICAgICAgYy5yZW1vdmVFdmVudExpc3RlbmVyKCd3cGNmN3N0YXR1c2NoYW5nZWQnLCBvblN0YXR1
cyk7IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dwY2Y3c3VibWl0Jywgb25TdWJtaXQpOwogICAgICBkb25lKG9rLCBzdGF0dXMsIGV4dHJhKTsK
ICAgIH0KICAgIGZ1bmN0aW9uIHNldHRsZShzdCwgZCkgewogICAgICBzdCA9IFN0cmluZyhzdCB8fCAnJyk7CiAgICAgIGlmIChPS1tzdF0pIHsgZmluaXNo
KHRydWUsICdtYWlsX3NlbnQnKTsgcmV0dXJuOyB9CiAgICAgIGlmICghQkFEW3N0XSkgcmV0dXJuOwogICAgICB2YXIgZXh0cmEgPSAnJywgaW52ID0gZCAm
JiBkLmFwaVJlc3BvbnNlICYmIGQuYXBpUmVzcG9uc2UuaW52YWxpZF9maWVsZHM7CiAgICAgIGlmIChpbnYgJiYgaW52Lmxlbmd0aCkgeyB2YXIgbmFtZXMg
PSBbXTsgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnYubGVuZ3RoOyBpKyspIG5hbWVzLnB1c2goRklFTERbaW52W2ldLmZpZWxkXSB8fCBpbnZbaV0uZmllbGQp
OyBleHRyYSA9IG5hbWVzLmpvaW4oJywgJyk7IH0KICAgICAgaWYgKGQgJiYgZC5hcGlSZXNwb25zZSAmJiBkLmFwaVJlc3BvbnNlLm1lc3NhZ2UpIGxvZygn
Y2Y3OiAnICsgZC5hcGlSZXNwb25zZS5tZXNzYWdlKTsKICAgICAgZmluaXNoKGZhbHNlLCBMT05HW3N0XSB8fCBzdCwgZXh0cmEpOwogICAgfQogICAgLyog
c3RhdHVzY2hhbmdlZCBmaXJlcyBmaXJzdCwgaW5zaWRlIENGNydzIHNldFN0YXR1czsgYSB0aWNrIGxhdGVyIHRoZSBzdWJtaXQgZXZlbnQgYnJpbmdzIHRo
ZSBkZXRhaWwgKHJlamVjdGVkCiAgICAgICBmaWVsZHMsIG1lc3NhZ2UpLCBzbyBsZXQgdGhhdCBvbmUgc2V0dGxlIGZpcnN0IHdoZW4gaXQgY29tZXMgKi8K
ICAgIGZ1bmN0aW9uIG9uU3RhdHVzKGUpIHsgdmFyIHN0ID0gKGUuZGV0YWlsICYmIGUuZGV0YWlsLnN0YXR1cykgfHwgYy5nZXRBdHRyaWJ1dGUoJ2RhdGEt
c3RhdHVzJyk7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzZXR0bGUoc3QpOyB9LCAwKTsgfQogICAgZnVuY3Rpb24gb25TdWJtaXQoZSkgeyB2YXIgZCA9
IGUuZGV0YWlsIHx8IHt9OyBpZiAoU3RyaW5nKGQuY29udGFjdEZvcm1JZCkgIT09IENGN19JRCkgcmV0dXJuOyBzZXR0bGUoZC5zdGF0dXMsIGQpOyB9CiAg
ICBjLmFkZEV2ZW50TGlzdGVuZXIoJ3dwY2Y3c3RhdHVzY2hhbmdlZCcsIG9uU3RhdHVzKTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dwY2Y3
c3VibWl0Jywgb25TdWJtaXQpOwogICAgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBmaW5pc2goZmFsc2UsICd0aW1lb3V0Jyk7IH0sIFdBSVQpOwog
ICAgdHJ5IHsgd2luZG93LndwY2Y3LnN1Ym1pdChjKTsgfSBjYXRjaCAoZXJyKSB7IGZpbmlzaChmYWxzZSwgJ2V4Y2VwdGlvbicpOyB9CiAgICByZXR1cm4g
dHJ1ZTsKICB9CiAgZnVuY3Rpb24gdmlhRW5kcG9pbnQoZiwgdXJsLCBkb25lKSB7CiAgICB2YXIgY3RsID0gKCdBYm9ydENvbnRyb2xsZXInIGluIHdpbmRv
dykgPyBuZXcgQWJvcnRDb250cm9sbGVyKCkgOiBudWxsOwogICAgdmFyIHQgPSBjdGwgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgY3RsLmFib3J0KCk7
IH0sIFdBSVQpIDogbnVsbDsKICAgIHZhciBvcHRzID0geyBtZXRob2Q6ICdQT1NUJywgYm9keTogbmV3IEZvcm1EYXRhKGYpIH07IGlmIChjdGwpIG9wdHMu
c2lnbmFsID0gY3RsLnNpZ25hbDsKICAgIGZldGNoKHVybCwgb3B0cykudGhlbihmdW5jdGlvbiAocikgeyBpZiAodCkgY2xlYXJUaW1lb3V0KHQpOyBkb25l
KHIub2ssICdodHRwICcgKyByLnN0YXR1cyk7IH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IGlmICh0KSBjbGVhclRpbWVvdXQodCk7IGRvbmUoZmFs
c2UsICduZXR3b3JrJyk7IH0pOwogIH0KICBmdW5jdGlvbiBmYWlsKGYsIHN0YXR1cywgZXh0cmEpIHsKICAgIGJ1c3koZiwgZmFsc2UpOwogICAgdmFyIHdo
eSA9IChSRUFTT05bc3RhdHVzXSB8fCBzdGF0dXMpICsgKGV4dHJhID8gJzogJyArIGV4dHJhIDogJycpOwogICAgc2hvdyhmLCBmYWxzZSwgJ1NvcnJ5LCB0
aGF0IGRpZCBub3Qgc2VuZCAoJyArIHdoeSArICcpLiBFbWFpbCAnICsgRU1BSUwgKyAnIG9yIGNhbGwgJyArIFBIT05FICsgJy4nKTsKICAgIGxvZyhzdGF0
dXMpOwogIH0KICBmdW5jdGlvbiBzdWNjZXNzKGYpIHsgYnVzeShmLCBmYWxzZSk7IHNob3coZiwgdHJ1ZSk7IGYucmVzZXQoKTsgbG9nKCdtYWlsX3NlbnQn
KTsgfQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgZiA9IGUudGFyZ2V0OwogICAgaWYgKCFm
IHx8ICFmLm1hdGNoZXMgfHwgIWYubWF0Y2hlcyhGT1JNUykpIHJldHVybjsKICAgIGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsg
ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgIGlmICghZi5jaGVja1ZhbGlkaXR5KCkpIHsgZi5yZXBvcnRWYWxpZGl0eSgpOyByZXR1cm47IH0K
ICAgIGlmIChmLmdldEF0dHJpYnV0ZSgnZGF0YS1zZW5kaW5nJykgPT09ICcxJykgcmV0dXJuOwogICAgZi5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2VuZGluZycs
ICcxJyk7IGJ1c3koZiwgdHJ1ZSk7CiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uIChvaywgc3RhdHVzLCBleHRyYSkgeyBmLnJlbW92ZUF0dHJpYnV0ZSgnZGF0
YS1zZW5kaW5nJyk7IGlmIChvaykgc3VjY2VzcyhmKTsgZWxzZSBmYWlsKGYsIHN0YXR1cywgZXh0cmEpOyB9OwogICAgdmFyIHVybCA9IChmLmdldEF0dHJp
YnV0ZSgnZGF0YS1lbmRwb2ludCcpIHx8ICcnKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOwogICAgaWYgKHVybCkgeyB2aWFFbmRwb2ludChmLCB1cmws
IGRvbmUpOyByZXR1cm47IH0KICAgIGlmICh2aWFDZjcoZiwgZG9uZSkpIHJldHVybjsKICAgIGRvbmUoZmFsc2UsICdubyBkZXN0aW5hdGlvbicpOwogIH0s
IHRydWUpOwogIC8qIHRoZSBvZmZpY2UgZm9ybSB0aGF0IHJlY2VpdmVzIHRoZSBlbnF1aXJ5IHJlcXVpcmVzIGEgcGhvbmUgbnVtYmVyICovCiAgdmFyIGZv
cm1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChGT1JNUyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jtcy5sZW5ndGg7IGkrKykgeyB2YXIgcCA9
IGZvcm1zW2ldLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJwaG9uZSJdJyk7IGlmIChwKSBwLnJlcXVpcmVkID0gdHJ1ZTsgfQp9KSgpOwo=
LyogZXNSZmlKczogb3BlbmluZyB0aGUgZW5xdWlyeSBmb3JtIGtlZXBzIHRoZSBwYWdlIHdoZXJlIGl0IGlzIChDTC0yMDI2MTAwNi0wMSwgNiBPY3QgMjAy
NikuCiAgIEV2ZXJ5IGNvbnRyb2wgdGhhdCBvcGVucyBhIGZvcm0gaXMgYW4gYW5jaG9yIHRvICNlbnF1aXJlLCB0aGUgaW4tcGFnZSBmYWxsYmFjayBmb3Ig
cmVhZGVycyB3aXRob3V0IHNjcmlwdC4KICAgVGhlIG9sZCB0aGVtZSdzIGN1c3RvbS1zY3JpcHQuanMgbGlzdGVucyBvbiBkb2N1bWVudCBmb3IgZXZlcnkg
Y2xpY2sgb24gYVtocmVmKj0iIyJdIGFuZCBzbW9vdGgtc2Nyb2xscyB0bwogICB0aGF0IHNlY3Rpb24sIHNvIHRoZSBwYWdlIHNsaWQgdG8gdGhlIGJvdHRv
bSB1bmRlciB0aGUgb3BlbiBmb3JtLiBPdXIgb3BlbmVyIHJ1bnMgb24gdGhlIGVsZW1lbnQgYW5kIGNhbGxzCiAgIHByZXZlbnREZWZhdWx0LCB3aGljaCBk
b2VzIG5vdCBzdG9wIGEgZGVsZWdhdGVkIGhhbmRsZXIgb24gZG9jdW1lbnQ7IHN0b3BwaW5nIHRoZSBjbGljayBmcm9tIHJlYWNoaW5nIGRvY3VtZW50CiAg
IGRvZXMuIFRoZSBzdG9wIGhhcHBlbnMgb24gYm9keSwgYWZ0ZXIgZXZlcnkgaGFuZGxlciBvbiB0aGUgZWxlbWVudCBpdHNlbGYgaGFzIHJ1biAodGhlIG9w
ZW5lciwgdGhlCiAgICJJbnRlcmVzdGVkIGluIiBwcmVzZWxlY3QpLCBhbmQgb25seSBmb3IgY2xpY2tzIG9uIGEgZm9ybSBvcGVuZXIuIExpbmtzIHRoYXQg
b25seSBwb2ludCBhdCAjZW5xdWlyZSBzdGlsbCBzY3JvbGwuCiAgIFNvdXJjZSBvZiB0cnV0aDogdGVtcGxhdGUvZnJhZ21lbnRzL3JmaS1qcy5qcywgc2hp
cHBlZCBieSBzY3JpcHRzL3JmaV9ub19zY3JvbGxfMjAyNi0xMC0wNi5weS4gKi8KKGZ1bmN0aW9uICgpIHsKICB2YXIgU0VMID0gJ1tkYXRhLW9wZW4tcmZp
XSwgW2RhdGEtb3Blbi14cV0nOwogIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKICBpZiAoIWJvZHkgfHwgIWJvZHkuYWRkRXZlbnRMaXN0ZW5lcikgcmV0
dXJuOwogIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICB3aGlsZSAoZWwg
JiYgZWwgIT09IGJvZHkpIHsKICAgICAgaWYgKGVsLm1hdGNoZXMgJiYgZWwubWF0Y2hlcyhTRUwpKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IHJldHVybjsg
fQogICAgICBlbCA9IGVsLnBhcmVudE5vZGU7CiAgICB9CiAgfSwgZmFsc2UpOwp9KSgpOwo=
LyogZXNDYXJ0SnM6IHRoZSBjYXJ0IGljb24gaW4gdGhlIG5hdiBzaG93cyBob3cgbWFueSBpdGVtcyBhcmUgaW4gdGhlIHZpc2l0b3IncyBiYXNrZXQgKENM
LTIwMjYxMDA5LTAyLCA5IE9jdCAyMDI2KS4KICAgTG91aXM6ICJDYW4gd2UgYWRkIGEgY2FydCBpY29uIHRvIHRoZSB0b3AgcmlnaHQgb2YgdGhlIG5ldyBz
aXRlIHNvIHRoYXQgcGVvcGxlIGNhbiBuYXZpZ2F0ZSB0aGUgd2Vic2l0ZSBhZnRlcgogICBhZGRlZCB0byBjYXJ0IGFuZCB0aGVuIGdvIGJhY2sgdG8gcGF5
PyBPdGhlcndpc2UgaXQncyBub3Qgb2J2aW91cyBob3cgeW91J2Qgc2VlIHdoYXQncyBpbiB5b3VyIGJhc2tldCBpZiB5b3UKICAgbmF2aWdhdGVkIGF3YXkg
ZnJvbSB0aGUgY2hlY2tvdXQgcGFnZSIuIFRoZSBpY29uIGl0c2VsZiBpcyBwbGFpbiBtYXJrdXAgKGEgbGluayB0byAvY2FydC8pLCBzbyBpdCB3b3JrcyB3
aXRob3V0CiAgIHNjcmlwdC4gVGhpcyByZWFkcyB0aGUgV29vQ29tbWVyY2UgU3RvcmUgQVBJIGZvciB0aGUgdmlzaXRvcidzIG93biBzZXNzaW9uIChzYW1l
LW9yaWdpbiBjb29raWVzLCBubyBub25jZSBuZWVkZWQKICAgZm9yIGEgcmVhZCkgYW5kIHNob3dzIHRoZSBjb3VudCBiYWRnZSB3aGVuIHRoZSBiYXNrZXQg
aGFzIGFueXRoaW5nIGluIGl0OyBhIGZhaWxlZCBvciBlbXB0eSByZWFkIGxlYXZlcyB0aGUgYmFkZ2UKICAgaGlkZGVuLiBSZS1yZWFkIHdoZW4gdGhlIHBh
Z2UgaXMgc2hvd24gYWdhaW4gZnJvbSB0aGUgYmFjay1mb3J3YXJkIGNhY2hlLCB3aGljaCBpcyBob3cgcGVvcGxlIGNvbWUgYmFjayBmcm9tIHRoZQogICBj
YXJ0LiBTb3VyY2Ugb2YgdHJ1dGg6IHRlbXBsYXRlL2ZyYWdtZW50cy9jYXJ0LWpzLmpzLCBzaGlwcGVkIGJ5IHNjcmlwdHMvY2FydF9pY29uXzIwMjYtMTAt
MDkucHkuICovCihmdW5jdGlvbiAoKSB7CiAgdmFyIGJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdkNhcnROJyk7CiAgaWYgKCFiYWRnZSkg
cmV0dXJuOwogIHZhciBVUkwgPSAnaHR0cHM6Ly93d3cuZXMtc3BvcnQuYWUvd3AtanNvbi93Yy9zdG9yZS92MS9jYXJ0JzsKICBmdW5jdGlvbiBzaG93KG4p
IHsKICAgIG4gPSBwYXJzZUludChuLCAxMCkgfHwgMDsKICAgIGJhZGdlLnRleHRDb250ZW50ID0gbiA+IDk5ID8gJzk5KycgOiBTdHJpbmcobik7CiAgICBi
YWRnZS5oaWRkZW4gPSBuIDwgMTsKICAgIHZhciBhID0gYmFkZ2UucGFyZW50Tm9kZTsKICAgIGlmIChhKSBhLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcs
IG4gPiAwID8gJ1lvdXIgY2FydCwgJyArIG4gKyAobiA9PT0gMSA/ICcgaXRlbScgOiAnIGl0ZW1zJykgOiAnWW91ciBjYXJ0Jyk7CiAgfQogIGZ1bmN0aW9u
IHJlYWQoKSB7CiAgICBpZiAoIXdpbmRvdy5mZXRjaCkgcmV0dXJuOwogICAgZmV0Y2goVVJMLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLCBjYWNo
ZTogJ25vLXN0b3JlJywgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0
dXJuIHIub2sgPyByLmpzb24oKSA6IG51bGw7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChjKSB7IGlmIChjKSBzaG93KGMuaXRlbXNfY291bnQpOyB9KQog
ICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogIH0KICByZWFkKCk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgZnVuY3Rpb24g
KGUpIHsgaWYgKGUucGVyc2lzdGVkKSByZWFkKCk7IH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlv
biAoKSB7IGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgcmVhZCgpOyB9KTsKfSkoKTsK