@sprig-technologies/sprig-browser 2.14.8 → 2.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/index.d.ts +30 -7
  2. package/index.js +697 -181
  3. package/package.json +1 -1
  4. package/LICENSE +0 -22
  5. package/controller/controller.d.ts +0 -13
  6. package/controller/controller.d.ts.map +0 -1
  7. package/controller/controller.js +0 -1061
  8. package/controller/encodedViewJs.d.ts +0 -3
  9. package/controller/encodedViewJs.d.ts.map +0 -1
  10. package/controller/encodedViewJs.js +0 -1
  11. package/controller/iframe.d.ts +0 -9
  12. package/controller/iframe.d.ts.map +0 -1
  13. package/controller/iframe.js +0 -184
  14. package/controller/index.js +0 -3
  15. package/controller/queue.d.ts +0 -2
  16. package/controller/queue.d.ts.map +0 -1
  17. package/controller/queue.js +0 -95
  18. package/index.d.ts.map +0 -1
  19. package/shared/conflicting_widgets/index.d.ts +0 -5
  20. package/shared/conflicting_widgets/index.d.ts.map +0 -1
  21. package/shared/conflicting_widgets/index.js +0 -13
  22. package/shared/conflicting_widgets/intercom.d.ts +0 -3
  23. package/shared/conflicting_widgets/intercom.d.ts.map +0 -1
  24. package/shared/conflicting_widgets/intercom.js +0 -28
  25. package/shared/constants.d.ts +0 -49
  26. package/shared/constants.d.ts.map +0 -1
  27. package/shared/constants.js +0 -65
  28. package/shared/deferred.d.ts +0 -10
  29. package/shared/deferred.d.ts.map +0 -1
  30. package/shared/deferred.js +0 -15
  31. package/shared/eventEmitter.d.ts +0 -10
  32. package/shared/eventEmitter.d.ts.map +0 -1
  33. package/shared/eventEmitter.js +0 -52
  34. package/shared/network.d.ts +0 -8
  35. package/shared/network.d.ts.map +0 -1
  36. package/shared/network.js +0 -130
  37. package/shared/networkHelper.d.ts +0 -5
  38. package/shared/networkHelper.d.ts.map +0 -1
  39. package/shared/networkHelper.js +0 -9
  40. package/shared/shouldDirectEmbed.d.ts +0 -7
  41. package/shared/shouldDirectEmbed.d.ts.map +0 -1
  42. package/shared/shouldDirectEmbed.js +0 -8
  43. package/shared/tool.d.ts +0 -3
  44. package/shared/tool.d.ts.map +0 -1
  45. package/shared/tool.js +0 -19
  46. package/shared/ulEvents.d.ts +0 -33
  47. package/shared/ulEvents.d.ts.map +0 -1
  48. package/shared/ulEvents.js +0 -45
@@ -1 +0,0 @@
1
- export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjguanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBtYXJnaW46IGF1dG87XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX2xpbmsge1xuICBmbGV4LWdyb3c6IDU1O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogMzUlO1xufVxuXG4udWwtY2FyZC1tYWluLWNvbnRlbnRfX3dlYiB7XG4gIHBhZGRpbmctdG9wOiAxNXB4O1xufVxuXG4udWwtcXVlc3Rpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxMjUlO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXB0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICM2YzZjNmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jaG9pY2VzIHtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG4gIGZsZXg6IDEgMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uY2hvaWNlLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZSB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG5cbiAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDphY3RpdmUsXG4uY2hvaWNlLS1tb2JpbGU6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5mYWRlLWluLXRyYW5zaXRpb24ge1xuICBhbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tb3otYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW8tYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1zLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1vei1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW8ta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tcy1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0NzA2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxODk4Niksbz1uKDEwNjY5KSxpPW4oNzc4OCksYT1uKDg2NTU4KSxjPW4oNjA2MzIpLHM9big0MjAwNSksdT1uKDc2NDI4KSxsPW4oNzM1MjMpLGY9big2MzU1Myk7KGU9cighMSkpLmkobyksZS5pKGkpLGUuaShhKSxlLmkoYyksZS5pKHMpLGUuaSh1KSxlLmkobCksZS5pKGYpLGUucHVzaChbdC5pZCwiaHRtbCxcbmJvZHkge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG59XG5cbmIge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4jdWwtYXBwIHtcbiAgb3BhY2l0eTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZ3JvdzogMjtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgZmxleC1ncm93OiAxO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIG1heC13aWR0aDogMjUwcHg7XG4gIG1hcmdpbjogMjVweCAwO1xufVxuXG4jdWwtcHJvZ3Jlc3MtYmFyLWN1cnJlbnQge1xuICB3aWR0aDogMHB4O1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHNfX251bWJlcnMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xufVxuXG4ubnBzLW51bWJlci0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5ucHMtbnVtYmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleDogMSAwO1xuXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIGhlaWdodDogNjdweDtcbn1cblxuLm5wcy1udW1iZXI6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0wIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG59XG5cbi5ucHMtbnVtYmVyLTEwIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSwxMDY2OTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKipcbiAqIG1pbmlyZXNldC5jc3NcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qZ3RobXMvbWluaXJlc2V0LmNzc1xuICovXG5cbmh0bWwsXG5ib2R5LFxucCxcbm9sLFxudWwsXG5saSxcbmRsLFxuZHQsXG5kZCxcbmJsb2NrcXVvdGUsXG5maWd1cmUsXG5maWVsZHNldCxcbmxlZ2VuZCxcbnRleHRhcmVhLFxucHJlLFxuaWZyYW1lLFxuaHIsXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxudWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG5idXR0b24sXG5pbnB1dCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgbWFyZ2luOiAwO1xufVxuXG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3NjQyODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIsXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHkge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHkge1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzAuMzUlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICBjb2xvcjogIzM0MzQ0MjtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJvZHk6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIge1xuICBtaW4taGVpZ2h0OiAyZW07XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDYzNTUzOmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi51bC1jYXJkLS12aWRlbyB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbiN1bC1jYXJkLXZvaWNlX192aWRlbyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4udWwtY2FyZC10ZXh0X19idXR0b24udWwtYnV0dG9uLWluYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcbiAgY29sb3I6ICM1ZDY5NmYgIWltcG9ydGFudDtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICB3aWR0aDogLW1vei1hdmFpbGFibGU7IC8qIFdlYktpdC1iYXNlZCBicm93c2VycyB3aWxsIGlnbm9yZSB0aGlzLiAqL1xuICB3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTsgLyogTW96aWxsYS1iYXNlZCBicm93c2VycyB3aWxsIGlnbm9yZSB0aGlzLiAqL1xuICB3aWR0aDogZmlsbC1hdmFpbGFibGU7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDYyNTgyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxuPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspbltlXT10W2VdO3JldHVybiBufX19LDQ0NjIxOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4scixvLGksYSl7dHJ5e3ZhciBjPXRbaV0oYSkscz1jLnZhbHVlfWNhdGNoKHQpe3JldHVybiB2b2lkIG4odCl9Yy5kb25lP2Uocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8saSl7dmFyIGE9dC5hcHBseShuLHIpO2Z1bmN0aW9uIGModCl7ZShhLG8saSxjLHMsIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7ZShhLG8saSxjLHMsInRocm93Iix0KX1jKHZvaWQgMCl9KSl9fX0sMzA1OTM6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9fSw0NDUzOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX10LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLHImJmUodCxyKSx0fX0sNjQxNTc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH19LDY2MDgxOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5leHBvcnRzPWU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dC5leHBvcnRzPWV9LDk0MjY2OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX19LDk0NTY2OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSw5MjgxNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU4Miksbz1uKDk0MjY2KSxpPW4oOTQ1NjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KXx8byh0KXx8aSgpfX0sNzYzOTA6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj90LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OnQuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sZShuKX10LmV4cG9ydHM9ZX0sNDQ2NzQ6ZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDQ2Njc5KX0sOTczNDM6ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87cj1bdCxlXSxuPWZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3ZhciBuLHIsbz0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6KG49W10scj1bXSx7aGFzOmZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk+LTF9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gcltuLmluZGV4T2YodCldfSxzZXQ6ZnVuY3Rpb24odCxlKXstMT09PW4uaW5kZXhPZih0KSYmKG4ucHVzaCh0KSxyLnB1c2goZSkpfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbmRleE9mKHQpO2U+LTEmJihuLnNwbGljZShlLDEpLHIuc3BsaWNlKGUsMSkpfX0pLGk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFdmVudCh0LHtidWJibGVzOiEwfSl9O3RyeXtuZXcgRXZlbnQoInRlc3QiKX1jYXRjaCh0KXtpPWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO3JldHVybiBlLmluaXRFdmVudCh0LCEwLCExKSxlfX1mdW5jdGlvbiBhKHQpe2lmKHQmJnQubm9kZU5hbWUmJiJURVhUQVJFQSI9PT10Lm5vZGVOYW1lJiYhby5oYXModCkpe3ZhciBlPW51bGwsbj1udWxsLHI9bnVsbCxhPWZ1bmN0aW9uKCl7dC5jbGllbnRXaWR0aCE9PW4mJmQoKX0sYz1mdW5jdGlvbihlKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixhLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixkLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixkLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1dG9zaXplOmRlc3Ryb3kiLGMsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6dXBkYXRlIixkLCExKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt0LnN0eWxlW25dPWVbbl19KSksby5kZWxldGUodCl9LmJpbmQodCx7aGVpZ2h0OnQuc3R5bGUuaGVpZ2h0LHJlc2l6ZTp0LnN0eWxlLnJlc2l6ZSxvdmVyZmxvd1k6dC5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnQuc3R5bGUub3ZlcmZsb3dYLHdvcmRXcmFwOnQuc3R5bGUud29yZFdyYXB9KTt0LmFkZEV2ZW50TGlzdGVuZXIoImF1dG9zaXplOmRlc3Ryb3kiLGMsITEpLCJvbnByb3BlcnR5Y2hhbmdlImluIHQmJiJvbmlucHV0ImluIHQmJnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6dXBkYXRlIixkLCExKSx0LnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIix0LnN0eWxlLndvcmRXcmFwPSJicmVhay13b3JkIixvLnNldCh0LHtkZXN0cm95OmMsdXBkYXRlOmR9KSxzKCl9ZnVuY3Rpb24gcygpe3ZhciBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk7InZlcnRpY2FsIj09PW4ucmVzaXplP3Quc3R5bGUucmVzaXplPSJub25lIjoiYm90aCI9PT1uLnJlc2l6ZSYmKHQuc3R5bGUucmVzaXplPSJob3Jpem9udGFsIiksZT0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/LShwYXJzZUZsb2F0KG4ucGFkZGluZ1RvcCkrcGFyc2VGbG9hdChuLnBhZGRpbmdCb3R0b20pKTpwYXJzZUZsb2F0KG4uYm9yZGVyVG9wV2lkdGgpK3BhcnNlRmxvYXQobi5ib3JkZXJCb3R0b21XaWR0aCksaXNOYU4oZSkmJihlPTApLGQoKX1mdW5jdGlvbiB1KGUpe3ZhciBuPXQuc3R5bGUud2lkdGg7dC5zdHlsZS53aWR0aD0iMHB4Iix0Lm9mZnNldFdpZHRoLHQuc3R5bGUud2lkdGg9bix0LnN0eWxlLm92ZXJmbG93WT1lfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdO3QmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlIGluc3RhbmNlb2YgRWxlbWVudDspdC5wYXJlbnROb2RlLnNjcm9sbFRvcCYmZS5wdXNoKHtub2RlOnQucGFyZW50Tm9kZSxzY3JvbGxUb3A6dC5wYXJlbnROb2RlLnNjcm9sbFRvcH0pLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtpZigwIT09dC5zY3JvbGxIZWlnaHQpe3ZhciByPWwodCksbz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7dC5zdHlsZS5oZWlnaHQ9IiIsdC5zdHlsZS5oZWlnaHQ9dC5zY3JvbGxIZWlnaHQrZSsicHgiLG49dC5jbGllbnRXaWR0aCxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZS5zY3JvbGxUb3A9dC5zY3JvbGxUb3B9KSksbyYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A9byl9fWZ1bmN0aW9uIGQoKXtmKCk7dmFyIGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KHQuc3R5bGUuaGVpZ2h0KSksbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdChuLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0O2lmKG88ZT8iaGlkZGVuIj09PW4ub3ZlcmZsb3dZJiYodSgic2Nyb2xsIiksZigpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0KToiaGlkZGVuIiE9PW4ub3ZlcmZsb3dZJiYodSgiaGlkZGVuIiksZigpLG89ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nP01hdGgucm91bmQocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmhlaWdodCkpOnQub2Zmc2V0SGVpZ2h0KSxyIT09byl7cj1vO3ZhciBhPWkoImF1dG9zaXplOnJlc2l6ZWQiKTt0cnl7dC5kaXNwYXRjaEV2ZW50KGEpfWNhdGNoKHQpe319fX1mdW5jdGlvbiBjKHQpe3ZhciBlPW8uZ2V0KHQpO2UmJmUuZGVzdHJveSgpfWZ1bmN0aW9uIHModCl7dmFyIGU9by5nZXQodCk7ZSYmZS51cGRhdGUoKX12YXIgdT1udWxsOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwiZnVuY3Rpb24iIT10eXBlb2Ygd2luZG93LmdldENvbXB1dGVkU3R5bGU/KCh1PWZ1bmN0aW9uKHQpe3JldHVybiB0fSkuZGVzdHJveT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KTooKHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSwoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSx0fSkuZGVzdHJveT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSxjKSx0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0Lmxlbmd0aD90Olt0XSxzKSx0fSksZS5kZWZhdWx0PXUsdC5leHBvcnRzPWUuZGVmYXVsdH0sdm9pZCAwPT09KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLHIpOm4pfHwodC5leHBvcnRzPW8pfSw0MDA0NjpmdW5jdGlvbih0LGUsbil7big2NTY3OSksbig1MTA5MCksbigyNDc4NSksbig4OTE3KSxuKDU0Nzg2KSxuKDEyODE2KSxuKDYxOTI0KSxuKDk4MzA2KSxuKDEyMDI1KSxuKDI4MzMpLG4oOTY0NTMpLG4oNzA4NjMpLG4oMjQ4MDIpLG4oMTgyNzMpLG4oNDI0MTEpLG4oMzc0ODEpLG4oNDU1NTApLG4oNTgxNjUpLG4oNTExNzMpLG4oODc0Myksbig3NTgwNCksbig0NjE0NiksbigxNTA3Nyksbig1ODMyOSksbig2MDUyNSksbig3NDk1Myksbig1NDc4MSksbig1MTY2KSxuKDg5NzU4KSxuKDE4Mzc4KSxuKDkyNTIpLG4oOTMyNzIpLG4oNTYxNTgpLG4oNDE0NTYpLG4oNzI4NTEpLG4oMzQ1MjkpLG4oMTkyNzgpLG4oOTEyMDkpLG4oNzI1NjApLG4oMTA2Myksbig5NjQ5OCksbigyMjQ0Miksbig3NTg5NCksbig3MTYyMiksbig3NDUzOCksbigyMTI3KSxuKDY5OTg4KSxuKDU3Mzg3KSxuKDMwODE3KSxuKDUyMDU1KSxuKDczMzYwKSxuKDQ3NTAyKSxuKDMzMTk1KSxuKDkwOTEyKSxuKDI4MjAzKSxuKDc5MjI3KSxuKDQzNTkxKSxuKDIyMjc3KSxuKDI0MTI5KSxuKDc0MTIwKSxuKDk0OTYzKSxuKDI3Mzg4KSxuKDgwNTIyKSxuKDQ1NTI4KSxuKDgwMTE2KSxuKDI5MTEwKSxuKDg1NTk0KSxuKDY3ODEyKSxuKDMzNzkyKSxuKDg2MjE0KSxuKDcwMTQ2KSxuKDcxODQ2KSxuKDUwMDYzKSxuKDEwNzQzKSxuKDgwNTExKSxuKDE1MzczKSxuKDk3Njg4KSxuKDc0NTYzKSxuKDY1MDAzKSxuKDgxMjc3KSxuKDQ0MDE5KSxuKDM4MiksbigxODgyMyksbigzMzMyMiksbigzMzA2NSksbigxNzQ5NCksbig4MDM2Myksbig0MzM5Niksbig2OTE4OCksbig3NDc5NSksbig4MjIwMSksbig0MTc3MyksbigzMDQwMiksbigxODE3NSksbig2Njg5Niksbig4NTc2Nyksbig4NDM2KSxuKDkyMTkyKSxuKDEyMTU1KSxuKDI2MDE2KSxuKDc0MTE3KSxuKDI4MDAzKSxuKDY3OTQxKSxuKDQ0MDUxKSxuKDQ5NDk1KSxuKDg3MjA5KSxuKDE4Mjc2KSxuKDM3NTQpLG4oMzM0MzcpLG4oMTk0MzMpLG4oNzE4MjcpLG4oMjYwNjMpLG4oOTY3KSxuKDMzMTAwKSxuKDQxOTI4KSxuKDE1ODY5KSxuKDg4NzE1KSxuKDM2OTk1KSxuKDExMjI0KSxuKDYzNzY1KSxuKDEzMDY0KSxuKDMyMjkzKSxuKDIxMDMyKSxuKDM3OTM2KSxuKDkzOTk1KSxuKDEzMzkzKSxuKDExMjgxKSxuKDM4MDM2KSxuKDExMzgpLG4oNDYwNzgpLG4oMzAwODMpLG4oNDczODMpLG4oNzE1NTgpLG4oOTkyMTgpLG4oOTg5NzgpLG4oODA2OSksbig3MDIwNCksbig4NTc1OCksbigxMTc3MyksbigxNTc2Myksbig0MTYzMiksbigzNjIzMyksbig0MDA0NSksbigyMTM3Niksbig4NDA3KSxuKDE2NTApLG4oODExMDQpLG4oMTE2ODgpLG4oMTc2MjkpLG4oNDI0OTApLG4oOTQ5MDYpLG4oNzQwNjEpLG4oNTg2MDYpLG4oNDUxNTcpLG4oNjEyNDUpLG4oMjkyNzMpLG4oOTA1NjApLG4oNDUxNTQpLG4oNzAzNzMpLG4oODA3NTcpLG4oNjk4NzkpLG4oMjQ0OTgpLG4oMTY5NzgpLG4oMTcxNTIpLG4oMzc5ODcpLG4oMjY4MCksbigzODI4MCksbigxODU1OSksbig1MDQ4Miksbig3NDIzMCksbigxODUwNiksbigyMDI0MiksbigyODE1NSksbigzMzkwMSksbig3NjQ0Miksbig4ODYzNiksbig4MTQ2Myksbig5NTE2Myksbig4MzY3MyksbigyMzU2OCksbigyNzI5NCksbigyNDQ1NyksbigzOTMyKSxuKDc1NDk5KSxuKDg3NTY0KSxuKDg0NTApLG4oMTc2MDUpLG4oNzM1NjIpLG4oMTE4NzgpLG4oNjA5MjkpLG4oNDM5NTEpLG4oOTEzNDcpLG4oMjkyODQpLG4oNjE5NDMpLG4oMjY5ODYpLG4oMTM2Niksbig4MzMxMCksbig0NjU5Nyksbig3MDEzNiksbig2MDg2NSksbig2NzcwOCksbig5NjYzOCksbigzOTczMCksbig3NDExNSksbig4NTY4Nik7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDYwNDkxOmZ1bmN0aW9uKHQsZSxuKXtuKDQwMDQ2KSxuKDE1NjI0KSxuKDkyNDA0KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sODY0NzA6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiB0fX0sNzk4NjE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBzZXQgIitTdHJpbmcodCkrIiBhcyBhIHByb3RvdHlwZSIpO3JldHVybiB0fX0sNzY1MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpLG89big1MDg2OCksaT1uKDY2OTcxKSxhPXIoInVuc2NvcGFibGVzIiksYz1BcnJheS5wcm90b3R5cGU7bnVsbD09Y1thXSYmaShjLGEsbyhudWxsKSksdC5leHBvcnRzPWZ1bmN0aW9uKHQpe2NbYV1bdF09ITB9fSw1MzE0MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlKyhuP3IodCxlKS5sZW5ndGg6MSl9fSw1OTM3OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0ICIrKG4/bisiICI6IiIpKyJpbnZvY2F0aW9uIik7cmV0dXJuIHR9fSw4NzU3OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIHR9fSw3MzA3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89big2MjU1NiksaT1uKDg5NTU4KSxhPW4oMTA1OTIpLGM9big3NjI5OCkscz1uKDU5NTkxKSx1PW4oNjY5NzEpLGw9big5MjkxMyksZj1uKDM3NjIwKS5mLGQ9big2NDk2NSkscD1uKDcxODQyKSxoPW4oMjM3MjQpLHY9big2NzI5KSxnPWkuRGF0YVZpZXcseT1nJiZnLnByb3RvdHlwZSxtPWkuSW50OEFycmF5LGI9bSYmbS5wcm90b3R5cGUseD1pLlVpbnQ4Q2xhbXBlZEFycmF5LHc9eCYmeC5wcm90b3R5cGUsRT1tJiZkKG0pLGo9YiYmZChiKSxDPU9iamVjdC5wcm90b3R5cGUsaz1DLmlzUHJvdG90eXBlT2YsUz1oKCJ0b1N0cmluZ1RhZyIpLE89digiVFlQRURfQVJSQVlfVEFHIiksQT0hKCFpLkFycmF5QnVmZmVyfHwhZyksST1BJiYhIXAmJiJPcGVyYSIhPT1zKGkub3BlcmEpLE09ITEsVD17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LF89ZnVuY3Rpb24odCl7cmV0dXJuIGEodCkmJmMoVCxzKHQpKX07Zm9yKHIgaW4gVClpW3JdfHwoST0hMSk7aWYoKCFJfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8RT09PUZ1bmN0aW9uLnByb3RvdHlwZSkmJihFPWZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxJKSlmb3IociBpbiBUKWlbcl0mJnAoaVtyXSxFKTtpZigoIUl8fCFqfHxqPT09QykmJihqPUUucHJvdG90eXBlLEkpKWZvcihyIGluIFQpaVtyXSYmcChpW3JdLnByb3RvdHlwZSxqKTtpZihJJiZkKHcpIT09aiYmcCh3LGopLG8mJiFjKGosUykpZm9yKHIgaW4gTT0hMCxmKGosUyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyk/dGhpc1tPXTp2b2lkIDB9fSksVClpW3JdJiZ1KGlbcl0sTyxyKTtBJiZwJiZkKHkpIT09QyYmcCh5LEMpLHQuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUjpBLE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6SSxUWVBFRF9BUlJBWV9UQUc6TSYmTyxhVHlwZWRBcnJheTpmdW5jdGlvbih0KXtpZihfKHQpKXJldHVybiB0O3Rocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYocCl7aWYoay5jYWxsKEUsdCkpcmV0dXJuIHR9ZWxzZSBmb3IodmFyIGUgaW4gVClpZihjKFQscikpe3ZhciBuPWlbZV07aWYobiYmKHQ9PT1ufHxrLmNhbGwobix0KSkpcmV0dXJuIHR9dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbih0LGUsbil7aWYobyl7aWYobilmb3IodmFyIHIgaW4gVCl7dmFyIGE9aVtyXTthJiZjKGEucHJvdG90eXBlLHQpJiZkZWxldGUgYS5wcm90b3R5cGVbdF19alt0XSYmIW58fGwoaix0LG4/ZTpJJiZiW3RdfHxlKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGE7aWYobyl7aWYocCl7aWYobilmb3IociBpbiBUKShhPWlbcl0pJiZjKGEsdCkmJmRlbGV0ZSBhW3RdO2lmKEVbdF0mJiFuKXJldHVybjt0cnl7cmV0dXJuIGwoRSx0LG4/ZTpJJiZtW3RdfHxlKX1jYXRjaCh0KXt9fWZvcihyIGluIFQpIShhPWlbcl0pfHxhW3RdJiYhbnx8bChhLHQsZSl9fSxpc1ZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8YyhULGUpfSxpc1R5cGVkQXJyYXk6XyxUeXBlZEFycmF5OkUsVHlwZWRBcnJheVByb3RvdHlwZTpqfX0sODI4MzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNjI1NTYpLGk9big3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUixhPW4oNjY5NzEpLGM9bigxOTI2KSxzPW4oMzIxODcpLHU9big1OTM3OSksbD1uKDQzNDE2KSxmPW4oMjc4ODQpLGQ9big4MzkxNCkscD1uKDkwNzI1KSxoPW4oMTMzMzQpLmYsdj1uKDM3NjIwKS5mLGc9big2NTg5NSkseT1uKDUxMTI4KSxtPW4oODk4MjcpLGI9bS5nZXQseD1tLnNldCx3PSJBcnJheUJ1ZmZlciIsRT0iRGF0YVZpZXciLGo9Ildyb25nIGluZGV4IixDPXIuQXJyYXlCdWZmZXIsaz1DLFM9ci5EYXRhVmlldyxPPXIuUmFuZ2VFcnJvcixBPXAucGFjayxJPXAudW5wYWNrLE09ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0XX0sVD1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfSxfPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NSx0Pj4xNiYyNTUsdD4+MjQmMjU1XX0sTD1mdW5jdGlvbih0KXtyZXR1cm4gdFszXTw8MjR8dFsyXTw8MTZ8dFsxXTw8OHx0WzBdfSxSPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsMjMsNCl9LFA9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCw1Miw4KX0sTj1mdW5jdGlvbih0LGUpe3YodC5wcm90b3R5cGUsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcylbZV19fSl9LEQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89ZChuKSxpPWIodCk7aWYobytlPmkuYnl0ZUxlbmd0aCl0aHJvdyBPKGopO3ZhciBhPWIoaS5idWZmZXIpLmJ5dGVzLGM9bytpLmJ5dGVPZmZzZXQscz1hLnNsaWNlKGMsYytlKTtyZXR1cm4gcj9zOnMucmV2ZXJzZSgpfSxGPWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT1kKG4pLGM9Yih0KTtpZihhK2U+Yy5ieXRlTGVuZ3RoKXRocm93IE8oaik7Zm9yKHZhciBzPWIoYy5idWZmZXIpLmJ5dGVzLHU9YStjLmJ5dGVPZmZzZXQsbD1yKCtvKSxmPTA7ZjxlO2YrKylzW3UrZl09bFtpP2Y6ZS1mLTFdfTtpZihpKXtpZighcygoZnVuY3Rpb24oKXtDKDEpfSkpfHwhcygoZnVuY3Rpb24oKXtuZXcgQygtMSl9KSl8fHMoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDLG5ldyBDKDEuNSksbmV3IEMoTmFOKSxDLm5hbWUhPXd9KSkpe2Zvcih2YXIgVSxCPShrPWZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsayksbmV3IEMoZCh0KSl9KS5wcm90b3R5cGU9Qy5wcm90b3R5cGUsej1oKEMpLEg9MDt6Lmxlbmd0aD5IOykoVT16W0grK10paW4ga3x8YShrLFUsQ1tVXSk7Qi5jb25zdHJ1Y3Rvcj1rfXZhciBWPW5ldyBTKG5ldyBrKDIpKSxxPVMucHJvdG90eXBlLnNldEludDg7Vi5zZXRJbnQ4KDAsMjE0NzQ4MzY0OCksVi5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIVYuZ2V0SW50OCgwKSYmVi5nZXRJbnQ4KDEpfHxjKFMucHJvdG90eXBlLHtzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe3EuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX19LHt1bnNhZmU6ITB9KX1lbHNlIGs9ZnVuY3Rpb24odCl7dSh0aGlzLGssdyk7dmFyIGU9ZCh0KTt4KHRoaXMse2J5dGVzOmcuY2FsbChuZXcgQXJyYXkoZSksMCksYnl0ZUxlbmd0aDplfSksb3x8KHRoaXMuYnl0ZUxlbmd0aD1lKX0sUz1mdW5jdGlvbih0LGUsbil7dSh0aGlzLFMsRSksdSh0LGssRSk7dmFyIHI9Yih0KS5ieXRlTGVuZ3RoLGk9bChlKTtpZihpPDB8fGk+cil0aHJvdyBPKCJXcm9uZyBvZmZzZXQiKTtpZihpKyhuPXZvaWQgMD09PW4/ci1pOmYobikpPnIpdGhyb3cgTygiV3JvbmcgbGVuZ3RoIik7eCh0aGlzLHtidWZmZXI6dCxieXRlTGVuZ3RoOm4sYnl0ZU9mZnNldDppfSksb3x8KHRoaXMuYnVmZmVyPXQsdGhpcy5ieXRlTGVuZ3RoPW4sdGhpcy5ieXRlT2Zmc2V0PWkpfSxvJiYoTihrLCJieXRlTGVuZ3RoIiksTihTLCJidWZmZXIiKSxOKFMsImJ5dGVMZW5ndGgiKSxOKFMsImJ5dGVPZmZzZXQiKSksYyhTLnByb3RvdHlwZSx7Z2V0SW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24odCl7cmV0dXJuIEQodGhpcywxLHQpWzBdfSxnZXRJbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4oZVsxXTw8OHxlWzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9RCh0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIGVbMV08PDh8ZVswXX0sZ2V0SW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEwoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpfSxnZXRVaW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEwoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbih0KXtyZXR1cm4gSShEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIEkoRCh0aGlzLDgsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksNTIpfSxzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe0YodGhpcywxLHQsTSxlKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMix0LFQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0SW50MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LF8sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsUixlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQ2NDpmdW5jdGlvbih0LGUpe0YodGhpcyw4LHQsUCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTt5KGssdykseShTLEUpLHQuZXhwb3J0cz17QXJyYXlCdWZmZXI6ayxEYXRhVmlldzpTfX0sOTk0MzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjA5KSxvPW4oNzY5NzYpLGk9bigyNzg4NCksYT1NYXRoLm1pbjt0LmV4cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHRoaXMpLGM9aShuLmxlbmd0aCkscz1vKHQsYyksdT1vKGUsYyksbD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxmPWEoKHZvaWQgMD09PWw/YzpvKGwsYykpLXUsYy1zKSxkPTE7Zm9yKHU8cyYmczx1K2YmJihkPS0xLHUrPWYtMSxzKz1mLTEpO2YtLSA+MDspdSBpbiBuP25bc109blt1XTpkZWxldGUgbltzXSxzKz1kLHUrPWQ7cmV0dXJuIG59fSw2NTg5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXIodGhpcyksbj1pKGUubGVuZ3RoKSxhPWFyZ3VtZW50cy5sZW5ndGgsYz1vKGE+MT9hcmd1bWVudHNbMV06dm9pZCAwLG4pLHM9YT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1zP246byhzLG4pO3U+YzspZVtjKytdPXQ7cmV0dXJuIGV9fSwzMTM2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzAwMjUpLmZvckVhY2gsbz1uKDIyOTA5KTt0LmV4cG9ydHM9bygiZm9yRWFjaCIpP2Z1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9OltdLmZvckVhY2h9LDg1MTY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NjEzMCksbz1uKDE5MjA5KSxpPW4oMTIyNzgpLGE9big0NDk4NCksYz1uKDI3ODg0KSxzPW4oNTg4MTApLHU9big3Mzg5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sbCxmLGQscD1vKHQpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSx2PWFyZ3VtZW50cy5sZW5ndGgsZz12PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx5PXZvaWQgMCE9PWcsbT0wLGI9dShwKTtpZih5JiYoZz1yKGcsdj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLG51bGw9PWJ8fGg9PUFycmF5JiZhKGIpKWZvcihuPW5ldyBoKGU9YyhwLmxlbmd0aCkpO2U+bTttKyspcyhuLG0seT9nKHBbbV0sbSk6cFttXSk7ZWxzZSBmb3IoZD0oZj1iLmNhbGwocCkpLm5leHQsbj1uZXcgaDshKGw9ZC5jYWxsKGYpKS5kb25lO20rKylzKG4sbSx5P2koZixnLFtsLnZhbHVlLG1dLCEwKTpsLnZhbHVlKTtyZXR1cm4gbi5sZW5ndGg9bSxufX0sODU4MDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTU3Myksbz1uKDI3ODg0KSxpPW4oNzY5NzYpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixhKXt2YXIgYyxzPXIoZSksdT1vKHMubGVuZ3RoKSxsPWkoYSx1KTtpZih0JiZuIT1uKXtmb3IoO3U+bDspaWYoKGM9c1tsKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7dT5sO2wrKylpZigodHx8bCBpbiBzKSYmc1tsXT09PW4pcmV0dXJuIHR8fGx8fDA7cmV0dXJuIXQmJi0xfX07dC5leHBvcnRzPXtpbmNsdWRlczphKCEwKSxpbmRleE9mOmEoITEpfX0sMzAwMjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDYxMzApLG89bigyNDk4KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDcwMDkpLHM9W10ucHVzaCx1PWZ1bmN0aW9uKHQpe3ZhciBlPTE9PXQsbj0yPT10LHU9Mz09dCxsPTQ9PXQsZj02PT10LGQ9NT09dHx8ZjtyZXR1cm4gZnVuY3Rpb24ocCxoLHYsZyl7Zm9yKHZhciB5LG0sYj1pKHApLHg9byhiKSx3PXIoaCx2LDMpLEU9YSh4Lmxlbmd0aCksaj0wLEM9Z3x8YyxrPWU/QyhwLEUpOm4/QyhwLDApOnZvaWQgMDtFPmo7aisrKWlmKChkfHxqIGluIHgpJiYobT13KHk9eFtqXSxqLGIpLHQpKWlmKGUpa1tqXT1tO2Vsc2UgaWYobSlzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIGo7Y2FzZSAyOnMuY2FsbChrLHkpfWVsc2UgaWYobClyZXR1cm4hMTtyZXR1cm4gZj8tMTp1fHxsP2w6a319O3QuZXhwb3J0cz17Zm9yRWFjaDp1KDApLG1hcDp1KDEpLGZpbHRlcjp1KDIpLHNvbWU6dSgzKSxldmVyeTp1KDQpLGZpbmQ6dSg1KSxmaW5kSW5kZXg6dSg2KX19LDQ5MjQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5NTczKSxvPW4oNDM0MTYpLGk9bigyNzg4NCksYT1uKDIyOTA5KSxjPU1hdGgubWluLHM9W10ubGFzdEluZGV4T2YsdT0hIXMmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDAsbD1hKCJsYXN0SW5kZXhPZiIpO3QuZXhwb3J0cz11fHxsP2Z1bmN0aW9uKHQpe2lmKHUpcmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBlPXIodGhpcyksbj1pKGUubGVuZ3RoKSxhPW4tMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoYT1jKGEsbyhhcmd1bWVudHNbMV0pKSksYTwwJiYoYT1uK2EpO2E+PTA7YS0tKWlmKGEgaW4gZSYmZVthXT09PXQpcmV0dXJuIGF8fDA7cmV0dXJuLTF9OnN9LDYxOTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big3OTA3MSksYT1vKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpPj01MXx8IXIoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW2FdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWVbdF0oQm9vbGVhbikuZm9vfSkpfX0sMTIzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODY0NzApLG89bigxOTIwOSksaT1uKDI0OTgpLGE9bigyNzg4NCksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMscyl7cihuKTt2YXIgdT1vKGUpLGw9aSh1KSxmPWEodS5sZW5ndGgpLGQ9dD9mLTE6MCxwPXQ/LTE6MTtpZihjPDIpZm9yKDs7KXtpZihkIGluIGwpe3M9bFtkXSxkKz1wO2JyZWFrfWlmKGQrPXAsdD9kPDA6Zjw9ZCl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3Q/ZD49MDpmPmQ7ZCs9cClkIGluIGwmJihzPW4ocyxsW2RdLGQsdSkpO3JldHVybiBzfX07dC5leHBvcnRzPXtsZWZ0OmMoITEpLHJpZ2h0OmMoITApfX0sNzAwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDYxOTkpLGk9bigyMzcyNCkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbyh0KSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPXQuY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKT9yKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCk6bj12b2lkIDApLG5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKDA9PT1lPzA6ZSl9fSw0NTY2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89big4NzU3OSksaT1uKDc3MDEpKCJQcm9taXNlIiksYT1bXS5wdXNoLGM9ZnVuY3Rpb24odCl7dmFyIGU9MD09dCxuPTE9PXQsYz0yPT10LHM9Mz09dDtyZXR1cm4gZnVuY3Rpb24odCx1KXtvKHQpO3ZhciBsPXIodC5uZXh0KSxmPWU/W106dm9pZCAwO3JldHVybiBlfHxyKHUpLG5ldyBpKChmdW5jdGlvbihyLGQpe3ZhciBwPWZ1bmN0aW9uKCl7dHJ5e2kucmVzb2x2ZShvKGwuY2FsbCh0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihvKHQpLmRvbmUpcihlP2Y6IXMmJihjfHx2b2lkIDApKTtlbHNle3ZhciBsPXQudmFsdWU7ZT8oYS5jYWxsKGYsbCkscCgpKTppLnJlc29sdmUodShsKSkudGhlbigoZnVuY3Rpb24odCl7bj9wKCk6Yz90P3AoKTpyKCExKTp0P3Ioc3x8bCk6cCgpfSksZCl9fWNhdGNoKHQpe2QodCl9fSksZCl9Y2F0Y2godCl7ZCh0KX19O3AoKX0pKX19O3QuZXhwb3J0cz17dG9BcnJheTpjKDApLGZvckVhY2g6YygxKSxldmVyeTpjKDIpLHNvbWU6YygzKSxmaW5kOmMoNCl9fSw2Mzg0NTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzNDc0MSksYz1uKDY0OTY1KSxzPW4oNzYyOTgpLHU9big2Njk3MSksbD1uKDIzNzI0KSxmPW4oNjU2NzIpLGQ9bCgiYXN5bmNJdGVyYXRvciIpLHA9aS5Bc3luY0l0ZXJhdG9yLGg9YS5Bc3luY0l0ZXJhdG9yUHJvdG90eXBlO2lmKCFmKWlmKGgpcj1oO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHApcj1wLnByb3RvdHlwZTtlbHNlIGlmKGEuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SfHxpLlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUil0cnl7bz1jKGMoYyhGdW5jdGlvbigicmV0dXJuIGFzeW5jIGZ1bmN0aW9uKigpe30oKSIpKCkpKSksYyhvKT09PU9iamVjdC5wcm90b3R5cGUmJihyPW8pfWNhdGNoKHQpe31yfHwocj17fSkscyhyLGQpfHx1KHIsZCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9cn0sNDYxMzA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYocih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuY2FsbChlKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5jYWxsKGUsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gdC5jYWxsKGUsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsbyl7cmV0dXJuIHQuY2FsbChlLG4scixvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX19LDEyMjc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyl7dHJ5e3JldHVybiBvP2UocihuKVswXSxuWzFdKTplKG4pfWNhdGNoKGUpe3ZhciBpPXQucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJnIoaS5jYWxsKHQpKSxlfX19LDQ3OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBpPTAsYT17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhaSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7bz0hMH19O2Fbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShhLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2godCl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFlJiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9e307aVtyXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sdChpKX1jYXRjaCh0KXt9cmV0dXJuIG59fSwyNDU5NDpmdW5jdGlvbih0KXt2YXIgZT17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0KS5zbGljZSg4LC0xKX19LDU5NTkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oMjQ1OTQpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIiksYT0iQXJndW1lbnRzIj09byhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7dmFyIGUsbixyO3JldHVybiB2b2lkIDA9PT10PyJVbmRlZmluZWQiOm51bGw9PT10PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHRbZV19Y2F0Y2godCl7fX0oZT1PYmplY3QodCksaSkpP246YT9vKGUpOiJPYmplY3QiPT0ocj1vKGUpKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsbGVlPyJBcmd1bWVudHMiOnJ9fSw5ODE3OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIodGhpcyksZT1vKHQuYWRkKSxuPTAsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspZS5jYWxsKHQsYXJndW1lbnRzW25dKTtyZXR1cm4gdH19LDE0NjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXIodGhpcyksbj1vKGUuZGVsZXRlKSxpPSEwLGE9MCxjPWFyZ3VtZW50cy5sZW5ndGg7YTxjO2ErKyl0PW4uY2FsbChlLGFyZ3VtZW50c1thXSksaT1pJiZ0O3JldHVybiEhaX19LDEyOTAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDQ2MTMwKSxpPW4oNDEzMzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLGEsYyxzPWFyZ3VtZW50cy5sZW5ndGgsdT1zPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gcih0aGlzKSwoZT12b2lkIDAhPT11KSYmcih1KSxudWxsPT10P25ldyB0aGlzOihuPVtdLGU/KGE9MCxjPW8odSxzPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSxpKHQsKGZ1bmN0aW9uKHQpe24ucHVzaChjKHQsYSsrKSl9KSkpOmkodCxuLnB1c2gsbiksbmV3IHRoaXMobikpfX0sMjUwMjY6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG5ldyB0aGlzKGUpfX0sNjQ1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzc2MjApLmYsbz1uKDUwODY4KSxpPW4oMTkyNiksYT1uKDQ2MTMwKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDQ2MDYxKSxsPW4oNjc1MzgpLGY9big2MjU1NiksZD1uKDk2MDMpLmZhc3RLZXkscD1uKDg5ODI3KSxoPXAuc2V0LHY9cC5nZXR0ZXJGb3I7dC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgbD10KChmdW5jdGlvbih0LHIpe2ModCxsLGUpLGgodCx7dHlwZTplLGluZGV4Om8obnVsbCksZmlyc3Q6dm9pZCAwLGxhc3Q6dm9pZCAwLHNpemU6MH0pLGZ8fCh0LnNpemU9MCksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxwPXYoZSksZz1mdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPXAodCksYT15KHQsZSk7cmV0dXJuIGE/YS52YWx1ZT1uOihpLmxhc3Q9YT17aW5kZXg6bz1kKGUsITApLGtleTplLHZhbHVlOm4scHJldmlvdXM6cj1pLmxhc3QsbmV4dDp2b2lkIDAscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9YSksciYmKHIubmV4dD1hKSxmP2kuc2l6ZSsrOnQuc2l6ZSsrLCJGIiE9PW8mJihpLmluZGV4W29dPWEpKSx0fSx5PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1wKHQpLG89ZChlKTtpZigiRiIhPT1vKXJldHVybiByLmluZGV4W29dO2ZvcihuPXIuZmlyc3Q7bjtuPW4ubmV4dClpZihuLmtleT09ZSlyZXR1cm4gbn07cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXAodGhpcyksZT10LmluZGV4LG49dC5maXJzdDtuOyluLnJlbW92ZWQ9ITAsbi5wcmV2aW91cyYmKG4ucHJldmlvdXM9bi5wcmV2aW91cy5uZXh0PXZvaWQgMCksZGVsZXRlIGVbbi5pbmRleF0sbj1uLm5leHQ7dC5maXJzdD10Lmxhc3Q9dm9pZCAwLGY/dC5zaXplPTA6dGhpcy5zaXplPTB9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cChlKSxyPXkoZSx0KTtpZihyKXt2YXIgbz1yLm5leHQsaT1yLnByZXZpb3VzO2RlbGV0ZSBuLmluZGV4W3IuaW5kZXhdLHIucmVtb3ZlZD0hMCxpJiYoaS5uZXh0PW8pLG8mJihvLnByZXZpb3VzPWkpLG4uZmlyc3Q9PXImJihuLmZpcnN0PW8pLG4ubGFzdD09ciYmKG4ubGFzdD1pKSxmP24uc2l6ZS0tOmUuc2l6ZS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1wKHRoaXMpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO2U9ZT9lLm5leHQ6bi5maXJzdDspZm9yKHIoZS52YWx1ZSxlLmtleSx0aGlzKTtlJiZlLnJlbW92ZWQ7KWU9ZS5wcmV2aW91c30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEheSh0aGlzLHQpfX0pLGkobC5wcm90b3R5cGUsbj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXkodGhpcyx0KTtyZXR1cm4gZSYmZS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcodGhpcywwPT09dD8wOnQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBnKHRoaXMsdD0wPT09dD8wOnQsdCl9fSksZiYmcihsLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLnNpemV9fSksbH0sc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lKyIgSXRlcmF0b3IiLG89dihlKSxpPXYocik7dSh0LGUsKGZ1bmN0aW9uKHQsZSl7aCh0aGlzLHt0eXBlOnIsdGFyZ2V0OnQsc3RhdGU6byh0KSxraW5kOmUsbGFzdDp2b2lkIDB9KX0pLChmdW5jdGlvbigpe2Zvcih2YXIgdD1pKHRoaXMpLGU9dC5raW5kLG49dC5sYXN0O24mJm4ucmVtb3ZlZDspbj1uLnByZXZpb3VzO3JldHVybiB0LnRhcmdldCYmKHQubGFzdD1uPW4/bi5uZXh0OnQuc3RhdGUuZmlyc3QpPyJrZXlzIj09ZT97dmFsdWU6bi5rZXksZG9uZTohMX06InZhbHVlcyI9PWU/e3ZhbHVlOm4udmFsdWUsZG9uZTohMX06e3ZhbHVlOltuLmtleSxuLnZhbHVlXSxkb25lOiExfToodC50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSksbj8iZW50cmllcyI6InZhbHVlcyIsIW4sITApLGwoZSl9fX0sNzEzMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjYpLG89big5NjAzKS5nZXRXZWFrRGF0YSxpPW4oODc1NzkpLGE9bigxMDU5MiksYz1uKDU5Mzc5KSxzPW4oNDEzMzQpLHU9bigzMDAyNSksbD1uKDc2Mjk4KSxmPW4oODk4MjcpLGQ9Zi5zZXQscD1mLmdldHRlckZvcixoPXUuZmluZCx2PXUuZmluZEluZGV4LGc9MCx5PWZ1bmN0aW9uKHQpe3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBtKX0sbT1mdW5jdGlvbigpe3RoaXMuZW50cmllcz1bXX0sYj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHQuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpfTttLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWIodGhpcyx0KTtpZihlKXJldHVybiBlWzFdfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISFiKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe3ZhciBuPWIodGhpcyx0KTtuP25bMV09ZTp0aGlzLmVudHJpZXMucHVzaChbdCxlXSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT12KHRoaXMuZW50cmllcywoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpO3JldHVybn5lJiZ0aGlzLmVudHJpZXMuc3BsaWNlKGUsMSksISF+ZX19LHQuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLG4sdSl7dmFyIGY9dCgoZnVuY3Rpb24odCxyKXtjKHQsZixlKSxkKHQse3R5cGU6ZSxpZDpnKyssZnJvemVuOnZvaWQgMH0pLG51bGwhPXImJnMocix0W3VdLHQsbil9KSksaD1wKGUpLHY9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWgodCksYT1vKGkoZSksITApO3JldHVybiEwPT09YT95KHIpLnNldChlLG4pOmFbci5pZF09bix0fTtyZXR1cm4gcihmLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoIWEodCkpcmV0dXJuITE7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5kZWxldGUodCk6biYmbChuLGUuaWQpJiZkZWxldGUgbltlLmlkXX0saGFzOmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoIWEodCkpcmV0dXJuITE7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5oYXModCk6biYmbChuLGUuaWQpfX0pLHIoZi5wcm90b3R5cGUsbj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWgodGhpcyk7aWYoYSh0KSl7dmFyIG49byh0KTtyZXR1cm4hMD09PW4/eShlKS5nZXQodCk6bj9uW2UuaWRdOnZvaWQgMH19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB2KHRoaXMsdCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHYodGhpcyx0LCEwKX19KSxmfX19LDgxOTUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9big5MjkxMyksYz1uKDk2MDMpLHM9big0MTMzNCksdT1uKDU5Mzc5KSxsPW4oMTA1OTIpLGY9bigzMjE4NyksZD1uKDQ3OTYpLHA9big1MTEyOCksaD1uKDMwMjcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB2PS0xIT09dC5pbmRleE9mKCJNYXAiKSxnPS0xIT09dC5pbmRleE9mKCJXZWFrIikseT12PyJzZXQiOiJhZGQiLG09b1t0XSxiPW0mJm0ucHJvdG90eXBlLHg9bSx3PXt9LEU9ZnVuY3Rpb24odCl7dmFyIGU9Ylt0XTthKGIsdCwiYWRkIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0KSx0aGlzfToiZGVsZXRlIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGcmJiFsKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImdldCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGcmJiFsKHQpP3ZvaWQgMDplLmNhbGwodGhpcywwPT09dD8wOnQpfToiaGFzIj09dD9mdW5jdGlvbih0KXtyZXR1cm4hKGcmJiFsKHQpKSYmZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0LG4pLHRoaXN9KX07aWYoaSh0LCJmdW5jdGlvbiIhPXR5cGVvZiBtfHwhKGd8fGIuZm9yRWFjaCYmIWYoKGZ1bmN0aW9uKCl7KG5ldyBtKS5lbnRyaWVzKCkubmV4dCgpfSkpKSkpeD1uLmdldENvbnN0cnVjdG9yKGUsdCx2LHkpLGMuUkVRVUlSRUQ9ITA7ZWxzZSBpZihpKHQsITApKXt2YXIgaj1uZXcgeCxDPWpbeV0oZz97fTotMCwxKSE9aixrPWYoKGZ1bmN0aW9uKCl7ai5oYXMoMSl9KSksUz1kKChmdW5jdGlvbih0KXtuZXcgbSh0KX0pKSxPPSFnJiZmKChmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgbSxlPTU7ZS0tOyl0W3ldKGUsZSk7cmV0dXJuIXQuaGFzKC0wKX0pKTtTfHwoKHg9ZSgoZnVuY3Rpb24oZSxuKXt1KGUseCx0KTt2YXIgcj1oKG5ldyBtLGUseCk7cmV0dXJuIG51bGwhPW4mJnMobixyW3ldLHIsdikscn0pKSkucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj14KSwoa3x8TykmJihFKCJkZWxldGUiKSxFKCJoYXMiKSx2JiZFKCJnZXQiKSksKE98fEMpJiZFKHkpLGcmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfXJldHVybiB3W3RdPXgscih7Z2xvYmFsOiEwLGZvcmNlZDp4IT1tfSx3KSxwKHgsdCksZ3x8bi5zZXRTdHJvbmcoeCx0LHYpLHh9fSw3NDY4NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNTA4NjgpLGE9bigxMDU5MiksYz1mdW5jdGlvbigpe3RoaXMub2JqZWN0PW51bGwsdGhpcy5zeW1ib2w9bnVsbCx0aGlzLnByaW1pdGl2ZXM9bnVsbCx0aGlzLm9iamVjdHNCeUluZGV4PWkobnVsbCl9O2MucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzW3RdfHwodGhpc1t0XT1lKCkpfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uP3RoaXMub2JqZWN0c0J5SW5kZXhbdF18fCh0aGlzLm9iamVjdHNCeUluZGV4W3RdPW5ldyBvKTp0aGlzLnByaW1pdGl2ZXN8fCh0aGlzLnByaW1pdGl2ZXM9bmV3IHIpLGE9aS5nZXQoZSk7cmV0dXJuIGF8fGkuc2V0KGUsYT1uZXcgYyksYX07dmFyIHM9bmV3IGM7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPXMscj1hcmd1bWVudHMubGVuZ3RoO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKSYmKG49bi5uZXh0KHQsZSwhMCkpO2lmKHRoaXM9PT1PYmplY3QmJm49PT1zKXRocm93IFR5cGVFcnJvcigiQ29tcG9zaXRlIGtleXMgbXVzdCBjb250YWluIGEgbm9uLXByaW1pdGl2ZSBjb21wb25lbnQiKTtmb3IodD0wO3Q8cjt0KyspYShlPWFyZ3VtZW50c1t0XSl8fChuPW4ubmV4dCh0LGUsITEpKTtyZXR1cm4gbn19LDk5NjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMjQ0MTUpLGk9big5NzI1NyksYT1uKDM3NjIwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49byhlKSxjPWEuZixzPWkuZix1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBsPW5bdV07cih0LGwpfHxjKHQsbCxzKGUsbCkpfX19LDkzOTE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXsiLy4vIlt0XShlKX1jYXRjaChuKXt0cnl7cmV0dXJuIGVbcl09ITEsIi8uLyJbdF0oZSl9Y2F0Y2godCl7fX1yZXR1cm4hMX19LDcxNjA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSl9LDI3MDA0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjIzOCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big1MDg2OCksYz1uKDY2OTcxKSxzPW4oMTkyNiksdT1uKDIzNzI0KSxsPW4oODk4MjcpLGY9big3NzAxKSgiUHJvbWlzZSIpLGQ9bC5zZXQscD1sLmdldCxoPXUoInRvU3RyaW5nVGFnIiksdj1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMpLml0ZXJhdG9yLG49ZS5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/Zi5yZXNvbHZlKHtkb25lOiEwLHZhbHVlOnR9KTppKG4uY2FsbChlLHQpKX0sZz1mdW5jdGlvbih0KXt2YXIgZT1wKHRoaXMpLml0ZXJhdG9yLG49ZS50aHJvdztyZXR1cm4gdm9pZCAwPT09bj9mLnJlamVjdCh0KTpuLmNhbGwoZSx0KX07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7dC5uZXh0PW8odC5pdGVyYXRvci5uZXh0KSx0LmRvbmU9ITEsZCh0aGlzLHQpfTtyZXR1cm4gbi5wcm90b3R5cGU9cyhhKHIuQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLHtuZXh0OmZ1bmN0aW9uKGUpe3ZhciBuPXAodGhpcyk7aWYobi5kb25lKXJldHVybiBmLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7dHJ5e3JldHVybiBmLnJlc29sdmUoaSh0LmNhbGwobixlLGYpKSl9Y2F0Y2godCl7cmV0dXJuIGYucmVqZWN0KHQpfX0scmV0dXJuOnYsdGhyb3c6Z30pLGV8fGMobi5wcm90b3R5cGUsaCwiR2VuZXJhdG9yIiksbn19LDMxMzUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKSxvPS8iL2c7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPVN0cmluZyhyKHQpKSxjPSI8IitlO3JldHVybiIiIT09biYmKGMrPSIgIituKyc9IicrU3RyaW5nKGkpLnJlcGxhY2UobywiJnF1b3Q7IikrJyInKSxjKyI+IithKyI8LyIrZSsiPiJ9fSw3MTIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjQxNzYpLkl0ZXJhdG9yUHJvdG90eXBlLG89big1MDg2OCksaT1uKDE0MjA5KSxhPW4oNTExMjgpLGM9bigxMjM1KSxzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9ZSsiIEl0ZXJhdG9yIjtyZXR1cm4gdC5wcm90b3R5cGU9byhyLHtuZXh0OmkoMSxuKX0pLGEodCx1LCExLCEwKSxjW3VdPXMsdH19LDg4MDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1sLnNldCxkPWwuZ2V0LHA9dSgidG9TdHJpbmdUYWciKSxoPWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj97ZG9uZTohMCx2YWx1ZTp0fTppKG4uY2FsbChlLHQpKX0sdj1mdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMpLml0ZXJhdG9yLG49ZS50aHJvdztpZih2b2lkIDA9PT1uKXRocm93IHQ7cmV0dXJuIG4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxmKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5JdGVyYXRvci5wcm90b3R5cGUpLHtuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9ZCh0aGlzKSxuPWUuZG9uZT92b2lkIDA6dC5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJue2RvbmU6ZS5kb25lLHZhbHVlOm59fSxyZXR1cm46aCx0aHJvdzp2fSksZXx8YyhuLnByb3RvdHlwZSxwLCJHZW5lcmF0b3IiKSxufX0sNjY5NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDE0MjA5KTt0LmV4cG9ydHM9cj9mdW5jdGlvbih0LGUsbil7cmV0dXJuIG8uZih0LGUsaSgxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH19LDE0MjA5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX19LDU4ODEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1MzQ5OCksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9cihlKTthIGluIHQ/by5mKHQsYSxpKDAsbikpOnRbYV09bn19LDc5MTY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMjE4Nyksbz1uKDI2NTczKS5zdGFydCxpPU1hdGguYWJzLGE9RGF0ZS5wcm90b3R5cGUsYz1hLmdldFRpbWUscz1hLnRvSVNPU3RyaW5nO3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT1zLmNhbGwobmV3IERhdGUoLTUwMDAwMDAwMDAwMDAxKSl9KSl8fCFyKChmdW5jdGlvbigpe3MuY2FsbChuZXcgRGF0ZShOYU4pKX0pKT9mdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShjLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO3ZhciB0PXRoaXMsZT10LmdldFVUQ0Z1bGxZZWFyKCksbj10LmdldFVUQ01pbGxpc2Vjb25kcygpLHI9ZTwwPyItIjplPjk5OTk/IisiOiIiO3JldHVybiByK28oaShlKSxyPzY6NCwwKSsiLSIrbyh0LmdldFVUQ01vbnRoKCkrMSwyLDApKyItIitvKHQuZ2V0VVRDRGF0ZSgpLDIsMCkrIlQiK28odC5nZXRVVENIb3VycygpLDIsMCkrIjoiK28odC5nZXRVVENNaW51dGVzKCksMiwwKSsiOiIrbyh0LmdldFVUQ1NlY29uZHMoKSwyLDApKyIuIitvKG4sMywwKSsiWiJ9OnN9LDc2OTc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDUzNDk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPT10JiYibnVtYmVyIiE9PXQmJiJkZWZhdWx0IiE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBvKHIodGhpcyksIm51bWJlciIhPT10KX19LDQ2MDYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNjQ5NjUpLGE9big3MTg0MiksYz1uKDUxMTI4KSxzPW4oNjY5NzEpLHU9big5MjkxMyksbD1uKDIzNzI0KSxmPW4oNjU2NzIpLGQ9bigxMjM1KSxwPW4oNjQxNzYpLGg9cC5JdGVyYXRvclByb3RvdHlwZSx2PXAuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxnPWwoIml0ZXJhdG9yIikseT0ia2V5cyIsbT0idmFsdWVzIixiPSJlbnRyaWVzIix4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLHAsdyxFKXtvKG4sZSxsKTt2YXIgaixDLGssUz1mdW5jdGlvbih0KXtpZih0PT09cCYmVClyZXR1cm4gVDtpZighdiYmdCBpbiBJKXJldHVybiBJW3RdO3N3aXRjaCh0KXtjYXNlIHk6Y2FzZSBtOmNhc2UgYjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMpfX0sTz1lKyIgSXRlcmF0b3IiLEE9ITEsST10LnByb3RvdHlwZSxNPUlbZ118fElbIkBAaXRlcmF0b3IiXXx8cCYmSVtwXSxUPSF2JiZNfHxTKHApLF89IkFycmF5Ij09ZSYmSS5lbnRyaWVzfHxNO2lmKF8mJihqPWkoXy5jYWxsKG5ldyB0KSksaCE9PU9iamVjdC5wcm90b3R5cGUmJmoubmV4dCYmKGZ8fGkoaik9PT1ofHwoYT9hKGosaCk6ImZ1bmN0aW9uIiE9dHlwZW9mIGpbZ10mJnMoaixnLHgpKSxjKGosTywhMCwhMCksZiYmKGRbT109eCkpKSxwPT1tJiZNJiZNLm5hbWUhPT1tJiYoQT0hMCxUPWZ1bmN0aW9uKCl7cmV0dXJuIE0uY2FsbCh0aGlzKX0pLGYmJiFFfHxJW2ddPT09VHx8cyhJLGcsVCksZFtlXT1ULHApaWYoQz17dmFsdWVzOlMobSksa2V5czp3P1Q6Uyh5KSxlbnRyaWVzOlMoYil9LEUpZm9yKGsgaW4gQykodnx8QXx8IShrIGluIEkpKSYmdShJLGssQ1trXSk7ZWxzZSByKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6dnx8QX0sQyk7cmV0dXJuIEN9fSw5MjI3NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NjIzOCksbz1uKDc2Mjk4KSxpPW4oNzM5MTYpLGE9bigzNzYyMCkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9ci5TeW1ib2x8fChyLlN5bWJvbD17fSk7byhlLHQpfHxhKGUsdCx7dmFsdWU6aS5mKHQpfSl9fSw2MjU1NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwxOTIzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMTA1OTIpLGk9ci5kb2N1bWVudCxhPW8oaSkmJm8oaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sNDcwOTQ6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfX0sNTkxMzU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDE0MDQ0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oOTcyNTcpLmYsaT1uKDY2OTcxKSxhPW4oOTI5MTMpLGM9big5ODI2OSkscz1uKDk5NjI1KSx1PW4oNjQ1MDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGwsZixkLHAsaD10LnRhcmdldCx2PXQuZ2xvYmFsLGc9dC5zdGF0O2lmKG49dj9yOmc/cltoXXx8YyhoLHt9KToocltoXXx8e30pLnByb3RvdHlwZSlmb3IobCBpbiBlKXtpZihkPWVbbF0sZj10Lm5vVGFyZ2V0R2V0PyhwPW8obixsKSkmJnAudmFsdWU6bltsXSwhdSh2P2w6aCsoZz8iLiI6IiMiKStsLHQuZm9yY2VkKSYmdm9pZCAwIT09Zil7aWYodHlwZW9mIGQ9PXR5cGVvZiBmKWNvbnRpbnVlO3MoZCxmKX0odC5zaGFtfHxmJiZmLnNoYW0pJiZpKGQsInNoYW0iLCEwKSxhKG4sbCxkLHQpfX19LDMyMTg3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sMzU4NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY2OTcxKSxvPW4oOTI5MTMpLGk9bigzMjE4NyksYT1uKDIzNzI0KSxjPW4oMzg1OTgpLHM9YSgic3BlY2llcyIpLHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Ly4vO3JldHVybiB0LmV4ZWM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdC5ncm91cHM9e2E6IjcifSx0fSwiNyIhPT0iIi5yZXBsYWNlKHQsIiQ8YT4iKX0pKSxsPSFpKChmdW5jdGlvbigpe3ZhciB0PS8oPzopLyxlPXQuZXhlYzt0LmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPSJhYiIuc3BsaXQodCk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8ImEiIT09blswXXx8ImIiIT09blsxXX0pKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sZil7dmFyIGQ9YSh0KSxwPSFpKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlW2RdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPSIiW3RdKGUpfSkpLGg9cCYmIWkoKGZ1bmN0aW9uKCl7dmFyIGU9ITEsbj0vYS87cmV0dXJuInNwbGl0Ij09PXQmJigobj17fSkuY29uc3RydWN0b3I9e30sbi5jb25zdHJ1Y3RvcltzXT1mdW5jdGlvbigpe3JldHVybiBufSxuLmZsYWdzPSIiLG5bZF09Ly4vW2RdKSxuLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxudWxsfSxuW2RdKCIiKSwhZX0pKTtpZighcHx8IWh8fCJyZXBsYWNlIj09PXQmJiF1fHwic3BsaXQiPT09dCYmIWwpe3ZhciB2PS8uL1tkXSxnPW4oZCwiIlt0XSwoZnVuY3Rpb24odCxlLG4scixvKXtyZXR1cm4gZS5leGVjPT09Yz9wJiYhbz97ZG9uZTohMCx2YWx1ZTp2LmNhbGwoZSxuLHIpfTp7ZG9uZTohMCx2YWx1ZTp0LmNhbGwobixlLHIpfTp7ZG9uZTohMX19KSkseT1nWzBdLG09Z1sxXTtvKFN0cmluZy5wcm90b3R5cGUsdCx5KSxvKFJlZ0V4cC5wcm90b3R5cGUsZCwyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG0uY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBtLmNhbGwodCx0aGlzKX0pLGYmJnIoUmVnRXhwLnByb3RvdHlwZVtkXSwic2hhbSIsITApfX19LDgwNjY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MTk5KSxvPW4oMjc4ODQpLGk9big0NjEzMCksYT1mdW5jdGlvbih0LGUsbixjLHMsdSxsLGYpe2Zvcih2YXIgZCxwPXMsaD0wLHY9ISFsJiZpKGwsZiwzKTtoPGM7KXtpZihoIGluIG4pe2lmKGQ9dj92KG5baF0saCxlKTpuW2hdLHU+MCYmcihkKSlwPWEodCxlLGQsbyhkLmxlbmd0aCkscCx1LTEpLTE7ZWxzZXtpZihwPj05MDA3MTk5MjU0NzQwOTkxKXRocm93IFR5cGVFcnJvcigiRXhjZWVkIHRoZSBhY2NlcHRhYmxlIGFycmF5IGxlbmd0aCIpO3RbcF09ZH1wKyt9aCsrfXJldHVybiBwfTt0LmV4cG9ydHM9YX0sNDc4MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY1NjcyKSxvPW4oODk1NTgpLGk9bigzMjE4Nyk7dC5leHBvcnRzPXJ8fCFpKChmdW5jdGlvbigpe3ZhciB0PU1hdGgucmFuZG9tKCk7X19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsdCwoZnVuY3Rpb24oKXt9KSksZGVsZXRlIG9bdF19KSl9LDUyMTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7dmFyIGU9IiJbdF0oJyInKTtyZXR1cm4gZSE9PWUudG9Mb3dlckNhc2UoKXx8ZS5zcGxpdCgnIicpLmxlbmd0aD4zfSkpfX0sODQ3NTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89big1MDA1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbigpe3JldHVybiEhb1t0XSgpfHwi4oCLwoXhoI4iIT0i4oCLwoXhoI4iW3RdKCl8fG9bdF0ubmFtZSE9PXR9KSl9fSw3NDUyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkpfSw3MzczOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89bigxMDU5MiksaT1bXS5zbGljZSxhPXt9LGM9ZnVuY3Rpb24odCxlLG4pe2lmKCEoZSBpbiBhKSl7Zm9yKHZhciByPVtdLG89MDtvPGU7bysrKXJbb109ImFbIitvKyJdIjthW2VdPUZ1bmN0aW9uKCJDLGEiLCJyZXR1cm4gbmV3IEMoIityLmpvaW4oIiwiKSsiKSIpfXJldHVybiBhW2VdKHQsbil9O3QuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMpLG49aS5jYWxsKGFyZ3VtZW50cywxKSxhPWZ1bmN0aW9uKCl7dmFyIHI9bi5jb25jYXQoaS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT9jKGUsci5sZW5ndGgscik6ZS5hcHBseSh0LHIpfTtyZXR1cm4gbyhlLnByb3RvdHlwZSkmJihhLnByb3RvdHlwZT1lLnByb3RvdHlwZSksYX19LDY2OTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDczODkwKSxvPW4oMjM3MjQpKCJhc3luY0l0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbb107cmV0dXJuIHZvaWQgMD09PWU/cih0KTplfX0sNzcwMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NjIzOCksbz1uKDg5NTU4KSxpPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm9pZCAwfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2koclt0XSl8fGkob1t0XSk6clt0XSYmclt0XVtlXXx8b1t0XSYmb1t0XVtlXX19LDczODkwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5NTkxKSxvPW4oMTIzNSksaT1uKDIzNzI0KSgiaXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbCE9dClyZXR1cm4gdFtpXXx8dFsiQEBpdGVyYXRvciJdfHxvW3IodCldfX0sMzEwNzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3Mzg5MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW8odCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiByKGUuY2FsbCh0KSl9fSw0MTk4OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDMxMDc0KTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3JldHVybiBNYXAucHJvdG90eXBlLmVudHJpZXMuY2FsbCh0KX19LDQxNDc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIFNldC5wcm90b3R5cGUudmFsdWVzLmNhbGwodCl9fSw4OTU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09TWF0aCYmdH07dC5leHBvcnRzPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2Ygbi5nJiZuLmcpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSw3NjI5ODpmdW5jdGlvbih0KXt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbil9fSwyMzA3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e319LDgzNjIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbnNvbGU7biYmbi5lcnJvciYmKDE9PT1hcmd1bWVudHMubGVuZ3RoP24uZXJyb3IodCk6bi5lcnJvcih0LGUpKX19LDUxNTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpO3QuZXhwb3J0cz1yKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw2Mjc5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDMyMTg3KSxpPW4oMTkyMyk7dC5leHBvcnRzPSFyJiYhbygoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sOTA3MjU6ZnVuY3Rpb24odCl7dmFyIGU9MS8wLG49TWF0aC5hYnMscj1NYXRoLnBvdyxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE4yO3QuZXhwb3J0cz17cGFjazpmdW5jdGlvbih0LGMscyl7dmFyIHUsbCxmLGQ9bmV3IEFycmF5KHMpLHA9OCpzLWMtMSxoPSgxPDxwKS0xLHY9aD4+MSxnPTIzPT09Yz9yKDIsLTI0KS1yKDIsLTc3KTowLHk9dDwwfHwwPT09dCYmMS90PDA/MTowLG09MDtmb3IoKHQ9bih0KSkhPXR8fHQ9PT1lPyhsPXQhPXQ/MTowLHU9aCk6KHU9byhpKHQpL2EpLHQqKGY9cigyLC11KSk8MSYmKHUtLSxmKj0yKSwodCs9dSt2Pj0xP2cvZjpnKnIoMiwxLXYpKSpmPj0yJiYodSsrLGYvPTIpLHUrdj49aD8obD0wLHU9aCk6dSt2Pj0xPyhsPSh0KmYtMSkqcigyLGMpLHUrPXYpOihsPXQqcigyLHYtMSkqcigyLGMpLHU9MCkpO2M+PTg7ZFttKytdPTI1NSZsLGwvPTI1NixjLT04KTtmb3IodT11PDxjfGwscCs9YztwPjA7ZFttKytdPTI1NSZ1LHUvPTI1NixwLT04KTtyZXR1cm4gZFstLW1dfD0xMjgqeSxkfSx1bnBhY2s6ZnVuY3Rpb24odCxuKXt2YXIgbyxpPXQubGVuZ3RoLGE9OCppLW4tMSxjPSgxPDxhKS0xLHM9Yz4+MSx1PWEtNyxsPWktMSxmPXRbbC0tXSxkPTEyNyZmO2ZvcihmPj49Nzt1PjA7ZD0yNTYqZCt0W2xdLGwtLSx1LT04KTtmb3Iobz1kJigxPDwtdSktMSxkPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2xdLGwtLSx1LT04KTtpZigwPT09ZClkPTEtcztlbHNle2lmKGQ9PT1jKXJldHVybiBvP05hTjpmPy0xLzA6ZTtvKz1yKDIsbiksZC09c31yZXR1cm4oZj8tMToxKSpvKnIoMixkLW4pfX19LDI0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyNDU5NCksaT0iIi5zcGxpdDt0LmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24odCl7cmV0dXJuIlN0cmluZyI9PW8odCk/aS5jYWxsKHQsIiIpOk9iamVjdCh0KX06T2JqZWN0fSwzMDI3MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDcxODQyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE7cmV0dXJuIG8mJiJmdW5jdGlvbiI9PXR5cGVvZihpPWUuY29uc3RydWN0b3IpJiZpIT09biYmcihhPWkucHJvdG90eXBlKSYmYSE9PW4ucHJvdG90eXBlJiZvKHQsYSksdH19LDc2NzczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0NzQxKSxvPUZ1bmN0aW9uLnRvU3RyaW5nOyJmdW5jdGlvbiIhPXR5cGVvZiByLmluc3BlY3RTb3VyY2UmJihyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY2FsbCh0KX0pLHQuZXhwb3J0cz1yLmluc3BlY3RTb3VyY2V9LDk2MDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjMwNzApLG89bigxMDU5MiksaT1uKDc2Mjk4KSxhPW4oMzc2MjApLmYsYz1uKDY3MjkpLHM9big3NDUyMCksdT1jKCJtZXRhIiksbD0wLGY9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZD1mdW5jdGlvbih0KXthKHQsdSx7dmFsdWU6e29iamVjdElEOiJPIisgKytsLHdlYWtEYXRhOnt9fX0pfSxwPXQuZXhwb3J0cz17UkVRVUlSRUQ6ITEsZmFzdEtleTpmdW5jdGlvbih0LGUpe2lmKCFvKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4iRiI7aWYoIWUpcmV0dXJuIkUiO2QodCl9cmV0dXJuIHRbdV0ub2JqZWN0SUR9LGdldFdlYWtEYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIWkodCx1KSl7aWYoIWYodCkpcmV0dXJuITA7aWYoIWUpcmV0dXJuITE7ZCh0KX1yZXR1cm4gdFt1XS53ZWFrRGF0YX0sb25GcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJnAuUkVRVUlSRUQmJmYodCkmJiFpKHQsdSkmJmQodCksdH19O3JbdV09ITB9LDg5ODI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYT1uKDE5NTkxKSxjPW4oODk1NTgpLHM9bigxMDU5MiksdT1uKDY2OTcxKSxsPW4oNzYyOTgpLGY9big4MzE5NyksZD1uKDIzMDcwKSxwPWMuV2Vha01hcDtpZihhKXt2YXIgaD1uZXcgcCx2PWguZ2V0LGc9aC5oYXMseT1oLnNldDtyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuY2FsbChoLHQsZSksZX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdi5jYWxsKGgsdCl8fHt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBnLmNhbGwoaCx0KX19ZWxzZXt2YXIgbT1mKCJzdGF0ZSIpO2RbbV09ITAscj1mdW5jdGlvbih0LGUpe3JldHVybiB1KHQsbSxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSk/dFttXTp7fX0saT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LG0pfX10LmV4cG9ydHM9e3NldDpyLGdldDpvLGhhczppLGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/byh0KTpyKHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFzKGUpfHwobj1vKGUpKS50eXBlIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fX0sNDQ5ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpLG89bigxMjM1KSxpPXIoIml0ZXJhdG9yIiksYT1BcnJheS5wcm90b3R5cGU7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiYoby5BcnJheT09PXR8fGFbaV09PT10KX19LDYxOTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT1yKHQpfX0sNjQ1MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89LyN8XC5wcm90b3R5cGVcLi8saT1mdW5jdGlvbih0LGUpe3ZhciBuPWNbYSh0KV07cmV0dXJuIG49PXV8fG4hPXMmJigiZnVuY3Rpb24iPT10eXBlb2YgZT9yKGUpOiEhZSl9LGE9aS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxjPWkuZGF0YT17fSxzPWkuTkFUSVZFPSJOIix1PWkuUE9MWUZJTEw9IlAiO3QuZXhwb3J0cz1pfSwzODI1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hcih0KSYmaXNGaW5pdGUodCkmJm8odCk9PT10fX0sMjEyMzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzk0NzYpO3QuZXhwb3J0cz0vKGlwaG9uZXxpcG9kfGlwYWQpLiphcHBsZXdlYmtpdC9pLnRlc3Qocil9LDEwNTkyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQ/bnVsbCE9PXQ6ImZ1bmN0aW9uIj09dHlwZW9mIHR9fSw2NTY3MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ITF9LDQzMjIzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oMjQ1OTQpLGk9bigyMzcyNCkoIm1hdGNoIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiByKHQpJiYodm9pZCAwIT09KGU9dFtpXSk/ISFlOiJSZWdFeHAiPT1vKHQpKX19LDQxMzM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNDQ5ODQpLGk9bigyNzg4NCksYT1uKDQ2MTMwKSxjPW4oNzM4OTApLHM9bigxMjI3OCksdT1mdW5jdGlvbih0LGUpe3RoaXMuc3RvcHBlZD10LHRoaXMucmVzdWx0PWV9Oyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbCxmKXt2YXIgZCxwLGgsdixnLHksbSxiPWEoZSxuLGw/MjoxKTtpZihmKWQ9dDtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZihwPWModCkpKXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSIpO2lmKG8ocCkpe2ZvcihoPTAsdj1pKHQubGVuZ3RoKTt2Pmg7aCsrKWlmKChnPWw/YihyKG09dFtoXSlbMF0sbVsxXSk6Yih0W2hdKSkmJmcgaW5zdGFuY2VvZiB1KXJldHVybiBnO3JldHVybiBuZXcgdSghMSl9ZD1wLmNhbGwodCl9Zm9yKHk9ZC5uZXh0OyEobT15LmNhbGwoZCkpLmRvbmU7KWlmKCJvYmplY3QiPT10eXBlb2YoZz1zKGQsYixtLnZhbHVlLGwpKSYmZyYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX0pLnN0b3A9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KCEwLHQpfX0sNjQxNzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGksYT1uKDY0OTY1KSxjPW4oNjY5NzEpLHM9big3NjI5OCksdT1uKDIzNzI0KSxsPW4oNjU2NzIpLGY9dSgiaXRlcmF0b3IiKSxkPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KG89YShhKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYocj1vKTpkPSEwKSxudWxsPT1yJiYocj17fSksbHx8cyhyLGYpfHxjKHIsZiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOnIsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpkfX0sMTIzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e319LDQ3OTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1yKHRoaXMpLGk9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBpKXRocm93IFR5cGVFcnJvcigiQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIG8uaGFzKHQpPyhuPW8uZ2V0KHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobj1lKG4pLG8uc2V0KHQsbikpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmKG49aSgpLG8uc2V0KHQsbikpLG59fSw3Mjk3MDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmV4cG0xLG49TWF0aC5leHA7dC5leHBvcnRzPSFlfHxlKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGUoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1lKC0yZS0xNyk/ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OnQ+LTFlLTYmJnQ8MWUtNj90K3QqdC8yOm4odCktMX06ZX0sNTMyNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzg3ODcpLG89TWF0aC5hYnMsaT1NYXRoLnBvdyxhPWkoMiwtNTIpLGM9aSgyLC0yMykscz1pKDIsMTI3KSooMi1jKSx1PWkoMiwtMTI2KTt0LmV4cG9ydHM9TWF0aC5mcm91bmR8fGZ1bmN0aW9uKHQpe3ZhciBlLG4saT1vKHQpLGw9cih0KTtyZXR1cm4gaTx1P2wqKGkvdS9jKzEvYS0xL2EpKnUqYzoobj0oZT0oMStjL2EpKmkpLShlLWkpKT5zfHxuIT1uP2wqKDEvMCk6bCpufX0sMjE5MzI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5sb2c7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6ZSgxK3QpfX0sNzc0MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9TWF0aC5zY2FsZXx8ZnVuY3Rpb24odCxlLG4scixvKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHQhPXR8fGUhPWV8fG4hPW58fHIhPXJ8fG8hPW8/TmFOOnQ9PT0xLzB8fHQ9PT0tMS8wP3Q6KHQtZSkqKG8tcikvKG4tZSkrcn19LDM4Nzg3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDY1NTU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYSxjLHMsdSxsLGY9big4OTU1OCksZD1uKDk3MjU3KS5mLHA9bigyNDU5NCksaD1uKDIxNzQ0KS5zZXQsdj1uKDIxMjMxKSxnPWYuTXV0YXRpb25PYnNlcnZlcnx8Zi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHk9Zi5wcm9jZXNzLG09Zi5Qcm9taXNlLGI9InByb2Nlc3MiPT1wKHkpLHg9ZChmLCJxdWV1ZU1pY3JvdGFzayIpLHc9eCYmeC52YWx1ZTt3fHwocj1mdW5jdGlvbigpe3ZhciB0LGU7Zm9yKGImJih0PXkuZG9tYWluKSYmdC5leGl0KCk7bzspe2U9by5mbixvPW8ubmV4dDt0cnl7ZSgpfWNhdGNoKHQpe3Rocm93IG8/YSgpOmk9dm9pZCAwLHR9fWk9dm9pZCAwLHQmJnQuZW50ZXIoKX0sYj9hPWZ1bmN0aW9uKCl7eS5uZXh0VGljayhyKX06ZyYmIXY/KGM9ITAscz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IGcocikub2JzZXJ2ZShzLHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe3MuZGF0YT1jPSFjfSk6bSYmbS5yZXNvbHZlPyh1PW0ucmVzb2x2ZSh2b2lkIDApLGw9dS50aGVuLGE9ZnVuY3Rpb24oKXtsLmNhbGwodSxyKX0pOmE9ZnVuY3Rpb24oKXtoLmNhbGwoZixyKX0pLHQuZXhwb3J0cz13fHxmdW5jdGlvbih0KXt2YXIgZT17Zm46dCxuZXh0OnZvaWQgMH07aSYmKGkubmV4dD1lKSxvfHwobz1lLGEoKSksaT1lfX0sMzk0NTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yLlByb21pc2V9LDkwMTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFyKChmdW5jdGlvbigpe3JldHVybiFTdHJpbmcoU3ltYm9sKCkpfSkpfSw1NzU5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDIzNzI0KSxpPW4oNjU2NzIpLGE9bygiaXRlcmF0b3IiKTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVSTCgiYj9hPTEmYj0yJmM9MyIsImh0dHA6Ly9hIiksZT10LnNlYXJjaFBhcmFtcyxuPSIiO3JldHVybiB0LnBhdGhuYW1lPSJjJTIwZCIsZS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2UuZGVsZXRlKCJiIiksbis9cit0fSkpLGkmJiF0LnRvSlNPTnx8IWUuc29ydHx8Imh0dHA6Ly9hL2MlMjBkP2E9MSZjPTMiIT09dC5ocmVmfHwiMyIhPT1lLmdldCgiYyIpfHwiYT0xIiE9PVN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCI/YT0xIikpfHwhZVthXXx8ImEiIT09bmV3IFVSTCgiaHR0cHM6Ly9hQGIiKS51c2VybmFtZXx8ImIiIT09bmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCJhPWIiKSkuZ2V0KCJhIil8fCJ4bi0tZTFheWJjIiE9PW5ldyBVUkwoImh0dHA6Ly/RgtC10YHRgiIpLmhvc3R8fCIjJUQwJUIxIiE9PW5ldyBVUkwoImh0dHA6Ly9hI9CxIikuaGFzaHx8ImExYzMiIT09bnx8IngiIT09bmV3IFVSTCgiaHR0cDovL3giLHZvaWQgMCkuaG9zdH0pKX0sMTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big3Njc3MyksaT1yLldlYWtNYXA7dC5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBpJiYvbmF0aXZlIGNvZGUvLnRlc3QobyhpKSl9LDgzMDgzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1mdW5jdGlvbih0KXt2YXIgZSxuO3RoaXMucHJvbWlzZT1uZXcgdCgoZnVuY3Rpb24odCxyKXtpZih2b2lkIDAhPT1lfHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTtlPXQsbj1yfSkpLHRoaXMucmVzb2x2ZT1yKGUpLHRoaXMucmVqZWN0PXIobil9O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0KX19LDk5MzQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzMjIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYocih0KSl0aHJvdyBUeXBlRXJyb3IoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiB0fX0sODk1NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLmlzRmluaXRlO3QuZXhwb3J0cz1OdW1iZXIuaXNGaW5pdGV8fGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmcih0KX19LDc4Njg1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDMyMTg3KSxpPW4oMjU1MDcpLGE9big1Njk5MSksYz1uKDQxNjI4KSxzPW4oMTkyMDkpLHU9bigyNDk4KSxsPU9iamVjdC5hc3NpZ24sZj1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5leHBvcnRzPSFsfHxvKChmdW5jdGlvbigpe2lmKHImJjEhPT1sKHtiOjF9LGwoZih7fSwiYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Zih0aGlzLCJiIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciB0PXt9LGU9e30sbj1TeW1ib2woKSxvPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHRbbl09NyxvLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPXR9KSksNyE9bCh7fSx0KVtuXXx8aShsKHt9LGUpKS5qb2luKCIiKSE9b30pKT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1zKHQpLG89YXJndW1lbnRzLmxlbmd0aCxsPTEsZj1hLmYsZD1jLmY7bz5sOylmb3IodmFyIHAsaD11KGFyZ3VtZW50c1tsKytdKSx2PWY/aShoKS5jb25jYXQoZihoKSk6aShoKSxnPXYubGVuZ3RoLHk9MDtnPnk7KXA9dlt5KytdLHImJiFkLmNhbGwoaCxwKXx8KG5bcF09aFtwXSk7cmV0dXJuIG59Omx9LDUwODY4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oODY0MDEpLGk9big1OTEzNSksYT1uKDIzMDcwKSxjPW4oNTE1NzEpLHM9bigxOTIzKSx1PW4oODMxOTcpKCJJRV9QUk9UTyIpLGw9ZnVuY3Rpb24oKXt9LGY9ZnVuY3Rpb24oKXt2YXIgdCxlPXMoImlmcmFtZSIpLG49aS5sZW5ndGg7Zm9yKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZChlKSxlLnNyYz1TdHJpbmcoImphdmFzY3JpcHQ6IiksKHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdC53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSx0LmNsb3NlKCksZj10LkY7bi0tOylkZWxldGUgZi5wcm90b3R5cGVbaVtuXV07cmV0dXJuIGYoKX07dC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhsLnByb3RvdHlwZT1yKHQpLG49bmV3IGwsbC5wcm90b3R5cGU9bnVsbCxuW3VdPXQpOm49ZigpLHZvaWQgMD09PWU/bjpvKG4sZSl9LGFbdV09ITB9LDg2NDAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9big4NzU3OSksYT1uKDI1NTA3KTt0LmV4cG9ydHM9cj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe2kodCk7Zm9yKHZhciBuLHI9YShlKSxjPXIubGVuZ3RoLHM9MDtjPnM7KW8uZih0LG49cltzKytdLGVbbl0pO3JldHVybiB0fX0sMzc2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big2Mjc5OSksaT1uKDg3NTc5KSxhPW4oNTM0OTgpLGM9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yP2M6ZnVuY3Rpb24odCxlLG4pe2lmKGkodCksZT1hKGUsITApLGkobiksbyl0cnl7cmV0dXJuIGModCxlLG4pfWNhdGNoKHQpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9fSw5NzI1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDQxNjI4KSxpPW4oMTQyMDkpLGE9big5NTczKSxjPW4oNTM0OTgpLHM9big3NjI5OCksdT1uKDYyNzk5KSxsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPXI/bDpmdW5jdGlvbih0LGUpe2lmKHQ9YSh0KSxlPWMoZSwhMCksdSl0cnl7cmV0dXJuIGwodCxlKX1jYXRjaCh0KXt9aWYocyh0LGUpKXJldHVybiBpKCFvLmYuY2FsbCh0LGUpLHRbZV0pfX0sMjY5Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTU3Myksbz1uKDEzMzM0KS5mLGk9e30udG9TdHJpbmcsYT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBhJiYiW29iamVjdCBXaW5kb3ddIj09aS5jYWxsKHQpP2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gbyh0KX1jYXRjaCh0KXtyZXR1cm4gYS5zbGljZSgpfX0odCk6byhyKHQpKX19LDEzMzM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQxNzYpLG89big1OTEzNSkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw1Njk5MTpmdW5jdGlvbih0LGUpe2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSw2NDk2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDE5MjA5KSxpPW4oODMxOTcpLGE9big3MTYwOCksYz1pKCJJRV9QUk9UTyIpLHM9T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9YT9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9byh0KSxyKHQsYyk/dFtjXToiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD9zOm51bGx9fSw4NjQwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk4MjcpLG89big3MTIwMSksaT1uKDc2Mjk4KSxhPW4oMjU1MDcpLGM9bigxOTIwOSkscz0iT2JqZWN0IEl0ZXJhdG9yIix1PXIuc2V0LGw9ci5nZXR0ZXJGb3Iocyk7dC5leHBvcnRzPW8oKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0KTt1KHRoaXMse3R5cGU6cyxtb2RlOmUsb2JqZWN0Om4sa2V5czphKG4pLGluZGV4OjB9KX0pLCJPYmplY3QiLChmdW5jdGlvbigpe2Zvcih2YXIgdD1sKHRoaXMpLGU9dC5rZXlzOzspe2lmKG51bGw9PT1lfHx0LmluZGV4Pj1lLmxlbmd0aClyZXR1cm4gdC5vYmplY3Q9dC5rZXlzPW51bGwse3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgbj1lW3QuaW5kZXgrK10scj10Lm9iamVjdDtpZihpKHIsbikpe3N3aXRjaCh0Lm1vZGUpe2Nhc2Uia2V5cyI6cmV0dXJue3ZhbHVlOm4sZG9uZTohMX07Y2FzZSJ2YWx1ZXMiOnJldHVybnt2YWx1ZTpyW25dLGRvbmU6ITF9fXJldHVybnt2YWx1ZTpbbixyW25dXSxkb25lOiExfX19fSkpfSw0MTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oOTU3MyksaT1uKDg1ODAzKS5pbmRleE9mLGE9bigyMzA3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYz1vKHQpLHM9MCx1PVtdO2ZvcihuIGluIGMpIXIoYSxuKSYmcihjLG4pJiZ1LnB1c2gobik7Zm9yKDtlLmxlbmd0aD5zOylyKGMsbj1lW3MrK10pJiYofmkodSxuKXx8dS5wdXNoKG4pKTtyZXR1cm4gdX19LDI1NTA3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQxNzYpLG89big1OTEzNSk7dC5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sNDE2Mjg6ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG49e30ucHJvcGVydHlJc0VudW1lcmFibGUscj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89ciYmIW4uY2FsbCh7MToyfSwxKTtlLmY9bz9mdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMsdCk7cmV0dXJuISFlJiZlLmVudW1lcmFibGV9Om59LDcxODQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNzk4NjEpO3QuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgdCxlPSExLG49e307dHJ5eyh0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0KS5jYWxsKG4sW10pLGU9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKHQpe31yZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gcihuKSxvKGkpLGU/dC5jYWxsKG4saSk6bi5fX3Byb3RvX189aSxufX0oKTp2b2lkIDApfSwzNTY3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMjU1MDcpLGk9big5NTczKSxhPW4oNDE2MjgpLmYsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuLGM9aShlKSxzPW8oYyksdT1zLmxlbmd0aCxsPTAsZj1bXTt1Pmw7KW49c1tsKytdLHImJiFhLmNhbGwoYyxuKXx8Zi5wdXNoKHQ/W24sY1tuXV06Y1tuXSk7cmV0dXJuIGZ9fTt0LmV4cG9ydHM9e2VudHJpZXM6YyghMCksdmFsdWVzOmMoITEpfX0sMTk3NTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkwNjEzKSxvPW4oNTk1OTEpO3QuZXhwb3J0cz1yP3t9LnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIitvKHRoaXMpKyJdIn19LDI0NDE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpLG89bigxMzMzNCksaT1uKDU2OTkxKSxhPW4oODc1NzkpO3QuZXhwb3J0cz1yKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbih0KXt2YXIgZT1vLmYoYSh0KSksbj1pLmY7cmV0dXJuIG4/ZS5jb25jYXQobih0KSk6ZX19LDI0NDk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oODIzNTApLnRyaW0saT1uKDUwMDU1KSxhPXIucGFyc2VGbG9hdCxjPTEvYShpKyItMCIpIT0tMS8wO3QuZXhwb3J0cz1jP2Z1bmN0aW9uKHQpe3ZhciBlPW8oU3RyaW5nKHQpKSxuPWEoZSk7cmV0dXJuIDA9PT1uJiYiLSI9PWUuY2hhckF0KDApPy0wOm59OmF9LDc4NDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUludCxjPS9eWystXT8wW1h4XS8scz04IT09YShpKyIwOCIpfHwyMiE9PWEoaSsiMHgxNiIpO3QuZXhwb3J0cz1zP2Z1bmN0aW9uKHQsZSl7dmFyIG49byhTdHJpbmcodCkpO3JldHVybiBhKG4sZT4+PjB8fChjLnRlc3Qobik/MTY6MTApKX06YX0sNTYyMzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yfSwzMTE1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOnQoKX19Y2F0Y2godCl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOnR9fX19LDYzMTM0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oMTA1OTIpLGk9big4MzA4Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocih0KSxvKGUpJiZlLmNvbnN0cnVjdG9yPT09dClyZXR1cm4gZTt2YXIgbj1pLmYodCk7cmV0dXJuKDAsbi5yZXNvbHZlKShlKSxuLnByb21pc2V9fSw2OTkyNzpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9MjE0NzQ4MzY0NyxuPS9bXlwwLVx1MDA3RV0vLHI9L1suXHUzMDAyXHVGRjBFXHVGRjYxXS9nLG89Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIixpPU1hdGguZmxvb3IsYT1TdHJpbmcuZnJvbUNoYXJDb2RlLGM9ZnVuY3Rpb24odCl7cmV0dXJuIHQrMjIrNzUqKHQ8MjYpfSxzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0wO2Zvcih0PW4/aSh0LzcwMCk6dD4+MSx0Kz1pKHQvZSk7dD40NTU7cis9MzYpdD1pKHQvMzUpO3JldHVybiBpKHIrMzYqdC8odCszOCkpfSx1PWZ1bmN0aW9uKHQpe3ZhciBuPVtdO3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MCxyPXQubGVuZ3RoO248cjspe3ZhciBvPXQuY2hhckNvZGVBdChuKyspO2lmKG8+PTU1Mjk2JiZvPD01NjMxOSYmbjxyKXt2YXIgaT10LmNoYXJDb2RlQXQobisrKTs1NjMyMD09KDY0NTEyJmkpP2UucHVzaCgoKDEwMjMmbyk8PDEwKSsoMTAyMyZpKSs2NTUzNik6KGUucHVzaChvKSxuLS0pfWVsc2UgZS5wdXNoKG8pfXJldHVybiBlfSh0KTt2YXIgcix1LGw9dC5sZW5ndGgsZj0xMjgsZD0wLHA9NzI7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykodT10W3JdKTwxMjgmJm4ucHVzaChhKHUpKTt2YXIgaD1uLmxlbmd0aCx2PWg7Zm9yKGgmJm4ucHVzaCgiLSIpO3Y8bDspe3ZhciBnPWU7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKykodT10W3JdKT49ZiYmdTxnJiYoZz11KTt2YXIgeT12KzE7aWYoZy1mPmkoKGUtZCkveSkpdGhyb3cgUmFuZ2VFcnJvcihvKTtmb3IoZCs9KGctZikqeSxmPWcscj0wO3I8dC5sZW5ndGg7cisrKXtpZigodT10W3JdKTxmJiYrK2Q+ZSl0aHJvdyBSYW5nZUVycm9yKG8pO2lmKHU9PWYpe2Zvcih2YXIgbT1kLGI9MzY7O2IrPTM2KXt2YXIgeD1iPD1wPzE6Yj49cCsyNj8yNjpiLXA7aWYobTx4KWJyZWFrO3ZhciB3PW0teCxFPTM2LXg7bi5wdXNoKGEoYyh4K3clRSkpKSxtPWkody9FKX1uLnB1c2goYShjKG0pKSkscD1zKGQseSx2PT1oKSxkPTAsKyt2fX0rK2QsKytmfXJldHVybiBuLmpvaW4oIiIpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbyxpPVtdLGE9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UociwiLiIpLnNwbGl0KCIuIik7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylvPWFbZV0saS5wdXNoKG4udGVzdChvKT8ieG4tLSIrdShvKTpvKTtyZXR1cm4gaS5qb2luKCIuIil9fSwxOTI2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyOTEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgbyBpbiBlKXIodCxvLGVbb10sbik7cmV0dXJuIHR9fSw5MjkxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDY2OTcxKSxpPW4oNzYyOTgpLGE9big5ODI2OSksYz1uKDc2NzczKSxzPW4oODk4MjcpLHU9cy5nZXQsbD1zLmVuZm9yY2UsZj1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIik7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixjKXt2YXIgcz0hIWMmJiEhYy51bnNhZmUsdT0hIWMmJiEhYy5lbnVtZXJhYmxlLGQ9ISFjJiYhIWMubm9UYXJnZXRHZXQ7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJigic3RyaW5nIiE9dHlwZW9mIGV8fGkobiwibmFtZSIpfHxvKG4sIm5hbWUiLGUpLGwobikuc291cmNlPWYuam9pbigic3RyaW5nIj09dHlwZW9mIGU/ZToiIikpLHQhPT1yPyhzPyFkJiZ0W2VdJiYodT0hMCk6ZGVsZXRlIHRbZV0sdT90W2VdPW46byh0LGUsbikpOnU/dFtlXT1uOmEoZSxuKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ1KHRoaXMpLnNvdXJjZXx8Yyh0aGlzKX0pKX0sNzcwMjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQ5MDYpLG89big1ODYwNiksaT1uKDYyMDU0KSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyBvKSxjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1hLmdldCh0KTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KHQsbz1uZXcgcil9dmFyIGk9by5nZXQoZSk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldChlLGk9bmV3IHIpfXJldHVybiBpfTt0LmV4cG9ydHM9e3N0b3JlOmEsZ2V0TWFwOmMsaGFzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jKGUsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKHQpfSxnZXQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCl9LHNldDpmdW5jdGlvbih0LGUsbixyKXtjKG4sciwhMCkuc2V0KHQsZSl9LGtleXM6ZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQsZSwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3IucHVzaChlKX0pKSxyfSx0b0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dHx8InN5bWJvbCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfX19LDM1NDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KSxvPW4oMzg1OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIGk9bi5jYWxsKHQsZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXRocm93IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIGl9aWYoIlJlZ0V4cCIhPT1yKHQpKXRocm93IFR5cGVFcnJvcigiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlciIpO3JldHVybiBvLmNhbGwodCxlKX19LDM4NTk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpPW4oMjU0MTkpLGE9UmVnRXhwLnByb3RvdHlwZS5leGVjLGM9U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLHM9YSx1PShyPS9hLyxvPS9iKi9nLGEuY2FsbChyLCJhIiksYS5jYWxsKG8sImEiKSwwIT09ci5sYXN0SW5kZXh8fDAhPT1vLmxhc3RJbmRleCksbD12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KHV8fGwpJiYocz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxzPXRoaXM7cmV0dXJuIGwmJihuPW5ldyBSZWdFeHAoIl4iK3Muc291cmNlKyIkKD8hXFxzKSIsaS5jYWxsKHMpKSksdSYmKGU9cy5sYXN0SW5kZXgpLHI9YS5jYWxsKHMsdCksdSYmciYmKHMubGFzdEluZGV4PXMuZ2xvYmFsP3IuaW5kZXgrclswXS5sZW5ndGg6ZSksbCYmciYmci5sZW5ndGg+MSYmYy5jYWxsKHJbMF0sbiwoZnVuY3Rpb24oKXtmb3Iobz0xO288YXJndW1lbnRzLmxlbmd0aC0yO28rKyl2b2lkIDA9PT1hcmd1bWVudHNbb10mJihyW29dPXZvaWQgMCl9KSkscn0pLHQuZXhwb3J0cz1zfSwyNTQxOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PXIodGhpcyksZT0iIjtyZXR1cm4gdC5nbG9iYWwmJihlKz0iZyIpLHQuaWdub3JlQ2FzZSYmKGUrPSJpIiksdC5tdWx0aWxpbmUmJihlKz0ibSIpLHQuZG90QWxsJiYoZSs9InMiKSx0LnVuaWNvZGUmJihlKz0idSIpLHQuc3RpY2t5JiYoZSs9InkiKSxlfX0sNzAxMzI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK3QpO3JldHVybiB0fX0sMzgxODk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfX0sNzY0ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWU/MCE9PXR8fDEvdD09MS9lOnQhPXQmJmUhPWV9fSw5ODI2OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDY2OTcxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7byhyLHQsZSl9Y2F0Y2gobil7clt0XT1lfXJldHVybiBlfX0sNjc1Mzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDc3MDEpLG89bigzNzYyMCksaT1uKDIzNzI0KSxhPW4oNjI1NTYpLGM9aSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpLG49by5mO2EmJmUmJiFlW2NdJiZuKGUsYyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sNTExMjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzc2MjApLmYsbz1uKDc2Mjk4KSxpPW4oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dCYmIW8odD1uP3Q6dC5wcm90b3R5cGUsaSkmJnIodCxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pfX0sODMxOTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjIwNTQpLG89big2NzI5KSxpPXIoImtleXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlbdF18fChpW3RdPW8odCkpfX0sMzQ3NDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5ODI2OSksaT0iX19jb3JlLWpzX3NoYXJlZF9fIixhPXJbaV18fG8oaSx7fSk7dC5leHBvcnRzPWF9LDYyMDU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzQ3NDEpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gb1t0XXx8KG9bdF09dm9pZCAwIT09ZT9lOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuNS4wIixtb2RlOnI/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sMjI5MDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXVt0XTtyZXR1cm4hbnx8IXIoKGZ1bmN0aW9uKCl7bi5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pKX19LDEzOTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApLGk9bigyMzcyNCkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixhPXIodCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fG51bGw9PShuPXIoYSlbaV0pP2U6byhuKX19LDYwMTQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPW4oNzAxMzIpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGksYSxjPVN0cmluZyhvKGUpKSxzPXIobiksdT1jLmxlbmd0aDtyZXR1cm4gczwwfHxzPj11P3Q/IiI6dm9pZCAwOihpPWMuY2hhckNvZGVBdChzKSk8NTUyOTZ8fGk+NTYzMTl8fHMrMT09PXV8fChhPWMuY2hhckNvZGVBdChzKzEpKTw1NjMyMHx8YT41NzM0Mz90P2MuY2hhckF0KHMpOmk6dD9jLnNsaWNlKHMscysyKTphLTU2MzIwKyhpLTU1Mjk2PDwxMCkrNjU1MzZ9fTt0LmV4cG9ydHM9e2NvZGVBdDppKCExKSxjaGFyQXQ6aSghMCl9fSwyNjU3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzg4NCksbz1uKDY4MjUzKSxpPW4oNzAxMzIpLGE9TWF0aC5jZWlsLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjKXt2YXIgcyx1LGw9U3RyaW5nKGkoZSkpLGY9bC5sZW5ndGgsZD12b2lkIDA9PT1jPyIgIjpTdHJpbmcoYykscD1yKG4pO3JldHVybiBwPD1mfHwiIj09ZD9sOihzPXAtZiwodT1vLmNhbGwoZCxhKHMvZC5sZW5ndGgpKSkubGVuZ3RoPnMmJih1PXUuc2xpY2UoMCxzKSksdD9sK3U6dStsKX19O3QuZXhwb3J0cz17c3RhcnQ6YyghMSksZW5kOmMoITApfX0sNjgyNTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQzNDE2KSxvPW4oNzAxMzIpO3QuZXhwb3J0cz0iIi5yZXBlYXR8fGZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhvKHRoaXMpKSxuPSIiLGk9cih0KTtpZihpPDB8fGk9PTEvMCl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKGUrPWUpKTEmaSYmKG4rPWUpO3JldHVybiBufX0sODIzNTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89IlsiK24oNTAwNTUpKyJdIixpPVJlZ0V4cCgiXiIrbytvKyIqIiksYT1SZWdFeHAobytvKyIqJCIpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPVN0cmluZyhyKGUpKTtyZXR1cm4gMSZ0JiYobj1uLnJlcGxhY2UoaSwiIikpLDImdCYmKG49bi5yZXBsYWNlKGEsIiIpKSxufX07dC5leHBvcnRzPXtzdGFydDpjKDEpLGVuZDpjKDIpLHRyaW06YygzKX19LDIxNzQ0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGksYT1uKDg5NTU4KSxjPW4oMzIxODcpLHM9bigyNDU5NCksdT1uKDQ2MTMwKSxsPW4oNTE1NzEpLGY9bigxOTIzKSxkPW4oMjEyMzEpLHA9YS5sb2NhdGlvbixoPWEuc2V0SW1tZWRpYXRlLHY9YS5jbGVhckltbWVkaWF0ZSxnPWEucHJvY2Vzcyx5PWEuTWVzc2FnZUNoYW5uZWwsbT1hLkRpc3BhdGNoLGI9MCx4PXt9LHc9Im9ucmVhZHlzdGF0ZWNoYW5nZSIsRT1mdW5jdGlvbih0KXtpZih4Lmhhc093blByb3BlcnR5KHQpKXt2YXIgZT14W3RdO2RlbGV0ZSB4W3RdLGUoKX19LGo9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7RSh0KX19LEM9ZnVuY3Rpb24odCl7RSh0LmRhdGEpfSxrPWZ1bmN0aW9uKHQpe2EucG9zdE1lc3NhZ2UodCsiIixwLnByb3RvY29sKyIvLyIrcC5ob3N0KX07aCYmdnx8KGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTthcmd1bWVudHMubGVuZ3RoPm47KWUucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIHhbKytiXT1mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgdD90OkZ1bmN0aW9uKHQpKS5hcHBseSh2b2lkIDAsZSl9LHIoYiksYn0sdj1mdW5jdGlvbih0KXtkZWxldGUgeFt0XX0sInByb2Nlc3MiPT1zKGcpP3I9ZnVuY3Rpb24odCl7Zy5uZXh0VGljayhqKHQpKX06bSYmbS5ub3c/cj1mdW5jdGlvbih0KXttLm5vdyhqKHQpKX06eSYmIWQ/KGk9KG89bmV3IHkpLnBvcnQyLG8ucG9ydDEub25tZXNzYWdlPUMscj11KGkucG9zdE1lc3NhZ2UsaSwxKSk6IWEuYWRkRXZlbnRMaXN0ZW5lcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHBvc3RNZXNzYWdlfHxhLmltcG9ydFNjcmlwdHN8fGMoayk/cj13IGluIGYoInNjcmlwdCIpP2Z1bmN0aW9uKHQpe2wuYXBwZW5kQ2hpbGQoZigic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcyksRSh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoaih0KSwwKX06KHI9ayxhLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEMsITEpKSksdC5leHBvcnRzPXtzZXQ6aCxjbGVhcjp2fX0sNTM5OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJiJOdW1iZXIiIT1yKHQpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGludm9jYXRpb24iKTtyZXR1cm4rdH19LDc2OTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPU1hdGgubWF4LGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtyZXR1cm4gbjwwP28obitlLDApOmkobixlKX19LDgzOTE0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiAwO3ZhciBlPXIodCksbj1vKGUpO2lmKGUhPT1uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBufX0sOTU3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDk4KSxvPW4oNzAxMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcihvKHQpKX19LDQzNDE2OmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguY2VpbCxuPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/bjplKSh0KX19LDI3ODg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KSxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP28ocih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sMTkyMDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIodCkpfX0sNjA1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDU2ODApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodCk7aWYobiVlKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG9mZnNldCIpO3JldHVybiBufX0sNDU2ODA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQpO2lmKGU8MCl0aHJvdyBSYW5nZUVycm9yKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gZX19LDUzNDk4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighcih0KSlyZXR1cm4gdDt2YXIgbixvO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49dC52YWx1ZU9mKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO2lmKCFlJiYiZnVuY3Rpb24iPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw5MDYxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9e307cltuKDIzNzI0KSgidG9TdHJpbmdUYWciKV09InoiLHQuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcocil9LDkzMDE3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjI1NTYpLGE9bigzNTYyNyksYz1uKDczMDc0KSxzPW4oODI4MzUpLHU9big1OTM3OSksbD1uKDE0MjA5KSxmPW4oNjY5NzEpLGQ9bigyNzg4NCkscD1uKDgzOTE0KSxoPW4oNjA1NTgpLHY9big1MzQ5OCksZz1uKDc2Mjk4KSx5PW4oNTk1OTEpLG09bigxMDU5MiksYj1uKDUwODY4KSx4PW4oNzE4NDIpLHc9bigxMzMzNCkuZixFPW4oMjA0NTUpLGo9bigzMDAyNSkuZm9yRWFjaCxDPW4oNjc1MzgpLGs9bigzNzYyMCksUz1uKDk3MjU3KSxPPW4oODk4MjcpLEE9bigzMDI3MiksST1PLmdldCxNPU8uc2V0LFQ9ay5mLF89Uy5mLEw9TWF0aC5yb3VuZCxSPW8uUmFuZ2VFcnJvcixQPXMuQXJyYXlCdWZmZXIsTj1zLkRhdGFWaWV3LEQ9Yy5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLEY9Yy5UWVBFRF9BUlJBWV9UQUcsVT1jLlR5cGVkQXJyYXksQj1jLlR5cGVkQXJyYXlQcm90b3R5cGUsej1jLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsSD1jLmlzVHlwZWRBcnJheSxWPSJCWVRFU19QRVJfRUxFTUVOVCIscT0iV3JvbmcgbGVuZ3RoIixXPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aCxvPW5ldyh6KHQpKShyKTtyPm47KW9bbl09ZVtuKytdO3JldHVybiBvfSxHPWZ1bmN0aW9uKHQsZSl7VCh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMpW2VdfX0pfSxaPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0IGluc3RhbmNlb2YgUHx8IkFycmF5QnVmZmVyIj09KGU9eSh0KSl8fCJTaGFyZWRBcnJheUJ1ZmZlciI9PWV9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSCh0KSYmInN5bWJvbCIhPXR5cGVvZiBlJiZlIGluIHQmJlN0cmluZygrZSk9PVN0cmluZyhlKX0sWT1mdW5jdGlvbih0LGUpe3JldHVybiAkKHQsZT12KGUsITApKT9sKDIsdFtlXSk6Xyh0LGUpfSxKPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hKCQodCxlPXYoZSwhMCkpJiZtKG4pJiZnKG4sInZhbHVlIikpfHxnKG4sImdldCIpfHxnKG4sInNldCIpfHxuLmNvbmZpZ3VyYWJsZXx8ZyhuLCJ3cml0YWJsZSIpJiYhbi53cml0YWJsZXx8ZyhuLCJlbnVtZXJhYmxlIikmJiFuLmVudW1lcmFibGU/VCh0LGUsbik6KHRbZV09bi52YWx1ZSx0KX07aT8oRHx8KFMuZj1ZLGsuZj1KLEcoQiwiYnVmZmVyIiksRyhCLCJieXRlT2Zmc2V0IiksRyhCLCJieXRlTGVuZ3RoIiksRyhCLCJsZW5ndGgiKSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFEfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlksZGVmaW5lUHJvcGVydHk6Sn0pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5tYXRjaCgvXGQrJC8pWzBdLzgsYz10KyhuPyJDbGFtcGVkIjoiIikrIkFycmF5IixzPSJnZXQiK3QsbD0ic2V0Iit0LHY9b1tjXSxnPXYseT1nJiZnLnByb3RvdHlwZSxrPXt9LFM9ZnVuY3Rpb24odCxlKXtUKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49SSh0KTtyZXR1cm4gbi52aWV3W3NdKGUqaStuLmJ5dGVPZmZzZXQsITApfSh0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1JKHQpO24mJihyPShyPUwocikpPDA/MDpyPjI1NT8yNTU6MjU1JnIpLG8udmlld1tsXShlKmkrby5ieXRlT2Zmc2V0LHIsITApfSh0aGlzLGUsdCl9LGVudW1lcmFibGU6ITB9KX07RD9hJiYoZz1lKChmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdSh0LGcsYyksQShtKGUpP1ooZSk/dm9pZCAwIT09cj9uZXcgdihlLGgobixpKSxyKTp2b2lkIDAhPT1uP25ldyB2KGUsaChuLGkpKTpuZXcgdihlKTpIKGUpP1coZyxlKTpFLmNhbGwoZyxlKTpuZXcgdihwKGUpKSx0LGcpfSkpLHgmJngoZyxVKSxqKHcodiksKGZ1bmN0aW9uKHQpe3QgaW4gZ3x8ZihnLHQsdlt0XSl9KSksZy5wcm90b3R5cGU9eSk6KGc9ZSgoZnVuY3Rpb24odCxlLG4scil7dSh0LGcsYyk7dmFyIG8sYSxzLGw9MCxmPTA7aWYobShlKSl7aWYoIVooZSkpcmV0dXJuIEgoZSk/VyhnLGUpOkUuY2FsbChnLGUpO289ZSxmPWgobixpKTt2YXIgdj1lLmJ5dGVMZW5ndGg7aWYodm9pZCAwPT09cil7aWYodiVpKXRocm93IFIocSk7aWYoKGE9di1mKTwwKXRocm93IFIocSl9ZWxzZSBpZigoYT1kKHIpKmkpK2Y+dil0aHJvdyBSKHEpO3M9YS9pfWVsc2Ugcz1wKGUpLG89bmV3IFAoYT1zKmkpO2ZvcihNKHQse2J1ZmZlcjpvLGJ5dGVPZmZzZXQ6ZixieXRlTGVuZ3RoOmEsbGVuZ3RoOnMsdmlldzpuZXcgTihvKX0pO2w8czspUyh0LGwrKyl9KSkseCYmeChnLFUpLHk9Zy5wcm90b3R5cGU9YihCKSkseS5jb25zdHJ1Y3RvciE9PWcmJmYoeSwiY29uc3RydWN0b3IiLGcpLEYmJmYoeSxGLGMpLGtbY109ZyxyKHtnbG9iYWw6ITAsZm9yY2VkOmchPXYsc2hhbTohRH0sayksViBpbiBnfHxmKGcsVixpKSxWIGluIHl8fGYoeSxWLGkpLEMoYyl9KTp0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSwyMDQ1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOTIwOSksbz1uKDI3ODg0KSxpPW4oNzM4OTApLGE9big0NDk4NCksYz1uKDQ2MTMwKSxzPW4oNzMwNzQpLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sdSxsLGYsZCxwPXIodCksaD1hcmd1bWVudHMubGVuZ3RoLHY9aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZz12b2lkIDAhPT12LHk9aShwKTtpZihudWxsIT15JiYhYSh5KSlmb3IoZD0oZj15LmNhbGwocCkpLm5leHQscD1bXTshKGw9ZC5jYWxsKGYpKS5kb25lOylwLnB1c2gobC52YWx1ZSk7Zm9yKGcmJmg+MiYmKHY9Yyh2LGFyZ3VtZW50c1syXSwyKSksbj1vKHAubGVuZ3RoKSx1PW5ldyhzKHRoaXMpKShuKSxlPTA7bj5lO2UrKyl1W2VdPWc/dihwW2VdLGUpOnBbZV07cmV0dXJuIHV9fSwzNTYyNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDMyMTg3KSxpPW4oNDc5NiksYT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLGM9ci5BcnJheUJ1ZmZlcixzPXIuSW50OEFycmF5O3QuZXhwb3J0cz0hYXx8IW8oKGZ1bmN0aW9uKCl7cygxKX0pKXx8IW8oKGZ1bmN0aW9uKCl7bmV3IHMoLTEpfSkpfHwhaSgoZnVuY3Rpb24odCl7bmV3IHMsbmV3IHMobnVsbCksbmV3IHMoMS41KSxuZXcgcyh0KX0pLCEwKXx8bygoZnVuY3Rpb24oKXtyZXR1cm4gMSE9PW5ldyBzKG5ldyBjKDIpLDEsdm9pZCAwKS5sZW5ndGh9KSl9LDY3Mjk6ZnVuY3Rpb24odCl7dmFyIGU9MCxuPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJTeW1ib2woIitTdHJpbmcodm9pZCAwPT09dD8iIjp0KSsiKV8iKygrK2UrbikudG9TdHJpbmcoMzYpfX0sMTY0MTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTAxNCk7dC5leHBvcnRzPXImJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woKX0sMzk0NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoIm5hdmlnYXRvciIsInVzZXJBZ2VudCIpfHwiIn0sNzkwNzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1uKDg5NTU4KSxhPW4oMzk0NzYpLGM9aS5wcm9jZXNzLHM9YyYmYy52ZXJzaW9ucyx1PXMmJnMudjg7dT9vPShyPXUuc3BsaXQoIi4iKSlbMF0rclsxXTphJiYoIShyPWEubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxyWzFdPj03NCkmJihyPWEubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihvPXJbMV0pLHQuZXhwb3J0cz1vJiYrb30sNDIxODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzk0NzYpO3QuZXhwb3J0cz0vVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/KCBNb2JpbGVcL1x3Kyk/IFNhZmFyaVwvLy50ZXN0KHIpfSwyMzcyNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDYyMDU0KSxpPW4oNzYyOTgpLGE9big2NzI5KSxjPW4oOTAxNCkscz1uKDE2NDEwKSx1PW8oIndrcyIpLGw9ci5TeW1ib2wsZj1zP2w6YTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodSx0KXx8KGMmJmkobCx0KT91W3RdPWxbdF06dVt0XT1mKCJTeW1ib2wuIit0KSksdVt0XX19LDUwMDU1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0iXHRcblx2XGZcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDczOTE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KTtlLmY9cn0sNjEyNDU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big4MjgzNSksYT1uKDY3NTM4KSxjPSJBcnJheUJ1ZmZlciIscz1pLkFycmF5QnVmZmVyO3Ioe2dsb2JhbDohMCxmb3JjZWQ6by5BcnJheUJ1ZmZlciE9PXN9LHtBcnJheUJ1ZmZlcjpzfSksYShjKX0sMjkyNzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3MzA3NCk7cih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIsc3RhdDohMCxmb3JjZWQ6IW8uTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXU30se2lzVmlldzpvLmlzVmlld30pfSw5MDU2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDgyODM1KSxhPW4oODc1NzkpLGM9big3Njk3Nikscz1uKDI3ODg0KSx1PW4oMTM5NzkpLGw9aS5BcnJheUJ1ZmZlcixmPWkuRGF0YVZpZXcsZD1sLnByb3RvdHlwZS5zbGljZTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixwcm90bzohMCx1bnNhZmU6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIW5ldyBsKDIpLnNsaWNlKDEsdm9pZCAwKS5ieXRlTGVuZ3RofSkpfSx7c2xpY2U6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1kJiZ2b2lkIDA9PT1lKXJldHVybiBkLmNhbGwoYSh0aGlzKSx0KTtmb3IodmFyIG49YSh0aGlzKS5ieXRlTGVuZ3RoLHI9Yyh0LG4pLG89Yyh2b2lkIDA9PT1lP246ZSxuKSxpPW5ldyh1KHRoaXMsbCkpKHMoby1yKSkscD1uZXcgZih0aGlzKSxoPW5ldyBmKGkpLHY9MDtyPG87KWguc2V0VWludDgodisrLHAuZ2V0VWludDgocisrKSk7cmV0dXJuIGl9fSl9LDU3Mzg3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNjE5OSksYT1uKDEwNTkyKSxjPW4oMTkyMDkpLHM9bigyNzg4NCksdT1uKDU4ODEwKSxsPW4oNzAwOSksZj1uKDYxOTYzKSxkPW4oMjM3MjQpLHA9big3OTA3MSksaD1kKCJpc0NvbmNhdFNwcmVhZGFibGUiKSx2PTkwMDcxOTkyNTQ3NDA5OTEsZz0iTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIix5PXA+PTUxfHwhbygoZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdFtoXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxtPWYoImNvbmNhdCIpLGI9ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9dFtoXTtyZXR1cm4gdm9pZCAwIT09ZT8hIWU6aSh0KX07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiF5fHwhbX0se2NvbmNhdDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGE9Yyh0aGlzKSxmPWwoYSwwKSxkPTA7Zm9yKGU9LTEscj1hcmd1bWVudHMubGVuZ3RoO2U8cjtlKyspaWYoYihpPS0xPT09ZT9hOmFyZ3VtZW50c1tlXSkpe2lmKGQrKG89cyhpLmxlbmd0aCkpPnYpdGhyb3cgVHlwZUVycm9yKGcpO2ZvcihuPTA7bjxvO24rKyxkKyspbiBpbiBpJiZ1KGYsZCxpW25dKX1lbHNle2lmKGQ+PXYpdGhyb3cgVHlwZUVycm9yKGcpO3UoZixkKyssaSl9cmV0dXJuIGYubGVuZ3RoPWQsZn19KX0sMzA4MTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big5OTQzMSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2NvcHlXaXRoaW46b30pLGkoImNvcHlXaXRoaW4iKX0sNTIwNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmV2ZXJ5O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgiZXZlcnkiKX0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDczMzYwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU4OTUpLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmaWxsOm99KSxpKCJmaWxsIil9LDQ3NTAyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maWx0ZXIsaT1uKDMyMTg3KSxhPW4oNjE5NjMpKCJmaWx0ZXIiKSxjPWEmJiFpKChmdW5jdGlvbigpe1tdLmZpbHRlci5jYWxsKHtsZW5ndGg6LTEsMDoxfSwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKX0pKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF8fCFjfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDkwOTEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maW5kSW5kZXgsaT1uKDc2NTEzKSxhPSJmaW5kSW5kZXgiLGM9ITA7YSBpbltdJiZBcnJheSgxKS5maW5kSW5kZXgoKGZ1bmN0aW9uKCl7Yz0hMX0pKSxyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y30se2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDMzMTk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5maW5kLGk9big3NjUxMyksYT0iZmluZCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmQoKGZ1bmN0aW9uKCl7Yz0hMX0pKSxyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y30se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKGEpfSw3OTIyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MDY2NSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big4NjQ3MCkscz1uKDcwMDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXt2YXIgZSxuPWkodGhpcykscj1hKG4ubGVuZ3RoKTtyZXR1cm4gYyh0KSwoZT1zKG4sMCkpLmxlbmd0aD1vKGUsbixuLHIsMCwxLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLGV9fSl9LDI4MjAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLGU9aSh0aGlzKSxuPWEoZS5sZW5ndGgpLHI9cyhlLDApO3JldHVybiByLmxlbmd0aD1vKHIsZSxlLG4sMCx2b2lkIDA9PT10PzE6Yyh0KSkscn19KX0sNDM1OTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNjgpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpbXS5mb3JFYWNoIT1vfSx7Zm9yRWFjaDpvfSl9LDc0NTM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODUxNjYpO3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITAsZm9yY2VkOiFuKDQ3OTYpKChmdW5jdGlvbih0KXtBcnJheS5mcm9tKHQpfSkpfSx7ZnJvbTpvfSl9LDIyMjc3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmNsdWRlcyxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKCJpbmNsdWRlcyIpfSwyNDEyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NTgwMykuaW5kZXhPZixpPW4oMjI5MDkpLGE9W10uaW5kZXhPZixjPSEhYSYmMS9bMV0uaW5kZXhPZigxLC0wKTwwLHM9aSgiaW5kZXhPZiIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfHxzfSx7aW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gYz9hLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDpvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDIxMjc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwfSx7aXNBcnJheTpuKDYxOTkpfSl9LDUwMDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5NTczKSxvPW4oNzY1MTMpLGk9bigxMjM1KSxhPW4oODk4MjcpLGM9big0NjA2MSkscz0iQXJyYXkgSXRlcmF0b3IiLHU9YS5zZXQsbD1hLmdldHRlckZvcihzKTt0LmV4cG9ydHM9YyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3UodGhpcyx7dHlwZTpzLHRhcmdldDpyKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMpLGU9dC50YXJnZXQsbj10LmtpbmQscj10LmluZGV4Kys7cmV0dXJuIWV8fHI+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6ImtleXMiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTplW3JdLGRvbmU6ITF9Ont2YWx1ZTpbcixlW3JdXSxkb25lOiExfX0pLCJ2YWx1ZXMiKSxpLkFyZ3VtZW50cz1pLkFycmF5LG8oImtleXMiKSxvKCJ2YWx1ZXMiKSxvKCJlbnRyaWVzIil9LDc0MTIwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI0OTgpLGk9big5NTczKSxhPW4oMjI5MDkpLGM9W10uam9pbixzPW8hPU9iamVjdCx1PWEoImpvaW4iLCIsIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOnN8fHV9LHtqb2luOmZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwoaSh0aGlzKSx2b2lkIDA9PT10PyIsIjp0KX19KX0sOTQ5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0OTI0OSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm8hPT1bXS5sYXN0SW5kZXhPZn0se2xhc3RJbmRleE9mOm99KX0sMjczODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLm1hcCxpPW4oMzIxODcpLGE9big2MTk2MykoIm1hcCIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10ubWFwLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjk5ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big1ODgxMCk7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoQXJyYXkub2YuY2FsbCh0KWluc3RhbmNlb2YgdCl9KSl9LHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KShlKTtlPnQ7KWkobix0LGFyZ3VtZW50c1t0KytdKTtyZXR1cm4gbi5sZW5ndGg9ZSxufX0pfSw0NTUyODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMjM2NikucmlnaHQ7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJyZWR1Y2VSaWdodCIpfSx7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUyMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMjM2NikubGVmdDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZSIpfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODAxMTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjE5OSksaT1bXS5yZXZlcnNlLGE9WzEsMl07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOlN0cmluZyhhKT09PVN0cmluZyhhLnJldmVyc2UoKSl9LHtyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcykmJih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aCksaS5jYWxsKHRoaXMpfX0pfSwyOTExMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDYxOTkpLGE9big3Njk3NiksYz1uKDI3ODg0KSxzPW4oOTU3MyksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9bigyMzcyNCkoInNwZWNpZXMiKSxkPVtdLnNsaWNlLHA9TWF0aC5tYXg7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzbGljZSIpfSx7c2xpY2U6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGwsaD1zKHRoaXMpLHY9YyhoLmxlbmd0aCksZz1hKHQsdikseT1hKHZvaWQgMD09PWU/djplLHYpO2lmKGkoaCkmJigiZnVuY3Rpb24iIT10eXBlb2Yobj1oLmNvbnN0cnVjdG9yKXx8biE9PUFycmF5JiYhaShuLnByb3RvdHlwZSk/byhuKSYmbnVsbD09PShuPW5bZl0pJiYobj12b2lkIDApOm49dm9pZCAwLG49PT1BcnJheXx8dm9pZCAwPT09bikpcmV0dXJuIGQuY2FsbChoLGcseSk7Zm9yKHI9bmV3KHZvaWQgMD09PW4/QXJyYXk6bikocCh5LWcsMCkpLGw9MDtnPHk7ZysrLGwrKylnIGluIGgmJnUocixsLGhbZ10pO3JldHVybiByLmxlbmd0aD1sLHJ9fSl9LDg1NTk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5zb21lO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgic29tZSIpfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDE5MjA5KSxhPW4oMzIxODcpLGM9bigyMjkwOSkscz1bXSx1PXMuc29ydCxsPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KHZvaWQgMCl9KSksZj1hKChmdW5jdGlvbigpe3Muc29ydChudWxsKX0pKSxkPWMoInNvcnQiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bHx8IWZ8fGR9LHtzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3UuY2FsbChpKHRoaXMpKTp1LmNhbGwoaSh0aGlzKSxvKHQpKX19KX0sODYyMTQ6ZnVuY3Rpb24odCxlLG4pe24oNjc1MzgpKCJBcnJheSIpfSwzMzc5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1uKDQzNDE2KSxhPW4oMjc4ODQpLGM9bigxOTIwOSkscz1uKDcwMDkpLHU9big1ODgxMCksbD1uKDYxOTYzKSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD05MDA3MTk5MjU0NzQwOTkxLGg9Ik1heGltdW0gYWxsb3dlZCBsZW5ndGggZXhjZWVkZWQiO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic3BsaWNlIil9LHtzcGxpY2U6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGwsdixnLHksbT1jKHRoaXMpLGI9YShtLmxlbmd0aCkseD1vKHQsYiksdz1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT13P249cj0wOjE9PT13PyhuPTAscj1iLXgpOihuPXctMixyPWQoZihpKGUpLDApLGIteCkpLGIrbi1yPnApdGhyb3cgVHlwZUVycm9yKGgpO2ZvcihsPXMobSxyKSx2PTA7djxyO3YrKykoZz14K3YpaW4gbSYmdShsLHYsbVtnXSk7aWYobC5sZW5ndGg9cixuPHIpe2Zvcih2PXg7djxiLXI7disrKXk9dituLChnPXYrcilpbiBtP21beV09bVtnXTpkZWxldGUgbVt5XTtmb3Iodj1iO3Y+Yi1yK247di0tKWRlbGV0ZSBtW3YtMV19ZWxzZSBpZihuPnIpZm9yKHY9Yi1yO3Y+eDt2LS0peT12K24tMSwoZz12K3ItMSlpbiBtP21beV09bVtnXTpkZWxldGUgbVt5XTtmb3Iodj0wO3Y8bjt2KyspbVt2K3hdPWFyZ3VtZW50c1t2KzJdO3JldHVybiBtLmxlbmd0aD1iLXIrbixsfX0pfSw3MTg0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXRNYXAiKX0sNzAxNDY6ZnVuY3Rpb24odCxlLG4pe24oNzY1MTMpKCJmbGF0Iil9LDQ1MTU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODI4MzUpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6IW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJ9LHtEYXRhVmlldzpvLkRhdGFWaWV3fSl9LDQxNjMyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJEYXRlIixzdGF0OiEwfSx7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LDQwMDQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzkxNjcpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIT09b30se3RvSVNPU3RyaW5nOm99KX0sMzYyMzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxOTIwOSksYT1uKDUzNDk4KTtyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSkpfSx7dG9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUpO3JldHVybiJudW1iZXIiIT10eXBlb2Ygbnx8aXNGaW5pdGUobik/ZS50b0lTT1N0cmluZygpOm51bGx9fSl9LDg0MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjY5NzEpLG89big3Njk3NCksaT1uKDIzNzI0KSgidG9QcmltaXRpdmUiKSxhPURhdGUucHJvdG90eXBlO2kgaW4gYXx8cihhLGksbyl9LDIxMzc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyOTEzKSxvPURhdGUucHJvdG90eXBlLGk9IkludmFsaWQgRGF0ZSIsYT0idG9TdHJpbmciLGM9by50b1N0cmluZyxzPW8uZ2V0VGltZTtuZXcgRGF0ZShOYU4pKyIiIT1pJiZyKG8sYSwoZnVuY3Rpb24oKXt2YXIgdD1zLmNhbGwodGhpcyk7cmV0dXJuIHQ9PXQ/Yy5jYWxsKHRoaXMpOml9KSl9LDk2NDk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJGdW5jdGlvbiIscHJvdG86ITB9LHtiaW5kOm4oNzM3MzkpfSl9LDc1ODk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMDU5Miksbz1uKDM3NjIwKSxpPW4oNjQ5NjUpLGE9bigyMzcyNCkoImhhc0luc3RhbmNlIiksYz1GdW5jdGlvbi5wcm90b3R5cGU7YSBpbiBjfHxvLmYoYyxhLHt2YWx1ZTpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IXIodCkpcmV0dXJuITE7aWYoIXIodGhpcy5wcm90b3R5cGUpKXJldHVybiB0IGluc3RhbmNlb2YgdGhpcztmb3IoO3Q9aSh0KTspaWYodGhpcy5wcm90b3R5cGU9PT10KXJldHVybiEwO3JldHVybiExfX0pfSwyMjQ0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKS5mLGk9RnVuY3Rpb24ucHJvdG90eXBlLGE9aS50b1N0cmluZyxjPS9eXHMqZnVuY3Rpb24gKFteIChdKikvLHM9Im5hbWUiO3ImJiEocyBpbiBpKSYmbyhpLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGEuY2FsbCh0aGlzKS5tYXRjaChjKVsxXX1jYXRjaCh0KXtyZXR1cm4iIn19fSl9LDcxNjIyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7Z2xvYmFsOiEwfSx7Z2xvYmFsVGhpczpuKDg5NTU4KX0pfSwxNjUwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDMyMTg3KSxhPW8oIkpTT04iLCJzdHJpbmdpZnkiKSxjPS9bXHVEODAwLVx1REZGRl0vZyxzPS9eW1x1RDgwMC1cdURCRkZdJC8sdT0vXltcdURDMDAtXHVERkZGXSQvLGw9ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4uY2hhckF0KGUtMSksbz1uLmNoYXJBdChlKzEpO3JldHVybiBzLnRlc3QodCkmJiF1LnRlc3Qobyl8fHUudGVzdCh0KSYmIXMudGVzdChyKT8iXFx1Iit0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOnR9LGY9aSgoZnVuY3Rpb24oKXtyZXR1cm4nIlxcdWRmMDZcXHVkODM0IichPT1hKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1hKCJcdWRlYWQiKX0pKTthJiZyKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsZm9yY2VkOmZ9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWEuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiJzdHJpbmciPT10eXBlb2Ygcj9yLnJlcGxhY2UoYyxsKTpyfX0pfSw4MTEwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7big1MTEyOCkoci5KU09OLCJKU09OIiwhMCl9LDk0OTA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MTk1MSksbz1uKDY0NTApO3QuZXhwb3J0cz1yKCJNYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbyl9LDIxMDMyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjE5MzIpLGk9TWF0aC5hY29zaCxhPU1hdGgubG9nLGM9TWF0aC5zcXJ0LHM9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohaXx8NzEwIT1NYXRoLmZsb29yKGkoTnVtYmVyLk1BWF9WQUxVRSkpfHxpKDEvMCkhPTEvMH0se2Fjb3NoOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KTwxP05hTjp0Pjk0OTA2MjY1LjYyNDI1MTU2P2EodCkrczpvKHQtMStjKHQtMSkqYyh0KzEpKX19KX0sMzc5MzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5hc2luaCxpPU1hdGgubG9nLGE9TWF0aC5zcXJ0O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IShvJiYxL28oMCk+MCl9LHthc2luaDpmdW5jdGlvbiB0KGUpe3JldHVybiBpc0Zpbml0ZShlPStlKSYmMCE9ZT9lPDA/LXQoLWUpOmkoZSthKGUqZSsxKSk6ZX19KX0sOTM5OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5hdGFuaCxpPU1hdGgubG9nO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IShvJiYxL28oLTApPDApfSx7YXRhbmg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OmkoKDErdCkvKDEtdCkpLzJ9fSl9LDEzMzkzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzg3ODcpLGk9TWF0aC5hYnMsYT1NYXRoLnBvdztyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjYnJ0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQ9K3QpKmEoaSh0KSwxLzMpfX0pfSwxMTI4MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmZsb29yLGk9TWF0aC5sb2csYT1NYXRoLkxPRzJFO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NsejMyOmZ1bmN0aW9uKHQpe3JldHVybih0Pj4+PTApPzMxLW8oaSh0Ky41KSphKTozMn19KX0sMzgwMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCksaT1NYXRoLmNvc2gsYT1NYXRoLmFicyxjPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHxpKDcxMCk9PT0xLzB9LHtjb3NoOmZ1bmN0aW9uKHQpe3ZhciBlPW8oYSh0KS0xKSsxO3JldHVybihlKzEvKGUqYypjKSkqKGMvMil9fSl9LDExMzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvIT1NYXRoLmV4cG0xfSx7ZXhwbTE6b30pfSw0NjA3ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2Zyb3VuZDpuKDUzMjUxKX0pfSwzMDA4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmh5cG90LGk9TWF0aC5hYnMsYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohIW8mJm8oMS8wLE5hTikhPT0xLzB9LHtoeXBvdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyLG89MCxjPTAscz1hcmd1bWVudHMubGVuZ3RoLHU9MDtjPHM7KXU8KG49aShhcmd1bWVudHNbYysrXSkpPyhvPW8qKHI9dS9uKSpyKzEsdT1uKTpvKz1uPjA/KHI9bi91KSpyOm47cmV0dXJuIHU9PT0xLzA/MS8wOnUqYShvKX19KX0sNDczODM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1NYXRoLmltdWw7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybi01IT1pKDQyOTQ5NjcyOTUsNSl8fDIhPWkubGVuZ3RofSkpfSx7aW11bDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPW4mcixhPW4mbztyZXR1cm4gMHxpKmErKChuJnI+Pj4xNikqYStpKihuJm8+Pj4xNik8PDE2Pj4+MCl9fSl9LDcxNTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MT0cxMEU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMTA6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkqaX19KX0sOTkyMTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxcDpuKDIxOTMyKX0pfSw5ODk3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmxvZyxpPU1hdGguTE4yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkvaX19KX0sODA2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NpZ246bigzODc4Nyl9KX0sNzAyMDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDcyOTcwKSxhPU1hdGguYWJzLGM9TWF0aC5leHAscz1NYXRoLkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9TWF0aC5zaW5oKC0yZS0xNyl9KSl9LHtzaW5oOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQ9K3QpPDE/KGkodCktaSgtdCkpLzI6KGModC0xKS1jKC10LTEpKSoocy8yKX19KX0sODU3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Mjk3MCksaT1NYXRoLmV4cDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt0YW5oOmZ1bmN0aW9uKHQpe3ZhciBlPW8odD0rdCksbj1vKC10KTtyZXR1cm4gZT09MS8wPzE6bj09MS8wPy0xOihlLW4pLyhpKHQpK2koLXQpKX19KX0sMTE3NzM6ZnVuY3Rpb24odCxlLG4pe24oNTExMjgpKE1hdGgsIk1hdGgiLCEwKX0sMTU3NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5jZWlsLGk9TWF0aC5mbG9vcjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt0cnVuYzpmdW5jdGlvbih0KXtyZXR1cm4odD4wP2k6bykodCl9fSl9LDcxODI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9big5MjkxMyksYz1uKDc2Mjk4KSxzPW4oMjQ1OTQpLHU9bigzMDI3MiksbD1uKDUzNDk4KSxmPW4oMzIxODcpLGQ9big1MDg2OCkscD1uKDEzMzM0KS5mLGg9big5NzI1NykuZix2PW4oMzc2MjApLmYsZz1uKDgyMzUwKS50cmltLHk9Ik51bWJlciIsbT1vLk51bWJlcixiPW0ucHJvdG90eXBlLHg9cyhkKGIpKT09eSx3PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHMsdT1sKHQsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgdSYmdS5sZW5ndGg+MilpZig0Mz09PShlPSh1PWcodSkpLmNoYXJDb2RlQXQoMCkpfHw0NT09PWUpe2lmKDg4PT09KG49dS5jaGFyQ29kZUF0KDIpKXx8MTIwPT09bilyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1lKXtzd2l0Y2godS5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6cj0yLG89NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpyPTgsbz01NTticmVhaztkZWZhdWx0OnJldHVybit1fWZvcihhPShpPXUuc2xpY2UoMikpLmxlbmd0aCxjPTA7YzxhO2MrKylpZigocz1pLmNoYXJDb2RlQXQoYykpPDQ4fHxzPm8pcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQoaSxyKX1yZXR1cm4rdX07aWYoaSh5LCFtKCIgMG8xIil8fCFtKCIwYjEiKXx8bSgiKzB4MSIpKSl7Zm9yKHZhciBFLGo9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBqJiYoeD9mKChmdW5jdGlvbigpe2IudmFsdWVPZi5jYWxsKG4pfSkpOnMobikhPXkpP3UobmV3IG0odyhlKSksbixqKTp3KGUpfSxDPXI/cChtKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksaz0wO0MubGVuZ3RoPms7aysrKWMobSxFPUNba10pJiYhYyhqLEUpJiZ2KGosRSxoKG0sRSkpO2oucHJvdG90eXBlPWIsYi5jb25zdHJ1Y3Rvcj1qLGEobyx5LGopfX0sMjYwNjM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LDk2NzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNGaW5pdGU6big4OTU0Mil9KX0sMzMxMDA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzSW50ZWdlcjpuKDM4MjU3KX0pfSw0MTkyODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNOYU46ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSl9LDE1ODY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzgyNTcpLGk9TWF0aC5hYnM7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpJiZpKHQpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw4ODcxNTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LDM2OTk1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNSU5fU0FGRV9JTlRFR0VSOi05MDA3MTk5MjU0NzQwOTkxfSl9LDExMjI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ0OTcpO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwLGZvcmNlZDpOdW1iZXIucGFyc2VGbG9hdCE9b30se3BhcnNlRmxvYXQ6b30pfSw2Mzc2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4NDYpO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwLGZvcmNlZDpOdW1iZXIucGFyc2VJbnQhPW99LHtwYXJzZUludDpvfSl9LDEzMDY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQzNDE2KSxpPW4oNTM5OTcpLGE9big2ODI1MyksYz1uKDMyMTg3KSxzPTEuLnRvRml4ZWQsdT1NYXRoLmZsb29yLGw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZT9uOmUlMj09MT9sKHQsZS0xLG4qdCk6bCh0KnQsZS8yLG4pfTtyKHt0YXJnZXQ6Ik51bWJlciIscHJvdG86ITAsZm9yY2VkOnMmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhYygoZnVuY3Rpb24oKXtzLmNhbGwoe30pfSkpfSx7dG9GaXhlZDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsYyxzPWkodGhpcyksZj1vKHQpLGQ9WzAsMCwwLDAsMCwwXSxwPSIiLGg9IjAiLHY9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1lOysrbjw2OylyKz10KmRbbl0sZFtuXT1yJTFlNyxyPXUoci8xZTcpfSxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT02LG49MDstLWU+PTA7KW4rPWRbZV0sZFtlXT11KG4vdCksbj1uJXQqMWU3fSx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTYsZT0iIjstLXQ+PTA7KWlmKCIiIT09ZXx8MD09PXR8fDAhPT1kW3RdKXt2YXIgbj1TdHJpbmcoZFt0XSk7ZT0iIj09PWU/bjplK2EuY2FsbCgiMCIsNy1uLmxlbmd0aCkrbn1yZXR1cm4gZX07aWYoZjwwfHxmPjIwKXRocm93IFJhbmdlRXJyb3IoIkluY29ycmVjdCBmcmFjdGlvbiBkaWdpdHMiKTtpZihzIT1zKXJldHVybiJOYU4iO2lmKHM8PS0xZTIxfHxzPj0xZTIxKXJldHVybiBTdHJpbmcocyk7aWYoczwwJiYocD0iLSIscz0tcykscz4xZS0yMSlpZihuPShlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dDtuPj00MDk2OyllKz0xMixuLz00MDk2O2Zvcig7bj49MjspZSs9MSxuLz0yO3JldHVybiBlfShzKmwoMiw2OSwxKSktNjkpPDA/cypsKDIsLWUsMSk6cy9sKDIsZSwxKSxuKj00NTAzNTk5NjI3MzcwNDk2LChlPTUyLWUpPjApe2Zvcih2KDAsbikscj1mO3I+PTc7KXYoMWU3LDApLHItPTc7Zm9yKHYobCgxMCxyLDEpLDApLHI9ZS0xO3I+PTIzOylnKDE8PDIzKSxyLT0yMztnKDE8PHIpLHYoMSwxKSxnKDIpLGg9eSgpfWVsc2UgdigwLG4pLHYoMTw8LWUsMCksaD15KCkrYS5jYWxsKCIwIixmKTtyZXR1cm4gaD1mPjA/cCsoKGM9aC5sZW5ndGgpPD1mPyIwLiIrYS5jYWxsKCIwIixmLWMpK2g6aC5zbGljZSgwLGMtZikrIi4iK2guc2xpY2UoYy1mKSk6cCtofX0pfSwzMjI5MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDUzOTk3KSxhPTEuLnRvUHJlY2lzaW9uO3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1hLmNhbGwoMSx2b2lkIDApfSkpfHwhbygoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpfSx7dG9QcmVjaXNpb246ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/YS5jYWxsKGkodGhpcykpOmEuY2FsbChpKHRoaXMpLHQpfX0pfSwzNzQ4MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4Njg1KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PW99LHthc3NpZ246b30pfSw0NTU1MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLHNoYW06IW4oNjI1NTYpfSx7Y3JlYXRlOm4oNTA4NjgpfSl9LDE5Mjc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDg2NDcwKSxzPW4oMzc2MjApO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fZGVmaW5lR2V0dGVyX186ZnVuY3Rpb24odCxlKXtzLmYoYSh0aGlzKSx0LHtnZXQ6YyhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSw1MTE3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnRpZXM6big4NjQwMSl9KX0sNTgxNjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1Nik7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFvLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0eTpuKDM3NjIwKS5mfSl9LDkxMjA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDg2NDcwKSxzPW4oMzc2MjApO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fZGVmaW5lU2V0dGVyX186ZnVuY3Rpb24odCxlKXtzLmYoYSh0aGlzKSx0LHtzZXQ6YyhlKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSw4NzQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykuZW50cmllcztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2VudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9fSl9LDc1ODA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ1MjApLGk9bigzMjE4NyksYT1uKDEwNTkyKSxjPW4oOTYwMykub25GcmVlemUscz1PYmplY3QuZnJlZXplO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDppKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohb30se2ZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmYSh0KT9zKGModCkpOnR9fSl9LDQ2MTQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big1ODgxMCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtmcm9tRW50cmllczpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gbyh0LChmdW5jdGlvbih0LG4pe2koZSx0LG4pfSksdm9pZCAwLCEwKSxlfX0pfSwxNTA3NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oOTU3MyksYT1uKDk3MjU3KS5mLGM9big2MjU1Nikscz1vKChmdW5jdGlvbigpe2EoMSl9KSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFjfHxzLHNoYW06IWN9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQpLGUpfX0pfSw1ODMyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oMjQ0MTUpLGE9big5NTczKSxjPW4oOTcyNTcpLHM9big1ODgxMCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1hKHQpLG89Yy5mLHU9aShyKSxsPXt9LGY9MDt1Lmxlbmd0aD5mOyl2b2lkIDAhPT0obj1vKHIsZT11W2YrK10pKSYmcyhsLGUsbik7cmV0dXJuIGx9fSl9LDYwNTI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigyNjkzNykuZjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOml9KX0sNzQ5NTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNjQ5NjUpLGM9big3MTYwOCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKSxzaGFtOiFjfSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fSl9LDUxNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0V4dGVuc2libGU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4hIWkodCkmJighYXx8YSh0KSl9fSl9LDg5NzU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNGcm96ZW47cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzRnJvemVuOmZ1bmN0aW9uKHQpe3JldHVybiFpKHQpfHwhIWEmJmEodCl9fSl9LDE4Mzc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNTZWFsZWQ7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7YSgxKX0pKX0se2lzU2VhbGVkOmZ1bmN0aW9uKHQpe3JldHVybiFpKHQpfHwhIWEmJmEodCl9fSl9LDU0NzgxOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpczpuKDc2NDgyKX0pfSw5MjUyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTkyMDkpLGk9bigyNTUwNyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm4oMzIxODcpKChmdW5jdGlvbigpe2koMSl9KSl9LHtrZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSw3MjU2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big1MzQ5OCkscz1uKDY0OTY1KSx1PW4oOTcyNTcpLmY7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19sb29rdXBHZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxuPWEodGhpcykscj1jKHQsITApO2Rve2lmKGU9dShuLHIpKXJldHVybiBlLmdldH13aGlsZShuPXMobikpfX0pfSwxMDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cFNldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuc2V0fXdoaWxlKG49cyhuKSl9fSl9LDkzMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFhfSx7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJm8odCk/cyhpKHQpKTp0fX0pfSw1NjE1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oOTYwMykub25GcmVlemUsYT1uKDc0NTIwKSxjPW4oMzIxODcpLHM9T2JqZWN0LnNlYWw7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFhfSx7c2VhbDpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDQxNDU2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtzZXRQcm90b3R5cGVPZjpuKDcxODQyKX0pfSwzNDUyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDYxMyksbz1uKDkyOTEzKSxpPW4oMTk3NTgpO3J8fG8oT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGkse3Vuc2FmZTohMH0pfSw3Mjg1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM1NjcpLnZhbHVlcztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3ZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sMTk0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7Z2xvYmFsOiEwLGZvcmNlZDpwYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDMzNDM3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7Z2xvYmFsOiEwLGZvcmNlZDpwYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTc2Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4MzA4MyksYT1uKDMxMTUpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7YWxsU2V0dGxlZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49aS5mKGUpLHI9bi5yZXNvbHZlLHM9bi5yZWplY3QsdT1hKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxpPVtdLGE9MCxzPTE7Yyh0LChmdW5jdGlvbih0KXt2YXIgbz1hKyssYz0hMTtpLnB1c2godm9pZCAwKSxzKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7Y3x8KGM9ITAsaVtvXT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9LC0tc3x8cihpKSl9KSwoZnVuY3Rpb24odCl7Y3x8KGM9ITAsaVtvXT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnR9LC0tc3x8cihpKSl9KSl9KSksLS1zfHxyKGkpfSkpO3JldHVybiB1LmVycm9yJiZzKHUudmFsdWUpLG4ucHJvbWlzZX19KX0sNDI0OTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigzOTQ1NyksYT1uKDMyMTg3KSxjPW4oNzcwMSkscz1uKDEzOTc5KSx1PW4oNjMxMzQpLGw9big5MjkxMyk7cih7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohIWkmJmEoKGZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuZmluYWxseS5jYWxsKHt0aGVuOmZ1bmN0aW9uKCl7fX0sKGZ1bmN0aW9uKCl7fSkpfSkpfSx7ZmluYWxseTpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMsYygiUHJvbWlzZSIpKSxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0O3JldHVybiB0aGlzLnRoZW4obj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX06dCxuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3Rocm93IG59KSl9OnQpfX0pLG98fCJmdW5jdGlvbiIhPXR5cGVvZiBpfHxpLnByb3RvdHlwZS5maW5hbGx5fHxsKGkucHJvdG90eXBlLCJmaW5hbGx5IixjKCJQcm9taXNlIikucHJvdG90eXBlLmZpbmFsbHkpfSwxMTY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhLGM9bigxNDA0NCkscz1uKDY1NjcyKSx1PW4oODk1NTgpLGw9big3NzAxKSxmPW4oMzk0NTcpLGQ9big5MjkxMykscD1uKDE5MjYpLGg9big1MTEyOCksdj1uKDY3NTM4KSxnPW4oMTA1OTIpLHk9big4NjQ3MCksbT1uKDU5Mzc5KSxiPW4oMjQ1OTQpLHg9big3Njc3Myksdz1uKDQxMzM0KSxFPW4oNDc5Niksaj1uKDEzOTc5KSxDPW4oMjE3NDQpLnNldCxrPW4oNjU1NTUpLFM9big2MzEzNCksTz1uKDgzNjIwKSxBPW4oODMwODMpLEk9bigzMTE1KSxNPW4oODk4MjcpLFQ9big2NDUwNCksXz1uKDIzNzI0KSxMPW4oNzkwNzEpLFI9Xygic3BlY2llcyIpLFA9IlByb21pc2UiLE49TS5nZXQsRD1NLnNldCxGPU0uZ2V0dGVyRm9yKFApLFU9ZixCPXUuVHlwZUVycm9yLHo9dS5kb2N1bWVudCxIPXUucHJvY2VzcyxWPWwoImZldGNoIikscT1BLmYsVz1xLEc9InByb2Nlc3MiPT1iKEgpLFo9ISEoeiYmei5jcmVhdGVFdmVudCYmdS5kaXNwYXRjaEV2ZW50KSwkPSJ1bmhhbmRsZWRyZWplY3Rpb24iLFk9VChQLChmdW5jdGlvbigpe2lmKCEoeChVKSE9PVN0cmluZyhVKSkpe2lmKDY2PT09TClyZXR1cm4hMDtpZighRyYmImZ1bmN0aW9uIiE9dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudClyZXR1cm4hMH1pZihzJiYhVS5wcm90b3R5cGUuZmluYWxseSlyZXR1cm4hMDtpZihMPj01MSYmL25hdGl2ZSBjb2RlLy50ZXN0KFUpKXJldHVybiExO3ZhciB0PVUucmVzb2x2ZSgxKSxlPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4odC5jb25zdHJ1Y3Rvcj17fSlbUl09ZSwhKHQudGhlbigoZnVuY3Rpb24oKXt9KSlpbnN0YW5jZW9mIGUpfSkpLEo9WXx8IUUoKGZ1bmN0aW9uKHQpe1UuYWxsKHQpLmNhdGNoKChmdW5jdGlvbigpe30pKX0pKSxLPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiEoIWcodCl8fCJmdW5jdGlvbiIhPXR5cGVvZihlPXQudGhlbikpJiZlfSxYPWZ1bmN0aW9uKHQsZSxuKXtpZighZS5ub3RpZmllZCl7ZS5ub3RpZmllZD0hMDt2YXIgcj1lLnJlYWN0aW9ucztrKChmdW5jdGlvbigpe2Zvcih2YXIgbz1lLnZhbHVlLGk9MT09ZS5zdGF0ZSxhPTA7ci5sZW5ndGg+YTspe3ZhciBjLHMsdSxsPXJbYSsrXSxmPWk/bC5vazpsLmZhaWwsZD1sLnJlc29sdmUscD1sLnJlamVjdCxoPWwuZG9tYWluO3RyeXtmPyhpfHwoMj09PWUucmVqZWN0aW9uJiZudCh0LGUpLGUucmVqZWN0aW9uPTEpLCEwPT09Zj9jPW86KGgmJmguZW50ZXIoKSxjPWYobyksaCYmKGguZXhpdCgpLHU9ITApKSxjPT09bC5wcm9taXNlP3AoQigiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKToocz1LKGMpKT9zLmNhbGwoYyxkLHApOmQoYykpOnAobyl9Y2F0Y2godCl7aCYmIXUmJmguZXhpdCgpLHAodCl9fWUucmVhY3Rpb25zPVtdLGUubm90aWZpZWQ9ITEsbiYmIWUucmVqZWN0aW9uJiZ0dCh0LGUpfSkpfX0sUT1mdW5jdGlvbih0LGUsbil7dmFyIHIsbztaPygocj16LmNyZWF0ZUV2ZW50KCJFdmVudCIpKS5wcm9taXNlPWUsci5yZWFzb249bixyLmluaXRFdmVudCh0LCExLCEwKSx1LmRpc3BhdGNoRXZlbnQocikpOnI9e3Byb21pc2U6ZSxyZWFzb246bn0sKG89dVsib24iK3RdKT9vKHIpOnQ9PT0kJiZPKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSx0dD1mdW5jdGlvbih0LGUpe0MuY2FsbCh1LChmdW5jdGlvbigpe3ZhciBuLHI9ZS52YWx1ZTtpZihldChlKSYmKG49SSgoZnVuY3Rpb24oKXtHP0guZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixyLHQpOlEoJCx0LHIpfSkpLGUucmVqZWN0aW9uPUd8fGV0KGUpPzI6MSxuLmVycm9yKSl0aHJvdyBuLnZhbHVlfSkpfSxldD1mdW5jdGlvbih0KXtyZXR1cm4gMSE9PXQucmVqZWN0aW9uJiYhdC5wYXJlbnR9LG50PWZ1bmN0aW9uKHQsZSl7Qy5jYWxsKHUsKGZ1bmN0aW9uKCl7Rz9ILmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLHQpOlEoInJlamVjdGlvbmhhbmRsZWQiLHQsZS52YWx1ZSl9KSl9LHJ0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihvKXt0KGUsbixvLHIpfX0sb3Q9ZnVuY3Rpb24odCxlLG4scil7ZS5kb25lfHwoZS5kb25lPSEwLHImJihlPXIpLGUudmFsdWU9bixlLnN0YXRlPTIsWCh0LGUsITApKX0saXQ9ZnVuY3Rpb24odCxlLG4scil7aWYoIWUuZG9uZSl7ZS5kb25lPSEwLHImJihlPXIpO3RyeXtpZih0PT09bil0aHJvdyBCKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBvPUsobik7bz9rKChmdW5jdGlvbigpe3ZhciByPXtkb25lOiExfTt0cnl7by5jYWxsKG4scnQoaXQsdCxyLGUpLHJ0KG90LHQscixlKSl9Y2F0Y2gobil7b3QodCxyLG4sZSl9fSkpOihlLnZhbHVlPW4sZS5zdGF0ZT0xLFgodCxlLCExKSl9Y2F0Y2gobil7b3QodCx7ZG9uZTohMX0sbixlKX19fTtZJiYoVT1mdW5jdGlvbih0KXttKHRoaXMsVSxQKSx5KHQpLHIuY2FsbCh0aGlzKTt2YXIgZT1OKHRoaXMpO3RyeXt0KHJ0KGl0LHRoaXMsZSkscnQob3QsdGhpcyxlKSl9Y2F0Y2godCl7b3QodGhpcyxlLHQpfX0sKHI9ZnVuY3Rpb24odCl7RCh0aGlzLHt0eXBlOlAsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPXAoVS5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxlKXt2YXIgbj1GKHRoaXMpLHI9cShqKHRoaXMsVSkpO3JldHVybiByLm9rPSJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0LHIuZmFpbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxyLmRvbWFpbj1HP0guZG9tYWluOnZvaWQgMCxuLnBhcmVudD0hMCxuLnJlYWN0aW9ucy5wdXNoKHIpLDAhPW4uc3RhdGUmJlgodGhpcyxuLCExKSxyLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcixlPU4odCk7dGhpcy5wcm9taXNlPXQsdGhpcy5yZXNvbHZlPXJ0KGl0LHQsZSksdGhpcy5yZWplY3Q9cnQob3QsdCxlKX0sQS5mPXE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1VfHx0PT09aT9uZXcgbyh0KTpXKHQpfSxzfHwiZnVuY3Rpb24iIT10eXBlb2YgZnx8KGE9Zi5wcm90b3R5cGUudGhlbixkKGYucHJvdG90eXBlLCJ0aGVuIiwoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgVSgoZnVuY3Rpb24odCxlKXthLmNhbGwobix0LGUpfSkpLnRoZW4odCxlKX0pLHt1bnNhZmU6ITB9KSwiZnVuY3Rpb24iPT10eXBlb2YgViYmYyh7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIFMoVSxWLmFwcGx5KHUsYXJndW1lbnRzKSl9fSkpKSxjKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6WX0se1Byb21pc2U6VX0pLGgoVSxQLCExLCEwKSx2KFApLGk9bChQKSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpZfSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXEodGhpcyk7cmV0dXJuIGUucmVqZWN0LmNhbGwodm9pZCAwLHQpLGUucHJvbWlzZX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpzfHxZfSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtyZXR1cm4gUyhzJiZ0aGlzPT09aT9VOnRoaXMsdCl9fSksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6Sn0se2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cShlKSxyPW4ucmVzb2x2ZSxvPW4ucmVqZWN0LGk9SSgoZnVuY3Rpb24oKXt2YXIgbj15KGUucmVzb2x2ZSksaT1bXSxhPTAsYz0xO3codCwoZnVuY3Rpb24odCl7dmFyIHM9YSsrLHU9ITE7aS5wdXNoKHZvaWQgMCksYysrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3V8fCh1PSEwLGlbc109dCwtLWN8fHIoaSkpfSksbyl9KSksLS1jfHxyKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLG4ucHJvbWlzZX0scmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49cShlKSxyPW4ucmVqZWN0LG89SSgoZnVuY3Rpb24oKXt2YXIgbz15KGUucmVzb2x2ZSk7dyh0LChmdW5jdGlvbih0KXtvLmNhbGwoZSx0KS50aGVuKG4ucmVzb2x2ZSxyKX0pKX0pKTtyZXR1cm4gby5lcnJvciYmcihvLnZhbHVlKSxuLnByb21pc2V9fSl9LDI5Mjg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigzMjE4Nykscz1vKCJSZWZsZWN0IiwiYXBwbHkiKSx1PUZ1bmN0aW9uLmFwcGx5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6IWMoKGZ1bmN0aW9uKCl7cygoZnVuY3Rpb24oKXt9KSl9KSl9LHthcHBseTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkodCksYShuKSxzP3ModCxlLG4pOnUuY2FsbCh0LGUsbil9fSl9LDYxOTQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxMDU5Mikscz1uKDUwODY4KSx1PW4oNzM3MzkpLGw9bigzMjE4NyksZj1vKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZD1sKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShmKChmdW5jdGlvbigpe30pLFtdLHQpaW5zdGFuY2VvZiB0KX0pKSxwPSFsKChmdW5jdGlvbigpe2YoKGZ1bmN0aW9uKCl7fSkpfSkpLGg9ZHx8cDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmgsc2hhbTpofSx7Y29uc3RydWN0OmZ1bmN0aW9uKHQsZSl7aSh0KSxhKGUpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz90OmkoYXJndW1lbnRzWzJdKTtpZihwJiYhZClyZXR1cm4gZih0LGUsbik7aWYodD09bil7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSl9dmFyIHI9W251bGxdO3JldHVybiByLnB1c2guYXBwbHkocixlKSxuZXcodS5hcHBseSh0LHIpKX12YXIgbz1uLnByb3RvdHlwZSxsPXMoYyhvKT9vOk9iamVjdC5wcm90b3R5cGUpLGg9RnVuY3Rpb24uYXBwbHkuY2FsbCh0LGwsZSk7cmV0dXJuIGMoaCk/aDpsfX0pfSwyNjk4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1uKDM3NjIwKTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOm4oMzIxODcpKChmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkoYy5mKHt9LDEse3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSksc2hhbTohb30se2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtpKHQpO3ZhciByPWEoZSwhMCk7aShuKTt0cnl7cmV0dXJuIGMuZih0LHIsbiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSwxMzY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big5NzI1NykuZjtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3ZhciBuPWkobyh0KSxlKTtyZXR1cm4hKG4mJiFuLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB0W2VdfX0pfSw0NjU5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODc1NzkpLGE9big5NzI1Nyk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW99LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5mKGkodCksZSl9fSl9LDcwMTM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big2NDk2NSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW4oNzE2MDgpfSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDgzMzEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big4NzU3OSksYT1uKDc2Mjk4KSxjPW4oOTcyNTcpLHM9big2NDk2NSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0OmZ1bmN0aW9uIHQoZSxuKXt2YXIgcix1LGw9YXJndW1lbnRzLmxlbmd0aDwzP2U6YXJndW1lbnRzWzJdO3JldHVybiBpKGUpPT09bD9lW25dOihyPWMuZihlLG4pKT9hKHIsInZhbHVlIik/ci52YWx1ZTp2b2lkIDA9PT1yLmdldD92b2lkIDA6ci5nZXQuY2FsbChsKTpvKHU9cyhlKSk/dCh1LG4sbCk6dm9pZCAwfX0pfSw2MDg2NTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhczpmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9fSl9LDY3NzA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCksIWl8fGkodCl9fSl9LDk2NjM4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7b3duS2V5czpuKDI0NDE1KX0pfSwzOTczMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLHNoYW06IW4oNzQ1MjApfSx7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7aSh0KTt0cnl7dmFyIGU9bygiT2JqZWN0IiwicHJldmVudEV4dGVuc2lvbnMiKTtyZXR1cm4gZSYmZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDg1Njg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big3OTg2MSksYT1uKDcxODQyKTthJiZyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0LGUpe28odCksaShlKTt0cnl7cmV0dXJuIGEodCxlKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDc0MTE1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9bigxMDU5MiksYT1uKDc2Mjk4KSxjPW4oMzIxODcpLHM9bigzNzYyMCksdT1uKDk3MjU3KSxsPW4oNjQ5NjUpLGY9bigxNDIwOSk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3ZhciB0PXMuZih7fSwiYSIse2NvbmZpZ3VyYWJsZTohMH0pO3JldHVybiExIT09UmVmbGVjdC5zZXQobCh0KSwiYSIsMSx0KX0pKX0se3NldDpmdW5jdGlvbiB0KGUsbixyKXt2YXIgYyxkLHA9YXJndW1lbnRzLmxlbmd0aDw0P2U6YXJndW1lbnRzWzNdLGg9dS5mKG8oZSksbik7aWYoIWgpe2lmKGkoZD1sKGUpKSlyZXR1cm4gdChkLG4scixwKTtoPWYoMCl9aWYoYShoLCJ2YWx1ZSIpKXtpZighMT09PWgud3JpdGFibGV8fCFpKHApKXJldHVybiExO2lmKGM9dS5mKHAsbikpe2lmKGMuZ2V0fHxjLnNldHx8ITE9PT1jLndyaXRhYmxlKXJldHVybiExO2MudmFsdWU9cixzLmYocCxuLGMpfWVsc2Ugcy5mKHAsbixmKDAscikpO3JldHVybiEwfXJldHVybiB2b2lkIDAhPT1oLnNldCYmKGguc2V0LmNhbGwocCxyKSwhMCl9fSl9LDQ5NDk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDMwMjcyKSxjPW4oMzc2MjApLmYscz1uKDEzMzM0KS5mLHU9big0MzIyMyksbD1uKDI1NDE5KSxmPW4oOTI5MTMpLGQ9bigzMjE4NykscD1uKDY3NTM4KSxoPW4oMjM3MjQpKCJtYXRjaCIpLHY9by5SZWdFeHAsZz12LnByb3RvdHlwZSx5PS9hL2csbT0vYS9nLGI9bmV3IHYoeSkhPT15O2lmKHImJmkoIlJlZ0V4cCIsIWJ8fGQoKGZ1bmN0aW9uKCl7cmV0dXJuIG1baF09ITEsdih5KSE9eXx8dihtKT09bXx8Ii9hL2kiIT12KHksImkiKX0pKSkpe2Zvcih2YXIgeD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMgaW5zdGFuY2VvZiB4LHI9dSh0KSxvPXZvaWQgMD09PWU7cmV0dXJuIW4mJnImJnQuY29uc3RydWN0b3I9PT14JiZvP3Q6YShiP25ldyB2KHImJiFvP3Quc291cmNlOnQsZSk6digocj10IGluc3RhbmNlb2YgeCk/dC5zb3VyY2U6dCxyJiZvP2wuY2FsbCh0KTplKSxuP3RoaXM6Zyx4KX0sdz1mdW5jdGlvbih0KXt0IGluIHh8fGMoeCx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZbdF19LHNldDpmdW5jdGlvbihlKXt2W3RdPWV9fSl9LEU9cyh2KSxqPTA7RS5sZW5ndGg+ajspdyhFW2orK10pO2cuY29uc3RydWN0b3I9eCx4LnByb3RvdHlwZT1nLGYobywiUmVnRXhwIix4KX1wKCJSZWdFeHAiKX0sODcyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzg1OTgpO3Ioe3RhcmdldDoiUmVnRXhwIixwcm90bzohMCxmb3JjZWQ6Ly4vLmV4ZWMhPT1vfSx7ZXhlYzpvfSl9LDE4Mjc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9bigyNTQxOSk7ciYmImciIT0vLi9nLmZsYWdzJiZvLmYoUmVnRXhwLnByb3RvdHlwZSwiZmxhZ3MiLHtjb25maWd1cmFibGU6ITAsZ2V0Oml9KX0sMzc1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTI5MTMpLG89big4NzU3OSksaT1uKDMyMTg3KSxhPW4oMjU0MTkpLGM9InRvU3RyaW5nIixzPVJlZ0V4cC5wcm90b3R5cGUsdT1zLnRvU3RyaW5nLGw9aSgoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pKSxmPXUubmFtZSE9YzsobHx8ZikmJnIoUmVnRXhwLnByb3RvdHlwZSxjLChmdW5jdGlvbigpe3ZhciB0PW8odGhpcyksZT1TdHJpbmcodC5zb3VyY2UpLG49dC5mbGFncztyZXR1cm4iLyIrZSsiLyIrU3RyaW5nKHZvaWQgMD09PW4mJnQgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIHMpP2EuY2FsbCh0KTpuKX0pLHt1bnNhZmU6ITB9KX0sNzQwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIlNldCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sNDE3NzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImFuY2hvciIpfSx7YW5jaG9yOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJuYW1lIix0KX19KX0sMzA0MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJpZyIpfSx7YmlnOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYmlnIiwiIiwiIil9fSl9LDE4MTc1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJibGluayIpfSx7Ymxpbms6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJibGluayIsIiIsIiIpfX0pfSw2Njg5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYm9sZCIpfSx7Ym9sZDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImIiLCIiLCIiKX19KX0sMTUzNzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjAxNDApLmNvZGVBdDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRBdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSw5NzY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigxNDA0NCksaT1uKDk3MjU3KS5mLGE9bigyNzg4NCksYz1uKDk5MzQ2KSxzPW4oNzAxMzIpLHU9big5MzkxNSksbD1uKDY1NjcyKSxmPSIiLmVuZHNXaXRoLGQ9TWF0aC5taW4scD11KCJlbmRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJlbmRzV2l0aCIpLCFyfHxyLndyaXRhYmxlKSkmJiFwfSx7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHModGhpcykpO2ModCk7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAscj1hKGUubGVuZ3RoKSxvPXZvaWQgMD09PW4/cjpkKGEobiksciksaT1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUsaSxvKTplLnNsaWNlKG8taS5sZW5ndGgsbyk9PT1pfX0pfSw4NTc2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZml4ZWQiKX0se2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywidHQiLCIiLCIiKX19KX0sODQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udGNvbG9yIil9LHtmb250Y29sb3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiZm9udCIsImNvbG9yIix0KX19KX0sOTIxOTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZvbnRzaXplIil9LHtmb250c2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250Iiwic2l6ZSIsdCl9fSl9LDEwNzQzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzY5NzYpLGk9U3RyaW5nLmZyb21DaGFyQ29kZSxhPVN0cmluZy5mcm9tQ29kZVBvaW50O3Ioe3RhcmdldDoiU3RyaW5nIixzdGF0OiEwLGZvcmNlZDohIWEmJjEhPWEubGVuZ3RofSx7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGgsYT0wO3I+YTspe2lmKGU9K2FyZ3VtZW50c1thKytdLG8oZSwxMTE0MTExKSE9PWUpdGhyb3cgUmFuZ2VFcnJvcihlKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO24ucHVzaChlPDY1NTM2P2koZSk6aSg1NTI5NisoKGUtPTY1NTM2KT4+MTApLGUlMTAyNCs1NjMyMCkpfXJldHVybiBuLmpvaW4oIiIpfX0pfSw3NDU2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big5OTM0NiksaT1uKDcwMTMyKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFuKDkzOTE1KSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhflN0cmluZyhpKHRoaXMpKS5pbmRleE9mKG8odCksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwxMjE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiaXRhbGljcyIpfSx7aXRhbGljczpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImkiLCIiLCIiKX19KX0sODIyMDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwMTQwKS5jaGFyQXQsbz1uKDg5ODI3KSxpPW4oNDYwNjEpLGE9IlN0cmluZyBJdGVyYXRvciIsYz1vLnNldCxzPW8uZ2V0dGVyRm9yKGEpO2koU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbih0KXtjKHRoaXMse3R5cGU6YSxzdHJpbmc6U3RyaW5nKHQpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciB0LGU9cyh0aGlzKSxuPWUuc3RyaW5nLG89ZS5pbmRleDtyZXR1cm4gbz49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1yKG4sbyksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSkpfSwyNjAxNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgibGluayIpfSx7bGluazpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJhIiwiaHJlZiIsdCl9fSl9LDgxMjc3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNzAxMzIpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oODc1NzkpLHU9bigyNDU5NCksbD1uKDQzMjIzKSxmPW4oMjU0MTkpLGQ9big2Njk3MSkscD1uKDMyMTg3KSxoPW4oMjM3MjQpLHY9bigxMzk3OSksZz1uKDUzMTQxKSx5PW4oODk4MjcpLG09big2NTY3MiksYj1oKCJtYXRjaEFsbCIpLHg9IlJlZ0V4cCBTdHJpbmciLHc9IlJlZ0V4cCBTdHJpbmcgSXRlcmF0b3IiLEU9eS5zZXQsaj15LmdldHRlckZvcih3KSxDPVJlZ0V4cC5wcm90b3R5cGUsaz1DLmV4ZWMsUz0iIi5tYXRjaEFsbCxPPSEhUyYmIXAoKGZ1bmN0aW9uKCl7ImEiLm1hdGNoQWxsKC8uLyl9KSksQT1vKChmdW5jdGlvbih0LGUsbixyKXtFKHRoaXMse3R5cGU6dyxyZWdleHA6dCxzdHJpbmc6ZSxnbG9iYWw6bix1bmljb2RlOnIsZG9uZTohMX0pfSkseCwoZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpO2lmKHQuZG9uZSlyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBlPXQucmVnZXhwLG49dC5zdHJpbmcscj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXtpZigib2JqZWN0IiE9dHlwZW9mKG49ci5jYWxsKHQsZSkpKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGV4ZWMgcmVzdWx0Iik7cmV0dXJuIG59cmV0dXJuIGsuY2FsbCh0LGUpfShlLG4pO3JldHVybiBudWxsPT09cj97dmFsdWU6dm9pZCAwLGRvbmU6dC5kb25lPSEwfTp0Lmdsb2JhbD8oIiI9PVN0cmluZyhyWzBdKSYmKGUubGFzdEluZGV4PWcobixhKGUubGFzdEluZGV4KSx0LnVuaWNvZGUpKSx7dmFsdWU6cixkb25lOiExfSk6KHQuZG9uZT0hMCx7dmFsdWU6cixkb25lOiExfSl9KSksST1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGMsdT1zKHRoaXMpLGw9U3RyaW5nKHQpO3JldHVybiBlPXYodSxSZWdFeHApLHZvaWQgMD09PShuPXUuZmxhZ3MpJiZ1IGluc3RhbmNlb2YgUmVnRXhwJiYhKCJmbGFncyJpbiBDKSYmKG49Zi5jYWxsKHUpKSxyPXZvaWQgMD09PW4/IiI6U3RyaW5nKG4pLG89bmV3IGUoZT09PVJlZ0V4cD91LnNvdXJjZTp1LHIpLGk9ISF+ci5pbmRleE9mKCJnIiksYz0hIX5yLmluZGV4T2YoInUiKSxvLmxhc3RJbmRleD1hKHUubGFzdEluZGV4KSxuZXcgQShvLGwsaSxjKX07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpPfSx7bWF0Y2hBbGw6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG89aSh0aGlzKTtpZihudWxsIT10KXtpZihsKHQpJiYhflN0cmluZyhpKCJmbGFncyJpbiBDP3QuZmxhZ3M6Zi5jYWxsKHQpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5tYXRjaEFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7aWYodm9pZCAwPT09KG49dFtiXSkmJm0mJiJSZWdFeHAiPT11KHQpJiYobj1JKSxudWxsIT1uKXJldHVybiBjKG4pLmNhbGwodCxvKX1lbHNlIGlmKE8pcmV0dXJuIFMuYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBlPVN0cmluZyhvKSxyPW5ldyBSZWdFeHAodCwiZyIpLG0/SS5jYWxsKHIsZSk6cltiXShlKX19KSxtfHxiIGluIEN8fGQoQyxiLEkpfSw2NTAwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDI3ODg0KSxhPW4oNzAxMzIpLGM9big1MzE0MSkscz1uKDM1NDU1KTtyKCJtYXRjaCIsMSwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihlKXt2YXIgbj1hKHRoaXMpLHI9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09cj9yLmNhbGwoZSxuKTpuZXcgUmVnRXhwKGUpW3RdKFN0cmluZyhuKSl9LGZ1bmN0aW9uKHQpe3ZhciByPW4oZSx0LHRoaXMpO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgYT1vKHQpLHU9U3RyaW5nKHRoaXMpO2lmKCFhLmdsb2JhbClyZXR1cm4gcyhhLHUpO3ZhciBsPWEudW5pY29kZTthLmxhc3RJbmRleD0wO2Zvcih2YXIgZixkPVtdLHA9MDtudWxsIT09KGY9cyhhLHUpKTspe3ZhciBoPVN0cmluZyhmWzBdKTtkW3BdPWgsIiI9PT1oJiYoYS5sYXN0SW5kZXg9Yyh1LGkoYS5sYXN0SW5kZXgpLGwpKSxwKyt9cmV0dXJuIDA9PT1wP251bGw6ZH1dfSkpfSw0NDAxOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNjU3MykuZW5kO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMzgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5zdGFydDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNDIxODQpfSx7cGFkU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODA1MTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big5NTczKSxpPW4oMjc4ODQpO3Ioe3RhcmdldDoiU3RyaW5nIixzdGF0OiEwfSx7cmF3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKHQucmF3KSxuPWkoZS5sZW5ndGgpLHI9YXJndW1lbnRzLmxlbmd0aCxhPVtdLGM9MDtuPmM7KWEucHVzaChTdHJpbmcoZVtjKytdKSksYzxyJiZhLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tjXSkpO3JldHVybiBhLmpvaW4oIiIpfX0pfSwxODgyMzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGVhdDpuKDY4MjUzKX0pfSwzMzMyMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big0MzQxNikscz1uKDcwMTMyKSx1PW4oNTMxNDEpLGw9bigzNTQ1NSksZj1NYXRoLm1heCxkPU1hdGgubWluLHA9TWF0aC5mbG9vcixoPS9cJChbJCYnYF18XGRcZD98PFtePl0qPikvZyx2PS9cJChbJCYnYF18XGRcZD8pL2c7cigicmVwbGFjZSIsMiwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihuLHIpe3ZhciBvPXModGhpcyksaT1udWxsPT1uP3ZvaWQgMDpuW3RdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChuLG8scik6ZS5jYWxsKFN0cmluZyhvKSxuLHIpfSxmdW5jdGlvbih0LGkpe3ZhciBzPW4oZSx0LHRoaXMsaSk7aWYocy5kb25lKXJldHVybiBzLnZhbHVlO3ZhciBwPW8odCksaD1TdHJpbmcodGhpcyksdj0iZnVuY3Rpb24iPT10eXBlb2YgaTt2fHwoaT1TdHJpbmcoaSkpO3ZhciBnPXAuZ2xvYmFsO2lmKGcpe3ZhciB5PXAudW5pY29kZTtwLmxhc3RJbmRleD0wfWZvcih2YXIgbT1bXTs7KXt2YXIgYj1sKHAsaCk7aWYobnVsbD09PWIpYnJlYWs7aWYobS5wdXNoKGIpLCFnKWJyZWFrOyIiPT09U3RyaW5nKGJbMF0pJiYocC5sYXN0SW5kZXg9dShoLGEocC5sYXN0SW5kZXgpLHkpKX1mb3IodmFyIHgsdz0iIixFPTAsaj0wO2o8bS5sZW5ndGg7aisrKXtiPW1bal07Zm9yKHZhciBDPVN0cmluZyhiWzBdKSxrPWYoZChjKGIuaW5kZXgpLGgubGVuZ3RoKSwwKSxTPVtdLE89MTtPPGIubGVuZ3RoO08rKylTLnB1c2godm9pZCAwPT09KHg9YltPXSk/eDpTdHJpbmcoeCkpO3ZhciBBPWIuZ3JvdXBzO2lmKHYpe3ZhciBJPVtDXS5jb25jYXQoUyxrLGgpO3ZvaWQgMCE9PUEmJkkucHVzaChBKTt2YXIgTT1TdHJpbmcoaS5hcHBseSh2b2lkIDAsSSkpfWVsc2UgTT1yKEMsaCxrLFMsQSxpKTtrPj1FJiYodys9aC5zbGljZShFLGspK00sRT1rK0MubGVuZ3RoKX1yZXR1cm4gdytoLnNsaWNlKEUpfV07ZnVuY3Rpb24gcih0LG4scixvLGEsYyl7dmFyIHM9cit0Lmxlbmd0aCx1PW8ubGVuZ3RoLGw9djtyZXR1cm4gdm9pZCAwIT09YSYmKGE9aShhKSxsPWgpLGUuY2FsbChjLGwsKGZ1bmN0aW9uKGUsaSl7dmFyIGM7c3dpdGNoKGkuY2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiB0O2Nhc2UiYCI6cmV0dXJuIG4uc2xpY2UoMCxyKTtjYXNlIiciOnJldHVybiBuLnNsaWNlKHMpO2Nhc2UiPCI6Yz1hW2kuc2xpY2UoMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIGw9K2k7aWYoMD09PWwpcmV0dXJuIGU7aWYobD51KXt2YXIgZj1wKGwvMTApO3JldHVybiAwPT09Zj9lOmY8PXU/dm9pZCAwPT09b1tmLTFdP2kuY2hhckF0KDEpOm9bZi0xXStpLmNoYXJBdCgxKTplfWM9b1tsLTFdfXJldHVybiB2b2lkIDA9PT1jPyIiOmN9KSl9fSkpfSwzMzA2NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big4NzU3OSksaT1uKDcwMTMyKSxhPW4oNzY0ODIpLGM9bigzNTQ1NSk7cigic2VhcmNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWkodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBpPW8odCkscz1TdHJpbmcodGhpcyksdT1pLmxhc3RJbmRleDthKHUsMCl8fChpLmxhc3RJbmRleD0wKTt2YXIgbD1jKGkscyk7cmV0dXJuIGEoaS5sYXN0SW5kZXgsdSl8fChpLmxhc3RJbmRleD11KSxudWxsPT09bD8tMTpsLmluZGV4fV19KSl9LDc0MTE3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzbWFsbCIpfSx7c21hbGw6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSwxNzQ5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU4NjApLG89big0MzIyMyksaT1uKDg3NTc5KSxhPW4oNzAxMzIpLGM9bigxMzk3OSkscz1uKDUzMTQxKSx1PW4oMjc4ODQpLGw9bigzNTQ1NSksZj1uKDM4NTk4KSxkPW4oMzIxODcpLHA9W10ucHVzaCxoPU1hdGgubWluLHY9NDI5NDk2NzI5NSxnPSFkKChmdW5jdGlvbigpe3JldHVybiFSZWdFeHAodiwieSIpfSkpO3IoInNwbGl0IiwyLChmdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIHI9ImMiPT0iYWJiYyIuc3BsaXQoLyhiKSovKVsxXXx8NCE9InRlc3QiLnNwbGl0KC8oPzopLywtMSkubGVuZ3RofHwyIT0iYWIiLnNwbGl0KC8oPzphYikqLykubGVuZ3RofHw0IT0iLiIuc3BsaXQoLyguPykoLj8pLykubGVuZ3RofHwiLiIuc3BsaXQoLygpKCkvKS5sZW5ndGg+MXx8IiIuc3BsaXQoLy4/LykubGVuZ3RoP2Z1bmN0aW9uKHQsbil7dmFyIHI9U3RyaW5nKGEodGhpcykpLGk9dm9pZCAwPT09bj92Om4+Pj4wO2lmKDA9PT1pKXJldHVybltdO2lmKHZvaWQgMD09PXQpcmV0dXJuW3JdO2lmKCFvKHQpKXJldHVybiBlLmNhbGwocix0LGkpO2Zvcih2YXIgYyxzLHUsbD1bXSxkPSh0Lmlnbm9yZUNhc2U/ImkiOiIiKSsodC5tdWx0aWxpbmU/Im0iOiIiKSsodC51bmljb2RlPyJ1IjoiIikrKHQuc3RpY2t5PyJ5IjoiIiksaD0wLGc9bmV3IFJlZ0V4cCh0LnNvdXJjZSxkKyJnIik7KGM9Zi5jYWxsKGcscikpJiYhKChzPWcubGFzdEluZGV4KT5oJiYobC5wdXNoKHIuc2xpY2UoaCxjLmluZGV4KSksYy5sZW5ndGg+MSYmYy5pbmRleDxyLmxlbmd0aCYmcC5hcHBseShsLGMuc2xpY2UoMSkpLHU9Y1swXS5sZW5ndGgsaD1zLGwubGVuZ3RoPj1pKSk7KWcubGFzdEluZGV4PT09Yy5pbmRleCYmZy5sYXN0SW5kZXgrKztyZXR1cm4gaD09PXIubGVuZ3RoPyF1JiZnLnRlc3QoIiIpfHxsLnB1c2goIiIpOmwucHVzaChyLnNsaWNlKGgpKSxsLmxlbmd0aD5pP2wuc2xpY2UoMCxpKTpsfToiMCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDA9PT10JiYwPT09bj9bXTplLmNhbGwodGhpcyx0LG4pfTplLFtmdW5jdGlvbihlLG4pe3ZhciBvPWEodGhpcyksaT1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChlLG8sbik6ci5jYWxsKFN0cmluZyhvKSxlLG4pfSxmdW5jdGlvbih0LG8pe3ZhciBhPW4ocix0LHRoaXMsbyxyIT09ZSk7aWYoYS5kb25lKXJldHVybiBhLnZhbHVlO3ZhciBmPWkodCksZD1TdHJpbmcodGhpcykscD1jKGYsUmVnRXhwKSx5PWYudW5pY29kZSxtPShmLmlnbm9yZUNhc2U/ImkiOiIiKSsoZi5tdWx0aWxpbmU/Im0iOiIiKSsoZi51bmljb2RlPyJ1IjoiIikrKGc/InkiOiJnIiksYj1uZXcgcChnP2Y6Il4oPzoiK2Yuc291cmNlKyIpIixtKSx4PXZvaWQgMD09PW8/djpvPj4+MDtpZigwPT09eClyZXR1cm5bXTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIG51bGw9PT1sKGIsZCk/W2RdOltdO2Zvcih2YXIgdz0wLEU9MCxqPVtdO0U8ZC5sZW5ndGg7KXtiLmxhc3RJbmRleD1nP0U6MDt2YXIgQyxrPWwoYixnP2Q6ZC5zbGljZShFKSk7aWYobnVsbD09PWt8fChDPWgodShiLmxhc3RJbmRleCsoZz8wOkUpKSxkLmxlbmd0aCkpPT09dylFPXMoZCxFLHkpO2Vsc2V7aWYoai5wdXNoKGQuc2xpY2UodyxFKSksai5sZW5ndGg9PT14KXJldHVybiBqO2Zvcih2YXIgUz0xO1M8PWsubGVuZ3RoLTE7UysrKWlmKGoucHVzaChrW1NdKSxqLmxlbmd0aD09PXgpcmV0dXJuIGo7RT13PUN9fXJldHVybiBqLnB1c2goZC5zbGljZSh3KSksan1dfSksIWcpfSw4MDM2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigxNDA0NCksaT1uKDk3MjU3KS5mLGE9bigyNzg4NCksYz1uKDk5MzQ2KSxzPW4oNzAxMzIpLHU9big5MzkxNSksbD1uKDY1NjcyKSxmPSIiLnN0YXJ0c1dpdGgsZD1NYXRoLm1pbixwPXUoInN0YXJ0c1dpdGgiKTtvKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEhKGx8fHB8fChyPWkoU3RyaW5nLnByb3RvdHlwZSwic3RhcnRzV2l0aCIpLCFyfHxyLndyaXRhYmxlKSkmJiFwfSx7c3RhcnRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hKGQoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZS5sZW5ndGgpKSxyPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxyLG4pOmUuc2xpY2UobixuK3IubGVuZ3RoKT09PXJ9fSl9LDI4MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdHJpa2UiKX0se3N0cmlrZTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN0cmlrZSIsIiIsIiIpfX0pfSw2Nzk0MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3ViIil9LHtzdWI6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdWIiLCIiLCIiKX19KX0sNDQwNTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN1cCIpfSx7c3VwOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3VwIiwiIiwiIil9fSl9LDc0Nzk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5lbmQsaT1uKDg0NzU0KSgidHJpbUVuZCIpLGE9aT9mdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfToiIi50cmltRW5kO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1FbmQ6YSx0cmltUmlnaHQ6YX0pfSw2OTE4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkuc3RhcnQsaT1uKDg0NzU0KSgidHJpbVN0YXJ0IiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1TdGFydDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOml9LHt0cmltU3RhcnQ6YSx0cmltTGVmdDphfSl9LDQzMzk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS50cmltO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big4NDc1NCkoInRyaW0iKX0se3RyaW06ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sNTEwOTA6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJhc3luY0l0ZXJhdG9yIil9LDI0Nzg1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9big3NjI5OCksYz1uKDEwNTkyKSxzPW4oMzc2MjApLmYsdT1uKDk5NjI1KSxsPWkuU3ltYm9sO2lmKG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBsJiYoISgiZGVzY3JpcHRpb24iaW4gbC5wcm90b3R5cGUpfHx2b2lkIDAhPT1sKCkuZGVzY3JpcHRpb24pKXt2YXIgZj17fSxkPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDwxfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/dm9pZCAwOlN0cmluZyhhcmd1bWVudHNbMF0pLGU9dGhpcyBpbnN0YW5jZW9mIGQ/bmV3IGwodCk6dm9pZCAwPT09dD9sKCk6bCh0KTtyZXR1cm4iIj09PXQmJihmW2VdPSEwKSxlfTt1KGQsbCk7dmFyIHA9ZC5wcm90b3R5cGU9bC5wcm90b3R5cGU7cC5jb25zdHJ1Y3Rvcj1kO3ZhciBoPXAudG9TdHJpbmcsdj0iU3ltYm9sKHRlc3QpIj09U3RyaW5nKGwoInRlc3QiKSksZz0vXlN5bWJvbFwoKC4qKVwpW14pXSskLztzKHAsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWModGhpcyk/dGhpcy52YWx1ZU9mKCk6dGhpcyxlPWguY2FsbCh0KTtpZihhKGYsdCkpcmV0dXJuIiI7dmFyIG49dj9lLnNsaWNlKDcsLTEpOmUucmVwbGFjZShnLCIkMSIpO3JldHVybiIiPT09bj92b2lkIDA6bn19KSxyKHtnbG9iYWw6ITAsZm9yY2VkOiEwfSx7U3ltYm9sOmR9KX19LDg5MTc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJoYXNJbnN0YW5jZSIpfSw1NDc4NjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImlzQ29uY2F0U3ByZWFkYWJsZSIpfSwxMjgxNjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIml0ZXJhdG9yIil9LDY1Njc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNzcwMSksYT1uKDY1NjcyKSxjPW4oNjI1NTYpLHM9big5MDE0KSx1PW4oMTY0MTApLGw9bigzMjE4NyksZj1uKDc2Mjk4KSxkPW4oNjE5OSkscD1uKDEwNTkyKSxoPW4oODc1NzkpLHY9bigxOTIwOSksZz1uKDk1NzMpLHk9big1MzQ5OCksbT1uKDE0MjA5KSxiPW4oNTA4NjgpLHg9bigyNTUwNyksdz1uKDEzMzM0KSxFPW4oMjY5MzcpLGo9big1Njk5MSksQz1uKDk3MjU3KSxrPW4oMzc2MjApLFM9big0MTYyOCksTz1uKDY2OTcxKSxBPW4oOTI5MTMpLEk9big2MjA1NCksTT1uKDgzMTk3KSxUPW4oMjMwNzApLF89big2NzI5KSxMPW4oMjM3MjQpLFI9big3MzkxNiksUD1uKDkyMjc1KSxOPW4oNTExMjgpLEQ9big4OTgyNyksRj1uKDMwMDI1KS5mb3JFYWNoLFU9TSgiaGlkZGVuIiksQj0iU3ltYm9sIix6PUwoInRvUHJpbWl0aXZlIiksSD1ELnNldCxWPUQuZ2V0dGVyRm9yKEIpLHE9T2JqZWN0LnByb3RvdHlwZSxXPW8uU3ltYm9sLEc9aSgiSlNPTiIsInN0cmluZ2lmeSIpLFo9Qy5mLCQ9ay5mLFk9RS5mLEo9Uy5mLEs9SSgic3ltYm9scyIpLFg9SSgib3Atc3ltYm9scyIpLFE9SSgic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeSIpLHR0PUkoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKSxldD1JKCJ3a3MiKSxudD1vLlFPYmplY3QscnQ9IW50fHwhbnQucHJvdG90eXBlfHwhbnQucHJvdG90eXBlLmZpbmRDaGlsZCxvdD1jJiZsKChmdW5jdGlvbigpe3JldHVybiA3IT1iKCQoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gJCh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/ZnVuY3Rpb24odCxlLG4pe3ZhciByPVoocSxlKTtyJiZkZWxldGUgcVtlXSwkKHQsZSxuKSxyJiZ0IT09cSYmJChxLGUscil9OiQsaXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1LW3RdPWIoVy5wcm90b3R5cGUpO3JldHVybiBIKG4se3R5cGU6Qix0YWc6dCxkZXNjcmlwdGlvbjplfSksY3x8KG4uZGVzY3JpcHRpb249ZSksbn0sYXQ9cyYmInN5bWJvbCI9PXR5cGVvZiBXLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdCh0KWluc3RhbmNlb2YgV30sY3Q9ZnVuY3Rpb24odCxlLG4pe3Q9PT1xJiZjdChYLGUsbiksaCh0KTt2YXIgcj15KGUsITApO3JldHVybiBoKG4pLGYoSyxyKT8obi5lbnVtZXJhYmxlPyhmKHQsVSkmJnRbVV1bcl0mJih0W1VdW3JdPSExKSxuPWIobix7ZW51bWVyYWJsZTptKDAsITEpfSkpOihmKHQsVSl8fCQodCxVLG0oMSx7fSkpLHRbVV1bcl09ITApLG90KHQscixuKSk6JCh0LHIsbil9LHN0PWZ1bmN0aW9uKHQsZSl7aCh0KTt2YXIgbj1nKGUpLHI9eChuKS5jb25jYXQoZHQobikpO3JldHVybiBGKHIsKGZ1bmN0aW9uKGUpe2MmJiF1dC5jYWxsKG4sZSl8fGN0KHQsZSxuW2VdKX0pKSx0fSx1dD1mdW5jdGlvbih0KXt2YXIgZT15KHQsITApLG49Si5jYWxsKHRoaXMsZSk7cmV0dXJuISh0aGlzPT09cSYmZihLLGUpJiYhZihYLGUpKSYmKCEobnx8IWYodGhpcyxlKXx8IWYoSyxlKXx8Zih0aGlzLFUpJiZ0aGlzW1VdW2VdKXx8bil9LGx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Zyh0KSxyPXkoZSwhMCk7aWYobiE9PXF8fCFmKEsscil8fGYoWCxyKSl7dmFyIG89WihuLHIpO3JldHVybiFvfHwhZihLLHIpfHxmKG4sVSkmJm5bVV1bcl18fChvLmVudW1lcmFibGU9ITApLG99fSxmdD1mdW5jdGlvbih0KXt2YXIgZT1ZKGcodCkpLG49W107cmV0dXJuIEYoZSwoZnVuY3Rpb24odCl7ZihLLHQpfHxmKFQsdCl8fG4ucHVzaCh0KX0pKSxufSxkdD1mdW5jdGlvbih0KXt2YXIgZT10PT09cSxuPVkoZT9YOmcodCkpLHI9W107cmV0dXJuIEYobiwoZnVuY3Rpb24odCl7IWYoSyx0KXx8ZSYmIWYocSx0KXx8ci5wdXNoKEtbdF0pfSkpLHJ9OyhzfHwoVz1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBXKXRocm93IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP1N0cmluZyhhcmd1bWVudHNbMF0pOnZvaWQgMCxlPV8odCksbj1mdW5jdGlvbih0KXt0aGlzPT09cSYmbi5jYWxsKFgsdCksZih0aGlzLFUpJiZmKHRoaXNbVV0sZSkmJih0aGlzW1VdW2VdPSExKSxvdCh0aGlzLGUsbSgxLHQpKX07cmV0dXJuIGMmJnJ0JiZvdChxLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGl0KGUsdCl9LEEoVy5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gVih0aGlzKS50YWd9KSksUy5mPXV0LGsuZj1jdCxDLmY9bHQsdy5mPUUuZj1mdCxqLmY9ZHQsYyYmKCQoVy5wcm90b3R5cGUsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWKHRoaXMpLmRlc2NyaXB0aW9ufX0pLGF8fEEocSwicHJvcGVydHlJc0VudW1lcmFibGUiLHV0LHt1bnNhZmU6ITB9KSkpLHV8fChSLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KEwodCksdCl9KSxyKHtnbG9iYWw6ITAsd3JhcDohMCxmb3JjZWQ6IXMsc2hhbTohc30se1N5bWJvbDpXfSksRih4KGV0KSwoZnVuY3Rpb24odCl7UCh0KX0pKSxyKHt0YXJnZXQ6QixzdGF0OiEwLGZvcmNlZDohc30se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aWYoZihRLGUpKXJldHVybiBRW2VdO3ZhciBuPVcoZSk7cmV0dXJuIFFbZV09bix0dFtuXT1lLG59LGtleUZvcjpmdW5jdGlvbih0KXtpZighYXQodCkpdGhyb3cgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihmKHR0LHQpKXJldHVybiB0dFt0XX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7cnQ9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3J0PSExfX0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohcyxzaGFtOiFjfSx7Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/Yih0KTpzdChiKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpjdCxkZWZpbmVQcm9wZXJ0aWVzOnN0LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpsdH0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohc30se2dldE93blByb3BlcnR5TmFtZXM6ZnQsZ2V0T3duUHJvcGVydHlTeW1ib2xzOmR0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmwoKGZ1bmN0aW9uKCl7ai5mKDEpfSkpfSx7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKHQpe3JldHVybiBqLmYodih0KSl9fSksRykmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6IXN8fGwoKGZ1bmN0aW9uKCl7dmFyIHQ9VygpO3JldHVybiJbbnVsbF0iIT1HKFt0XSl8fCJ7fSIhPUcoe2E6dH0pfHwie30iIT1HKE9iamVjdCh0KSl9KSl9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixvPVt0XSxpPTE7YXJndW1lbnRzLmxlbmd0aD5pOylvLnB1c2goYXJndW1lbnRzW2krK10pO2lmKHI9ZSwocChlKXx8dm9pZCAwIT09dCkmJiFhdCh0KSlyZXR1cm4gZChlKXx8KGU9ZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgciYmKGU9ci5jYWxsKHRoaXMsdCxlKSksIWF0KGUpKXJldHVybiBlfSksb1sxXT1lLEcuYXBwbHkobnVsbCxvKX19KTtXLnByb3RvdHlwZVt6XXx8TyhXLnByb3RvdHlwZSx6LFcucHJvdG90eXBlLnZhbHVlT2YpLE4oVyxCKSxUW1VdPSEwfSw5ODMwNjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm1hdGNoQWxsIil9LDYxOTI0OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2giKX0sMTIwMjU6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlIil9LDI4MzM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzZWFyY2giKX0sOTY0NTM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGVjaWVzIil9LDcwODYzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic3BsaXQiKX0sMjQ4MDI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ0b1ByaW1pdGl2ZSIpfSwxODI3MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvU3RyaW5nVGFnIil9LDQyNDExOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidW5zY29wYWJsZXMiKX0sNzQyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oOTk0MzEpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJjb3B5V2l0aGluIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gby5jYWxsKGkodGhpcyksdCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0pKX0sMTg1MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmV2ZXJ5LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJldmVyeSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDIwMjQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDY1ODk1KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKX0pKX0sMjgxNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMTM5NzkpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWx0ZXIiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9byhhKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLG49aSh0aGlzLHRoaXMuY29uc3RydWN0b3IpLHI9MCxzPWUubGVuZ3RoLHU9bmV3KGMobikpKHMpO3M+cjspdVtyXT1lW3IrK107cmV0dXJuIHV9KSl9LDc2NDQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maW5kSW5kZXgsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmRJbmRleCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDMzOTAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maW5kLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjY4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzgyODA6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJGbG9hdDY0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDg4NjM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5mb3JFYWNoLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmb3JFYWNoIiwoZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwxODU1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzU2MjcpOygwLG4oNzMwNzQpLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QpKCJmcm9tIixuKDIwNDU1KSxyKX0sODE0NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJpbmNsdWRlcyIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDk1MTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJpbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjQ0OTg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQxNiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwxNzE1MjpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDcwMzczOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4MzY3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big3MzA3NCksaT1uKDUwMDYzKSxhPW4oMjM3MjQpKCJpdGVyYXRvciIpLGM9ci5VaW50OEFycmF5LHM9aS52YWx1ZXMsdT1pLmtleXMsbD1pLmVudHJpZXMsZj1vLmFUeXBlZEFycmF5LGQ9by5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHA9YyYmYy5wcm90b3R5cGVbYV0saD0hIXAmJigidmFsdWVzIj09cC5uYW1lfHxudWxsPT1wLm5hbWUpLHY9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKGYodGhpcykpfTtkKCJlbnRyaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKGYodGhpcykpfSkpLGQoImtleXMiLChmdW5jdGlvbigpe3JldHVybiB1LmNhbGwoZih0aGlzKSl9KSksZCgidmFsdWVzIix2LCFoKSxkKGEsdiwhaCl9LDIzNTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uam9pbjtpKCJqb2luIiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuYXBwbHkobyh0aGlzKSxhcmd1bWVudHMpfSkpfSwyNzI5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big0OTI0OSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImxhc3RJbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyNDQ1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkubWFwLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoIm1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KGMoaSh0LHQuY29uc3RydWN0b3IpKSkoZSl9KSl9KSl9LDUwNDgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDM1NjI3KSxpPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QpKCJvZiIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KGkodGhpcykpKGUpO2U+dDspblt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gbn0pLG8pfSw3NTQ5OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMjM2NikucmlnaHQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZVJpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwzOTMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5sZWZ0LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2UiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDg3NTY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9TWF0aC5mbG9vcjtpKCJyZXZlcnNlIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLG49byhlKS5sZW5ndGgscj1hKG4vMiksaT0wO2k8cjspdD1lW2ldLGVbaSsrXT1lWy0tbl0sZVtuXT10O3JldHVybiBlfSkpfSw4NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDI3ODg0KSxpPW4oNjA1NTgpLGE9bigxOTIwOSksYz1uKDMyMTg3KSxzPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic2V0IiwoZnVuY3Rpb24odCl7cyh0aGlzKTt2YXIgZT1pKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLG49dGhpcy5sZW5ndGgscj1hKHQpLGM9byhyLmxlbmd0aCksdT0wO2lmKGMrZT5uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCIpO2Zvcig7dTxjOyl0aGlzW2UrdV09clt1KytdfSksYygoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNldCh7fSl9KSkpfSwxNzYwNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMzk3OSksaT1uKDMyMTg3KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3Iscz1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS5zbGljZTtzKCJzbGljZSIsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXUuY2FsbChhKHRoaXMpLHQsZSkscj1vKHRoaXMsdGhpcy5jb25zdHJ1Y3RvciksaT0wLHM9bi5sZW5ndGgsbD1uZXcoYyhyKSkocyk7cz5pOylsW2ldPW5baSsrXTtyZXR1cm4gbH0pLGkoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zbGljZSgpfSkpKX0sNzM1NjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLnNvbWUsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInNvbWUiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwxMTg3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPVtdLnNvcnQ7aSgic29ydCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLmNhbGwobyh0aGlzKSx0KX0pKX0sNjA5Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1uKDEzOTc5KSxjPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic3ViYXJyYXkiLChmdW5jdGlvbih0LGUpe3ZhciBuPWModGhpcykscj1uLmxlbmd0aCxzPWkodCxyKTtyZXR1cm4gbmV3KGEobixuLmNvbnN0cnVjdG9yKSkobi5idWZmZXIsbi5ieXRlT2Zmc2V0K3Mqbi5CWVRFU19QRVJfRUxFTUVOVCxvKCh2b2lkIDA9PT1lP3I6aShlLHIpKS1zKSl9KSl9LDQzOTUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oMzIxODcpLGE9ci5JbnQ4QXJyYXksYz1vLmFUeXBlZEFycmF5LHM9by5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9W10udG9Mb2NhbGVTdHJpbmcsbD1bXS5zbGljZSxmPSEhYSYmaSgoZnVuY3Rpb24oKXt1LmNhbGwobmV3IGEoMSkpfSkpO3MoInRvTG9jYWxlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS5hcHBseShmP2wuY2FsbChjKHRoaXMpKTpjKHRoaXMpLGFyZ3VtZW50cyl9KSxpKChmdW5jdGlvbigpe3JldHVyblsxLDJdLnRvTG9jYWxlU3RyaW5nKCkhPW5ldyBhKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhaSgoZnVuY3Rpb24oKXthLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLDJdKX0pKSl9LDkxMzQ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxvPW4oMzIxODcpLGk9big4OTU1OCkuVWludDhBcnJheSxhPWkmJmkucHJvdG90eXBlfHx7fSxjPVtdLnRvU3RyaW5nLHM9W10uam9pbjtvKChmdW5jdGlvbigpe2MuY2FsbCh7fSl9KSkmJihjPWZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0pO3ZhciB1PWEudG9TdHJpbmchPWM7cigidG9TdHJpbmciLGMsdSl9LDE2OTc4OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDM3OTg3OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgwNzU3OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNjk4Nzk6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSksITApfSw1ODYwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG89big4OTU1OCksaT1uKDE5MjYpLGE9big5NjAzKSxjPW4oODE5NTEpLHM9big3MTMwMyksdT1uKDEwNTkyKSxsPW4oODk4MjcpLmVuZm9yY2UsZj1uKDE5NTkxKSxkPSFvLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIG8scD1PYmplY3QuaXNFeHRlbnNpYmxlLGg9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sdj10LmV4cG9ydHM9YygiV2Vha01hcCIsaCxzKTtpZihmJiZkKXtyPXMuZ2V0Q29uc3RydWN0b3IoaCwiV2Vha01hcCIsITApLGEuUkVRVUlSRUQ9ITA7dmFyIGc9di5wcm90b3R5cGUseT1nLmRlbGV0ZSxtPWcuaGFzLGI9Zy5nZXQseD1nLnNldDtpKGcse2RlbGV0ZTpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgcikseS5jYWxsKHRoaXMsdCl8fGUuZnJvemVuLmRlbGV0ZSh0KX1yZXR1cm4geS5jYWxsKHRoaXMsdCl9LGhhczpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCl8fGUuZnJvemVuLmhhcyh0KX1yZXR1cm4gbS5jYWxsKHRoaXMsdCl9LGdldDpmdW5jdGlvbih0KXtpZih1KHQpJiYhcCh0KSl7dmFyIGU9bCh0aGlzKTtyZXR1cm4gZS5mcm96ZW58fChlLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCk/Yi5jYWxsKHRoaXMsdCk6ZS5mcm96ZW4uZ2V0KHQpfXJldHVybiBiLmNhbGwodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7aWYodSh0KSYmIXAodCkpe3ZhciBuPWwodGhpcyk7bi5mcm96ZW58fChuLmZyb3plbj1uZXcgciksbS5jYWxsKHRoaXMsdCk/eC5jYWxsKHRoaXMsdCxlKTpuLmZyb3plbi5zZXQodCxlKX1lbHNlIHguY2FsbCh0aGlzLHQsZSk7cmV0dXJuIHRoaXN9fSl9fSw0NTE1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oODE5NTEpKCJXZWFrU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG4oNzEzMDMpKX0sOTY3NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTA4NjgpLHM9bigzNzYyMCksdT1uKDE0MjA5KSxsPW4oNDEzMzQpLGY9big2Njk3MSksZD1uKDg5ODI3KSxwPWQuc2V0LGg9ZC5nZXR0ZXJGb3IoIkFnZ3JlZ2F0ZUVycm9yIiksdj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYoIShuIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7YSYmKG49YShuZXcgRXJyb3IoZSksaShuKSkpO3ZhciByPVtdO3JldHVybiBsKHQsci5wdXNoLHIpLG8/cChuLHtlcnJvcnM6cix0eXBlOiJBZ2dyZWdhdGVFcnJvciJ9KTpuLmVycm9ycz1yLHZvaWQgMCE9PWUmJmYobiwibWVzc2FnZSIsU3RyaW5nKGUpKSxufTt2LnByb3RvdHlwZT1jKEVycm9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6dSg1LHYpLG1lc3NhZ2U6dSg1LCIiKSxuYW1lOnUoNSwiQWdncmVnYXRlRXJyb3IiKX0pLG8mJnMuZih2LnByb3RvdHlwZSwiZXJyb3JzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcykuZXJyb3JzfSxjb25maWd1cmFibGU6ITB9KSxyKHtnbG9iYWw6ITB9LHtBZ2dyZWdhdGVFcnJvcjp2fSl9LDE0MDg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjE5OSksaT1PYmplY3QuaXNGcm96ZW4sYT1mdW5jdGlvbih0LGUpe2lmKCFpfHwhbyh0KXx8IWkodCkpcmV0dXJuITE7Zm9yKHZhciBuLHI9MCxhPXQubGVuZ3RoO3I8YTspaWYoISgic3RyaW5nIj09dHlwZW9mKG49dFtyKytdKXx8ZSYmdm9pZCAwPT09bikpcmV0dXJuITE7cmV0dXJuIDAhPT1hfTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwfSx7aXNUZW1wbGF0ZU9iamVjdDpmdW5jdGlvbih0KXtpZighYSh0LCEwKSlyZXR1cm4hMTt2YXIgZT10LnJhdztyZXR1cm4hKGUubGVuZ3RoIT09dC5sZW5ndGh8fCFhKGUsITEpKX19KX0sNDkzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SW5kZXgiaW5bXSkmJihjKEFycmF5LnByb3RvdHlwZSwibGFzdEluZGV4Iix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1hKHQubGVuZ3RoKTtyZXR1cm4gMD09ZT8wOmUtMX19KSxvKCJsYXN0SW5kZXgiKSl9LDYzNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oNzY1MTMpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oMzc2MjApLmY7ciYmISgibGFzdEl0ZW0iaW5bXSkmJihjKEFycmF5LnByb3RvdHlwZSwibGFzdEl0ZW0iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lP3ZvaWQgMDp0W2UtMV19LHNldDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmxlbmd0aCk7cmV0dXJuIGVbMD09bj8wOm4tMV09dH19KSxvKCJsYXN0SXRlbSIpKX0sNDcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4uaXRlcmF0b3I7cmV0dXJuIGUucmVzb2x2ZShvKG4ubmV4dC5jYWxsKHIsdCkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS5kb25lPyhuLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk6e2RvbmU6ITEsdmFsdWU6W24uaW5kZXgrKyx0LnZhbHVlXX19KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7YXNJbmRleGVkUGFpcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoe2l0ZXJhdG9yOm8odGhpcyksaW5kZXg6MH0pfX0pfSw2MTI5ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big1OTM3OSksaT1uKDY2OTcxKSxhPW4oNzYyOTgpLGM9bigyMzcyNCkscz1uKDYzODQ1KSx1PW4oNjU2NzIpLGw9YygidG9TdHJpbmdUYWciKSxmPWZ1bmN0aW9uKCl7byh0aGlzLGYpfTtmLnByb3RvdHlwZT1zLGEocyxsKXx8aShzLGwsIkFzeW5jSXRlcmF0b3IiKSxhKHMsImNvbnN0cnVjdG9yIikmJnMuY29uc3RydWN0b3IhPT1PYmplY3R8fGkocywiY29uc3RydWN0b3IiLGYpLHIoe2dsb2JhbDohMCxmb3JjZWQ6dX0se0FzeW5jSXRlcmF0b3I6Zn0pfSw2NzQ2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihyLGkpe3ZhciBhPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShvKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3Isbi5yZW1haW5pbmc/dm9pZCAwOnQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e28odCkuZG9uZT8obi5kb25lPSEwLHIoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOm4ucmVtYWluaW5nPyhuLnJlbWFpbmluZy0tLGEoKSk6cih7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7aSh0KX19KSxpKX1jYXRjaCh0KXtpKHQpfX07YSgpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDkwNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmV2ZXJ5O3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDIwMTI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4uZmlsdGVyZXI7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihvLGEpe3ZhciBjPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShpKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYoaSh0KS5kb25lKW4uZG9uZT0hMCxvKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO2Vsc2V7dmFyIHM9dC52YWx1ZTtlLnJlc29sdmUocihzKSkudGhlbigoZnVuY3Rpb24odCl7dD9vKHtkb25lOiExLHZhbHVlOnN9KTpjKCl9KSxhKX19Y2F0Y2godCl7YSh0KX19KSxhKX1jYXRjaCh0KXthKHQpfX07YygpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSwyMTM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZmluZDtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDM4OTg0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCksYz1uKDY2OTIwKSxzPWEoKGZ1bmN0aW9uKHQsZSl7dmFyIG4scixhPXRoaXMscz1hLm1hcHBlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHUsbCl7dmFyIGY9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkoYS5uZXh0LmNhbGwoYS5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuZG9uZT0hMCx1KHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pKTplLnJlc29sdmUocyh0LnZhbHVlKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKHZvaWQgMCE9PShyPWModCkpKXJldHVybiBhLmlubmVySXRlcmF0b3I9bj1pKHIuY2FsbCh0KSksYS5pbm5lck5leHQ9byhuLm5leHQpLGQoKTtsKFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSxkPWZ1bmN0aW9uKCl7aWYobj1hLmlubmVySXRlcmF0b3IpdHJ5e2UucmVzb2x2ZShpKGEuaW5uZXJOZXh0LmNhbGwobikpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aSh0KS5kb25lPyhhLmlubmVySXRlcmF0b3I9YS5pbm5lck5leHQ9bnVsbCxmKCkpOnUoe2RvbmU6ITEsdmFsdWU6dC52YWx1ZX0pfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX1lbHNlIGYoKX07ZCgpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpLGlubmVySXRlcmF0b3I6bnVsbCxpbm5lck5leHQ6bnVsbH0pfX0pfSw2OTIzNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZm9yRWFjaDtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDI2NDk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNTYyMzgpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTkyMDkpLHM9bigyNzAwNCksdT1uKDY2OTIwKSxsPW8uQXN5bmNJdGVyYXRvcixmPXMoKGZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpfSksITApO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSw1MzE2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLm1hcHBlcjtyZXR1cm4gZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTplLnJlc29sdmUocih0LnZhbHVlKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJue2RvbmU6ITEsdmFsdWU6dH19KSl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KX0pfX0pfSw3Mzk0OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNzcwMSkoIlByb21pc2UiKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPW8oZS5uZXh0KSxyPWFyZ3VtZW50cy5sZW5ndGg8MixjPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtyZXR1cm4gbyh0KSxuZXcgYSgoZnVuY3Rpb24obyxzKXt2YXIgdT1mdW5jdGlvbigpe3RyeXthLnJlc29sdmUoaShuLmNhbGwoZSkpKS50aGVuKChmdW5jdGlvbihlKXt0cnl7aWYoaShlKS5kb25lKXI/cyhUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKSk6byhjKTtlbHNle3ZhciBuPWUudmFsdWU7cj8ocj0hMSxjPW4sdSgpKTphLnJlc29sdmUodChjLG4pKS50aGVuKChmdW5jdGlvbih0KXtjPXQsdSgpfSkscyl9fWNhdGNoKHQpe3ModCl9fSkscyl9Y2F0Y2godCl7cyh0KX19O3UoKX0pKX19KX0sODgyMTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLnNvbWU7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSw3Mzc2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oMjcwMDQpKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1haW5pbmctLT90aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpOih0aGlzLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNDIxOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLnRvQXJyYXk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSwzNjU3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0Njg1KSxpPW4oNzcwMSksYT1uKDUwODY4KSxjPWZ1bmN0aW9uKCl7dmFyIHQ9aSgiT2JqZWN0IiwiZnJlZXplIik7cmV0dXJuIHQ/dChhKG51bGwpKTphKG51bGwpfTtyKHtnbG9iYWw6ITB9LHtjb21wb3NpdGVLZXk6ZnVuY3Rpb24oKXtyZXR1cm4gby5hcHBseShPYmplY3QsYXJndW1lbnRzKS5nZXQoIm9iamVjdCIsYyl9fSl9LDQzMDg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKTtyKHtnbG9iYWw6ITB9LHtjb21wb3NpdGVTeW1ib2w6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzBdP2koIlN5bWJvbCIpLmZvcihhcmd1bWVudHNbMF0pOm8uYXBwbHkobnVsbCxhcmd1bWVudHMpLmdldCgic3ltYm9sIixpKCJTeW1ib2wiKSl9fSl9LDk5NjI4OmZ1bmN0aW9uKHQsZSxuKXtuKDcxNjIyKX0sOTI2MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big4ODA3KSgoZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuW3RoaXMuaW5kZXgrKyxlLnZhbHVlXX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7YXNJbmRleGVkUGFpcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoe2l0ZXJhdG9yOm8odGhpcyksaW5kZXg6MH0pfX0pfSw0MzMzMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDU5Mzc5KSxhPW4oNjY5NzEpLGM9bigzMjE4Nykscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsZj1uKDY1NjcyKSxkPXUoIml0ZXJhdG9yIikscD11KCJ0b1N0cmluZ1RhZyIpLGg9by5JdGVyYXRvcix2PWZ8fCJmdW5jdGlvbiIhPXR5cGVvZiBofHxoLnByb3RvdHlwZSE9PWx8fCFjKChmdW5jdGlvbigpe2goe30pfSkpLGc9ZnVuY3Rpb24oKXtpKHRoaXMsZyl9O2YmJmEobD17fSxkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHMobCxwKXx8YShsLHAsIkl0ZXJhdG9yIiksIXYmJnMobCwiY29uc3RydWN0b3IiKSYmbC5jb25zdHJ1Y3RvciE9PU9iamVjdHx8YShsLCJjb25zdHJ1Y3RvciIsZyksZy5wcm90b3R5cGU9bCxyKHtnbG9iYWw6ITAsZm9yY2VkOnZ9LHtJdGVyYXRvcjpnfSl9LDIwNDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9big4ODA3KSgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dGhpcy5pdGVyYXRvcixyPXRoaXMubmV4dDt0aGlzLnJlbWFpbmluZzspaWYodGhpcy5yZW1haW5pbmctLSxlPW8oci5jYWxsKG4pKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKGU9byhyLmNhbGwobix0KSksISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVybiBlLnZhbHVlfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtkcm9wOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw1NDU1NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLCFvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKCF0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNDA2Mzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDg4MDcpLGM9bigxMjI3OCkscz1hKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXRoaXMuaXRlcmF0b3Isbz10aGlzLmZpbHRlcmVyLGE9dGhpcy5uZXh0Ozspe2lmKGU9aShhLmNhbGwocix0KSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihuPWUudmFsdWUsYyhyLG8sbikpcmV0dXJuIG59fSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLGZpbHRlcmVyOm8odCl9KX19KX0sOTY2NTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLG8odGhpcywoZnVuY3Rpb24oZSl7aWYodChlKSlyZXR1cm4gby5zdG9wKGUpfSksdm9pZCAwLCExLCEwKS5yZXN1bHR9fSl9LDE0Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3Mzg5MCksYz1uKDg4MDcpLHM9bigxMjI3OCksdT1jKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGMsdT10aGlzLml0ZXJhdG9yOzspe2lmKGM9dGhpcy5pbm5lckl0ZXJhdG9yKXtpZighKGU9aSh0aGlzLmlubmVyTmV4dC5jYWxsKGMpKSkuZG9uZSlyZXR1cm4gZS52YWx1ZTt0aGlzLmlubmVySXRlcmF0b3I9dGhpcy5pbm5lck5leHQ9bnVsbH1pZihlPWkodGhpcy5uZXh0LmNhbGwodSx0KSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihuPXModSx0aGlzLm1hcHBlcixlLnZhbHVlKSx2b2lkIDA9PT0ocj1hKG4pKSl0aHJvdyBUeXBlRXJyb3IoIi5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0Iik7dGhpcy5pbm5lckl0ZXJhdG9yPWM9aShyLmNhbGwobikpLHRoaXMuaW5uZXJOZXh0PW8oYy5uZXh0KX19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpLGlubmVySXRlcmF0b3I6bnVsbCxpbm5lck5leHQ6bnVsbH0pfX0pfSw3Mzc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmb3JFYWNoOmZ1bmN0aW9uKHQpe28oaSh0aGlzKSx0LHZvaWQgMCwhMSwhMCl9fSl9LDI3NDI4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNTYyMzgpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTkyMDkpLHM9big4ODA3KSx1PW4oNzM4OTApLGw9by5JdGVyYXRvcixmPXMoKGZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7aWYoISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVybiBlLnZhbHVlfSksITApO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHN0YXQ6ITB9LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG49Yyh0KSxyPXUobik7aWYobnVsbCE9cil7aWYoKGU9aShyKS5jYWxsKG4pKWluc3RhbmNlb2YgbClyZXR1cm4gZX1lbHNlIGU9bjtyZXR1cm4gbmV3IGYoe2l0ZXJhdG9yOmV9KX19KX0sMzM0MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDg4MDcpLGM9bigxMjI3OCkscz1hKChmdW5jdGlvbih0KXt2YXIgZT10aGlzLml0ZXJhdG9yLG49aSh0aGlzLm5leHQuY2FsbChlLHQpKTtpZighKHRoaXMuZG9uZT0hIW4uZG9uZSkpcmV0dXJuIGMoZSx0aGlzLm1hcHBlcixuLnZhbHVlKX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KX0pfX0pfSw4NDM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7YSh0aGlzKSxpKHQpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MixuPWU/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihvKHRoaXMsKGZ1bmN0aW9uKHIpe2U/KGU9ITEsbj1yKTpuPXQobixyKX0pLHZvaWQgMCwhMSwhMCksZSl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gbn19KX0sNTk2MjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzKSxpKHQpLG8odGhpcywoZnVuY3Rpb24oZSl7aWYodChlKSlyZXR1cm4gby5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDMyODUzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9big4ODA3KSgoZnVuY3Rpb24odCl7aWYodGhpcy5yZW1haW5pbmctLSl7dmFyIGU9byh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtyZXR1cm4odGhpcy5kb25lPSEhZS5kb25lKT92b2lkIDA6ZS52YWx1ZX10aGlzLmRvbmU9ITB9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3Rha2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDY3MDcyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODc1NzkpLGE9W10ucHVzaDtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dG9BcnJheTpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBvKGkodGhpcyksYSx0LCExLCEwKSx0fX0pfSw0ODQ0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDM1NTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtldmVyeTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4hcyhuLChmdW5jdGlvbih0LG4pe2lmKCFyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDE4ODQ0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe3Iobix0LGUpJiZkLmNhbGwobyx0LG4pfSksdm9pZCAwLCEwLCEwKSxvfX0pfSw0OTA1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmRLZXk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKHQpfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDM1NjU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3Aobil9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzg3OTI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNTM1MTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtncm91cEJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uaGFzKSxhPWkobi5nZXQpLGM9aShuLnNldCk7cmV0dXJuIG8odCwoZnVuY3Rpb24odCl7dmFyIG89ZSh0KTtyLmNhbGwobixvKT9hLmNhbGwobixvKS5wdXNoKHQpOmMuY2FsbChuLG8sW3RdKX0pKSxufX0pfSw5Mzg0MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE5ODkpLGM9bigzODE4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBzKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYoYyhuLHQpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sOTkyNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtrZXlCeTpmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB0aGlzO2koZSk7dmFyIHI9aShuLnNldCk7cmV0dXJuIG8odCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sZSh0KSx0KX0pKSxufX0pfSw2NjIyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE5ODkpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtrZXlPZjpmdW5jdGlvbih0KXtyZXR1cm4gYyhhKGkodGhpcykpLChmdW5jdGlvbihlLG4pe2lmKG49PT10KXJldHVybiBjLnN0b3AoZSl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sNzE3MDA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcEtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHIobix0LGUpLG4pfSksdm9pZCAwLCEwLCEwKSxvfX0pfSw2OTUyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwVmFsdWVzOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtkLmNhbGwobyx0LHIobix0LGUpKX0pLHZvaWQgMCwhMCwhMCksb319KX0sMjc3MzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodGhpcyksbj1hKGUuc2V0KSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoOyljKGFyZ3VtZW50c1tyKytdLG4sZSwhMCk7cmV0dXJuIGV9fSl9LDE5OTA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDc3MzY5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG89cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKGEodCkscyhuLChmdW5jdGlvbihuLGkpe3I/KHI9ITEsbz1pKTpvPXQobyxpLG4sZSl9KSx2b2lkIDAsITAsITApLHIpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgbWFwIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBvfX0pfSw2OTg0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDQzMjkwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3VwZGF0ZU9ySW5zZXJ0Om4oNDc5MjcpfSl9LDk3OTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHt1cGRhdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1pKHRoaXMpLHI9YXJndW1lbnRzLmxlbmd0aDthKGUpO3ZhciBvPW4uaGFzKHQpO2lmKCFvJiZyPDMpdGhyb3cgVHlwZUVycm9yKCJVcGRhdGluZyBhYnNlbnQgdmFsdWUiKTt2YXIgYz1vP24uZ2V0KHQpOmEocj4yP2FyZ3VtZW50c1syXTp2b2lkIDApKHQsbik7cmV0dXJuIG4uc2V0KHQsZShjLHQsbikpLG59fSl9LDE0NjgyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3Vwc2VydDpuKDQ3OTI3KX0pfSw3MDIyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLm1pbixpPU1hdGgubWF4O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NsYW1wOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbyhuLGkoZSx0KSl9fSl9LDIzOTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtERUdfUEVSX1JBRDpNYXRoLlBJLzE4MH0pfSwxNjgwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz0xODAvTWF0aC5QSTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtkZWdyZWVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Km99fSl9LDY3MTQxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzc0MiksaT1uKDUzMjUxKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtmc2NhbGU6ZnVuY3Rpb24odCxlLG4scixhKXtyZXR1cm4gaShvKHQsZSxuLHIsYSkpfX0pfSwzMDYxMzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2lhZGRoOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQ+Pj4wLGk9bj4+PjA7cmV0dXJuKGU+Pj4wKSsocj4+PjApKygobyZpfChvfGkpJn4obytpPj4+MCkpPj4+MzEpfDB9fSl9LDQ5Nzk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpbXVsaDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPXImbixhPW8mbixjPXI+PjE2LHM9bz4+MTYsdT0oYyphPj4+MCkrKGkqYT4+PjE2KTtyZXR1cm4gYypzKyh1Pj4xNikrKChpKnM+Pj4wKSsodSZuKT4+MTYpfX0pfSw2ODQwNjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2lzdWJoOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXQ+Pj4wLGk9bj4+PjA7cmV0dXJuKGU+Pj4wKS0ocj4+PjApLSgofm8maXx+KG9eaSkmby1pPj4+MCk+Pj4zMSl8MH19KX0sOTA3Njk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtSQURfUEVSX0RFRzoxODAvTWF0aC5QSX0pfSw1Nzg5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLlBJLzE4MDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtyYWRpYW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0Km99fSl9LDE1NzIyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2NhbGU6big3NzQyKX0pfSwxNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big4OTU0MiksYT1uKDcxMjAxKSxjPW4oODk4MjcpLHM9IlNlZWRlZCBSYW5kb20iLHU9IlNlZWRlZCBSYW5kb20gR2VuZXJhdG9yIixsPWMuc2V0LGY9Yy5nZXR0ZXJGb3IodSksZD1hKChmdW5jdGlvbih0KXtsKHRoaXMse3R5cGU6dSxzZWVkOnQlMjE0NzQ4MzY0N30pfSkscywoZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMpO3JldHVybnt2YWx1ZTooMTA3Mzc0MTgyMyYodC5zZWVkPSgxMTAzNTE1MjQ1KnQuc2VlZCsxMjM0NSklMjE0NzQ4MzY0NykpLzEwNzM3NDE4MjMsZG9uZTohMX19KSk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohMH0se3NlZWRlZFBSTkc6ZnVuY3Rpb24odCl7dmFyIGU9byh0KS5zZWVkO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcignTWF0aC5zZWVkZWRQUk5HKCkgYXJndW1lbnQgc2hvdWxkIGhhdmUgYSAic2VlZCIgZmllbGQgd2l0aCBhIGZpbml0ZSB2YWx1ZS4nKTtyZXR1cm4gbmV3IGQoZSl9fSl9LDc3OTA3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbmJpdDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk9PXQmJjA9PXQ/MS90PT0tMS8wOnQ8MH19KX0sNDQ2NDY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHt1bXVsaDpmdW5jdGlvbih0LGUpe3ZhciBuPTY1NTM1LHI9K3Qsbz0rZSxpPXImbixhPW8mbixjPXI+Pj4xNixzPW8+Pj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+Pj4xNikrKChpKnM+Pj4wKSsodSZuKT4+PjE2KX19KX0sNzU2NDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big3ODQ2KSxhPSJJbnZhbGlkIG51bWJlciByZXByZXNlbnRhdGlvbiIsYz0vXltcZGEtel0rJC87cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtmcm9tU3RyaW5nOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixzPTE7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcihhKTtpZighdC5sZW5ndGgpdGhyb3cgU3ludGF4RXJyb3IoYSk7aWYoIi0iPT10LmNoYXJBdCgwKSYmKHM9LTEsISh0PXQuc2xpY2UoMSkpLmxlbmd0aCkpdGhyb3cgU3ludGF4RXJyb3IoYSk7aWYoKG49dm9pZCAwPT09ZT8xMDpvKGUpKTwyfHxuPjM2KXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgcmFkaXgiKTtpZighYy50ZXN0KHQpfHwocj1pKHQsbikpLnRvU3RyaW5nKG4pIT09dCl0aHJvdyBTeW50YXhFcnJvcihhKTtyZXR1cm4gcypyfX0pfSw4NDMwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlRW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwiZW50cmllcyIpfX0pfSw3Mjk2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwia2V5cyIpfX0pfSw1NjM1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQwMyk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtpdGVyYXRlVmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJ2YWx1ZXMiKX19KX0sMjAyMzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big2NzUzOCksYT1uKDg2NDcwKSxjPW4oODc1NzkpLHM9bigxMDU5MiksdT1uKDU5Mzc5KSxsPW4oMzc2MjApLmYsZj1uKDY2OTcxKSxkPW4oMTkyNikscD1uKDMxMDc0KSxoPW4oNDEzMzQpLHY9big4MzYyMCksZz1uKDIzNzI0KSx5PW4oODk4MjcpLG09Zygib2JzZXJ2YWJsZSIpLGI9eS5nZXQseD15LnNldCx3PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDphKHQpfSxFPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xlYW51cDtpZihlKXt0LmNsZWFudXA9dm9pZCAwO3RyeXtlKCl9Y2F0Y2godCl7dih0KX19fSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Lm9ic2VydmVyfSxDPWZ1bmN0aW9uKHQsZSl7aWYoIW8pe3QuY2xvc2VkPSEwO3ZhciBuPWUuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI7biYmKG4uY2xvc2VkPSEwKX1lLm9ic2VydmVyPXZvaWQgMH0saz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9eCh0aGlzLHtjbGVhbnVwOnZvaWQgMCxvYnNlcnZlcjpjKHQpLHN1YnNjcmlwdGlvbk9ic2VydmVyOnZvaWQgMH0pO298fCh0aGlzLmNsb3NlZD0hMSk7dHJ5eyhuPXcodC5zdGFydCkpJiZuLmNhbGwodCx0aGlzKX1jYXRjaCh0KXt2KHQpfWlmKCFqKHIpKXt2YXIgaT1yLnN1YnNjcmlwdGlvbk9ic2VydmVyPW5ldyBTKHRoaXMpO3RyeXt2YXIgcz1lKGkpLHU9cztudWxsIT1zJiYoci5jbGVhbnVwPSJmdW5jdGlvbiI9PXR5cGVvZiBzLnVuc3Vic2NyaWJlP2Z1bmN0aW9uKCl7dS51bnN1YnNjcmliZSgpfTphKHMpKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBpLmVycm9yKHQpfWoocikmJkUocil9fTtrLnByb3RvdHlwZT1kKHt9LHt1bnN1YnNjcmliZTpmdW5jdGlvbigpe3ZhciB0PWIodGhpcyk7aih0KXx8KEModGhpcyx0KSxFKHQpKX19KSxvJiZsKGsucHJvdG90eXBlLCJjbG9zZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGooYih0aGlzKSl9fSk7dmFyIFM9ZnVuY3Rpb24odCl7eCh0aGlzLHtzdWJzY3JpcHRpb246dH0pLG98fCh0aGlzLmNsb3NlZD0hMSl9O1MucHJvdG90eXBlPWQoe30se25leHQ6ZnVuY3Rpb24odCl7dmFyIGU9YihiKHRoaXMpLnN1YnNjcmlwdGlvbik7aWYoIWooZSkpe3ZhciBuPWUub2JzZXJ2ZXI7dHJ5e3ZhciByPXcobi5uZXh0KTtyJiZyLmNhbGwobix0KX1jYXRjaCh0KXt2KHQpfX19LGVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPWIodGhpcykuc3Vic2NyaXB0aW9uLG49YihlKTtpZighaihuKSl7dmFyIHI9bi5vYnNlcnZlcjtDKGUsbik7dHJ5e3ZhciBvPXcoci5lcnJvcik7bz9vLmNhbGwocix0KTp2KHQpfWNhdGNoKHQpe3YodCl9RShuKX19LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKS5zdWJzY3JpcHRpb24sZT1iKHQpO2lmKCFqKGUpKXt2YXIgbj1lLm9ic2VydmVyO0ModCxlKTt0cnl7dmFyIHI9dyhuLmNvbXBsZXRlKTtyJiZyLmNhbGwobil9Y2F0Y2godCl7dih0KX1FKGUpfX19KSxvJiZsKFMucHJvdG90eXBlLCJjbG9zZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGooYihiKHRoaXMpLnN1YnNjcmlwdGlvbikpfX0pO3ZhciBPPWZ1bmN0aW9uKHQpe3UodGhpcyxPLCJPYnNlcnZhYmxlIikseCh0aGlzLHtzdWJzY3JpYmVyOmEodCl9KX07ZChPLnByb3RvdHlwZSx7c3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIG5ldyBrKCJmdW5jdGlvbiI9PXR5cGVvZiB0P3tuZXh0OnQsZXJyb3I6ZT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsY29tcGxldGU6ZT4yP2FyZ3VtZW50c1syXTp2b2lkIDB9OnModCk/dDp7fSxiKHRoaXMpLnN1YnNjcmliZXIpfX0pLGQoTyx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sbj13KGModClbbV0pO2lmKG4pe3ZhciByPWMobi5jYWxsKHQpKTtyZXR1cm4gci5jb25zdHJ1Y3Rvcj09PWU/cjpuZXcgZSgoZnVuY3Rpb24odCl7cmV0dXJuIHIuc3Vic2NyaWJlKHQpfSkpfXZhciBvPXAodCk7cmV0dXJuIG5ldyBlKChmdW5jdGlvbih0KXtoKG8sKGZ1bmN0aW9uKGUpe2lmKHQubmV4dChlKSx0LmNsb3NlZClyZXR1cm4gaC5zdG9wKCl9KSx2b2lkIDAsITEsITApLHQuY29tcGxldGUoKX0pKX0sb2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpPLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPWFyZ3VtZW50c1tyKytdO3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCl7Zm9yKHZhciByPTA7cjxlO3IrKylpZih0Lm5leHQobltyXSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pKX19KSxmKE8ucHJvdG90eXBlLG0sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscih7Z2xvYmFsOiEwfSx7T2JzZXJ2YWJsZTpPfSksaSgiT2JzZXJ2YWJsZSIpfSwyNzc1OmZ1bmN0aW9uKHQsZSxuKXtuKDE3NjI5KX0sNzMyMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big3NzAxKSxhPW4oODMwODMpLGM9bigzMTE1KSxzPW4oNDEzMzQpLHU9Ik5vIG9uZSBwcm9taXNlIHJlc29sdmVkIjtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbnk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWEuZihlKSxyPW4ucmVzb2x2ZSxsPW4ucmVqZWN0LGY9YygoZnVuY3Rpb24oKXt2YXIgbj1vKGUucmVzb2x2ZSksYT1bXSxjPTAsZj0xLGQ9ITE7cyh0LChmdW5jdGlvbih0KXt2YXIgbz1jKysscz0hMTthLnB1c2godm9pZCAwKSxmKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7c3x8ZHx8KGQ9ITAscih0KSl9KSwoZnVuY3Rpb24odCl7c3x8ZHx8KHM9ITAsYVtvXT10LC0tZnx8bChuZXcoaSgiQWdncmVnYXRlRXJyb3IiKSkoYSx1KSkpfSkpfSkpLC0tZnx8bChuZXcoaSgiQWdncmVnYXRlRXJyb3IiKSkoYSx1KSl9KSk7cmV0dXJuIGYuZXJyb3ImJmwoZi52YWx1ZSksbi5wcm9taXNlfX0pfSwxMTA3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MzA4MyksaT1uKDMxMTUpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se3RyeTpmdW5jdGlvbih0KXt2YXIgZT1vLmYodGhpcyksbj1pKHQpO3JldHVybihuLmVycm9yP2UucmVqZWN0OmUucmVzb2x2ZSkobi52YWx1ZSksZS5wcm9taXNlfX0pfSw0OTY0MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uc2V0O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDQ/dm9pZCAwOmEoYXJndW1lbnRzWzNdKTtjKHQsZSxpKG4pLHIpfX0pfSw3NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uZ2V0TWFwLHM9by5zdG9yZTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pLHI9YyhpKGUpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZSh0KSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIG89cy5nZXQoZSk7cmV0dXJuIG8uZGVsZXRlKG4pLCEhby5zaXplfHxzLmRlbGV0ZShlKX19KX0sNDkxNTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDA2MSksaT1uKDc3MDIwKSxhPW4oODc1NzkpLGM9big2NDk2NSkscz1uKDQxMzM0KSx1PWkua2V5cyxsPWkudG9LZXksZj1mdW5jdGlvbih0LGUpe3ZhciBuPXUodCxlKSxyPWModCk7aWYobnVsbD09PXIpcmV0dXJuIG47dmFyIGksYSxsPWYocixlKTtyZXR1cm4gbC5sZW5ndGg/bi5sZW5ndGg/KGk9bmV3IG8obi5jb25jYXQobCkpLHMoaSwoYT1bXSkucHVzaCxhKSxhKTpsOm59O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmwoYXJndW1lbnRzWzFdKTtyZXR1cm4gZihhKHQpLGUpfX0pfSw2OTQ1OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9big2NDk2NSksYz1vLmhhcyxzPW8uZ2V0LHU9by50b0tleSxsPWZ1bmN0aW9uKHQsZSxuKXtpZihjKHQsZSxuKSlyZXR1cm4gcyh0LGUsbik7dmFyIHI9YShlKTtyZXR1cm4gbnVsbCE9PXI/bCh0LHIsbik6dm9pZCAwfTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pO3JldHVybiBsKHQsaShlKSxuKX19KX0sODc0NzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8ua2V5cyxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6Yyhhcmd1bWVudHNbMV0pO3JldHVybiBhKGkodCksZSl9fSl9LDI2ODk2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmdldCxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKTtyZXR1cm4gYSh0LGkoZSksbil9fSl9LDk3NDMzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by50b0tleSx1PWZ1bmN0aW9uKHQsZSxuKXtpZihjKHQsZSxuKSlyZXR1cm4hMDt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09ciYmdSh0LHIsbil9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhc01ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSk7cmV0dXJuIHUodCxpKGUpLG4pfX0pfSw3MTA4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmhhcyxjPW8udG9LZXk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKTtyZXR1cm4gYSh0LGkoZSksbil9fSl9LDIzNjMxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7bWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtjKHQsZSxpKG4pLGEocikpfX19KX0sOTM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7YWRkQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw2MTQ2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5ODM1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkaWZmZXJlbmNlOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSkscj1jKG4uZGVsZXRlKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwobix0KX0pKSxufX0pfSwxNjEyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQpe2lmKCFyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDUzNTg5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtyKHQsdCxlKSYmZC5jYWxsKG8sdCl9KSx2b2lkIDAsITEsITApLG99fSl9LDgxMDQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKHQpfSksdm9pZCAwLCExLCEwKS5yZXN1bHR9fSl9LDk3Mjg0OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDQxNzE4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ludGVyc2VjdGlvbjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpLHI9YyhlLmhhcyksbz1jKG4uYWRkKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwoZSx0KSYmby5jYWxsKG4sdCl9KSksbn19KX0sNTczNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNEaXNqb2ludEZyb206ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCEwPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDg5MjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigzMTA3NCksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzU3Vic2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzKSxuPWEodCkscj1uLmhhcztyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgciYmKG49bmV3KGkoIlNldCIpKSh0KSxyPWMobi5oYXMpKSwhdShlLChmdW5jdGlvbih0KXtpZighMT09PXIuY2FsbChuLHQpKXJldHVybiB1LnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzIzMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdXBlcnNldE9mOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUuaGFzKTtyZXR1cm4hYyh0LChmdW5jdGlvbih0KXtpZighMT09PW4uY2FsbChlLHQpKXJldHVybiBjLnN0b3AoKX0pKS5zdG9wcGVkfX0pfSwxNjc1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDE0NzUpLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtqb2luOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUpLHI9dm9pZCAwPT09dD8iLCI6U3RyaW5nKHQpLG89W107cmV0dXJuIGMobixvLnB1c2gsbywhMSwhMCksby5qb2luKHIpfX0pfSwxMTA3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxNDc1KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJTZXQiKSkpLGQ9YyhvLmFkZCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCl7ZC5jYWxsKG8scih0LHQsZSkpfSksdm9pZCAwLCExLCEwKSxvfX0pfSwyNDU5ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU2V0IixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sMzM1Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4pe3I/KHI9ITEsbz1uKTpvPXQobyxuLG4sZSl9KSx2b2lkIDAsITEsITApLHIpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgc2V0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBvfX0pfSwyNDEwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCl7aWYocih0LHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw2NjE4MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzeW1tZXRyaWNEaWZmZXJlbmNlOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSkscj1jKG4uZGVsZXRlKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfHxvLmNhbGwobix0KX0pKSxufX0pfSw2MjkxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VuaW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkoZSk7cmV0dXJuIHUodCxjKG4uYWRkKSxuKSxufX0pfSw3MzQ2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY2hhckF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2F0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDMyMDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcxMjAxKSxpPW4oNzAxMzIpLGE9big4OTgyNyksYz1uKDYwMTQwKSxzPWMuY29kZUF0LHU9Yy5jaGFyQXQsbD0iU3RyaW5nIEl0ZXJhdG9yIixmPWEuc2V0LGQ9YS5nZXR0ZXJGb3IobCkscD1vKChmdW5jdGlvbih0KXtmKHRoaXMse3R5cGU6bCxzdHJpbmc6dCxpbmRleDowfSl9KSwiU3RyaW5nIiwoZnVuY3Rpb24oKXt2YXIgdCxlPWQodGhpcyksbj1lLnN0cmluZyxyPWUuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9dShuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLHt2YWx1ZTp7Y29kZVBvaW50OnModCwwKSxwb3NpdGlvbjpyfSxkb25lOiExfSl9KSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7Y29kZVBvaW50czpmdW5jdGlvbigpe3JldHVybiBuZXcgcChTdHJpbmcoaSh0aGlzKSkpfX0pfSw3NDUyNTpmdW5jdGlvbih0LGUsbil7big4MTI3Nyl9LDY0MDI2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDcwMTMyKSxpPW4oNDMyMjMpLGE9bigyNTQxOSksYz1uKDIzNzI0KSxzPW4oNjU2NzIpLHU9YygicmVwbGFjZSIpLGw9UmVnRXhwLnByb3RvdHlwZTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNlQWxsOmZ1bmN0aW9uIHQoZSxuKXt2YXIgcixjLGYsZCxwLGgsdixnLHk9byh0aGlzKTtpZihudWxsIT1lKXtpZigocj1pKGUpKSYmIX5TdHJpbmcobygiZmxhZ3MiaW4gbD9lLmZsYWdzOmEuY2FsbChlKSkpLmluZGV4T2YoImciKSl0aHJvdyBUeXBlRXJyb3IoImAucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYodm9pZCAwIT09KGM9ZVt1XSkpcmV0dXJuIGMuY2FsbChlLHksbik7aWYocyYmcilyZXR1cm4gU3RyaW5nKHkpLnJlcGxhY2UoZSxuKX1pZihmPVN0cmluZyh5KSwiIj09PShkPVN0cmluZyhlKSkpcmV0dXJuIHQuY2FsbChmLC8oPzopL2csbik7aWYocD1mLnNwbGl0KGQpLCJmdW5jdGlvbiIhPXR5cGVvZiBuKXJldHVybiBwLmpvaW4oU3RyaW5nKG4pKTtmb3Iodj0oaD1wWzBdKS5sZW5ndGgsZz0xO2c8cC5sZW5ndGg7ZysrKWgrPVN0cmluZyhuKGQsdixmKSksdis9ZC5sZW5ndGgrcFtnXS5sZW5ndGgsaCs9cFtnXTtyZXR1cm4gaH19KX0sNjk0MjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jRGlzcG9zZSIpfSw5NDI0OTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImRpc3Bvc2UiKX0sNTEzNzQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJvYnNlcnZhYmxlIil9LDUzNzcyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicGF0dGVybk1hdGNoIil9LDg2MDc3OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicmVwbGFjZUFsbCIpfSw2NDgxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiV2Vha01hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sOTk5Nzk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDE4MjA1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sODc1NTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpuKDY1NjcyKX0se3Vwc2VydDpuKDQ3OTI3KX0pfSw2ODk5OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDk4MTc5KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDUzODI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw4NTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDY0ODk5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrU2V0IixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNjcwMzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big0NzA5NCksaT1uKDMxMzY4KSxhPW4oNjY5NzEpO2Zvcih2YXIgYyBpbiBvKXt2YXIgcz1yW2NdLHU9cyYmcy5wcm90b3R5cGU7aWYodSYmdS5mb3JFYWNoIT09aSl0cnl7YSh1LCJmb3JFYWNoIixpKX1jYXRjaCh0KXt1LmZvckVhY2g9aX19fSw3OTc5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oNTAwNjMpLGE9big2Njk3MSksYz1uKDIzNzI0KSxzPWMoIml0ZXJhdG9yIiksdT1jKCJ0b1N0cmluZ1RhZyIpLGw9aS52YWx1ZXM7Zm9yKHZhciBmIGluIG8pe3ZhciBkPXJbZl0scD1kJiZkLnByb3RvdHlwZTtpZihwKXtpZihwW3NdIT09bCl0cnl7YShwLHMsbCl9Y2F0Y2godCl7cFtzXT1sfWlmKHBbdV18fGEocCx1LGYpLG9bZl0pZm9yKHZhciBoIGluIGkpaWYocFtoXSE9PWlbaF0pdHJ5e2EocCxoLGlbaF0pfWNhdGNoKHQpe3BbaF09aVtoXX19fX0sNzQwMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDIxNzQ0KTtyKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohby5zZXRJbW1lZGlhdGV8fCFvLmNsZWFySW1tZWRpYXRlfSx7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sNjU5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDY1NTU1KSxhPW4oMjQ1OTQpLGM9by5wcm9jZXNzLHM9InByb2Nlc3MiPT1hKGMpO3Ioe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLG5vVGFyZ2V0R2V0OiEwfSx7cXVldWVNaWNyb3Rhc2s6ZnVuY3Rpb24odCl7dmFyIGU9cyYmYy5kb21haW47aShlP2UuYmluZCh0KTp0KX19KX0sODE5OTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDM5NDc2KSxhPVtdLnNsaWNlLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yLG89cj9hLmNhbGwoYXJndW1lbnRzLDIpOnZvaWQgMDtyZXR1cm4gdChyP2Z1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSkpLmFwcGx5KHRoaXMsbyl9OmUsbil9fTtyKHtnbG9iYWw6ITAsYmluZDohMCxmb3JjZWQ6L01TSUUgLlwuLy50ZXN0KGkpfSx7c2V0VGltZW91dDpjKG8uc2V0VGltZW91dCksc2V0SW50ZXJ2YWw6YyhvLnNldEludGVydmFsKX0pfSw1NTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big1MDA2Myk7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big1NzU5NyksYT1uKDkyOTEzKSxjPW4oMTkyNikscz1uKDUxMTI4KSx1PW4oNzEyMDEpLGw9big4OTgyNyksZj1uKDU5Mzc5KSxkPW4oNzYyOTgpLHA9big0NjEzMCksaD1uKDU5NTkxKSx2PW4oODc1NzkpLGc9bigxMDU5MikseT1uKDUwODY4KSxtPW4oMTQyMDkpLGI9bigzMTA3NCkseD1uKDczODkwKSx3PW4oMjM3MjQpLEU9bygiZmV0Y2giKSxqPW8oIkhlYWRlcnMiKSxDPXcoIml0ZXJhdG9yIiksaz0iVVJMU2VhcmNoUGFyYW1zIixTPSJVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciIsTz1sLnNldCxBPWwuZ2V0dGVyRm9yKGspLEk9bC5nZXR0ZXJGb3IoUyksTT0vXCsvZyxUPUFycmF5KDQpLF89ZnVuY3Rpb24odCl7cmV0dXJuIFRbdC0xXXx8KFRbdC0xXT1SZWdFeHAoIigoPzolW1xcZGEtZl17Mn0peyIrdCsifSkiLCJnaSIpKX0sTD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1jYXRjaChlKXtyZXR1cm4gdH19LFI9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKE0sIiAiKSxuPTQ7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7Zm9yKDtuOyllPWUucmVwbGFjZShfKG4tLSksTCk7cmV0dXJuIGV9fSxQPS9bIScoKX5dfCUyMC9nLE49eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisifSxEPWZ1bmN0aW9uKHQpe3JldHVybiBOW3RdfSxGPWZ1bmN0aW9uKHQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZShQLEQpfSxVPWZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IodmFyIG4scixvPWUuc3BsaXQoIiYiKSxpPTA7aTxvLmxlbmd0aDspKG49b1tpKytdKS5sZW5ndGgmJihyPW4uc3BsaXQoIj0iKSx0LnB1c2goe2tleTpSKHIuc2hpZnQoKSksdmFsdWU6UihyLmpvaW4oIj0iKSl9KSl9LEI9ZnVuY3Rpb24odCl7dGhpcy5lbnRyaWVzLmxlbmd0aD0wLFUodGhpcy5lbnRyaWVzLHQpfSx6PWZ1bmN0aW9uKHQsZSl7aWYodDxlKXRocm93IFR5cGVFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKX0sSD11KChmdW5jdGlvbih0LGUpe08odGhpcyx7dHlwZTpTLGl0ZXJhdG9yOmIoQSh0KS5lbnRyaWVzKSxraW5kOmV9KX0pLCJJdGVyYXRvciIsKGZ1bmN0aW9uKCl7dmFyIHQ9SSh0aGlzKSxlPXQua2luZCxuPXQuaXRlcmF0b3IubmV4dCgpLHI9bi52YWx1ZTtyZXR1cm4gbi5kb25lfHwobi52YWx1ZT0ia2V5cyI9PT1lP3Iua2V5OiJ2YWx1ZXMiPT09ZT9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSksbn0pKSxWPWZ1bmN0aW9uKCl7Zih0aGlzLFYsayk7dmFyIHQsZSxuLHIsbyxpLGEsYyxzLHU9YXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDAsbD10aGlzLHA9W107aWYoTyhsLHt0eXBlOmssZW50cmllczpwLHVwZGF0ZVVSTDpmdW5jdGlvbigpe30sdXBkYXRlU2VhcmNoUGFyYW1zOkJ9KSx2b2lkIDAhPT11KWlmKGcodSkpaWYoImZ1bmN0aW9uIj09dHlwZW9mKHQ9eCh1KSkpZm9yKG49KGU9dC5jYWxsKHUpKS5uZXh0OyEocj1uLmNhbGwoZSkpLmRvbmU7KXtpZigoYT0oaT0obz1iKHYoci52YWx1ZSkpKS5uZXh0KS5jYWxsKG8pKS5kb25lfHwoYz1pLmNhbGwobykpLmRvbmV8fCFpLmNhbGwobykuZG9uZSl0aHJvdyBUeXBlRXJyb3IoIkV4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDIiKTtwLnB1c2goe2tleTphLnZhbHVlKyIiLHZhbHVlOmMudmFsdWUrIiJ9KX1lbHNlIGZvcihzIGluIHUpZCh1LHMpJiZwLnB1c2goe2tleTpzLHZhbHVlOnVbc10rIiJ9KTtlbHNlIFUocCwic3RyaW5nIj09dHlwZW9mIHU/Ij8iPT09dS5jaGFyQXQoMCk/dS5zbGljZSgxKTp1OnUrIiIpfSxxPVYucHJvdG90eXBlO2MocSx7YXBwZW5kOmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDIpO3ZhciBuPUEodGhpcyk7bi5lbnRyaWVzLnB1c2goe2tleTp0KyIiLHZhbHVlOmUrIiJ9KSxuLnVwZGF0ZVVSTCgpfSxkZWxldGU6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1BKHRoaXMpLG49ZS5lbnRyaWVzLHI9dCsiIixvPTA7bzxuLmxlbmd0aDspbltvXS5rZXk9PT1yP24uc3BsaWNlKG8sMSk6bysrO2UudXBkYXRlVVJMKCl9LGdldDpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUEodGhpcykuZW50cmllcyxuPXQrIiIscj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0ua2V5PT09bilyZXR1cm4gZVtyXS52YWx1ZTtyZXR1cm4gbnVsbH0sZ2V0QWxsOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPVtdLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmtleT09PW4mJnIucHVzaChlW29dLnZhbHVlKTtyZXR1cm4gcn0saGFzOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDspaWYoZVtyKytdLmtleT09PW4pcmV0dXJuITA7cmV0dXJuITF9LHNldDpmdW5jdGlvbih0LGUpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIG4scj1BKHRoaXMpLG89ci5lbnRyaWVzLGk9ITEsYT10KyIiLGM9ZSsiIixzPTA7czxvLmxlbmd0aDtzKyspKG49b1tzXSkua2V5PT09YSYmKGk/by5zcGxpY2Uocy0tLDEpOihpPSEwLG4udmFsdWU9YykpO2l8fG8ucHVzaCh7a2V5OmEsdmFsdWU6Y30pLHIudXBkYXRlVVJMKCl9LHNvcnQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1BKHRoaXMpLG89ci5lbnRyaWVzLGk9by5zbGljZSgpO2ZvcihvLmxlbmd0aD0wLG49MDtuPGkubGVuZ3RoO24rKyl7Zm9yKHQ9aVtuXSxlPTA7ZTxuO2UrKylpZihvW2VdLmtleT50LmtleSl7by5zcGxpY2UoZSwwLHQpO2JyZWFrfWU9PT1uJiZvLnB1c2godCl9ci51cGRhdGVVUkwoKX0sZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj1BKHRoaXMpLmVudHJpZXMscj1wKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz0wO288bi5sZW5ndGg7KXIoKGU9bltvKytdKS52YWx1ZSxlLmtleSx0aGlzKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJrZXlzIil9LHZhbHVlczpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJ2YWx1ZXMiKX0sZW50cmllczpmdW5jdGlvbigpe3JldHVybiBuZXcgSCh0aGlzLCJlbnRyaWVzIil9fSx7ZW51bWVyYWJsZTohMH0pLGEocSxDLHEuZW50cmllcyksYShxLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9QSh0aGlzKS5lbnRyaWVzLG49W10scj0wO3I8ZS5sZW5ndGg7KXQ9ZVtyKytdLG4ucHVzaChGKHQua2V5KSsiPSIrRih0LnZhbHVlKSk7cmV0dXJuIG4uam9pbigiJiIpfSkse2VudW1lcmFibGU6ITB9KSxzKFYsaykscih7Z2xvYmFsOiEwLGZvcmNlZDohaX0se1VSTFNlYXJjaFBhcmFtczpWfSksaXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEV8fCJmdW5jdGlvbiIhPXR5cGVvZiBqfHxyKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1bdF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKGcoZT1hcmd1bWVudHNbMV0pJiYobj1lLmJvZHksaChuKT09PWsmJigocj1lLmhlYWRlcnM/bmV3IGooZS5oZWFkZXJzKTpuZXcgaikuaGFzKCJjb250ZW50LXR5cGUiKXx8ci5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IiksZT15KGUse2JvZHk6bSgwLFN0cmluZyhuKSksaGVhZGVyczptKDAscil9KSkpLG8ucHVzaChlKSksRS5hcHBseSh0aGlzLG8pfX0pLHQuZXhwb3J0cz17VVJMU2VhcmNoUGFyYW1zOlYsZ2V0U3RhdGU6QX19LDEzOTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MjIwMSk7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oNjI1NTYpLGE9big1NzU5NyksYz1uKDg5NTU4KSxzPW4oODY0MDEpLHU9big5MjkxMyksbD1uKDU5Mzc5KSxmPW4oNzYyOTgpLGQ9big3ODY4NSkscD1uKDg1MTY2KSxoPW4oNjAxNDApLmNvZGVBdCx2PW4oNjk5MjcpLGc9big1MTEyOCkseT1uKDU1NTcpLG09big4OTgyNyksYj1jLlVSTCx4PXkuVVJMU2VhcmNoUGFyYW1zLHc9eS5nZXRTdGF0ZSxFPW0uc2V0LGo9bS5nZXR0ZXJGb3IoIlVSTCIpLEM9TWF0aC5mbG9vcixrPU1hdGgucG93LFM9IkludmFsaWQgc2NoZW1lIixPPSJJbnZhbGlkIGhvc3QiLEE9IkludmFsaWQgcG9ydCIsST0vW0EtWmEtel0vLE09L1tcZCtcLS5BLVphLXpdLyxUPS9cZC8sXz0vXigweHwwWCkvLEw9L15bMC03XSskLyxSPS9eXGQrJC8sUD0vXltcZEEtRmEtZl0rJC8sTj0vW1x1MDAwMFx1MDAwOVx1MDAwQVx1MDAwRCAjJS86P0BbXFxdXS8sRD0vW1x1MDAwMFx1MDAwOVx1MDAwQVx1MDAwRCAjLzo/QFtcXF1dLyxGPS9eW1x1MDAwMC1cdTAwMUYgXSt8W1x1MDAwMC1cdTAwMUYgXSskL2csVT0vW1x1MDAwOVx1MDAwQVx1MDAwRF0vZyxCPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixvO2lmKCJbIj09ZS5jaGFyQXQoMCkpe2lmKCJdIiE9ZS5jaGFyQXQoZS5sZW5ndGgtMSkpcmV0dXJuIE87aWYoIShuPUgoZS5zbGljZSgxLC0xKSkpKXJldHVybiBPO3QuaG9zdD1ufWVsc2UgaWYoSih0KSl7aWYoZT12KGUpLE4udGVzdChlKSlyZXR1cm4gTztpZihudWxsPT09KG49eihlKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZXtpZihELnRlc3QoZSkpcmV0dXJuIE87Zm9yKG49IiIscj1wKGUpLG89MDtvPHIubGVuZ3RoO28rKyluKz0kKHJbb10scSk7dC5ob3N0PW59fSx6PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHM9dC5zcGxpdCgiLiIpO2lmKHMubGVuZ3RoJiYiIj09c1tzLmxlbmd0aC0xXSYmcy5wb3AoKSwoZT1zLmxlbmd0aCk+NClyZXR1cm4gdDtmb3Iobj1bXSxyPTA7cjxlO3IrKyl7aWYoIiI9PShvPXNbcl0pKXJldHVybiB0O2lmKGk9MTAsby5sZW5ndGg+MSYmIjAiPT1vLmNoYXJBdCgwKSYmKGk9Xy50ZXN0KG8pPzE2Ojgsbz1vLnNsaWNlKDg9PWk/MToyKSksIiI9PT1vKWE9MDtlbHNle2lmKCEoMTA9PWk/Ujo4PT1pP0w6UCkudGVzdChvKSlyZXR1cm4gdDthPXBhcnNlSW50KG8saSl9bi5wdXNoKGEpfWZvcihyPTA7cjxlO3IrKylpZihhPW5bcl0scj09ZS0xKXtpZihhPj1rKDI1Niw1LWUpKXJldHVybiBudWxsfWVsc2UgaWYoYT4yNTUpcmV0dXJuIG51bGw7Zm9yKGM9bi5wb3AoKSxyPTA7cjxuLmxlbmd0aDtyKyspYys9bltyXSprKDI1NiwzLXIpO3JldHVybiBjfSxIPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYSxjLHM9WzAsMCwwLDAsMCwwLDAsMF0sdT0wLGw9bnVsbCxmPTAsZD1mdW5jdGlvbigpe3JldHVybiB0LmNoYXJBdChmKX07aWYoIjoiPT1kKCkpe2lmKCI6IiE9dC5jaGFyQXQoMSkpcmV0dXJuO2YrPTIsbD0rK3V9Zm9yKDtkKCk7KXtpZig4PT11KXJldHVybjtpZigiOiIhPWQoKSl7Zm9yKGU9bj0wO248NCYmUC50ZXN0KGQoKSk7KWU9MTYqZStwYXJzZUludChkKCksMTYpLGYrKyxuKys7aWYoIi4iPT1kKCkpe2lmKDA9PW4pcmV0dXJuO2lmKGYtPW4sdT42KXJldHVybjtmb3Iocj0wO2QoKTspe2lmKG89bnVsbCxyPjApe2lmKCEoIi4iPT1kKCkmJnI8NCkpcmV0dXJuO2YrK31pZighVC50ZXN0KGQoKSkpcmV0dXJuO2Zvcig7VC50ZXN0KGQoKSk7KXtpZihpPXBhcnNlSW50KGQoKSwxMCksbnVsbD09PW8pbz1pO2Vsc2V7aWYoMD09bylyZXR1cm47bz0xMCpvK2l9aWYobz4yNTUpcmV0dXJuO2YrK31zW3VdPTI1NipzW3VdK28sMiE9KytyJiY0IT1yfHx1Kyt9aWYoNCE9cilyZXR1cm47YnJlYWt9aWYoIjoiPT1kKCkpe2lmKGYrKywhZCgpKXJldHVybn1lbHNlIGlmKGQoKSlyZXR1cm47c1t1KytdPWV9ZWxzZXtpZihudWxsIT09bClyZXR1cm47ZisrLGw9Kyt1fX1pZihudWxsIT09bClmb3IoYT11LWwsdT03OzAhPXUmJmE+MDspYz1zW3VdLHNbdS0tXT1zW2wrYS0xXSxzW2wrLS1hXT1jO2Vsc2UgaWYoOCE9dSlyZXR1cm47cmV0dXJuIHN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG87aWYoIm51bWJlciI9PXR5cGVvZiB0KXtmb3IoZT1bXSxuPTA7bjw0O24rKyllLnVuc2hpZnQodCUyNTYpLHQ9Qyh0LzI1Nik7cmV0dXJuIGUuam9pbigiLiIpfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKGU9IiIscj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxuPTEscj1udWxsLG89MCxpPTA7aTw4O2krKykwIT09dFtpXT8obz5uJiYoZT1yLG49bykscj1udWxsLG89MCk6KG51bGw9PT1yJiYocj1pKSwrK28pO3JldHVybiBvPm4mJihlPXIsbj1vKSxlfSh0KSxuPTA7bjw4O24rKylvJiYwPT09dFtuXXx8KG8mJihvPSExKSxyPT09bj8oZSs9bj8iOiI6Ijo6IixvPSEwKTooZSs9dFtuXS50b1N0cmluZygxNiksbjw3JiYoZSs9IjoiKSkpO3JldHVybiJbIitlKyJdIn1yZXR1cm4gdH0scT17fSxXPWQoe30scSx7IiAiOjEsJyInOjEsIjwiOjEsIj4iOjEsImAiOjF9KSxHPWQoe30sVyx7IiMiOjEsIj8iOjEsInsiOjEsIn0iOjF9KSxaPWQoe30sRyx7Ii8iOjEsIjoiOjEsIjsiOjEsIj0iOjEsIkAiOjEsIlsiOjEsIlxcIjoxLCJdIjoxLCJeIjoxLCJ8IjoxfSksJD1mdW5jdGlvbih0LGUpe3ZhciBuPWgodCwwKTtyZXR1cm4gbj4zMiYmbjwxMjcmJiFmKGUsdCk/dDplbmNvZGVVUklDb21wb25lbnQodCl9LFk9e2Z0cDoyMSxmaWxlOm51bGwsaHR0cDo4MCxodHRwczo0NDMsd3M6ODAsd3NzOjQ0M30sSj1mdW5jdGlvbih0KXtyZXR1cm4gZihZLHQuc2NoZW1lKX0sSz1mdW5jdGlvbih0KXtyZXR1cm4iIiE9dC51c2VybmFtZXx8IiIhPXQucGFzc3dvcmR9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIXQuaG9zdHx8dC5jYW5ub3RCZUFCYXNlVVJMfHwiZmlsZSI9PXQuc2NoZW1lfSxRPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIDI9PXQubGVuZ3RoJiZJLnRlc3QodC5jaGFyQXQoMCkpJiYoIjoiPT0obj10LmNoYXJBdCgxKSl8fCFlJiYifCI9PW4pfSx0dD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdC5sZW5ndGg+MSYmUSh0LnNsaWNlKDAsMikpJiYoMj09dC5sZW5ndGh8fCIvIj09PShlPXQuY2hhckF0KDIpKXx8IlxcIj09PWV8fCI/Ij09PWV8fCIjIj09PWUpfSxldD1mdW5jdGlvbih0KXt2YXIgZT10LnBhdGgsbj1lLmxlbmd0aDshbnx8ImZpbGUiPT10LnNjaGVtZSYmMT09biYmUShlWzBdLCEwKXx8ZS5wb3AoKX0sbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIi4iPT09dHx8IiUyZSI9PT10LnRvTG93ZXJDYXNlKCl9LHJ0PXt9LG90PXt9LGl0PXt9LGF0PXt9LGN0PXt9LHN0PXt9LHV0PXt9LGx0PXt9LGZ0PXt9LGR0PXt9LHB0PXt9LGh0PXt9LHZ0PXt9LGd0PXt9LHl0PXt9LG10PXt9LGJ0PXt9LHh0PXt9LHd0PXt9LEV0PXt9LGp0PXt9LEN0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBpLGEsYyxzLHUsbD1ufHxydCxkPTAsaD0iIix2PSExLGc9ITEseT0hMTtmb3Iobnx8KHQuc2NoZW1lPSIiLHQudXNlcm5hbWU9IiIsdC5wYXNzd29yZD0iIix0Lmhvc3Q9bnVsbCx0LnBvcnQ9bnVsbCx0LnBhdGg9W10sdC5xdWVyeT1udWxsLHQuZnJhZ21lbnQ9bnVsbCx0LmNhbm5vdEJlQUJhc2VVUkw9ITEsZT1lLnJlcGxhY2UoRiwiIikpLGU9ZS5yZXBsYWNlKFUsIiIpLGk9cChlKTtkPD1pLmxlbmd0aDspe3N3aXRjaChhPWlbZF0sbCl7Y2FzZSBydDppZighYXx8IUkudGVzdChhKSl7aWYobilyZXR1cm4gUztsPWl0O2NvbnRpbnVlfWgrPWEudG9Mb3dlckNhc2UoKSxsPW90O2JyZWFrO2Nhc2Ugb3Q6aWYoYSYmKE0udGVzdChhKXx8IisiPT1hfHwiLSI9PWF8fCIuIj09YSkpaCs9YS50b0xvd2VyQ2FzZSgpO2Vsc2V7aWYoIjoiIT1hKXtpZihuKXJldHVybiBTO2g9IiIsbD1pdCxkPTA7Y29udGludWV9aWYobiYmKEoodCkhPWYoWSxoKXx8ImZpbGUiPT1oJiYoSyh0KXx8bnVsbCE9PXQucG9ydCl8fCJmaWxlIj09dC5zY2hlbWUmJiF0Lmhvc3QpKXJldHVybjtpZih0LnNjaGVtZT1oLG4pcmV0dXJuIHZvaWQoSih0KSYmWVt0LnNjaGVtZV09PXQucG9ydCYmKHQucG9ydD1udWxsKSk7aD0iIiwiZmlsZSI9PXQuc2NoZW1lP2w9Z3Q6Sih0KSYmbyYmby5zY2hlbWU9PXQuc2NoZW1lP2w9YXQ6Sih0KT9sPWx0OiIvIj09aVtkKzFdPyhsPWN0LGQrKyk6KHQuY2Fubm90QmVBQmFzZVVSTD0hMCx0LnBhdGgucHVzaCgiIiksbD13dCl9YnJlYWs7Y2FzZSBpdDppZighb3x8by5jYW5ub3RCZUFCYXNlVVJMJiYiIyIhPWEpcmV0dXJuIFM7aWYoby5jYW5ub3RCZUFCYXNlVVJMJiYiIyI9PWEpe3Quc2NoZW1lPW8uc2NoZW1lLHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIix0LmNhbm5vdEJlQUJhc2VVUkw9ITAsbD1qdDticmVha31sPSJmaWxlIj09by5zY2hlbWU/Z3Q6c3Q7Y29udGludWU7Y2FzZSBhdDppZigiLyIhPWF8fCIvIiE9aVtkKzFdKXtsPXN0O2NvbnRpbnVlfWw9ZnQsZCsrO2JyZWFrO2Nhc2UgY3Q6aWYoIi8iPT1hKXtsPWR0O2JyZWFrfWw9eHQ7Y29udGludWU7Y2FzZSBzdDppZih0LnNjaGVtZT1vLnNjaGVtZSxhPT1yKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnk7ZWxzZSBpZigiLyI9PWF8fCJcXCI9PWEmJkoodCkpbD11dDtlbHNlIGlmKCI/Ij09YSl0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT0iIixsPUV0O2Vsc2V7aWYoIiMiIT1hKXt0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5wYXRoLnBvcCgpLGw9eHQ7Y29udGludWV9dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLGw9anR9YnJlYWs7Y2FzZSB1dDppZighSih0KXx8Ii8iIT1hJiYiXFwiIT1hKXtpZigiLyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LGw9eHQ7Y29udGludWV9bD1kdH1lbHNlIGw9ZnQ7YnJlYWs7Y2FzZSBsdDppZihsPWZ0LCIvIiE9YXx8Ii8iIT1oLmNoYXJBdChkKzEpKWNvbnRpbnVlO2QrKzticmVhaztjYXNlIGZ0OmlmKCIvIiE9YSYmIlxcIiE9YSl7bD1kdDtjb250aW51ZX1icmVhaztjYXNlIGR0OmlmKCJAIj09YSl7diYmKGg9IiU0MCIraCksdj0hMCxjPXAoaCk7Zm9yKHZhciBtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBiPWNbbV07aWYoIjoiIT1ifHx5KXt2YXIgeD0kKGIsWik7eT90LnBhc3N3b3JkKz14OnQudXNlcm5hbWUrPXh9ZWxzZSB5PSEwfWg9IiJ9ZWxzZSBpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZKKHQpKXtpZih2JiYiIj09aClyZXR1cm4iSW52YWxpZCBhdXRob3JpdHkiO2QtPXAoaCkubGVuZ3RoKzEsaD0iIixsPXB0fWVsc2UgaCs9YTticmVhaztjYXNlIHB0OmNhc2UgaHQ6aWYobiYmImZpbGUiPT10LnNjaGVtZSl7bD1tdDtjb250aW51ZX1pZigiOiIhPWF8fGcpe2lmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKEoodCkmJiIiPT1oKXJldHVybiBPO2lmKG4mJiIiPT1oJiYoSyh0KXx8bnVsbCE9PXQucG9ydCkpcmV0dXJuO2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKGg9IiIsbD1idCxuKXJldHVybjtjb250aW51ZX0iWyI9PWE/Zz0hMDoiXSI9PWEmJihnPSExKSxoKz1hfWVsc2V7aWYoIiI9PWgpcmV0dXJuIE87aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPXZ0LG49PWh0KXJldHVybn1icmVhaztjYXNlIHZ0OmlmKCFULnRlc3QoYSkpe2lmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCl8fG4pe2lmKCIiIT1oKXt2YXIgdz1wYXJzZUludChoLDEwKTtpZih3PjY1NTM1KXJldHVybiBBO3QucG9ydD1KKHQpJiZ3PT09WVt0LnNjaGVtZV0/bnVsbDp3LGg9IiJ9aWYobilyZXR1cm47bD1idDtjb250aW51ZX1yZXR1cm4gQX1oKz1hO2JyZWFrO2Nhc2UgZ3Q6aWYodC5zY2hlbWU9ImZpbGUiLCIvIj09YXx8IlxcIj09YSlsPXl0O2Vsc2V7aWYoIW98fCJmaWxlIiE9by5zY2hlbWUpe2w9eHQ7Y29udGludWV9aWYoYT09cil0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnk7ZWxzZSBpZigiPyI9PWEpdC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT0iIixsPUV0O2Vsc2V7aWYoIiMiIT1hKXt0dChpLnNsaWNlKGQpLmpvaW4oIiIpKXx8KHQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLGV0KHQpKSxsPXh0O2NvbnRpbnVlfXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLGw9anR9fWJyZWFrO2Nhc2UgeXQ6aWYoIi8iPT1hfHwiXFwiPT1hKXtsPW10O2JyZWFrfW8mJiJmaWxlIj09by5zY2hlbWUmJiF0dChpLnNsaWNlKGQpLmpvaW4oIiIpKSYmKFEoby5wYXRoWzBdLCEwKT90LnBhdGgucHVzaChvLnBhdGhbMF0pOnQuaG9zdD1vLmhvc3QpLGw9eHQ7Y29udGludWU7Y2FzZSBtdDppZihhPT1yfHwiLyI9PWF8fCJcXCI9PWF8fCI/Ij09YXx8IiMiPT1hKXtpZighbiYmUShoKSlsPXh0O2Vsc2UgaWYoIiI9PWgpe2lmKHQuaG9zdD0iIixuKXJldHVybjtsPWJ0fWVsc2V7aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoImxvY2FsaG9zdCI9PXQuaG9zdCYmKHQuaG9zdD0iIiksbilyZXR1cm47aD0iIixsPWJ0fWNvbnRpbnVlfWgrPWE7YnJlYWs7Y2FzZSBidDppZihKKHQpKXtpZihsPXh0LCIvIiE9YSYmIlxcIiE9YSljb250aW51ZX1lbHNlIGlmKG58fCI/IiE9YSlpZihufHwiIyIhPWEpe2lmKGEhPXImJihsPXh0LCIvIiE9YSkpY29udGludWV9ZWxzZSB0LmZyYWdtZW50PSIiLGw9anQ7ZWxzZSB0LnF1ZXJ5PSIiLGw9RXQ7YnJlYWs7Y2FzZSB4dDppZihhPT1yfHwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fCFuJiYoIj8iPT1hfHwiIyI9PWEpKXtpZigiLi4iPT09KHU9KHU9aCkudG9Mb3dlckNhc2UoKSl8fCIlMmUuIj09PXV8fCIuJTJlIj09PXV8fCIlMmUlMmUiPT09dT8oZXQodCksIi8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIikpOm50KGgpPyIvIj09YXx8IlxcIj09YSYmSih0KXx8dC5wYXRoLnB1c2goIiIpOigiZmlsZSI9PXQuc2NoZW1lJiYhdC5wYXRoLmxlbmd0aCYmUShoKSYmKHQuaG9zdCYmKHQuaG9zdD0iIiksaD1oLmNoYXJBdCgwKSsiOiIpLHQucGF0aC5wdXNoKGgpKSxoPSIiLCJmaWxlIj09dC5zY2hlbWUmJihhPT1yfHwiPyI9PWF8fCIjIj09YSkpZm9yKDt0LnBhdGgubGVuZ3RoPjEmJiIiPT09dC5wYXRoWzBdOyl0LnBhdGguc2hpZnQoKTsiPyI9PWE/KHQucXVlcnk9IiIsbD1FdCk6IiMiPT1hJiYodC5mcmFnbWVudD0iIixsPWp0KX1lbHNlIGgrPSQoYSxHKTticmVhaztjYXNlIHd0OiI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWE/KHQuZnJhZ21lbnQ9IiIsbD1qdCk6YSE9ciYmKHQucGF0aFswXSs9JChhLHEpKTticmVhaztjYXNlIEV0Om58fCIjIiE9YT9hIT1yJiYoIiciPT1hJiZKKHQpP3QucXVlcnkrPSIlMjciOnQucXVlcnkrPSIjIj09YT8iJTIzIjokKGEscSkpOih0LmZyYWdtZW50PSIiLGw9anQpO2JyZWFrO2Nhc2UganQ6YSE9ciYmKHQuZnJhZ21lbnQrPSQoYSxXKSl9ZCsrfX0sa3Q9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWwodGhpcyxrdCwiVVJMIiksbz1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxhPVN0cmluZyh0KSxjPUUocix7dHlwZToiVVJMIn0pO2lmKHZvaWQgMCE9PW8paWYobyBpbnN0YW5jZW9mIGt0KWU9aihvKTtlbHNlIGlmKG49Q3QoZT17fSxTdHJpbmcobykpKXRocm93IFR5cGVFcnJvcihuKTtpZihuPUN0KGMsYSxudWxsLGUpKXRocm93IFR5cGVFcnJvcihuKTt2YXIgcz1jLnNlYXJjaFBhcmFtcz1uZXcgeCx1PXcocyk7dS51cGRhdGVTZWFyY2hQYXJhbXMoYy5xdWVyeSksdS51cGRhdGVVUkw9ZnVuY3Rpb24oKXtjLnF1ZXJ5PVN0cmluZyhzKXx8bnVsbH0saXx8KHIuaHJlZj1PdC5jYWxsKHIpLHIub3JpZ2luPUF0LmNhbGwociksci5wcm90b2NvbD1JdC5jYWxsKHIpLHIudXNlcm5hbWU9TXQuY2FsbChyKSxyLnBhc3N3b3JkPVR0LmNhbGwociksci5ob3N0PV90LmNhbGwociksci5ob3N0bmFtZT1MdC5jYWxsKHIpLHIucG9ydD1SdC5jYWxsKHIpLHIucGF0aG5hbWU9UHQuY2FsbChyKSxyLnNlYXJjaD1OdC5jYWxsKHIpLHIuc2VhcmNoUGFyYW1zPUR0LmNhbGwociksci5oYXNoPUZ0LmNhbGwocikpfSxTdD1rdC5wcm90b3R5cGUsT3Q9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5zY2hlbWUsbj10LnVzZXJuYW1lLHI9dC5wYXNzd29yZCxvPXQuaG9zdCxpPXQucG9ydCxhPXQucGF0aCxjPXQucXVlcnkscz10LmZyYWdtZW50LHU9ZSsiOiI7cmV0dXJuIG51bGwhPT1vPyh1Kz0iLy8iLEsodCkmJih1Kz1uKyhyPyI6IityOiIiKSsiQCIpLHUrPVYobyksbnVsbCE9PWkmJih1Kz0iOiIraSkpOiJmaWxlIj09ZSYmKHUrPSIvLyIpLHUrPXQuY2Fubm90QmVBQmFzZVVSTD9hWzBdOmEubGVuZ3RoPyIvIithLmpvaW4oIi8iKToiIixudWxsIT09YyYmKHUrPSI/IitjKSxudWxsIT09cyYmKHUrPSIjIitzKSx1fSxBdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnNjaGVtZSxuPXQucG9ydDtpZigiYmxvYiI9PWUpdHJ5e3JldHVybiBuZXcgVVJMKGUucGF0aFswXSkub3JpZ2lufWNhdGNoKHQpe3JldHVybiJudWxsIn1yZXR1cm4iZmlsZSIhPWUmJkoodCk/ZSsiOi8vIitWKHQuaG9zdCkrKG51bGwhPT1uPyI6IituOiIiKToibnVsbCJ9LEl0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykuc2NoZW1lKyI6In0sTXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS51c2VybmFtZX0sVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5wYXNzd29yZH0sX3Q9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5ob3N0LG49dC5wb3J0O3JldHVybiBudWxsPT09ZT8iIjpudWxsPT09bj9WKGUpOlYoZSkrIjoiK259LEx0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5ob3N0O3JldHVybiBudWxsPT09dD8iIjpWKHQpfSxSdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykucG9ydDtyZXR1cm4gbnVsbD09PXQ/IiI6U3RyaW5nKHQpfSxQdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnBhdGg7cmV0dXJuIHQuY2Fubm90QmVBQmFzZVVSTD9lWzBdOmUubGVuZ3RoPyIvIitlLmpvaW4oIi8iKToiIn0sTnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLnF1ZXJ5O3JldHVybiB0PyI/Iit0OiIifSxEdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnNlYXJjaFBhcmFtc30sRnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLmZyYWdtZW50O3JldHVybiB0PyIjIit0OiIifSxVdD1mdW5jdGlvbih0LGUpe3JldHVybntnZXQ6dCxzZXQ6ZSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19O2lmKGkmJnMoU3Qse2hyZWY6VXQoT3QsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1TdHJpbmcodCkscj1DdChlLG4pO2lmKHIpdGhyb3cgVHlwZUVycm9yKHIpO3coZS5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyhlLnF1ZXJ5KX0pKSxvcmlnaW46VXQoQXQpLHByb3RvY29sOlV0KEl0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO0N0KGUsU3RyaW5nKHQpKyI6IixydCl9KSksdXNlcm5hbWU6VXQoTXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1wKFN0cmluZyh0KSk7aWYoIVgoZSkpe2UudXNlcm5hbWU9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS51c2VybmFtZSs9JChuW3JdLFopfX0pKSxwYXNzd29yZDpVdChUdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS5wYXNzd29yZD0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnBhc3N3b3JkKz0kKG5bcl0sWil9fSkpLGhvc3Q6VXQoX3QsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHxDdChlLFN0cmluZyh0KSxwdCl9KSksaG9zdG5hbWU6VXQoTHQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHxDdChlLFN0cmluZyh0KSxodCl9KSkscG9ydDpVdChSdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtYKGUpfHwoIiI9PSh0PVN0cmluZyh0KSk/ZS5wb3J0PW51bGw6Q3QoZSx0LHZ0KSl9KSkscGF0aG5hbWU6VXQoUHQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7ZS5jYW5ub3RCZUFCYXNlVVJMfHwoZS5wYXRoPVtdLEN0KGUsdCsiIixidCkpfSkpLHNlYXJjaDpVdChOdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTsiIj09KHQ9U3RyaW5nKHQpKT9lLnF1ZXJ5PW51bGw6KCI/Ij09dC5jaGFyQXQoMCkmJih0PXQuc2xpY2UoMSkpLGUucXVlcnk9IiIsQ3QoZSx0LEV0KSksdyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLHNlYXJjaFBhcmFtczpVdChEdCksaGFzaDpVdChGdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTsiIiE9KHQ9U3RyaW5nKHQpKT8oIiMiPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5mcmFnbWVudD0iIixDdChlLHQsanQpKTplLmZyYWdtZW50PW51bGx9KSl9KSx1KFN0LCJ0b0pTT04iLChmdW5jdGlvbigpe3JldHVybiBPdC5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSx1KFN0LCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLGIpe3ZhciBCdD1iLmNyZWF0ZU9iamVjdFVSTCx6dD1iLnJldm9rZU9iamVjdFVSTDtCdCYmdShrdCwiY3JlYXRlT2JqZWN0VVJMIiwoZnVuY3Rpb24odCl7cmV0dXJuIEJ0LmFwcGx5KGIsYXJndW1lbnRzKX0pKSx6dCYmdShrdCwicmV2b2tlT2JqZWN0VVJMIiwoZnVuY3Rpb24odCl7cmV0dXJuIHp0LmFwcGx5KGIsYXJndW1lbnRzKX0pKX1nKGt0LCJVUkwiKSxvKHtnbG9iYWw6ITAsZm9yY2VkOiFhLHNoYW06IWl9LHtVUkw6a3R9KX0sOTg0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiVVJMIixwcm90bzohMCxlbnVtZXJhYmxlOiEwfSx7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX19KX0sMzY0Njc6ZnVuY3Rpb24odCxlLG4pe24oMTQwODYpfSw2NjU1NDpmdW5jdGlvbih0LGUsbil7big0OTMwKSxuKDYzNjQpfSw5MzI3MDpmdW5jdGlvbih0LGUsbil7big1MzUxMyksbig5OTI1NSksbig0ODQ0KSxuKDM1NTQpLG4oMTg4NDQpLG4oMzU2NTYpLG4oNDkwNTApLG4oOTM4NDMpLG4oNjYyMjQpLG4oNzE3MDApLG4oNjk1MjkpLG4oMjc3MzQpLG4oNzczNjkpLG4oNjk4NDIpLG4oOTc5MjgpLG4oOTM5KSxuKDYxNDY3KSxuKDE2MTI3KSxuKDUzNTg5KSxuKDgxMDQyKSxuKDE2NzU3KSxuKDExMDc0KSxuKDMzNTM5KSxuKDI0MTAzKSxuKDY0ODEzKSxuKDY4OTk5KSxuKDUzODI0KX0sODk3NDA6ZnVuY3Rpb24odCxlLG4pe24oMzg3OTIpLG4oMTk5MCksbig5NzI4NCksbigyNDU5OCksbig5OTk3OSksbigxODIwNSksbig4NTgpLG4oNjQ4OTkpfSw2ODAwMTpmdW5jdGlvbih0LGUsbil7bigzMDYxMyksbig2ODQwNiksbig0OTc5KSxuKDQ0NjQ2KX0sMjg2OTk6ZnVuY3Rpb24odCxlLG4pe24oOTk2MjgpO3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1yfSwxNTYyNDpmdW5jdGlvbih0LGUsbil7big1NzM2MCl9LDgxMjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDYxMjk4KSxuKDQ3MDA0KSxuKDY3NDYyKSxuKDkwNjcpLG4oMjAxMjQpLG4oMjEzNzEpLG4oMzg5ODQpLG4oNjkyMzcpLG4oMjY0OTcpLG4oNTMxNjgpLG4oNzM5NDkpLG4oODgyMTEpLG4oNzM3NjEpLG4oNDIxOTYpLG4oNDMzMzIpLG4oOTI2MDEpLG4oMjA0NzQpLG4oNTQ1NTYpLG4oNDA2MzgpLG4oOTY2NTkpLG4oMTQ2ODgpLG4oNzM3OCksbigyNzQyOCksbigzMzQzNiksbig4NDM4OCksbig1OTYyMyksbigzMjg1Myksbig2NzA3Mil9LDYyNjc3OmZ1bmN0aW9uKHQsZSxuKXtuKDM2NTcxKSxuKDQzMDg2KX0sMzc2MTM6ZnVuY3Rpb24odCxlLG4pe24oNDMyOTApLG4oMTQ2ODIpLG4oODc1NTUpfSwxNDcxNTpmdW5jdGlvbih0LGUsbil7big3MDIyNSksbigyMzk5KSxuKDE2ODA5KSxuKDY3MTQxKSxuKDkwNzY5KSxuKDU3ODkxKSxuKDE1NzIyKX0sMzY2ODY6ZnVuY3Rpb24odCxlLG4pe24oNzc5MDcpfSw2Nzc5MzpmdW5jdGlvbih0LGUsbil7big3NTY0Nyl9LDk0Nzc6ZnVuY3Rpb24odCxlLG4pe24oODQzMDkpLG4oNzI5NjMpLG4oNTYzNTkpfSw3MjM1NDpmdW5jdGlvbih0LGUsbil7bigyMDIzNCksbig1MTM3NCl9LDc0Njc5OmZ1bmN0aW9uKHQsZSxuKXtuKDUzNzcyKX0sOTQ3OTpmdW5jdGlvbih0LGUsbil7bigyNzc1KX0sODU2NTk6ZnVuY3Rpb24odCxlLG4pe24oOTY3NTEpLG4oNzMyMjApfSw1NDk4NjpmdW5jdGlvbih0LGUsbil7bigxMTA3MSl9LDE4ODE6ZnVuY3Rpb24odCxlLG4pe24oNDk2NDApLG4oNzQ5NjMpLG4oNjk0NTkpLG4oNDkxNTUpLG4oMjY4OTYpLG4oODc0NzQpLG4oOTc0MzMpLG4oNzEwOCksbigyMzYzMSl9LDU3NjAzOmZ1bmN0aW9uKHQsZSxuKXtuKDE3NjUpfSw4MTU0ODpmdW5jdGlvbih0LGUsbil7big5ODM1MCksbig0MTcxOCksbig1NzM3MSksbig4OTIzMCksbigzMjMwMyksbig2MjkxKSxuKDY2MTgxKX0sMjMxMDI6ZnVuY3Rpb24odCxlLG4pe24oNzM0NjApfSw0NDE1MzpmdW5jdGlvbih0LGUsbil7bigzMjA2Mil9LDczOTI6ZnVuY3Rpb24odCxlLG4pe24oNzQ1MjUpfSw3Nzc5OmZ1bmN0aW9uKHQsZSxuKXtuKDY0MDI2KSxuKDg2MDc3KX0sNjA4MjY6ZnVuY3Rpb24odCxlLG4pe24oMTM5MTApLG4oOTg0KSxuKDU1NTcpfSw1NTkzMzpmdW5jdGlvbih0LGUsbil7big2OTQyKSxuKDk0MjQ5KX0sODc2MDI6ZnVuY3Rpb24odCxlLG4pe24oNjgwMDEpLG4oMjMxMDIpLG4oNjA4MjYpO3ZhciByPW4oOTU5NjgpO3QuZXhwb3J0cz1yfSw5NTk2ODpmdW5jdGlvbih0LGUsbil7big2NjU1NCksbig5MzI3MCksbig4OTc0MCksbig2MjY3NyksbigxNDcxNSksbigzNjY4Niksbig2Nzc5Myksbig5NDc3KSxuKDcyMzU0KSxuKDc0Njc5KSxuKDU0OTg2KSxuKDU3NjAzKSxuKDQ0MTUzKTt2YXIgcj1uKDQ3OTcyKTt0LmV4cG9ydHM9cn0sNDc5NzI6ZnVuY3Rpb24odCxlLG4pe24oMzY0NjcpLG4oODEyMTMpLG4oMzc2MTMpLG4oODE1NDgpLG4oNTU5MzMpO3ZhciByPW4oNTkwMTEpO3QuZXhwb3J0cz1yfSw1OTAxMTpmdW5jdGlvbih0LGUsbil7big4NTY1OSksbig3Nzc5KTt2YXIgcj1uKDY4Njg1KTt0LmV4cG9ydHM9cn0sNjg2ODU6ZnVuY3Rpb24odCxlLG4pe24oMjg2OTkpLG4oOTQ3OSksbig3MzkyKTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNTczNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTMzMzUpO3QuZXhwb3J0cz1yfSw1MzMzNTpmdW5jdGlvbih0LGUsbil7bigxODgxKTt2YXIgcj1uKDg3NjAyKTt0LmV4cG9ydHM9cn0sOTI0MDQ6ZnVuY3Rpb24odCxlLG4pe24oNjcwMzkpLG4oNzk3OTkpLG4oNzQwMTApLG4oNjU5NzYpLG4oODE5OTQpLG4oMTM5MTApLG4oOTg0KSxuKDU1NTcpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSwxODk4NjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMV18fCIiLHI9dFszXTtpZighcilyZXR1cm4gbjtpZihlJiYiZnVuY3Rpb24iPT10eXBlb2YgYnRvYSl7dmFyIG89KGE9cixjPWJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpLHM9InNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCIuY29uY2F0KGMpLCIvKiMgIi5jb25jYXQocywiICovIikpLGk9ci5zb3VyY2VzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIi8qIyBzb3VyY2VVUkw9Ii5jb25jYXQoci5zb3VyY2VSb290KS5jb25jYXQodCwiICovIil9KSk7cmV0dXJuW25dLmNvbmNhdChpKS5jb25jYXQoW29dKS5qb2luKCJcbiIpfXZhciBhLGMscztyZXR1cm5bbl0uam9pbigiXG4iKX0oZSx0KTtyZXR1cm4gZVsyXT8iQG1lZGlhICIuY29uY2F0KGVbMl0sIiB7IikuY29uY2F0KG4sIn0iKTpufSkpLmpvaW4oIiIpfSxlLmk9ZnVuY3Rpb24odCxuKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVtbbnVsbCx0LCIiXV0pO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz1bXS5jb25jYXQodFtyXSk7biYmKG9bMl0/b1syXT0iIi5jb25jYXQobiwiIGFuZCAiKS5jb25jYXQob1syXSk6b1syXT1uKSxlLnB1c2gobyl9fSxlfX0sNDY2Nzk6ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxpPW8uaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixhPW8uYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsYz1vLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyI7ZnVuY3Rpb24gcyh0LGUsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSx0W2VdfXRyeXtzKHt9LCIiKX1jYXRjaCh0KXtzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1ufX1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBvPWUmJmUucHJvdG90eXBlIGluc3RhbmNlb2YgZz9lOmcsaT1PYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSxhPW5ldyBBKHJ8fFtdKTtyZXR1cm4gaS5faW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mO3JldHVybiBmdW5jdGlvbihvLGkpe2lmKHI9PT1wKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKHI9PT1oKXtpZigidGhyb3ciPT09byl0aHJvdyBpO3JldHVybiBNKCl9Zm9yKG4ubWV0aG9kPW8sbi5hcmc9aTs7KXt2YXIgYT1uLmRlbGVnYXRlO2lmKGEpe3ZhciBjPWsoYSxuKTtpZihjKXtpZihjPT09diljb250aW51ZTtyZXR1cm4gY319aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKHI9PT1mKXRocm93IHI9aCxuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO3I9cDt2YXIgcz1sKHQsZSxuKTtpZigibm9ybWFsIj09PXMudHlwZSl7aWYocj1uLmRvbmU/aDpkLHMuYXJnPT09diljb250aW51ZTtyZXR1cm57dmFsdWU6cy5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT1zLnR5cGUmJihyPWgsbi5tZXRob2Q9InRocm93IixuLmFyZz1zLmFyZyl9fX0odCxuLGEpLGl9ZnVuY3Rpb24gbCh0LGUsbil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxuKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6dH19fXQud3JhcD11O3ZhciBmPSJzdXNwZW5kZWRTdGFydCIsZD0ic3VzcGVuZGVkWWllbGQiLHA9ImV4ZWN1dGluZyIsaD0iY29tcGxldGVkIix2PXt9O2Z1bmN0aW9uIGcoKXt9ZnVuY3Rpb24geSgpe31mdW5jdGlvbiBtKCl7fXZhciBiPXt9O3MoYixpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciB4PU9iamVjdC5nZXRQcm90b3R5cGVPZix3PXgmJngoeChJKFtdKSkpO3cmJnchPT1uJiZyLmNhbGwodyxpKSYmKGI9dyk7dmFyIEU9bS5wcm90b3R5cGU9Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiKTtmdW5jdGlvbiBqKHQpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBDKHQsZSl7ZnVuY3Rpb24gbihvLGksYSxjKXt2YXIgcz1sKHRbb10sdCxpKTtpZigidGhyb3ciIT09cy50eXBlKXt2YXIgdT1zLmFyZyxmPXUudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT10eXBlb2YgZiYmci5jYWxsKGYsIl9fYXdhaXQiKT9lLnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtuKCJuZXh0Iix0LGEsYyl9KSwoZnVuY3Rpb24odCl7bigidGhyb3ciLHQsYSxjKX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7dS52YWx1ZT10LGEodSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG4oInRocm93Iix0LGEsYyl9KSl9YyhzLmFyZyl9dmFyIG87dGhpcy5faW52b2tlPWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcgZSgoZnVuY3Rpb24oZSxvKXtuKHQscixlLG8pfSkpfXJldHVybiBvPW8/by50aGVuKGksaSk6aSgpfX1mdW5jdGlvbiBrKHQsbil7dmFyIHI9dC5pdGVyYXRvcltuLm1ldGhvZF07aWYocj09PWUpe2lmKG4uZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09bi5tZXRob2Qpe2lmKHQuaXRlcmF0b3IucmV0dXJuJiYobi5tZXRob2Q9InJldHVybiIsbi5hcmc9ZSxrKHQsbiksInRocm93Ij09PW4ubWV0aG9kKSlyZXR1cm4gdjtuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gdn12YXIgbz1sKHIsdC5pdGVyYXRvcixuLmFyZyk7aWYoInRocm93Ij09PW8udHlwZSlyZXR1cm4gbi5tZXRob2Q9InRocm93IixuLmFyZz1vLmFyZyxuLmRlbGVnYXRlPW51bGwsdjt2YXIgaT1vLmFyZztyZXR1cm4gaT9pLmRvbmU/KG5bdC5yZXN1bHROYW1lXT1pLnZhbHVlLG4ubmV4dD10Lm5leHRMb2MsInJldHVybiIhPT1uLm1ldGhvZCYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz1lKSxuLmRlbGVnYXRlPW51bGwsdik6aToobi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLG4uZGVsZWdhdGU9bnVsbCx2KX1mdW5jdGlvbiBTKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIEEodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHQuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIEkodCl7aWYodCl7dmFyIG49dFtpXTtpZihuKXJldHVybiBuLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbz0tMSxhPWZ1bmN0aW9uIG4oKXtmb3IoOysrbzx0Lmxlbmd0aDspaWYoci5jYWxsKHQsbykpcmV0dXJuIG4udmFsdWU9dFtvXSxuLmRvbmU9ITEsbjtyZXR1cm4gbi52YWx1ZT1lLG4uZG9uZT0hMCxufTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0Ok19fWZ1bmN0aW9uIE0oKXtyZXR1cm57dmFsdWU6ZSxkb25lOiEwfX1yZXR1cm4geS5wcm90b3R5cGU9bSxzKEUsImNvbnN0cnVjdG9yIixtKSxzKG0sImNvbnN0cnVjdG9yIix5KSx5LmRpc3BsYXlOYW1lPXMobSxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09eXx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsbSk6KHQuX19wcm90b19fPW0scyh0LGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRSksdH0sdC5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0saihDLnByb3RvdHlwZSkscyhDLnByb3RvdHlwZSxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1DLHQuYXN5bmM9ZnVuY3Rpb24oZSxuLHIsbyxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgYT1uZXcgQyh1KGUsbixyLG8pLGkpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24obik/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6YS5uZXh0KCl9KSl9LGooRSkscyhFLGMsIkdlbmVyYXRvciIpLHMoRSxpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHMoRSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGUucmV2ZXJzZSgpLGZ1bmN0aW9uIG4oKXtmb3IoO2UubGVuZ3RoOyl7dmFyIHI9ZS5wb3AoKTtpZihyIGluIHQpcmV0dXJuIG4udmFsdWU9cixuLmRvbmU9ITEsbn1yZXR1cm4gbi5kb25lPSEwLG59fSx0LnZhbHVlcz1JLEEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWUsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9ZSx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChPKSwhdClmb3IodmFyIG4gaW4gdGhpcykidCI9PT1uLmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsbikmJiFpc05hTigrbi5zbGljZSgxKSkmJih0aGlzW25dPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIG49dGhpcztmdW5jdGlvbiBvKHIsbyl7cmV0dXJuIGMudHlwZT0idGhyb3ciLGMuYXJnPXQsbi5uZXh0PXIsbyYmKG4ubWV0aG9kPSJuZXh0IixuLmFyZz1lKSwhIW99Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLGM9YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBvKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1yLmNhbGwoYSwiY2F0Y2hMb2MiKSx1PXIuY2FsbChhLCJmaW5hbGx5TG9jIik7aWYocyYmdSl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighdSl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgbz10aGlzLnRyeUVudHJpZXNbbl07aWYoby50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKG8sImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PG8uZmluYWxseUxvYyl7dmFyIGk9bzticmVha319aSYmKCJicmVhayI9PT10fHwiY29udGludWUiPT09dCkmJmkudHJ5TG9jPD1lJiZlPD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBhPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBhLnR5cGU9dCxhLmFyZz1lLGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLHYpOnRoaXMuY29tcGxldGUoYSl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4iYnJlYWsiPT09dC50eXBlfHwiY29udGludWUiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzoicmV0dXJuIj09PXQudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPXQuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSksdn0sZmluaXNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLmZpbmFsbHlMb2M9PT10KXJldHVybiB0aGlzLmNvbXBsZXRlKG4uY29tcGxldGlvbixuLmFmdGVyTG9jKSxPKG4pLHZ9fSxjYXRjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi50cnlMb2M9PT10KXt2YXIgcj1uLmNvbXBsZXRpb247aWYoInRocm93Ij09PXIudHlwZSl7dmFyIG89ci5hcmc7TyhuKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LG4scil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOkkodCkscmVzdWx0TmFtZTpuLG5leHRMb2M6cn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz1lKSx2fX0sdH0odC5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPWV9Y2F0Y2godCl7Im9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lPWU6RnVuY3Rpb24oInIiLCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByIikoZSl9fX0sZT17fTtmdW5jdGlvbiBuKHIpe3ZhciBvPWVbcl07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBpPWVbcl09e2lkOnIsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUse2E6ZX0pLGV9LG4uZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKW4ubyhlLHIpJiYhbi5vKHQscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIse2VudW1lcmFibGU6ITAsZ2V0OmVbcl19KX0sbi5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbi5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9e307bi5yKHQpLG4uZCh0LHtkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF90fSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gVHR9fSk7dmFyIGU9big2NDE1Nykscj1uLm4oZSksbz0obig2MDQ5MSksbig0NjY3OSksIlVSTFNlYXJjaFBhcmFtcyJpbiBzZWxmKSxpPSJTeW1ib2wiaW4gc2VsZiYmIml0ZXJhdG9yImluIFN5bWJvbCxhPSJGaWxlUmVhZGVyImluIHNlbGYmJiJCbG9iImluIHNlbGYmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksYz0iRm9ybURhdGEiaW4gc2VsZixzPSJBcnJheUJ1ZmZlciJpbiBzZWxmO2lmKHMpdmFyIHU9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSxsPUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnUuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpPi0xfTtmdW5jdGlvbiBmKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSwvW15hLXowLTlcLSMkJSYnKisuXl9gfH5dL2kudGVzdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZSIpO3JldHVybiB0LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJih0PVN0cmluZyh0KSksdH1mdW5jdGlvbiBwKHQpe3ZhciBlPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dC5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWUsdmFsdWU6ZX19fTtyZXR1cm4gaSYmKGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBlfSksZX1mdW5jdGlvbiBoKHQpe3RoaXMubWFwPXt9LHQgaW5zdGFuY2VvZiBoP3QuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0aGlzLmFwcGVuZChlLHQpfSksdGhpcyk6QXJyYXkuaXNBcnJheSh0KT90LmZvckVhY2goKGZ1bmN0aW9uKHQpe3RoaXMuYXBwZW5kKHRbMF0sdFsxXSl9KSx0aGlzKTp0JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0aGlzLmFwcGVuZChlLHRbZV0pfSksdGhpcyl9ZnVuY3Rpb24gdih0KXtpZih0LmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKSk7dC5ib2R5VXNlZD0hMH1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxuKXt0Lm9ubG9hZD1mdW5jdGlvbigpe2UodC5yZXN1bHQpfSx0Lm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHQuZXJyb3IpfX0pKX1mdW5jdGlvbiB5KHQpe3ZhciBlPW5ldyBGaWxlUmVhZGVyLG49ZyhlKTtyZXR1cm4gZS5yZWFkQXNBcnJheUJ1ZmZlcih0KSxufWZ1bmN0aW9uIG0odCl7aWYodC5zbGljZSlyZXR1cm4gdC5zbGljZSgwKTt2YXIgZT1uZXcgVWludDhBcnJheSh0LmJ5dGVMZW5ndGgpO3JldHVybiBlLnNldChuZXcgVWludDhBcnJheSh0KSksZS5idWZmZXJ9ZnVuY3Rpb24gYigpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuX2JvZHlJbml0PXQsdD8ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5fYm9keVRleHQ9dDphJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlCbG9iPXQ6YyYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUZvcm1EYXRhPXQ6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlUZXh0PXQudG9TdHJpbmcoKTpzJiZhJiYoKGU9dCkmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGUpKT8odGhpcy5fYm9keUFycmF5QnVmZmVyPW0odC5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk6cyYmKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpfHxsKHQpKT90aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0KTp0aGlzLl9ib2R5VGV4dD10PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KTp0aGlzLl9ib2R5VGV4dD0iIix0aGlzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKXx8KCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOm8mJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KSYmdGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSl9LGEmJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgdD12KHRoaXMpO2lmKHQpcmV0dXJuIHQ7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2IiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/dih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbih5KX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciB0LGUsbixyPXYodGhpcyk7aWYocilyZXR1cm4gcjtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gdD10aGlzLl9ib2R5QmxvYixlPW5ldyBGaWxlUmVhZGVyLG49ZyhlKSxlLnJlYWRBc1RleHQodCksbjtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCksbj1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIG4uam9pbigiIil9KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxjJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEUpfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9aC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dD1mKHQpLGU9ZChlKTt2YXIgbj10aGlzLm1hcFt0XTt0aGlzLm1hcFt0XT1uP24rIiwgIitlOmV9LGgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5tYXBbZih0KV19LGgucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdD1mKHQpLHRoaXMuaGFzKHQpP3RoaXMubWFwW3RdOm51bGx9LGgucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoZih0KSl9LGgucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3RoaXMubWFwW2YodCldPWQoZSl9LGgucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobikmJnQuY2FsbChlLHRoaXMubWFwW25dLG4sdGhpcyl9LGgucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3QucHVzaChuKX0pKSxwKHQpfSxoLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSkscCh0KX0saC5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKFtuLGVdKX0pKSxwKHQpfSxpJiYoaC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1oLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgeD1bIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCJdO2Z1bmN0aW9uIHcodCxlKXt2YXIgbixyLG89KGU9ZXx8e30pLmJvZHk7aWYodCBpbnN0YW5jZW9mIHcpe2lmKHQuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9dC51cmwsdGhpcy5jcmVkZW50aWFscz10LmNyZWRlbnRpYWxzLGUuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaCh0LmhlYWRlcnMpKSx0aGlzLm1ldGhvZD10Lm1ldGhvZCx0aGlzLm1vZGU9dC5tb2RlLHRoaXMuc2lnbmFsPXQuc2lnbmFsLG98fG51bGw9PXQuX2JvZHlJbml0fHwobz10Ll9ib2R5SW5pdCx0LmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyh0KTtpZih0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJzYW1lLW9yaWdpbiIsIWUuaGVhZGVycyYmdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycykpLHRoaXMubWV0aG9kPShuPWUubWV0aG9kfHx0aGlzLm1ldGhvZHx8IkdFVCIscj1uLnRvVXBwZXJDYXNlKCkseC5pbmRleE9mKHIpPi0xP3I6biksdGhpcy5tb2RlPWUubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMuc2lnbmFsPWUuc2lnbmFsfHx0aGlzLnNpZ25hbCx0aGlzLnJlZmVycmVyPW51bGwsKCJHRVQiPT09dGhpcy5tZXRob2R8fCJIRUFEIj09PXRoaXMubWV0aG9kKSYmbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cyIpO3RoaXMuX2luaXRCb2R5KG8pfWZ1bmN0aW9uIEUodCl7dmFyIGU9bmV3IEZvcm1EYXRhO3JldHVybiB0LnRyaW0oKS5zcGxpdCgiJiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBuPXQuc3BsaXQoIj0iKSxyPW4uc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIiksbz1uLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7ZS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KHIpLGRlY29kZVVSSUNvbXBvbmVudChvKSl9fSkpLGV9ZnVuY3Rpb24gaih0KXt2YXIgZT1uZXcgaDtyZXR1cm4gdC5yZXBsYWNlKC9ccj9cbltcdCBdKy9nLCIgIikuc3BsaXQoL1xyP1xuLykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5zcGxpdCgiOiIpLHI9bi5zaGlmdCgpLnRyaW0oKTtpZihyKXt2YXIgbz1uLmpvaW4oIjoiKS50cmltKCk7ZS5hcHBlbmQocixvKX19KSksZX1mdW5jdGlvbiBDKHQsZSl7ZXx8KGU9e30pLHRoaXMudHlwZT0iZGVmYXVsdCIsdGhpcy5zdGF0dXM9dm9pZCAwPT09ZS5zdGF0dXM/MjAwOmUuc3RhdHVzLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD0ic3RhdHVzVGV4dCJpbiBlP2Uuc3RhdHVzVGV4dDoiT0siLHRoaXMuaGVhZGVycz1uZXcgaChlLmhlYWRlcnMpLHRoaXMudXJsPWUudXJsfHwiIix0aGlzLl9pbml0Qm9keSh0KX13LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdyh0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGIuY2FsbCh3LnByb3RvdHlwZSksYi5jYWxsKEMucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgQyh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGgodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0sQy5lcnJvcj1mdW5jdGlvbigpe3ZhciB0PW5ldyBDKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6IiJ9KTtyZXR1cm4gdC50eXBlPSJlcnJvciIsdH07dmFyIGs9WzMwMSwzMDIsMzAzLDMwNywzMDhdO0MucmVkaXJlY3Q9ZnVuY3Rpb24odCxlKXtpZigtMT09PWsuaW5kZXhPZihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBzdGF0dXMgY29kZSIpO3JldHVybiBuZXcgQyhudWxsLHtzdGF0dXM6ZSxoZWFkZXJzOntsb2NhdGlvbjp0fX0pfTt2YXIgUz1zZWxmLkRPTUV4Y2VwdGlvbjt0cnl7bmV3IFN9Y2F0Y2godCl7KFM9ZnVuY3Rpb24odCxlKXt0aGlzLm1lc3NhZ2U9dCx0aGlzLm5hbWU9ZTt2YXIgbj1FcnJvcih0KTt0aGlzLnN0YWNrPW4uc3RhY2t9KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLFMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVN9ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgbz1uZXcgdyh0LGUpO2lmKG8uc2lnbmFsJiZvLnNpZ25hbC5hYm9ydGVkKXJldHVybiByKG5ldyBTKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKTt2YXIgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gYygpe2kuYWJvcnQoKX1pLm9ubG9hZD1mdW5jdGlvbigpe3ZhciB0PXtzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpqKGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fCIiKX07dC51cmw9InJlc3BvbnNlVVJMImluIGk/aS5yZXNwb25zZVVSTDp0LmhlYWRlcnMuZ2V0KCJYLVJlcXVlc3QtVVJMIik7dmFyIGU9InJlc3BvbnNlImluIGk/aS5yZXNwb25zZTppLnJlc3BvbnNlVGV4dDtuKG5ldyBDKGUsdCkpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtyKG5ldyBTKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX0saS5vcGVuKG8ubWV0aG9kLG8udXJsLCEwKSwiaW5jbHVkZSI9PT1vLmNyZWRlbnRpYWxzP2kud2l0aENyZWRlbnRpYWxzPSEwOiJvbWl0Ij09PW8uY3JlZGVudGlhbHMmJihpLndpdGhDcmVkZW50aWFscz0hMSksInJlc3BvbnNlVHlwZSJpbiBpJiZhJiYoaS5yZXNwb25zZVR5cGU9ImJsb2IiKSxvLmhlYWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpLnNldFJlcXVlc3RIZWFkZXIoZSx0KX0pKSxvLnNpZ25hbCYmKG8uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1pLnJlYWR5U3RhdGUmJm8uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKX0pLGkuc2VuZCh2b2lkIDA9PT1vLl9ib2R5SW5pdD9udWxsOm8uX2JvZHlJbml0KX0pKX1mdW5jdGlvbiBBKHQsZSl7Zm9yKHZhciBuPVtdLHI9W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLSA+Mjspbi5wdXNoKGFyZ3VtZW50c1tvXSk7Zm9yKDtuLmxlbmd0aDspe3ZhciBpPW4ucG9wKCk7aWYoaSYmaS5wb3ApZm9yKG89aS5sZW5ndGg7by0tOyluLnB1c2goaVtvXSk7ZWxzZSBudWxsIT1pJiYhMCE9PWkmJiExIT09aSYmci5wdXNoKGkpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZXx8e30scik6e25vZGVOYW1lOnQsYXR0cmlidXRlczplfHx7fSxjaGlsZHJlbjpyLGtleTplJiZlLmtleX19Ty5wb2x5ZmlsbD0hMCxzZWxmLmZldGNofHwoc2VsZi5mZXRjaD1PLHNlbGYuSGVhZGVycz1oLHNlbGYuUmVxdWVzdD13LHNlbGYuUmVzcG9uc2U9Qyk7dmFyIEk9big2NjA4MSksTT1uLm4oSSksVD1uKDkyODE2KSxfPW4ubihUKSxMPW4oNDQ2NzQpLFI9bi5uKEwpLFA9big0NDYyMSksTj1uLm4oUCksRD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIEYodCl7dmFyIGUsbixyPXR5cGVvZiB0LG89IiI7aWYoInN0cmluZyI9PT1yfHwibnVtYmVyIj09PXIpcmV0dXJuIHR8fCIiO2lmKEQodCkmJnQubGVuZ3RoPjApZm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspIiIhPT0ocj1GKHRbZV0pKSYmKG8rPShvJiYiICIpK3IpO2Vsc2UgZm9yKGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdJiYobys9KG8mJiIgIikrZSk7cmV0dXJuIG99dmFyIFU9IngtdWwtZW52aXJvbm1lbnQtaWQiLEI9IngtdWwtYW5vbnltb3VzLWlkIix6PSJ4LXVsLXVzZXItaWQiLEg9IngtdWwtdmlzaXRvci1pZCIsVj0ieC11bC1pbnN0YWxsYXRpb24tbWV0aG9kIixxPSJ3ZWItZ3RtIixXPSJ3ZWItc2VnbWVudCIsRz0id2ViLXNuaXBwZXQiLFo9InVsLWN1c3RvbS1zdHlsZSIsJD0idWwtY2FyZF9fY29udGFpbmVyIixZPSJ1bC1jYXJkLS12aWRlbyIsSj0iY2xvc2UtY29udGFpbmVyIixLPSJjbG9zZS1idG4iLFg9Imxpa2VydC1udW1iZXIiLFE9Im5wcy1udW1iZXIiLHR0PSJjaG9pY2UiLGV0PSJzZWxlY3QtbGFiZWwiLG50PSJzZWxlY3QtY2hlY2tib3giLHJ0PSJzZWxlY3QtcmFkaW8iLG90PSJ1bC1jYXJkX19jaG9pY2VzIixpdD0idWwtY2FyZC10ZXh0X19pbnB1dCIsYXQ9Ii0tZGVza3RvcCIsY3Q9Ii0tbW9iaWxlIixzdD0idWwtcXVlc3Rpb24iLHV0PSJ1bC1jYXB0aW9uIixsdD0iZmFkZS1pbi10cmFuc2l0aW9uIixmdD0idWwtY2FyZC1tYWluLWNvbnRlbnQiLGR0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QrKGU/Y3Q6YXQpLHRdfSxwdD1mdW5jdGlvbih0LGUpe3JldHVyblt0LCIiLmNvbmNhdCh0LCJfXyIpLmNvbmNhdChlKV19LGh0PWZ1bmN0aW9uKCl7cmV0dXJuIEEoInN2ZyIse3dpZHRoOiIxMDAiLGhlaWdodDoiMTMiLHZpZXdCb3g6IjAgMCAxMDAgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYWx0OiJQb3dlcmVkIGJ5IFNwcmlnIn0sQSgicGF0aCIse2Q6Ik0zLjAzNjkgMC44Mzk5ODFIMC4wMjQ5MDIzVjguOTk5OThIMS4zMjA5VjYuNTM5OThIMi44NTY5QzQuODk2OSA2LjUzOTk4IDYuMjQwOSA1LjM3NTk4IDYuMjQwOSAzLjYyMzk4QzYuMjQwOSAxLjk1NTk4IDQuOTY4OSAwLjgzOTk4MSAzLjAzNjkgMC44Mzk5ODFaTTMuMDAwOSA1LjM1MTk4SDEuMzIwOVYyLjAyNzk4SDMuMDAwOUM0LjE3NjkgMi4wMjc5OCA0Ljk2ODkgMi42NzU5OCA0Ljk2ODkgMy42MjM5OEM0Ljk2ODkgNC42NTU5OCA0LjE3NjkgNS4zNTE5OCAzLjAwMDkgNS4zNTE5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik05LjkwNjUzIDMuMjE1OThDOC4xNTQ1MyAzLjIxNTk4IDYuOTA2NTMgNC40NTE5OCA2LjkwNjUzIDYuMTc5OThDNi45MDY1MyA3LjkwNzk4IDguMTU0NTMgOS4xNDM5OCA5LjkwNjUzIDkuMTQzOThDMTEuNjU4NSA5LjE0Mzk4IDEyLjkwNjUgNy45MDc5OCAxMi45MDY1IDYuMTc5OThDMTIuOTA2NSA0LjQ1MTk4IDExLjY1ODUgMy4yMTU5OCA5LjkwNjUzIDMuMjE1OThaTTkuOTA2NTMgOC4wMTU5OEM4Ljg4NjUzIDguMDE1OTggOC4xNTQ1MyA3LjIzNTk4IDguMTU0NTMgNi4xNzk5OEM4LjE1NDUzIDUuMTExOTggOC44ODY1MyA0LjM0Mzk4IDkuOTA2NTMgNC4zNDM5OEMxMC45MjY1IDQuMzQzOTggMTEuNjU4NSA1LjExMTk4IDExLjY1ODUgNi4xNzk5OEMxMS42NTg1IDcuMjM1OTggMTAuOTI2NSA4LjAxNTk4IDkuOTA2NTMgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik0yMC45NjMxIDMuMzU5OThMMTkuNzM5MSA3LjExNTk4TDE4LjM5NTEgMy4zNTk5OEgxNy4zMjcxTDE1Ljk4MzEgNy4xMjc5OEwxNC43NTkxIDMuMzU5OThIMTMuNDE1MUwxNS40NDMxIDguOTk5OThIMTYuNTM1MUwxNy44NjcxIDUuMDg3OThMMTkuMTg3MSA4Ljk5OTk4SDIwLjI3OTFMMjIuMzA3MSAzLjM1OTk4SDIwLjk2MzFaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMjUuNzI0NiAzLjIxNTk4QzI0LjAwODYgMy4yMTU5OCAyMi44MjA2IDQuNTExOTggMjIuODIwNiA2LjE3OTk4QzIyLjgyMDYgNy44NTk5OCAyNC4wMjA2IDkuMTQzOTggMjUuNzk2NiA5LjE0Mzk4QzI3LjAyMDYgOS4xNDM5OCAyOC4wMTY2IDguNTQzOTggMjguMzc2NiA3LjUyMzk4SDI3LjAwODZDMjYuNzgwNiA3Ljg4Mzk4IDI2LjM2MDYgOC4wNTE5OCAyNS44MDg2IDguMDUxOThDMjQuNzUyNiA4LjA1MTk4IDI0LjIxMjYgNy40MDM5OCAyNC4wOTI2IDYuNTUxOThIMjguNTIwNkMyOC43NjA2IDQuNjQzOTggMjcuNTk2NiAzLjIxNTk4IDI1LjcyNDYgMy4yMTU5OFpNMjUuNzM2NiA0LjI3MTk4QzI2LjYxMjYgNC4yNzE5OCAyNy4yMTI2IDQuNzYzOTggMjcuMjg0NiA1LjY4Nzk4SDI0LjExNjZDMjQuMjYwNiA0Ljg5NTk4IDI0LjgwMDYgNC4yNzE5OCAyNS43MzY2IDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMzEuMTI5NyA0LjEyNzk4VjMuMzU5OThIMjkuODgxN1Y4Ljk5OTk4SDMxLjEyOTdWNS40NDc5OEMzMS42MzM3IDQuNzg3OTggMzIuMzE3NyA0LjQ1MTk4IDMzLjIxNzcgNC40MTU5OFYzLjIzOTk4QzMyLjM1MzcgMy4yMzk5OCAzMS42NDU3IDMuNTYzOTggMzEuMTI5NyA0LjEyNzk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTM2LjgyMjIgMy4yMTU5OEMzNS4xMDYyIDMuMjE1OTggMzMuOTE4MiA0LjUxMTk4IDMzLjkxODIgNi4xNzk5OEMzMy45MTgyIDcuODU5OTggMzUuMTE4MiA5LjE0Mzk4IDM2Ljg5NDIgOS4xNDM5OEMzOC4xMTgyIDkuMTQzOTggMzkuMTE0MiA4LjU0Mzk4IDM5LjQ3NDIgNy41MjM5OEgzOC4xMDYyQzM3Ljg3ODIgNy44ODM5OCAzNy40NTgyIDguMDUxOTggMzYuOTA2MiA4LjA1MTk4QzM1Ljg1MDIgOC4wNTE5OCAzNS4zMTAyIDcuNDAzOTggMzUuMTkwMiA2LjU1MTk4SDM5LjYxODJDMzkuODU4MiA0LjY0Mzk4IDM4LjY5NDIgMy4yMTU5OCAzNi44MjIyIDMuMjE1OThaTTM2LjgzNDIgNC4yNzE5OEMzNy43MTAyIDQuMjcxOTggMzguMzEwMiA0Ljc2Mzk4IDM4LjM4MjIgNS42ODc5OEgzNS4yMTQyQzM1LjM1ODIgNC44OTU5OCAzNS44OTgyIDQuMjcxOTggMzYuODM0MiA0LjI3MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTQ1LjQ4ODYgMC40Nzk5OFYzLjgwMzk4QzQ1LjAwODYgMy40MzE5OCA0NC4zOTY2IDMuMjE1OTggNDMuNjc2NiAzLjIxNTk4QzQyLjA5MjYgMy4yMTU5OCA0MC44MjA2IDQuNTM1OTggNDAuODIwNiA2LjE2Nzk4QzQwLjgyMDYgNy44MjM5OCA0Mi4wOTI2IDkuMTQzOTggNDMuNjc2NiA5LjE0Mzk4QzQ0LjM5NjYgOS4xNDM5OCA0NS4wMDg2IDguOTI3OTggNDUuNDg4NiA4LjU0Mzk4VjguOTk5OThINDYuNzI0NlYwLjQ3OTk4SDQ1LjQ4ODZaTTQzLjg1NjYgOC4wMTU5OEM0Mi44MjQ2IDguMDE1OTggNDIuMDY4NiA3LjE3NTk4IDQyLjA2ODYgNi4xNjc5OEM0Mi4wNjg2IDUuMTcxOTggNDIuODI0NiA0LjM0Mzk4IDQzLjg1NjYgNC4zNDM5OEM0NC40ODA2IDQuMzQzOTggNDUuMDY4NiA0LjU1OTk4IDQ1LjQ4ODYgNS4xNTk5OFY3LjE4Nzk4QzQ1LjA2ODYgNy43OTk5OCA0NC40ODA2IDguMDE1OTggNDMuODU2NiA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTU0LjY3OTcgMy4yMTU5OEM1My45NTk3IDMuMjE1OTggNTMuMzQ3NyAzLjQzMTk4IDUyLjg3OTcgMy43OTE5OFYwLjQ3OTk4SDUxLjYzMTdWOC45OTk5OEg1Mi44Nzk3VjguNTU1OThDNTMuMzQ3NyA4LjkyNzk4IDUzLjk1OTcgOS4xNDM5OCA1NC42Nzk3IDkuMTQzOThDNTYuMjYzNyA5LjE0Mzk4IDU3LjU0NzcgNy44MjM5OCA1Ny41NDc3IDYuMTY3OThDNTcuNTQ3NyA0LjUzNTk4IDU2LjI2MzcgMy4yMTU5OCA1NC42Nzk3IDMuMjE1OThaTTU0LjQ5OTcgOC4wMTU5OEM1My44NzU3IDguMDE1OTggNTMuMjk5NyA3Ljc5OTk4IDUyLjg3OTcgNy4yMTE5OFY1LjEzNTk4QzUzLjI5OTcgNC41NDc5OCA1My44NzU3IDQuMzQzOTggNTQuNDk5NyA0LjM0Mzk4QzU1LjU0MzcgNC4zNDM5OCA1Ni4yOTk3IDUuMTcxOTggNTYuMjk5NyA2LjE2Nzk4QzU2LjI5OTcgNy4xNzU5OCA1NS41NDM3IDguMDE1OTggNTQuNDk5NyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTYzLjMzNDcgMy4zNDc5OEw2MS4zOTA3IDcuNzYzOThMNTkuMjY2NyAzLjM0Nzk4SDU3LjkzNDdMNjAuODE0NyA5LjA4Mzk4TDU5LjYyNjcgMTEuNzg0SDYwLjkzNDdMNjQuNjU0NyAzLjM0Nzk4SDYzLjMzNDdaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNzEuMTQ2NiA0LjM0NjYxQzY5LjgwOTIgNC4wNTAzOCA2OS4xMzEgMy41MzAwMSA2OS4xMzEgMi44MDA2NUM2OS4xMzEgMi4wNDcwNSA2OS44NTQ2IDEuNDc4MjIgNzAuODE0MiAxLjQ3ODIyQzcxLjgwMzQgMS40NzgyMiA3Mi41NDk2IDIuMTAzMzkgNzIuNTQ5NiAyLjkzMjFWMi45OTgxM0g3My45MTY1VjIuOTMyMUM3My45MTY1IDEuNDE3NjQgNzIuNTg4MyAwLjI3MjcwNSA3MC44MjcxIDAuMjcyNzA1QzY5Ljk3ODQgMC4yNzI3MDUgNjkuMjAwOSAwLjUzMzE5MSA2OC42Mzc5IDEuMDA1N0M2OC4zNTg0IDEuMjM2MTkgNjguMTMzOSAxLjUyNDg3IDY3Ljk4MDUgMS44NTExQzY3LjgyNzEgMi4xNzczMyA2Ny43NDg2IDIuNTMzMDMgNjcuNzUwNiAyLjg5MjczQzY3Ljc0NTEgMy4yMjI1NSA2Ny44MTM3IDMuNTQ5NDkgNjcuOTUxNSAzLjg0OTk0QzY4LjA4OTQgNC4xNTAzOCA2OC4yOTMgNC40MTY4NiA2OC41NDc4IDQuNjMwMTJDNjkuMDIxOCA1LjA0MjY2IDY5LjY5NDUgNS4zNDc5OCA3MC41NDYzIDUuNTM4OEM3MS45ODA2IDUuODU1MDIgNzIuNzA3OCA2LjM5Mjk2IDcyLjcwNzggNy4xMzY4NkM3Mi43MDc4IDcuOTQzMTYgNzEuOTE1NiA4LjU1MDc2IDcwLjg2ODIgOC41NTA3NkM2OS43ODA0IDguNTUwNzYgNjguOTU5OSA3Ljg3NTMxIDY4Ljk1OTkgNi45Nzk5NlY2LjkxMzkzSDY3LjU5MThWNi45Nzk5NkM2Ny41OTE4IDguNTYzNDggNjguOTk0MiA5Ljc1Njg4IDcwLjg1MzUgOS43NTY4OEM3MS43NDI2IDkuNzU2ODggNzIuNTU4OCA5LjQ4NzMxIDczLjE1MTggOC45OTY2MkM3My40NDYgOC43NTgzMSA3My42ODI3IDguNDU4MSA3My44NDQ1IDguMTE3OUM3NC4wMDYzIDcuNzc3NyA3NC4wODkxIDcuNDA2MTEgNzQuMDg3IDcuMDMwMjRDNzQuMDg3IDUuNjg1NCA3My4wOTkxIDQuNzgyMTcgNzEuMTQ2NiA0LjM0NjYxWiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTc4Ljc5ODYgMi41MDgwNkM3OC4yODc0IDIuNTAxNzUgNzcuNzgyMyAyLjYxNzYgNzcuMzI2MyAyLjg0NTc2Qzc2Ljg3MDMgMy4wNzM5MSA3Ni40NzY4IDMuNDA3NTkgNzYuMTc5NSAzLjgxODM3VjIuNjY3MzhINzQuODc4OVYxMi4wNzUySDc2LjE3OTVWOC40ODcxNkM3Ni40NzY4IDguODk3OSA3Ni44NzAzIDkuMjMxNTIgNzcuMzI2MyA5LjQ1OTU3Qzc3Ljc4MjQgOS42ODc2MyA3OC4yODc1IDkuODAzMzUgNzguNzk4NiA5Ljc5Njg3QzgwLjgxNjcgOS43OTY4NyA4Mi4zMzgxIDguMjMwMzEgODIuMzM4MSA2LjE1MjQ2QzgyLjMzODEgNC4wNzQ2MiA4MC44MTY3IDIuNTA4MDYgNzguNzk4NiAyLjUwODA2Wk04MC45ODM1IDYuNDIyNjRDODAuOTMxNiA2Ljk2MjkgODAuNjkyMSA3LjQ2ODc5IDgwLjMwNTYgNy44NTQ0Qzc5LjkxOSA4LjI0MDAxIDc5LjQwOTMgOC40ODE1NiA3OC44NjMgOC41MzgwNEM3OC4xMzY5IDguNjEwNzQgNzcuNDYwNSA4LjQwMjk1IDc2Ljk1ODMgNy45NTQwN0M3Ni40NTYxIDcuNTA1MTggNzYuMTc5NSA2Ljg2MzY1IDc2LjE3OTUgNi4xNTI0NkM3Ni4xNzk1IDQuNzg0NiA3Ny4yMTIyIDMuNzUyOTUgNzguNTgxNSAzLjc1Mjk1Qzc5LjI5MDQgMy43NTI5NSA3OS45MzA2IDQuMDIxOTEgODAuMzc3NiA0LjUxMDE4QzgwLjgzODcgNS4wMTExNiA4MS4wNTQgNS42OTAyNSA4MC45ODM1IDYuNDIyNjRaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNOTguMjkwOCAyLjY2OTJWMy44MDc0N0M5Ny42Nzc2IDIuOTc4NzUgOTYuNzMwMiAyLjUwODA2IDk1LjY1ODMgMi41MDgwNkM5My42NDgyIDIuNTA4MDYgOTIuMTMyMyA0LjA0NjE1IDkyLjEzMjMgNi4wODU4MkM5Mi4xMzIzIDguMTI1NSA5My42NDgyIDkuNjYyOTkgOTUuNjU4MyA5LjY2Mjk5Qzk2LjczNDUgOS42NjI5OSA5Ny42ODE5IDkuMTk3MTQgOTguMjkwOCA4LjM3NjkxVjguNTUxOThDOTguMjkwOCA5Ljk2ODkxIDk3LjM5MDYgMTAuODg0MyA5NS45OTc0IDEwLjg4NDNDOTUuMDU2MSAxMC44ODQzIDk0LjI3MTggMTAuNDc2NiA5My44OTk2IDkuNzkzODRMOTMuODgwNiA5Ljc1ODdIOTIuNTM4OUw5Mi41Njk1IDkuODQ2NTRDOTIuNzk2MSAxMC41MTQgOTMuMjM5MiAxMS4wODg5IDkzLjgzMDMgMTEuNDgyMkM5NC40MjMzIDExLjg3MjMgOTUuMTcyNiAxMi4wNzgzIDk1Ljk5NzQgMTIuMDc4M0M5Ny4wNTUyIDEyLjA3ODMgOTcuOTU1NCAxMS43NDUxIDk4LjYwMTcgMTEuMTE1N0M5OS4yNDgxIDEwLjQ4NjIgOTkuNTkxNSA5LjYwMTIgOTkuNTkxNSA4LjU2NzczVjIuNjY5Mkg5OC4yOTA4Wk05Ny41NjExIDcuODQyQzk3LjAwOTIgOC4zNjQxOCA5Ni4yMjI1IDguNTgzNDggOTUuNDAwMSA4LjQ0Mjk0Qzk0LjkxMzIgOC4zNTc5NiA5NC40NjY0IDguMTIxODQgOTQuMTI0NSA3Ljc2ODg5QzkzLjc4MjcgNy40MTU5MyA5My41NjM2IDYuOTY0NTIgOTMuNDk5MiA2LjQ4MDE5QzkzLjM4MzMgNS42NjU0MSA5My42MzEgNC44OTM2NCA5NC4xNzg2IDQuMzY0MThDOTQuNjM4MyAzLjkyNzQxIDk1LjI1NDIgMy42ODc4OCA5NS44OTE5IDMuNjk3ODJDOTYuMDQ2NCAzLjY5Nzk1IDk2LjIwMDYgMy43MTAzMSA5Ni4zNTMxIDMuNzM0NzdDOTcuMzQ1OSAzLjg5MzQ5IDk4LjEzMTQgNC43MDQwMyA5OC4yNjMyIDUuNzEwMjRDOTguMzc0OSA2LjUzODM1IDk4LjExNzkgNy4zMTQzNiA5Ny41NjExIDcuODQyWiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTkwLjcwNSAwLjA5OTU5NzVDOTAuNDYwMiAwLjA0Njc3MyA5MC4yMDQzIDAuMDkxMTk3MSA4OS45OTI1IDAuMjIzMjY5Qzg5Ljc4MDYgMC4zNTUzNCA4OS42Mjk5IDAuNTY0NDUyIDg5LjU3MjkgMC44MDU0MDlDODkuNTE1OSAxLjA0NjM3IDg5LjU1NzEgMS4yOTk4MiA4OS42ODc3IDEuNTEwOThDODkuODE4MyAxLjcyMjE1IDkwLjAyNzcgMS44NzQwNyA5MC4yNzA4IDEuOTMzOTFDOTAuMzQxNSAxLjk0OTU0IDkwLjQxMzYgMS45NTc0NyA5MC40ODYgMS45NTc1NEM5MC43MiAxLjk1NzkgOTAuOTQ1OCAxLjg3MzI1IDkxLjEyMDYgMS43MTk3M0M5MS4yOTU1IDEuNTY2MiA5MS40MDcgMS4zNTQ1MiA5MS40MzQxIDEuMTI1QzkxLjQ2MTEgMC44OTU0NyA5MS40MDE3IDAuNjY0MTM1IDkxLjI2NzMgMC40NzUwNDZDOTEuMTMyOSAwLjI4NTk1OCA5MC45MzI3IDAuMTUyMzI1IDkwLjcwNSAwLjA5OTU5NzVWMC4wOTk1OTc1WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTg5LjgzNjYgOC4zOTE0M0g4OC43MTVDODcuOTE3OCA4LjM5MTQzIDg3LjQzODkgNy44NTUzMSA4Ny40Mzg5IDYuOTU2OTNDODcuNDM4OSA2LjA4MDk2IDg3Ljg2ODEgNS4wMzY1OSA4OC43NDMyIDMuNzY0NDRMODguNzU0OCAzLjc0NzQ4VjMuMzg4MjVMODUuMDI3MSAyLjg2NzI3Qzg1LjAyODQgMi43MTU1MyA4NC45ODg2IDIuNTY2MjIgODQuOTExOCAyLjQzNDc4Qzg0LjgzNTEgMi4zMDMzNSA4NC43MjQxIDIuMTk0NTggODQuNTkwNSAyLjExOTczQzg0LjI1NjMgMS45MzggODMuODkwOCAxLjkzOCA4My41ODc5IDIuMTEzNjhDODMuNDM2MSAyLjIwMjMgODMuMzEyMiAyLjMzMDc3IDgzLjIzIDIuNDg0OEM4My4xNDc3IDIuNjM4ODQgODMuMTEwMyAyLjgxMjQgODMuMTIxOSAyLjk4NjE4QzgzLjEzMzYgMy4xNTk5NiA4My4xOTM4IDMuMzI3MTQgODMuMjk1OCAzLjQ2OTE0QzgzLjM5NzkgMy42MTExNCA4My41Mzc5IDMuNzIyMzggODMuNzAwMSAzLjc5MDQ5TDgyLjU0MDUgOS42Mzc1M0g4My44MjgzTDg0Ljg5NzcgNC4wODU1MUw4Ni45MTE1IDQuNDIxMTFDODYuMzcwMSA1LjM4MDA3IDg2LjA5NTMgNi4yNzQyMSA4Ni4wOTUzIDcuMDc4NjlDODYuMDk1MyA4LjU2MzQ3IDg3LjAwNDEgOS41MzU3NiA4OC40NzM0IDkuNjI5NjVWOS42Mzc1M0g5MS4xMzQxVjIuNjkwOTlIODkuODM2NlY4LjM5MTQzWiIsZmlsbDoiIzVENjk2RiJ9KSl9LHZ0PW4oNzYzOTApLGd0PW4ubih2dCkseXQ9e2VxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PWV9LG5lcTpmdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLmVxKHQsZSl9LGd0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0sZ3RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+PWV9LGx0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0sbHRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8PWV9LGxpc3RfZXhhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJnQuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpPT09ZS5zbGljZSgpLnNvcnQoKS5qb2luKCIsIil9LGxpc3RfYWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiYhZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMT09PXQuaW5kZXhPZihlKX0pKX0sbGlzdF9hbG86ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJmUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPXQuaW5kZXhPZihlKX0pKX19O2Z1bmN0aW9uIG10KHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UibXVsdGlwbGVzZWxlY3QiOnJldHVybiB0JiZ0LnByb3BzJiZ0LnByb3BzLm9wdGlvbnM/dC5wcm9wcy5vcHRpb25zLmxlbmd0aD4xMz90LnByb3BzLm9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdC52YWx1ZV19KSk6dC5wcm9wcy5vcHRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdCh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW10uY29uY2F0KF8oKSh0KSxbZV0pfSkpKX0pLFtbXV0pOm51bGw7Y2FzZSJtdWx0aXBsZWNob2ljZSI6cmV0dXJuIHQmJnQucHJvcHMmJnQucHJvcHMub3B0aW9ucz90LnByb3BzLm9wdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKTpudWxsO2Nhc2UibGlrZXJ0IjpyZXR1cm5bMSwyLDMsNCw1XTtjYXNlIm5wcyI6cmV0dXJuWzAsMSwyLDMsNCw1LDYsNyw4LDksMTBdO2RlZmF1bHQ6cmV0dXJuWzFdfX12YXIgYnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9KHQuYXBwLmRlY2suY2FyZHN8fFtdKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSksbj10LmFwcC5kZWNrLmluZGV4LG89dC5hcHAsaT1vLnNob3dTdXJ2ZXlCcmFuZCxhPW8ubWFya2V0aW5nVXJsLGM9by5zbHVnTmFtZSxzPW8uc3VydmV5SWQsdT1vLnZpZXdlZENhcmRDb3VudCxsPW8uaGVhZGVycyxmPW8uZGVjayxkPW8uYm9yZGVyLHA9ZnVuY3Rpb24odCxlKXt2YXIgbjtpZighdHx8IXQubGVuZ3RofHxlPj10Lmxlbmd0aHx8ZTwwKXJldHVybiAwO2lmKCF0W2VdLnR5cGUpcmV0dXJuIDA7dmFyIG89dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7aWYoZT09PW8ubGVuZ3RoLTEpcmV0dXJuIDE7Zm9yKHZhciBpPShuPXt9LHIoKShuLG8ubGVuZ3RoLTEsMSkscigpKG4sLTEsMCksbiksYT1vLmxlbmd0aC0yO2E+PWU7YS0tKXt2YXIgYz1vW2FdLHM9YyYmYy5wcm9wcyYmYy5wcm9wcy5yb3V0aW5nT3B0aW9uc3x8W107aWYoMCE9PXMubGVuZ3RoKXt2YXIgdT0wLGw9bXQoYyk7aWYobnVsbD09PWwpcmV0dXJuIG8ubGVuZ3RoLTEtZTtmb3IodmFyIGY9ZnVuY3Rpb24odCl7aWYoMD09PWwubGVuZ3RoKXJldHVybiJicmVhayI7dmFyIG49c1t0XSxyPW4uY29tcGFyYXRvcixjPW4udGFyZ2V0LGY9bi52YWx1ZSxkPWwuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hKCJhbnN3ZXJlZCI9PT1yfHx5dFtyXSYmeXRbcl0odCxmKSl9KSk7aWYoZC5sZW5ndGg8bC5sZW5ndGgpe3ZhciBwPXBhcnNlSW50KGMsMTApO2lmKC0xIT09cCYmcDw9YXx8cD49by5sZW5ndGgpcmV0dXJue3Y6by5sZW5ndGgtMS1lfTt1PU1hdGgubWF4KGlbcF0rMSx1KX1sPWR9LGQ9MDtkPHMubGVuZ3RoO2QrKyl7dmFyIHA9ZihkKTtpZigiYnJlYWsiPT09cClicmVhaztpZigib2JqZWN0Ij09PWd0KCkocCkpcmV0dXJuIHAudn0obC5sZW5ndGg+MHx8InZpZGVvdm9pY2UiPT09Yy50eXBlKSYmKHU9TWF0aC5tYXgoaVthKzFdKzEsdSkpLGlbYV09dX1lbHNlIGlbYV09aVthKzFdKzF9cmV0dXJuIGlbZV19KGYuY2FyZHN8fFtdLGYuaW5kZXgpLGg9dSsxLHY9aC8oaCtwKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGk/QSgiYSIse3N0eWxlOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHggMCAxMHB4IDAiLGhyZWY6IiIuY29uY2F0KGEsIj91dG1fc291cmNlPXN1cnZleV9icmFuZGluZyZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPSIpLmNvbmNhdChjLCImdXRtX2NvbnRlbnQ9IikuY29uY2F0KHMpLHRhcmdldDoiX2JsYW5rIn0saHQpOm51bGx9O2lmKCFlfHwxPT09ZS5sZW5ndGgpcmV0dXJuIEEoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sZyk7dmFyIHk9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciIpLGU9dD90LmNsaWVudFdpZHRoOjI1MCxuPXQ/IiIuY29uY2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1wcm9ncmVzcy1iYXItY3VycmVudCIpLnN0eWxlLndpZHRoLnJlcGxhY2UoInB4IiwiIikpOjAscj0iIi5jb25jYXQocGFyc2VGbG9hdCgodiplKS50b0ZpeGVkKDQpKSk7cmV0dXJuIG4hPT1yJiZtKG4scikse3dpZHRoOiIiLmNvbmNhdChyLCJweCIpLGFuaW1hdGlvbjoiZ3Jvd1JpZ2h0IDFzIixib3JkZXI6IjFweCBzb2xpZCAiLmNvbmNhdChkfHwiIzAwMCIpfX0sbT1mdW5jdGlvbih0LGUpe3ZhciBuPSJcbiAgICAgIEBrZXlmcmFtZXMgZ3Jvd1JpZ2h0IHtcbiAgICAgICAgZnJvbSB7XG4gICAgICAgICAgd2lkdGg6ICIuY29uY2F0KHQsInB4O1xuICAgICAgICB9XG4gICAgICAgIHRvIHtcbiAgICAgICAgICB3aWR0aDogIikuY29uY2F0KGUsInB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgIikscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IudHlwZT0idGV4dC9jc3MiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQociksci5zaGVldC5pbnNlcnRSdWxlKG4sci5sZW5ndGgpfTtyZXR1cm4gQSgiZm9vdGVyIix7Y2xhc3NOYW1lOiJ1bC1mb290ZXIgIi5jb25jYXQoImxpbmsiPT09bFsidXNlcmxlYXAtcGxhdGZvcm0iXT8idWwtZm9vdGVyX19saW5rIjoiIiksa2V5Om59LChmdW5jdGlvbigpe3JldHVybiBlLmxlbmd0aD4xP0EoImRpdiIse2lkOiJ1bC1wcm9ncmVzcy1iYXItY29udGFpbmVyIn0sQSgiZGl2Iix7aWQ6InVsLXByb2dyZXNzLWJhci1jdXJyZW50IixzdHlsZTp5KCl9KSk6bnVsbH0pLGcpfX07ZnVuY3Rpb24geHQodCxlKXt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gd3QodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09bnx8IlNldCI9PT1uKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKCJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIHd0KHQsZSl9KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxvPWZ1bmN0aW9uKCl7fTtyZXR1cm57czpvLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjpvfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksYT0hMCxjPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gYT10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtjPSEwLGk9dH0sZjpmdW5jdGlvbigpe3RyeXthfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgaX19fX1mdW5jdGlvbiB3dCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBFdD0idWwtYXBwIixqdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwO24ucnVubmluZ3x8ZS5kZXN0cm95KEV0KTt2YXIgbyxpPW4uZGVjay5jYXJkc1tuLmRlY2suaW5kZXhdLGE9aS5DYXJkLGM9aS5wcm9wcyxzPWkudHlwZSx1PWkubmFtZSxsPW4uYm9yZGVyLGY9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixlLmNsb3NlKEV0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPW4uZGVjay5jYXJkcyxwPW4uZGVjay5pbmRleCxoPW4uZm9udEZhbWlseT97Zm9udEZhbWlseTpuLmZvbnRGYW1pbHkucmVwbGFjZSgiOyIsIiIpfTp7fSx2PW4uZW5kQ2FyZCxnPWZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KG4pe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6ZS5hcHAubmV4dCh7ZGF0YTpuLGNvbXBsZXRlU3VydmV5OmZ1bmN0aW9uKCl7ZS5kZXN0cm95KEV0KX0sZW5kQ2FyZDp2fSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHk9eHQobi5hbnN3ZXJzfHxbXSk7dHJ5e3ZhciBtPWZ1bmN0aW9uKCl7dmFyIHQ9by52YWx1ZTtpZih0LnF1ZXN0aW9uSWQ9PT11KXt2YXIgZTtpZigibXVsdGlwbGVjaG9pY2UiPT09cyl7dmFyIG49Yy5vcHRpb25zLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dC52YWx1ZX0pKTtpZighbilyZXR1cm4iYnJlYWsiO2U9cigpKHt9LG4uaWQsbi52YWx1ZSl9ZWxzZSBlPXQudmFsdWU7cmV0dXJuIGcoe3ZhbHVlOmV9KSwiYnJlYWsifX07Zm9yKHkucygpOyEobz15Lm4oKSkuZG9uZTspe2lmKCJicmVhayI9PT1tKCkpYnJlYWt9fWNhdGNoKHQpe3kuZSh0KX1maW5hbGx5e3kuZigpfXJldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6InVsLWFwcCIsaWQ6RXQsb25jcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPVsidHJhbnNpdGlvbmVuZCIsIndlYmtpdFRyYW5zaXRpb25FbmQiLCJtb3pUcmFuc2l0aW9uRW5kIl0sbz0hMSxpPWZ1bmN0aW9uIG4oKXtpZighbyYmd2luZG93LmZyYW1lRWxlbWVudCl7dmFyIGk9bmV3IEV2ZW50KCJ1bDpmcmFtZTpyZW5kZXJlZCIpO3dpbmRvdy5mcmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChpKX1vPSEwLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbil9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoRXQpfSksMzAwKX07ci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxpKX0pKSxuLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljaygoZnVuY3Rpb24oKXtlLmNsb3NlKEV0KX0pKSxlLnVwZGF0ZShFdCl9KHQpfSxvbnVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShFdCl9LHN0eWxlOmh9LEEoImRpdiIse2NsYXNzTmFtZToidWwtYXBwX19jb250YWluZXIifSxBKCJkaXYiLHtjbGFzc05hbWU6RihfKCkoZHQoJCxuLnVzZU1vYmlsZVN0eWxpbmcpKSksc3R5bGU6ImxpbmsiPT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdP3tib3hTaGFkb3c6InVuc2V0Iixib3JkZXJSYWRpdXM6InVuc2V0Iixib3JkZXI6Im5vbmUgIWltcG9ydGFudCJ9Om4udXNlTW9iaWxlU3R5bGluZz97Ym9yZGVyQ29sb3I6bH06e2JvcmRlckNvbG9yOmwsbWFyZ2luOiIxNXB4In19LEEoYSxNKCkoe30sYyx7Ym9yZGVyOmwsY2xhc3NOYW1lOiJ1bC1jYXJkIixuZXh0OmcsZW5kQ2FyZDp2LGxvY2FsZTpuLmxvY2FsZSxxdWVzdGlvbklkOnUsdXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKEV0KX19KSksQShidCxudWxsKSksImVtYWlsIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmImxpbmsiIT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmQSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQoSixuLnVzZU1vYmlsZVN0eWxpbmcpKX0sQSgiZGl2Iix7Y2xhc3NOYW1lOkssb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxBKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEEoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LEN0PW4oNDcwNjYpLGt0PW4ubihDdCksU3Q9bigzMDU5MyksT3Q9bi5uKFN0KSxBdD1uKDQ0NTMpLEl0PW4ubihBdCksTXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sVHQ9ZnVuY3Rpb24oKXt2YXIgdD1NdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxfdD1mdW5jdGlvbigpe3ZhciB0PU10KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxMdD1bdF0sUnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7T3QoKSh0aGlzLHQpfXJldHVybiBJdCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtMdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7THQuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksUHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/QSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sTnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LER0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sRnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFV0PW4oOTczNDMpLEJ0PW4ubihVdCk7ZnVuY3Rpb24genQodCxlKXtlKHQpfXZhciBIdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gQSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGR0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkEoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxBKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZBKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxBKCJsYWJlbCIse2NsYXNzTmFtZTpGKGR0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07Y29uc3QgVnQ9Imh0dHBzOi8vY2RuLnNwcmlnLmNvbSIscXQ9dD0+dCsiLWxvYWRpbmctc3BpbmVyIixXdD0iaGlkZGVuIixHdD0idmlzaWJsZSIsWnQ9InVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIiwkdD0idWwtcmVjb3JkaW5nLWluLXNlc3Npb24iLFl0PVt7dHlwZToibGluayIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1Z0fS9kZXBlbmRlbmNpZXMvUmVjb3JkUlRDLTUuNi4yLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL2FkYXB0ZXIuOC4wLjAubWluLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtWdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VnR9L3VzZXJsZWFwLXdlYi11cGNodW5rLXYyLjIuMi5qc2B9XSxKdD1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7VnR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmNzc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VnR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmpzYH0se3R5cGU6InN0eWxlIixjb250ZW50OiIvKiBwcm9ncmVzcyBjb250cm9sIHN0eWxlcyAqL1xuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXByb2dyZXNzLWhvbGRlciB7XG4gIG1hcmdpbjogMCAwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogM3B4O1xuICB3aWR0aDogMTAwJTtcbn1cbi8qIHBvc2l0aW9uIGFuZCBhbGlnbiB0aGUgYnV0dG9ucyBhbmQgYnV0dG9uIHRleHRzICovXG4udWwtY29udHJvbC1wYW5lbCB7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICB6LWluZGV4OiAyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiBibGFjaztcbiAgaGVpZ2h0OiA1MHB4O1xuICBwYWRkaW5nOiAycHggMTRweCAwO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCA+IC52anMtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDNlbTtcbiAgd2lkdGg6IDNlbTtcbiAgbWFyZ2luOiAwIDEwcHg7XG59XG5cbnNwYW4udWwtYnV0dG9uLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjVweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAyNXB4KTtcbn1cblxuI3VsLWNhbWVyYS1idXR0b24ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWwtaW5hY3RpdmUge1xuICBvcGFjaXR5OiAwLjM7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDE7XG59XG5cbi52anMtdm9sdW1lLWJhci52anMtc2xpZGVyLWhvcml6b250YWwgLnZqcy12b2x1bWUtbGV2ZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtaG92ZXIsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbDphY3RpdmUge1xuICB3aWR0aDogNDBweDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXNsaWRlci1hY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbDphY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtbXV0ZS1jb250cm9sIH4gLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDphY3RpdmUgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDpmb2N1cyAudmpzLXZvbHVtZS1jb250cm9sIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgbGVmdDogNDBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuMXMsIG9wYWNpdHkgMC4xcywgaGVpZ2h0IDAuMXMsIHdpZHRoIDAuMXMsIGxlZnQgMHMsIHRvcCAwcztcbn1cblxuLyogcGxheSBidXR0b24gY3VzdG9taXphdGlvbiAqL1xuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLyogcG9zaXRpb24gYW5kIHN0eWxlIHRoZSBjdXJyZW50IHRpbWVyICovXG4udWwtdGltZS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA4MHB4O1xuICBsZWZ0OiAxMHB4O1xuICBoZWlnaHQ6IDIycHg7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlYjtcbiAgYm9yZGVyLXJhZGl1czogMjNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cblxuLnZpZGVvLWpzIC52anMtY3VycmVudC10aW1lLFxuLnZqcy1uby1mbGV4IC52anMtY3VycmVudC10aW1lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiByZW1vdmUgdGhlIGRvdCBwcm9ncmVzcyBpbmRpY2F0b3IgKi9cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWxldmVsOmJlZm9yZSxcbi52anMtaWNvbi1jaXJjbGU6YmVmb3JlLFxuLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNS4zMjRBLjc1Ljc1IDAgMDE5LjI1IDF2MTEuNjY3YS43NS43NSAwIDAxLTEuMjE5LjU4NWwtMy45Ni0zLjE2OUgxYS43NS43NSAwIDAxLS43NS0uNzV2LTVhLjc1Ljc1IDAgMDEuNzUtLjc1aDMuMDdMOC4wMzEuNDE0YS43NS43NSAwIDAxLjc5NC0uMDl6TTcuNzUgMi41Nkw0LjgwMiA0LjkyYS43NS43NSAwIDAxLS40NjkuMTY0SDEuNzV2My41aDIuNTgzYS43NS43NSAwIDAxLjQ2OS4xNjVsMi45NDggMi4zNThWMi41NnpNMTQuOTExLjQ3YS43NS43NSAwIDAxMS4wNjEgMCA5LjA4NCA5LjA4NCAwIDAxMCAxMi44NDQuNzUuNzUgMCAwMS0xLjA2LTEuMDYgNy41ODQgNy41ODQgMCAwMDAtMTAuNzI0Ljc1Ljc1IDAgMDEwLTEuMDZ6TTExLjk3IDMuNDFhLjc1Ljc1IDAgMDExLjA2IDAgNC45MTcgNC45MTcgMCAwMTAgNi45NTMuNzUuNzUgMCAxMS0xLjA2LTEuMDYgMy40MTcgMy40MTcgMCAwMDAtNC44MzIuNzUuNzUgMCAwMTAtMS4wNnonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjUgMS4xNjdMNC4zMzMgNC41SDF2NWgzLjMzM0w4LjUgMTIuODMzVjEuMTY3ek0xNy4xNyA0LjVsLTUgNU0xMi4xNyA0LjVsNSA1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgdmlld0JveD0nMCAwIDE5IDE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTguODI0ODkgMC4zMjQwM0M5LjA4NDc0IDAuNDQ4OTIgOS4yNSAwLjcxMTcwMyA5LjI1IDEuMDAwMDFWMTIuNjY2N0M5LjI1IDEyLjk1NSA5LjA4NDc0IDEzLjIxNzggOC44MjQ4OSAxMy4zNDI3QzguNTY1MDQgMTMuNDY3NSA4LjI1NjYxIDEzLjQzMjQgOC4wMzE0OCAxMy4yNTIzTDQuMDcwMjUgMTAuMDgzM0gxQzAuNTg1Nzg2IDEwLjA4MzMgMC4yNSA5Ljc0NzU1IDAuMjUgOS4zMzMzNFY0LjMzMzM0QzAuMjUgMy45MTkxMyAwLjU4NTc4NiAzLjU4MzM0IDEgMy41ODMzNEg0LjA3MDI1TDguMDMxNDggMC40MTQzNTVDOC4yNTY2MSAwLjIzNDI1MyA4LjU2NTA0IDAuMTk5MTQgOC44MjQ4OSAwLjMyNDAzWk03Ljc1IDIuNTYwNDhMNC44MDE4NSA0LjkxODk5QzQuNjY4ODcgNS4wMjUzOCA0LjUwMzY0IDUuMDgzMzQgNC4zMzMzMyA1LjA4MzM0SDEuNzVWOC41ODMzNEg0LjMzMzMzQzQuNTAzNjQgOC41ODMzNCA0LjY2ODg3IDguNjQxMyA0LjgwMTg1IDguNzQ3NjlMNy43NSAxMS4xMDYyVjIuNTYwNDhaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS45Njk4IDMuNDExMjRDMTIuMjYyNyAzLjExODM5IDEyLjczNzYgMy4xMTg0NiAxMy4wMzA0IDMuNDExNEMxMy45NTIxIDQuMzMzNDEgMTQuNDY5OSA1LjU4Mzc2IDE0LjQ2OTkgNi44ODc0OEMxNC40Njk5IDguMTkxMjEgMTMuOTUyMSA5LjQ0MTU2IDEzLjAzMDQgMTAuMzYzNkMxMi43Mzc2IDEwLjY1NjUgMTIuMjYyNyAxMC42NTY2IDExLjk2OTggMTAuMzYzN0MxMS42NzY4IDEwLjA3MDkgMTEuNjc2NyA5LjU5NiAxMS45Njk2IDkuMzAzMDdDMTIuNjEwMSA4LjY2MjM1IDEyLjk2OTkgNy43OTM0NiAxMi45Njk5IDYuODg3NDhDMTIuOTY5OSA1Ljk4MTUxIDEyLjYxMDEgNS4xMTI2MiAxMS45Njk2IDQuNDcxOUMxMS42NzY3IDQuMTc4OTYgMTEuNjc2OCAzLjcwNDA5IDExLjk2OTggMy40MTEyNFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2w6aG92ZXIgLnZqcy1tb3VzZS1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi8qIHBvc2l0aW9uIHZpZGVvIHBsYXllciBpbnNpZGUgdGhlIGNvbnRhaW5lciAqL1xuLnZpZGVvLWpzIC52anMtdGVjaCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi52aWRlby1qcyAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0b3A6IC0yNXB4O1xuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDUwcHggIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcy52anMtc2xpZGVyLWJhciAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi51bC12aWRlby1wbGF5ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52aWRlby1qcy52anMtZnVsbHNjcmVlbjpub3QoLnZqcy1pb3MtbmF0aXZlLWZzKSB7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlci52anMtZnVsbHNjcmVlbiB7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4udmlkZW8tanMgZGl2LnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCMkJCQkQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtYnV0dG9uLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgb24gY2lyY3VsYXIgcGxheSBjb250cm9sIGJ1dHRvbnMgKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA1cHgpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLXBsYXlpbmcgPiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA0cHgpO1xufVxuXG4vKiBmaXggb3Bwb3NpdGUgbWlzYWxpZ25tZW50IGJ1ZyBvbiBub25jaXJjdWxhciBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS44MjE0MyAyLjU0MDA0TDEyLjI2MTQgMi41NDAwNEMxMi45MjQyIDIuNTQwMDQgMTMuNDYxNCAzLjA3NzMgMTMuNDYxNCAzLjc0MDA0TDEzLjQ2MTQgNi4xODAwNCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4xNzk1NSAxMy40NkwzLjczOTU1IDEzLjQ2QzMuMDc2ODEgMTMuNDYgMi41Mzk1NSAxMi45MjI3IDIuNTM5NTUgMTIuMjZMMi41Mzk1NSA5LjgxOTk2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J00xMi43NzcyIDMuMjIyNjZMOS4zNjQ3NSA2LjYzNTE2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J002LjI5NDM0IDkuNzA2MDVMMi44ODE4NCAxMy4xMTg2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMS41ODMgOS44MTNINS4yNWExIDEgMCAwMTEgMXYzLjY2Nk01LjM3NSAxMC42ODhMMSAxNS4wNjFNMTQuOTE3IDUuODEzSDExLjI1YTEgMSAwIDAxLTEtMVYxLjE0Nk0xNS4wNjMgMWwtNC4zNzYgNC4zNzUnIHN0cm9rZT0nJTIzMjYyMTM2JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLWVuZGVkIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLWljb24tcmVwbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PSczLjYxODg1JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0NyZWN0IHg9JzkuMjE3OTcnIHk9JzIuMDYwNzQnIHdpZHRoPSczLjE2MTg1JyBoZWlnaHQ9JzExLjg4JyByeD0nMC45JyBmaWxsPSdibGFjaycgc3Ryb2tlPSclMjNFREVERUQnIHN0cm9rZS13aWR0aD0nMC42JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLnZqcy1lcnJvci1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnVsLXZpZGVvLXBsYXllci12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLXZpZGVvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogSW5zaWRlIEF1dG8gTGF5b3V0ICovXG5cbiAgZmxleDogbm9uZTtcbiAgb3JkZXI6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbiAgbWFyZ2luOiAxMHB4IDBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLXJlY29yZCBidXR0b24udmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDk2KTtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgbGluZS1oZWlnaHQ6IDAuNjtcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDM7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDpiZWZvcmUge1xuICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzM7XG4gIGNvbnRlbnQ6IFwiWW91ciBicm93c2VyIG5lZWRzIHRvIGFjY2VzcyB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgdmlkZW8gcmVjb3JkaW5nXCI7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjb250ZW50OiBcIlVuYWJsZSB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmVcIjtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiAjRjBGMEY1O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29udGVudDogXCJSZXF1ZXN0IFBlcm1pc3Npb25zXCI7XG4gIHBhZGRpbmc6IDFlbSAyZW07XG4gIGNvbG9yOiAjMzMzO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbnRlbnQ6IFwiUGxlYXNlIGdvIHRvIHlvdXIgYnJvd3NlciBzZXR0aW5ncyBhbmQgdXBkYXRlIHBlcm1pc3Npb25zIHRvIGVuYWJsZSByZWNvcmRpbmdcIjtcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogIzRCNTc1RDtcbiAgbWFyZ2luOiA1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHksIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuMjEyMzQgNy4zNzU0OVYxMS4xMTkzTTIuNTM5MzEgNC4yNTU5NUgxMy40NTkzSDIuNTM5MzFaTTUuNTcyMzQgNC4yNTU5NVYzLjAwODMzQzUuNTcyMjIgMi44NDQzMyA1LjYwMzU0IDIuNjgxOTIgNS42NjQ1IDIuNTMwMzhDNS43MjU0NiAyLjM3ODg0IDUuODE0ODggMi4yNDExNSA1LjkyNzYyIDIuMTI1MTlDNi4wNDAzNyAyLjAwOTIyIDYuMTc0MjQgMS45MTcyNiA2LjMyMTU4IDEuODU0NTZDNi40Njg5MiAxLjc5MTg1IDYuNjI2ODMgMS43NTk2NCA2Ljc4NjI4IDEuNzU5NzdIOS4yMTIzNEM5LjM3MTc5IDEuNzU5NjQgOS41Mjk3IDEuNzkxODUgOS42NzcwMyAxLjg1NDU2QzkuODI0MzcgMS45MTcyNiA5Ljk1ODI0IDIuMDA5MjIgMTAuMDcxIDIuMTI1MTlDMTAuMTgzNyAyLjI0MTE1IDEwLjI3MzIgMi4zNzg4NCAxMC4zMzQxIDIuNTMwMzhDMTAuMzk1MSAyLjY4MTkyIDEwLjQyNjQgMi44NDQzMyAxMC40MjYzIDMuMDA4MzNWNC4yNTU5NUg1LjU3MjM0Wk0xMi4yNDYzIDQuMjU1OTVWMTIuOTkxMkMxMi4yNDYzIDEzLjMyMjMgMTIuMTE4NCAxMy42Mzk5IDExLjg5MDcgMTMuODc0MUMxMS42NjMxIDE0LjEwODIgMTEuMzU0MyAxNC4yMzk4IDExLjAzMjMgMTQuMjM5OEg0Ljk2NjI4QzQuNjQ0MzIgMTQuMjM5OCA0LjMzNTU1IDE0LjEwODIgNC4xMDc4OSAxMy44NzQxQzMuODgwMjMgMTMuNjM5OSAzLjc1MjM0IDEzLjMyMjMgMy43NTIzNCAxMi45OTEyVjQuMjU1OTVIMTIuMjQ2M1pNNi43ODYyOCA3LjM3NTQ5VjExLjExOTNWNy4zNzU0OVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwWicgZmlsbD0nJTIzRDE1MTUzJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbi51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyIDEwTDEyIDJDMTIgMC44OTU0MyAxMS4xMDQ2IC00Ljg1Mzk2ZS0wNyAxMCAtNC4zNzExNGUtMDdMMiAtOC43NDIyOGUtMDhDMC44OTU0MyAtMy45MTQwNWUtMDggLTQuODUzOTZlLTA3IDAuODk1NDMxIC00LjM3MTE0ZS0wNyAyTC04Ljc0MjI4ZS0wOCAxMEMtMy45MTQwNWUtMDggMTEuMTA0NiAwLjg5NTQzMSAxMiAyIDEyTDEwIDEyQzExLjEwNDYgMTIgMTIgMTEuMTA0NiAxMiAxMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtcmVjb3JkaW5nLWluLXNlc3Npb24udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpIHRyYW5zbGF0ZSgxcHgsIDhweCk7XG4gIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xufVxuXG4vKiBmaXggYSBzdWJ0bGUgbWlzYWxpZ25tZW50IGJ1ZyBmb3IgZnVsbCBzY3JlZW4gYnV0dG9ucyAqL1xuLnZqcy1mdWxsc2NyZWVuIC51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDZweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcGF0aD0ndXJsKCUyM2NsaXAwXzI2NDVfNDY1NCknJTNFJTNDcGF0aCBkPSdNMTUuMTQ5MSA0Ljc1TDEwLjU5OTEgOEwxNS4xNDkxIDExLjI1VjQuNzVaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J005LjI5OTEyIDMuNDUwMkgyLjE0OTEyQzEuNDMxMTUgMy40NTAyIDAuODQ5MTIxIDQuMDMyMjMgMC44NDkxMjEgNC43NTAyVjExLjI1MDJDMC44NDkxMjEgMTEuOTY4MiAxLjQzMTE1IDEyLjU1MDIgMi4xNDkxMiAxMi41NTAySDkuMjk5MTJDMTAuMDE3MSAxMi41NTAyIDEwLjU5OTEgMTEuOTY4MiAxMC41OTkxIDExLjI1MDJWNC43NTAyQzEwLjU5OTEgNC4wMzIyMyAxMC4wMTcxIDMuNDUwMiA5LjI5OTEyIDMuNDUwMlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9nJTNFJTNDZGVmcyUzRSUzQ2NsaXBQYXRoIGlkPSdjbGlwMF8yNjQ1XzQ2NTQnJTNFJTNDcmVjdCB3aWR0aD0nMTUuNicgaGVpZ2h0PScxNS42JyBmaWxsPSd3aGl0ZScgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4xOTk5NTEgMC4yMDAxOTUpJy8lM0UlM0MvY2xpcFBhdGglM0UlM0MvZGVmcyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyMicgaGVpZ2h0PScxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00uNzUgM0EyLjc1IDIuNzUgMCAwMTMuNS4yNWg5LjA4MUEyLjc1IDIuNzUgMCAwMTE1LjMzMSAzdjlhMi43NSAyLjc1IDAgMDEtMi43NSAyLjc1SDMuNUEyLjc1IDIuNzUgMCAwMS43NSAxMlYzek0zLjUgMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjV2OWMwIC42OS41NiAxLjI1IDEuMjUgMS4yNWg5LjA4MWMuNjkgMCAxLjI1LS41NiAxLjI1LTEuMjVWM2MwLS42OS0uNTYtMS4yNS0xLjI1LTEuMjVIMy41eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNTMgMi4wM2wtMTIgMTItMS4wNi0xLjA2IDEyLTEyIDEuMDYgMS4wNnpNMjAuODcgMS41MjVhLjc1Ljc1IDAgMDEuMzguNjUydjEwLjU4OGEuNzUuNzUgMCAwMS0xLjEzNC42NDRsLTUuOTItMy41M2EuNzUuNzUgMCAwMS0uMzY1LS42NDN2LTMuNTNhLjc1Ljc1IDAgMDEuMzY2LS42NDRsNS45MTktMy41M2EuNzUuNzUgMCAwMS43NTQtLjAwN3ptLTUuNTM5IDQuNjA3VjguODFsNC40MTkgMi42MzVWMy40OTdsLTQuNDE5IDIuNjM1eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIHtcbiAgcGFkZGluZzogMC4xNWVtIDAuNzVlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDc1cHg7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNjVweCk7XG4gIHdpZHRoOiAxMzBweDtcbiAgei1pbmRleDogNTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBtYXJnaW4tbGVmdDogMC44ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFQjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjhlbTtcbn1cblxuQGtleWZyYW1lcyBncm93IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxuICA1MCUgIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0UxREZGNDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHdpZHRoOiA4MHB4O1xuICBoZWlnaHQ6IDgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDEyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNDBweCk7XG4gIHRvcDogY2FsYyg1MCUgLSA0MHB4KTtcbiAgYW5pbWF0aW9uOiA2cyBpbmZpbml0ZSBncm93O1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNjAlO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXI6YWZ0ZXIge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ21hc2sgaWQ9J2EnIG1hc2tVbml0cz0ndXNlclNwYWNlT25Vc2UnIHg9JzAnIHk9JzAnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCclM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nNDknIHI9JzQ5JyBmaWxsPSclMjNFREVDRjgnLyUzRSUzQy9tYXNrJTNFJTNDZyBtYXNrPSd1cmwoJTIzYSknJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc1MCcgZmlsbD0nJTIzNjQ1Q0MyJy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuNDIyIDgxLjgxMmM1LjQwNS0xNS41NDcgMjAuMTg3LTI2LjcwNiAzNy41NzYtMjYuNzA2IDE3LjM5IDAgMzIuMTcyIDExLjE1OSAzNy41NzcgMjYuNzA3LTkuMTY0IDEwLjQzLTIyLjYwMSAxNy4wMTMtMzcuNTc2IDE3LjAxMy0xNC45NzYgMC0yOC40MTQtNi41ODMtMzcuNTc3LTE3LjAxNHonIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNicvJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzI5JyByPScxNycgZmlsbD0nJTIzZmZmJyBmaWxsLW9wYWNpdHk9Jy43Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcIik7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuNik7XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIG1pbi1oZWlnaHQ6IDE1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZmNmZDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtY29udHJvbC1wYW5lbCB7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG59XG5cbi51bC1idXR0b25zLXBhbmVsIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtbWVudSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC02cHgsIDEycHgpO1xuICBwb3NpdGlvbjogdW5zZXQ7XG59XG5cbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IHVuc2V0O1xufVxuXG4udmpzLW1lbnUgbGkge1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuXG4udmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkIHtcbiAgY29sb3I6IGxpZ2h0Z3JheTtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWJ1dHRvbnMtcGFuZWwge1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC52anMtcmVjb3JkLWluZGljYXRvci52anMtY29udHJvbCB7XG4gIGJvdHRvbTogOTBweCAhaW1wb3J0YW50O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3Ige1xuICBwYWRkaW5nOiAwLjNlbSAwLjc1ZW0gMC4xNWVtIDE1cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMjFweCk7XG4gIHdpZHRoOiA0M3B4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFQjU3NTc7XG4gIHdpZHRoOiA2cHg7XG4gIGhlaWdodDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgdG9wOiA0cHg7XG4gIGxlZnQ6IDVweDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yOmJlZm9yZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgb3BhY2l0eTogMTtcbiAgY29sb3I6ICMzMzM7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cblxuLnVsLXZpZGVvLXBsYXllci1sb2FkaW5nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA2cmVtO1xuICBoZWlnaHQ6IDZyZW07XG5cbn1cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyBkaXYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogODAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgbWFyZ2luOiA1cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkICM2NjY7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XG4gIGJvcmRlci1jb2xvcjogIzY2NiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbn1cblxuLmZpcnN0IHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC40NXM7XG59XG4uc2Vjb25kIHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zcztcbn1cbi50aGlyZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMTVzO1xufVxuXG5Aa2V5ZnJhbWVzIGxkcy1yaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLnVsLXZpZGVvLWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMik7XG4gIHBhZGRpbmc6IDhweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUsIC51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyLCAudWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlLCAudWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBtYXJnaW46IDAgNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMnB4KTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnUmVjb3JkIHlvdXIgUmVzcG9uc2UnO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNSAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzLjg3NTcgOC4yMjM2MUwxLjExMTggMTQuNjA1NkMwLjk0NTU3OCAxNC42ODg3IDAuNzUgMTQuNTY3OCAwLjc1IDE0LjM4MlYxLjYxODAzQzAuNzUgMS40MzIxOSAwLjk0NTU3OSAxLjMxMTMxIDEuMTExOCAxLjM5NDQzTDEzLjg3NTcgNy43NzYzOUMxNC4wNiA3Ljg2ODUyIDE0LjA2IDguMTMxNDggMTMuODc1NyA4LjIyMzYxWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAxcHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC44NSkgdHJhbnNsYXRlKDAsIDJweCk7XG59XG5cbi51bC1iYWNrLXF1ZXN0aW9uLWJ0bjphZnRlciB7XG4gIGNvbnRlbnQ6ICdCYWNrIHRvIFF1ZXN0aW9uJztcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4udmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG4gIGFuaW1hdGlvbjogZmFkZSAwLjNzO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGUge1xuICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbiN1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxNXB4O1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnVsLWNvdW50ZG93bi10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1cHgpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gPiAjdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICBmb250LXNpemU6IDI1cHg7XG4gIHRyYW5zZm9ybTogdW5zZXQ7XG59XG5cbi52anMtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiN1bC1TcGVlZCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDM1cHgpO1xufVxuXG4udmpzLXBvc3RlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHVuc2V0O1xufVxuIn1dLEt0PSItdmlkZW8tcGxheWVyIixYdD0iLXZpZGVvLXJlY29yZGVyIjtsZXQgUXQsdGU7Y29uc3QgZWU9YXN5bmModCxlLG4scixvLGkpPT57Y29uc3QgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz17c2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6YS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6YS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6bmF2aWdhdG9yLmxhbmd1YWdlfSxzPXthY3Rpb246ZSxlcnI6e21lc3NhZ2U6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9LG1ldGE6Yyx2aWQ6byxlbnZJZDppfTsoYXdhaXQgZmV0Y2goYCR7bn0vc2RrLzEvZXJyb3JzYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6ey4uLnIsInVzZXJsZWFwLXBsYXRmb3JtIjoidmlkZW9fcmVjb3JkZXIiLCJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYShgdXNlcmxlYXAtJHtEYXRlLm5vdygpfS1lcnJvcmApfSxib2R5OkpTT04uc3RyaW5naWZ5KHMpfSkpLm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIix0KX0sbmU9KHQsZSxuKT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbiYmbigpO1Byb21pc2UuYWxsKGUucmVkdWNlKCgoZSxuKT0+KGUucHVzaCgoKHQse3R5cGU6ZSxjb250ZW50Om59KT0+bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7bGV0IGk7InNjcmlwdCI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGkuc3JjPW4pOiJsaW5rIj09PWU/KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGkucmVsPSJzdHlsZXNoZWV0IixpLmhyZWY9bixpLnR5cGU9InRleHQvY3NzIik6KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpLmlubmVySFRNTD1uKSxpLm9ubG9hZD1mdW5jdGlvbigpe3Iobil9LGkub25lcnJvcj1mdW5jdGlvbigpe28obil9LGkuYXN5bmM9ITEsaS5pZD1idG9hKG4pLHQuYXBwZW5kQ2hpbGQoaSl9KSkpKHQsbikpLGUpKSxbXSkpLnRoZW4oKCgpPT57biYmbigpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KyIgZmFpbGVkIHRvIGxvYWQiKX0pKX0scmU9KHQsZSxuKT0+e2lmKCJzdGFydCI9PT1lJiYodC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIiksIm5vbmUiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9V3Q7ZWxzZSBpZigic3VjY2VzcyI9PT1lKXQuc3R5bGUudmlzaWJpbGl0eT1XdCx0LmlubmVySFRNTD0iVXBsb2FkIHN1Y2NlZWRlZCEiO2Vsc2V7Y29uc3QgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQobikpO3QuaW5uZXJIVE1MPWBVcGxvYWRpbmcgPHNwYW4gY2xhc3M9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSI+JHtlfSU8L3NwYW4+YCx0LnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0UwRTBFQiAwJSwgI0UwRTBFQiAke2V9JSwgI0ZDRkNGRCAke2V9JSwgI0ZDRkNGRCAxMDAlKWB9fSxvZT0odCxlKT0+e2NvbnN0IG49bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO3JldHVybiBuLmFkZENsYXNzKCJ1bC1idXR0b25zLXBhbmVsIiksZS5tYXAoKHQ9PntuLmFkZENoaWxkKHQpfSkpLGllKG4pLG59LGllPXQ9Pnt0LmNoaWxkcmVuKCkuZm9yRWFjaCgodD0+e2lmKG1lW3QubmFtZV9dKXtjb25zdCBlPWFlKG1lW3QubmFtZV9dLGB1bC0ke21lW3QubmFtZV9dfWApO3QuZWxfLmFwcGVuZENoaWxkKGUpfX0pKX0sYWU9KHQsZT0iIik9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gbi5jbGFzc05hbWU9InVsLWJ1dHRvbi10ZXh0IixuLmlubmVySFRNTD10LG4uaWQ9ZSxufSxjZT0odCxlLG4scixvPSExKT0+e3QuYWRkQ2xhc3MoInVsLXZpZGVvLXBsYXllciIpO2NvbnN0IGk9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO2kuYWRkQ2xhc3MoInVsLWNvbnRyb2wtcGFuZWwiKSx0LnByb2dyZXNzQmFyPWkuYWRkQ2hpbGQoIlByb2dyZXNzQ29udHJvbCIpLG4mJnQuc3JjKG4pLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcj1uZXcod2luZG93LnZpZGVvanMuZ2V0Q29tcG9uZW50KCJDb21wb25lbnQiKSkodCksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmFkZENsYXNzKCJ1bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciIpO2NvbnN0IGE9biYmbi5zcmM/Z2Uobi5zcmMpOm51bGw7IW58fCFvJiZhPyh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIixhJiZ0LnBvc3RlcihhKSk6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpLHQub24oInBsYXkiLCgoKT0+e298fCFufHxhfHxkZSh0LCExKX0pKSx0LmFkZENoaWxkKHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcix7fSwxKSxpLmFkZENoaWxkKGUpLHQuYWRkQ2hpbGQoaSksciYmcih0KX0sc2U9KHQsZSxuLHIsbyxpLGEsYz0hMSk9Pnt0ZT1EYXRlLm5vdygpO2NvbnN0IHM9d2luZG93LnZpZGVvanMsdT1zKGUse2NvbnRyb2xzOiExLGJpZ1BsYXlCdXR0b246ITEsZmx1aWQ6ITEsd2lkdGg6MTI4MCxoZWlnaHQ6NzIwLHBsYXlzaW5saW5lOiEwLHBsdWdpbnM6e3JlY29yZDp7YXVkaW86ITAsdmlkZW86e21hbmRhdG9yeTp7bWluV2lkdGg6MTI4MCxtaW5IZWlnaHQ6NzIwfX0sZnJhbWVXaWR0aDoxMjgwLGZyYW1lSGVpZ2h0OjcyMCxtYXhMZW5ndGg6NjAwLGF1dG9NdXRlRGV2aWNlOiEwfX19KTt1LnBheWxvYWQ9bjtjb25zdCBsPXQ9Pntjb25zdCBlPVp0LG49WnQrIi1hdWRpby1vbmx5IjtyZSh1LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxRdCYmUXQuc3RhcnRUaW1lPj10ZSYmUXQuYWJvcnQoKTtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1jYW1lcmEtYnV0dG9uIik7dD8odS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSxoLnJlbW92ZUNsYXNzKGUpLGguYWRkQ2xhc3Mobiksci5pbm5lckhUTUw9bWUuVHVybk9uQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5yZW1vdmVDbGFzcygidmpzLWhpZGRlbiIpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57dS5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2godS5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQodS5yZWNvcmQoKSkpKToodS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx1LnJlY29yZCgpLmdldERldmljZSgpLGgucmVtb3ZlQ2xhc3MobiksaC5hZGRDbGFzcyhlKSxyLmlubmVySFRNTD1tZS5UdXJuT2ZmQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidmpzLWhpZGRlbiIpKX0sZj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9PntmLmhhc0NsYXNzKFd0KXx8KGwodS5jYW1lcmFPZmYpLG8oeWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKFd0KSxmLmFkZENsYXNzKFd0KSl9fSk7Zi5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpLGYuZWxfLmFwcGVuZENoaWxkKGFlKG1lLkRlbGV0ZUJ1dHRvbiwidWwtZGVsZXRlLWJ1dHRvbiIpKTtjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHA9KCk9PntkLmNsYXNzTGlzdC5jb250YWlucygidmpzLWZ1bGxzY3JlZW4iKSYmdS5jYW1lcmFPZmY/ZC5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI6ZC5zdHlsZS5kaXNwbGF5PSJmbGV4In07cCgpO2NvbnN0IGg9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57dS5yZWNvcmQoKS5pc1JlY29yZGluZygpfHwodS5jYW1lcmFPZmY9IXUuY2FtZXJhT2ZmLGwodS5jYW1lcmFPZmYpLCFmLmhhc0NsYXNzKFd0KSYmZi5hZGRDbGFzcyhXdCksbyh5ZS5ERUxFVEUse30pLHAoKSl9fSk7aC5hZGRDbGFzcyhadCksaC5lbF8uYXBwZW5kQ2hpbGQoYWUobWUuVHVybk9mZkNhbWVyYSwidWwtY2FtZXJhLWJ1dHRvbiIpKTtjb25zdCB2PW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGVyLXRvZ2dsZSIpO2lmKHUucmVjb3JkKCkuaXNSZWNvcmRpbmcoKSl1LnJlY29yZCgpLnN0b3AoKSx0JiYodC5pbm5lckhUTUw9bWUuUmVjb3JkQnV0dG9uKSx2LnJlbW92ZUNsYXNzKCR0KSxmLnJlbW92ZUNsYXNzKFd0KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7aWYoZSllLnJlbW92ZSgpLHQmJih0LmlubmVySFRNTD1tZS5SZWNvcmRCdXR0b24pLGwodS5jYW1lcmFPZmYpLG8oeWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKFd0KSxmLmFkZENsYXNzKFd0KSx2LnJlbW92ZUNsYXNzKCR0KSxtLnNob3coKTtlbHNle3YuYWRkQ2xhc3MoJHQpLG0uaGlkZSgpLGguYWRkQ2xhc3MoV3QpLGYuYWRkQ2xhc3MoV3QpLHQmJih0LmlubmVySFRNTD1tZS5TdG9wQnV0dG9uKTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9InVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIixkLmluc2VydEJlZm9yZShlLGQuY2hpbGRyZW5bMV0pLGUuc3R5bGUuaGVpZ2h0PWAke2Qub2Zmc2V0SGVpZ2h0fXB4YCx1ZSh1LDMpfX19fSk7di5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiIpLHYuZWxfLmFwcGVuZENoaWxkKGFlKG1lLlJlY29yZEJ1dHRvbiwidWwtcmVjb3JkZXItdG9nZ2xlIikpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2cuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixnLmNsYXNzTmFtZT0idWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIix0LmFwcGVuZENoaWxkKGcpLHUudXBsb2FkUHJvZ3Jlc3NMYWJlbD1nO2NvbnN0IHk9b2UodSxbZixoLCJQbGF5VG9nZ2xlIix2LCJGdWxsc2NyZWVuVG9nZ2xlIl0pLG09eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTttLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmbS5oaWRlKCk7Y29uc3QgYj15LmNoaWxkcmVuKCkuZmluZCgodD0+IlBsYXlUb2dnbGUiPT09dC5uYW1lXykpO2IuaGlkZSgpLGkmJmguYWRkQ2xhc3MoV3QpLCFpJiZmLmFkZENsYXNzKFd0KSxjZSh1LHksaSwhMSxjKSx1Lm9uKCJzdG9wUmVjb3JkIiwoKCk9Pnt2LmhpZGUoKSxiLnNob3coKSxtLnNob3coKSxmLnJlbW92ZUNsYXNzKFd0KX0pKSx1Lm9uKCJkZXZpY2VSZWFkeSIsKCgpPT57di5zaG93KCksYi5oaWRlKCksZi5hZGRDbGFzcyhXdCl9KSksKCh0LGUsbixyLG8pPT57dC5vbigiZGV2aWNlRXJyb3IiLChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJkZXZpY2UgZXJyb3I6Iix0LmRldmljZUVycm9yQ29kZSksIlBlcm1pc3Npb24gZGVuaWVkIj09PXQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2U/KHQuZGV2aWNlQnV0dG9uLmFkZENsYXNzKCJwZXJtaXNzaW9uLWRlbmllZCIpLG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuUEVSTUlTU0lPTl9ERU5JRUR9KSk6KG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuT1RIRVJ9KSxlZShuZXcgRXJyb3IodC5kZXZpY2VFcnJvckNvZGUubWVzc2FnZSksInJlY29yZGVyRGV2aWNlRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCkpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24obixyKXtlZShyfHx0LmVycm9yKCksInJlY29yZGVyRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksdC5vbigic3RhcnRSZWNvcmQiLChmdW5jdGlvbihlLG4pe3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIil9KSksdC5vbigiZmluaXNoUmVjb3JkIiwoYXN5bmMgZnVuY3Rpb24oKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3RhcnQiLDApO2NvbnN0e3N1cnZleUlkOmkscXVlc3Rpb25JZDphLHJlc3BvbnNlR3JvdXBVaWQ6Yyx2aXNpdG9ySWQ6cyxlbnZJZDp1fT10LnBheWxvYWQ7aWYoIWkpe2NvbnN0IHQ9ImludGVybmFsIGVycm9yOiBtaXNzaW5nIGZpZWxkcyBpbiBwYXlsb2FkIjtyZXR1cm4gbiYmbih5ZS5FUlJPUix7dHlwZTp5ZS5PVEhFUn0pLGVlKG5ldyBFcnJvcih0KSwiZmluaXNoUmVjb3JkIixlLG8scyx1KSxudWxsfXQucmVjb3JkKCkuc3RvcERldmljZSgpO2NvbnN0IGw9dC5jYW1lcmFPZmY/eWUuTUVESUFfVFlQRV9BVURJTzp5ZS5NRURJQV9UWVBFX1ZJREVPLGY9e3N1cnZleUlkOmksdXBkYXRlZEF0OihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKSxtZWRpYVR5cGU6bH07YSYmKGYucXVlc3Rpb25JZD1hKSxjJiYoZi5yZXNwb25zZUdyb3VwVWlkPWMpLHMmJihmLnZpc2l0b3JJZD1zKTtjb25zdCBkPWF3YWl0KGFzeW5jKCk9Pntjb25zdCByPWF3YWl0IGZldGNoKGAke2V9LzIvZW52aXJvbm1lbnRzL2ludGVncmF0aW9ucy91cGxvYWRgLHttZXRob2Q6IlBPU1QiLGNhY2hlOiJuby1jYWNoZSIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KGYpfSk7aWYoci5vayl7Y29uc3QgdD1hd2FpdCByLmpzb24oKTtyZXR1cm4gbiYmbih5ZS5VUExPQURfU1RBUlRFRCx7W3llLlVQTE9BRF9JRF06dC51cGxvYWQuaWQsW3llLk1FRElBX1RZUEVdOmx9KSx0LnVwbG9hZC51cmx9cmV0dXJuIG4mJm4oeWUuRVJST1Ise3R5cGU6eWUuT1RIRVIscmVzcG9uc2U6cn0pLGVlKG5ldyBFcnJvcigiZmFpbGVkIHRvIGdldCB1cGxvYWQgcmVzcG9uc2Ugd2l0aCB1cmwiKSwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpLG51bGx9KSgpO2QmJihRdD13aW5kb3cuVXBDaHVuay5jcmVhdGVVcGxvYWQoe2VuZHBvaW50OmQsZmlsZTpuZXcgRmlsZShbdC5yZWNvcmRlZERhdGFdLGByZWNvcmRpbmcgJHtsfSAke0RhdGUubm93KCl9YCksY2h1bmtTaXplOjUxMjB9KSxRdC5zdGFydFRpbWU9RGF0ZS5ub3coKSxRdC5vbigiZXJyb3IiLChuPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxlZShuLCJmaW5pc2hSZWNvcmQiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksUXQub24oInByb2dyZXNzIiwoZT0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJwcm9ncmVzcyIsZS5kZXRhaWwpfSkpLFF0Lm9uKCJzdWNjZXNzIiwoKCk9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3VjY2VzcyIpLG4mJm4oeWUuVVBMT0FEX0ZJTklTSEVEKX0pKSl9KSl9KSh1LHIsbyxyZSxhKSxpJiYodS5kZXZpY2VCdXR0b24mJnUuZGV2aWNlQnV0dG9uLmhpZGUoKSx1LnNyYyhpKSxiLnNob3coKSx2LmhpZGUoKSxmLnJlbW92ZUNsYXNzKFd0KSk7Y29uc3QgeD1be25hbWU6Im1pY3JvcGhvbmUifV07IXUuY2FtZXJhT2ZmJiZ4LnB1c2goe25hbWU6ImNhbWVyYSJ9KSxQcm9taXNlLmFsbCh4Lm1hcCgodD0+bmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHQpKSkpLnRoZW4oKHQ9Pnt0LnJlZHVjZSgoKHQsZSk9PnQmImdyYW50ZWQiPT09ZS5zdGF0ZSksITApJiZ1JiYodS5kZXZpY2VCdXR0b24mJnUuZGV2aWNlQnV0dG9uLmhpZGUoKSwhaSYmdS5yZWNvcmQoKS5nZXREZXZpY2UoKSl9KSkuY2F0Y2goKHQ9Pnt9KSl9LHVlPSh0LGU9Myk9Pntjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO24mJjA9PT1lPyhuLnJlbW92ZSgpLHQucmVjb3JkKCkuc3RhcnQoKSk6biYmKG4uaW5uZXJIVE1MPWA8c3BhbiBjbGFzcz0ndWwtY291bnRkb3duLXRleHQnPlJlY29yZGluZyBpbi4uLiAke2V9PC9zcGFuPmAsc2V0VGltZW91dCgoKCk9Pnt1ZSh0LGUtMSl9KSwxZTMpKX0sbGU9dD0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIiLGUuYXBwZW5kQ2hpbGQoKHQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tcGxheWVyLWxvYWRpbmciLGUuaWQ9cXQodCksWyJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwiZm91cnRoIl0ubWFwKCh0PT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT10LGUuYXBwZW5kQ2hpbGQobil9KSksZX0pKHQpKSxlfSxmZT0odCxlKT0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtuLmlkPXQsbi5jbGFzc05hbWU9InZpZGVvLWpzIHZqcy1kZWZhdWx0LXNraW4gdWwtdmlkZW8tcGxheWVyLXZpZGVvIjtjb25zdCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyLmNsYXNzTmFtZT0idmpzLW5vLWpzIixyLmlubmVySFRNTD0iVG8gdmlldyB0aGlzIHZpZGVvIHBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCwgYW5kIGNvbnNpZGVyIHVwZ3JhZGluZyB0byBhIHdlYiBicm93c2VyIHRoYXQiO2NvbnN0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3JldHVybiBvLmhyZWY9Imh0dHBzOi8vdmlkZW9qcy5jb20vaHRtbDUtdmlkZW8tc3VwcG9ydC8iLG8udGFyZ2V0PSJfYmxhbmsiLG8uaW5uZXJIVE1MPSJzdXBwb3J0cyBIVE1MNSB2aWRlbyIsci5hcHBlbmRDaGlsZChvKSxuLmFwcGVuZENoaWxkKHIpLGUuYXBwZW5kQ2hpbGQobiksZX0sZGU9KHQsZSk9PntlPyh0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5zaG93KCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LnJlbW92ZSgidmpzLWhpZGRlbiIpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5oaWRlKCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjEwMCUiKX0scGU9dD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMsbj10K1h0O2lmKGUpe3RyeXtpZighZShuKS5yZWNvcmQoKS5zdHJlYW0pcmV0dXJufWNhdGNoKHQpe3JldHVybn1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKSYmZShuKS5yZWNvcmQoKS5zdG9wKCksZShuKS5yZWNvcmQoKS5zdG9wRGV2aWNlKCl9fSxoZT10PT57d2luZG93LnZpZGVvanModCtLdCkucGF1c2UoKX0sdmU9KHQsZSxuLHIpPT57d2luZG93LnZpZGVvanModCtLdCk7Y29uc3Qgbz13aW5kb3cudmlkZW9qcyh0K1h0KTsoKHQsZSxuKT0+e2NvbnN0IHI9d2luZG93LnZpZGVvanModCtLdCk7IXIucGF1c2VkKCkmJnIucGF1c2UoKSxyLnNyYyh7c3JjOmUsdHlwZToiYXBwbGljYXRpb24veC1tcGVnVVJMIn0pLHIuY3VycmVudFRpbWUoMCksZGUocixuKTtjb25zdCBvPWdlKGUpOyFuJiZlJiYobz9yLnBvc3RlcihvKTpkZShyLCEwKSksci5vbigicGxheSIsKCgpPT57bnx8IWV8fG98fGRlKHIsITEpfSkpfSkodCxlLHIpLG8ucmVjb3JkKCkucmVzZXRTdGF0ZSgpLG8ucmVjb3JkKCkuZ2V0RGV2aWNlKCk7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpWzBdLmNsYXNzTGlzdC5hZGQoV3QpLG8uY2FtZXJhT2ZmKXtkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IilbMF0uY2xhc3NMaXN0LnJlbW92ZShXdCksd2luZG93Lm5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHt2aWRlbzohMCxhdWRpbzohMH0pLnRoZW4oKHQ9PntvLnJlY29yZCgpLm9uRGV2aWNlUmVhZHkodCksdC5nZXRWaWRlb1RyYWNrcygpLmZvckVhY2goKHQ9Pnt0LnN0b3AoKX0pKX0pKS5jYXRjaChvLnJlY29yZCgpLm9uRGV2aWNlRXJyb3IuYmluZChvLnJlY29yZCgpKSl9ZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIpWzBdLmNsYXNzTGlzdC5yZW1vdmUoV3QpfW8ucGF5bG9hZD1uLHJlKG8udXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpLHRlPURhdGUubm93KCl9LGdlPXQ9Pntjb25zdCBlPXQubWF0Y2goL2h0dHBzOlwvXC9zdHJlYW0ubXV4LmNvbVwvKC4qKS8pLG49ZT9lWzFdOm51bGw7cmV0dXJuIG4/YGh0dHBzOi8vaW1hZ2UubXV4LmNvbS8ke259L3RodW1ibmFpbC5qcGc/dGltZT0wYDpudWxsfSx5ZT17VVBMT0FEX1NUQVJURUQ6InVwbG9hZC5zdGFydGVkIixVUExPQURfRklOSVNIRUQ6InVwbG9hZC5maW5pc2hlZCIsREVMRVRFOiJkZWxldGUiLEVSUk9SOiJlcnJvciIsTUVESUFfVFlQRToibWVkaWEudHlwZSIsUEVSTUlTU0lPTl9ERU5JRUQ6InBlcm1pc3Npb25fZGVuaWVkIixPVEhFUjoib3RoZXIiLFVQTE9BRF9JRDoidXBsb2FkLmlkIixNRURJQV9UWVBFX1ZJREVPOiJ2aWRlbyIsTUVESUFfVFlQRV9BVURJTzoiYXVkaW8ifSxtZT17UGxheWJhY2tSYXRlTWVudUJ1dHRvbjoiU3BlZWQiLFBsYXlUb2dnbGU6IlBsYXkiLEZ1bGxzY3JlZW5Ub2dnbGU6IkV4cGFuZCIsVHVybk9uQ2FtZXJhOiJUdXJuIG9uIixUdXJuT2ZmQ2FtZXJhOiJUdXJuIG9mZiIsRGVsZXRlQnV0dG9uOiJEZWxldGUiLFJlY29yZEJ1dHRvbjoiUmVjb3JkIixTdG9wQnV0dG9uOiJTdG9wIixQYXVzZUJ1dHRvbjoiUGF1c2UifTtmdW5jdGlvbiBiZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIHhlPSJ1bC1idXR0b24taW5hY3RpdmUiO2Z1bmN0aW9uIHdlKHQsZSl7ZSh0KX12YXIgRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7T3QoKSh0aGlzLHQpLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnBheWxvYWQ9ZSxuLnJlamVjdD1yLG4ucmVzb2x2ZT10fSkpfXJldHVybiBJdCgpKHQsW3trZXk6InJlc29sdmVSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnJlc29sdmUodCl9fV0pLHR9KCk7ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobi5iaW5kKG51bGwsZSksdCl9KSl9dmFyIENlPTEwLGtlPSExLFNlPSIiLE9lPSExLEFlPVtdO2Z1bmN0aW9uIEllKHQpe3JldHVybiB0Ll9jb25maWcmJnQuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q/dC5fY29uZmlnLmluc3RhbGxhdGlvbk1ldGhvZDp0Ll9ndG0/cTp0Ll9zZWdtZW50P1c6R31mdW5jdGlvbiBNZSh0KXtrZT0hMCxTZT10fWZ1bmN0aW9uIFRlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwidXNlcmxlYXAtcGxhdGZvcm0iOiJ3ZWIiLCJ4LXVsLXNkay12ZXJzaW9uIjoiMi4xNC44In07aWYodC5lbnZJZCYmKGVbVV09dC5lbnZJZCksdC50b2tlbiYmKGUuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIrdC50b2tlbiksdC51c2VySWQmJihlW3pdPXQudXNlcklkKSx0LnZpc2l0b3JJZCYmKGVbSF09dC52aXNpdG9ySWQpLHQucGFydG5lckFub255bW91c0lkJiYoZVtCXT10LnBhcnRuZXJBbm9ueW1vdXNJZCksdC5tb2JpbGVIZWFkZXJzSlNPTil7dmFyIG49SlNPTi5wYXJzZSh0Lm1vYmlsZUhlYWRlcnNKU09OKTtPYmplY3QuYXNzaWduKGUsbil9cmV0dXJuIGVbVl09SWUodCksdC5sb2NhbGUmJihlWyJhY2NlcHQtbGFuZ3VhZ2UiXT10LmxvY2FsZSksZX1mdW5jdGlvbiBfZSh0LGUsbil7cmV0dXJuIExlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMZSgpe3JldHVybihMZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIWUpe3QubmV4dD00O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7c3RhdHVzOjQyOX0pO2Nhc2UgNDpyZXR1cm4gbz1uZXcgRWUociksQWUucHVzaChvKSx0LmFicnVwdCgicmV0dXJuIixvLnByb21pc2UpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuIFBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBQZSgpe3JldHVybiBQZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuKXt2YXIgcixvLGksYSxjLHMsdSxsLGYsZD1hcmd1bWVudHM7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWQubGVuZ3RoPjImJnZvaWQgMCE9PWRbMl0/ZFsyXTowLG89ZC5sZW5ndGg+MyYmdm9pZCAwIT09ZFszXSYmZFszXSxpPWQubGVuZ3RoPjQmJnZvaWQgMCE9PWRbNF0mJmRbNF0sYT17dXJsOmUsb3B0aW9uczpuLGF0dGVtcHQ6cixzaG91bGREcm9wT25SYXRlTGltaXQ6b30sIU9lfHxpKXt0Lm5leHQ9NjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsX2UobyxpLGEpKTtjYXNlIDY6aWYoYz17b2s6ITEscmVwb3J0RXJyb3I6ITF9LCFrZSl7dC5uZXh0PTEwO2JyZWFrfXJldHVybiBjb25zb2xlLmxvZygiVXNlckxlYXAgLSAiLmNvbmNhdChTZSkpLHQuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMTA6cmV0dXJuIHQucHJldj0xMCxuLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihUZSgpLG4uaGVhZGVycyksdC5uZXh0PTE0LGZldGNoKGUsbik7Y2FzZSAxNDppZig0MjkhPT0ocz10LnNlbnQpLnN0YXR1cyl7dC5uZXh0PTI0O2JyZWFrfWlmKCEoIU9lJiYhb3x8aSkpe3QubmV4dD0yMzticmVha31yZXR1cm4gT2U9ITAsdT1zLmhlYWRlcnMuaGFzKCJyYXRlbGltaXQtcmVzZXQiKT9OdW1iZXIocy5oZWFkZXJzLmdldCgicmF0ZWxpbWl0LXJlc2V0IikpOkNlLHQuYWJydXB0KCJyZXR1cm4iLGplKDFlMyp1KS50aGVuKE4oKShSKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFJlKGUsbiwwLG8sITApKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpKTtjYXNlIDIzOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixfZShvLCExLGEpKTtjYXNlIDI0OmlmKE9lPSExLEFlLmxlbmd0aCYmKEFlLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXlsb2FkO1JlKGUudXJsLGUub3B0aW9ucyxlLmF0dGVtcHQsZS5zaG91bGREcm9wT25SYXRlTGltaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZVJlcXVlc3QoZSl9KSl9KSksQWU9W10pLCFzLm9rKXt0Lm5leHQ9NDE7YnJlYWt9aWYoMjQ5IT09cy5zdGF0dXMpe3QubmV4dD0zMDticmVha31yZXR1cm4gTWUoKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDMwOnJldHVybiB0Lm5leHQ9MzIscy50ZXh0KCk7Y2FzZSAzMjpyZXR1cm4gbD10LnNlbnQsdC5wcmV2PTMzLGwmJiJPSyIhPT1sJiYocy5qc29uPUpTT04ucGFyc2UobCkpLHQuYWJydXB0KCJyZXR1cm4iLHMpO2Nhc2UgMzg6cmV0dXJuIHQucHJldj0zOCx0LnQwPXQuY2F0Y2goMzMpLHQuYWJydXB0KCJyZXR1cm4iLHtvazohMSxyZXBvcnRFcnJvcjohMCxlcnJvcjpuZXcgRXJyb3IoImZhaWxlZCBwYXJzaW5nIHJlc3BvbnNlIGpzb24gZm9yICIuY29uY2F0KGUsIiAtICIpLmNvbmNhdChsKSl9KTtjYXNlIDQxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDQ0OmlmKHQucHJldj00NCx0LnQxPXQuY2F0Y2goMTApLCEoKGY9cisxKT4yKSl7dC5uZXh0PTQ5O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITEsZXJyb3I6dC50MX0pO2Nhc2UgNDk6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLGplKDFlMypmKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBSZShlLG4sZil9KSkpO2Nhc2UgNTA6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1sxMCw0NF0sWzMzLDM4XV0pfSkpKSxQZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIERlKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP05lKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpOZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiBGZSh0LGUsbil7cmV0dXJuIFVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVZSgpe3JldHVybiBVZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvLGksYSxjLHMsdSxsLGY7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1lLm1vZGUsaT1lLnVzZXJJZCxhPWUuZW52SWQsYz1lLmFwaVVSTCxzPWUuaGVhZGVycyx1PXdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbD17bW9kZTpvLHNjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOnUuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OnUuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9LGY9e2FjdGlvbjpuLGVycjp7bWVzc2FnZTpyLm1lc3NhZ2Usc3RhY2s6ci5zdGFja30sbWV0YTpsLHZpZDppLGVudklkOmF9LHQubmV4dD02LFJlKCIiLmNvbmNhdChjLCIvc2RrLzEvZXJyb3JzIikse21ldGhvZDoiUE9TVCIsaGVhZGVyczpPYmplY3QuYXNzaWduKHsieC11bC1lcnJvciI6d2luZG93LmJ0b2EoInVzZXJsZWFwLSIuY29uY2F0KERhdGUubm93KCksIi1lcnJvciIpKX0scyksYm9keTpKU09OLnN0cmluZ2lmeShmKX0pO2Nhc2UgNjp0LnNlbnQub2t8fGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQ0NCkgRmFpbGVkIHRvIHJlcG9ydCBlcnJvciB0byBBUEkiLHIpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSxVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIEJlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC51c2VySWR8fHQubWV0YSYmInRlc3QiPT09dC5tZXRhLm1vZGV8fHQuaXNQcmV2aWV3fSx6ZT17c3VydmV5SWQ6bnVsbCxydW5uaW5nOiExLGZyYW1lOm51bGwsZW52SWQ6bnVsbCx1c2VySWQ6bnVsbCxtZXRhOnt9LGJvcmRlcjpudWxsLGZvbnRGYW1pbHk6bnVsbCxmb250RmFtaWx5VVJMOm51bGwsdGltZW91dDpudWxsLGludGVydmFsOm51bGwsbW9kZTpudWxsLGRlY2s6e2luZGV4OjAsY2FyZHM6W119LGNvbnRleHQ6e30sc2VuZGluZzohMSxjYXJkczp7b3BlbjpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPXQuYXBwLHM9Yy51c2VNb2JpbGVTdHlsaW5nLHU9Yy5ib3JkZXIsbD1jLmhlYWRlcnMsZj1GKFtlLCJ1bC1jYXJkLS10ZXh0IixsdF0pLGQ9UHQocikscD1yJiZyLm9wZW5UZXh0UGxhY2Vob2xkZXI/ci5vcGVuVGV4dFBsYWNlaG9sZGVyOm51bGw7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCxsWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOmYsb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHp0KHQsbyl9LGtleTppfSxOdChkLG4pLGQsQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fY29udGFpbmVyIn0sQSgidGV4dGFyZWEiLHsiZGF0YS1ncmFtbSI6ImZhbHNlIixtYXhsZW5ndGg6IjUwMDAiLGNsYXNzTmFtZTpGKGR0KGl0LHMpKSxuYW1lOiJ0ZXh0IixwbGFjZWhvbGRlcjpwLCJhcmlhLXBsYWNlaG9sZGVyIjpwLCJhcmlhLW11bHRpbGluZSI6InRydWUiLHZhbHVlOnQub3BlblRleHQudmFsdWUsb25jcmVhdGU6QnQoKSxvbmlucHV0OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGEub3BlblRleHQub25UZXh0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0sb25mb2N1czpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj11fSxvbmJsdXI6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSx0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOnN0LGNvbnRlbnRlZGl0YWJsZToidHJ1ZSIscm9sZToidGV4dGJveCIsImFyaWEtbGFiZWwiOnB9KSksQSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnV9LG9uY2xpY2s6ZnVuY3Rpb24oZSl7KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmZvcm1zWyJ0ZXh0LWZvcm0iXSkmJih6dCh0Lm9wZW5UZXh0LnZhbHVlLnRyaW0oKSxvKSx0Lm9wZW5UZXh0LnZhbHVlPSIiKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxEdChyKSkpKSl9fSx0ZXh0dXJscHJvbXB0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLHI9dC5wcm9wZXJ0aWVzLG89KHQubG9jYWxlLHQubmV4dCksaT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGM9RihbZSwidWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IixsdF0pLHM9dC5hcHAsdT1zLmJvcmRlcixsPXMuaGVhZGVycztyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGxbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImRpdiIse2NsYXNzTmFtZTpjLGtleTppfSxBKCJwIix7aWQ6c3QsY2xhc3NOYW1lOiJ1bC1xdWVzdGlvbiJ9LG4pLEEoImRpdiIse2lkOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciIsY2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciJ9LChyJiZyLmJvZHk/ci5ib2R5LnNwbGl0KC9cblxzKlxuL2cpOltdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBBKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSJ9LHQpfSkpKSxBKCJhIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIHVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6dSwibWFyZ2luLXJpZ2h0IjoiYXV0byIsInRleHQtb3ZlcmZsb3ciOiJlbGxpcHNpcyIsdGV4dERlY29yYXRpb246Im5vbmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sb25jbGljazpmdW5jdGlvbih0KXtvKCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bygpfSxocmVmOnImJnIuYnV0dG9uVXJsLHRhcmdldDoiX2JsYW5rIixyb2xlOiJidXR0b24iLHRhYmluZGV4OjAsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKSwiYXJpYS1kZXNjcmliZWRieSI6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sciYmci5idXR0b25UZXh0P3IuYnV0dG9uVGV4dDoiTmV4dCIpKSl9fSxtdWx0aXBsZWNob2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9KHQubG9jYWxlLHQub3B0aW9ucyksYz12b2lkIDA9PT1hP1tdOmEscz10Lm5leHQsdT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGw9dC5hcHAsZj1sLnVzZU1vYmlsZVN0eWxpbmcsZD1sLmhlYWRlcnMscD1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKTtmdW5jdGlvbiBoKHQsZSl7cyh7dmFsdWU6cigpKHt9LHQsZSl9KX12YXIgdj1jLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbCxpPXQudmFsdWU7cmV0dXJuIEEoSHQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byx0YWJpbmRleDplKzEsb25TZWxlY3Q6aC5iaW5kKG51bGwscixpKSxpZDpyLGlzUmFkaW86ITAsdXNlTW9iaWxlU3R5bGluZzpmfSl9KSksZz1QdChpKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGRbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImRpdiIse2NsYXNzTmFtZTpwLGtleTp1fSxOdChnLG8pLGcsQSgiZGl2Iix7Y2xhc3NOYW1lOkYoZHQob3QsZikpLHJvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLWxhYmVsZWRieSI6c3R9LHYpKSl9fSxtdWx0aXBsZXNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLHI9dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9KHQubG9jYWxlLHQub3B0aW9ucyksYT12b2lkIDA9PT1pP1tdOmksYz0odC5pc0xhc3QsdC5uZXh0KSxzPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgdT1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKSxsPXQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGY9aS5tdWx0aXBsZXNlbGVjdCxkPWYuaW5pdCxwPWYucmVzZXQsaD1mLnVwZGF0ZVNlbGVjdGVkLHY9dC5hcHAsZz12LnVzZU1vYmlsZVN0eWxpbmcseT12LmhlYWRlcnMsbT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxmdW5jdGlvbih0LGUpe2Uoe3ZhbHVlOnR9KX0odC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsYykscCgpfSxiPWEubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsO3QudmFsdWU7cmV0dXJuIEEoSHQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byxvblNlbGVjdDpoLHNlbGVjdGVkOmxbcl0saWQ6cixpc1JhZGlvOiExLHVzZU1vYmlsZVN0eWxpbmc6Z30pfSkpLHg9UHQobyk7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCx5WyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOnUsb25zdWJtaXQ6bSxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZT17fSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdC5pZF09ITF9KSksdm9pZCBkKGUpO3ZhciBlfSxrZXk6c30sTnQoeCxyKSx4LEEoImRpdiIse2NsYXNzTmFtZTpGKGR0KG90LGcpKSxyb2xlOiJyYWRpb2dyb3VwIn0sYiksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6bn0sb25jbGljazptLHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sRHQobykpKSkpfX0sbGlrZXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9dS5oZWFkZXJzLHA9RihbbiwidWwtY2FyZC0tbGlrZXJ0IixsdF0pLGg9ciYmci5sZWZ0LHY9ciYmci5yaWdodCxnPV8oKShBcnJheSg1KSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4rMSxvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEEoImRpdiIsTSgpKHtpZDpvLGNsYXNzTmFtZTpGKFtdLmNvbmNhdChfKCkoZHQoWCxsKSksXygpKGR0KCIiLmNvbmNhdChYLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToidGV4dGJveCIsdGFiaW5kZXg6MCwiYXJpYS1kZXNjcmliZWRieSI6dXR9KSxyKX0pKSx5PVB0KGkpO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6RihfKCkocHQoZnQsZFsidXNlcmxlYXAtcGxhdGZvcm0iXSkpKX0sQSgiZm9ybSIse2NsYXNzTmFtZTpwLGtleTpjfSxOdCh5LG8pLHksZiUyPT0wJiZBKCJkaXYiLG51bGwpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIn0sZyksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX2xhYmVscyJ9LEEoInNwYW4iLG51bGwsaCksQSgic3BhbiIsbnVsbCx2KSkpKX19LHRoYW5rczpmdW5jdGlvbih0KXt2YXIgZT10LmVuZENhcmQsbj10LmJvcmRlcixyPXQuY2xhc3NOYW1lLG89KHQubG9jYWxlLHQucXVlc3Rpb25JZCk7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9RihbciwidWwtY2FyZC0tdGhhbmtzIixsdF0pLGM9ZSYmZS5zdWJoZWFkZXI/QSgicCIse2NsYXNzTmFtZToidWwtY2FwdGlvbiJ9LGUuc3ViaGVhZGVyKTpudWxsLHM9ZSYmZS5oZWFkbGluZT9lLmhlYWRsaW5lOm51bGw7cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShwdChmdCx0LmFwcC5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSkpfSxBKCJkaXYiLHtjbGFzc05hbWU6YSxrZXk6b30sQSgiZGl2Iix7b25jcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHAuY29tcGxldGUoKX19LEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLXRoYW5rcy1jaGVjayJ9LEEoInN2ZyIse3dpZHRoOiI4MSIsaGVpZ2h0OiI5OSIsdmlld0JveDoiMCAwIDgxIDk5IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWxhYmVsbGVkYnkiOiJ0aXRsZSJ9LEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik00MC41IDc3QzYwLjkzNDUgNzcgNzcuNSA2MC40MzQ1IDc3LjUgNDBDNzcuNSAxOS41NjU1IDYwLjkzNDUgMyA0MC41IDNDMjAuMDY1NSAzIDMuNSAxOS41NjU1IDMuNSA0MEMzLjUgNjAuNDM0NSAyMC4wNjU1IDc3IDQwLjUgNzdaTTgwLjUgNDBDODAuNSA2Mi4wOTE0IDYyLjU5MTQgODAgNDAuNSA4MEMxOC40MDg2IDgwIDAuNSA2Mi4wOTE0IDAuNSA0MEMwLjUgMTcuOTA4NiAxOC40MDg2IDAgNDAuNSAwQzYyLjU5MTQgMCA4MC41IDE3LjkwODYgODAuNSA0MFoiLGZpbGw6bn0pLEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik01NS4wMjUgMjIuOTA0NkM1NS42Mjk5IDIzLjQ3MDUgNTUuNjYxNiAyNC40MTk4IDU1LjA5NTYgMjUuMDI0N0M1NC44NzI0IDI1LjI2MzQgNTQuNjEwOSAyNS41Mjg1IDU0LjMxNTcgMjUuODI3N0M1Mi4yNTQ3IDI3LjkxNjggNDguNTU0OSAzMS42NjcgNDQuODEzNSAzOS42NjU4QzQzLjI4MTggNDIuOTQwNiA0Mi4wODY0IDQ1LjgzODYgNDEuMDgyMyA0OC4yNzI5QzQwLjY1MzkgNDkuMzExNiA0MC4yNjAzIDUwLjI2NTkgMzkuODkwMiA1MS4xMjlDMzkuMjg3IDUyLjUzNTkgMzguNzI0OCA1My43NTA4IDM4LjE3NDQgNTQuNjI1QzM3Ljg5OTcgNTUuMDYxMyAzNy41ODA2IDU1LjQ5MDUgMzcuMjAxNyA1NS44MjQ1QzM2LjgyMDEgNTYuMTYwNyAzNi4yNjEzIDU2LjUgMzUuNTQ1NyA1Ni41QzM0LjY3NDIgNTYuNSAzNC4wODkyIDU1Ljk2OTIgMzMuNzc3NCA1NS42MDgzQzMzLjQ1MDIgNTUuMjI5NiAzMy4xNzUyIDU0Ljc1MTEgMzIuOTM5NiA1NC4zMDFDMzIuNzMwNSA1My45MDEzIDMyLjUwODggNTMuNDM2NyAzMi4yNzk3IDUyLjk1NjVDMzIuMjQyOSA1Mi44Nzk0IDMyLjIwNTkgNTIuODAxOSAzMi4xNjg4IDUyLjcyNDNDMzEuODk0MiA1Mi4xNDk5IDMxLjU5NTkgNTEuNTM0IDMxLjI1MzcgNTAuODg2OEMyOS44ODg2IDQ4LjMwNSAyNy44NTM5IDQ1LjI4NzggMjQuMjM0MyA0My4xMzgyQzIzLjUyMiA0Mi43MTUyIDIzLjI4NzUgNDEuNzk0OSAyMy43MTA1IDQxLjA4MjZDMjQuMTMzNSA0MC4zNzAzIDI1LjA1MzkgNDAuMTM1OCAyNS43NjYyIDQwLjU1ODhDMzAuMDU1NiA0My4xMDYyIDMyLjQxNDkgNDYuNjY0NyAzMy45MDU4IDQ5LjQ4NDVDMzQuMjc3NiA1MC4xODc2IDM0LjU5NzMgNTAuODQ4NyAzNC44NzUzIDUxLjQzMDJDMzQuOTE0NyA1MS41MTI0IDM0Ljk1MjkgNTEuNTkyNiAzNC45OTAyIDUxLjY3MDdDMzUuMjIyMiA1Mi4xNTY3IDM1LjQxNjQgNTIuNTYzNyAzNS41OTc4IDUyLjkxMDJDMzUuNjE1MSA1Mi45NDM0IDM1LjYzMjEgNTIuOTc1NCAzNS42NDg1IDUzLjAwNjFDMzYuMDU2NSA1Mi4zNTMxIDM2LjUzNDEgNTEuMzQzNCAzNy4xMzMgNDkuOTQ2OEMzNy40NzgxIDQ5LjE0MTggMzcuODU3MiA0OC4yMjI5IDM4LjI3NjEgNDcuMjA3NEMzOS4yODg2IDQ0Ljc1MzIgNDAuNTMzOSA0MS43MzQ3IDQyLjA5NjEgMzguMzk0OEM0Ni4wNTkxIDI5LjkyMjEgNTAuMDY0MSAyNS44NjQ4IDUyLjE1MzUgMjMuNzQ4MkM1Mi40NDIzIDIzLjQ1NTYgNTIuNjk0NCAyMy4yMDAyIDUyLjkwNDggMjIuOTc1M0M1My40NzA4IDIyLjM3MDMgNTQuNDIgMjIuMzM4NyA1NS4wMjUgMjIuOTA0NlpNMzUuMTk5NCA1My41ODkyQzM1LjE5OTQgNTMuNTg5MiAzNS4yIDUzLjU4ODggMzUuMjAxMiA1My41ODc5QzM1LjIgNTMuNTg4OSAzNS4xOTk0IDUzLjU4OTMgMzUuMTk5NCA1My41ODkyWk0zNi4wNjY2IDUzLjY2ODJDMzYuMDczMiA1My42NzQgMzYuMDc2NSA1My42Nzc1IDM2LjA3NjUgNTMuNjc3N0MzNi4wNzY1IDUzLjY3OCAzNi4wNzMyIDUzLjY3NTEgMzYuMDY2NiA1My42NjgyWiIsZmlsbDpufSksQSgicGF0aCIse2Q6Ik02OS41IDk3QzY5LjUgOTguMTA0NiA1Ni4yOTI0IDk5IDQwIDk5QzIzLjcwNzYgOTkgMTAuNSA5OC4xMDQ2IDEwLjUgOTdDMTAuNSA5NS44OTU0IDIzLjcwNzYgOTUgNDAgOTVDNTYuMjkyNCA5NSA2OS41IDk1Ljg5NTQgNjkuNSA5N1oiLGZpbGw6ImJsYWNrIiwiZmlsbC1vcGFjaXR5IjoiMC4yIn0pKSksQSgicCIse2NsYXNzTmFtZTpzdCxpZDpzdH0scyksYykpKSl9fSxucHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD11LmhlYWRlcnMscD1GKFtuLCJ1bC1jYXJkLS1ucHMiLGx0XSksaD1yJiZyLmxlZnQsdj1yJiZyLnJpZ2h0LGc9XygpKEFycmF5KDExKSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciByPW4sbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxBKCJkaXYiLE0oKSh7Y2xhc3NOYW1lOkYoW10uY29uY2F0KF8oKShkdChRLGwpKSxfKCkoZHQoIiIuY29uY2F0KFEsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJyYWRpbyIsdGFiaW5kZXg6MCxpZDpvfSkscil9KSkseT1QdChpKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGRbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSl9LEEoImZvcm0iLHtjbGFzc05hbWU6cCxrZXk6Y30sTnQoeSxvKSx5LGYlMj09MCYmQSgiZGl2IixudWxsKSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbnVtYmVycyJ9LGcpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19sYWJlbHMifSxBKCJzcGFuIixudWxsLGgpLEEoInNwYW4iLG51bGwsdikpKSl9fSx2aWRlb3ZvaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9dC5uZXh0LGE9dC5xdWVzdGlvbklkLGM9dC51cGRhdGVIZWlnaHQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9RihbZSxZXSksbD0idWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIixmPSJ1bC1jYXJkLXZpZGVvX19uZXh0X2J1dHRvbiIsZD0idWwtdmlkZW8taW50ZXJ2aWV3LWZvcm0iLHA9InVsLXF1ZXN0aW9uLXBsYXllci1jb250YWluZXIiLGg9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHY9byYmby52aWRlb1VybCxnPXQuYXBwLHk9Zy5zdXJ2ZXlJZCxtPWcucmVzcG9uc2VHcm91cFVpZCxiPWcuYXBpVVJMLHg9Zy51c2VySWQsdz1nLmJvcmRlcixFPWcuZW52SWQsaj1nLmhlYWRlcnM7aWYodC5jYXJkRGF0YXx8KHQuY2FyZERhdGE9e30pLHQuY2FyZERhdGEudXBsb2FkSWQ9dm9pZCAwLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9dm9pZCAwLHQuY2FyZERhdGEuYnV0dG9uVGV4dD1EdChvKSx0LmNhcmREYXRhLnNraXBCdXR0b25UZXh0PUZ0KG8pLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGwpKXt2ZShsLHYse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eH0sby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPKTt2YXIgQz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtDLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LEMuY2xhc3NMaXN0LmFkZCh4ZSl9dmFyIGs9ZnVuY3Rpb24oZSxuKXt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTtlPT09eWUuVVBMT0FEX1NUQVJURUQ/KHQuY2FyZERhdGEudXBsb2FkSWQ9blt5ZS5VUExPQURfSURdLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9blt5ZS5NRURJQV9SRUNPUkRJTkdfVUlEXSxyLmlubmVyVGV4dD10LmNhcmREYXRhLmJ1dHRvblRleHQsci5jbGFzc0xpc3QucmVtb3ZlKHhlKSxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjp3fSkpOmU9PT15ZS5ERUxFVEUmJih0LmNhcmREYXRhLnVwbG9hZElkPW51bGwsdC5jYXJkRGF0YS5tZWRpYVJlY29yZGluZ1VpZD1udWxsLHIuY2xhc3NMaXN0LmFkZCh4ZSksci5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjoiIn0pKX0sUz1mdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3JldHVybiBuLmNsYXNzTmFtZT0iIi5jb25jYXQoInVsLXZpZGVvLWJ0biIsIiAiKS5jb25jYXQodCksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk7dD8oZS5jbGFzc0xpc3QucmVtb3ZlKFd0KSxlLmNsYXNzTGlzdC5hZGQoR3QpLG4uY2xhc3NMaXN0LmFkZChXdCksbi5jbGFzc0xpc3QucmVtb3ZlKEd0KSk6KGhlKGwpLGUuY2xhc3NMaXN0LmFkZChXdCksZS5jbGFzc0xpc3QucmVtb3ZlKEd0KSxuLmNsYXNzTGlzdC5yZW1vdmUoV3QpLG4uY2xhc3NMaXN0LmFkZChHdCkpfShlKX0pKSxufSxPPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChHdCksdC5hcHBlbmRDaGlsZCgoKHQsZSxuLHI9ITEsbz0iaHR0cHM6Ly9hcGkuc3ByaWcuY29tIik9Pntjb25zdCBpPXQrS3QsYT1sZShpKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57ZWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSBxdWVzdGlvbiBwbGF5ZXIuYCksInBsYXllckRldmljZUVycm9yIixvLHt9KX0pKSxuZShhLEp0LCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHF0KGkpKS5yZW1vdmUoKSxmZShpLGEpO2NvbnN0IHQ9d2luZG93LnZpZGVvanMoaSx7cGxheXNpbmxpbmU6ITAscGxheWJhY2tSYXRlczpbLjUsMSwxLjUsMl19KSxvPW9lKHQsWyJQbGF5YmFja1JhdGVNZW51QnV0dG9uIiwiUGxheVRvZ2dsZSIsIkZ1bGxzY3JlZW5Ub2dnbGUiXSksYz1vLmNoaWxkcmVuKCkuZmluZCgodD0+IkZ1bGxzY3JlZW5Ub2dnbGUiPT09dC5uYW1lXykpO2MuaGFzQ2xhc3MoInZqcy1kaXNhYmxlZCIpJiZjLmhpZGUoKSxjZSh0LG8sZSxuLHIpfSkpLGF9KShsLHtzcmM6dix0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSx2b2lkIDAsby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPLGIpKTt2YXIgZT1TKCJ1bC1yZWNvcmQtcmVzcG9uc2UtYnRuIiwhMSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdH0sST1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoV3QpO3ZhciBlPVMoInVsLWJhY2stcXVlc3Rpb24tYnRuIiwhMCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdC5hcHBlbmRDaGlsZCgoKHQsZT17fSxuPSJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHIsbyxpLGE9ITEpPT57Y29uc3QgYz10K1h0LHM9bGUoYyk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMoYyk7ZWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSByZWNvcmRlciBwbGF5ZXIuYCksInJlY29yZGVyRGV2aWNlRXJyb3IiLG4saSxlLnBheWxvYWQudmlzaXRvcklkLGUucGF5bG9hZC5lbnZJZCl9KSksbmUocyxKdC5jb25jYXQoWXQpLCgoKT0+e2ZlKGMscyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocXQoYykpLnJlbW92ZSgpLHNlKHMsYyxlLG4scixvLGksYSl9KSksc30pKGwse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eCxlbnZJZDpFfSxiLGssITEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/YmUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmJlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxqLHsieC11bC12aWRlby1yZWNvcmRlci1vcmlnaW4iOiJzZGsifSksby5tZWRpYVR5cGU9PT15ZS5NRURJQV9UWVBFX0FVRElPKSksdH0sTT1QdChvKTtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKHB0KGZ0LGpbInVzZXJsZWFwLXBsYXRmb3JtIl0pKSksc3R5bGU6e21hcmdpblRvcDoidW5zZXQifX0sQSgiZGl2Iix7Y2xhc3NOYW1lOmx0LGtleTphfSxBKCJmb3JtIix7aWQ6ZCxjbGFzc05hbWU6dSxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24odCl7cmV0dXJuIGMoKX0pKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdChZKSk7dC5vYnNlcnZlKGUpfSxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gd2UodCxpKX19LE50KE0sbiksTSxBKCJkaXYiLHtpZDoidWwtY2FyZC12b2ljZV9fdmlkZW8ifSxBKCJkaXYiLHtpZDpsLG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTygpKSx0LmFwcGVuZENoaWxkKEkoKSksdH19KSxBKCJidXR0b24iLHtpZDpmLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gIi5jb25jYXQoeGUpLG9uY2xpY2s6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkscGUobCksZG9jdW1lbnQuZm9ybXNbZF0pe3QuY2FyZERhdGEudXBsb2FkSWQ/d2Uoe3ZhbHVlOnttZWRpYVJlY29yZGluZ1VpZDp0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkfX0saSk6d2Uoe2RlbGV0ZWRBdDpEYXRlLm5vdygpfSxpKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKS5jbGFzc0xpc3QuYWRkKFd0KSxuLmNsYXNzTGlzdC5yZW1vdmUoV3QpfX0scm9sZToiYnV0dG9uIn0sRnQobykpKSkpKX19fSxsb2NhbGU6ImVuIixhcGlVUkw6Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIsc2hvd1N1cnZleUJyYW5kOiEwLG1hcmtldGluZ1VybDoiaHR0cHM6Ly91c2VybGVhcC5jb20iLHNsdWdOYW1lOm51bGwscmVzcG9uc2VHcm91cFVpZDpudWxsLGhlYWRlcnM6e30saXNQcmV2aWV3OiExLGFuc3dlcnM6W10sY3VzdG9tTWV0YWRhdGE6e30sdmlld2VkQ2FyZENvdW50OjB9LEhlPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3VydmV5SWQsbj10LmZyYW1lLHI9dC5jYXJkcyxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5tb2RlLGY9dC5jb250ZXh0LGQ9dC5sb2NhbGUscD10LmFwaVVSTCxoPXQuc2hvd1N1cnZleUJyYW5kLHY9dC5tYXJrZXRpbmdVcmwsZz10LnNsdWdOYW1lLHk9dC5yZXNwb25zZUdyb3VwVWlkLG09dC5oZWFkZXJzLGI9dC5lbmRDYXJkLHg9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssdz10LmlzUHJldmlldyxFPXQuYW5zd2VycyxqPXQuY3VzdG9tTWV0YWRhdGEsQz10LmV4cGVyaW1lbnRGbGFncyxrPXQudXNlTW9iaWxlU3R5bGluZyxTPXQuZXZlbnRFbWl0dGVyO3JldHVybiBmdW5jdGlvbih0LE8pe3JldHVybiBEZSh7fSxPLmFkZERlY2soe2RlY2s6cixoYXNFbmRDYXJkOmJ9KSx7c3VydmV5SWQ6ZSxydW5uaW5nOiEwLGZyYW1lOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSx0aW1lb3V0OjEsbW9kZTpsLGNvbnRleHQ6Zixsb2NhbGU6ZCxhcGlVUkw6cCxzaG93U3VydmV5QnJhbmQ6aCxtYXJrZXRpbmdVcmw6dixzbHVnTmFtZTpnLHJlc3BvbnNlR3JvdXBVaWQ6eSxoZWFkZXJzOm0sZW5kQ2FyZDpiLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazp4LGlzUHJldmlldzp3LGFuc3dlcnM6RSxjdXN0b21NZXRhZGF0YTpqLGV4cGVyaW1lbnRGbGFnczpDLHVzZU1vYmlsZVN0eWxpbmc6ayxldmVudEVtaXR0ZXI6Uyx2aWV3ZWRDYXJkQ291bnQ6MH0pfX0sYWRkRGVjazpmdW5jdGlvbih0KXt2YXIgZT10LmRlY2ssbj10Lmhhc0VuZENhcmQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gRGUoe30sZSx7Q2FyZDp0LmNhcmRzW2UudHlwZV19KX0pKTtyZXR1cm4gbiYmci5wdXNoKHtDYXJkOnQuY2FyZHMudGhhbmtzfSkse2RlY2s6e2luZGV4OjAsY2FyZHM6cn19fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57aW50ZXJ2YWw6c2V0SW50ZXJ2YWwoZS5kZWR1Y3QsMWUzKX19fSxzZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7QmUodCl8fGUudHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaXNOZXc6ITB9KX19LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIUJlKHQpKXJldHVybiBlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6ImNsb3NlZCJ9KX19LHN1Ym1pdDpmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlLG49dC5yZXNwb25zZUdyb3VwVWlkLHI9dC5jb21wbGV0ZWRBdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIGksYTtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKG4mJiFCZShvKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9e3Jlc3BvbnNlR3JvdXBVaWQ6bixtZXRhOm8ubWV0YSxjdXN0b21NZXRhZGF0YTpvLmN1c3RvbU1ldGFkYXRhLHJlc3BvbnNlczpbZV0sY29tcGxldGVkQXQ6cn0sdC5uZXh0PTUsUmUoIiIuY29uY2F0KG8uYXBpVVJMLCIvc2RrLzEvZW52aXJvbm1lbnRzLyIpLmNvbmNhdChvLmVudklkLCIvdmlzaXRvcnMvIikuY29uY2F0KG8udXNlcklkLCIvcmVzcG9uc2VzL3N1Ym1pdCIpLHtib2R5OkpTT04uc3RyaW5naWZ5KGkpLGhlYWRlcnM6by5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDU6aWYoYT10LnNlbnQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksYS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFhLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyNykgRmFpbGVkIHRvIHN1Ym1pdCByZXNwb25zZSIsYS5lcnJvciksdC5uZXh0PTEyLEZlKG8sInN1Ym1pdFJlc3BvbnNlIixhLmVycm9yKTtjYXNlIDEyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVkdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGltZW91dC0xO3JldHVybiBlPD0wPyhjbGVhckludGVydmFsKHQuaW50ZXJ2YWwpLFJ0LmVuYWJsZSgpLHtydW5uaW5nOiExLGludGVydmFsOm51bGwsdGltZW91dDplfSk6e3RpbWVvdXQ6ZX19fSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPURhdGUubm93KCksbz1lLmRlY2ssaT1vLmNhcmRzLGE9by5pbmRleCxjPWlbYV0scz1jLm5hbWUsdT1jLnR5cGUsbD1lLnJlc3BvbnNlR3JvdXBVaWQsZj0ib2JqZWN0Ij09PWd0KCkodC5kYXRhKT90LmRhdGE6e3ZhbHVlOnQuZGF0YX0sZD1mLnZhbHVlO2lbYV0udmFsdWU9ZCxmLnF1ZXN0aW9uSWQ9cyxmLmFuc3dlcmVkQXQ9cjt2YXIgcD17cmVzcG9uc2U6ZixyZXNwb25zZUdyb3VwVWlkOmwsdHlwZTp1fSxoPSJtdWx0aXBsZWNob2ljZSI9PT11P09iamVjdC52YWx1ZXMoZCkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuITEhPT10fSkpOmQsdj0idmlkZW92b2ljZSIhPT11fHwhZi5kZWxldGVkQXQ7Im11bHRpcGxlc2VsZWN0Ij09PXUmJihoPWlbYV0ucHJvcHMub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbZS5pZF0mJnQucHVzaChlLnZhbHVlKSx0fSksW10pKTt2YXIgZz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2lmKGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPXRbZV0mJnRbZV0ucHJvcHMmJnRbZV0ucHJvcHMucm91dGluZ09wdGlvbnN8fFtdLGE9TWF0aC5taW4oZSsxLHQubGVuZ3RoLTEpLGM9bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sbD11LmNvbXBhcmF0b3IsZj11LnRhcmdldCxkPXUudmFsdWU7aWYoImFuc3dlcmVkIj09PWwmJm8pe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9aWYoeXRbbF0mJnl0W2xdKG4sZCkpe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9fXJldHVybiBudWxsPT09YyYmZT09PXQubGVuZ3RoLTE/bnVsbDotMT09PWM/cj90Lmxlbmd0aC0xOm51bGw6bnVsbD09PWM/YTpjfShpLGEsaCwhIXQuZW5kQ2FyZCx2KTtpZihudWxsPT09ZylyZXR1cm4gcC5jb21wbGV0ZWRBdD1yLG4uc3VibWl0KHApLHZvaWQgdC5jb21wbGV0ZVN1cnZleSgpO2lbZ10uQ2FyZD09PWUuY2FyZHMudGhhbmtzJiYocC5jb21wbGV0ZWRBdD1yKTt2YXIgeT1uLnN1Ym1pdChwKTtyZXR1cm4gaVtnXS5DYXJkIT1lLmNhcmRzLnRoYW5rcyYmeS5maW5hbGx5KChmdW5jdGlvbigpe24udHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaW5kZXg6Z30pfSkpLHt2aWV3ZWRDYXJkQ291bnQ6ZS52aWV3ZWRDYXJkQ291bnQrMSxkZWNrOntjYXJkczppLGluZGV4Omd9fX19LHRyYWNrSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5pbmRleCxyPXQuaXNOZXcsbz12b2lkIDAhPT1yJiZyO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgaSxhLGMscyx1LGw7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighQmUocikpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXIuZGVjayxhPWkuY2FyZHMsYz1pLmluZGV4LHM9dm9pZCAwIT09bj9hW25dOmFbY10sdT17c2lkOnIuc3VydmV5SWQscWlkOnMubmFtZSxhY3Rpb246ZSx2aWQ6ci51c2VySWQsZWlkOnIuZW52SWQsaXNOZXc6byxyZXNwb25zZUdyb3VwVWlkOnIucmVzcG9uc2VHcm91cFVpZH0sdC5uZXh0PTcsUmUoIiIuY29uY2F0KHIuYXBpVVJMLCIvc2RrLzEvdmlzaXRvcnMvIikuY29uY2F0KHIudXNlcklkLCIvc3VydmV5cy8iKS5jb25jYXQoci5zdXJ2ZXlJZCwiL2hpc3RvcnkiKSx7Ym9keTpKU09OLnN0cmluZ2lmeSh1KSxoZWFkZXJzOnIuaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA3OmlmKChsPXQuc2VudCkub2spe3QubmV4dD0xMzticmVha31pZighbC5yZXBvcnRFcnJvcil7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjgpIEZhaWxlZCB0byB0cmFjayBzdXJ2ZXkgZXZlbnQiLGwuZXJyb3IpLHQubmV4dD0xMyxGZShyLCJ0cmFja0hpc3RvcnkiLGwuZXJyb3IpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fTtmdW5jdGlvbiBWZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcWUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/VmUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlZlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fXZhciBXZT17aW5pdDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHFlKHt9LGUse3NlbGVjdGVkT3B0aW9uczp0fSl9fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcWUoe30sdCx7c2VsZWN0ZWRPcHRpb25zOnt9fSl9fSx1cGRhdGVTZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbCE9dCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLnNlbGVjdGVkT3B0aW9ucyk7cmV0dXJuIG5bdF09IW5bdF0scWUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOm59KX19fX07ZnVuY3Rpb24gR2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBaZT17b25UZXh0Q2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/R2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkdlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxlLHt2YWx1ZTp0fSl9fX0sJGU9InN1cnZleS5hcHBlYXJlZCIsWWU9InN1cnZleS5mYWRpbmdPdXQiLEplPSJzdXJ2ZXkud2lsbENsb3NlIixLZT17VkVSSUZZX1ZJRVdfVkVSU0lPTjoidmVyaWZ5LnZpZXcudmVyc2lvbiJ9LFhlPXtWSUVXX1ZFUlNJT046InZpZXcudmVyc2lvbiJ9LFFlPSJjbG9zZS5jbGljayIsdG49InN1cnZleS5jb21wbGV0ZWQiO2Z1bmN0aW9uIGVuKHQpe3JldHVybiJ3ZWIiIT09dFsidXNlcmxlYXAtcGxhdGZvcm0iXX1mdW5jdGlvbiBubih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIHJuPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhbWUsbj10LmNhcmRzLHI9dC5zdXJ2ZXlJZCxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5jb250ZXh0LGY9dC5sb2NhbGUsZD10LmFwaVVSTCxwPXQuc2hvd1N1cnZleUJyYW5kLGg9dC5tYXJrZXRpbmdVcmwsdj10LnNsdWdOYW1lLGc9dC5yZXNwb25zZUdyb3VwVWlkLHk9dC5oZWFkZXJzLG09dC5lbmRDYXJkLGI9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2sseD10LmlzUHJldmlldyx3PXQuYW5zd2VycyxFPXQuY3VzdG9tTWV0YWRhdGEsaj10LmV4cGVyaW1lbnRGbGFncyxDPXQudXNlTW9iaWxlU3R5bGluZyxrPXQubW9iaWxlUGxhdGZvcm0sUz10LmV2ZW50RW1pdHRlcixPPXQudmlld2VkQ2FyZENvdW50O3JldHVybiBmdW5jdGlvbih0LEEpe3ZhciBJPWVuKHkpP3dpbmRvdy5kb2N1bWVudDp3aW5kb3cucGFyZW50LmRvY3VtZW50O0EuYXBwLmluaXQoe2ZyYW1lOkkuZ2V0RWxlbWVudEJ5SWQoZSksc3VydmV5SWQ6cixjYXJkczpuLGVudklkOm8sdXNlcklkOmksbWV0YTphLGJvcmRlcjpjLGZvbnRGYW1pbHk6cyxmb250RmFtaWx5VVJMOnUsY29udGV4dDpsLGxvY2FsZTpmLGFwaVVSTDpkLHNob3dTdXJ2ZXlCcmFuZDpwLG1hcmtldGluZ1VybDpoLHNsdWdOYW1lOnYscmVzcG9uc2VHcm91cFVpZDpnLGhlYWRlcnM6eSxlbmRDYXJkOm0sY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOmIsaXNQcmV2aWV3OngsYW5zd2Vyczp3LGN1c3RvbU1ldGFkYXRhOkUsZXhwZXJpbWVudEZsYWdzOmosdXNlTW9iaWxlU3R5bGluZzpDLG1vYmlsZVBsYXRmb3JtOmssZXZlbnRFbWl0dGVyOlMsdmlld2VkQ2FyZENvdW50Ok99KSxBLmFwcC5zZWVuKCl9fSx1cGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUuYXBwLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkuY2xhc3NMaXN0O24ucnVubmluZyYmIXIuY29udGFpbnMoInVsLWFwcC0tdmlzaWJsZSIpJiYoZW4obi5oZWFkZXJzKT9yLmFkZCgidWwtYXBwLS12aXNpYmxlIik6KHIuYWRkKCJ1bC1hcHAtLW92ZXJsYXkiKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKX0pLDEwMCkpLG4uZXZlbnRFbWl0dGVyJiZuLmV2ZW50RW1pdHRlci5lbWl0KCRlKSksZW4obi5oZWFkZXJzKXx8bi5mcmFtZS5zZXRIZWlnaHQoZnVuY3Rpb24odCl7dmFyIGU9dC5xdWVyeVNlbGVjdG9yKCIuIi5jb25jYXQoJCkpO3JldHVybihlP2Uuc2Nyb2xsSGVpZ2h0OjYwMCkrKGUmJmUucGFyZW50RWxlbWVudD9lLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LWUuY2xpZW50SGVpZ2h0OjApfShkb2N1bWVudCkpfX0sZmFkZW91dDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobil7dmFyIHIsbztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHI9bi5hcHAsbz1yLmV2ZW50RW1pdHRlciwhZW4oci5oZWFkZXJzKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQ6cmV0dXJuIG8uZW1pdChZZSksZS5hYnJ1cHQoInJldHVybiIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO24uYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsKGZ1bmN0aW9uKHQpeyJvcGFjaXR5Ij09PXQucHJvcGVydHlOYW1lJiZlKCl9KSksbi5jbGFzc0xpc3QucmVtb3ZlKCJ1bC1hcHAtLXZpc2libGUiKX0pKSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbml0aWF0b3I7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQuYXBwLHI9bi5mcmFtZSxvPW4uZXZlbnRFbWl0dGVyO1siaW9zIiwiYW5kcm9pZCJdLmluY2x1ZGVzKG4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSkmJm8uZW1pdChKZSx7aW5pdGlhdG9yOmV9KSxlbihuLmhlYWRlcnMpfHwoby5lbWl0KEplLHtpbml0aWF0b3I6ZX0pLHIucmVtb3ZlKCkpfX0sY2xvc2U6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsci5hcHAuY2xvc2UoKTtjYXNlIDQ6UnQuZW5hYmxlKCksci5yZW1vdmUoe2luaXRpYXRvcjpRZX0pO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxkZXN0cm95OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuLHIpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHIuZmFkZW91dCh0KTtjYXNlIDI6UnQuZW5hYmxlKCksci5yZW1vdmUoe2luaXRpYXRvcjp0bn0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX0sb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/bm4oT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOm5uKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7YXBwOkhlLG11bHRpcGxlc2VsZWN0OldlLG9wZW5UZXh0OlplfSxybiksYW49e2FwcDp6ZSxtdWx0aXBsZXNlbGVjdDp7c2VsZWN0ZWRPcHRpb25zOnt9fSxvcGVuVGV4dDp7dmFsdWU6IiJ9fTt2YXIgY249d2luZG93Ll9fY2ZnLHNuPWNuLmZyYW1lLHVuPWNuLmVudklkLGxuPWNuLnN1cnZleUlkLGZuPWNuLnVzZXJJZCxkbj1jbi5jYXJkcyxwbj1jbi5tb2RlLGhuPWNuLmJvcmRlcix2bj12b2lkIDA9PT1obj8iIzY2NjRmNyI6aG4sZ249Y24uY29udGV4dCx5bj1jbi5sb2NhbGUsbW49Y24uZm9udEZhbWlseSxibj1jbi5mb250RmFtaWx5VVJMLHhuPWNuLmFwaVVSTCx3bj1jbi5zaG93U3VydmV5QnJhbmQsRW49Y24ubWFya2V0aW5nVXJsLGpuPWNuLnNsdWdOYW1lLENuPWNuLnJlc3BvbnNlR3JvdXBVaWQsa249Y24uaGVhZGVycyxTbj1jbi5lbmRDYXJkLE9uPWNuLmN1c3RvbVN0eWxlcyxBbj1jbi5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssSW49Y24uaXNQcmV2aWV3LE1uPWNuLmFuc3dlcnMsVG49Y24uY3VzdG9tTWV0YWRhdGEsX249Y24uZXhwZXJpbWVudEZsYWdzLExuPWNuLnVzZU1vYmlsZVN0eWxpbmcsUm49Y24ubW9iaWxlUGxhdGZvcm0sUG49Y24uZXZlbnRFbWl0dGVyLE5uPWRvY3VtZW50LmhlYWQsRG49UG58fHNuLmV2ZW50RW1pdHRlcjtEbiYmRG4uZW1pdChLZS5WRVJJRllfVklFV19WRVJTSU9OLHIoKSh7fSxYZS5WSUVXX1ZFUlNJT04sIjIuMTQuOCIpKTt2YXIgRm49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpZihGbi50eXBlPSJ0ZXh0L2NzcyIsRm4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoa3QoKSkpLE5uLmFwcGVuZENoaWxkKEZuKSxPbiYmZnVuY3Rpb24odCxlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bi50eXBlPSJ0ZXh0L2NzcyIsbi50ZXh0Q29udGVudD1lLG4uaWQ9Wix0LmhlYWQuYXBwZW5kQ2hpbGQobil9KGRvY3VtZW50LE9uKSxtbiYmYm4mJnBhcmVudCl7dmFyIFVuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtVbi5yZWw9InN0eWxlc2hlZXQiLFVuLmhyZWY9Ym4sTm4uYXBwZW5kQ2hpbGQoVW4pfXZhciBCbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgbyxpPVtdLm1hcCxhPXImJnIuY2hpbGRyZW5bMF18fG51bGwsYz1hJiZmdW5jdGlvbiB0KGUpe3JldHVybntub2RlTmFtZTplLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYXR0cmlidXRlczp7fSxjaGlsZHJlbjppLmNhbGwoZS5jaGlsZE5vZGVzLChmdW5jdGlvbihlKXtyZXR1cm4gMz09PWUubm9kZVR5cGU/ZS5ub2RlVmFsdWU6dChlKX0pKX19KGEpLHM9W10sdT0hMCxsPXYodCksZj1mdW5jdGlvbiB0KGUsbixyKXtmb3IodmFyIG8gaW4gcikiZnVuY3Rpb24iPT10eXBlb2YgcltvXT9mdW5jdGlvbih0LG8pe3JbdF09ZnVuY3Rpb24odCl7dmFyIGk9byh0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh5KGUsbCkscikpLGkmJmkhPT0obj15KGUsbCkpJiYhaS50aGVuJiZoKGw9ZyhlLHYobixpKSxsKSksaX19KG8scltvXSk6dChlLmNvbmNhdChvKSxuW29dPXYobltvXSkscltvXT12KHJbb10pKTtyZXR1cm4gcn0oW10sbCx2KGUpKTtyZXR1cm4gaCgpLGY7ZnVuY3Rpb24gZCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9kKHQobCxmKSk6bnVsbCE9dD90OiIifWZ1bmN0aW9uIHAoKXtvPSFvO3ZhciB0PWQobik7Zm9yKHImJiFvJiYoYT1DKHIsYSxjLGM9dCkpLHU9ITE7cy5sZW5ndGg7KXMucG9wKCkoKX1mdW5jdGlvbiBoKCl7b3x8KG89ITAsc2V0VGltZW91dChwKSl9ZnVuY3Rpb24gdih0LGUpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gZyh0LGUsbil7dmFyIHI9e307cmV0dXJuIHQubGVuZ3RoPyhyW3RbMF1dPXQubGVuZ3RoPjE/Zyh0LnNsaWNlKDEpLGUsblt0WzBdXSk6ZSx2KG4scikpOmV9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KWU9ZVt0W24rK11dO3JldHVybiBlfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQ/dC5rZXk6bnVsbH1mdW5jdGlvbiBiKHQpe3JldHVybiB0LmN1cnJlbnRUYXJnZXQuZXZlbnRzW3QudHlwZV0odCl9ZnVuY3Rpb24geCh0LGUsbixyLG8pe2lmKCJrZXkiPT09ZSk7ZWxzZSBpZigic3R5bGUiPT09ZSlpZigic3RyaW5nIj09dHlwZW9mIG4pdC5zdHlsZS5jc3NUZXh0PW47ZWxzZSBmb3IodmFyIGkgaW4ic3RyaW5nIj09dHlwZW9mIHImJihyPXQuc3R5bGUuY3NzVGV4dD0iIiksdihyLG4pKXt2YXIgYT1udWxsPT1ufHxudWxsPT1uW2ldPyIiOm5baV07Ii0iPT09aVswXT90LnN0eWxlLnNldFByb3BlcnR5KGksYSk6dC5zdHlsZVtpXT1hfWVsc2UibyI9PT1lWzBdJiYibiI9PT1lWzFdPyhlPWUuc2xpY2UoMiksdC5ldmVudHM/cnx8KHI9dC5ldmVudHNbZV0pOnQuZXZlbnRzPXt9LHQuZXZlbnRzW2VdPW4sbj9yfHx0LmFkZEV2ZW50TGlzdGVuZXIoZSxiKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxiKSk6ZSBpbiB0JiYibGlzdCIhPT1lJiYidHlwZSIhPT1lJiYiZHJhZ2dhYmxlIiE9PWUmJiJzcGVsbGNoZWNrIiE9PWUmJiJ0cmFuc2xhdGUiIT09ZSYmIW8/dFtlXT1udWxsPT1uPyIiOm46bnVsbCE9biYmITEhPT1uJiZ0LnNldEF0dHJpYnV0ZShlLG4pLG51bGwhPW4mJiExIT09bnx8dC5yZW1vdmVBdHRyaWJ1dGUoZSl9ZnVuY3Rpb24gdyh0LGUpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0P2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpOihlPWV8fCJzdmciPT09dC5ub2RlTmFtZSk/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdC5ub2RlTmFtZSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0Lm5vZGVOYW1lKSxyPXQuYXR0cmlidXRlcztpZihyKXtyLm9uY3JlYXRlJiZzLnB1c2goKGZ1bmN0aW9uKCl7ci5vbmNyZWF0ZShuKX0pKTtmb3IodmFyIG89MDtvPHQuY2hpbGRyZW4ubGVuZ3RoO28rKyluLmFwcGVuZENoaWxkKHcodC5jaGlsZHJlbltvXT1kKHQuY2hpbGRyZW5bb10pLGUpKTtmb3IodmFyIGkgaW4gcil4KG4saSxyW2ldLG51bGwsZSl9cmV0dXJuIG59ZnVuY3Rpb24gRSh0LGUpe3ZhciBuPWUuYXR0cmlidXRlcztpZihuKXtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKylFKHQuY2hpbGROb2Rlc1tyXSxlLmNoaWxkcmVuW3JdKTtuLm9uZGVzdHJveSYmbi5vbmRlc3Ryb3kodCl9cmV0dXJuIHR9ZnVuY3Rpb24gaih0LGUsbil7ZnVuY3Rpb24gcigpe3QucmVtb3ZlQ2hpbGQoRShlLG4pKX12YXIgbz1uLmF0dHJpYnV0ZXMmJm4uYXR0cmlidXRlcy5vbnJlbW92ZTtvP28oZSxyKTpyKCl9ZnVuY3Rpb24gQyh0LGUsbixyLG8pe2lmKHI9PT1uKTtlbHNlIGlmKG51bGw9PW58fG4ubm9kZU5hbWUhPT1yLm5vZGVOYW1lKXt2YXIgaT13KHIsbyk7dC5pbnNlcnRCZWZvcmUoaSxlKSxudWxsIT1uJiZqKHQsZSxuKSxlPWl9ZWxzZSBpZihudWxsPT1uLm5vZGVOYW1lKWUubm9kZVZhbHVlPXI7ZWxzZXshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBvIGluIHYoZSxuKSluW29dIT09KCJ2YWx1ZSI9PT1vfHwiY2hlY2tlZCI9PT1vP3Rbb106ZVtvXSkmJngodCxvLG5bb10sZVtvXSxyKTt2YXIgaT11P24ub25jcmVhdGU6bi5vbnVwZGF0ZTtpJiZzLnB1c2goKGZ1bmN0aW9uKCl7aSh0LGUpfSkpfShlLG4uYXR0cmlidXRlcyxyLmF0dHJpYnV0ZXMsbz1vfHwic3ZnIj09PXIubm9kZU5hbWUpO2Zvcih2YXIgYT17fSxjPXt9LGw9W10sZj1uLmNoaWxkcmVuLHA9ci5jaGlsZHJlbixoPTA7aDxmLmxlbmd0aDtoKyspe2xbaF09ZS5jaGlsZE5vZGVzW2hdLG51bGwhPSh5PW0oZltoXSkpJiYoYVt5XT1bbFtoXSxmW2hdXSl9aD0wO2Zvcih2YXIgZz0wO2c8cC5sZW5ndGg7KXt2YXIgeT1tKGZbaF0pLGI9bShwW2ddPWQocFtnXSkpO2lmKGNbeV0paCsrO2Vsc2UgaWYobnVsbD09Ynx8YiE9PW0oZltoKzFdKSlpZihudWxsPT1ifHx1KW51bGw9PXkmJihDKGUsbFtoXSxmW2hdLHBbZ10sbyksZysrKSxoKys7ZWxzZXt2YXIgRT1hW2JdfHxbXTt5PT09Yj8oQyhlLEVbMF0sRVsxXSxwW2ddLG8pLGgrKyk6RVswXT9DKGUsZS5pbnNlcnRCZWZvcmUoRVswXSxsW2hdKSxFWzFdLHBbZ10sbyk6QyhlLGxbaF0sbnVsbCxwW2ddLG8pLGNbYl09cFtnXSxnKyt9ZWxzZSBudWxsPT15JiZqKGUsbFtoXSxmW2hdKSxoKyt9Zm9yKDtoPGYubGVuZ3RoOyludWxsPT1tKGZbaF0pJiZqKGUsbFtoXSxmW2hdKSxoKys7Zm9yKHZhciBoIGluIGEpY1toXXx8aihlLGFbaF1bMF0sYVtoXVsxXSl9cmV0dXJuIGV9fShhbixvbixqdCxlbihrbik/d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNuKTpkb2N1bWVudC5ib2R5KTtCbi5pbml0KHtzdXJ2ZXlJZDpsbixmcmFtZTpzbixlbnZJZDp1bix1c2VySWQ6Zm4sY2FyZHM6ZG4sbW9kZTpwbixtZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGlyZWN0RW1iZWQsbj10Lm1vZGUscj12b2lkIDA9PT1uP251bGw6bixvPWU/d2luZG93OndpbmRvdy5wYXJlbnQsaT1vLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm57bW9kZTpyLHN3Om8uc2NyZWVuLndpZHRoLHNoOm8uc2NyZWVuLmhlaWdodCxjdzppLmNsaWVudFdpZHRoLGNoOmkuY2xpZW50SGVpZ2h0LHA6by5sb2NhdGlvbi5ocmVmLGw6by5uYXZpZ2F0b3IubGFuZ3VhZ2V9fSh7bW9kZTpwbixkaXJlY3RFbWJlZDplbihrbil9KSxib3JkZXI6dm4sZm9udEZhbWlseTptbixjb250ZXh0OmduLGxvY2FsZTp5bixhcGlVUkw6eG4sc2hvd1N1cnZleUJyYW5kOnduLG1hcmtldGluZ1VybDpFbixzbHVnTmFtZTpqbixyZXNwb25zZUdyb3VwVWlkOkNuLGhlYWRlcnM6a24sZW5kQ2FyZDpTbixjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6QW4saXNQcmV2aWV3OkluLGFuc3dlcnM6TW4sY3VzdG9tTWV0YWRhdGE6VG4sZXhwZXJpbWVudEZsYWdzOl9uLHVzZU1vYmlsZVN0eWxpbmc6TG4sbW9iaWxlUGxhdGZvcm06Um4sZXZlbnRFbWl0dGVyOlBufSl9KCl9KCk7';