Files
2026-10-14 17:25:35 +08:00

2 lines
78 KiB
Plaintext

{"version":1,"name":"课程表编排","actionId":"54e9d20b-cae9-4d83-a242-8265a02f3aca","projectId":"01a12690-fc45-716a-a74e-7570d9f66f62","siteId":"01a12690-fc46-7bb6-af46-35798645ab19","deploymentId":"01a12dea-ff61-7677-87d6-44590afed029","artifactSha256":"eff7960d332130e27c9299c46ec6c7b4f34490662397bde31370d0d791481674","indexSha256":"efbeab3ced55a1fd450ed4c48c4d4d3cc3b6592064fef13f2b6e64046cad1215","releaseId":"01a12deb-35d3-7715-874a-2ccb0a448bde","indexHtml":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InpoLUNOIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPuivvueoi+ihqOeuoeeQhiDCtyDlpKflroHlm73pmYXlsI/lraY8L3RpdGxlPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0i55S15a2Q6K++56iL6KGo5LiO54Wn54mH6K++56iL6KGo55qE5Zyo57q/57yW5o6S5LiO6aKE6KeI77ya5oyJ54+t57qn57u05oqk6IqC5qyh44CB5pe25q615LiO5a2m56eR77yM5LiA6ZSu55Sf5oiQ5Y+v5omT5Y2w6K++6KGo44CCIj4KPHN0eWxlPgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAg6K6+6K6h5Luk54mMIOKAlOKAlCDkuI4gQWNhU3lsbGFidSDmqKHlnZfop4bop4nor63oqIDlkIzmupDvvIgkY29sb3ItcHJpbWFyeSAjNTk3OWVh77yJCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwo6cm9vdHsKICAtLWJyYW5kLTUwOiNlZWYxZmQ7IC0tYnJhbmQtMTAwOiNkZGU0ZmI7IC0tYnJhbmQtMjAwOiNiZGM5ZjY7CiAgLS1icmFuZC00MDA6IzdkOTNlZTsgLS1icmFuZDojNTk3OWVhOyAtLWJyYW5kLTYwMDojNDU2MGQ0OyAtLWJyYW5kLTgwMDojMmY0MTkxOwoKICAtLWluay05MDA6IzIyMjYyZTsgLS1pbmstNzAwOiM0MDQwNDI7IC0taW5rLTYwMDojNWE1ZjZhOwogIC0taW5rLTQwMDojOGM4Zjk5OyAtLWluay0zMDA6I2E4YWJhZjsgLS1pbmstMjAwOiNkNmQ5ZGY7CiAgLS1saW5lOiNlOWU5ZTk7IC0tbGluZS1zb2Z0OiNmMGYxZjM7CgogIC0tYmctcGFnZTojZjRmNmZhOyAtLWJnLXN1cmZhY2U6I2ZmZjsgLS1iZy1zdWJ0bGU6I2Y3ZjhmYjsKCiAgLS1vazojM2ZhODZjOyAtLXdhcm46I2Q5OWEyYjsgLS1lcnI6I2UwNWI0NTsKCiAgLyog5pe25q616Imy5p2/77ya5pep6Ieq5LmgIC8g5LiK5Y2IIC8g6K++6Ze05pONIC8g5Y2I5LyRIC8g5LiL5Y2IIC8g5pma6Ieq5LmgICovCiAgLS1lci1iZzojZWVmNGZmOyAgLS1lci1mZzojMmE0YjhkOyAgLS1lci1hYzojNGM2ZmQwOwogIC0tYW0tYmc6I2ZmZjllYzsgIC0tYW0tZmc6IzhhNjEwNTsgIC0tYW0tYWM6I2Q5OWEyYjsKICAtLWV4LWJnOiNlYWY2ZWY7ICAtLWV4LWZnOiMxZjVjMzg7ICAtLWV4LWFjOiMzZjllNjM7CiAgLS1sdS1iZzojZmRmMWVhOyAgLS1sdS1mZzojOGEzZDFiOyAgLS1sdS1hYzojZDk3YTRiOwogIC0tcG0tYmc6I2VlZjdmYjsgIC0tcG0tZmc6IzBiNWM2ZTsgIC0tcG0tYWM6IzNkOWRiNTsKICAtLWV2LWJnOiNmM2YwZmU7ICAtLWV2LWZnOiM0YTNhOTQ7ICAtLWV2LWFjOiM3YTYzZDg7CiAgLS1uby1iZzojZjRmNWY3OyAgLS1uby1mZzojNmI3MDc4OyAgLS1uby1hYzojOWFhMGFhOwoKICAtLXItc206NnB4OyAtLXItbWQ6OHB4OyAtLXItbGc6MTJweDsgLS1yLXhsOjE2cHg7CiAgLS1zcC0xOjRweDsgLS1zcC0yOjhweDsgLS1zcC0zOjEycHg7IC0tc3AtNDoxNnB4OyAtLXNwLTU6MjBweDsgLS1zcC02OjI0cHg7IC0tc3AtODozMnB4OyAtLXNwLTEwOjQwcHg7CiAgLS1zaC0xOjAgMXB4IDJweCByZ2JhKDM0LDM4LDQ2LC4wNSk7CiAgLS1zaC0yOjAgNHB4IDE0cHggcmdiYSgzNCwzOCw0NiwuMDcpOwogIC0tc2gtMzowIDE0cHggNDBweCByZ2JhKDM0LDM4LDQ2LC4xNik7CiAgLS1lYXNlOmN1YmljLWJlemllciguNCwwLC4yLDEpOyAtLWR1cjoyMDBtczsKfQoqLCo6OmJlZm9yZSwqOjphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fQpodG1sLGJvZHl7aGVpZ2h0OjEwMCV9Ci8qIOmihOeVmea7muWKqOadoeanveS9je+8muihjOaVsOWinuWHj+WvvOiHtOmhtemdoumrmOW6puWPmOWMluaXtu+8jOWGheWuueWuveW6puS4jeWGjeW3puWPs+i3s+WKqCAqLwpodG1se3Njcm9sbGJhci1ndXR0ZXI6c3RhYmxlfQpib2R5ewogIG1hcmdpbjowO21pbi13aWR0aDoxMTYwcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWluay03MDApO2JhY2tncm91bmQ6dmFyKC0tYmctcGFnZSk7CiAgZm9udC1mYW1pbHk6IlBpbmdGYW5nIFNDIiwiTWljcm9zb2Z0IFlhSGVpIiwiSGVsdmV0aWNhIE5ldWUiLEludGVyLHN5c3RlbS11aSxzYW5zLXNlcmlmOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Cn0KYnV0dG9uLGlucHV0LHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOmluaGVyaXR9CmJ1dHRvbntjdXJzb3I6cG9pbnRlcn0KaDEsaDIsaDMscHttYXJnaW46MH0KOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYnJhbmQtNjAwKTtvdXRsaW5lLW9mZnNldDoycHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLXNtKX0KLnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCAwIDAgMCk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowfQoubnVte2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDpobbpg6jlupTnlKjmoI8KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi5hcHBiYXJ7CiAgZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tc3AtNCk7aGVpZ2h0OjYwcHg7cGFkZGluZzowIHZhcigtLXNwLTYpOwogIGNvbG9yOiNmZmY7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTAwZGVnLCM1NDcwZTAgMCUsIzZiODZmMiA1NSUsIzdmOTZmNiAxMDAlKTsKICBib3gtc2hhZG93OjAgMnB4IDE0cHggcmdiYSg4NCwxMTIsMjI0LC4zMik7Cn0KLmFwcGJhciAubWFya3tkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xOCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4yOCl9Ci5hcHBiYXIgLmRpdmlkZXJ7d2lkdGg6MXB4O2hlaWdodDoyMnB4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMjgpfQouYXBwYmFyIC50aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7bGV0dGVyLXNwYWNpbmc6LjRweH0KLmFwcGJhciAuc3BhY2Vye2ZsZXg6MX0KLnNjaG9vbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1zcC0yKTtmb250LXNpemU6MTNweDtvcGFjaXR5Oi45NX0KLnNjaG9vbCAuY3Jlc3R7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNnB4O2hlaWdodDoyNnB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1icmFuZC02MDApO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMH0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDpobXlpLQKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi5wYWdlaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOnZhcigtLXNwLTYpO2ZsZXgtd3JhcDp3cmFwO3BhZGRpbmc6dmFyKC0tc3AtNikgdmFyKC0tc3AtNikgdmFyKC0tc3AtNSl9Ci5wYWdlaGVhZCBoMXtmb250LXNpemU6MjJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0taW5rLTkwMCk7bGV0dGVyLXNwYWNpbmc6LS4ycHh9Ci5wYWdlaGVhZCAuc3Vie21hcmdpbi10b3A6dmFyKC0tc3AtMSk7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLTQwMCl9Ci5zdGF0c3tkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLXNwLTIpO2ZsZXgtd3JhcDp3cmFwfQouc3RhdHsKICBkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxcHg7bWluLXdpZHRoOjkycHg7cGFkZGluZzp2YXIoLS1zcC0yKSB2YXIoLS1zcC00KTsKICBiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLWxnKTtib3gtc2hhZG93OnZhcigtLXNoLTEpOwp9Ci5zdGF0IGJ7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWluay05MDApO2xpbmUtaGVpZ2h0OjEuM30KLnN0YXQgc3Bhbntmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1pbmstNDAwKX0KLnN0YXQuc2FtcGxle2JhY2tncm91bmQ6dmFyKC0tYW0tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hbS1saW5lKTttaW4td2lkdGg6MTUwcHh9Ci5zdGF0LnNhbXBsZSBie2NvbG9yOnZhcigtLWFtLWZnKX0KLnN0YXQuc2FtcGxlIHNwYW57Y29sb3I6IzljN2EyY30KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDkuLvljaHniYcgKyDlt6XlhbfmnaEKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi53cmFwe3BhZGRpbmc6MCB2YXIoLS1zcC02KSB2YXIoLS1zcC0xMCl9Ci8qIG92ZXJmbG93IOS/neaMgSB2aXNpYmxl77ya5bWM5aWX5rua5Yqo5a655Zmo5Lya6K6pIHRoZWFkIC8g6aaW5YiX55qEIHN0aWNreSDlpLHmlYjvvIwKICAg5LiU5LiO6aG16Z2i5rua5Yqo5p2h5bm25o6S5Lqn55Sf6KeG6KeJ5oqW5Yqo77yM5pWF57uf5LiA5Lqk57uZ6aG16Z2i57qn5rua5YqoICovCi5jYXJke2JhY2tncm91bmQ6dmFyKC0tYmctc3VyZmFjZSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXIteGwpO2JveC1zaGFkb3c6dmFyKC0tc2gtMil9Ci5jYXJkLXRvb2xzewogIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLXNwLTMpO2ZsZXgtd3JhcDp3cmFwOwogIHBhZGRpbmc6dmFyKC0tc3AtNCkgdmFyKC0tc3AtNSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZS1zb2Z0KTsKICBib3JkZXItcmFkaXVzOnZhcigtLXIteGwpIHZhcigtLXIteGwpIDAgMDsKICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsI2ZiZmNmZSwjZjZmOGZjKTsKfQoudGFic3tkaXNwbGF5OmlubGluZS1mbGV4O3BhZGRpbmc6M3B4O2dhcDoycHg7YmFja2dyb3VuZDojZTllZGY2O2JvcmRlci1yYWRpdXM6MTBweH0KLnRhYnMgYnV0dG9uewogIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtoZWlnaHQ6MzJweDtwYWRkaW5nOjAgdmFyKC0tc3AtNSk7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo4cHg7CiAgYmFja2dyb3VuZDp0cmFuc3BhcmVudDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstNjAwKTt0cmFuc2l0aW9uOmFsbCB2YXIoLS1kdXIpIHZhcigtLWVhc2UpOwp9Ci50YWJzIGJ1dHRvbjpob3Zlcntjb2xvcjp2YXIoLS1icmFuZC02MDApfQoudGFicyBidXR0b25bYXJpYS1zZWxlY3RlZD0idHJ1ZSJde2JhY2tncm91bmQ6dmFyKC0tYmctc3VyZmFjZSk7Y29sb3I6dmFyKC0tYnJhbmQtNjAwKTtmb250LXdlaWdodDo1MDA7Ym94LXNoYWRvdzp2YXIoLS1zaC0xKX0KLmdyb3d7ZmxleDoxfQouZmllbGQtaW5saW5le2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLXNwLTIpfQouZmllbGQtaW5saW5lIGxhYmVse2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay00MDApO3doaXRlLXNwYWNlOm5vd3JhcH0KLnNlbGVjdHsKICBoZWlnaHQ6MzRweDtwYWRkaW5nOjAgMzJweCAwIHZhcigtLXNwLTMpO2JvcmRlcjoxcHggc29saWQgdmFyKC0taW5rLTIwMCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLW1kKTsKICBiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpO2FwcGVhcmFuY2U6bm9uZTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciB2YXIoLS1kdXIpIHZhcigtLWVhc2UpLGJveC1zaGFkb3cgdmFyKC0tZHVyKSB2YXIoLS1lYXNlKTsKICBiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMiclM0UlM0NwYXRoIGQ9J00zIDQuNUw2IDcuNUw5IDQuNScgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjM4YzhmOTknIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCAxMXB4IGNlbnRlcjsKfQouc2VsZWN0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZC00MDApfQouc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZCk7Ym94LXNoYWRvdzowIDAgMCAzcHggdmFyKC0tYnJhbmQtNTApO291dGxpbmU6bm9uZX0KCi5idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtoZWlnaHQ6MzRweDtwYWRkaW5nOjAgdmFyKC0tc3AtNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLW1kKTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2ZvbnQtc2l6ZToxM3B4O3RyYW5zaXRpb246YWxsIHZhcigtLWR1cikgdmFyKC0tZWFzZSk7d2hpdGUtc3BhY2U6bm93cmFwfQouYnRuLXByaW1hcnl7YmFja2dyb3VuZDp2YXIoLS1icmFuZCk7Y29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDg5LDEyMSwyMzQsLjMyKX0KLmJ0bi1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYnJhbmQtNjAwKTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSg4OSwxMjEsMjM0LC40KX0KLmJ0bi1naG9zdHtiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmstMjAwKTtjb2xvcjp2YXIoLS1pbmstNzAwKX0KLmJ0bi1naG9zdDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYnJhbmQtNDAwKTtjb2xvcjp2YXIoLS1icmFuZC02MDApO2JhY2tncm91bmQ6dmFyKC0tYnJhbmQtNTApfQouYnRuLXF1aWV0e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0taW5rLTQwMCk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fQouYnRuLXF1aWV0OmhvdmVye2NvbG9yOnZhcigtLWVycik7YmFja2dyb3VuZDojZmRmMWVmfQouYnRuOmRpc2FibGVke29wYWNpdHk6LjQ1O2N1cnNvcjpub3QtYWxsb3dlZDtib3gtc2hhZG93Om5vbmV9Ci5zYXZlZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0taW5rLTQwMCk7d2hpdGUtc3BhY2U6bm93cmFwfQouc2F2ZWQgLmRvdHt3aWR0aDo2cHg7aGVpZ2h0OjZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLW9rKX0KLnNhdmVkLmlzLWRpcnR5IC5kb3R7YmFja2dyb3VuZDp2YXIoLS13YXJuKX0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDnlLXlrZDor77ooajnvJbovpHooagKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi5wYW5le2Rpc3BsYXk6bm9uZX0KLnBhbmUuaXMtYWN0aXZle2Rpc3BsYXk6YmxvY2t9Ci50YWJsZS1zY3JvbGx7b3ZlcmZsb3c6dmlzaWJsZX0KdGFibGUuZ3JpZHt3aWR0aDoxMDAlO21pbi13aWR0aDoxMDgwcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlci1zcGFjaW5nOjB9CnRhYmxlLmdyaWQgdGgsdGFibGUuZ3JpZCB0ZHtwYWRkaW5nOnZhcigtLXNwLTIpIHZhcigtLXNwLTMpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lLXNvZnQpfQp0YWJsZS5ncmlkIHRoZWFkIHRoewogIHBvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjU7aGVpZ2h0OjQ0cHg7cGFkZGluZzowOwogIGJhY2tncm91bmQ6I2YyZjVmYjtjb2xvcjp2YXIoLS1pbmstOTAwKTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjNweDsKICBib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHZhcigtLWxpbmUpOwp9CnRhYmxlLmdyaWQgdGhlYWQgdGggc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0taW5rLTQwMCk7bGV0dGVyLXNwYWNpbmc6MH0KdGFibGUuZ3JpZCB0Ym9keSB0cjpob3ZlciB0ZDpub3QoLmJhbmQpe2JhY2tncm91bmQtY29sb3I6cmdiYSg4OSwxMjEsMjM0LC4wMzUpfQp0YWJsZS5ncmlkIHRkLmNvbC1zbG90LHRhYmxlLmdyaWQgdGguY29sLXNsb3R7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6LWluZGV4OjQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zdXJmYWNlKTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLWxpbmUtc29mdCk7bWluLXdpZHRoOjEwNHB4fQp0YWJsZS5ncmlkIHRoZWFkIHRoLmNvbC1zbG90e3otaW5kZXg6NjtiYWNrZ3JvdW5kOiNmMmY1ZmJ9Ci5zbG90LW5hbWV7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWluay05MDApfQouc2xvdC10aW1le2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWluay00MDApfQoKLyog5pe25q615YiG57uE6KGMICovCnRyLnBlcmlvZC1yb3cgdGR7CiAgcG9zaXRpb246c3RpY2t5O2xlZnQ6MDtwYWRkaW5nOjZweCB2YXIoLS1zcC0zKTt0ZXh0LWFsaWduOmxlZnQ7CiAgZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi42cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KdHIucGVyaW9kLXJvdyAudGFne2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9CnRyLnBlcmlvZC1yb3cgLnRhZyBpe3dpZHRoOjhweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6MnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0ci5wZXJpb2Qtcm93IC5jbnR7bWFyZ2luLWxlZnQ6dmFyKC0tc3AtMik7Zm9udC13ZWlnaHQ6NDAwO29wYWNpdHk6LjcyO2xldHRlci1zcGFjaW5nOjB9CnRyLnBlcmlvZC1lciB0ZHtiYWNrZ3JvdW5kOnZhcigtLWVyLWJnKTtjb2xvcjp2YXIoLS1lci1mZyk7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tZXItYWMpfQp0ci5wZXJpb2QtYW0gdGR7YmFja2dyb3VuZDp2YXIoLS1hbS1iZyk7Y29sb3I6dmFyKC0tYW0tZmcpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWFtLWFjKX0KdHIucGVyaW9kLWV4IHRke2JhY2tncm91bmQ6dmFyKC0tZXgtYmcpO2NvbG9yOnZhcigtLWV4LWZnKTtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1leC1hYyl9CnRyLnBlcmlvZC1sdSB0ZHtiYWNrZ3JvdW5kOnZhcigtLWx1LWJnKTtjb2xvcjp2YXIoLS1sdS1mZyk7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tbHUtYWMpfQp0ci5wZXJpb2QtcG0gdGR7YmFja2dyb3VuZDp2YXIoLS1wbS1iZyk7Y29sb3I6dmFyKC0tcG0tZmcpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLXBtLWFjKX0KdHIucGVyaW9kLWV2IHRke2JhY2tncm91bmQ6dmFyKC0tZXYtYmcpO2NvbG9yOnZhcigtLWV2LWZnKTtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1ldi1hYyl9CnRyLnBlcmlvZC1ubyB0ZHtiYWNrZ3JvdW5kOnZhcigtLW5vLWJnKTtjb2xvcjp2YXIoLS1uby1mZyk7Ym9yZGVyLWxlZnQtY29sb3I6dmFyKC0tbm8tYWMpfQp0ci5wZXJpb2Qtcm93IHRke2JvcmRlci1sZWZ0OjNweCBzb2xpZCB0cmFuc3BhcmVudH0KCi8qIOWtpuenkemAieaLqeWNleWFgyAqLwp0ZC5jZWxse3BhZGRpbmc6NXB4IDRweH0KLnBpY2t7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9ja30KLnBpY2sgc2VsZWN0ewogIHdpZHRoOjEwMCU7aGVpZ2h0OjM4cHg7cGFkZGluZzowIDI0cHggMCAxMHB4O2FwcGVhcmFuY2U6bm9uZTtib3JkZXItcmFkaXVzOnZhcigtLXItbWQpOwogIGJvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDojZmJmY2ZlO2NvbG9yOnZhcigtLWluay02MDApO2ZvbnQtc2l6ZToxM3B4O2N1cnNvcjpwb2ludGVyOwogIHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIHZhcigtLWR1cikgdmFyKC0tZWFzZSksYmFja2dyb3VuZCB2YXIoLS1kdXIpIHZhcigtLWVhc2UpLGNvbG9yIHZhcigtLWR1cikgdmFyKC0tZWFzZSksYm94LXNoYWRvdyB2YXIoLS1kdXIpIHZhcigtLWVhc2UpOwogIGJhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMCcgaGVpZ2h0PScxMCcgdmlld0JveD0nMCAwIDEyIDEyJyUzRSUzQ3BhdGggZD0nTTMgNC41TDYgNy41TDkgNC41JyBmaWxsPSdub25lJyBzdHJva2U9JyUyM2E4YWJhZicgc3Ryb2tlLXdpZHRoPScxLjYnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRSIpOwogIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOnJpZ2h0IDhweCBjZW50ZXI7Cn0KLnBpY2sgc2VsZWN0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZC0yMDApfQoucGljayBzZWxlY3Q6Zm9jdXN7b3V0bGluZTpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZCk7Ym94LXNoYWRvdzowIDAgMCAzcHggdmFyKC0tYnJhbmQtNTApfQoucGljayBzZWxlY3QuaXMtZW1wdHl7Y29sb3I6dmFyKC0taW5rLTMwMCl9Ci5waWNrLmlzLXNldCBzZWxlY3R7CiAgYm9yZGVyLWNvbG9yOnZhcigtLWMtbGluZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jLWJnKTtjb2xvcjp2YXIoLS1jLWZnKTtmb250LXdlaWdodDo1MDA7CiAgYmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzEwJyBoZWlnaHQ9JzEwJyB2aWV3Qm94PScwIDAgMTIgMTInJTNFJTNDcGF0aCBkPSdNMyA0LjVMNiA3LjVMOSA0LjUnIGZpbGw9J25vbmUnIHN0cm9rZT0nY3VycmVudENvbG9yJyBzdHJva2Utd2lkdGg9JzEuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBvcGFjaXR5PScuNTUnLyUzRSUzQy9zdmclM0UiKTsKfQovKiDlkajmnKvkuKTliJflvLHljJYgKi8KdGQuY2VsbC53ZWVrZW5kIC5waWNrIHNlbGVjdDpub3QoLmlzLWVtcHR5KXtvcGFjaXR5Oi45NH0KdGgud2Vla2VuZHtjb2xvcjp2YXIoLS1icmFuZC02MDApfQp0aC53ZWVrZW5kIHNtYWxse2NvbG9yOnZhcigtLWluay0zMDApfQoKLyog6K++6Ze0IC8g5Y2I5LyR77ya5pW06KGM5ZCI5bm255qE56m655m95YiG6ZqU5bimICovCnRkLmJhbmR7CiAgdGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6M3B4O2NvbG9yOnZhcigtLWMtZmcpOwogIGJhY2tncm91bmQtY29sb3I6dmFyKC0tYy1iZyk7CiAgYmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC42KSAwIDdweCx0cmFuc3BhcmVudCA3cHggMTRweCk7CiAgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYy1saW5lKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1jLWxpbmUpOwp9CnRhYmxlLmdyaWQgdGQuYmFuZHtwYWRkaW5nOjEycHggdmFyKC0tc3AtMyl9CnRyLmlzLWJyZWFrIHRkLmNvbC1zbG90IC5zbG90LW5hbWV7Y29sb3I6dmFyKC0taW5rLTQwMCk7Zm9udC13ZWlnaHQ6NDAwfQoKLyog5pe26Ze06L6T5YWlICovCnRkLmNvbC10aW1le21pbi13aWR0aDoxMTJweH0KLnRpbWUtd3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweH0KLnRpbWUtd3JhcCBpbnB1dHsKICB3aWR0aDo5NnB4O2hlaWdodDozOHB4O3BhZGRpbmc6MCA4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXItbWQpOwogIGJhY2tncm91bmQ6I2ZiZmNmZTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgdmFyKC0tZHVyKSB2YXIoLS1lYXNlKSxib3gtc2hhZG93IHZhcigtLWR1cikgdmFyKC0tZWFzZSk7Cn0KLnRpbWUtd3JhcCBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYnJhbmQtMjAwKX0KLnRpbWUtd3JhcCBpbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmU7Ym9yZGVyLWNvbG9yOnZhcigtLWJyYW5kKTtib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1icmFuZC01MCk7YmFja2dyb3VuZDojZmZmfQoudGltZS13cmFwIGlucHV0LmludmFsaWR7Ym9yZGVyLWNvbG9yOnZhcigtLWVycik7YmFja2dyb3VuZDojZmRmM2YxfQp0ZC5jb2wtb3B7d2lkdGg6NTZweH0KLnJvdy1kZWx7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1pbmstMzAwKTt0cmFuc2l0aW9uOmFsbCB2YXIoLS1kdXIpIHZhcigtLWVhc2UpfQoucm93LWRlbDpob3Zlcntjb2xvcjp2YXIoLS1lcnIpO2JvcmRlci1jb2xvcjojZjNjZGM1O2JhY2tncm91bmQ6I2ZkZjFlZn0KLnJvdy1kZWw6ZGlzYWJsZWR7b3BhY2l0eTouMztjdXJzb3I6bm90LWFsbG93ZWR9Ci5yb3ctZGVsOmRpc2FibGVkOmhvdmVye2NvbG9yOnZhcigtLWluay0zMDApO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fQoKLmhpbnRiYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tc3AtMik7ZmxleC13cmFwOndyYXA7cGFkZGluZzp2YXIoLS1zcC0zKSB2YXIoLS1zcC01KTtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmctc3VidGxlKTtib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1yLXhsKSB2YXIoLS1yLXhsKTtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1pbmstNDAwKX0KLmhpbnRiYXIgLmhpbnQtdHtmbGV4OjAgMCBhdXRvfQouaGludGJhciAucnVsZXN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2ZsZXgtd3JhcDp3cmFwO2ZsZXg6MSAxIGF1dG87bWluLXdpZHRoOjB9Ci5oaW50YmFyIC5ydWxle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zdXJmYWNlKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3doaXRlLXNwYWNlOm5vd3JhcH0KLmhpbnRiYXIgLnJ1bGUgaXt3aWR0aDo3cHg7aGVpZ2h0OjdweDtib3JkZXItcmFkaXVzOjJweH0KLmhpbnRiYXIgLnJ1bGUgYntmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0taW5rLTYwMCl9Ci5oaW50YmFyIC5ydWxlIC5udW17Y29sb3I6dmFyKC0taW5rLTQwMCl9Ci5oaW50YmFyIC5ydWxlLW5vdGV7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0taW5rLTQwMCk7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjk5cHg7Ym9yZGVyOjFweCBkYXNoZWQgdmFyKC0taW5rLTIwMCk7d2hpdGUtc3BhY2U6bm93cmFwfQouYnRuLXNte2hlaWdodDoyOHB4O3BhZGRpbmc6MCAxMnB4O2ZvbnQtc2l6ZToxMnB4O2ZsZXg6MCAwIGF1dG99CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAg54Wn54mH6K++6KGoCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoucGhvdG8tcGFuZXtwYWRkaW5nOnZhcigtLXNwLTgpIHZhcigtLXNwLTYpIHZhcigtLXNwLTEwKTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1zcC01KX0KLmRyb3B6b25lewogIHBvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOm1pbig3NjBweCwxMDAlKTthc3BlY3QtcmF0aW86MTYvOTttaW4taGVpZ2h0OjI4MHB4OwogIGRpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLXhsKTtiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpOwogIGJvcmRlcjoxLjVweCBkYXNoZWQgdmFyKC0taW5rLTIwMCk7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuOwogIHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIHZhcigtLWR1cikgdmFyKC0tZWFzZSksYmFja2dyb3VuZCB2YXIoLS1kdXIpIHZhcigtLWVhc2UpLGJveC1zaGFkb3cgdmFyKC0tZHVyKSB2YXIoLS1lYXNlKTsKfQouZHJvcHpvbmU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWJyYW5kLTQwMCk7YmFja2dyb3VuZDp2YXIoLS1icmFuZC01MCl9Ci5kcm9wem9uZS5kcmFne2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZCk7YmFja2dyb3VuZDp2YXIoLS1icmFuZC01MCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAzcHggdmFyKC0tYnJhbmQtMTAwKX0KLmR6LWlubmVye2Rpc3BsYXk6Z3JpZDtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tc3AtMyk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzp2YXIoLS1zcC02KX0KLmR6LWljb257ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDo2NHB4O2hlaWdodDo2NHB4O2JvcmRlci1yYWRpdXM6MThweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNTBkZWcsI2VlZjFmZCwjZTJlOGZiKTtjb2xvcjp2YXIoLS1icmFuZCl9Ci5kei10aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0taW5rLTkwMCl9Ci5kei1zdWJ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLTQwMCl9Ci5kei1mb3JtYXRze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoycHh9Ci5kei1mb3JtYXRzIHNwYW57Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0taW5rLTQwMCk7cGFkZGluZzoycHggOHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc3VidGxlKX0KLmNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2JvcmRlcjoycHggc29saWQgdmFyKC0taW5rLTIwMCk7b3BhY2l0eTouOX0KLmNvcm5lci50bHt0b3A6MTZweDtsZWZ0OjE2cHg7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci1yYWRpdXM6NnB4IDAgMCAwfQouY29ybmVyLnRye3RvcDoxNnB4O3JpZ2h0OjE2cHg7Ym9yZGVyLWxlZnQ6MDtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJhZGl1czowIDZweCAwIDB9Ci5jb3JuZXIuYmx7Ym90dG9tOjE2cHg7bGVmdDoxNnB4O2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MDtib3JkZXItcmFkaXVzOjAgMCAwIDZweH0KLmNvcm5lci5icntib3R0b206MTZweDtyaWdodDoxNnB4O2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXRvcDowO2JvcmRlci1yYWRpdXM6MCAwIDZweCAwfQoKLnBob3RvLWNhcmR7d2lkdGg6bWluKDg4MHB4LDEwMCUpO2Rpc3BsYXk6bm9uZTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOnZhcigtLXNwLTMpfQoucGhvdG8tY2FyZC5pcy1zaG93bntkaXNwbGF5OmZsZXh9Ci5waG90by1mcmFtZXsKICBwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOnZhcigtLXItbGcpO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiMwZjEzMjA7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3gtc2hhZG93OnZhcigtLXNoLTIpO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Cn0KLnBob3RvLWZyYW1lIGltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6NTZ2aDtvYmplY3QtZml0OmNvbnRhaW59Ci5waG90by1tZXRhe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLXNwLTMpO2ZsZXgtd3JhcDp3cmFwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWluay00MDApfQoucGhvdG8tbWV0YSAubmFtZXtjb2xvcjp2YXIoLS1pbmstOTAwKTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHh9Ci5waG90by1tZXRhIC5jaGlwe3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zdWJ0bGUpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSl9Ci5waG90by1hY3Rpb25ze2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tc3AtMik7ZmxleC13cmFwOndyYXB9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAg6aKE6KeI5by556qXCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoub3ZlcmxheXsKICBwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6ODA7ZGlzcGxheTpub25lO3BsYWNlLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLXNwLTYpOwogIGJhY2tncm91bmQ6cmdiYSgyOCwzMyw0OCwuNSk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoM3B4KTsKfQoub3ZlcmxheS5pcy1vcGVue2Rpc3BsYXk6Z3JpZDthbmltYXRpb246ZmFkZSB2YXIoLS1kdXIpIHZhcigtLWVhc2UpfQpAa2V5ZnJhbWVzIGZhZGV7ZnJvbXtvcGFjaXR5OjB9dG97b3BhY2l0eToxfX0KLm1vZGFsewogIHdpZHRoOm1pbigxMTgwcHgsMTAwJSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gOTZweCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsKICBiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpO2JvcmRlci1yYWRpdXM6dmFyKC0tci14bCk7Ym94LXNoYWRvdzp2YXIoLS1zaC0zKTtvdmVyZmxvdzpoaWRkZW47CiAgYW5pbWF0aW9uOnBvcCAyNDBtcyB2YXIoLS1lYXNlKTsKfQpAa2V5ZnJhbWVzIHBvcHtmcm9te3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwcHgpIHNjYWxlKC45OSk7b3BhY2l0eTouNn10b3t0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fQoubW9kYWwtaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1zcC0zKTtwYWRkaW5nOnZhcigtLXNwLTQpIHZhcigtLXNwLTUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfQoubW9kYWwtaGVhZCBoMntmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0taW5rLTkwMCl9Ci5tb2RhbC1oZWFkIC54e21hcmdpbi1sZWZ0OmF1dG87ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozMnB4O2hlaWdodDozMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLW1kKTtiYWNrZ3JvdW5kOnZhcigtLWJnLXN1cmZhY2UpO2NvbG9yOnZhcigtLWluay02MDApfQoubW9kYWwtaGVhZCAueDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYnJhbmQtNDAwKTtjb2xvcjp2YXIoLS1icmFuZC02MDApO2JhY2tncm91bmQ6dmFyKC0tYnJhbmQtNTApfQoubW9kYWwtYm9keXtvdmVyZmxvdzphdXRvO3BhZGRpbmc6dmFyKC0tc3AtNik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCNmZmYsI2ZiZmNmZSl9Ci5tb2RhbC1mb290e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLXNwLTIpO3BhZGRpbmc6dmFyKC0tc3AtNCkgdmFyKC0tc3AtNSk7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZy1zdWJ0bGUpfQoubW9kYWwtc217d2lkdGg6bWluKDY0MHB4LDEwMCUpfQouc2V0LWxlYWR7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLTYwMCk7bWFyZ2luLWJvdHRvbTp2YXIoLS1zcC00KX0KLnNldC1sZWFkIGJ7Y29sb3I6dmFyKC0taW5rLTkwMCk7Zm9udC13ZWlnaHQ6NjAwfQouc2V0LXRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfQouc2V0LXRhYmxlIHRke3BhZGRpbmc6N3B4IDhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lLXNvZnQpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLnNldC10YWJsZSB0cjpsYXN0LWNoaWxkIHRke2JvcmRlci1ib3R0b206MH0KLnNldC10YWJsZSAuc2lkZXt3aWR0aDo5MnB4fQouc2V0LXRhYmxlIC5zaWRlLnJ7dGV4dC1hbGlnbjpyaWdodH0KLnNldC10YWJsZSAubWlke3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEzMHB4fQouc2V0LXRhYmxlIGlucHV0e3dpZHRoOjExMnB4O2hlaWdodDozNHB4O3BhZGRpbmc6MCA4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1pbmstMjAwKTtib3JkZXItcmFkaXVzOnZhcigtLXItbWQpO2JhY2tncm91bmQ6dmFyKC0tYmctc3VyZmFjZSk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIHZhcigtLWR1cikgdmFyKC0tZWFzZSksYm94LXNoYWRvdyB2YXIoLS1kdXIpIHZhcigtLWVhc2UpfQouc2V0LXRhYmxlIGlucHV0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1icmFuZC00MDApfQouc2V0LXRhYmxlIGlucHV0OmZvY3Vze291dGxpbmU6bm9uZTtib3JkZXItY29sb3I6dmFyKC0tYnJhbmQpO2JveC1zaGFkb3c6MCAwIDAgM3B4IHZhcigtLWJyYW5kLTUwKX0KLnNldC10YWJsZSB0ci5iYWQgaW5wdXR7Ym9yZGVyLWNvbG9yOnZhcigtLWVycik7YmFja2dyb3VuZDojZmRmM2YxfQouc2V0LXRhYmxlIC5kZXNje2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWluay00MDApO3RleHQtYWxpZ246bGVmdH0KLnB0YWd7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OXB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDtiYWNrZ3JvdW5kOnZhcigtLWMtYmcpO2NvbG9yOnZhcigtLWMtZmcpO3doaXRlLXNwYWNlOm5vd3JhcH0KLnB0YWcgaXt3aWR0aDo2cHg7aGVpZ2h0OjZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWMtYWMpfQouc2V0LW5vdGV7bWFyZ2luLXRvcDp2YXIoLS1zcC00KTtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1pbmstNDAwKX0KLnNldC1ub3RlLmJhZHtjb2xvcjp2YXIoLS1lcnIpfQoKLnNoZWV0e3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlci1zcGFjaW5nOjVweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fQouc2hlZXQgY2FwdGlvbntjYXB0aW9uLXNpZGU6dG9wO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgMnB4IHZhcigtLXNwLTQpfQouc2hlZXQgY2FwdGlvbiAudHtmb250LXNpemU6MTlweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0taW5rLTkwMCk7bGV0dGVyLXNwYWNpbmc6LjVweH0KLnNoZWV0IGNhcHRpb24gLnN7bWFyZ2luLWxlZnQ6dmFyKC0tc3AtMyk7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0taW5rLTQwMCl9Ci5zaGVldCB0aHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0taW5rLTkwMCk7cGFkZGluZzoxMHB4IDZweDtiYWNrZ3JvdW5kOiNlZWYxZjg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLW1kKX0KLnNoZWV0IHRoLmgtZW1wdHl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNlZWYxZjggMCA1MCUsI2ZkZjNkOSA1MCUgMTAwJSk7cG9zaXRpb246cmVsYXRpdmV9Ci5zaGVldCB0aC5oLWVtcHR5IC5he3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6OHB4O2JvdHRvbTo2cHg7Y29sb3I6dmFyKC0taW5rLTkwMCl9Ci5zaGVldCB0aC5oLWVtcHR5IC5ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjhweDt0b3A6NnB4O2NvbG9yOnZhcigtLWFtLWZnKX0KLnNoZWV0IHRoLmgtdGltZXtiYWNrZ3JvdW5kOiNmZGYzZDk7Y29sb3I6dmFyKC0tYW0tZmcpfQouc2hlZXQgdGguaXMtd2Vla2VuZHtiYWNrZ3JvdW5kOiNlN2VjZmE7Y29sb3I6dmFyKC0tYnJhbmQtODAwKX0KLnNoZWV0IHRke3BhZGRpbmc6MTBweCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDojZmJmY2ZlO2JvcmRlci1yYWRpdXM6dmFyKC0tci1tZCk7Y29sb3I6dmFyKC0taW5rLTYwMCl9Ci5zaGVldCB0ZC5yYWlse2JhY2tncm91bmQ6dmFyKC0tYy1iZyk7Y29sb3I6dmFyKC0tYy1mZyk7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4O2xldHRlci1zcGFjaW5nOjJweH0KLnNoZWV0IHRkLnNsb3R7YmFja2dyb3VuZDojZWVmNGYxO2NvbG9yOnZhcigtLWluay05MDApO2ZvbnQtd2VpZ2h0OjUwMH0KLnNoZWV0IHRkLnRpbWV7YmFja2dyb3VuZDojZjVmNmY4O2NvbG9yOnZhcigtLWluay02MDApO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtcztmb250LXNpemU6MTIuNXB4O2JvcmRlci1yYWRpdXM6MCB2YXIoLS1yLW1kKSB2YXIoLS1yLW1kKSAwfQouc2hlZXQgdGQuc3ViamVjdHtiYWNrZ3JvdW5kOnZhcigtLWMtYmcpO2NvbG9yOnZhcigtLWMtZmcpO2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWMtbGluZSl9Ci5zaGVldCB0ZC5ibGFua3tiYWNrZ3JvdW5kOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNmYmZjZmUgMCA2cHgsI2Y1ZjZmOSA2cHggMTJweCk7Y29sb3I6dmFyKC0taW5rLTIwMCl9Ci5zaGVldCB0ZC5iYW5kewogIGJhY2tncm91bmQtY29sb3I6dmFyKC0tYy1iZyk7CiAgYmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDI1NSwyNTUsMjU1LC42KSAwIDdweCx0cmFuc3BhcmVudCA3cHggMTRweCk7CiAgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYy1saW5lKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1jLWxpbmUpOwogIG1pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzRweDtwYWRkaW5nOjlweCA2cHg7Ym9yZGVyLXJhZGl1czowOwp9Ci5zaGVldCB0ci5pcy1icmVhayB0ZC5zbG90e2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6dmFyKC0taW5rLTIwMCl9Ci5zaGVldCB0ciArIHRyIHRkLnJhaWx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yLW1kKSAwIDAgdmFyKC0tci1tZCl9Ci5waG90by12aWV3e2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojMGYxMzIwO2JvcmRlci1yYWRpdXM6dmFyKC0tci1sZyk7cGFkZGluZzp2YXIoLS1zcC00KX0KLnBob3RvLXZpZXcgaW1ne21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDI2MHB4KTtvYmplY3QtZml0OmNvbnRhaW47Ym9yZGVyLXJhZGl1czp2YXIoLS1yLXNtKX0KCi5lbXB0eXtkaXNwbGF5OmdyaWQ7anVzdGlmeS1pdGVtczpjZW50ZXI7Z2FwOnZhcigtLXNwLTMpO3BhZGRpbmc6dmFyKC0tc3AtMTApIHZhcigtLXNwLTYpO2NvbG9yOnZhcigtLWluay00MDApO3RleHQtYWxpZ246Y2VudGVyfQouZW1wdHkgLmljb3tkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxNnB4O2JhY2tncm91bmQ6dmFyKC0tYnJhbmQtNTApO2NvbG9yOnZhcigtLWJyYW5kLTQwMCl9CgovKiBUb2FzdCAqLwoudG9hc3QtaG9zdHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjUwJTtib3R0b206MzJweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt6LWluZGV4OjkwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7cG9pbnRlci1ldmVudHM6bm9uZX0KLnRvYXN0ewogIGRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OTlweDtmb250LXNpemU6MTNweDtjb2xvcjojZmZmOwogIGJhY2tncm91bmQ6cmdiYSgzNCwzOCw0NiwuOTIpO2JveC1zaGFkb3c6dmFyKC0tc2gtMyk7YW5pbWF0aW9uOnRvYXN0IDIyMG1zIHZhcigtLWVhc2UpOwp9Ci50b2FzdC5va3tiYWNrZ3JvdW5kOnJnYmEoNDYsMTIwLDgwLC45NCl9Ci50b2FzdC53YXJue2JhY2tncm91bmQ6cmdiYSgxODAsMTIwLDIwLC45NSl9CkBrZXlmcmFtZXMgdG9hc3R7ZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpO29wYWNpdHk6MH10b3t0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fQoKQG1lZGlhIChtYXgtd2lkdGg6OTAwcHgpewogIC5wYWdlaGVhZHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6dmFyKC0tc3AtMyl9CiAgLmNhcmQtdG9vbHN7Z2FwOnZhcigtLXNwLTIpfQogIC50YWJzIGJ1dHRvbntwYWRkaW5nOjAgdmFyKC0tc3AtNCl9Cn0KCi8qIOaJk+WNsO+8muS7hei+k+WHuuivvuihqOacrOS9kyAqLwpAbWVkaWEgcHJpbnR7CiAgQHBhZ2V7c2l6ZTpBNCBsYW5kc2NhcGU7bWFyZ2luOjEybW19CiAgYm9keXtiYWNrZ3JvdW5kOiNmZmY7bWluLXdpZHRoOjB9CiAgLmFwcGJhciwucGFnZWhlYWQsLmNhcmQtdG9vbHMsLmhpbnRiYXIsLm1vZGFsLWhlYWQsLm1vZGFsLWZvb3QsLnRvYXN0LWhvc3QsLnBob3RvLWFjdGlvbnMsLnBob3RvLW1ldGF7ZGlzcGxheTpub25lIWltcG9ydGFudH0KICAub3ZlcmxheTpub3QoLmlzLW9wZW4pe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9CiAgLm92ZXJsYXkuaXMtb3Blbntwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lO2JhY2tkcm9wLWZpbHRlcjpub25lfQogIC5tb2RhbHt3aWR0aDoxMDAlO21heC1oZWlnaHQ6bm9uZTtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czowfQogIC5tb2RhbC1ib2R5e292ZXJmbG93OnZpc2libGU7cGFkZGluZzowO2JhY2tncm91bmQ6I2ZmZn0KICAuc2hlZXQgdGgsLnNoZWV0IHRke2JvcmRlci1yYWRpdXM6MDstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtwcmludC1jb2xvci1hZGp1c3Q6ZXhhY3R9Cn0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxoZWFkZXIgY2xhc3M9ImFwcGJhciI+CiAgPGRpdiBjbGFzcz0ibWFyayIgYXJpYS1oaWRkZW49InRydWUiPgogICAgPHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHg9IjMiIHk9IjQiIHdpZHRoPSI3IiBoZWlnaHQ9IjciIHJ4PSIxLjUiLz48cmVjdCB4PSIxNCIgeT0iNCIgd2lkdGg9IjciIGhlaWdodD0iNyIgcng9IjEuNSIvPjxyZWN0IHg9IjMiIHk9IjE1IiB3aWR0aD0iNyIgaGVpZ2h0PSI1IiByeD0iMS41Ii8+PHJlY3QgeD0iMTQiIHk9IjE1IiB3aWR0aD0iNyIgaGVpZ2h0PSI1IiByeD0iMS41Ii8+PC9zdmc+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iZGl2aWRlciIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2PgogIDxkaXYgY2xhc3M9InRpdGxlIj7or77nqIvooag8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDxkaXYgY2xhc3M9InNjaG9vbCI+PHNwYW4gY2xhc3M9ImNyZXN0Ij7lroE8L3NwYW4+PHNwYW4+5aSn5a6B5Zu96ZmF5bCP5a2mPC9zcGFuPjwvZGl2Pgo8L2hlYWRlcj4KCjxkaXYgY2xhc3M9InBhZ2VoZWFkIj4KICA8ZGl2PgogICAgPGgxPuivvueoi+ihqOe8luaOkjwvaDE+CiAgICA8cCBjbGFzcz0ic3ViIj7mjInnj63nuqfnu7TmiqToioLmrKHml7bmrrXkuI7mr4/ml6Xlrabnp5HvvIzmlK/mjIHnlLXlrZDor77ooajlvZXlhaXkuI7nhafniYfor77ooajkuIrkvKDjgII8L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic3RhdHMiIGlkPSJzdGF0cyI+PC9kaXY+CjwvZGl2PgoKPG1haW4gY2xhc3M9IndyYXAiPgogIDxzZWN0aW9uIGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtdG9vbHMiPgogICAgICA8ZGl2IGNsYXNzPSJ0YWJzIiByb2xlPSJ0YWJsaXN0IiBhcmlhLWxhYmVsPSLor77ooajlvaLlvI8iPgogICAgICAgIDxidXR0b24gcm9sZT0idGFiIiBpZD0idGFiLWVsZWN0cm9uaWMiIGFyaWEtY29udHJvbHM9InBhbmUtZWxlY3Ryb25pYyIgYXJpYS1zZWxlY3RlZD0idHJ1ZSIgZGF0YS1wYW5lPSJlbGVjdHJvbmljIj4KICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTQgNmgxNk00IDEyaDE2TTQgMThoMTAiLz48L3N2Zz7nlLXlrZDniYgKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIHJvbGU9InRhYiIgaWQ9InRhYi1waG90byIgYXJpYS1jb250cm9scz0icGFuZS1waG90byIgYXJpYS1zZWxlY3RlZD0iZmFsc2UiIGRhdGEtcGFuZT0icGhvdG8iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNNCA4aDNsMS41LTJoN0wxNyA4aDN2MTFINHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PC9zdmc+54Wn54mH54mICiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZmllbGQtaW5saW5lIiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0byI+CiAgICAgICAgPGxhYmVsIGZvcj0iY2xhc3NTZWwiPuePree6pzwvbGFiZWw+CiAgICAgICAgPHNlbGVjdCBjbGFzcz0ic2VsZWN0IiBpZD0iY2xhc3NTZWwiPjwvc2VsZWN0PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgaWQ9InRvb2xzLWVsZWN0cm9uaWMiIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXIiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QiIGlkPSJidG5BZGQiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz7mlrDlop7oioLmrKEKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IiBpZD0iYnRuUmVzZXQiPuaBouWkjem7mOiupOiKguasoTwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImJ0blByZXZpZXciPumihOiniOivvuihqDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0idG9vbHMtcGhvdG8iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXIiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QiIGlkPSJidG5QaWNrIj7pgInmi6nlm77niYc8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGlkPSJidG5QaG90b1ByZXZpZXciPumihOiniOeFp+eJhzwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0g55S15a2Q54mIIC0tPgogICAgPGRpdiBjbGFzcz0icGFuZSBpcy1hY3RpdmUiIGlkPSJwYW5lLWVsZWN0cm9uaWMiIHJvbGU9InRhYnBhbmVsIiBhcmlhLWxhYmVsbGVkYnk9InRhYi1lbGVjdHJvbmljIj4KICAgICAgPGRpdiBjbGFzcz0idGFibGUtc2Nyb2xsIj4KICAgICAgICA8dGFibGUgY2xhc3M9ImdyaWQiPgogICAgICAgICAgPGNhcHRpb24gY2xhc3M9InNyLW9ubHkiPuaMieiKguasoee8luaOkuWRqOS4gOiHs+WRqOS6lOeahOWtpuenkeS4jui1t+atouaXtumXtDwvY2FwdGlvbj4KICAgICAgICAgIDx0aGVhZCBpZD0iZ3JpZEhlYWQiPjwvdGhlYWQ+CiAgICAgICAgICA8dGJvZHkgaWQ9ImdyaWRCb2R5Ij48L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoaW50YmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0iaGludC10Ij7ml7bmrrXliKTlrprvvJo8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0icnVsZXMiIGlkPSJwZXJpb2RMZWdlbmQiPjwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJydWxlLW5vdGUiPuivvumXtCAvIOWNiOS8keS4uuepuueZveihjO+8jOS4jeWNoOeUqOiKguasoTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blBlcmlvZHMiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiLz48cGF0aCBkPSJNMTIgM3YyLjRNMTIgMTguNlYyMU00LjIgNy41bDIgMS4yTTE3LjggMTUuM2wyIDEuMk00LjIgMTYuNWwyLTEuMk0xNy44IDguN2wyLTEuMiIvPjwvc3ZnPuaXtuauteiuvue9rgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBpZD0iZGlydHlGbGFnIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSDnhafniYfniYggLS0+CiAgICA8ZGl2IGNsYXNzPSJwYW5lIiBpZD0icGFuZS1waG90byIgcm9sZT0idGFicGFuZWwiIGFyaWEtbGFiZWxsZWRieT0idGFiLXBob3RvIiBoaWRkZW4+CiAgICAgIDxkaXYgY2xhc3M9InBob3RvLXBhbmUiPgogICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lIiBpZD0iZHJvcHpvbmUiIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiIGFyaWEtbGFiZWw9IuS4iuS8oOivvueoi+ihqOeFp+eJh++8jOWPr+aLluaLveaWh+S7tuWIsOatpOWkhCI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY29ybmVyIHRsIj48L3NwYW4+PHNwYW4gY2xhc3M9ImNvcm5lciB0ciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJjb3JuZXIgYmwiPjwvc3Bhbj48c3BhbiBjbGFzcz0iY29ybmVyIGJyIj48L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkei1pbm5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImR6LWljb24iPgogICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyA4aDMuNUw4IDUuNWg4TDE3LjUgOEgyMXYxMUgzeiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTMuNSIgcj0iMy41Ii8+PC9zdmc+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkei10aXRsZSI+KyDkuIrkvKDor77nqIvooajnhafniYc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHotc3ViIj7ngrnlh7vpgInmi6nvvIzmiJblsIblm77niYfmi5bmi73liLDmraTlpIQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHotZm9ybWF0cyI+PHNwYW4+SlBHPC9zcGFuPjxzcGFuPlBORzwvc3Bhbj48c3Bhbj5XRUJQPC9zcGFuPjxzcGFuPuWNleW8oCDiiaQgOCBNQjwvc3Bhbj48L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwaG90by1jYXJkIiBpZD0icGhvdG9DYXJkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBob3RvLWZyYW1lIj48aW1nIGlkPSJwaG90b0ltZyIgYWx0PSLor77nqIvooajnhafniYfpooTop4giPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGhvdG8tbWV0YSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIiBpZD0icGhvdG9OYW1lIj48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGlwIG51bSIgaWQ9InBob3RvU2l6ZSI+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hpcCIgaWQ9InBob3RvVGltZSI+PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwaG90by1hY3Rpb25zIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCIgaWQ9ImJ0blJlcGxhY2UiPuabv+aNouWbvueJhzwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXF1aWV0IiBpZD0iYnRuUmVtb3ZlIj7np7vpmaQ8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZUlucHV0IiBhY2NlcHQ9ImltYWdlLyoiIGNsYXNzPSJzci1vbmx5IiB0YWJpbmRleD0iLTEiPgogIDwvc2VjdGlvbj4KPC9tYWluPgoKPCEtLSDpooTop4jlvLnnqpcgLS0+CjxkaXYgY2xhc3M9Im92ZXJsYXkiIGlkPSJvdmVybGF5Ij4KICA8ZGl2IGNsYXNzPSJtb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsVGl0bGUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZCI+CiAgICAgIDxoMiBpZD0ibW9kYWxUaXRsZSI+6K++56iL6KGo6aKE6KeIPC9oMj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ieCIgaWQ9ImJ0bkNsb3NlIiBhcmlhLWxhYmVsPSLlhbPpl63pooTop4giPgogICAgICAgIDxzdmcgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTYgNmwxMiAxMk0xOCA2TDYgMTgiLz48L3N2Zz4KICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIGlkPSJtb2RhbEJvZHkiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QiIGlkPSJidG5QcmludCI+5omT5Y2wPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImJ0bkNsb3NlMiI+5YWz6ZetPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIOaXtuauteiuvue9ruW8ueeqlyAtLT4KPGRpdiBjbGFzcz0ib3ZlcmxheSIgaWQ9InNldE92ZXJsYXkiPgogIDxkaXYgY2xhc3M9Im1vZGFsIG1vZGFsLXNtIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0ic2V0VGl0bGUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZCI+CiAgICAgIDxoMiBpZD0ic2V0VGl0bGUiPuaXtuauteiuvue9rjwvaDI+CiAgICAgIDxidXR0b24gY2xhc3M9IngiIGlkPSJidG5TZXRDbG9zZSIgYXJpYS1sYWJlbD0i5YWz6Zet5pe25q616K6+572uIj4KICAgICAgICA8c3ZnIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxwYXRoIGQ9Ik02IDZsMTIgMTJNMTggNkw2IDE4Ii8+PC9zdmc+CiAgICAgIDwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgPHAgY2xhc3M9InNldC1sZWFkIj7ml7bmrrXmjInoioLmrKHnmoQ8Yj7lvIDlp4vml7bpl7Q8L2I+6Ieq5Yqo5b2S57G777ybPGI+6K++6Ze0PC9iPuS4jjxiPuWNiOS8kTwvYj7kvZzkuLrnqbrnmb3liIbpmpTooYzlkYjnjrDvvIzkuI3ljaDnlKjoioLmrKHjgILosIPmlbTnm7jpgrvml7bmrrXnmoTliIbnlYzml7bpl7TlkI7vvIznvJbovpHljLrliIbnu4TkuI7or77ooajpooTop4jlkIzmraXmm7TmlrDjgII8L3A+CiAgICAgIDx0YWJsZSBjbGFzcz0ic2V0LXRhYmxlIj48dGJvZHkgaWQ9InNldFJvd3MiPjwvdGJvZHk+PC90YWJsZT4KICAgICAgPHAgY2xhc3M9InNldC1ub3RlIiBpZD0ic2V0Tm90ZSI+PC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290Ij4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCIgaWQ9ImJ0blNldFJlc2V0Ij7mgaLlpI3pu5jorqTovrnnlYw8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBpZD0iYnRuU2V0U2F2ZSI+5L+d5a2Y6K6+572uPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJ0b2FzdC1ob3N0IiBpZD0idG9hc3RIb3N0IiBhcmlhLWxpdmU9InBvbGl0ZSIgYXJpYS1hdG9taWM9InRydWUiPjwvZGl2PgoKPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgMS4g5Z+656GA5pWw5o2uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBEQVlTID0gWyfmmJ/mnJ/kuIAnLCfmmJ/mnJ/kuownLCfmmJ/mnJ/kuIknLCfmmJ/mnJ/lm5snLCfmmJ/mnJ/kupQnLCfmmJ/mnJ/lha0nLCfmmJ/mnJ/ml6UnXTsKY29uc3QgQ05fTlVNID0gWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownLCfljYHkuIknLCfljYHlm5snLCfljYHkupQnLCfljYHlha0nXTsKCi8qIOWtpuenkeiJsuadv++8muW6lSAvIOi+uSAvIOWtl++8jOWdh+aMiSBXQ0FHIEFBIOato+aWh+WvueavlOW6puWPluiJsiAqLwpjb25zdCBQQUxFVFRFID0gewogIGJsdWU6ICBbJyNlNmYxZmInLCcjYjVkNGY0JywnIzBjNDQ3YyddLAogIHRlYWw6ICBbJyNlMWY1ZWUnLCcjOWFkNmJkJywnIzA4NTA0MSddLAogIHB1cnBsZTpbJyNlZWVkZmUnLCcjYzRjMGY0JywnIzNjMzQ4OSddLAogIGFtYmVyOiBbJyNmYWVlZGEnLCcjZjBjZjljJywnIzYzMzgwNiddLAogIGNvcmFsOiBbJyNmYWVjZTcnLCcjZjJjMGFjJywnIzcxMmIxMyddLAogIGdyZWVuOiBbJyNlYWYzZGUnLCcjYzNkZGEyJywnIzI3NTAwYSddLAogIHBpbms6ICBbJyNmYmVhZjAnLCcjZjJiY2NkJywnIzcyMjQzZSddLAogIGN5YW46ICBbJyNlNGY0ZjgnLCcjYTlkOGU0JywnIzBiNGM1YyddLAogIGluZGlnbzpbJyNlOGVjZmInLCcjYmNjN2YwJywnIzJhM2E3YSddLAogIG9saXZlOiBbJyNmMWYwZGMnLCcjZGNkOWE4JywnIzQxNDQxMyddLAogIHBsdW06ICBbJyNmNmU5ZjQnLCcjZTBiY2Q5JywnIzZiMmE1ZiddLAogIHNsYXRlOiBbJyNlZWYwZjMnLCcjYzhjZmQ4JywnIzMxNDM0ZiddLAogIHJvc2U6ICBbJyNmZGVjZWYnLCcjZjRjMmNjJywnIzhhMjQzOCddLAogIG1vc3M6ICBbJyNlN2YxZTgnLCcjYjNkM2I3JywnIzFmNGEyNiddCn07CmNvbnN0IFNVQkpFQ1RTID0gWwogIFsn6K+t5paHJywnYmx1ZSddLFsn5pWw5a2mJywnYW1iZXInXSxbJ+iLseivrScsJ3B1cnBsZSddLFsn6YGT5b635LiO5rOV5rK7JywndGVhbCddLAogIFsn56eR5a2mJywnZ3JlZW4nXSxbJ+S9k+iCsicsJ2NvcmFsJ10sWyfpn7PkuZAnLCdwaW5rJ10sWyfnvo7mnK8nLCdyb3NlJ10sCiAgWyfkuabms5UnLCdwbHVtJ10sWyfkv6Hmga/mioDmnK8nLCdjeWFuJ10sWyflirPliqgnLCdvbGl2ZSddLFsn57u85ZCI5a6e6Le1JywnbW9zcyddLAogIFsn5b+D55CG5YGl5bq3JywnaW5kaWdvJ10sWyfnj63kvJonLCdzbGF0ZSddLFsn5qCh5pys6ZiF6K+7JywndGVhbCddLFsn5L2c5Lia6L6F5a+8JywnYmx1ZSddLAogIFsn5pep6K+7JywnaW5kaWdvJ10KXTsKY29uc3QgU1VCSkVDVF9NQVAgPSBuZXcgTWFwKFNVQkpFQ1RTLm1hcCgoW24sY10pPT5bbixjXSkpOwoKLyog6buY6K6k5Y2B6KGM77ya5YWr5Liq6IqC5qyhICsg6K++6Ze0L+WNiOS8keS4pOadoeepuueZveWIhumalOihjCAqLwpjb25zdCBERUZBVUxUX1NMT1RTID0gWwogIFsnMDc6NDAnLCcwODoxMCddLAogIFsnMDg6MjAnLCcwOTowMCddLFsnMDk6MTAnLCcwOTo0MCddLAogIFsnMDk6NTAnLCcxMDoyMCddLAogIFsnMTA6MzAnLCcxMToxMCddLFsnMTE6MjAnLCcxMTo1NSddLAogIFsnMTI6MzAnLCcxNDowMCddLAogIFsnMTQ6MTAnLCcxNDo1MCddLFsnMTU6MDAnLCcxNTo0MCddLAogIFsnMTg6MzAnLCcxOToxMCddCl0ubWFwKChbc3RhcnQsZW5kXSk9Pih7IHN0YXJ0LCBlbmQsIHN1YmplY3RzOiBBcnJheSg3KS5maWxsKCcnKSB9KSk7CgovKiDnpLrkvovor77ooajvvJrku4XnlKjkuo7lsZXnpLrmjpLluIPmlYjmnpzvvIzku7vkuIDljZXlhYPmoLzooqvnvJbovpHlkI7ljbPmoIforrDkuLrmraPlvI/mlbDmja4gKi8KY29uc3QgU0FNUExFX1dFRUsgPSBbCiAgWyfml6nor7snLCfml6nor7snLCfor63mlocnLCfml6nor7snLCfor63mlocnLCfigJQnLCfigJQnXSwKICBbJ+ivreaWhycsJ+aVsOWtpicsJ+iLseivrScsJ+ivreaWhycsJ+aVsOWtpicsJ+enkeWtpicsJ+ePreS8middLAogIFsn5pWw5a2mJywn6K+t5paHJywn5pWw5a2mJywn6Iux6K+tJywn6K+t5paHJywn576O5pyvJywn5Yqz5YqoJ10sCiAgWyfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnXSwKICBbJ+iLseivrScsJ+S9k+iCsicsJ+ivreaWhycsJ+aVsOWtpicsJ+iLseivrScsJ+mfs+S5kCcsJ+mBk+W+t+S4juazleayuyddLAogIFsn5L2T6IKyJywn6Iux6K+tJywn6YGT5b635LiO5rOV5rK7Jywn5L2T6IKyJywn6K+t5paHJywn5Lmm5rOVJywn57u85ZCI5a6e6Le1J10sCiAgWyfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnLCfigJQnXSwKICBbJ+enkeWtpicsJ+e+juacrycsJ+ivreaWhycsJ+enkeWtpicsJ+aVsOWtpicsJ+KAlCcsJ+KAlCddLAogIFsn576O5pyvJywn6Z+z5LmQJywn5pWw5a2mJywn6YGT5b635LiO5rOV5rK7Jywn6Iux6K+tJywn4oCUJywn4oCUJ10sCiAgWyfkvZzkuJrovoXlr7wnLCfkvZzkuJrovoXlr7wnLCfkvZzkuJrovoXlr7wnLCfkvZzkuJrovoXlr7wnLCfkvZzkuJrovoXlr7wnLCfigJQnLCfigJQnXQpdOwpmdW5jdGlvbiBzYW1wbGVTbG90cygpewogIHJldHVybiBERUZBVUxUX1NMT1RTLm1hcCgocyxpKT0+KHsgc3RhcnQ6cy5zdGFydCwgZW5kOnMuZW5kLCBzdWJqZWN0czogU0FNUExFX1dFRUtbaV0ubWFwKHg9Png9PT0n4oCUJz8nJzp4KSB9KSk7Cn0KCmNvbnN0IEdSQURFUyA9IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJ107CmNvbnN0IENMQVNTRVMgPSBHUkFERVMuZmxhdE1hcChnID0+IEFycmF5LmZyb20oe2xlbmd0aDo4fSwgKF8saSk9PmAke2d9JHtpKzF954+tYCkpOwpjb25zdCBTQU1QTEVfQ0xBU1MgPSAn5ZubN+ePrSc7ICAgLy8g6aKE572u56S65L6L6K++6KGo55qE54+t57qnCgovKiDml7bmrrXovrnnlYzvvIjlj6/orr7nva7vvInvvJrlhrPlrprlha3nsbvml7bmrrXnmoTliJLliIYgKi8KY29uc3QgREVGQVVMVF9QRVJJT0RfVElNRVMgPSB7IGVyRW5kOicwODowMCcsIGV4U3RhcnQ6JzA5OjQwJywgZXhFbmQ6JzEwOjIwJywgbHVTdGFydDonMTE6MzAnLCBwbVN0YXJ0OicxNDowMCcsIGV2U3RhcnQ6JzE4OjAwJyB9Owpjb25zdCBQRVJJT0RfVElNRV9MQUJFTFMgPSBbCiAgWydlckVuZCcsJ2VyJywnYW0nXSwgWydleFN0YXJ0JywnYW0nLCdleCddLCBbJ2V4RW5kJywnZXgnLCdhbSddLAogIFsnbHVTdGFydCcsJ2FtJywnbHUnXSwgWydwbVN0YXJ0JywnbHUnLCdwbSddLCBbJ2V2U3RhcnQnLCdwbScsJ2V2J10KXTsKY29uc3QgUEVSSU9EUyA9IHsKICBlcjp7IGxhYmVsOifml6noh6rkuaAnLCBjbHM6J3BlcmlvZC1lcicsIGNvbG9yOicjNGM2ZmQwJywgYmc6JyNlZWY0ZmYnIH0sCiAgYW06eyBsYWJlbDon5LiK5Y2IJywgICBjbHM6J3BlcmlvZC1hbScsIGNvbG9yOicjZDk5YTJiJywgYmc6JyNmZmY5ZWMnIH0sCiAgZXg6eyBsYWJlbDon6K++6Ze0JywgICBjbHM6J3BlcmlvZC1leCcsIGNvbG9yOicjM2Y5ZTYzJywgYmc6JyNlYWY2ZWYnIH0sCiAgbHU6eyBsYWJlbDon5Y2I5LyRJywgICBjbHM6J3BlcmlvZC1sdScsIGNvbG9yOicjZDk3YTRiJywgYmc6JyNmZGYxZWEnIH0sCiAgcG06eyBsYWJlbDon5LiL5Y2IJywgICBjbHM6J3BlcmlvZC1wbScsIGNvbG9yOicjM2Q5ZGI1JywgYmc6JyNlZWY3ZmInIH0sCiAgZXY6eyBsYWJlbDon5pma6Ieq5LmgJywgY2xzOidwZXJpb2QtZXYnLCBjb2xvcjonIzdhNjNkOCcsIGJnOicjZjNmMGZlJyB9LAogIG5vbmU6e2xhYmVsOifmnKrlrprml7bmrrUnLCBjbHM6J3BlcmlvZC1ubycsIGNvbG9yOicjOWFhMGFhJywgYmc6JyNmNGY1ZjcnIH0KfTsKZnVuY3Rpb24gdG9NaW51dGVzKHQpewogIGNvbnN0IG0gPSAvXihcZHsxLDJ9KTooXGR7Mn0pJC8uZXhlYyh0IHx8ICcnKTsKICBpZighbSkgcmV0dXJuIG51bGw7CiAgY29uc3QgaCA9ICttWzFdLCBtbSA9ICttWzJdOwogIGlmKGggPiAyMyB8fCBtbSA+IDU5KSByZXR1cm4gbnVsbDsKICByZXR1cm4gaCo2MCArIG1tOwp9Ci8qIOaXtuauteWIpOWumu+8muS7peW8gOWni+aXtumXtOiQveWcqOWTquS4quWMuumXtOS4uuWHhu+8m+i+ueeVjOmdnuazleaXtuWbnumAgOm7mOiupOWAvCAqLwpmdW5jdGlvbiBwZXJpb2RUaW1lcygpewogIGNvbnN0IG91dCA9IHt9OwogIGZvcihjb25zdCBrIGluIERFRkFVTFRfUEVSSU9EX1RJTUVTKXsKICAgIGNvbnN0IHYgPSBzdGF0ZS5wZXJpb2RzICYmIHRvTWludXRlcyhzdGF0ZS5wZXJpb2RzW2tdKSAhPT0gbnVsbCA/IHN0YXRlLnBlcmlvZHNba10gOiBERUZBVUxUX1BFUklPRF9USU1FU1trXTsKICAgIG91dFtrXSA9IHRvTWludXRlcyh2KTsKICB9CiAgcmV0dXJuIG91dDsKfQpmdW5jdGlvbiBwZXJpb2RPZihzdGFydCl7CiAgY29uc3QgbSA9IHRvTWludXRlcyhzdGFydCk7CiAgaWYobSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgY29uc3QgUCA9IHBlcmlvZFRpbWVzKCk7CiAgaWYobSA8IFAuZXJFbmQpIHJldHVybiAnZXInOwogIGlmKG0gPCBQLmV4U3RhcnQpIHJldHVybiAnYW0nOwogIGlmKG0gPCBQLmV4RW5kKSByZXR1cm4gJ2V4JzsKICBpZihtIDwgUC5sdVN0YXJ0KSByZXR1cm4gJ2FtJzsKICBpZihtIDwgUC5wbVN0YXJ0KSByZXR1cm4gJ2x1JzsKICBpZihtIDwgUC5ldlN0YXJ0KSByZXR1cm4gJ3BtJzsKICByZXR1cm4gJ2V2JzsKfQovKiDor77pl7TkuI7ljYjkvJHkuI3mjpLor77vvJrnvJbovpHljLrkuI7pooTop4jkuK3kvZzkuLrnqbrnmb3liIbpmpTooYzlkYjnjrAgKi8KY29uc3QgQlJFQUtfUEVSSU9EUyA9IG5ldyBTZXQoWydleCcsJ2x1J10pOwpjb25zdCBpc0JyZWFrID0gc2xvdCA9PiBCUkVBS19QRVJJT0RTLmhhcyhwZXJpb2RPZihzbG90LnN0YXJ0KSk7Ci8qIOiKguasoeW6j+WPt+WPquaMieaOkuivvuihjOe0r+WKoO+8jOivvumXtC/ljYjkvJHnqbrnmb3ooYzkuI3ljaDnlKjoioLmrKEgKi8KZnVuY3Rpb24gc2xvdE51bWJlcnMocm93cyl7CiAgbGV0IG4gPSAwOwogIHJldHVybiByb3dzLm1hcChyID0+IGlzQnJlYWsocikgPyBudWxsIDogKytuKTsKfQpjb25zdCBzbG90TGFiZWwgPSBuID0+IG4gPyBg56ysJHtDTl9OVU1bbi0xXSB8fCBufeiKgmAgOiAnJzsKZnVuY3Rpb24gcm93TGFiZWwocm93cywgcmkpewogIHJldHVybiBzbG90TGFiZWwoc2xvdE51bWJlcnMocm93cylbcmldKSB8fCBQRVJJT0RTW3BlcmlvZE9mKHJvd3NbcmldLnN0YXJ0KSB8fCAnbm9uZSddLmxhYmVsOwp9Ci8qIOS+m+WbvuS+i+S4juiuvue9rumdouadv+WxleekuueahOi/nue7reWMuumXtO+8m+S4iuWNiOiiq+ivvumXtOWIh+aIkOWJjeWQjuS4pOautSAqLwpmdW5jdGlvbiBwZXJpb2RSYW5nZXMoKXsKICBjb25zdCBEID0gREVGQVVMVF9QRVJJT0RfVElNRVMsIFAgPSBzdGF0ZS5wZXJpb2RzIHx8IEQ7CiAgcmV0dXJuIFsKICAgIFsnZXInLCcwMDowMCcsUC5lckVuZF0sIFsnYW0nLFAuZXJFbmQsUC5leFN0YXJ0XSwgWydleCcsUC5leFN0YXJ0LFAuZXhFbmRdLAogICAgWydhbScsUC5leEVuZCxQLmx1U3RhcnRdLCBbJ2x1JyxQLmx1U3RhcnQsUC5wbVN0YXJ0XSwgWydwbScsUC5wbVN0YXJ0LFAuZXZTdGFydF0sCiAgICBbJ2V2JyxQLmV2U3RhcnQsJzI0OjAwJ10KICBdOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgMi4g54q25oCB5LiO5oyB5LmF5YyW77yI5rWP6KeI5Zmo5pys5Zyw5a2Y5YKo77yM5oyJ54+t57qn6ZqU56a777yJCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBTVE9SRV9LRVkgPSAnYWNhc3lsbGFidS50aW1ldGFibGUudjEnOwpjb25zdCBzdGF0ZSA9IHsKICBhY3RpdmVDbGFzczogU0FNUExFX0NMQVNTLAogIHRhYjogJ2VsZWN0cm9uaWMnLAogIHBlcmlvZHM6IHsgLi4uREVGQVVMVF9QRVJJT0RfVElNRVMgfSwKICBieUNsYXNzOiB7fQp9OwpmdW5jdGlvbiBlbnN1cmUoY2xzKXsKICBpZighc3RhdGUuYnlDbGFzc1tjbHNdKSBzdGF0ZS5ieUNsYXNzW2Nsc10gPSBjbHMgPT09IFNBTVBMRV9DTEFTUwogICAgPyB7IHNsb3RzOiBzYW1wbGVTbG90cygpLCBwaG90bzogbnVsbCwgc2FtcGxlOiB0cnVlIH0KICAgIDogeyBzbG90czogY2xvbmUoREVGQVVMVF9TTE9UUyksIHBob3RvOiBudWxsLCBzYW1wbGU6IGZhbHNlIH07CiAgY29uc3QgZCA9IHN0YXRlLmJ5Q2xhc3NbY2xzXTsKICBpZighQXJyYXkuaXNBcnJheShkLnNsb3RzKSB8fCAhZC5zbG90cy5sZW5ndGgpIGQuc2xvdHMgPSBjbG9uZShERUZBVUxUX1NMT1RTKTsKICBkLnNsb3RzLmZvckVhY2gocyA9PiB7CiAgICBzLnN1YmplY3RzID0gQXJyYXkuaXNBcnJheShzLnN1YmplY3RzKSA/IHMuc3ViamVjdHMuc2xpY2UoMCw3KSA6IFtdOwogICAgd2hpbGUocy5zdWJqZWN0cy5sZW5ndGggPCA3KSBzLnN1YmplY3RzLnB1c2goJycpOwogIH0pOwogIHJldHVybiBkOwp9CmNvbnN0IGNsb25lID0gdiA9PiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHYpKTsKCi8qIOi+ueeVjOW/hemhu+WtmOWcqOS4lOS4peagvOmAkuWinu+8jOWQpuWImeaVtOe7hOWbnumAgOm7mOiupOWAvO+8jOmBv+WFjeWHuueOsOepuuaXtuautSAqLwpmdW5jdGlvbiB2YWxpZFBlcmlvZHMocCl7CiAgaWYoIXApIHJldHVybiBmYWxzZTsKICBsZXQgcHJldiA9IC0xOwogIGZvcihjb25zdCBrIG9mIE9iamVjdC5rZXlzKERFRkFVTFRfUEVSSU9EX1RJTUVTKSl7CiAgICBjb25zdCBtID0gdG9NaW51dGVzKHBba10pOwogICAgaWYobSA9PT0gbnVsbCB8fCBtIDw9IHByZXYpIHJldHVybiBmYWxzZTsKICAgIHByZXYgPSBtOwogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBsb2FkKCl7CiAgdHJ5ewogICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkVfS0VZKTsKICAgIGlmKCFyYXcpIHJldHVybjsKICAgIGNvbnN0IHNhdmVkID0gSlNPTi5wYXJzZShyYXcpOwogICAgaWYoc2F2ZWQgJiYgc2F2ZWQuYnlDbGFzcykgc3RhdGUuYnlDbGFzcyA9IHNhdmVkLmJ5Q2xhc3M7CiAgICBpZihzYXZlZCAmJiB0eXBlb2Ygc2F2ZWQuYWN0aXZlQ2xhc3MgPT09ICdzdHJpbmcnICYmIENMQVNTRVMuaW5jbHVkZXMoc2F2ZWQuYWN0aXZlQ2xhc3MpKSBzdGF0ZS5hY3RpdmVDbGFzcyA9IHNhdmVkLmFjdGl2ZUNsYXNzOwogICAgaWYoc2F2ZWQgJiYgKHNhdmVkLnRhYiA9PT0gJ3Bob3RvJykpIHN0YXRlLnRhYiA9IHNhdmVkLnRhYjsKICAgIGlmKHNhdmVkICYmIHZhbGlkUGVyaW9kcyhzYXZlZC5wZXJpb2RzKSkgc3RhdGUucGVyaW9kcyA9IHsgLi4uREVGQVVMVF9QRVJJT0RfVElNRVMsIC4uLnNhdmVkLnBlcmlvZHMgfTsKICB9Y2F0Y2goZSl7IC8qIOWtmOWCqOS4jeWPr+eUqOaXtuaMieepuueKtuaAgei/kOihjCAqLyB9Cn0KbGV0IHNhdmVUaW1lciA9IG51bGw7CmZ1bmN0aW9uIHBlcnNpc3QoKXsKICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICBzZXREaXJ0eSh0cnVlKTsKICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpPT57CiAgICB0cnl7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JFX0tFWSwgSlNPTi5zdHJpbmdpZnkoeyBhY3RpdmVDbGFzczogc3RhdGUuYWN0aXZlQ2xhc3MsIHRhYjogc3RhdGUudGFiLCBwZXJpb2RzOiBzdGF0ZS5wZXJpb2RzLCBieUNsYXNzOiBzdGF0ZS5ieUNsYXNzIH0pKTsKICAgICAgc2V0RGlydHkoZmFsc2UpOwogICAgfWNhdGNoKGUpewogICAgICB0b2FzdCgn5rWP6KeI5Zmo5a2Y5YKo56m66Ze05LiN6Laz77yM6K++6KGo5pyq6IO95L+d5a2YJywnd2FybicpOwogICAgfQogIH0sIDQwMCk7Cn0KZnVuY3Rpb24gc2V0RGlydHkob24pewogIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpcnR5RmxhZycpOwogIGVsLmlubmVySFRNTCA9IG9uCiAgICA/ICc8c3BhbiBjbGFzcz0ic2F2ZWQgaXMtZGlydHkiPjxzcGFuIGNsYXNzPSJkb3QiPjwvc3Bhbj7mraPlnKjkv53lrZjigKY8L3NwYW4+JwogICAgOiAnPHNwYW4gY2xhc3M9InNhdmVkIj48c3BhbiBjbGFzcz0iZG90Ij48L3NwYW4+5bey6Ieq5Yqo5L+d5a2YPC9zcGFuPic7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAzLiBET00g5byV55SoCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCAkID0gaWQgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwpjb25zdCBlbHMgPSB7CiAgY2xhc3NTZWw6ICQoJ2NsYXNzU2VsJyksIGhlYWQ6ICQoJ2dyaWRIZWFkJyksIGJvZHk6ICQoJ2dyaWRCb2R5JyksCiAgcGFuZUU6ICQoJ3BhbmUtZWxlY3Ryb25pYycpLCBwYW5lUDogJCgncGFuZS1waG90bycpLAogIHRvb2xzRTogJCgndG9vbHMtZWxlY3Ryb25pYycpLCB0b29sc1A6ICQoJ3Rvb2xzLXBob3RvJyksCiAgZHJvcHpvbmU6ICQoJ2Ryb3B6b25lJyksIGZpbGVJbnB1dDogJCgnZmlsZUlucHV0JyksCiAgcGhvdG9DYXJkOiAkKCdwaG90b0NhcmQnKSwgcGhvdG9JbWc6ICQoJ3Bob3RvSW1nJyksIHBob3RvTmFtZTogJCgncGhvdG9OYW1lJyksCiAgcGhvdG9TaXplOiAkKCdwaG90b1NpemUnKSwgcGhvdG9UaW1lOiAkKCdwaG90b1RpbWUnKSwKICBvdmVybGF5OiAkKCdvdmVybGF5JyksIG1vZGFsQm9keTogJCgnbW9kYWxCb2R5JyksIG1vZGFsVGl0bGU6ICQoJ21vZGFsVGl0bGUnKSwKICBsZWdlbmQ6ICQoJ3BlcmlvZExlZ2VuZCcpLCBzZXRPdmVybGF5OiAkKCdzZXRPdmVybGF5JyksIHNldFJvd3M6ICQoJ3NldFJvd3MnKSwgc2V0Tm90ZTogJCgnc2V0Tm90ZScpLAogIHN0YXRzOiAkKCdzdGF0cycpLCB0b2FzdEhvc3Q6ICQoJ3RvYXN0SG9zdCcpCn07CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgNC4g5riy5p+T77ya54+t57qnIC8g57uf6K6hIC8g57yW6L6R6KGoCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiByZW5kZXJDbGFzc2VzKCl7CiAgZWxzLmNsYXNzU2VsLmlubmVySFRNTCA9IEdSQURFUy5tYXAoZyA9PgogICAgYDxvcHRncm91cCBsYWJlbD0iJHtnfeW5tOe6pyI+JHtDTEFTU0VTLmZpbHRlcihjPT5jLnN0YXJ0c1dpdGgoZykpLm1hcChjPT5gPG9wdGlvbiAke2M9PT1zdGF0ZS5hY3RpdmVDbGFzcz8nc2VsZWN0ZWQnOicnfT4ke2N9PC9vcHRpb24+YCkuam9pbignJyl9PC9vcHRncm91cD5gCiAgKS5qb2luKCcnKTsKfQoKZnVuY3Rpb24gcmVuZGVyU3RhdHMoKXsKICBjb25zdCBkID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKTsKICBjb25zdCBmaWxsZWQgPSBkLnNsb3RzLmZpbHRlcihzPT4haXNCcmVhayhzKSkucmVkdWNlKChuLHMpPT4gbiArIHMuc3ViamVjdHMuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCwgMCk7CiAgY29uc3QgcGVyaW9kcyA9IG5ldyBTZXQoZC5zbG90cy5maWx0ZXIocz0+IWlzQnJlYWsocykpLm1hcChzPT5wZXJpb2RPZihzLnN0YXJ0KSkuZmlsdGVyKEJvb2xlYW4pKTsKICBjb25zdCBwaG90byA9IGQucGhvdG8gPyAn5bey5LiK5LygJyA6ICfmnKrkuIrkvKAnOwogIGVscy5zdGF0cy5pbm5lckhUTUwgPSBbCiAgICBbJ+W9k+WJjeePree6pycsIHN0YXRlLmFjdGl2ZUNsYXNzXSwKICAgIFsn6IqC5qyhJywgc2xvdE51bWJlcnMoZC5zbG90cykuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aCArICcg6IqCJ10sCiAgICBbJ+W3suaOkuivvueoiycsIGZpbGxlZCArICcg6ZeoJ10sCiAgICBbJ+imhuebluaXtuautScsIHBlcmlvZHMuc2l6ZSA/IChwZXJpb2RzLnNpemUgPiAzID8gcGVyaW9kcy5zaXplICsgJyDnsbvml7bmrrUnIDogWy4uLnBlcmlvZHNdLm1hcChwPT5QRVJJT0RTW3BdLmxhYmVsKS5qb2luKCcgwrcgJykpIDogJ+W+heiuvuWumiddLAogICAgWyfnhafniYfor77ooagnLCBwaG90b10KICBdLm1hcCgoW2ssdl0pPT5gPGRpdiBjbGFzcz0ic3RhdCI+PGI+JHtlc2Modil9PC9iPjxzcGFuPiR7a308L3NwYW4+PC9kaXY+YCkuam9pbignJykKICAgKyAoZC5zYW1wbGUgPyBgPGRpdiBjbGFzcz0ic3RhdCBzYW1wbGUiPjxiPuekuuS+izwvYj48c3Bhbj4ke1NBTVBMRV9DTEFTU33pooTnva7or77ooajvvIznvJbovpHlkI7ovazkuLrmraPlvI/mlbDmja48L3NwYW4+PC9kaXY+YCA6ICcnKTsKfQoKLyog5Zu+5L6L77ya55Sx5b2T5YmN5pe25q616L6555WM5o6o5a+877yM5LiK5Y2I6KKr6K++6Ze05pON5YiG5Li65YmN5ZCO5Lik5q6177yM5pWF5Ye6546w5Lik5qyhICovCmZ1bmN0aW9uIHJlbmRlckxlZ2VuZCgpewogIGVscy5sZWdlbmQuaW5uZXJIVE1MID0gcGVyaW9kUmFuZ2VzKCkubWFwKChbayxmcm9tLHRvXSk9PnsKICAgIGNvbnN0IHAgPSBQRVJJT0RTW2tdOwogICAgY29uc3Qgc3BhbiA9IGsgPT09ICdlcicgPyAnJmx0OyAnICsgdG8gOiBrID09PSAnZXYnID8gJ+KJpSAnICsgZnJvbSA6IGZyb20gKyAn4oCTJyArIHRvOwogICAgcmV0dXJuIGA8c3BhbiBjbGFzcz0icnVsZSI+PGkgc3R5bGU9ImJhY2tncm91bmQ6JHtwLmNvbG9yfSI+PC9pPjxiPiR7cC5sYWJlbH08L2I+PHNwYW4gY2xhc3M9Im51bSI+JHtzcGFufTwvc3Bhbj48L3NwYW4+YDsKICB9KS5qb2luKCcnKTsKfQoKZnVuY3Rpb24gcmVuZGVySGVhZCgpewogIGVscy5oZWFkLmlubmVySFRNTCA9IGA8dHI+CiAgICA8dGggY2xhc3M9ImNvbC1zbG90Ij7oioLmrKE8L3RoPgogICAgJHtEQVlTLm1hcCgoZCxpKT0+YDx0aCBjbGFzcz0iJHtpPj01Pyd3ZWVrZW5kJzonJ30iPiR7ZH08c21hbGw+JHtpPj01PyflkajmnKsnOifnrKwnKyhpKzEpKyflpKknfTwvc21hbGw+PC90aD5gKS5qb2luKCcnKX0KICAgIDx0aCBjbGFzcz0iY29sLXRpbWUiPuW8gOWni+aXtumXtDwvdGg+PHRoIGNsYXNzPSJjb2wtdGltZSI+57uT5p2f5pe26Ze0PC90aD48dGggY2xhc3M9ImNvbC1vcCI+5pON5L2cPC90aD4KICA8L3RyPmA7Cn0KCmZ1bmN0aW9uIHN1YmplY3RPcHRpb25zKGN1cil7CiAgY29uc3Qgb3B0cyA9IFtgPG9wdGlvbiB2YWx1ZT0iIiAke2N1cj8nJzonc2VsZWN0ZWQnfT7or7fpgInmi6k8L29wdGlvbj5gXQogICAgLmNvbmNhdChTVUJKRUNUUy5tYXAoKFtuXSk9PmA8b3B0aW9uIHZhbHVlPSIke259IiAke249PT1jdXI/J3NlbGVjdGVkJzonJ30+JHtufTwvb3B0aW9uPmApKTsKICBpZihjdXIgJiYgIVNVQkpFQ1RfTUFQLmhhcyhjdXIpKSBvcHRzLnNwbGljZSgxLDAsYDxvcHRpb24gdmFsdWU9IiR7ZXNjKGN1cil9IiBzZWxlY3RlZD4ke2VzYyhjdXIpfTwvb3B0aW9uPmApOwogIHJldHVybiBvcHRzLmpvaW4oJycpOwp9CgpmdW5jdGlvbiByZW5kZXJHcmlkKCl7CiAgY29uc3QgZCA9IGVuc3VyZShzdGF0ZS5hY3RpdmVDbGFzcyk7CiAgY29uc3Qgcm93cyA9IGQuc2xvdHM7CiAgaWYoIXJvd3MubGVuZ3RoKXsKICAgIGVscy5ib2R5LmlubmVySFRNTCA9IGA8dHI+PHRkIGNvbHNwYW49IjExIj48ZGl2IGNsYXNzPSJlbXB0eSI+CiAgICAgIDxkaXYgY2xhc3M9ImljbyI+PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxyZWN0IHg9IjMiIHk9IjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxNyIgcng9IjIiLz48cGF0aCBkPSJNMyA5aDE4TTggMnY0TTE2IDJ2NCIvPjwvc3ZnPjwvZGl2PgogICAgICA8ZGl2PjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstNzAwKSI+6L+Y5rKh5pyJ6IqC5qyhPC9iPjxicj7ngrnlh7vjgIzmlrDlop7oioLmrKHjgI3lvIDlp4vnvJbmjpLmnKznj63or77nqIvooajjgII8L2Rpdj4KICAgIDwvZGl2PjwvdGQ+PC90cj5gOwogICAgcmV0dXJuOwogIH0KICBsZXQgaHRtbCA9ICcnOwogIC8qIOaMieebuOmCu+WQjOauteWIhue7hO+8muiKguasoeW6j+WPt+eUseaOkuivvuihjOWGs+Wumu+8jOivvumXtC/ljYjkvJHooYzlj6rkvZzliIbpmpTluKbjgIHkuI3mj5LlhaXliIbnu4TooYwgKi8KICBjb25zdCBudW1zID0gc2xvdE51bWJlcnMocm93cyk7CiAgY29uc3QgcnVucyA9IFtdOwogIHJvd3MuZm9yRWFjaCgociwgcmkpID0+IHsKICAgIGNvbnN0IHAgPSBwZXJpb2RPZihyLnN0YXJ0KTsKICAgIGNvbnN0IGxhc3QgPSBydW5zW3J1bnMubGVuZ3RoLTFdOwogICAgaWYobGFzdCAmJiBsYXN0LnAgPT09IHApIGxhc3QubisrOwogICAgZWxzZSBydW5zLnB1c2goeyBwLCBuOjEsIGF0OnJpIH0pOwogIH0pOwogIGNvbnN0IHJ1bkF0ID0gbmV3IE1hcChydW5zLm1hcChydW4gPT4gW3J1bi5hdCwgcnVuXSkpOwogIHJvd3MuZm9yRWFjaCgocywgcmkpID0+IHsKICAgIGNvbnN0IGJyayA9IGlzQnJlYWsocyk7CiAgICBjb25zdCBtZXRhID0gUEVSSU9EU1twZXJpb2RPZihzLnN0YXJ0KSB8fCAnbm9uZSddOwogICAgY29uc3QgcnVuID0gcnVuQXQuZ2V0KHJpKTsKICAgIGlmKHJ1biAmJiAhQlJFQUtfUEVSSU9EUy5oYXMocnVuLnApKXsKICAgICAgaHRtbCArPSBgPHRyIGNsYXNzPSJwZXJpb2Qtcm93ICR7bWV0YS5jbHN9Ij48dGQgY29sc3Bhbj0iMTEiPjxzcGFuIGNsYXNzPSJ0YWciPjxpIHN0eWxlPSJiYWNrZ3JvdW5kOiR7bWV0YS5jb2xvcn0iPjwvaT4ke21ldGEubGFiZWx9PHNwYW4gY2xhc3M9ImNudCI+JHtydW4ubn0g6IqCPC9zcGFuPjwvc3Bhbj48L3RkPjwvdHI+YDsKICAgIH0KICAgIGNvbnN0IGludmFsaWQgPSBzLnN0YXJ0ICYmIHMuZW5kICYmIHRvTWludXRlcyhzLmVuZCkgPD0gdG9NaW51dGVzKHMuc3RhcnQpOwogICAgY29uc3QgbGFiZWwgPSBzbG90TGFiZWwobnVtc1tyaV0pOwogICAgaHRtbCArPSBgPHRyIGRhdGEtcm93PSIke3JpfSIgY2xhc3M9IiR7YnJrPydpcy1icmVhayc6Jyd9Ij4KICAgICAgPHRkIGNsYXNzPSJjb2wtc2xvdCI+PGRpdiBjbGFzcz0ic2xvdC1uYW1lIj4ke2xhYmVsfTwvZGl2PjxkaXYgY2xhc3M9InNsb3QtdGltZSBudW0iPiR7cy5zdGFydHx8Jy0tOi0tJ30g4oCTICR7cy5lbmR8fCctLTotLSd9PC9kaXY+PC90ZD4KICAgICAgJHticmsKICAgICAgICA/IGA8dGQgY2xhc3M9ImJhbmQiIGNvbHNwYW49IjciIHN0eWxlPSItLWMtYmc6JHttZXRhLmJnfTstLWMtZmc6JHttZXRhLmNvbG9yfTstLWMtbGluZToke21ldGEuY29sb3J9NDAiPiR7bWV0YS5sYWJlbH0gwrcg5LiN5o6S6K++PC90ZD5gCiAgICAgICAgOiBzLnN1YmplY3RzLm1hcCgoc3ViLGNpKT0+ewogICAgICAgIGNvbnN0IGh1ZSA9IFNVQkpFQ1RfTUFQLmdldChzdWIpOwogICAgICAgIGNvbnN0IFtiZyxsaW5lLGZnXSA9IGh1ZSA/IFBBTEVUVEVbaHVlXSA6IFtdOwogICAgICAgIGNvbnN0IHN0eWxlID0gaHVlID8gYHN0eWxlPSItLWMtYmc6JHtiZ307LS1jLWxpbmU6JHtsaW5lfTstLWMtZmc6JHtmZ30iYCA6ICcnOwogICAgICAgIHJldHVybiBgPHRkIGNsYXNzPSJjZWxsICR7Y2k+PTU/J3dlZWtlbmQnOicnfSI+PHNwYW4gY2xhc3M9InBpY2sgJHtzdWI/J2lzLXNldCc6Jyd9IiAke3N0eWxlfT4KICAgICAgICAgIDxzZWxlY3QgZGF0YS1yb3c9IiR7cml9IiBkYXRhLWNvbD0iJHtjaX0iIGFyaWEtbGFiZWw9IiR7REFZU1tjaV19ICR7bGFiZWx9IOWtpuenkSI+JHtzdWJqZWN0T3B0aW9ucyhzdWIpfTwvc2VsZWN0PgogICAgICAgIDwvc3Bhbj48L3RkPmA7CiAgICAgIH0pLmpvaW4oJycpfQogICAgICA8dGQgY2xhc3M9ImNvbC10aW1lIj48ZGl2IGNsYXNzPSJ0aW1lLXdyYXAiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0aW1lIiBkYXRhLXJvdz0iJHtyaX0iIGRhdGEtZmllbGQ9InN0YXJ0IiB2YWx1ZT0iJHtzLnN0YXJ0fHwnJ30iIGNsYXNzPSIke2ludmFsaWQ/J2ludmFsaWQnOicnfSIgYXJpYS1sYWJlbD0i5byA5aeL5pe26Ze0Ij4KICAgICAgPC9kaXY+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJjb2wtdGltZSI+PGRpdiBjbGFzcz0idGltZS13cmFwIj4KICAgICAgICA8aW5wdXQgdHlwZT0idGltZSIgZGF0YS1yb3c9IiR7cml9IiBkYXRhLWZpZWxkPSJlbmQiIHZhbHVlPSIke3MuZW5kfHwnJ30iIGNsYXNzPSIke2ludmFsaWQ/J2ludmFsaWQnOicnfSIgYXJpYS1sYWJlbD0i57uT5p2f5pe26Ze0Ij4KICAgICAgPC9kaXY+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJjb2wtb3AiPjxidXR0b24gY2xhc3M9InJvdy1kZWwiIGRhdGEtZGVsPSIke3JpfSIgYXJpYS1sYWJlbD0i5Yig6ZmkJHtyb3dMYWJlbChyb3dzLCByaSl9Ij4KICAgICAgICA8c3ZnIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxwYXRoIGQ9Ik02IDZsMTIgMTJNMTggNkw2IDE4Ii8+PC9zdmc+CiAgICAgIDwvYnV0dG9uPjwvdGQ+CiAgICA8L3RyPmA7CiAgfSk7CiAgZWxzLmJvZHkuaW5uZXJIVE1MID0gaHRtbDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIDUuIOa4suafk++8mueFp+eJh+ivvuihqAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcmVuZGVyUGhvdG8oKXsKICBjb25zdCBkID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKTsKICBjb25zdCBwID0gZC5waG90bzsKICBpZihwKXsKICAgIGVscy5kcm9wem9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZWxzLnBob3RvQ2FyZC5jbGFzc0xpc3QuYWRkKCdpcy1zaG93bicpOwogICAgZWxzLnBob3RvSW1nLnNyYyA9IHAuZGF0YVVybDsKICAgIGVscy5waG90b0ltZy5hbHQgPSBgJHtzdGF0ZS5hY3RpdmVDbGFzc30g6K++56iL6KGo54Wn54mHYDsKICAgIGVscy5waG90b05hbWUudGV4dENvbnRlbnQgPSBwLm5hbWU7CiAgICBlbHMucGhvdG9TaXplLnRleHRDb250ZW50ID0gZm9ybWF0U2l6ZShwLnNpemUpOwogICAgZWxzLnBob3RvVGltZS50ZXh0Q29udGVudCA9ICfkuIrkvKDkuo4gJyArIHAuYXQ7CiAgfWVsc2V7CiAgICBlbHMuZHJvcHpvbmUuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgZWxzLnBob3RvQ2FyZC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zaG93bicpOwogICAgZWxzLnBob3RvSW1nLnJlbW92ZUF0dHJpYnV0ZSgnc3JjJyk7CiAgfQp9CmZ1bmN0aW9uIGZvcm1hdFNpemUoYil7CiAgaWYoIWIpIHJldHVybiAn4oCUJzsKICByZXR1cm4gYiA+IDEwMjQqMTAyNCA/IChiLzEwMjQvMTAyNCkudG9GaXhlZCgxKSArICcgTUInIDogTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChiLzEwMjQpKSArICcgS0InOwp9CmZ1bmN0aW9uIGhhbmRsZUZpbGUoZmlsZSl7CiAgaWYoIWZpbGUpIHJldHVybjsKICBpZighL15pbWFnZVwvLy50ZXN0KGZpbGUudHlwZSkpeyB0b2FzdCgn5LuF5pSv5oyB5Zu+54mH5qC85byP77yISlBHIC8gUE5HIC8gV0VCUO+8iScsJ3dhcm4nKTsgcmV0dXJuOyB9CiAgaWYoZmlsZS5zaXplID4gOCoxMDI0KjEwMjQpeyB0b2FzdCgn5Zu+54mH6LaF6L+HIDggTULvvIzor7fljovnvKnlkI7lho3kuIrkvKAnLCd3YXJuJyk7IHJldHVybjsgfQogIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHsKICAgIGNvbnN0IGQgPSBlbnN1cmUoc3RhdGUuYWN0aXZlQ2xhc3MpOwogICAgZC5waG90byA9IHsgZGF0YVVybDogcmVhZGVyLnJlc3VsdCwgbmFtZTogZmlsZS5uYW1lLCBzaXplOiBmaWxlLnNpemUsIGF0OiBzdGFtcCgpIH07CiAgICBwZXJzaXN0KCk7IHJlbmRlclBob3RvKCk7IHJlbmRlclN0YXRzKCk7IHRvYXN0KCfnhafniYfor77ooajlt7LkuIrkvKAnLCdvaycpOwogIH07CiAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB0b2FzdCgn5Zu+54mH6K+75Y+W5aSx6LSl77yM6K+36YeN6K+VJywnd2FybicpOwogIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwp9CmZ1bmN0aW9uIHN0YW1wKCl7CiAgY29uc3QgdCA9IG5ldyBEYXRlKCksIHogPSBuID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCcwJyk7CiAgcmV0dXJuIGAke3QuZ2V0RnVsbFllYXIoKX0tJHt6KHQuZ2V0TW9udGgoKSsxKX0tJHt6KHQuZ2V0RGF0ZSgpKX0gJHt6KHQuZ2V0SG91cnMoKSl9OiR7eih0LmdldE1pbnV0ZXMoKSl9YDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIDYuIOmihOiniAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gYnVpbGRQcmV2aWV3VGFibGUoKXsKICBjb25zdCBkID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKTsKICBjb25zdCByb3dzID0gZC5zbG90cy5zbGljZSgpLnNvcnQoKGEsYik9Pih0b01pbnV0ZXMoYS5zdGFydCkgPz8gOTk5OSkgLSAodG9NaW51dGVzKGIuc3RhcnQpID8/IDk5OTkpKTsKICBpZighcm93cy5sZW5ndGgpewogICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJlbXB0eSI+PGRpdiBjbGFzcz0iaWNvIj4KICAgICAgPHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ij48cmVjdCB4PSIzIiB5PSI0IiB3aWR0aD0iMTgiIGhlaWdodD0iMTciIHJ4PSIyIi8+PHBhdGggZD0iTTMgOWgxOCIvPjwvc3ZnPgogICAgICA8L2Rpdj48ZGl2Puivt+WFiOWcqOOAjOeUteWtkOeJiOOAjeS4ree8luaOkuiKguasoeS4juWtpuenkeOAgjwvZGl2PjwvZGl2PmA7CiAgfQogIGNvbnN0IGdyb3VwcyA9IFtdOwogIHJvd3MuZm9yRWFjaChyID0+IHsKICAgIGNvbnN0IHAgPSBwZXJpb2RPZihyLnN0YXJ0KSB8fCAnbm9uZSc7CiAgICBjb25zdCBsYXN0ID0gZ3JvdXBzW2dyb3Vwcy5sZW5ndGgtMV07CiAgICBpZihsYXN0ICYmIGxhc3Qua2V5ID09PSBwKSBsYXN0Lml0ZW1zLnB1c2gocik7CiAgICBlbHNlIGdyb3Vwcy5wdXNoKHsga2V5OnAsIGl0ZW1zOltyXSB9KTsKICB9KTsKICBjb25zdCBpZHggPSBuZXcgTWFwKHJvd3MubWFwKChyLGkpPT5bcixpXSkpOwogIGNvbnN0IG51bXMgPSBzbG90TnVtYmVycyhyb3dzKTsKCiAgbGV0IGJvZHkgPSAnJzsKICBncm91cHMuZm9yRWFjaChnID0+IHsKICAgIGNvbnN0IG1ldGEgPSBQRVJJT0RTW2cua2V5XTsKICAgIGNvbnN0IGJyayA9IEJSRUFLX1BFUklPRFMuaGFzKGcua2V5KTsKICAgIGcuaXRlbXMuZm9yRWFjaCgociwgaSkgPT4gewogICAgICBjb25zdCByYWlsID0gaSA9PT0gMAogICAgICAgID8gYDx0ZCBjbGFzcz0icmFpbCIgcm93c3Bhbj0iJHtnLml0ZW1zLmxlbmd0aH0iIHN0eWxlPSItLWMtYmc6JHttZXRhLmJnfTstLWMtZmc6JHttZXRhLmNvbG9yfSI+JHttZXRhLmxhYmVsfTwvdGQ+YCA6ICcnOwogICAgICBjb25zdCBjZWxscyA9IGJyawogICAgICAgID8gYDx0ZCBjbGFzcz0iYmFuZCIgY29sc3Bhbj0iNyIgc3R5bGU9Ii0tYy1iZzoke21ldGEuYmd9Oy0tYy1saW5lOiR7bWV0YS5jb2xvcn0zMyI+PC90ZD5gCiAgICAgICAgOiByLnN1YmplY3RzLm1hcCgoc3ViLGNpKT0+ewogICAgICAgIGlmKCFzdWIpIHJldHVybiBgPHRkIGNsYXNzPSJibGFuayI+4oCUPC90ZD5gOwogICAgICAgIGNvbnN0IGh1ZSA9IFNVQkpFQ1RfTUFQLmdldChzdWIpOwogICAgICAgIGNvbnN0IFtiZyxsaW5lLGZnXSA9IGh1ZSA/IFBBTEVUVEVbaHVlXSA6IFsnI2ZiZmNmZScsJ3ZhcigtLWxpbmUpJywndmFyKC0taW5rLTYwMCknXTsKICAgICAgICByZXR1cm4gYDx0ZCBjbGFzcz0ic3ViamVjdCIgc3R5bGU9Ii0tYy1iZzoke2JnfTstLWMtbGluZToke2xpbmV9Oy0tYy1mZzoke2ZnfSI+JHtlc2Moc3ViKX08L3RkPmA7CiAgICAgIH0pLmpvaW4oJycpOwogICAgICBib2R5ICs9IGA8dHIgY2xhc3M9IiR7YnJrPydpcy1icmVhayc6Jyd9Ij4ke3JhaWx9PHRkIGNsYXNzPSJzbG90Ij4ke3Nsb3RMYWJlbChudW1zW2lkeC5nZXQocildKX08L3RkPiR7Y2VsbHN9PHRkIGNsYXNzPSJ0aW1lIj4ke3Iuc3RhcnR8fCctLTotLSd9IOKAkyAke3IuZW5kfHwnLS06LS0nfTwvdGQ+PC90cj5gOwogICAgfSk7CiAgfSk7CgogIHJldHVybiBgPHRhYmxlIGNsYXNzPSJzaGVldCI+CiAgICA8Y2FwdGlvbj48c3BhbiBjbGFzcz0idCI+JHtlc2Moc3RhdGUuYWN0aXZlQ2xhc3MpfSDor77nqIvooag8L3NwYW4+PHNwYW4gY2xhc3M9InMiPuWkp+WugeWbvemZheWwj+WtpiDCtyDnlJ/miJDml7bpl7QgJHtzdGFtcCgpfTwvc3Bhbj48L2NhcHRpb24+CiAgICA8dGhlYWQ+PHRyPgogICAgICA8dGggY2xhc3M9ImgtZW1wdHkiIHN0eWxlPSJtaW4td2lkdGg6NTJweCI+PHNwYW4gY2xhc3M9ImEiPuaXtuautTwvc3Bhbj48c3BhbiBjbGFzcz0iYiI+5pif5pyfPC9zcGFuPjwvdGg+CiAgICAgIDx0aCBzdHlsZT0ibWluLXdpZHRoOjcwcHgiPuiKguasoTwvdGg+CiAgICAgICR7REFZUy5tYXAoKHgsaSk9PmA8dGggY2xhc3M9IiR7aT49NT8naXMtd2Vla2VuZCc6Jyd9Ij4ke3h9PC90aD5gKS5qb2luKCcnKX0KICAgICAgPHRoIGNsYXNzPSJoLXRpbWUiIHN0eWxlPSJtaW4td2lkdGg6MTE4cHgiPuaXtumXtDwvdGg+CiAgICA8L3RyPjwvdGhlYWQ+CiAgICA8dGJvZHk+JHtib2R5fTwvdGJvZHk+CiAgPC90YWJsZT5gOwp9CgpmdW5jdGlvbiBvcGVuUHJldmlldygpewogIGlmKHN0YXRlLnRhYiA9PT0gJ3Bob3RvJyl7CiAgICBjb25zdCBwID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKS5waG90bzsKICAgIGVscy5tb2RhbFRpdGxlLnRleHRDb250ZW50ID0gJ+ivvueoi+ihqOeFp+eJh+mihOiniCc7CiAgICBlbHMubW9kYWxCb2R5LmlubmVySFRNTCA9IHAKICAgICAgPyBgPGRpdiBjbGFzcz0icGhvdG8tdmlldyI+PGltZyBzcmM9IiR7cC5kYXRhVXJsfSIgYWx0PSIke2VzYyhzdGF0ZS5hY3RpdmVDbGFzcyl9IOivvueoi+ihqOeFp+eJhyI+PC9kaXY+CiAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0taW5rLTQwMCk7dGV4dC1hbGlnbjpjZW50ZXIiPiR7ZXNjKHN0YXRlLmFjdGl2ZUNsYXNzKX0gwrcgJHtlc2MocC5uYW1lKX0gwrcgJHtmb3JtYXRTaXplKHAuc2l6ZSl9PC9wPmAKICAgICAgOiBgPGRpdiBjbGFzcz0iZW1wdHkiPjxkaXYgY2xhc3M9ImljbyI+PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ij48cGF0aCBkPSJNNCA4aDMuNUw5IDUuNWg4TDE4LjUgOEgyMXYxMUg0eiIvPjxjaXJjbGUgY3g9IjEzIiBjeT0iMTMuNSIgcj0iMy41Ii8+PC9zdmc+PC9kaXY+PGRpdj7lsJrmnKrkuIrkvKDor77nqIvooajnhafniYfjgII8L2Rpdj48L2Rpdj5gOwogIH1lbHNlewogICAgZWxzLm1vZGFsVGl0bGUudGV4dENvbnRlbnQgPSAn6K++56iL6KGo6aKE6KeIJzsKICAgIGVscy5tb2RhbEJvZHkuaW5uZXJIVE1MID0gYnVpbGRQcmV2aWV3VGFibGUoKTsKICB9CiAgZWxzLm92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnaXMtb3BlbicpOwogICQoJ2J0bkNsb3NlJykuZm9jdXMoKTsKfQpmdW5jdGlvbiBjbG9zZVByZXZpZXcoKXsKICBlbHMub3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vcGVuJyk7CiAgZWxzLm1vZGFsQm9keS5pbm5lckhUTUwgPSAnJzsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIDZiLiDml7bmrrXorr7nva4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmxldCBwZXJpb2REcmFmdCA9IG51bGw7CmNvbnN0IHB0YWcgPSBrID0+IGA8c3BhbiBjbGFzcz0icHRhZyIgc3R5bGU9Ii0tYy1iZzoke1BFUklPRFNba10uYmd9Oy0tYy1mZzoke1BFUklPRFNba10uY29sb3J9Oy0tYy1hYzoke1BFUklPRFNba10uY29sb3J9Ij4ke1BFUklPRFNba10ubGFiZWx9PC9zcGFuPmA7CgpmdW5jdGlvbiBvcGVuU2V0dGluZ3MoKXsKICBwZXJpb2REcmFmdCA9IHsgLi4uc3RhdGUucGVyaW9kcyB9OwogIGVscy5zZXRSb3dzLmlubmVySFRNTCA9IFBFUklPRF9USU1FX0xBQkVMUy5tYXAoKFtrZXksbCxyXSk9PmA8dHIgZGF0YS1rZXk9IiR7a2V5fSI+CiAgICA8dGQgY2xhc3M9InNpZGUgciI+JHtwdGFnKGwpfTwvdGQ+CiAgICA8dGQgY2xhc3M9Im1pZCI+PGlucHV0IHR5cGU9InRpbWUiIGRhdGEta2V5PSIke2tleX0iIHZhbHVlPSIke3BlcmlvZERyYWZ0W2tleV18fCcnfSIgYXJpYS1sYWJlbD0iJHtQRVJJT0RTW2xdLmxhYmVsfSDkuI4gJHtQRVJJT0RTW3JdLmxhYmVsfSDnmoTliIbnlYzml7bpl7QiPjwvdGQ+CiAgICA8dGQgY2xhc3M9InNpZGUiPiR7cHRhZyhyKX08L3RkPgogICAgPHRkIGNsYXNzPSJkZXNjIj4ke1BFUklPRFNbbF0ubGFiZWx95q2i5LqO6K+l5pe26Ze077yMJHtQRVJJT0RTW3JdLmxhYmVsfeeUseatpOW8gOWnizwvdGQ+CiAgPC90cj5gKS5qb2luKCcnKTsKICBtYXJrUGVyaW9kRHJhZnQoKTsKICBlbHMuc2V0T3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdpcy1vcGVuJyk7CiAgY29uc3QgZmlyc3QgPSBlbHMuc2V0Um93cy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpOwogIGlmKGZpcnN0KSBmaXJzdC5mb2N1cygpOwp9CmZ1bmN0aW9uIGNsb3NlU2V0dGluZ3MoKXsgZWxzLnNldE92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgnaXMtb3BlbicpOyBwZXJpb2REcmFmdCA9IG51bGw7IH0KCi8qIOS4juebuOmCu+i+ueeVjOS4jea7oei2s+S4peagvOmAkuWinueahOi+k+WFpeahhumAkOihjOagh+e6oiAqLwpmdW5jdGlvbiBtYXJrUGVyaW9kRHJhZnQoKXsKICBjb25zdCBrZXlzID0gUEVSSU9EX1RJTUVfTEFCRUxTLm1hcCh4PT54WzBdKTsKICBjb25zdCB2YWxzID0ga2V5cy5tYXAoaz0+dG9NaW51dGVzKHBlcmlvZERyYWZ0W2tdKSk7CiAgWy4uLmVscy5zZXRSb3dzLmNoaWxkcmVuXS5mb3JFYWNoKCh0cixpKT0+ewogICAgY29uc3QgdiA9IHZhbHNbaV07CiAgICBjb25zdCBiYWQgPSB2ID09PSBudWxsCiAgICAgIHx8IChpID4gMCAmJiB2YWxzW2ktMV0gIT09IG51bGwgJiYgdiA8PSB2YWxzW2ktMV0pCiAgICAgIHx8IChpIDwgdmFscy5sZW5ndGgtMSAmJiB2YWxzW2krMV0gIT09IG51bGwgJiYgdiA+PSB2YWxzW2krMV0pOwogICAgdHIuY2xhc3NMaXN0LnRvZ2dsZSgnYmFkJywgYmFkKTsKICB9KTsKICBjb25zdCBvayA9IHZhbGlkUGVyaW9kcyhwZXJpb2REcmFmdCk7CiAgJCgnYnRuU2V0U2F2ZScpLmRpc2FibGVkID0gIW9rOwogIGVscy5zZXROb3RlLmNsYXNzTmFtZSA9ICdzZXQtbm90ZScgKyAob2sgPyAnJyA6ICcgYmFkJyk7CiAgZWxzLnNldE5vdGUudGV4dENvbnRlbnQgPSBvawogICAgPyAn5L+d5a2Y5ZCO5YWo6YOo6IqC5qyh5oyJ5paw6L6555WM6YeN5paw5b2S57G777yb5pyq5aGr5YaZ5byA5aeL5pe26Ze055qE6IqC5qyh5pi+56S65Li644CM5pyq5a6a5pe25q6144CN44CCJwogICAgOiAn5YiG55WM5pe26Ze05LiN6IO95Li656m677yM5LiU6ZyA6Ieq5LiK6ICM5LiL5Lil5qC86YCS5aKe77yM6K+35L+u5q2j5qCH57qi6KGM44CCJzsKICByZXR1cm4gb2s7Cn0KZnVuY3Rpb24gc2F2ZVNldHRpbmdzKCl7CiAgaWYoIW1hcmtQZXJpb2REcmFmdCgpKSByZXR1cm47CiAgc3RhdGUucGVyaW9kcyA9IHsgLi4ucGVyaW9kRHJhZnQgfTsKICBwZXJzaXN0KCk7IHJlbmRlckxlZ2VuZCgpOyByZW5kZXJHcmlkKCk7IHJlbmRlclN0YXRzKCk7CiAgY2xvc2VTZXR0aW5ncygpOwogIHRvYXN0KCfml7bmrrXovrnnlYzlt7Lmm7TmlrAnLCdvaycpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgNy4g5Lqk5LqS57uR5a6aCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBzd2l0Y2hUYWIodGFiKXsKICBzdGF0ZS50YWIgPSB0YWI7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9InRhYiJdJykuZm9yRWFjaChiID0+IGIuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgU3RyaW5nKGIuZGF0YXNldC5wYW5lID09PSB0YWIpKSk7CiAgY29uc3QgaXNFID0gdGFiID09PSAnZWxlY3Ryb25pYyc7CiAgZWxzLnBhbmVFLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWFjdGl2ZScsIGlzRSk7IGVscy5wYW5lRS5oaWRkZW4gPSAhaXNFOwogIGVscy5wYW5lUC5jbGFzc0xpc3QudG9nZ2xlKCdpcy1hY3RpdmUnLCAhaXNFKTsgZWxzLnBhbmVQLmhpZGRlbiA9IGlzRTsKICBlbHMudG9vbHNFLnN0eWxlLmRpc3BsYXkgPSBpc0UgPyAnZmxleCcgOiAnbm9uZSc7CiAgZWxzLnRvb2xzUC5zdHlsZS5kaXNwbGF5ID0gaXNFID8gJ25vbmUnIDogJ2ZsZXgnOwogIHBlcnNpc3QoKTsKfQoKZnVuY3Rpb24gYmluZCgpewogIGVscy5jbGFzc1NlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHsKICAgIHN0YXRlLmFjdGl2ZUNsYXNzID0gZS50YXJnZXQudmFsdWU7CiAgICBwZXJzaXN0KCk7IHJlbmRlckdyaWQoKTsgcmVuZGVyUGhvdG8oKTsgcmVuZGVyU3RhdHMoKTsKICAgIHRvYXN0KGDlt7LliIfmjaLliLAgJHtzdGF0ZS5hY3RpdmVDbGFzc31gKTsKICB9KTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0idGFiIl0nKS5mb3JFYWNoKGIgPT4gYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHN3aXRjaFRhYihiLmRhdGFzZXQucGFuZSkpKTsKCiAgLyog5a2m56eR6YCJ5oupICovCiAgZWxzLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7CiAgICBjb25zdCB0ID0gZS50YXJnZXQ7CiAgICBpZih0Lm1hdGNoZXMoJ3NlbGVjdFtkYXRhLXJvd10nKSl7CiAgICAgIGNvbnN0IGQgPSBlbnN1cmUoc3RhdGUuYWN0aXZlQ2xhc3MpOwogICAgICBkLnNsb3RzWyt0LmRhdGFzZXQucm93XS5zdWJqZWN0c1srdC5kYXRhc2V0LmNvbF0gPSB0LnZhbHVlOwogICAgICBkLnNhbXBsZSA9IGZhbHNlOwogICAgICBwZXJzaXN0KCk7IHJlbmRlclN0YXRzKCk7CiAgICAgIGNvbnN0IGNlbGwgPSB0LmNsb3Nlc3QoJy5waWNrJyk7CiAgICAgIGNvbnN0IGh1ZSA9IFNVQkpFQ1RfTUFQLmdldCh0LnZhbHVlKTsKICAgICAgaWYoaHVlKXsKICAgICAgICBjb25zdCBbYmcsbGluZSxmZ10gPSBQQUxFVFRFW2h1ZV07CiAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdpcy1zZXQnKTsKICAgICAgICBjZWxsLnN0eWxlLnNldFByb3BlcnR5KCctLWMtYmcnLGJnKTsgY2VsbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jLWxpbmUnLGxpbmUpOyBjZWxsLnN0eWxlLnNldFByb3BlcnR5KCctLWMtZmcnLGZnKTsKICAgICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWVtcHR5Jyk7CiAgICAgIH1lbHNlewogICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2V0Jyk7IGNlbGwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOwogICAgICAgIHQuY2xhc3NMaXN0LmFkZCgnaXMtZW1wdHknKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBpZih0Lm1hdGNoZXMoJ2lucHV0W3R5cGU9InRpbWUiXScpKXsKICAgICAgY29uc3QgZCA9IGVuc3VyZShzdGF0ZS5hY3RpdmVDbGFzcyk7CiAgICAgIGNvbnN0IHJvdyA9IGQuc2xvdHNbK3QuZGF0YXNldC5yb3ddOwogICAgICBjb25zdCBhdCA9IHsgcm93OiB0LmRhdGFzZXQucm93LCBmaWVsZDogdC5kYXRhc2V0LmZpZWxkIH07CiAgICAgIHJvd1t0LmRhdGFzZXQuZmllbGRdID0gdC52YWx1ZTsKICAgICAgZC5zYW1wbGUgPSBmYWxzZTsKICAgICAgcGVyc2lzdCgpOyByZW5kZXJHcmlkKCk7IHJlbmRlclN0YXRzKCk7CiAgICAgIC8qIOaXtuauteWIhue7hOmaj+aXtumXtOWPmOWMlu+8jOmcgOmHjeW7uuihqOagvO+8m+mHjeW7uuWQjuaKiueEpueCueS6pOi/mOe7meWOn+i+k+WFpeahhiAqLwogICAgICBjb25zdCBuZXh0ID0gZWxzLmJvZHkucXVlcnlTZWxlY3RvcihgaW5wdXRbZGF0YS1yb3c9IiR7YXQucm93fSJdW2RhdGEtZmllbGQ9IiR7YXQuZmllbGR9Il1gKTsKICAgICAgaWYobmV4dCkgbmV4dC5mb2N1cygpOwogICAgfQogIH0pOwogIGVscy5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7CiAgICBjb25zdCBidG4gPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1kZWxdJyk7CiAgICBpZighYnRuKSByZXR1cm47CiAgICBjb25zdCBkID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKTsKICAgIGNvbnN0IHJpID0gK2J0bi5kYXRhc2V0LmRlbDsKICAgIGNvbnN0IG5hbWUgPSByb3dMYWJlbChkLnNsb3RzLCByaSk7CiAgICBpZihkLnNsb3RzW3JpXS5zdWJqZWN0cy5zb21lKEJvb2xlYW4pICYmICFjb25maXJtKGDliKDpmaTjgIwke25hbWV944CN5bCG5ZCM5pe25riF6Zmk6K+l6IqC5qyh55qE6K++56iL5a6J5o6S77yM56Gu5a6a57un57ut77yfYCkpIHJldHVybjsKICAgIGQuc2xvdHMuc3BsaWNlKHJpLDEpOwogICAgZC5zYW1wbGUgPSBmYWxzZTsKICAgIHBlcnNpc3QoKTsgcmVuZGVyR3JpZCgpOyByZW5kZXJTdGF0cygpOyB0b2FzdChg5bey5Yig6ZmkICR7bmFtZX1gKTsKICB9KTsKCiAgJCgnYnRuQWRkJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBjb25zdCBkID0gZW5zdXJlKHN0YXRlLmFjdGl2ZUNsYXNzKTsKICAgIGNvbnN0IGxhc3QgPSBkLnNsb3RzW2Quc2xvdHMubGVuZ3RoLTFdOwogICAgY29uc3Qgc3RhcnQgPSBsYXN0ICYmIHRvTWludXRlcyhsYXN0LmVuZCkgIT09IG51bGwgPyBmcm9tTWludXRlcyh0b01pbnV0ZXMobGFzdC5lbmQpKzEwKSA6ICcnOwogICAgY29uc3QgZW5kID0gc3RhcnQgJiYgdG9NaW51dGVzKHN0YXJ0KSAhPT0gbnVsbCA/IGZyb21NaW51dGVzKHRvTWludXRlcyhzdGFydCkrNDApIDogJyc7CiAgICBkLnNsb3RzLnB1c2goeyBzdGFydCwgZW5kLCBzdWJqZWN0czogQXJyYXkoNykuZmlsbCgnJykgfSk7CiAgICBkLnNhbXBsZSA9IGZhbHNlOwogICAgcGVyc2lzdCgpOyByZW5kZXJHcmlkKCk7IHJlbmRlclN0YXRzKCk7CiAgICBlbHMuYm9keS5sYXN0RWxlbWVudENoaWxkLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6J2VuZCcsIGJlaGF2aW9yOidzbW9vdGgnIH0pOwogICAgdG9hc3QoJ+W3suaWsOWinuiKguasoScpOwogIH0pOwogICQoJ2J0blJlc2V0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBpZighY29uZmlybSgn5oGi5aSN5Li66buY6K6k5Y2B5Liq6IqC5qyh77yf5pys54+t5bey5b2V5YWl55qE5a2m56eR5LiO5pe26Ze05bCG6KKr5riF56m644CCJykpIHJldHVybjsKICAgIGNvbnN0IGQgPSBlbnN1cmUoc3RhdGUuYWN0aXZlQ2xhc3MpOwogICAgZC5zbG90cyA9IGNsb25lKERFRkFVTFRfU0xPVFMpOyBkLnNhbXBsZSA9IGZhbHNlOwogICAgcGVyc2lzdCgpOyByZW5kZXJHcmlkKCk7IHJlbmRlclN0YXRzKCk7IHRvYXN0KCflt7LmgaLlpI3pu5jorqToioLmrKEnLCdvaycpOwogIH0pOwogICQoJ2J0blByZXZpZXcnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9wZW5QcmV2aWV3KTsKICAkKCdidG5QaG90b1ByZXZpZXcnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9wZW5QcmV2aWV3KTsKCiAgLyog5LiK5LygICovCiAgJCgnYnRuUGljaycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZWxzLmZpbGVJbnB1dC5jbGljaygpKTsKICBlbHMuZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbHMuZmlsZUlucHV0LmNsaWNrKCkpOwogIGVscy5kcm9wem9uZS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7CiAgICBpZihlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlbHMuZmlsZUlucHV0LmNsaWNrKCk7IH0KICB9KTsKICBlbHMuZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGUgPT4geyBoYW5kbGVGaWxlKGUudGFyZ2V0LmZpbGVzWzBdKTsgZS50YXJnZXQudmFsdWUgPSAnJzsgfSk7CiAgWydkcmFnZW50ZXInLCdkcmFnb3ZlciddLmZvckVhY2goZXYgPT4gZWxzLmRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoZXYsIGUgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7IGVscy5kcm9wem9uZS5jbGFzc0xpc3QuYWRkKCdkcmFnJyk7IH0pKTsKICBbJ2RyYWdsZWF2ZScsJ2Ryb3AnXS5mb3JFYWNoKGV2ID0+IGVscy5kcm9wem9uZS5hZGRFdmVudExpc3RlbmVyKGV2LCBlID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlbHMuZHJvcHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZycpOyB9KSk7CiAgZWxzLmRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBlID0+IGhhbmRsZUZpbGUoZS5kYXRhVHJhbnNmZXIuZmlsZXNbMF0pKTsKICAkKCdidG5SZXBsYWNlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbHMuZmlsZUlucHV0LmNsaWNrKCkpOwogICQoJ2J0blJlbW92ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgaWYoIWNvbmZpcm0oJ+enu+mZpOacrOePreivvueoi+ihqOeFp+eJh++8nycpKSByZXR1cm47CiAgICBlbnN1cmUoc3RhdGUuYWN0aXZlQ2xhc3MpLnBob3RvID0gbnVsbDsKICAgIHBlcnNpc3QoKTsgcmVuZGVyUGhvdG8oKTsgcmVuZGVyU3RhdHMoKTsgdG9hc3QoJ+W3suenu+mZpOeFp+eJhycpOwogIH0pOwoKICAvKiDlvLnnqpcgKi8KICAkKCdidG5DbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VQcmV2aWV3KTsKICAkKCdidG5DbG9zZTInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlUHJldmlldyk7CiAgJCgnYnRuUHJpbnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHdpbmRvdy5wcmludCgpKTsKICBlbHMub3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBlID0+IHsgaWYoZS50YXJnZXQgPT09IGVscy5vdmVybGF5KSBjbG9zZVByZXZpZXcoKTsgfSk7CgogIC8qIOaXtuauteiuvue9riAqLwogICQoJ2J0blBlcmlvZHMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9wZW5TZXR0aW5ncyk7CiAgJCgnYnRuU2V0Q2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlU2V0dGluZ3MpOwogICQoJ2J0blNldFNhdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNhdmVTZXR0aW5ncyk7CiAgJCgnYnRuU2V0UmVzZXQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIHBlcmlvZERyYWZ0ID0geyAuLi5ERUZBVUxUX1BFUklPRF9USU1FUyB9OwogICAgWy4uLmVscy5zZXRSb3dzLmNoaWxkcmVuXS5mb3JFYWNoKHRyID0+IHsgdHIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSA9IHBlcmlvZERyYWZ0W3RyLmRhdGFzZXQua2V5XTsgfSk7CiAgICBtYXJrUGVyaW9kRHJhZnQoKTsKICB9KTsKICBlbHMuc2V0Um93cy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHsKICAgIGlmKCFlLnRhcmdldC5tYXRjaGVzKCdpbnB1dFtkYXRhLWtleV0nKSkgcmV0dXJuOwogICAgcGVyaW9kRHJhZnRbZS50YXJnZXQuZGF0YXNldC5rZXldID0gZS50YXJnZXQudmFsdWU7CiAgICBtYXJrUGVyaW9kRHJhZnQoKTsKICB9KTsKICBlbHMuc2V0T3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBlID0+IHsgaWYoZS50YXJnZXQgPT09IGVscy5zZXRPdmVybGF5KSBjbG9zZVNldHRpbmdzKCk7IH0pOwoKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7CiAgICBpZihlLmtleSAhPT0gJ0VzY2FwZScpIHJldHVybjsKICAgIGlmKGVscy5zZXRPdmVybGF5LmNsYXNzTGlzdC5jb250YWlucygnaXMtb3BlbicpKSBjbG9zZVNldHRpbmdzKCk7CiAgICBlbHNlIGlmKGVscy5vdmVybGF5LmNsYXNzTGlzdC5jb250YWlucygnaXMtb3BlbicpKSBjbG9zZVByZXZpZXcoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tTWludXRlcyhtKXsKICBjb25zdCB6ID0gbiA9PiBTdHJpbmcobikucGFkU3RhcnQoMiwnMCcpOwogIHJldHVybiBgJHt6KE1hdGguZmxvb3IobS82MCklMjQpfToke3oobSU2MCl9YDsKfQpmdW5jdGlvbiBlc2Mocyl7IHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvWyY8PiJdL2csIGMgPT4gKHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnfVtjXSkpOyB9CgpsZXQgdG9hc3RUaW1lciA9IG51bGw7CmZ1bmN0aW9uIHRvYXN0KG1zZywga2luZCl7CiAgY2xlYXJUaW1lb3V0KHRvYXN0VGltZXIpOwogIGVscy50b2FzdEhvc3QuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9InRvYXN0ICR7a2luZHx8Jyd9Ij4ke2VzYyhtc2cpfTwvZGl2PmA7CiAgdG9hc3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyBlbHMudG9hc3RIb3N0LmlubmVySFRNTCA9ICcnOyB9LCAyNDAwKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIDguIOWQr+WKqAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KbG9hZCgpOwpyZW5kZXJDbGFzc2VzKCk7CnJlbmRlckhlYWQoKTsKcmVuZGVyTGVnZW5kKCk7CnJlbmRlckdyaWQoKTsKcmVuZGVyUGhvdG8oKTsKcmVuZGVyU3RhdHMoKTsKc2V0RGlydHkoZmFsc2UpOwpzd2l0Y2hUYWIoc3RhdGUudGFiKTsKYmluZCgpOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg=="}