this is the original dingusProxy, built entirely from scratch by dinguschan! this project will get constant updates, but don't even think about getting a consistent update schedule. open an issue for any spelling mistakes you see, so that i can ignore, it mark it as closed, and tell you to get stuffed π (ill get to fixing it right away :3.) this project is also COMPLETELY open sause (no sauce), no obfuscation or anything. feel free to fork and fix this project!
for all the lil idiot middle schoolers who searched "school proxy github" on their 200 dollar school chromebook, this thing is what you want. spyware and filters can't touch it. yes, its currently kinda shit, but again, constant updates. trust me, this thing better than any other "uNbLoCkAbLe LoCaL wEb PrOxY" on the internet, straight fire fr. host this on Netlify, Heroku, Vercel, or whatever happens to not be blocked. Copy and paste into Codepen, Replit, or any WYSIWYG HTML editor on the internet for quick access. you can also just download it keep it as a local file, if you want :3.
download the proxy as an html file so that you can use this as a local file, making it unblockable, and better than any 3rd-rate half-baked blacklisted and blockable actual web proxy. bite me titanium. it has no history, no cache, no cookies, nothing. it won't leave a trace in your browser, and just rename the file something like "(skid)'s summer homework" if you think someones gonna snoop through your files. it has tons upon tons of options and settings, plus extra cloaking if you think your admin is fuckign Kevin Mitnick lookign or something. Switch your proxy type, read the changelog, compare stats with other well known true proxies, go nuts. i have a website for it too by the way, so check it out at https://dinguschan-owo.github.io/dingusproxy/. you can also check out the backup (its the same) at https://dingusproxy.vercel.app/ , and if either of those get blocked use the dataurl at the bottom of this readme or just host it yourself with the link at the bottom of this README. alternate verified links can be found on the website in the button with the chain link icon
litereally just hit the "Code" button on this repo, download the .ZIP and extract all, nd open the .HTML file to use the project. if 3 whole steps is too complicated for your little monkey brain you can also just visit the website and hit the download button. If ur a github pro, you can also find the file hidden somewhere in the repo!
is there a brain in that head or is it just for decoration? just visit the website i linked, or download it from the page ur on right now, then open the html file and follow the conviently placed and beautifully styled on screen instructions. seriously dude, this shits so simple a kindergartner could do it. Also, if you find something isn't loading, hit the "proxy" button and switch to a different proxy. thatl fix it, trust me (i wrote this shit so i know what im talkign about.) one last note, downloading it as a file works the best, then the offical github page, then the cloaked versions (both "about:blank" and "blob:" work about the same), then finally the Vercel page. Vercel has problems loading external CDNs which i use, namely FontAwesome, so expect some visual issues (itl be kinda ugly but will still function the same) if you use the secondary link or host it urself.
fuck you there is no update schedule ill push updates whenever i fucking feel like it. i do promise to constantly update though, because i love you guys (litrally nobody) :33
data:text/html;base64,PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgICAgICA8c3R5bGU+CiAgICAgICAgIC5saW5rLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMjUuM3B4OwogICAgICAgIHJpZ2h0OiAzNDhweDsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDM4LjQ1cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjODg2ZmUwLCAjNmI1NmM4KTsKICAgICAgICBjb2xvcjogI2YwZjBmMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLmxpbmstYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNmI1NmM4LCAjNzc1ZWQ0KTsKICAgICAgICBvdXRsaW5lOiBub25lOwp9CgoKI2Rvd25sb2FkQnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAyNXB4OwogICAgICAgIGxlZnQ6IDMzNXB4OwogICAgICAgIHdpZHRoOiA0MnB4OwogICAgICAgIGhlaWdodDogMzhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM4ODZmZTAsICM2YjU2YzgpOwogICAgICAgIGNvbG9yOiAjZjBmMGYwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAjZG93bmxvYWRCdXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2YjU2YzgsICM3NzVlZDQpOwogICAgICAgIG91dGxpbmU6IG5vbmU7Cn0KCiAgICAgICAgICAgICAgLnJlbmFtZS1sYWJlbCwgLnJlbmFtZS1pbnB1dCwgLnJlbmFtZS1idXR0b24gewogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZjsKICAgICAgICB9CiAgICAgICAgLnJlbmFtZS1pbnB1dCB7CnBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDEycHg7IAogICAgICAgICAgbWF4LXdpZHRoOiA1MjRweCAhaW1wb3J0YW50OyAKICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICNiNGE1ZTAgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogOHB4OyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMzgzMzUyLCAjNGM0MzZmKTsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgd2lkdGg6IDUyM3B4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50OyAKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICBjb2xvcjogI2JmYmZiZjsKICAgICAgICB9CgogICAgICAgIC5yZW5hbWUtaW5wdXQ6Zm9jdXM6OnBsYWNlaG9sZGVyIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMTsgCiAgICAgICAgfQoKICAgICAgICAucmVuYW1lLWJ1dHRvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDBweCAwcHg7CiAgICAgICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7IAogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC5yZW5hbWUtYnV0dG9uIGltZyB7CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICBwYWRkaW5nOiA3cHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgCiAgICAgICAgfQoKICAgICAgCiAgICAgIC5yZW4tYnV0dG9uewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDI1cHg7CiAgICAgICAgbGVmdDogMjgxcHg7CiAgICAgICAgd2lkdGg6IDQycHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzg4NmZlMCwgIzZiNTZjOCk7CiAgICAgICAgY29sb3I6ICNmMGYwZjA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgICAgICAgLmhvbGRlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMjVweDsKICAgICAgICByaWdodDogMTM4cHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzc3NWVkNCwgIzg4NmZlMCk7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIHBhZGRpbmc6IDdweCAxM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2lkdGg6IDE3MnB4OwogICAgICAgICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICAgICAgICB6LWluZGV4OiAwOwogICAgICB9CiAgICAgIAogICAgICAgICAgICAgICNoMkR2OGU0NnEgewogICAgICAgICAgICBtYXJnaW4tdG9wOiA1Mi41cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTdweDsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogLTIxcHg7CiAgICAgICAgICAgIHJpZ2h0OiAxNDdweDsKICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgfQogICAgICAgIC5HNzFoM0N3NWogewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogLTEwMHB4OwogICAgICAgICAgICBsZWZ0OiAtMTAwcHg7CiAgICAgICAgICAgIHdpZHRoOiAxMDAwMCU7CiAgICAgICAgICAgIGhlaWdodDogMTAwMDAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgei1pbmRleDogMjE0NzQ4MzY0NzsKICAgICAgICB9CiAgICAgICAgLnc0bUo5N1piWCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICAgICAgei1pbmRleDogMjE0NzQ4MzY0NzsKICAgICAgICB9CiAgICAgIAogICAgICAgICAgICAud2ViLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMjVweDsKICAgICAgICByaWdodDogODRweDsKICAgICAgICB3aWR0aDogNDJweDsKICAgICAgICBoZWlnaHQ6IDM4cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjODg2ZmUwLCAjNmI1NmM4KTsKICAgICAgICBjb2xvcjogI2YwZjBmMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53ZWItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNmI1NmM4LCAjNzc1ZWQ0KTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAuZ2l0LWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMjVweDsKICAgICAgICByaWdodDogMzBweDsKICAgICAgICB3aWR0aDogNDJweDsKICAgICAgICBoZWlnaHQ6IDM4cHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjODg2ZmUwLCAjNmI1NmM4KTsKICAgICAgICBjb2xvcjogI2YwZjBmMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAyNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5naXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNmI1NmM4LCAjNzc1ZWQ0KTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAgICAgICAucmVuLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzZiNTZjOCwgIzc3NWVkNCk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmJhY2tncm91bmQtYm94IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMDAlOwogICAgICAgIGhlaWdodDogMTAwMCU7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzJlMmMzYSwgIzM4MzM1Mik7CiAgICAgICAgei1pbmRleDogLTEwMDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDsgCiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgLnBvcHVwLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAucG9wdXAtY29udGVudCBidXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMThweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODM2NmVhOwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTdweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAucG9wdXAtY29udGVudCBidXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZkOTlkOwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgICAgLnBvcHVwLWNvbnRlbnQgYnV0dG9uOmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZkOTlkOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CiAgICAgIAogICAgICAKCiAgICAgIC5ib3ggewogICAgICAgIHdpZHRoOiAyNSU7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM3NTZmYWUsICM2YTYzYWIpOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNiNGE1ZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMTVweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgfQoKICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDkyLjUlOwogICAgICAgIG1hcmdpbjogMjBweCBhdXRvOwogICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNGM0MzZmLCAjNTQ0MTcxKTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cm1heC1oZWlnaHQ6IDEwMCU7IAogICBoZWlnaHQ6IDM3LjYlOwogICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNXMKICAgICAgICAKICAgICAgfQoKICAgICAgLnZlcnNpb24tYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAyNXB4OwogICAgICAgIGxlZnQ6IDMwcHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzc3NWVkNCwgIzg4NmZlMCk7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIHBhZGRpbmc6IDdweCAxM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zdGF0dXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDI1cHg7CiAgICAgICAgbGVmdDogMTYycHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzc3NWVkNCwgIzg4NmZlMCk7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgICAgIHBhZGRpbmc6IDdweCAxM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGF0dXMtYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzNnB4OwogICAgICAgIGxlZnQ6IDI0NHB4OwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMGZmODgsICMzM2ZmOTkpOwogICAgICAgIGNvbG9yOiAjMjYyNjI2OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgaDExIHsKICAgICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgICAgY29sb3I6ICNlNmU2ZmE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICBoOSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OyAKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuaW5wdXQtZ3JvdXAgewogICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgdHJhbnNpdGlvbjogbWFyZ2luLXRvcCAwLjVzOwogICAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsgCiAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaW5wdXQtZ3JvdXAgaW5wdXRbdHlwZT0idGV4dCJdIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjYjRhNWUwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMzgzMzUyLCAjNGM0MzZmKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICB0cmFuc2l0aW9uOiBtYXJnaW4tdG9wIDAuNXM7CiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50OyAKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgbWFyZ2luLXRvcDogN3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICAgIH0KCjo6cGxhY2Vob2xkZXIgewogIGNvbG9yOiAjYmZiZmJmOwogIG9wYWNpdHk6IDE7IC8qIEZpcmVmb3ggKi8KfQoKICAgICAgLmlucHV0LWdyb3VwIGlucHV0W3R5cGU9InRleHQiXTpmb2N1czo6cGxhY2Vob2xkZXIgewogIG9wYWNpdHk6IC4xOyAvKiBGaXJlZm94ICovCiAgICAgICAgICAgICAgICBwYWRkaW5nLXRvcDogMjBweCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweCAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogNTBweCAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKfQoKCgogICAgICAuaW5wdXQtZ3JvdXAgaW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjYjRhNWUwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMzgzMzUyLCAjNGM0MzZmKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsgCiAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgIHRyYW5zaXRpb246IG1hcmdpbi10b3AgMC41czsKICAgICAgfQogICAgICAKICAgICAgICAgICAgLmlucHV0LWdyb3VwIGlucHV0W3R5cGU9InRleHQiXTphY3RpdmUgewogICAgICAgIG91dGxpbmU6bm9uZSAhaW1wb3J0YW50OyAKICAgICAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgfQogICAgICAKICAgICAgLnF1ZS1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDUwMHB4IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjODg2ZmUwLCAjNmI1NmM4KTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKICAgICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICB0cmFuc2l0aW9uOiBtYXJnaW4tdG9wIDAuNXM7CiAgICAgICAgCiAgICAgIH0KICAgICAgLmlucHV0LWdyb3VwIGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM4ODZmZTAsICM2YjU2YzgpOwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgIHRyYW5zaXRpb246IG1hcmdpbi10b3AgMC41czsKICAgICAgICB6LWluZGV4OiA1OwogICAgICAgIG1hcmdpbjogMS4wcHg7CiAgICAgICAgbWFyZ2luLXRvcDogN3B4OwogICAgICB9CgogICAgICAuaW5wdXQtZ3JvdXAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNmI1NmM4LCAjNzc1ZWQ0KTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgICB0cmFuc2l0aW9uOiBtYXJnaW4tdG9wIDAuNXM7CiAgICAgIH0KCiAgICAgIC5yZW5kZXJlZC1jb250ZW50IHsKICAgICAgICBib3JkZXI6IDBweCBzb2xpZCAjYjRhNWUwOwogICAgICAgIHBhZGRpbmc6IDI1cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgY29sb3I6ICMwMDAwMDA7Cm1heC1oZWlnaHQ6IDkxJTsgCiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgIHRyYW5zaXRpb246IG1hcmdpbi10b3AgMC41czsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnBvcHVwIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzU0NDE3MSwgIzY2NTU4Mik7CiAgICAgICAgcGFkZGluZzogMjVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMS41cHg7CiAgICAgICAgbWF4LXdpZHRoOiA3MCU7CiAgICAgICAgbWF4LWhlaWdodDogNjUlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5wb3B1cC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5wb3B1cC1mb290ZXIgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZmZmZmZmOwogICAgICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAucG9wdXAuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuY2xvc2UgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICNlNmU2ZmE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuYmx1ci1iYWNrZ3JvdW5kIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwogICAgICAgIHotaW5kZXg6IDk5OTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ibHVyLWJhY2tncm91bmQuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSwKICAgICAgdGgsCiAgICAgIHRkIHsKICAgICAgICBib3JkZXI6IDIuNXB4IHNvbGlkICNmZmZmZmY7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkICM0YzQzNmY7CiAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICM4ODZmZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICB9CgogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzRjNDM2ZiwgIzU0NDE3MSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgICAgbWFyZ2luOiAzMHB4IGF1dG87CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLmZhZGUtb3V0IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuZmFkZS1pbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfTwvc3R5bGU+CgogICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzYuMC4wLWJldGEzL2Nzcy9hbGwubWluLmNzcyI+CiAgICA8dGl0bGU+8J2Zs/CdmpLwnZqX8J2akPCdmp7wnZqc8J2Zv/CdmpvwnZqY8J2aofCdmqI8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgICA8ZGl2IGNsYXNzPSJiYWNrZ3JvdW5kLWJveCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGJ1dHRvbiBpZD0iZG93bmxvYWRCdXR0b24iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1kb3dubG9hZCI+PC9pPjwvYnV0dG9uPgogICAgPGRpdiBpZD0iaDJEdjhlNDZxIj7wnZm88J2aivCdmo3wnZqOIPCdmovwnZqiIPCdmo3wnZqS8J2al/CdmpDwnZqe8J2anPCdmozwnZqR8J2aivCdmpchPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhvbGRlciI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InZlcnNpb24tYm94Ij7wnZqF8J2ajvCdmpvwnZqc8J2akvCdmpjwnZqXIPCdn7gu8J2fujwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0dXMiPvCdmoLwnZqd8J2aivCdmp3wnZqe8J2anDombmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0dXMtYm94Ij48L2Rpdj48YnV0dG9uIGNsYXNzPSJyZW4tYnV0dG9uIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnb3RoZXItcG9wdXAnKSI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWdlYXIiPjwvaT48L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGluay1idXR0b24iIG9uY2xpY2s9InRvZ2dsZVBvcHVwKCdsaW5rLXBvcHVwJykiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1saW5rIj48L2k+PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdpdC1idXR0b24iIG9uY2xpY2s9Im9wZW5HaXQoKSI+CiAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhLWJyYW5kcyBmYS1naXRodWIiPjwvaT48L2J1dHRvbj4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ3ZWItYnV0dG9uIiBvbmNsaWNrPSJvcGVuV2VicygpIj4KPGkgY2xhc3M9ImZhLXNvbGlkIGZhLWdsb2JlIj48L2k+CiAgICAgIDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJib3giPgogICAgICAgIDxoMTE+Jm5ic3AmbmJzcPCdmbPwnZqS8J2al/CdmpDwnZqe8J2anPCdmb/wnZqb8J2amPCdmqHwnZqiPC9oMTE+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJtZXNzYWdlLWNvbnRhaW5lciIgY2xhc3M9Im1lc3NhZ2UgZmFkZS1pbiI+8J2ZsfCdmo4g8J2amfCdmorwnZqd8J2akvCdmo7wnZqX8J2anSwg8J2alfCdmpjwnZqK8J2ajfCdmpLwnZqX8J2akCDwnZqd8J2akvCdmpbwnZqO8J2anCDwnZqW8J2aivCdmqIg8J2anfCdmorwnZqU8J2ajiDwnZqe8J2amSDwnZ+48J2ftiDwnZqc8J2ajvCdmozwnZqY8J2al/Cdmo3wnZqcIPCfq6M8L2Rpdj4KPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnc2V0dGluZ3MtcG9wdXAnKSI+CiAgICAgICAgUPCdmpvwnZqY8J2aofCdmqIKICAgIDwvYnV0dG9uPiZuYnNwJm5ic3AKICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnc3BlY2lmaWNhdGlvbnMtcG9wdXAnKSI+8J2agvCdmpnwnZqO8J2ajPCdmpw8L2J1dHRvbj4mbmJzcCZuYnNwCiAgICA8YnV0dG9uIGNsYXNzPSJxdWUtYnV0dG9uIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgncG9wdXAnKSI+CiZuYnNwJm5ic3DvvJ8KICAgIDwvYnV0dG9uPiZuYnNwJm5ic3AKICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idXJsIiBwbGFjZWhvbGRlcj0i8J2ZtPCdmpfwnZqd8J2ajvCdmpsg8J2ahPCdmoHwnZm7ICjwnZqR8J2anfCdmp3wnZqZ8J2anDovLykiPiZuYnNwJm5ic3AKICAgICAgIDxidXR0b24gb25jbGljaz0ic2hyaW5rQ29udGFpbmVyQW5kUmVuZGVyKCkiPvCdmoHwnZqO8J2al/Cdmo3wnZqO8J2amzwvYnV0dG9uPiZuYnNwJm5ic3AgCiAgICA8YnV0dG9uIG9uY2xpY2s9Im9wZW5JbkJsYW5rVGFiKCkiPvCdmorwnZqL8J2amPCdmp7wnZqdOvCdmovwnZqV8J2aivCdmpfwnZqUPC9idXR0b24+Jm5ic3AmbmJzcCAKICA8YnV0dG9uIG9uY2xpY2s9ImNyZWF0ZUJsb2JVcmwoKSI+8J2ai/CdmpXwnZqY8J2aizo8L2J1dHRvbj4KPC9kaXY+CgogICAgICAgICAgICAKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAKPGRpdiBpZD0ibGluay1wb3B1cCIgY2xhc3M9InBvcHVwIj4KICAgIDxkaXYgY2xhc3M9InBvcHVwLWhlYWRlciI+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxiPvCdmoXwnZqO8J2am/CdmpLwnZqP8J2akvCdmo7wnZqNIPCdmbDwnZqV8J2anfCdmo7wnZqb8J2al/CdmorwnZqd8J2ajiDwnZm78J2akvCdmpfwnZqU8J2anDwvYj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnbGluay1wb3B1cCcpIj4KICAgICAgICAgICAgPGI+4pyVPC9iPgogICAgICAgIDwvc3Bhbj4KICA8L2Rpdj48YnI+CiAgICAgIDxkaXYgY2xhc3M9InBvcHVwLWNvbnRlbnQiPgogICAgICAgIDxicj4KICAgICAgICA8dGFibGU+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD5MaW5rPC90aD4KICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgogICAgICAgICAgICA8dGg+SG9zdGVyPC90aD4KICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+CiAgICAgICAgICAgIDx0aD5Gb3JrZWQ/PC90aD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICA8Yj5odHRwczovL2Rpbmd1c3Byb3h5LnZlcmNlbC5hcHAvPC9iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQ+Mi40PC90ZD4KICAgICAgICAgICAgPHRkPmRpbmd1c2NoYW4tb3dvPC90ZD4KICAgICAgICAgICAgPHRkPkdyZWVuPC90ZD4KICAgICAgICAgICAgPHRkPk5vPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICA8Yj5odHRwczovL2Rpbmd1c2NoYW4tb3dvLmdpdGh1Yi5pby9kaW5ndXNwcm94eS88L2I+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZD4yLjQ8L3RkPgogICAgICAgICAgICA8dGQ+ZGluZ3VzY2hhbi1vd288L3RkPgogICAgICAgICAgICA8dGQ+R3JlZW48L3RkPgogICAgICAgICAgICA8dGQ+Tm88L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgIDxiPmh0dHBzOi8veWVlLWRlZS52ZXJjZWwuYXBwLzwvYj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkPjIuNDwvdGQ+CiAgICAgICAgICAgIDx0ZD5Qcm9qZWN0NTE2PC90ZD4KICAgICAgICAgICAgPHRkPkdyZWVuPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgPGI+aHR0cHM6Ly95ZWVkZWUudmVyY2VsLmFwcC88L2I+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZD4yLjQ8L3RkPgogICAgICAgICAgICA8dGQ+UHJvamVjdDUxNjwvdGQ+CiAgICAgICAgICAgIDx0ZD5HcmVlbjwvdGQ+CiAgICAgICAgICAgIDx0ZD5ZZXM8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgIDxiPmh0dHBzOi8veWVlLWV0YS52ZXJjZWwuYXBwLzwvYj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkPjIuNDwvdGQ+CiAgICAgICAgICAgIDx0ZD5Qcm9qZWN0NTE2PC90ZD4KICAgICAgICAgICAgPHRkPkdyZWVuPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2Pjxicj4KPC9kaXY+ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAKPGRpdiBpZD0ic2V0dGluZ3MtcG9wdXAiIGNsYXNzPSJwb3B1cCI+CiAgICA8ZGl2IGNsYXNzPSJwb3B1cC1oZWFkZXIiPgogICAgICAgIDxzcGFuPgogICAgICAgICAgICA8Yj5Q8J2am/CdmpjwnZqh8J2aojwvYj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnc2V0dGluZ3MtcG9wdXAnKSI+CiAgICAgICAgICAgIDxiPuKclTwvYj4KICAgICAgICA8L3NwYW4+CiAgPC9kaXY+PGJyPjxoOT48Yj4mbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3Dwn5GJJm5ic3Bb8J2XlvCdl6LwnZel8J2XpiDwnZej8J2Xv/Cdl7zwnZiF8J2YhiDwnZem8J2XsvCdl7/wnZiD8J2XtvCdl7DwnZeyXSZuYnNw8J+RiDwvYj48L2g5Pjxicj48YnI+CiAgICA8ZGl2IGNsYXNzPSJwb3B1cC1jb250ZW50Ij4KPGJ1dHRvbiBjbGFzcz0icHJveHktYnV0dG9uIGFjdGl2ZSIgb25jbGljaz0ic2VsZWN0UHJveHkoJ2h0dHBzOi8vYXBpLmFsbG9yaWdpbnMud2luL3Jhdz8nLCB0aGlzKSI+QWxsIE9yaWdpbnM8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InByb3h5LWJ1dHRvbiIgb25jbGljaz0ic2VsZWN0UHJveHkoJ2h0dHBzOi8vYXBpLmNvZGV0YWJzLmNvbS92MS9wcm94eT9xdWVzdD0nLCB0aGlzKSI+Q29kZXRhYnMgUHJveHk8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InByb3h5LWJ1dHRvbiIgb25jbGljaz0ic2VsZWN0UHJveHkoJ2h0dHBzOi8vYXBpLmNvZGV0YWJzLmNvbS92MS90bXAvP3F1ZXN0PScsIHRoaXMpIj5Db2RldGFicyBUbXA8L2J1dHRvbj4KICAgIDxidXR0b24gY2xhc3M9InByb3h5LWJ1dHRvbiIgb25jbGljaz0ic2VsZWN0UHJveHkoJ2h0dHBzOi8vY29yc3Byb3h5LmlvLz8nLCB0aGlzKSI+Q09SU1Byb3h5LmlvPC9idXR0b24+CgogICAgICAKICAgIDwvZGl2Pjxicj4KPC9kaXY+CgogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAo8ZGl2IGlkPSJzZXR0aW5ncy1wb3B1cCIgY2xhc3M9InBvcHVwIj4KICAgIDxkaXYgY2xhc3M9InBvcHVwLWhlYWRlciI+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxiPlDwnZqb8J2amPCdmqHwnZqiPC9iPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY2xvc2UiIG9uY2xpY2s9InRvZ2dsZVBvcHVwKCdzZXR0aW5ncy1wb3B1cCcpIj4KICAgICAgICAgICAgPGI+4pyVPC9iPgogICAgICAgIDwvc3Bhbj4KICA8L2Rpdj48YnI+PGg5PjxiPiZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcCZuYnNwJm5ic3AmbmJzcPCfkYkmbmJzcFvwnZeW8J2XovCdl6XwnZemIPCdl6PwnZe/8J2XvPCdmIXwnZiGIPCdl6bwnZey8J2Xv/CdmIPwnZe28J2XsPCdl7JdJm5ic3Dwn5GIPC9iPjwvaDk+PGJyPjxicj4KICAgIDxkaXYgY2xhc3M9InBvcHVwLWNvbnRlbnQiPgo8YnV0dG9uIGNsYXNzPSJwcm94eS1idXR0b24gYWN0aXZlIiBvbmNsaWNrPSJzZWxlY3RQcm94eSgnaHR0cHM6Ly9hcGkuYWxsb3JpZ2lucy53aW4vcmF3PycsIHRoaXMpIj5BbGwgT3JpZ2luczwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0icHJveHktYnV0dG9uIiBvbmNsaWNrPSJzZWxlY3RQcm94eSgnaHR0cHM6Ly9hcGkuY29kZXRhYnMuY29tL3YxL3Byb3h5P3F1ZXN0PScsIHRoaXMpIj5Db2RldGFicyBQcm94eTwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0icHJveHktYnV0dG9uIiBvbmNsaWNrPSJzZWxlY3RQcm94eSgnaHR0cHM6Ly9hcGkuY29kZXRhYnMuY29tL3YxL3RtcC8/cXVlc3Q9JywgdGhpcykiPkNvZGV0YWJzIFRtcDwvYnV0dG9uPgogICAgPGJ1dHRvbiBjbGFzcz0icHJveHktYnV0dG9uIiBvbmNsaWNrPSJzZWxlY3RQcm94eSgnaHR0cHM6Ly9jb3JzcHJveHkuaW8vPycsIHRoaXMpIj5DT1JTUHJveHkuaW88L2J1dHRvbj4KCiAgICA8L2Rpdj48YnI+CjwvZGl2PgoKICAgICAgPGRpdiBpZD0icmVuZGVyZWQtY29udGVudCIgY2xhc3M9InJlbmRlcmVkLWNvbnRlbnQiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXIiIGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0icG9wdXAiPgogICAgICA8ZGl2IGNsYXNzPSJwb3B1cC1oZWFkZXIiPgogICAgICAgIDxzcGFuPgogICAgICAgICAgPGI+8J2ZuPCdmpfwnZqP8J2amPCdmpvwnZqW8J2aivCdmp3wnZqS8J2amPCdmpcg8J2aivCdmpfwnZqNIPCdmbLwnZqR8J2aivCdmpfwnZqQ8J2ajvCdmpXwnZqY8J2akDwvYj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgncG9wdXAnKSI+CiAgICAgICAgICA8Yj7inJU8L2I+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icG9wdXAtY29udGVudCI+CiAgICAgICAgPGg5Pjxicj4KICAgICAgICAgIDxiPvCfm5EgW/Cdl5zwnZeg8J2Xo/Cdl6LwnZel8J2Xp/Cdl5TwnZeh8J2Xp10g8J+bkTwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj5OTyBMT05HRVIgREVQUkVDQVRFRCEgQ09OU1RBTlQgVVBEQVRFUyBTQ0hFRFVMRUQgRk9SIEFMTCBZT1UgQURPUklORyBGQU5TISA8YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8Yj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImluZm8iPvCfm4g8L3NwYW4+Jm5ic3AmbmJzcFvwnZec8J2XofCdl5nwnZeiXSZuYnNwIDxzcGFuIGNsYXNzPSJpbmZvIj7wn5uIPC9zcGFuPgogICAgICAgICAgPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPmhpISB0aGlzIGlzIGEgbG9jYWwsIGNsaWVudC1zaWRlIG9ubHkgd2ViICJwcm94eSIgdGhhdCB3YXMgY3JlYXRlZCBieSBkaW5ndXNjaGFuIG9uIEZlYiAyOCwgMjAyNC4gcGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhbiBhY3R1YWwgd2ViIHByb3h5LCBhcyBpdCBkb2VzbnQgcm91dGUgeW91IHRocm91Z2ggYW55IGV4dGVybmFsIHNlcnZlcnMuIGl0IHN0aWxsIGZ1bmN0aW9ucyBwZXJmZWN0bHkgZmluZSB0byBhY2Nlc3MgbmV0d29yayBvciBleHRlbnNpb24gYmxvY2tlZCBzaXRlcywgYW5kIGhhcyA8aT5ubzwvaT4gYmFja2VuZCwgc28geW91IGNhbiBkb3dubG9hZCBpdCBhcyBhbiBIVE1MIGZpbGUgYW5kIHVzZSBpdCBjb21wbGV0ZWx5IGxvY2FsbHkuIFlvdSBjYW4gZmluZCB0aGUgcHJvamVjdCBmaWxlcyBvbiB0aGUgR2l0aHViLCB3aGljaCBpcyBsaW5rZWQgaW4gdGhlIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHByb3h5IQpJIHdpbGwgcHJvYmFibHkgc3RvcCBtYWludGFpbmluZyB0aGlzIGRlbW9uc3RyYXRpb24gcGFzdCB1cGRhdGUgMS4yLCBzbyBJIHN0cm9uZ2x5IHVyZ2UgeW91IHRvIHVzZSBhIGJldHRlciBtZXRob2QgdG8gZG8geW91ciBpbnRlcm5ldCB0b21mb29sZXJ5LiBJbiB0aGUgbWVhbnRpbWUsIGRpbmd1c2NoYW4gb3V0LiDwn5GLIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxiPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2frV0g4pqg77iPIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4gVGhpcyB3b3JrcyBvbmx5IG9uIENocm9tZU9TIGFuZCBBbmRyb2lkLiB3aGF0IHRoZSBmdWNrIDxicj4KICAgICAgICAgIDxicj5saW5rcyBzdGlsbCBjYW4ndCBiZSBmb2xsb3dlZCBpbi1yZW5kZXIsIGFuZCBJJ20gbm90IHN1cmUgaWYgSSBoYXZlIHRoZSBwYXRpZW5jZSB0byBmaXggaXQuIEp1c3QgZmluZCB0aGUgbGluayB0aGF0IHlvdSB3YW50IHRvIGdvIHRvIGFuZCBwdXQgaXQgaW4gdGhlIFVSTCBib3guIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxiPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2frl0g4pqg77iPPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPmFib3V0IGJsYW5rIGNsb2FraW5nIGhhcyBiZWVuIGFkZGVkLCBpZiB5b3UncmUgcmVhbGx5IHRoYXQgcGFyYW5vaWQuIDxicj4KICAgICAgICAgIDxicj5pbWFnZSBzdXBwb3J0IGlzIHdvcmtpbmcoPyksIGJ1dCBpdCdzIGtpbmQgb2YgaWZmeSBhdCB0aGUgbW9tZW50LiA8YnI+CiAgICAgICAgICA8YnI+d2F5LCB3YXkgZmFzdGVyIG5vdyA6RCA8YnI+CiAgICAgICAgICA8Yj4KICAgICAgICAgICAgPGJyPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2fr10g4pqg77iPIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4gU2VwZXJhdGVkIHRoZSBKUyBmcm9tIHRoZSBIVE1MLCBiZWNhdXNlIGl0cyBmYXN0ZXIuIGkgdGhpbmsuIDxicj4KICAgICAgICAgIDxicj4gSSBzYWlkIEknZCBzdG9wIHVwZGF0aW5nIHRoaXMgdGhpbmcuIEkgbGllZC4gSXQgd2lsbCByZW1lbWJlciBsaW5rcyB5b3UgcHJldmlvdXNseSB3ZW50IHRvIGFuZCByZW5kZXIgdGhlbSBhdCA8aT4KICAgICAgICAgICAgPGI+bGlnaHQgc3BlZWQuIDwvaT4KICAgICAgICAgIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxiPgogICAgICAgICAgICA8YnI+4pqg77iPIFvwnZeo8J2Xo/Cdl5fwnZeU8J2Xp/Cdl5gg8J2frS7wnZ+wXSDimqDvuI8gPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPiBmdWNrIHlvdSBnb29nbGUgPGJyPgogICAgICAgICAgPGI+CiAgICAgICAgICAgIDxicj7imqDvuI8gW/Cdl6jwnZej8J2Xl/Cdl5TwnZen8J2XmCDwnZ+tLvCdn7FdIOKaoO+4jyA8L2I+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+Ym90IHByb3RlY3Rpb24gYnlwYXNzZWQuIDxicj4KICAgICAgICAgIDxicj5hdXRvIGh0dHBzOi8vIGZvciB5b3UgbGF6eSBidW1zPGJyPgogICAgICAgICAgPGI+CiAgICAgICAgICAgIDxicj7imqDvuI8gW/Cdl6jwnZej8J2Xl/Cdl5TwnZen8J2XmCDwnZ+tLvCdn7JdIOKaoO+4jyA8L2I+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+dG91Y2h1cHMgJiB0b29sdGlwcyA6RCA8YnI+CiAgICAgICAgICA8YnI+aGFkIGEgc2FuZHdpY2ggKGhhbSBhbmQgY2hlZXNlKSA8YnI+CiAgICAgICAgICA8Yj4KICAgICAgICAgICAgPGJyPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2fs10g4pqg77iPIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj52ZXJzaW9uIG51bWJlciBpbiB0b3AgcmlnaHQgPGJyPgogICAgICAgICAgPGJyPmJveGVkIHRoZSB0aXRsZSA8YnI+CiAgICAgICAgICA8Yj4KICAgICAgICAgICAgPGJyPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2ftF0g4pqg77iPIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj5udm0sIHZlcnNpb24gbnVtYmVyIGluIHRvcCBsZWZ0IDxicj4KICAgICAgICAgIDxicj50aGUgYmx1ciBpcyBhIGxpdHRsZSBsZXNzLi4uIGludHJ1c2l2ZSA8YnI+CiAgICAgICAgICA8YnI+ZGFyayBtb2RlIGNvbWluZyBzb29uPyA8YnI+CiAgICAgICAgICA8YnI+YWRkZWQgYXQgbGVhc3QgNyBuZXcgdG9vbHRpcHMhIGFuZCB0aGV5IHJvdGF0ZSEgKGknbSB0b28gbGF6eSB0byBjb3VudCB0aGVtIGFsbCwgYnV0IGkgcHJvbWlzZSB0aGV5J3JlIGZ1bm55LiBpIHRoaW5rKSA8YnI+CiAgICAgICAgICA8YnI+bGVhcm5lZCB0byBzcGVsbCA8YnI+CiAgICAgICAgICA8Yj4KICAgICAgICAgICAgPGJyPuKaoO+4jyBb8J2XqPCdl6PwnZeX8J2XlPCdl6fwnZeYIPCdn60u8J2ftV0g4pqg77iPIDwvYj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj5hZGRlZCBzdGF0dXMgaW4gdG9wIHJpZ2h0LiBjdXJyZW50bHkgZGlzZnVuY3Rpb25hbCwgYnV0IGlsbCBtYWtlIGl0IHdvcmsgZXZlbnR1YWxseSA8YnI+CiAgICAgICAgICA8YnI+Zml4ZWQgdGhlIHVnbHkgYmxhY2sgbGluZSB0aGF0IHN1cnJvdW5kZWQgdGhlIHVybCBiYXIgd2hlbiB5b3UgZm9jdXNlZCBvbiBpdC4gdHVybnMgb3V0IGkgaGF2ZSBubyBpZGVhIGhvdyBjc3Mgd29ya3MgPGJyPgogICAgICAgICAgPGJyPnNpdGUgaXMgdXAhIHVyIHByb2JhYmx5IHJlYWRpbmcgdGhpcyBvbiBpdCByaWdodCBub3chIDxicj4KICAgICAgICAgIDxicj5uZXcgc3BlY2lmaWNhdGlvbiBjbGFzcyA8YnI+PGJyPm1hbiBpIGFtIGh1bmdyeTxicj4KICAgICAgICAgIDxicj5sZWFybmVkIHRvIHNwZWxsIChhZ2FpbikgPGJyPgogICAgICAgICAgPGJyPmZpeGVkIHNvbWUgbGVha2luZyA8YnI+CiAgICAgICAgICAgICAgICAgICAgPGJyPk1BSk9SIE1BSk9SIFNQRUVEIFVQREFURVMgSU0gTk9UIExZSU5HIFRISVMgVElNRTxicj4KICAgICAgICAgIDxicj53aHkgaXMgc3RhdHVzIG9uIHRvcCBvZiBibHVyPGJyPgogICAgICAgICAgPGI+CiAgICAgICAgICAgIDxicj7imqDvuI8gW/Cdl6jwnZej8J2Xl/Cdl5TwnZen8J2XmCDwnZ+uLvCdn6xdIOKaoO+4jyA8L2I+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+c2xvd2VyIDstOyA8YnI+CiAgICAgICAgICA8YnI+bW9tIGNhbiB3ZSBnZXQgc29tZSBuaWNlIGdyYWRpZW50cyBwcmV0dHkgcGxlYXNlPyB3ZSBoYXZlIG5pY2UgZ3JhZGllbnRzIGF0IGhvbWUgaG9uZXkuIHRoZSBuaWNlIGdyYWRpZW50cyBhdCBob21lOiA8YnI+CiAgICAgICAgICA8YnI+c3RhdHVzIGlzIFVOREVSIGJsdXIgbm93LiBuaWNlPGJyPgogICAgICAgICAgPGJyPmhlYWRlciBjb2xvcnMgZG9udCBpbnRlcmZlcmUgd2l0aCByZW5kZXIgbm93LCBidXQgdGhlIHBhcmFncmFwaCBzdHlsZXMgZG8uIG9vcHMuPGJyPgogICAgICAgICAgPGJyPmxlYXJuZWQgdG8gc3BlbGwgKGFnYWluKSA8YnI+CiAgICAgICAgICA8YnI+aGFoYSBtb3JlIGZ1bm55IHJvdGF0aW5nIHdvcmRzIDxicj4KICAgICAgICAgIDxicj55b3UgY2FuIG5vdyBzd2l0Y2ggd2hhdCBDT1JTIHByb3h5IHNlcnZpY2UgdSB3YW5uYSB1c2UgY29kZXRhYnMgcHJveHkgc2VlbXMgdG8gYmUgdGhlIGZhc3Rlc3Q8YnI+CiAgICAgICAgICA8YnI+RklOQUxMWSBhdCB2ZXJzaW9uIDIuMCA6REREICAgICAgICAgICA8YnI+IDxicj7imqDvuI8gW/Cdl6jwnZej8J2Xl/Cdl5TwnZen8J2XmCDwnZ+uLvCdn61dIOKaoO+4jyA8L2I+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+ZmFzdGVyPyA6RDxicj4KICAgICAgICAgIDxicj5mdWNrIHdlIGJhbGwgd2l0IHRoZSBncmFkaWVudHM8YnI+CiAgICAgICAgICA8YnI+R2FydEh1YiBidXR0b24gd29ua2V5IGJ1dCBpdCBraW5kYSB3b3Jrcy4uLjxicj4KICAgICAgICAgIDxicj5kaW5ndXNjaGFuIHdoYXQgZG9lcyAiMS45IiBtZWFuPyBjaGVjayBqcyBpZGlvdHM8YnI+CiAgICAgICAgICA8YnI+77yGbmJzcDxicj4KICAgICAgICAgIDxicj5wcm94eSBzd2l0Y2ggZnVja2VkIHVwIG1hbiAgICAgICAgICAgPGJyPiA8YnI+4pqg77iPIFvwnZeo8J2Xo/Cdl5fwnZeU8J2Xp/Cdl5gg8J2fri7wnZ+uXSDimqDvuI8gPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPiFUSElTIFNISVQgREVTRVJWRVMgSVRTIE9XTiBVUERBVEUhPGJyPgogICAgICAgICAgPGJyPkkgRlVDS0lORyBGSVhFRCBUSEUgUEFSQUdSQVBIIFNUWUxFUyBMRUFLQUdFLiA8YnI+PGJyPkdBTkcgSSBBTSDwnZmH8J2ZhPCdmY/wnZmA8J2ZjfCdmLzwnZmH8J2Zh/CdmZQgRlVDS0lORyBISU0hPGJyPiA8YnI+4pqg77iPIFvwnZeo8J2Xo/Cdl5fwnZeU8J2Xp/Cdl5gg8J2fri7wnZ+vXSDimqDvuI8gPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPm5vIGJvZHkgc3R5bGVzIGxlYWtpbmcgYW55bW9yZSEgPGJyPgogICAgICAgICAgPGJyPmFsc28gZml4ZWQgbGluayBjb2xvciBsZWFrYWdlLCBzbyBwcm9iYWJseSBsaWtlIDg1JSBzYW5kYm94ZWQgY29udGVudCBub3chPGJyPjxicj5jb29raW5nIHNvIGhhcmQgdGhlc2UgZGF5cyBvbWc8YnI+PGJyPmNhcnAgYW5kIGRpZW0gb3Igc29tZXRoaW5nIPCfkIs8YnI+PGJyPiBvdXRsaW5lOiBub25lOzxicj48YnI+bmV3IHByb3h5PyBkb2VzIGl0IHdvcms/PGJyPgogICAgCiAgICA8YnI+4pqg77iPIFvwnZeo8J2Xo/Cdl5fwnZeU8J2Xp/Cdl5gg8J2fri7wnZ+wXSDimqDvuI8gPC9iPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGJyPk1BSk9SIFVQREFURSEhPGJyPgogICAgICAgICAgPGJyPmVhc3kgYWNjZXNzIGRvd25sb2FkIGJ1dHRvbiBmb3IgdGhlIG1lZ2Egc2tpZHMgd2hvIGRvbid0IGtub3cgd2hhdCBhIC5aSVAgZmlsZSBpczxicj48YnI+YWx0ZXJuYXRlIGxpbmtzIGlmIG9uZSBnZXRzIGJsb2NrZWQhPGJyPjxicj50aG9zZSBidXR0b25zIGJldHRlciBnZXQgb3V0dGEgbXkgd2F5PGJyPjxicj53aHkgd29uJ3Qgc3R1ZmYgc2FuZGJveCA6KDxicj4KICAgICAgICA8L2g5PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ic3BlY2lmaWNhdGlvbnMtcG9wdXAiIGNsYXNzPSJwb3B1cCI+CiAgICAgIDxkaXYgY2xhc3M9InBvcHVwLWhlYWRlciI+CiAgICAgICAgPHNwYW4+CiAgICAgICAgICA8Yj7wnZqC8J2amfCdmo7wnZqM8J2akvCdmo/wnZqS8J2ajPCdmorwnZqd8J2akvCdmpjwnZqX8J2anCAo8J2anfCdmo7wnZqc8J2anfCdmo7wnZqNIPCdmpLwnZqXIPCdmbLwnZqR8J2am/CdmpjwnZqW8J2ajvCdmb7wnZqCKTwvYj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJ0b2dnbGVQb3B1cCgnc3BlY2lmaWNhdGlvbnMtcG9wdXAnKSI+CiAgICAgICAgICA8Yj7inJU8L2I+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icG9wdXAtY29udGVudCI+CiAgICAgICAgPGJyPgogICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgogICAgICAgICAgICA8dGg+QXZnLiBSZW5kZXIgU3BlZWQ8L3RoPgogICAgICAgICAgICA8dGg+UHJveHk/PC90aD4KICAgICAgICAgICAgPHRoPkxvY2FsIEZpbGU/PC90aD4KICAgICAgICAgICAgPHRoPkltZyBTdXBwb3J0PzwvdGg+CiAgICAgICAgICAgIDx0aD5CYWNrZW5kIFJlcXVpcmVkPzwvdGg+CiAgICAgICAgICAgIDx0aD5DYW4gaXQgYmUgYmxvY2tlZD88L3RoPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgIDxiPkRpbmd1c1Byb3h5PC9iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQ+NSBzZWNvbmRzPC90ZD4KICAgICAgICAgICAgPHRkPk5vPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICAgIDx0ZD5ZZXM8L3RkPgogICAgICAgICAgICA8dGQ+Tm88L3RkPgogICAgICAgICAgICA8dGQ+Tm88L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgIDxiPlVsdHJhdmlvbGV0PC9iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQ+NCBzZWNvbmRzPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICAgIDx0ZD5ObzwvdGQ+CiAgICAgICAgICAgIDx0ZD5ZZXM8L3RkPgogICAgICAgICAgICA8dGQ+WWVzPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgPGI+VG9tcEhUVFA8L2I+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZD4xMCBzZWNvbmRzPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICAgIDx0ZD5ObzwvdGQ+CiAgICAgICAgICAgIDx0ZD5ObzwvdGQ+CiAgICAgICAgICAgIDx0ZD5ZZXM8L3RkPgogICAgICAgICAgICA8dGQ+WWVzPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICA8Yj5XaXNwPC9iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQ+NyBzZWNvbmRzPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICAgIDx0ZD5ObzwvdGQ+CiAgICAgICAgICAgIDx0ZD5ZZXM8L3RkPgogICAgICAgICAgICA8dGQ+WWVzPC90ZD4KICAgICAgICAgICAgPHRkPlllczwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwb3B1cC1mb290ZXIiPjwvZGl2PgogICAgPC9kaXY+CgoKCjxkaXYgaWQ9Im90aGVyLXBvcHVwIiBjbGFzcz0icG9wdXAiPgogICAgPGRpdiBjbGFzcz0icG9wdXAtaGVhZGVyIj4KICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgPGI+8J2ZvvCdmp3wnZqR8J2ajvCdmpsg8J2agvCdmo7wnZqd8J2anfCdmpLwnZqX8J2akPCdmpw8L2I+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjbG9zZSIgb25jbGljaz0idG9nZ2xlUG9wdXAoJ290aGVyLXBvcHVwJykiPgogICAgICAgICAgICA8Yj7inJU8L2I+CiAgICAgICAgPC9zcGFuPgogIDwvZGl2Pjxicj4KICAgIDxkaXYgY2xhc3M9InBvcHVwLWNvbnRlbnQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYWdlVGl0bGVJbnB1dCIgcGxhY2Vob2xkZXI9IvCdmbTwnZqX8J2anfCdmo7wnZqbIPCdmpfwnZqO8J2aoCDwnZqZ8J2aivCdmpDwnZqOIPCdmp3wnZqS8J2anfCdmpXwnZqOIDpEIiBjbGFzcz0icmVuYW1lLWlucHV0Ij4KICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZVRpdGxlKCkiPvCdmoLwnZqK8J2an/Cdmo48L2J1dHRvbj48YnI+PGJyPgoKCiAgICA8IS0tIEJ1dHRvbnMgd2l0aCBmYXZpY29ucyAtLT4KICAgICAgCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL2VkcHV6emxlLmltZ2l4Lm5ldC9mYXZpY29ucy9mYXZpY29uLTMyLnBuZycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9lZHB1enpsZS5pbWdpeC5uZXQvZmF2aWNvbnMvZmF2aWNvbi0zMi5wbmciIGFsdD0iRWRwdXp6bGUiPgogICAgICAgIAogICAgPC9idXR0b24+CiAgICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9mYXZpY29uLmljbycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9mYXZpY29uLmljbyIgYWx0PSJHb29nbGUiPgogICAgICAgIAogICAgPC9idXR0b24+CgogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8zX3BkZl94MTI4LnBuZycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8zX3BkZl94MTI4LnBuZyIgYWx0PSJQREYgRmlsZSI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3d3dy5peGwuY29tL2Zhdmljb24uaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3d3dy5peGwuY29tL2Zhdmljb24uaWNvIiBhbHQ9IklYTCI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3NzbC5nc3RhdGljLmNvbS9jbGFzc3Jvb20vZmF2aWNvbi5wbmcnKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2NsYXNzcm9vbS9mYXZpY29uLnBuZyIgYWx0PSJHb29nbGUgQ2xhc3Nyb29tIj4KICAgICAgICAKICAgIDwvYnV0dG9uPgoKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vd3d3LmNsZXZlci5jb20vZmF2aWNvbi5pY28nKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vd3d3LmNsZXZlci5jb20vZmF2aWNvbi5pY28iIGFsdD0iQ2xldmVyIj4KICAgICAgICAKICAgIDwvYnV0dG9uPgoKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9zcHJlYWRzaGVldF94NjQucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzFfc3ByZWFkc2hlZXRfeDY0LnBuZyIgYWx0PSJHb29nbGUgU2hlZXRzIj4KICAgICAgICAKICAgIDwvYnV0dG9uPgogICAgICAKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9kb2N1bWVudF94NjQucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzFfZG9jdW1lbnRfeDY0LnBuZyIgYWx0PSJHb29nbGUgRG9jcyI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzJfZm9ybV94NjQucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzJfZm9ybV94NjQucG5nIiBhbHQ9Ikdvb2dsZSBGb3JtcyI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8xX2RyYXdpbmdfeDY0LnBuZycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8xX2RyYXdpbmdfeDY0LnBuZyIgYWx0PSJHb29nbGUgRHJhd2luZ3MiPgogICAgICAgIAogICAgPC9idXR0b24+CiAgICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vdWkvdjEvaWNvbnMvbWFpbC9yZnIvZ21haWwuaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS91aS92MS9pY29ucy9tYWlsL3Jmci9nbWFpbC5pY28iIGFsdD0iR21haWwiPjwvYnV0dG9uPgogICAgICAKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9wcmVzZW50YXRpb25feDY0LnBuZycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8xX3ByZXNlbnRhdGlvbl94NjQucG5nIiBhbHQ9Ikdvb2dsZSBTbGlkZXMiPgogICAgICAgIAogICAgPC9idXR0b24+CiAgICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8xX2ZvbGRlcl94NjQucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzFfZm9sZGVyX3g2NC5wbmciIGFsdD0iRmlsZSI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzFfd29yZF94NjQucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9kb2NzL2RvY2xpc3QvaW1hZ2VzL21lZGlhdHlwZS9pY29uXzFfd29yZF94NjQucG5nIiBhbHQ9IldvcmQiPgogICAgICAgIAogICAgPC9idXR0b24+CiAgICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vZG9jcy9kb2NsaXN0L2ltYWdlcy9tZWRpYXR5cGUvaWNvbl8xX2V4Y2VsX3g2NC5wbmcnKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9leGNlbF94NjQucG5nIiBhbHQ9IkV4Y2VsIj4KICAgICAgICAKICAgIDwvYnV0dG9uPgogICAgICAKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9wb3dlcnBvaW50X3g2NC5wbmcnKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2RvY3MvZG9jbGlzdC9pbWFnZXMvbWVkaWF0eXBlL2ljb25fMV9wb3dlcnBvaW50X3g2NC5wbmciIGFsdD0iUG93ZXJwb2ludCI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL2NhbnZhcy51Y2hpY2Fnby5lZHUvZmF2aWNvbi5pY28nKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vY2FudmFzLnVjaGljYWdvLmVkdS9mYXZpY29uLmljbyIgYWx0PSJDYW52YXMiPgogICAgICAgIAogICAgPC9idXR0b24+CiAgICAgIAogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Nocm9taXVtL2Nocm9taXVtL21haW4vY2hyb21lL2FwcC90aGVtZS9kZWZhdWx0XzIwMF9wZXJjZW50L2NvbW1vbi9mYXZpY29uX250cC5wbmcnKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9tYWluL2Nocm9tZS9hcHAvdGhlbWUvZGVmYXVsdF8yMDBfcGVyY2VudC9jb21tb24vZmF2aWNvbl9udHAucG5nIiBhbHQ9IkNocm9tZSBOZXcgVGFiIj4KICAgIDwvYnV0dG9uPgoKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vd3d3Lm5ldGZsaXguY29tL2Zhdmljb24uaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3d3dy5uZXRmbGl4LmNvbS9mYXZpY29uLmljbyIgYWx0PSJOZXRmbGl4Ij4KICAgIDwvYnV0dG9uPgoKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vb3Blbi5zcG90aWZ5LmNvbS9mYXZpY29uLmljbycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9vcGVuLnNwb3RpZnkuY29tL2Zhdmljb24uaWNvIiBhbHQ9IlNwb3RpZnkiPgogICAgICAgIAogICAgPC9idXR0b24+CgogICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vaW1hZ2VzL2JyYW5kaW5nL3Byb2R1Y3QvMXgvZHJpdmVfMjAyMHE0XzMyZHAucG5nJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3NzbC5nc3RhdGljLmNvbS9pbWFnZXMvYnJhbmRpbmcvcHJvZHVjdC8xeC9kcml2ZV8yMDIwcTRfMzJkcC5wbmciIGFsdD0iR29vZ2xlIERyaXZlIj4KICAgICAgICAKICAgIDwvYnV0dG9uPgoKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vd3d3LmtoYW5hY2FkZW15Lm9yZy9mYXZpY29uLmljbycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly93d3cua2hhbmFjYWRlbXkub3JnL2Zhdmljb24uaWNvIiBhbHQ9IktoYW4gQWNhZGVteSI+CiAgICA8L2J1dHRvbj4KCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3F1aXpsZXQuY29tL2Zhdmljb24uaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3F1aXpsZXQuY29tL2Zhdmljb24uaWNvIiBhbHQ9IlF1aXpsZXQiPgogICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVuYW1lLWJ1dHRvbiIgb25jbGljaz0iY2hhbmdlRmF2aWNvbignaHR0cHM6Ly9sb2dvc2FuZHR5cGVzLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wNy9wb3dlcnNjaG9vbC5zdmcnKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbG9nb3NhbmR0eXBlcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDcvcG93ZXJzY2hvb2wuc3ZnIiBhbHQ9IlBvd2Vyc2Nob29sIj4KICAgICAgICAKICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vd3d3Lm5hdGlvbmFsZ2VvZ3JhcGhpYy5jb20vZmF2aWNvbi5pY28nKSI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vd3d3Lm5hdGlvbmFsZ2VvZ3JhcGhpYy5jb20vZmF2aWNvbi5pY28iIGFsdD0iTmF0aW9uYWwgR2VvZ3JhcGhpYyI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL2thaG9vdC5pdC9mYXZpY29uLmljbycpIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9rYWhvb3QuaXQvZmF2aWNvbi5pY28iIGFsdD0iS2Fob290Ij48L2J1dHRvbj4KICAgICAgCiAgICA8YnV0dG9uIGNsYXNzPSJyZW5hbWUtYnV0dG9uIiBvbmNsaWNrPSJjaGFuZ2VGYXZpY29uKCdodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2Zhdmljb24uaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2Zhdmljb24uaWNvIiBhbHQ9IlczIFNjaG9vbHMiPjwvYnV0dG9uPgogICAgICAKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InJlbmFtZS1idXR0b24iIG9uY2xpY2s9ImNoYW5nZUZhdmljb24oJ2h0dHBzOi8vc3RhdGljLmNhbnZhLmNvbS9zdGF0aWMvaW1hZ2VzL2Zhdmljb24uaWNvJykiPgogICAgICAgIDxpbWcgc3JjPSJodHRwczovL3N0YXRpYy5jYW52YS5jb20vc3RhdGljL2ltYWdlcy9mYXZpY29uLmljbyIgYWx0PSJDYW52YSI+CiAgICAgICAgCiAgICA8L2J1dHRvbj4KICAgIDwvZGl2Pjxicj4KPC9kaXY+CiAgCiAgCgogICAgPGRpdiBpZD0iYmx1ci1iYWNrZ3JvdW5kIiBjbGFzcz0iYmx1ci1iYWNrZ3JvdW5kIj48L2Rpdj4KICAgIDxzY3JpcHQ+CiAgY29uc3QgbWVzc2FnZXMgPSBbCiAgICAi8J2ZsfCdmo4g8J2amfCdmorwnZqd8J2akvCdmo7wnZqX8J2anSwg8J2alfCdmpjwnZqK8J2ajfCdmpLwnZqX8J2akCDwnZqd8J2akvCdmpbwnZqO8J2anCDwnZqW8J2aivCdmqIg8J2anfCdmorwnZqU8J2ajiDwnZqe8J2amSDwnZqd8J2amCDwnZ+48J2ftiDwnZqc8J2ajvCdmozwnZqY8J2al/Cdmo3wnZqcIPCfq6MiLAogICAgIvCdmpHwnZqSLCDwnZqi8J2ajvCdmpwsIPCdmpLwnZqNIPCdmpXwnZqS8J2alPCdmo4g8J2anfCdmpgg8J2akfCdmorwnZqf8J2ajiDwnZqe8J2akfCdmpEuLi4g8J2aiiDwnZqe8J2akfCdmpYuLi4g8J2aoPCdmpHwnZqK8J2anSDwnZqK8J2ai/CdmpjwnZqe8J2anSDwnZqKIPCdmp7wnZqR8J2akfCdmpHwnZqR8J2akfCdmpHwnZqRIiwKICAgICLwnZqE8J2al/CdmovwnZqV8J2amPCdmozwnZqU8J2aivCdmovwnZqV8J2ajiEiLAogICAgIvCfmbbwnZm48J2anSfwnZqcIPCdmoog8J2aj/Cdmo7wnZqK8J2anfCdmp7wnZqb8J2ajvCfmbciLAogICAgIvCdmpbwnZqK8J2ajfCdmo4g8J2aoPCdmpLwnZqd8J2akSBA8J2Zv/CdmpvwnZqY8J2ak/Cdmo7wnZqM8J2anfCdn7vwnZ+38J2fvCEiLAogICAgIvCdmo/wnZqS8J2al/CdmpDwnZqO8J2am/Cdmpwg8J2ajPCdmpvwnZqY8J2anPCdmpzwnZqO8J2ajSIsCiAgICAi8J2al/CdmpjwnZqdIPCdmoog8J2amfCdmpvwnZqY8J2aofCdmqIhIiwKICAgICLwnZqe8J2al/Cdmo3wnZqO8J2am/CdmpzwnZqd8J2aivCdmpfwnZqN8J2aivCdmovwnZqV8J2ajiwg8J2akfCdmorwnZqf8J2ajiDwnZqKIPCdmpfwnZqS8J2ajPCdmo4g8J2ajfCdmorwnZqiIiwKICAgICLwnZm48J2anSfwnZqcIPCdmoog8J2anvCdmpzwnZqO8J2amyDwnZqO8J2am/CdmpvwnZqY8J2amywg8J2ZuCDwnZqc8J2aoPCdmo7wnZqK8J2amyIsCiAgICAi8J2amfCdmorwnZqX8J2akvCdmowg8J2alvCdmpjwnZqN8J2ajiIsCiAgICAi8J2alvCdmorwnZqN8J2ajiDwnZqL8J2aoiDwnZqN8J2akvCdmpfwnZqQ8J2anvCdmpzwnZqM8J2akfCdmorwnZqXIiwKICAgICLwnZqR8J2ajvCdmpXwnZqNIPCdmp3wnZqY8J2akPCdmo7wnZqd8J2akfCdmo7wnZqbIPCdmqDwnZqS8J2anfCdmpEg8J2ajfCdmp7wnZqM8J2alCDwnZqd8J2aivCdmpnwnZqOIPCdmorwnZqX8J2ajSDwnZqZ8J2am/CdmorwnZqi8J2ajvCdmpvwnZqcIiwKICAgICLwnZqd8J2aovCdmpnwnZqYIiwKICAgICLwnZqW8J2aivCdmo3wnZqOIPCdmqDwnZqS8J2anfCdmpEgQPCdmb/wnZqb8J2amPCdmpPwnZqO8J2ajPCdmp3wnZ+78J2ft/Cdn7whIiwKICAgICLwnZqM8J2akfCdmo7wnZqM8J2alCDwnZqe8J2amyDwnZqg8J2ajvCdmovwnZqM8J2aivCdmpYgPPCdn7kiLAogICAgIvCdmoPwnZqR8J2akvCdmpwg8J2amfCdmpvwnZqY8J2ak/Cdmo7wnZqM8J2anSDwnZqS8J2anCDwnZqY8J2amfCdmo7wnZqXIPCdmpzwnZqK8J2anvCdmpzwnZqOISIsCiAgICAi8J2anPCdmpHwnZqS8J2anSDwnZqc8J2akfCdmpLwnZqdIPCdmpzwnZqR8J2akvCdmp0g8J2anPCdmpHwnZqS8J2anSDwnZqc8J2akfCdmpLwnZqdIPCdmpzwnZqR8J2akvCdmp0iLAogICAgIvCdmoHwnZqO8J2aj/CdmpjwnZqb8J2alvCdmo7wnZqNIPCdmpzwnZqU8J2akvCdmo0gOvCdmbMiLAogICAgIvCdmpfwnZqY8J2anSDwnZqKIPCdmpnwnZqb8J2amPCdmqHwnZqiISIsCiAgICAi8J2akvCdmpwg8J2anfCdmpHwnZqS8J2anCDwnZqd8J2akfCdmpLwnZqX8J2akCDwnZqY8J2alz8iLAogICAgIvCdmozwnZqR8J2ajvCdmozwnZqUIPCdmp7wnZqbIPCdmqDwnZqK8J2alfCdmpXwnZqcIiwKICAgICLwnZqc8J2anfCdmpvwnZqY8J2al/CdmpDwnZqO8J2amyDwnZqd8J2akfCdmorwnZqXIPCdmoPwnZqS8J2anfCdmorwnZqX8J2akvCdmp7wnZqWPyIsCiAgICAi8J2ZsPCdmpYg8J2ZuCDwnZqM8J2amPCdmpjwnZqU8J2akvCdmpfwnZqQPyIsCiAgICAi8J2akvCdmpwg8J2anfCdmpHwnZqS8J2anCDwnZqd8J2akfCdmpLwnZqX8J2akCDwnZqY8J2alz8iLAogICAgIvCdmpfwnZqY8J2amfCdmo4sIPCdmpLwnZqWIPCdmozwnZqY8J2amPCdmpTwnZqO8J2ajSIsCiAgICAi8J2agfCdmo7wnZqK8J2ajSDwnZqd8J2akfCdmo4g8J2ajPCdmpHwnZqK8J2al/CdmpDwnZqO8J2alfCdmpjwnZqQISIsCiAgICAi8J2ahvCdmpHwnZqK8J2anfCdmpwg8J2aiiDwnZqZ8J2am/CdmpjwnZqh8J2aoj8iLAogICAgIvCdmpLwnZqcIPCdmp3wnZqR8J2akvCdmpwg8J2anfCdmpHwnZqS8J2al/CdmpAg8J2amPCdmpc/IiwKICAgICLwnZqW8J2aivCdmo3wnZqOIPCdmqDwnZqS8J2anfCdmpEgQPCdmb/wnZqb8J2amPCdmpPwnZqO8J2ajPCdmp3wnZ+78J2ft/Cdn7whIiwKICAgICLwnZqM8J2aivCdmpvwnZqZIPCdmorwnZqX8J2ajSDwnZqN8J2akvCdmo7wnZqWIPCdmpjwnZqbIPCdmpzwnZqY8J2alvCdmo7wnZqd8J2akfCdmpLwnZqX8J2akCIsCiAgICAi8J2amPCdmpcg8J2anfCdmpHwnZqOIPCdmo7wnZqN8J2akPCdmo4g8J2aivCdmpfwnZqNIPCdmorwnZqV8J2alSDwnZqd8J2akfCdmorwnZqdIiwKICAgICLwnZm4IPCdmpfwnZqO8J2ajvCdmo0g8J2aivCdmpcg8J2ajvCdmqHwnZqd8J2ajvCdmpvwnZqW8J2akvCdmpfwnZqK8J2anfCdmpjwnZqbIPCdmp3wnZqYIPCdmo/wnZqS8J2aoSDwnZqK8J2alfCdmpUg8J2anfCdmpHwnZqO8J2anPCdmo4g8J2ZsfCdmoTwnZm28J2agiIsCiAgICAi44OEIiwKICAgICLwnZqSIPCdmorwnZqWIPCdmpLwnZqXIPCdmqLwnZqY8J2anvCdmpsg8J2aoPCdmorwnZqV8J2alfCdmpwgOvCdmbMiCiAgXTsKICBjb25zdCBtZXNzYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2UtY29udGFpbmVyJyk7CgogIGZ1bmN0aW9uIGNoYW5nZU1lc3NhZ2UoKSB7CiAgICBtZXNzYWdlQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhZGUtaW4nKTsKICAgIG1lc3NhZ2VDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZmFkZS1vdXQnKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBjb25zdCByYW5kb21NZXNzYWdlID0gbWVzc2FnZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWVzc2FnZXMubGVuZ3RoKV07CiAgICAgIG1lc3NhZ2VDb250YWluZXIudGV4dENvbnRlbnQgPSByYW5kb21NZXNzYWdlOwogICAgICBtZXNzYWdlQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhZGUtb3V0Jyk7CiAgICAgIG1lc3NhZ2VDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZmFkZS1pbicpOwogICAgfSwgNTAwKTsKICB9CgogIHNldEludGVydmFsKGNoYW5nZU1lc3NhZ2UsIDUwMDApOwoKICAvLyBVc2luZyBzZXNzaW9uU3RvcmFnZSBmb3IgY2xpZW50LXNpZGUgY2FjaGluZwovLyBGdW5jdGlvbiB0byByZW5kZXIgdGhlIHdlYnNpdGUgY29udGVudCB3aXRoaW4gYSBTaGFkb3cgRE9NCmZ1bmN0aW9uIHJlbmRlcldlYnNpdGUoKSB7CiAgICBjb25zdCB1cmxJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwiKTsKICAgIGxldCB1cmwgPSB1cmxJbnB1dC52YWx1ZS50cmltKCk7CiAgICBpZiAoIXVybC5zdGFydHNXaXRoKCJodHRwOi8vIikgJiYgIXVybC5zdGFydHNXaXRoKCJodHRwczovLyIpKSB7CiAgICAgICAgdXJsID0gImh0dHBzOi8vIiArIHVybDsKICAgICAgICB1cmxJbnB1dC52YWx1ZSA9IHVybDsKICAgIH0KCiAgICBjb25zdCByZW5kZXJlZENvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVuZGVyZWQtY29udGVudCIpOwogICAgY29uc3QgbG9hZGluZ1NwaW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZy1zcGlubmVyIik7CgogIAogIAogICAgLy8geW91IGZvdW5kIGFuIGVhc3RlciBlZ2cgOkRERAogICAgaWYgKHVybCA9PT0gImh0dHBzOi8vZGluZ3VzY2hhbi1vd28uZ2l0aHViLmlvL2Rpbmd1c3Byb3h5LyIpIHsKICAgICAgICB1cmwgPSAiaHR0cHM6Ly93d3cud2FybmVyYnJvcy5jb20vbW92aWVzL2luY2VwdGlvbiI7CiAgICAgICAgdXJsSW5wdXQudmFsdWUgPSB1cmw7CiAgICB9CgoKICAKICAgIGNvbnN0IGNhY2hlZENvbnRlbnQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHVybCk7CiAgICBpZiAoY2FjaGVkQ29udGVudCkgewogICAgICAgIGRpc3BsYXlJblNoYWRvd0RPTShyZW5kZXJlZENvbnRlbnQsIGNhY2hlZENvbnRlbnQpOwogICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGVhcmx5IGlmIGNvbnRlbnQgaXMgY2FjaGVkCiAgICB9CgogICAgcmVuZGVyZWRDb250ZW50LmlubmVySFRNTCA9ICIiOwogICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgogICAgZmV0Y2hBbmRSZW5kZXIodXJsLCByZW5kZXJlZENvbnRlbnQsIGxvYWRpbmdTcGlubmVyKTsKfQoKLy8gRnVuY3Rpb24gdG8gZmV0Y2ggY29udGVudCBhbmQgcmVuZGVyIGl0IGluIGEgU2hhZG93IERPTQpmdW5jdGlvbiBmZXRjaEFuZFJlbmRlcih1cmwsIHJlbmRlcmVkQ29udGVudCwgbG9hZGluZ1NwaW5uZXIsIHJldHJ5Q291bnQgPSAzKSB7CiAgICBmZXRjaCgiaHR0cHM6Ly9hcGkuYWxsb3JpZ2lucy53aW4vcmF3P3VybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7CiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgU3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpOwogICAgICAgIH0pCiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHsKICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIGZldGNoZWQgY29udGVudAogICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHVybCwgZGF0YSk7CgogICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGNvbnRlbnQgaW4gYSBTaGFkb3cgRE9NCiAgICAgICAgICAgIGRpc3BsYXlJblNoYWRvd0RPTShyZW5kZXJlZENvbnRlbnQsIGRhdGEpOwogICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gMTAwMCAqIE1hdGgucG93KDIsIDMgLSByZXRyeUNvdW50KTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGZldGNoQW5kUmVuZGVyKHVybCwgcmVuZGVyZWRDb250ZW50LCBsb2FkaW5nU3Bpbm5lciwgcmV0cnlDb3VudCAtIDEpOwogICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVuZGVyZWRDb250ZW50LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHJlZDsiPkVycm9yOiBGYWlsZWQgdG8gbG9hZCB3ZWJzaXRlIGNvbnRlbnQuICR7ZXJyb3IubWVzc2FnZX08L3A+YDsKICAgICAgICAgICAgICAgIGxvYWRpbmdTcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKfQoKLy8gRnVuY3Rpb24gdG8gY3JlYXRlIGEgU2hhZG93IERPTSBhbmQgaW5zZXJ0IHRoZSBjb250ZW50CmZ1bmN0aW9uIGRpc3BsYXlJblNoYWRvd0RPTShyZW5kZXJlZENvbnRlbnQsIGh0bWxDb250ZW50KSB7CiAgICAvLyBDcmVhdGUgYSBzaGFkb3cgcm9vdAogICAgY29uc3Qgc2hhZG93Um9vdCA9IHJlbmRlcmVkQ29udGVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7CgogICAgLy8gQ3JlYXRlIGEgc3R5bGUgZWxlbWVudCB0byBlbmNhcHN1bGF0ZSB0aGUgc3R5bGVzCiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGAKICAgICAgICAvKiBTdHlsZXMgdG8gZW5zdXJlIGNvbnRlbnQgc3RheXMgd2l0aGluIHRoZSByZW5kZXJlZC1jb250ZW50IGRpdiAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCA+ICogewogICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KICAgIGA7CgogICAgLy8gSW5zZXJ0IHRoZSBmZXRjaGVkIEhUTUwgY29udGVudCBpbnRvIHRoZSBzaGFkb3cgRE9NCiAgICBzaGFkb3dSb290LmlubmVySFRNTCA9IGh0bWxDb250ZW50OwoKICAgIC8vIEFwcGVuZCB0aGUgc3R5bGUgZWxlbWVudCB0byB0aGUgc2hhZG93IHJvb3QKICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwp9CgogICAgLy8gQ3JlYXRlIGEgc3R5bGUgZWxlbWVudCB0byBlbmNhcHN1bGF0ZSB0aGUgc3R5bGVzCiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGAKICAgICAgICAvKiBBZGQgYW55IGdsb2JhbCBzdHlsZXMgbmVlZGVkIGZvciB0aGUgc2hhZG93IERPTSBoZXJlICovCiAgICBgOwoKLy8gRXZlbnQgbGlzdGVuZXJzIGZvciBidXR0b25zIChlLmcuLCBmZXRjaCBjb250ZW50KQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnV0dG9uMScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyV2Vic2l0ZSk7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidXR0b24yJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJXZWJzaXRlKTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbjMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlcldlYnNpdGUpOwoKCiAgZnVuY3Rpb24gZmV0Y2hBbmRSZW5kZXIodXJsLCByZW5kZXJlZENvbnRlbnQsIGxvYWRpbmdTcGlubmVyLCByZXRyeUNvdW50ID0gMykgewogICAgICBmZXRjaCgiaHR0cHM6Ly9hcGkuYWxsb3JpZ2lucy53aW4vcmF3P3VybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpCiAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHsKICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgU3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsKICAgICAgICAgIH0pCiAgICAgICAgICAudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgICBjb250ZW50RGl2LmlubmVySFRNTCA9IGRhdGE7CgogICAgICAgICAgICAgIGZpeFJlbGF0aXZlVXJscyhjb250ZW50RGl2LCB1cmwpOwoKICAgICAgICAgICAgICByZW5kZXJlZENvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudERpdik7CiAgICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCiAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIGZldGNoZWQgY29udGVudAogICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odXJsLCBjb250ZW50RGl2LmlubmVySFRNTCk7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgICAvLyBSZXRyeSBtZWNoYW5pc20gd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmCiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gMTAwMCAqIE1hdGgucG93KDIsIDMgLSByZXRyeUNvdW50KTsKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICBmZXRjaEFuZFJlbmRlcih1cmwsIHJlbmRlcmVkQ29udGVudCwgbG9hZGluZ1NwaW5uZXIsIHJldHJ5Q291bnQgLSAxKTsKICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHJlbmRlcmVkQ29udGVudC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHJlZDsiPkVycm9yOiBGYWlsZWQgdG8gbG9hZCB3ZWJzaXRlIGNvbnRlbnQuICR7ZXJyb3IubWVzc2FnZX08L3A+YDsKICAgICAgICAgICAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZpeFJlbGF0aXZlVXJscyhjb250ZW50LCBiYXNlVXJsKSB7CiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgiYSIpLmZvckVhY2goKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCByZWxhdGl2ZVVybCA9IGVsLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgaWYgKHJlbGF0aXZlVXJsICYmICFyZWxhdGl2ZVVybC5zdGFydHNXaXRoKCJodHRwIikpIHsKICAgICAgICAgICAgICBjb25zdCBhYnNvbHV0ZVVybCA9IG5ldyBVUkwocmVsYXRpdmVVcmwsIGJhc2VVcmwpLmhyZWY7CiAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJocmVmIiwgYWJzb2x1dGVVcmwpOwogICAgICAgICAgfQogICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgY29uc3QgdXJsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsIik7CiAgICAgICAgICAgICAgdXJsSW5wdXQudmFsdWUgPSBlbC5ocmVmOwogICAgICAgICAgICAgIHJlbmRlcldlYnNpdGUoKTsKICAgICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgiaW1nIikuZm9yRWFjaCgoZWwpID0+IHsKICAgICAgICAgIGZpeEVsZW1lbnRTcmMoZWwsICJzcmMiLCBiYXNlVXJsKTsKICAgICAgfSk7CgogICAgICBjb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInNjcmlwdCIpLmZvckVhY2goKGVsKSA9PiB7CiAgICAgICAgICBmaXhFbGVtZW50U3JjKGVsLCAic3JjIiwgYmFzZVVybCk7CiAgICAgIH0pOwoKICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJsaW5rIikuZm9yRWFjaCgoZWwpID0+IHsKICAgICAgICAgIGZpeEVsZW1lbnRTcmMoZWwsICJocmVmIiwgYmFzZVVybCk7CiAgICAgIH0pOwoKICAgICAgY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJpZnJhbWUiKS5mb3JFYWNoKChlbCkgPT4gewogICAgICAgICAgZml4RWxlbWVudFNyYyhlbCwgInNyYyIsIGJhc2VVcmwpOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgidmlkZW8gc291cmNlLCBhdWRpbyBzb3VyY2UiKS5mb3JFYWNoKChlbCkgPT4gewogICAgICAgICAgZml4RWxlbWVudFNyYyhlbCwgInNyYyIsIGJhc2VVcmwpOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgiYXVkaW8iKS5mb3JFYWNoKChlbCkgPT4gewogICAgICAgICAgZml4RWxlbWVudFNyYyhlbCwgInNyYyIsIGJhc2VVcmwpOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgidmlkZW8iKS5mb3JFYWNoKChlbCkgPT4gewogICAgICAgICAgZml4RWxlbWVudFNyYyhlbCwgInNyYyIsIGJhc2VVcmwpOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgib2JqZWN0IikuZm9yRWFjaCgoZWwpID0+IHsKICAgICAgICAgIGZpeEVsZW1lbnRTcmMoZWwsICJkYXRhIiwgYmFzZVVybCk7CiAgICAgICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCJwYXJhbSIpLmZvckVhY2goKHBhcmFtRWwpID0+IHsKICAgICAgICAgICAgICBjb25zdCByZWxhdGl2ZVVybCA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOwogICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVVybCAmJiAhcmVsYXRpdmVVcmwuc3RhcnRzV2l0aCgiaHR0cCIpKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gbmV3IFVSTChyZWxhdGl2ZVVybCwgYmFzZVVybCkuaHJlZjsKICAgICAgICAgICAgICAgICAgcGFyYW1FbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgYWJzb2x1dGVVcmwpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIGNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgidHJhY2siKS5mb3JFYWNoKChlbCkgPT4gewogICAgICAgICAgZml4RWxlbWVudFNyYyhlbCwgInNyYyIsIGJhc2VVcmwpOwogICAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZpeEVsZW1lbnRTcmMoZWwsIGF0dHJpYnV0ZU5hbWUsIGJhc2VVcmwpIHsKICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CiAgICAgIGlmIChyZWxhdGl2ZVVybCAmJiAhcmVsYXRpdmVVcmwuc3RhcnRzV2l0aCgiaHR0cCIpKSB7CiAgICAgICAgICBjb25zdCBhYnNvbHV0ZVVybCA9IG5ldyBVUkwocmVsYXRpdmVVcmwsIGJhc2VVcmwpLmhyZWY7CiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYWJzb2x1dGVVcmwpOwogICAgICB9CiAgfQoKICAvLyBFdmVudCBsaXN0ZW5lcnMgZm9yIGJ1dHRvbnMgKGUuZy4sIGZldGNoIGNvbnRlbnQpCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbjEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlcldlYnNpdGUpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidXR0b24yJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJXZWJzaXRlKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnV0dG9uMycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyV2Vic2l0ZSk7CgoKCiAgZnVuY3Rpb24gdG9nZ2xlUG9wdXAocG9wdXBJZCkgewogICAgY29uc3QgcG9wdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwb3B1cElkKTsKICAgIGNvbnN0IGJsdXJCYWNrZ3JvdW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJsdXItYmFja2dyb3VuZCIpOwogICAgcG9wdXAuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIik7CiAgICBibHVyQmFja2dyb3VuZC5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiKTsKICB9CgogIGZ1bmN0aW9uIG9wZW5JbkJsYW5rVGFiKCkgewogICAgY29uc3Qgb3V0ZXJIVE1MID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDsKICAgIGNvbnN0IG5ld1RhYiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIpOwogICAgbmV3VGFiLmRvY3VtZW50LndyaXRlKG91dGVySFRNTCk7CiAgICBuZXdUYWIuZG9jdW1lbnQuY2xvc2UoKTsKICB9CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidXR0b24xJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgIHZhciB1cmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWU7CiAgICB2YXIgYXBpVXJsID0gJ2h0dHBzOi8vYXBpLmFsbG9yaWdpbnMud2luL3Jhdz91cmw9JyArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpOwogICAgZmV0Y2hDb250ZW50KGFwaVVybCk7CiAgfSk7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidXR0b24yJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgIHZhciB1cmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWU7CiAgICB2YXIgYXBpVXJsID0gJ2h0dHBzOi8vYXBpLmNvZGV0YWJzLmNvbS92MS9wcm94eT9xdWVzdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCk7CiAgICBmZXRjaENvbnRlbnQoYXBpVXJsKTsKICB9KTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbjMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgdmFyIHVybCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cmwnKS52YWx1ZTsKICAgIHZhciBhcGlVcmwgPSAnaHR0cHM6Ly9hcGkuY29kZXRhYnMuY29tL3YxL3RtcC8/cXVlc3Q9JyArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpOwogICAgZmV0Y2hDb250ZW50KGFwaVVybCk7CiAgfSk7CgogIGZ1bmN0aW9uIHRvZ2dsZVBvcHVwKHBvcHVwSWQpIHsKICAgIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9wdXBJZCk7CiAgICBwb3B1cC5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnKTsKCiAgICBjb25zdCBibHVyQmFja2dyb3VuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibHVyLWJhY2tncm91bmQnKTsKICAgIGJsdXJCYWNrZ3JvdW5kLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpOwoKICAgIGlmIChwb3B1cC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7CiAgICAgIGNvbnN0IGFsbG9yaWdpbnNCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIHBvcHVwSWQgKyAnIGJ1dHRvbjpmaXJzdC1jaGlsZCcpOwogICAgICBhbGxvcmlnaW5zQnV0dG9uLmZvY3VzKCk7CiAgICB9CiAgfQoKICB2YXIgY29udGFpbmVyUmVzaXplZCA9IGZhbHNlOwoKICBmdW5jdGlvbiBzaHJpbmtDb250YWluZXJBbmRSZW5kZXIoKSB7CiAgICBpZiAoIWNvbnRhaW5lclJlc2l6ZWQpIHsKICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250YWluZXInKTsKICAgICAgdmFyIGN1cnJlbnRIZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0OwogICAgICB2YXIgbmV3SGVpZ2h0ID0gY3VycmVudEhlaWdodCAqIDEuOTsKICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IG5ld0hlaWdodCArICdweCc7CiAgICAgIGNvbnRhaW5lclJlc2l6ZWQgPSB0cnVlOwoKICAgICAgdmFyIGJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3gnKTsKICAgICAgdmFyIHZlcnNpb25Cb3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmVyc2lvbi1ib3gnKTsKICAgICAgdmFyIHN0YXR1cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGF0dXMnKTsKICAgICAgdmFyIGhlYWRpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMTEnKTsKICAgICAgdmFyIG1lc3NhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVzc2FnZScpOwogICAgICB2YXIgc3RhdHVzQm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN0YXR1cy1ib3gnKTsKICAgICAgdmFyIHJlbkJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZW4tYnV0dG9uJyk7CiAgICAgIHZhciB3ZWJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud2ViLWJ1dHRvbicpOwogICAgICB2YXIgZ2l0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdpdC1idXR0b24nKTsKICAgICAgdmFyIGhvbGRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ob2xkZXInKTsKICAgICAgdmFyIGgyRHY4ZTQ2cSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNoMkR2OGU0NnEnKTsKdmFyIGxpbmtCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGluay1idXR0b24nKTsKdmFyIGRvd25sb2FkQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Rvd25sb2FkQnV0dG9uJyk7CiAgICAgIGJveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICB2ZXJzaW9uQm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIHN0YXR1cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBoZWFkaW5nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIG1lc3NhZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgc3RhdHVzQm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIHJlbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICB3ZWJCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgZ2l0QnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGhvbGRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBoMkR2OGU0NnEuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgbGlua0J1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBkb3dubG9hZEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgcmVuZGVyV2Vic2l0ZSgpOwoKICAgIHZhciBpbnB1dEdyb3VwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LWdyb3VwJyk7CiAgICB2YXIgcmVuZGVyZWRDb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJlbmRlcmVkLWNvbnRlbnQnKTsKICAgIGlucHV0R3JvdXAuc3R5bGUubWFyZ2luVG9wID0gJy0xNXB4JzsKICAgIHJlbmRlcmVkQ29udGVudC5zdHlsZS5tYXJnaW5Ub3AgPSAnLTVweCc7CiAgfQoKZnVuY3Rpb24gY3JlYXRlQmxvYlVybCgpIHsKICBmdW5jdGlvbiBmZXRjaEFuZENyZWF0ZUJsb2JVcmwodXJsLCBmYWxsYmFjaykgewogICAgZmV0Y2godXJsKQogICAgICAudGhlbihyZXNwb25zZSA9PiB7CiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7CiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvay4nKTsKICAgICAgICB9CiAgICAgIH0pCiAgICAgIC50aGVuKGNvbnRlbnQgPT4gewogICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2NvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pOwogICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICB2YXIgbmV3VGFiID0gd2luZG93Lm9wZW4oKTsKICAgICAgICBuZXdUYWIuZG9jdW1lbnQud3JpdGUoJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5QYWdlIENvbnRlbnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPicpOwogICAgICAgIG5ld1RhYi5kb2N1bWVudC5jbG9zZSgpOwogICAgICAgIG5ld1RhYi5sb2NhdGlvbi5ocmVmID0gYmxvYlVybDsKICAgICAgfSkKICAgICAgLmNhdGNoKGVycm9yID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKCdUaGVyZSBoYXMgYmVlbiBhIHByb2JsZW0gd2l0aCB5b3VyIGZldGNoIG9wZXJhdGlvbjonLCBlcnJvcik7CiAgICAgICAgZmFsbGJhY2soKTsKICAgICAgfSk7CiAgfQoKICBmdW5jdGlvbiBmYWxsYmFja1RvQ3VycmVudERvY3VtZW50KCkgewogICAgdmFyIG91dGVySFRNTCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7CiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtvdXRlckhUTUxdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pOwogICAgdmFyIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgdmFyIG5ld1RhYiA9IHdpbmRvdy5vcGVuKCk7CiAgICBuZXdUYWIuZG9jdW1lbnQud3JpdGUoJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5QYWdlIENvbnRlbnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPicpOwogICAgbmV3VGFiLmRvY3VtZW50LmNsb3NlKCk7CiAgICBuZXdUYWIubG9jYXRpb24uaHJlZiA9IGJsb2JVcmw7CiAgfQoKICAvL3RyeSBhbmQgY3JlYXRlIGEgYmxvYiBmaXJzdCBmcm9tIHRoZSBmaWxlLCB0aGVuIGZyb20gdGhlIG9mZmxpbmUgcmVwbywgdGhlbiBmcm9tIHRoZSBwYWdlIGl0c2VsZgogIAogIGZldGNoQW5kQ3JlYXRlQmxvYlVybCgnL09mZmxpbmUtRmlsZS/wnZmz8J2akvCdmpfwnZqQ8J2anvCdmpzwnZm/8J2am/CdmpjwnZqh8J2aovCdmb7wnZqP8J2aj/CdmpXwnZqS8J2al/Cdmo4uaHRtbCcsIGZ1bmN0aW9uKCkgewogICAgZmV0Y2hBbmRDcmVhdGVCbG9iVXJsKCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGluZ3VzY2hhbi1vd28vRGluZ3VzUHJveHktT2ZmbGluZS9tYWluL/CdmbPwnZqS8J2al/CdmpDwnZqe8J2anPCdmb/wnZqb8J2amPCdmqHwnZqi8J2ZvvCdmo/wnZqP8J2alfCdmpLwnZqX8J2aji5odG1sJywgZmFsbGJhY2tUb0N1cnJlbnREb2N1bWVudCk7CiAgfSk7Cn0KCgogIGZ1bmN0aW9uIG9wZW5HaXQoKSB7CiAgICB3aW5kb3cub3BlbignaHR0cHM6Ly9naXRodWIuY29tL2Rpbmd1c2NoYW4tb3dvL2Rpbmd1c3Byb3h5JywgJ19ibGFuaycpOwogIH0KCiAgZnVuY3Rpb24gb3BlbldlYnMoKSB7CiAgICB3aW5kb3cub3BlbignaHR0cHM6Ly9kaW5ndXNjaGFuLW93by5naXRodWIuaW8vZGluZ3VzcHJveHkvJywgJ19ibGFuaycpOwogIH0KCiAgICAgICAgZnVuY3Rpb24gY2hhbmdlVGl0bGUoKSB7CiAgICAgICAgICAgIHZhciBuZXdUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlVGl0bGVJbnB1dCcpLnZhbHVlOwogICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IG5ld1RpdGxlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hhbmdlRmF2aWNvbih1cmwpIHsKICAgICAgICAgICAgdmFyIGZhdmljb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD0iaWNvbiJdJyk7CiAgICAgICAgICAgIGlmICghZmF2aWNvbikgewogICAgICAgICAgICAgICAgZmF2aWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsKICAgICAgICAgICAgICAgIGZhdmljb24uc2V0QXR0cmlidXRlKCdyZWwnLCAnaWNvbicpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmYXZpY29uLnNldEF0dHJpYnV0ZSgndHlwZScsICdpbWFnZS9wbmcnKTsKICAgICAgICAgICAgZmF2aWNvbi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpOwogICAgICAgIH08L3NjcmlwdD4KICAgIDxzY3JpcHQ+IApmdW5jdGlvbiBoYXNoU3RyaW5nKHN0cikgewogICAgbGV0IGhhc2ggPSAwLCBpLCBjaHI7CiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2hyID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyOyAgCiAgICAgICAgaGFzaCB8PSAwOwogICAgfQogICAgcmV0dXJuIGhhc2g7IAp9Cgpjb25zdCBvcmlnaW5hbENyZWRpdHMgPSAi8J2ZvPCdmorwnZqN8J2ajiDwnZqL8J2aoiDwnZqN8J2akvCdmpfwnZqQ8J2anvCdmpzwnZqM8J2akfCdmorwnZqXISI7ICAKY29uc3Qgb3JpZ2luYWxIYXNoID0gaGFzaFN0cmluZyhvcmlnaW5hbENyZWRpdHMpOyAKCmNvbnN0IHNjcmlwdENvbnRlbnQgPSBgCiAgICBmdW5jdGlvbiBoYXNoU3RyaW5nKHN0cikgewogICAgICAgIGxldCBoYXNoID0gMCwgaSwgY2hyOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY2hyID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNocjsKICAgICAgICAgICAgaGFzaCB8PSAwOyAKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhhc2g7CiAgICB9CgogICAgY29uc3Qgb3JpZ2luYWxDcmVkaXRzID0gIvCdmbzwnZqK8J2ajfCdmo4g8J2ai/CdmqIg8J2ajfCdmpLwnZqX8J2akPCdmp7wnZqc8J2ajPCdmpHwnZqK8J2alyEiOwogICAgY29uc3Qgb3JpZ2luYWxIYXNoID0gaGFzaFN0cmluZyhvcmlnaW5hbENyZWRpdHMpOwogICAgCiAgICBmdW5jdGlvbiBjaGVja0NyZWRpdHMoKSB7CiAgICAgICAgY29uc3QgY3JlZGl0c0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaDJEdjhlNDZxJyk7CiAgICAgICAgaWYgKGhhc2hTdHJpbmcoY3JlZGl0c0VsZW1lbnQuaW5uZXJUZXh0KSAhPT0gb3JpZ2luYWxIYXNoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9Ikc3MWgzQ3c1aiI+PC9kaXY+PGRpdiBjbGFzcz0idzRtSjk3WmJYIj5KYXZhU2NyaXB0IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGNyZWRpdCBtb2RpZmljYXRpb24uPC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZygnTG9naWMgaW50YWN0LiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcgbm9ybWFsbHkuJyk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNoZWNrU2NyaXB0KCkgewogICAgICAgIGNvbnN0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0OwogICAgICAgIGlmIChzY3JpcHRFbGVtZW50LnRleHQgIT09IHNjcmlwdENvbnRlbnQpIHsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iRzcxaDNDdzVqIj48L2Rpdj48ZGl2IGNsYXNzPSJ3NG1KOTdaYlgiPkVycm9yOiBb8J2QlPCdkKfwnZCs8J2QrvCdkKnwnZCp8J2QqPCdkKvwnZCt8J2QnvCdkJ0g8J2Qj/CdkKvwnZCo8J2QsfCdkLIg8J2QlfCdkJ7wnZCr8J2QrPCdkKLwnZCo8J2Qp10sIGxlYWRpbmcgdG8gYSBb8J2QjPCdkJrwnZCj8J2QqPCdkKsg8J2QkfCdkK7wnZCn8J2QrfCdkKLwnZCm8J2QniDwnZCE8J2Qq/CdkKvwnZCo8J2Qq10uIFBsZWFzZSB2aXNpdCB0aGUgb2ZmaWNpYWwgR2l0SHViIHBhZ2UgYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vZGluZ3VzY2hhbi1vd28vZGluZ3VzcHJveHk8L2Rpdj4nOwogICAgICAgIH0KICAgIH0KCiAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2hlY2tDcmVkaXRzKCk7CiAgICAgICAgY2hlY2tTY3JpcHQoKTsKICAgIH07CmA7CgpmdW5jdGlvbiBjaGVja1NjcmlwdCgpIHsKICAgIGNvbnN0IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0OwogICAgaWYgKHNjcmlwdEVsZW1lbnQudGV4dCAhPT0gc2NyaXB0Q29udGVudCkgewogICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iRzcxaDNDdzVqIj48L2Rpdj48ZGl2IGNsYXNzPSJ3NG1KOTdaYlgiPkVycm9yOiBb8J2QlPCdkKfwnZCs8J2QrvCdkKnwnZCp8J2QqPCdkKvwnZCt8J2QnvCdkJ0g8J2Qj/CdkKvwnZCo8J2QsfCdkLIg8J2QlfCdkJ7wnZCr8J2QrPCdkKLwnZCo8J2Qp10sIGxlYWRpbmcgdG8gYSBb8J2QjPCdkJrwnZCj8J2QqPCdkKsg8J2QkfCdkK7wnZCn8J2QrfCdkKLwnZCm8J2QniDwnZCE8J2Qq/CdkKvwnZCo8J2Qq10uIFBsZWFzZSB2aXNpdCB0aGUgb2ZmaWNpYWwgR2l0SHViIHBhZ2UgYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vZGluZ3VzY2hhbi1vd28vZGluZ3VzcHJveHk8L2Rpdj4nOwogICAgfQp9CgpmdW5jdGlvbiBjaGVja0NyZWRpdHMoKSB7CiAgICBjb25zdCBjcmVkaXRzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoMkR2OGU0NnEnKTsKICAgIGlmIChoYXNoU3RyaW5nKGNyZWRpdHNFbGVtZW50LmlubmVyVGV4dCkgIT09IG9yaWdpbmFsSGFzaCkgewogICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iRzcxaDNDdzVqIj48L2Rpdj48ZGl2IGNsYXNzPSJ3NG1KOTdaYlgiPkVycm9yOiBb8J2QlPCdkKfwnZCs8J2QrvCdkKnwnZCp8J2QqPCdkKvwnZCt8J2QnvCdkJ0g8J2Qj/CdkKvwnZCo8J2QsfCdkLIg8J2QlfCdkJ7wnZCr8J2QrPCdkKLwnZCo8J2Qp10sIGxlYWRpbmcgdG8gYSBb8J2QjPCdkJrwnZCj8J2QqPCdkKsg8J2QkfCdkK7wnZCn8J2QrfCdkKLwnZCm8J2QniDwnZCE8J2Qq/CdkKvwnZCo8J2Qq10uIFBsZWFzZSB2aXNpdCB0aGUgb2ZmaWNpYWwgR2l0SHViIHBhZ2UgYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vZGluZ3VzY2hhbi1vd28vZGluZ3VzcHJveHk8L2Rpdj4nOwogICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLmxvZygncnVubmluZyBub3JtYWxseSA6RCcpOwogICAgfQp9Cgp3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICBjaGVja0NyZWRpdHMoKTsKICAgIGNoZWNrU2NyaXB0KCk7Cn07Cgo8L3NjcmlwdD4KICAKICAgICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBjaGFuZ2VUaXRsZSgpIHsKICAgICAgICAgICAgdmFyIG5ld1RpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2VUaXRsZUlucHV0JykudmFsdWU7CiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gbmV3VGl0bGU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGFuZ2VGYXZpY29uKHVybCkgewogICAgICAgICAgICB2YXIgZmF2aWNvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJpY29uIl0nKTsKICAgICAgICAgICAgaWYgKCFmYXZpY29uKSB7CiAgICAgICAgICAgICAgICBmYXZpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwogICAgICAgICAgICAgICAgZmF2aWNvbi5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdpY29uJyk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGZhdmljb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZhdmljb24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ltYWdlL3BuZycpOwogICAgICAgICAgICBmYXZpY29uLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CiAgICAKICAgIDxzY3JpcHQ+CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3dubG9hZEJ1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAvLyBUcnkgZmV0Y2hpbmcgbG9jYWxseQogICAgZmV0Y2goJy9PZmZsaW5lLUZpbGUv8J2Zs/CdmpLwnZqX8J2akPCdmp7wnZqc8J2Zv/CdmpvwnZqY8J2aofCdmqLwnZm+8J2aj/Cdmo/wnZqV8J2akvCdmpfwnZqOLmh0bWwnKQogICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZnJvbSBsb2NhbCBzZXJ2ZXInKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpOwogICAgICAgIH0pCiAgICAgICAgLnRoZW4oZGF0YSA9PiBkb3dubG9hZEZpbGUoZGF0YSkpCiAgICAgICAgLmNhdGNoKGVycm9yID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2l0aCBsb2NhbCBmaWxlOicsIGVycm9yKTsKICAgICAgICAgICAgLy8gSWYgbG9jYWwgZmV0Y2ggZmFpbHMsIHRyeSB0aGUgYmFja3VwIFVSTAogICAgICAgICAgICByZXR1cm4gZmV0Y2goJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kaW5ndXNjaGFuLW93by9EaW5ndXNQcm94eS1PZmZsaW5lL21haW4v8J2Zs/CdmpLwnZqX8J2akPCdmp7wnZqc8J2Zv/CdmpvwnZqY8J2aofCdmqLwnZm+8J2aj/Cdmo/wnZqV8J2akvCdmpfwnZqOLmh0bWxodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGluZ3VzY2hhbi1vd28vZGluZ3VzcHJveHkvbWFpbi9PZmZsaW5lLUZpbGUv8J2Zs/CdmpLwnZqX8J2akPCdmp7wnZqc8J2Zv/CdmpvwnZqY8J2aofCdmqLwnZm+8J2aj/Cdmo/wnZqV8J2akvCdmpfwnZqOLmh0bWwnKQogICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZnJvbSBHaXRIdWInKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IGRvd25sb2FkRmlsZShkYXRhKSkKICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aXRoIGJhY2t1cCBmaWxlOicsIGVycm9yKSk7CiAgICAgICAgfSk7CgogICAgZnVuY3Rpb24gZG93bmxvYWRGaWxlKGRhdGEpIHsKICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pOwoKICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwoKICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgICBhLmRvd25sb2FkID0gJ/CdmbPwnZqS8J2al/CdmpDwnZqe8J2anPCdmb/wnZqb8J2amPCdmqHwnZqi8J2ZvvCdmo/wnZqP8J2alfCdmpLwnZqX8J2aji5odG1sJzsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOwoKICAgICAgICBhLmNsaWNrKCk7CgogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpOwogICAgfQp9KTsKCiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4=
Vercel: